summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/keytab.c4
-rw-r--r--client/srvtab.c13
2 files changed, 17 insertions, 0 deletions
diff --git a/client/keytab.c b/client/keytab.c
index 2d31a27..bdd0134 100644
--- a/client/keytab.c
+++ b/client/keytab.c
@@ -47,7 +47,11 @@ merge_keytab(krb5_context ctx, const char *newfile, const char *file)
status = krb5_kt_add_entry(ctx, old, &entry);
if (status != 0)
die_krb5(ctx, status, "cannot write to keytab %s", file);
+#ifdef HAVE_KRB5_KT_FREE_ENTRY
+ krb5_kt_free_entry(ctx, &entry);
+#else
krb5_free_keytab_entry_contents(ctx, &entry);
+#endif
}
if (status != KRB5_KT_END)
die_krb5(ctx, status, "error reading temporary keytab %s", newfile);
diff --git a/client/srvtab.c b/client/srvtab.c
index 0cca70d..a01026e 100644
--- a/client/srvtab.c
+++ b/client/srvtab.c
@@ -58,8 +58,13 @@ write_srvtab(krb5_context ctx, const char *srvtab, const char *principal,
ret = krb5_kt_get_entry(ctx, kt, princ, 0, ENCTYPE_DES_CBC_CRC, &entry);
if (ret != 0)
die_krb5(ctx, ret, "error reading DES key from keytab %s", keytab);
+#ifdef HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK
+ if (entry.keyblock.keyvalue.length != 8)
+ die("invalid DES key length in keytab");
+#else
if (entry.key.length != 8)
die("invalid DES key length in keytab");
+#endif
krb5_kt_close(ctx, kt);
/* Convert the principal to a Kerberos v4 principal. */
@@ -80,9 +85,17 @@ write_srvtab(krb5_context ctx, const char *srvtab, const char *principal,
length += strlen(realm);
data[length++] = '\0';
data[length++] = '\0';
+#ifdef HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK
+ memcpy(data + length, entry.keyblock.keyvalue.data, 8);
+#else
memcpy(data + length, entry.key.contents, 8);
+#endif
length += 8;
+#ifdef HAVE_KRB5_KT_FREE_ENTRY
+ krb5_kt_free_entry(ctx, &entry);
+#else
krb5_free_keytab_entry_contents(ctx, &entry);
+#endif
/* Write out the srvtab file. */
write_file(srvtab, data, length);