Add support for parsing enterprise-names.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20223 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2007-02-15 04:17:04 +00:00
parent 203e1b7ad6
commit 1f4259cddc

View File

@@ -110,6 +110,8 @@ krb5_parse_name_flags(krb5_context context,
int n; int n;
char c; char c;
int got_realm = 0; int got_realm = 0;
int first_at = 1;
int enterprise = (flags & KRB5_PRINCIPAL_PARSE_ENTERPRISE);
*principal = NULL; *principal = NULL;
@@ -122,18 +124,24 @@ krb5_parse_name_flags(krb5_context context,
} }
#undef RFLAGS #undef RFLAGS
/* count number of component */ /* count number of component,
* enterprise names only have one component
*/
ncomp = 1; ncomp = 1;
for(p = name; *p; p++){ if (!enterprise) {
if(*p=='\\'){ for(p = name; *p; p++){
if(!p[1]) { if(*p=='\\'){
krb5_set_error_string (context, if(!p[1]) {
"trailing \\ in principal name"); krb5_set_error_string (context,
return KRB5_PARSE_MALFORMED; "trailing \\ in principal name");
} return KRB5_PARSE_MALFORMED;
p++; }
} else if(*p == '/') p++;
ncomp++; } else if(*p == '/')
ncomp++;
else if(*p == '@')
break;
}
} }
comp = calloc(ncomp, sizeof(*comp)); comp = calloc(ncomp, sizeof(*comp));
if (comp == NULL) { if (comp == NULL) {
@@ -166,7 +174,10 @@ krb5_parse_name_flags(krb5_context context,
ret = KRB5_PARSE_MALFORMED; ret = KRB5_PARSE_MALFORMED;
goto exit; goto exit;
} }
}else if(c == '/' || c == '@'){ }else if(enterprise && first_at) {
if (c == '@')
first_at = 0;
}else if((c == '/' && !enterprise) || c == '@'){
if(got_realm){ if(got_realm){
krb5_set_error_string (context, krb5_set_error_string (context,
"part after realm in principal name"); "part after realm in principal name");
@@ -241,7 +252,10 @@ krb5_parse_name_flags(krb5_context context,
ret = ENOMEM; ret = ENOMEM;
goto exit; goto exit;
} }
(*principal)->name.name_type = KRB5_NT_PRINCIPAL; if (enterprise)
(*principal)->name.name_type = KRB5_NT_ENTERPRISE_PRINCIPAL;
else
(*principal)->name.name_type = KRB5_NT_PRINCIPAL;
(*principal)->name.name_string.val = comp; (*principal)->name.name_string.val = comp;
princ_num_comp(*principal) = n; princ_num_comp(*principal) = n;
(*principal)->realm = realm; (*principal)->realm = realm;