1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-25 17:57:42 +03:00

s4/libnet: fix exporting to keytab by SPN

Fix a regression introduced by 5c5d586d3ebd40 that broke exporting
service principals by their spn with

  samba-tool exportkeytab --principal=<SPN>.

Iterating with samba_kdc_nextkey() only returns UPNs, so this can't work
with SPNs. If we want to search for a specific SPN, we have to use
samba_kdc_fetch().

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
Ralph Boehme 2016-04-17 16:28:00 +02:00 committed by Andreas Schneider
parent 35b2fb4ff3
commit deab6c6df7

View File

@ -56,10 +56,27 @@ static NTSTATUS sdb_kt_copy(TALLOC_CTX *mem_ctx,
goto done;
}
for (code = samba_kdc_firstkey(context, db_ctx, &sentry);
code == 0;
code = samba_kdc_nextkey(context, db_ctx, &sentry)) {
bool principal_found = false;
if (copy_one_principal) {
krb5_principal k5_princ;
code = smb_krb5_parse_name(context, principal, &k5_princ);
if (code != 0) {
*error_string = smb_get_krb5_error_message(context,
code,
mem_ctx);
status = NT_STATUS_UNSUCCESSFUL;
goto done;
}
code = samba_kdc_fetch(context, db_ctx, k5_princ,
SDB_F_GET_ANY, 0, &sentry);
krb5_free_principal(context, k5_princ);
} else {
code = samba_kdc_firstkey(context, db_ctx, &sentry);
}
for (; code == 0; code = samba_kdc_nextkey(context, db_ctx, &sentry)) {
int i;
code = krb5_unparse_name(context,
@ -73,17 +90,7 @@ static NTSTATUS sdb_kt_copy(TALLOC_CTX *mem_ctx,
goto done;
}
if (principal != NULL) {
int cmp;
cmp = strcmp(principal, entry_principal);
if (cmp == 0) {
principal_found = true;
}
}
if (sentry.entry.keys.len == 0 ||
(copy_one_principal && !principal_found)) {
if (sentry.entry.keys.len == 0) {
SAFE_FREE(entry_principal);
sdb_free_entry(&sentry);
sentry = (struct sdb_entry_ex) {
@ -123,7 +130,7 @@ static NTSTATUS sdb_kt_copy(TALLOC_CTX *mem_ctx,
}
}
if (principal_found) {
if (copy_one_principal) {
break;
}