Author: abartlet Date: 2005-09-10 22:25:13 +0000 (Sat, 10 Sep 2005) New Revision: 10149
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10149 Log: Update Samba4 to current lorikeet-heimdal. Andrew Bartlett Modified: branches/SAMBA_4_0/source/heimdal/lib/krb5/principal.c branches/SAMBA_4_0/source/heimdal/lib/krb5/rd_req.c Changeset: Modified: branches/SAMBA_4_0/source/heimdal/lib/krb5/principal.c =================================================================== --- branches/SAMBA_4_0/source/heimdal/lib/krb5/principal.c 2005-09-10 22:13:50 UTC (rev 10148) +++ branches/SAMBA_4_0/source/heimdal/lib/krb5/principal.c 2005-09-10 22:25:13 UTC (rev 10149) @@ -91,10 +91,16 @@ return princ_ncomp(principal, component); } -krb5_error_code +enum realm_presence { + MAY, + MUSTNOT, + MUST +}; + +static krb5_error_code parse_name(krb5_context context, const char *name, - krb5_boolean short_form, + enum realm_presence realm_presence, krb5_principal *principal) { krb5_error_code ret; @@ -186,7 +192,7 @@ *q++ = c; } if (got_realm) { - if (short_form) { + if (realm_presence == MUSTNOT) { krb5_set_error_string (context, "realm found in 'short' principal expected to be without one!"); ret = KRB5_PARSE_MALFORMED; goto exit; @@ -201,12 +207,16 @@ realm[q - start] = 0; } }else{ - if (short_form) { + if (realm_presence == MAY) { ret = krb5_get_default_realm (context, &realm); if (ret) goto exit; - } else { + } else if (realm_presence == MUSTNOT) { realm = NULL; + } else if (realm_presence == MUST) { + krb5_set_error_string (context, "realm NOT found in principal expected to be with one!"); + ret = KRB5_PARSE_MALFORMED; + goto exit; } comp[n] = malloc(q - start + 1); @@ -245,7 +255,7 @@ const char *name, krb5_principal *principal) { - return parse_name(context, name, FALSE, principal); + return parse_name(context, name, MAY, principal); } krb5_error_code KRB5_LIB_FUNCTION @@ -253,8 +263,16 @@ const char *name, krb5_principal *principal) { - return parse_name(context, name, TRUE, principal); + return parse_name(context, name, MUSTNOT, principal); } + +krb5_error_code KRB5_LIB_FUNCTION +krb5_parse_name_mustrealm(krb5_context context, + const char *name, + krb5_principal *principal) +{ + return parse_name(context, name, MUST, principal); +} static const char quotable_chars[] = " \n\t\b\\/@"; static const char replace_chars[] = " ntb\\/@"; Modified: branches/SAMBA_4_0/source/heimdal/lib/krb5/rd_req.c =================================================================== --- branches/SAMBA_4_0/source/heimdal/lib/krb5/rd_req.c 2005-09-10 22:13:50 UTC (rev 10148) +++ branches/SAMBA_4_0/source/heimdal/lib/krb5/rd_req.c 2005-09-10 22:25:13 UTC (rev 10149) @@ -560,13 +560,16 @@ krb5_keytab keytab, krb5_flags *ap_req_options, krb5_ticket **ticket, - krb5_keyblock **keyblock) + krb5_keyblock **return_keyblock) { krb5_error_code ret; krb5_ap_req ap_req; + krb5_keyblock *keyblock = NULL; krb5_principal service = NULL; - krb5_keyblock *local_keyblock; + if (return_keyblock) + *return_keyblock = NULL; + if (*auth_context == NULL) { ret = krb5_auth_con_init(context, auth_context); if (ret) @@ -597,13 +600,13 @@ &ap_req, server, keytab, - &local_keyblock); + &keyblock); if(ret) goto out; } else { ret = krb5_copy_keyblock(context, (*auth_context)->keyblock, - &local_keyblock); + &keyblock); if (ret) goto out; } @@ -612,21 +615,20 @@ auth_context, &ap_req, server, - local_keyblock, + keyblock, 0, ap_req_options, ticket); - if (ret) { - krb5_free_keyblock(context, local_keyblock); - } else { - *keyblock = local_keyblock; - } + if (ret == 0 && return_keyblock) + *return_keyblock = keyblock; + else + krb5_free_keyblock(context, keyblock); + out: free_AP_REQ(&ap_req); if(service) krb5_free_principal(context, service); - return ret; } @@ -639,19 +641,14 @@ krb5_flags *ap_req_options, krb5_ticket **ticket) { - krb5_error_code ret; - krb5_keyblock *keyblock; + return krb5_rd_req_return_keyblock(context, + auth_context, + inbuf, + server, + keytab, + ap_req_options, + ticket, + NULL); - ret = krb5_rd_req_return_keyblock(context, - auth_context, - inbuf, - server, - keytab, - ap_req_options, - ticket, - &keyblock); - - krb5_free_keyblock(context, keyblock); - return ret; }
