summaryrefslogtreecommitdiffstats
path: root/source3/libads
diff options
context:
space:
mode:
authorChristof Schmitt <cs@samba.org>2014-05-06 16:48:07 -0700
committerChristof Schmitt <cs@samba.org>2014-05-08 00:54:15 +0200
commita5b96ee5fb97528767fc63aa8e70a314686ee38a (patch)
treed6b87ac5ee15dd695b75b08e637b559a4239779a /source3/libads
parent7736c9693502e0359634ace325957a468a32dac3 (diff)
downloadsamba-a5b96ee5fb97528767fc63aa8e70a314686ee38a.tar.gz
samba-a5b96ee5fb97528767fc63aa8e70a314686ee38a.tar.xz
samba-a5b96ee5fb97528767fc63aa8e70a314686ee38a.zip
s3-krb5: Limit search for old kvno to 8bits
Some keytab files store the kvno only in 8bits. Limit the compare to 8bits, so that we don't miss old keys and delete them. This fixes the problem that updates to the keytab file removed all previous keys. Signed-off-by: Christof Schmitt <cs@samba.org> Reviewed-by: Simo Sorce <idra@samba.org> Autobuild-User(master): Christof Schmitt <cs@samba.org> Autobuild-Date(master): Thu May 8 00:54:15 CEST 2014 on sn-devel-104
Diffstat (limited to 'source3/libads')
-rw-r--r--source3/libads/kerberos_keytab.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/source3/libads/kerberos_keytab.c b/source3/libads/kerberos_keytab.c
index 83df0882f00..6a1ba75ac01 100644
--- a/source3/libads/kerberos_keytab.c
+++ b/source3/libads/kerberos_keytab.c
@@ -49,6 +49,7 @@ static krb5_error_code seek_and_delete_old_entries(krb5_context context,
krb5_keytab_entry kt_entry;
krb5_keytab_entry zero_kt_entry;
char *ktprinc = NULL;
+ krb5_kvno old_kvno = kvno - 1;
ZERO_STRUCT(cursor);
ZERO_STRUCT(zero_csr);
@@ -115,12 +116,14 @@ static krb5_error_code seek_and_delete_old_entries(krb5_context context,
* changes, all kerberizied sessions will 'break' until either
* the client reboots or the client's session key expires and
* they get a new session ticket with the new kvno.
+ * Some keytab files only store the kvno in 8bits, limit
+ * the compare accordingly.
*/
- if (!flush && (kt_entry.vno == kvno - 1)) {
+ if (!flush && ((kt_entry.vno & 0xff) == (old_kvno & 0xff))) {
DEBUG(5, (__location__ ": Saving previous (kvno %d) "
"entry for principal: %s.\n",
- kvno - 1, princ_s));
+ old_kvno, princ_s));
continue;
}