Changeset 745 for trunk/server/source3/libsmb/clikrb5.c
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/source3/libsmb/clikrb5.c
r596 r745 23 23 #include "includes.h" 24 24 #include "smb_krb5.h" 25 #include "authdata.h" 25 #include "../librpc/gen_ndr/krb5pac.h" 26 #include "../lib/util/asn1.h" 27 #include "libsmb/nmblib.h" 28 29 #ifndef KRB5_AUTHDATA_WIN2K_PAC 30 #define KRB5_AUTHDATA_WIN2K_PAC 128 31 #endif 32 33 #ifndef KRB5_AUTHDATA_IF_RELEVANT 34 #define KRB5_AUTHDATA_IF_RELEVANT 1 35 #endif 26 36 27 37 #ifdef HAVE_KRB5 … … 348 358 349 359 asn1_start_tag(data, ASN1_CONTEXT(2)); 350 asn1_read_OctetString(data, talloc_ autofree_context(), &edata_contents);360 asn1_read_OctetString(data, talloc_tos(), &edata_contents); 351 361 asn1_end_tag(data); 352 362 asn1_end_tag(data); … … 391 401 asn1_end_tag(data); 392 402 asn1_start_tag(data, ASN1_CONTEXT(1)); 393 asn1_read_OctetString(data, talloc_ autofree_context(), &pac_contents);403 asn1_read_OctetString(data, talloc_tos(), &pac_contents); 394 404 asn1_end_tag(data); 395 405 asn1_end_tag(data); … … 929 939 930 940 /* 931 get a kerberos5 ticket for the given service 941 get a kerberos5 ticket for the given service 932 942 */ 933 int cli_krb5_get_ticket(const char *principal, time_t time_offset, 934 DATA_BLOB *ticket, DATA_BLOB *session_key_krb5, 935 uint32 extra_ap_opts, const char *ccname, 943 int cli_krb5_get_ticket(TALLOC_CTX *mem_ctx, 944 const char *principal, time_t time_offset, 945 DATA_BLOB *ticket, DATA_BLOB *session_key_krb5, 946 uint32_t extra_ap_opts, const char *ccname, 936 947 time_t *tgs_expire, 937 948 const char *impersonate_princ_s) … … 944 955 krb5_auth_context auth_context = NULL; 945 956 krb5_enctype enc_types[] = { 946 #ifdef ENCTYPE_ARCFOUR_HMAC947 957 ENCTYPE_ARCFOUR_HMAC, 948 #endif 949 ENCTYPE_DES_CBC_MD5, 950 ENCTYPE_DES_CBC_CRC, 958 ENCTYPE_DES_CBC_MD5, 959 ENCTYPE_DES_CBC_CRC, 951 960 ENCTYPE_NULL}; 952 961 … … 954 963 retval = krb5_init_context(&context); 955 964 if (retval) { 956 DEBUG(1, ("cli_krb5_get_ticket: krb5_init_context failed (%s)\n",965 DEBUG(1, ("krb5_init_context failed (%s)\n", 957 966 error_message(retval))); 958 967 goto failed; … … 965 974 if ((retval = krb5_cc_resolve(context, ccname ? 966 975 ccname : krb5_cc_default_name(context), &ccdef))) { 967 DEBUG(1, ("cli_krb5_get_ticket:krb5_cc_default failed (%s)\n",976 DEBUG(1, ("krb5_cc_default failed (%s)\n", 968 977 error_message(retval))); 969 978 goto failed; … … 971 980 972 981 if ((retval = krb5_set_default_tgs_ktypes(context, enc_types))) { 973 DEBUG(1, ("cli_krb5_get_ticket:krb5_set_default_tgs_ktypes failed (%s)\n",982 DEBUG(1, ("krb5_set_default_tgs_ktypes failed (%s)\n", 974 983 error_message(retval))); 975 984 goto failed; 976 985 } 977 986 978 if ((retval = ads_krb5_mk_req(context, 979 &auth_context, 980 AP_OPTS_USE_SUBKEY | (krb5_flags)extra_ap_opts, 981 principal, 982 ccdef, &packet, 983 tgs_expire, 984 impersonate_princ_s))) { 987 retval = ads_krb5_mk_req(context, &auth_context, 988 AP_OPTS_USE_SUBKEY | (krb5_flags)extra_ap_opts, 989 principal, ccdef, &packet, 990 tgs_expire, impersonate_princ_s); 991 if (retval) { 985 992 goto failed; 986 993 } 987 994 988 get_krb5_smb_session_key(context, auth_context, session_key_krb5, False); 989 990 *ticket = data_blob(packet.data, packet.length); 991 992 kerberos_free_data_contents(context, &packet); 995 get_krb5_smb_session_key(mem_ctx, context, auth_context, 996 session_key_krb5, false); 997 998 *ticket = data_blob_talloc(mem_ctx, packet.data, packet.length); 999 1000 kerberos_free_data_contents(context, &packet); 993 1001 994 1002 failed: 995 1003 996 if ( context) {1004 if (context) { 997 1005 if (ccdef) 998 1006 krb5_cc_close(context, ccdef); … … 1001 1009 krb5_free_context(context); 1002 1010 } 1003 1011 1004 1012 return retval; 1005 1013 } 1006 1014 1007 bool get_krb5_smb_session_key(krb5_context context, krb5_auth_context auth_context, DATA_BLOB *session_key, bool remote) 1008 { 1015 bool get_krb5_smb_session_key(TALLOC_CTX *mem_ctx, 1016 krb5_context context, 1017 krb5_auth_context auth_context, 1018 DATA_BLOB *session_key, bool remote) 1019 { 1009 1020 krb5_keyblock *skey = NULL; 1010 1021 krb5_error_code err = 0; … … 1012 1023 1013 1024 if (remote) { 1014 err = krb5_auth_con_getremotesubkey(context, auth_context, &skey); 1025 err = krb5_auth_con_getremotesubkey(context, 1026 auth_context, &skey); 1015 1027 } else { 1016 err = krb5_auth_con_getlocalsubkey(context, auth_context, &skey); 1028 err = krb5_auth_con_getlocalsubkey(context, 1029 auth_context, &skey); 1017 1030 } 1018 1031 … … 1022 1035 } 1023 1036 1024 DEBUG(10, ("Got KRB5 session key of length %d\n", (int)KRB5_KEY_LENGTH(skey))); 1025 *session_key = data_blob(KRB5_KEY_DATA(skey), KRB5_KEY_LENGTH(skey)); 1026 dump_data_pw("KRB5 Session Key:\n", session_key->data, session_key->length); 1037 DEBUG(10, ("Got KRB5 session key of length %d\n", 1038 (int)KRB5_KEY_LENGTH(skey))); 1039 1040 *session_key = data_blob_talloc(mem_ctx, 1041 KRB5_KEY_DATA(skey), 1042 KRB5_KEY_LENGTH(skey)); 1043 dump_data_pw("KRB5 Session Key:\n", 1044 session_key->data, 1045 session_key->length); 1027 1046 1028 1047 ret = true; 1029 1048 1030 1049 done: 1031 1050 if (skey) { 1032 1051 krb5_free_keyblock(context, skey); … … 1034 1053 1035 1054 return ret; 1036 1055 } 1037 1056 1038 1057 … … 2252 2271 #else /* HAVE_KRB5 */ 2253 2272 /* this saves a few linking headaches */ 2254 int cli_krb5_get_ticket(const char *principal, time_t time_offset, 2255 DATA_BLOB *ticket, DATA_BLOB *session_key_krb5, uint32 extra_ap_opts, 2273 int cli_krb5_get_ticket(TALLOC_CTX *mem_ctx, 2274 const char *principal, time_t time_offset, 2275 DATA_BLOB *ticket, DATA_BLOB *session_key_krb5, 2276 uint32_t extra_ap_opts, 2256 2277 const char *ccname, time_t *tgs_expire, 2257 2278 const char *impersonate_princ_s) … … 2261 2282 } 2262 2283 2263 #endif 2284 bool unwrap_pac(TALLOC_CTX *mem_ctx, DATA_BLOB *auth_data, DATA_BLOB *unwrapped_pac_data) 2285 { 2286 DEBUG(0,("NO KERBEROS SUPPORT\n")); 2287 return false; 2288 } 2289 2290 #endif /* HAVE_KRB5 */
Note:
See TracChangeset
for help on using the changeset viewer.