svn rev #23619: branches/krb5-1-8/src/lib/kadm5/srv/
tlyu@MIT.EDU
tlyu at MIT.EDU
Fri Jan 8 18:43:12 EST 2010
http://src.mit.edu/fisheye/changelog/krb5/?cs=23619
Commit By: tlyu
Log Message:
ticket: 6626
version_fixed: 1.8
status: resolved
pull up r23610 from trunk
------------------------------------------------------------------------
r23610 | ghudson | 2010-01-07 21:43:21 -0500 (Thu, 07 Jan 2010) | 10 lines
ticket: 6626
subject: Restore interoperability with 1.6 addprinc -randkey
tags: pullup
target_version: 1.8
The arcfour string-to-key operation in krb5 1.7 (or later) disagrees
with the dummy password used by the addprinc -randkey operation in
krb5 1.6's kadmin client, because it's not valid UTF-8. Recognize the
1.6 dummy password and use a random password instead.
Changed Files:
U branches/krb5-1-8/src/lib/kadm5/srv/svr_principal.c
Modified: branches/krb5-1-8/src/lib/kadm5/srv/svr_principal.c
===================================================================
--- branches/krb5-1-8/src/lib/kadm5/srv/svr_principal.c 2010-01-08 23:43:09 UTC (rev 23618)
+++ branches/krb5-1-8/src/lib/kadm5/srv/svr_principal.c 2010-01-08 23:43:12 UTC (rev 23619)
@@ -186,6 +186,32 @@
krb5_db_free(context, data);
}
+/*
+ * Set *passptr to NULL if the request looks like the first part of a krb5 1.6
+ * addprinc -randkey operation. The krb5 1.6 dummy password for these requests
+ * was invalid UTF-8, which runs afoul of the arcfour string-to-key.
+ */
+static void
+check_1_6_dummy(kadm5_principal_ent_t entry, long mask,
+ int n_ks_tuple, krb5_key_salt_tuple *ks_tuple, char **passptr)
+{
+ int i;
+ char *password = *passptr;
+
+ /* Old-style randkey operations disallowed tickets to start. */
+ if (!(mask & KADM5_ATTRIBUTES) ||
+ !(entry->attributes & KRB5_KDB_DISALLOW_ALL_TIX))
+ return;
+
+ /* The 1.6 dummy password was the octets 1..255. */
+ for (i = 0; (unsigned char) password[i] == i + 1; i++);
+ if (password[i] != '\0' || i != 255)
+ return;
+
+ /* This will make the caller use a random password instead. */
+ *passptr = NULL;
+}
+
kadm5_ret_t
kadm5_create_principal(void *server_handle,
kadm5_principal_ent_t entry, long mask,
@@ -215,6 +241,8 @@
krb5_clear_error_message(handle->context);
+ check_1_6_dummy(entry, mask, n_ks_tuple, ks_tuple, &password);
+
/*
* Argument sanity checking, and opening up the DB
*/
More information about the cvs-krb5
mailing list