Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source3/libsmb/clikrb5.c

    r596 r745  
    2323#include "includes.h"
    2424#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
    2636
    2737#ifdef HAVE_KRB5
     
    348358       
    349359        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);
    351361        asn1_end_tag(data);
    352362        asn1_end_tag(data);
     
    391401        asn1_end_tag(data);
    392402        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);
    394404        asn1_end_tag(data);
    395405        asn1_end_tag(data);
     
    929939
    930940/*
    931   get a kerberos5 ticket for the given service 
     941  get a kerberos5 ticket for the given service
    932942*/
    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,
     943int 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,
    936947                        time_t *tgs_expire,
    937948                        const char *impersonate_princ_s)
     
    944955        krb5_auth_context auth_context = NULL;
    945956        krb5_enctype enc_types[] = {
    946 #ifdef ENCTYPE_ARCFOUR_HMAC
    947957                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,
    951960                ENCTYPE_NULL};
    952961
     
    954963        retval = krb5_init_context(&context);
    955964        if (retval) {
    956                 DEBUG(1,("cli_krb5_get_ticket: krb5_init_context failed (%s)\n",
     965                DEBUG(1, ("krb5_init_context failed (%s)\n",
    957966                         error_message(retval)));
    958967                goto failed;
     
    965974        if ((retval = krb5_cc_resolve(context, ccname ?
    966975                        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",
    968977                         error_message(retval)));
    969978                goto failed;
     
    971980
    972981        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",
    974983                         error_message(retval)));
    975984                goto failed;
    976985        }
    977986
    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) {
    985992                goto failed;
    986993        }
    987994
    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);
    9931001
    9941002failed:
    9951003
    996         if ( context ) {
     1004        if (context) {
    9971005                if (ccdef)
    9981006                        krb5_cc_close(context, ccdef);
     
    10011009                krb5_free_context(context);
    10021010        }
    1003                
     1011
    10041012        return retval;
    10051013}
    10061014
    1007  bool get_krb5_smb_session_key(krb5_context context, krb5_auth_context auth_context, DATA_BLOB *session_key, bool remote)
    1008  {
     1015bool 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{
    10091020        krb5_keyblock *skey = NULL;
    10101021        krb5_error_code err = 0;
     
    10121023
    10131024        if (remote) {
    1014                 err = krb5_auth_con_getremotesubkey(context, auth_context, &skey);
     1025                err = krb5_auth_con_getremotesubkey(context,
     1026                                                    auth_context, &skey);
    10151027        } else {
    1016                 err = krb5_auth_con_getlocalsubkey(context, auth_context, &skey);
     1028                err = krb5_auth_con_getlocalsubkey(context,
     1029                                                   auth_context, &skey);
    10171030        }
    10181031
     
    10221035        }
    10231036
    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);
    10271046
    10281047        ret = true;
    10291048
    1030  done:
     1049done:
    10311050        if (skey) {
    10321051                krb5_free_keyblock(context, skey);
     
    10341053
    10351054        return ret;
    1036  }
     1055}
    10371056
    10381057
     
    22522271#else /* HAVE_KRB5 */
    22532272 /* 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,
    22562277                        const char *ccname, time_t *tgs_expire,
    22572278                        const char *impersonate_princ_s)
     
    22612282}
    22622283
    2263 #endif
     2284bool 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.