aboutsummaryrefslogtreecommitdiff
path: root/client/srvtab.c
diff options
context:
space:
mode:
authorRuss Allbery <rra@stanford.edu>2010-02-08 19:41:27 -0800
committerRuss Allbery <rra@stanford.edu>2010-02-08 19:41:27 -0800
commitb093893870d56cd460b16645496ec6c30c62a02f (patch)
tree9867d49c01ce40ce1ae8d34e5077892ee96788db /client/srvtab.c
parent9578292176bef1e1d71cdecd9c2b8d797f6586de (diff)
Initial port to Heimdal
Just get the client code to compile with Heimdal. This will need more work later to use my regular Kerberos portability layer.
Diffstat (limited to 'client/srvtab.c')
-rw-r--r--client/srvtab.c13
1 files changed, 13 insertions, 0 deletions
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);