diff options
author | Simo Sorce <idra@samba.org> | 2012-03-31 22:09:22 -0400 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2012-04-12 12:06:43 +0200 |
commit | 70c303a7f357b2c73955b24128ac8a72b656d4e6 (patch) | |
tree | f87c92753e56bee1b274a20444f80f53e64ee0c0 /auth/kerberos/kerberos_pac.c | |
parent | 3fd6deda7d440b579950ab6d0e2407d755ac70ad (diff) | |
download | samba-70c303a7f357b2c73955b24128ac8a72b656d4e6.tar.gz samba-70c303a7f357b2c73955b24128ac8a72b656d4e6.tar.bz2 samba-70c303a7f357b2c73955b24128ac8a72b656d4e6.zip |
auth-krb: Move pac related util functions in a single place.
Signed-off-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'auth/kerberos/kerberos_pac.c')
-rw-r--r-- | auth/kerberos/kerberos_pac.c | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/auth/kerberos/kerberos_pac.c b/auth/kerberos/kerberos_pac.c index 5155c9fd28..eacf39d321 100644 --- a/auth/kerberos/kerberos_pac.c +++ b/auth/kerberos/kerberos_pac.c @@ -26,7 +26,7 @@ #ifdef HAVE_KRB5 #include "librpc/gen_ndr/ndr_krb5pac.h" -#include "libcli/auth/krb5_wrap.h" +#include "auth/kerberos/pac_utils.h" krb5_error_code check_pac_checksum(DATA_BLOB pac_data, struct PAC_SIGNATURE_DATA *sig, @@ -36,8 +36,18 @@ krb5_error_code check_pac_checksum(DATA_BLOB pac_data, krb5_error_code ret; krb5_checksum cksum; krb5_keyusage usage = 0; - - smb_krb5_checksum_from_pac_sig(&cksum, sig); + krb5_boolean checksum_valid = false; + krb5_data input; + +#ifdef HAVE_CHECKSUM_IN_KRB5_CHECKSUM /* Heimdal */ + cksum.cksumtype = (krb5_cksumtype)sig->type; + cksum.checksum.length = sig->signature.length; + cksum.checksum.data = sig->signature.data; +#else /* MIT */ + cksum.checksum_type = (krb5_cksumtype)sig->type; + cksum.length = sig->signature.length; + cksum.contents = sig->signature.data; +#endif #ifdef HAVE_KRB5_KU_OTHER_CKSUM /* Heimdal */ usage = KRB5_KU_OTHER_CKSUM; @@ -47,14 +57,19 @@ krb5_error_code check_pac_checksum(DATA_BLOB pac_data, #error UNKNOWN_KRB5_KEYUSAGE #endif - ret = smb_krb5_verify_checksum(context, - keyblock, - usage, - &cksum, - pac_data.data, - pac_data.length); - - if (ret) { + input.data = (char *)pac_data.data; + input.length = pac_data.length; + + ret = krb5_c_verify_checksum(context, + keyblock, + usage, + &input, + &cksum, + &checksum_valid); + if (!checksum_valid) { + ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; + } + if (ret){ DEBUG(2,("check_pac_checksum: PAC Verification failed: %s (%d)\n", error_message(ret), ret)); return ret; |