Some cleanup.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2869 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -42,8 +42,11 @@ RCSID("$Id$");
|
|||||||
|
|
||||||
/* Public principal handling functions */
|
/* Public principal handling functions */
|
||||||
|
|
||||||
#define num_components(P) ((P)->name.name_string.len)
|
#define princ_num_comp(P) ((P)->name.name_string.len)
|
||||||
#define princ_type(P) ((P)->name.name_type)
|
#define princ_type(P) ((P)->name.name_type)
|
||||||
|
#define princ_comp(P) ((P)->name.name_string.val)
|
||||||
|
#define princ_ncomp(P, N) ((P)->name.name_string.val[(N)])
|
||||||
|
#define princ_realm(P) ((P)->realm)
|
||||||
|
|
||||||
void
|
void
|
||||||
krb5_free_principal(krb5_context context,
|
krb5_free_principal(krb5_context context,
|
||||||
@@ -139,39 +142,53 @@ krb5_parse_name(krb5_context context,
|
|||||||
*principal = malloc(sizeof(**principal));
|
*principal = malloc(sizeof(**principal));
|
||||||
(*principal)->name.name_type = KRB5_NT_PRINCIPAL;
|
(*principal)->name.name_type = KRB5_NT_PRINCIPAL;
|
||||||
(*principal)->name.name_string.val = comp;
|
(*principal)->name.name_string.val = comp;
|
||||||
num_components(*principal) = n;
|
princ_num_comp(*principal) = n;
|
||||||
(*principal)->realm = realm;
|
(*principal)->realm = realm;
|
||||||
free(s);
|
free(s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void quote_string(char *s, int len, char **out)
|
static size_t
|
||||||
|
quote_string(char *s, char **out)
|
||||||
{
|
{
|
||||||
char *q;
|
size_t len;
|
||||||
char *p = *out;
|
char *p;
|
||||||
int c=0;
|
char *tmp;
|
||||||
len = strlen(s);
|
char c = 0;
|
||||||
for(q = s; q < s + len; q++){
|
tmp = *out;
|
||||||
if(*q == '\n')
|
if(tmp)
|
||||||
|
len = strlen(tmp);
|
||||||
|
else
|
||||||
|
len = 0;
|
||||||
|
for(p = s; *p; p++){
|
||||||
|
if(*p == '\n')
|
||||||
c = 'n';
|
c = 'n';
|
||||||
else if(*q == '\t')
|
else if(*p == '\t')
|
||||||
c = 't';
|
c = 't';
|
||||||
else if(*q == '\b')
|
else if(*p == '\b')
|
||||||
c = 'b';
|
c = 'b';
|
||||||
else if(*q == '\0')
|
else if(*p == '\0')
|
||||||
c = '0';
|
c = '0';
|
||||||
else if(*q == '/')
|
else if(*p == '/')
|
||||||
c='/';
|
c='/';
|
||||||
else if(*q == '@')
|
else if(*p == '@')
|
||||||
c = '@';
|
c = '@';
|
||||||
if(c){
|
if(c){
|
||||||
*p++ = '\\';
|
tmp = realloc(tmp, len + 2);
|
||||||
*p++ = c;
|
tmp[len] = '\\';
|
||||||
|
tmp[len + 1] = c;
|
||||||
|
len += 2;
|
||||||
c = 0;
|
c = 0;
|
||||||
}else
|
}else{
|
||||||
*p++ = *q;
|
tmp = realloc(tmp, len + 1);
|
||||||
|
tmp[len] = *p;
|
||||||
|
len++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*out = p;
|
tmp = realloc(tmp, len + 1);
|
||||||
|
tmp[len] = 0;
|
||||||
|
*out = tmp;
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -180,25 +197,23 @@ krb5_unparse_name(krb5_context context,
|
|||||||
krb5_principal principal,
|
krb5_principal principal,
|
||||||
char **name)
|
char **name)
|
||||||
{
|
{
|
||||||
int size;
|
size_t len;
|
||||||
char *p;
|
|
||||||
char *s;
|
char *s;
|
||||||
int i;
|
int i;
|
||||||
int ncomp = num_components(principal);
|
int ncomp = princ_num_comp(principal);
|
||||||
size = 2 * strlen(principal->realm) + 1;
|
s = NULL;
|
||||||
for (i = 0; i < ncomp; i++)
|
for (i = 0; i < ncomp; i++){
|
||||||
size += 2 * strlen(principal->name.name_string.val[i]) + 1;
|
if(i){
|
||||||
s = malloc(size);
|
s = realloc(s, len + 1);
|
||||||
p = s;
|
s[len] = '/';
|
||||||
for(i = 0; i < ncomp; i++){
|
s[len + 1] = 0;
|
||||||
if(i) *p++ = '/';
|
}
|
||||||
quote_string(
|
len = quote_string(princ_ncomp(principal, i), &s);
|
||||||
principal->name.name_string.val[i], 0,
|
|
||||||
&p);
|
|
||||||
}
|
}
|
||||||
*p++ = '@';
|
s = realloc(s, len + 1);
|
||||||
quote_string(principal->realm, 0, &p);
|
s[len] = '@';
|
||||||
*p = 0;
|
s[len + 1] = 0;
|
||||||
|
len = quote_string(princ_realm(principal), &s);
|
||||||
*name = s;
|
*name = s;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -219,7 +234,7 @@ krb5_realm*
|
|||||||
krb5_princ_realm(krb5_context context,
|
krb5_princ_realm(krb5_context context,
|
||||||
krb5_principal principal)
|
krb5_principal principal)
|
||||||
{
|
{
|
||||||
return &principal->realm;
|
return &princ_realm(principal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -228,7 +243,7 @@ krb5_princ_set_realm(krb5_context context,
|
|||||||
krb5_principal principal,
|
krb5_principal principal,
|
||||||
krb5_realm *realm)
|
krb5_realm *realm)
|
||||||
{
|
{
|
||||||
principal->realm = *realm;
|
princ_realm(principal) = *realm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -247,61 +262,45 @@ krb5_build_principal(krb5_context context,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
static krb5_error_code
|
||||||
krb5_principal_set_component(krb5_context context, krb5_principal p,
|
append_component(krb5_context context, krb5_principal p,
|
||||||
int n, void *data, size_t len)
|
general_string comp)
|
||||||
{
|
{
|
||||||
general_string *tmp = p->name.name_string.val;
|
general_string *tmp;
|
||||||
if(num_components(p) <= n){
|
size_t len = princ_num_comp(p);
|
||||||
int s = n + 10;
|
tmp = realloc(princ_comp(p), (len + 1) * sizeof(*tmp));
|
||||||
tmp = realloc(tmp, s * sizeof(*tmp));
|
if(tmp == NULL)
|
||||||
if(!tmp)
|
return ENOMEM;
|
||||||
return ENOMEM;
|
princ_comp(p) = tmp;
|
||||||
memset(tmp + num_components(p), 0,
|
princ_ncomp(p, len) = strdup(comp);
|
||||||
(s - num_components(p)) * sizeof(*tmp));
|
princ_num_comp(p)++;
|
||||||
p->name.name_string.val = tmp;
|
|
||||||
num_components(p)= s;
|
|
||||||
}
|
|
||||||
if(p->name.name_string.val[n])
|
|
||||||
free(p->name.name_string.val[n]);
|
|
||||||
p->name.name_string.val[n] = malloc(len + 1);
|
|
||||||
strncpy(p->name.name_string.val[n], data, len);
|
|
||||||
p->name.name_string.val[n][len] = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
va_ext_princ(krb5_context context, krb5_principal p, va_list ap)
|
va_ext_princ(krb5_context context, krb5_principal p, va_list ap)
|
||||||
{
|
{
|
||||||
int n = 0;
|
|
||||||
while(1){
|
while(1){
|
||||||
char *s;
|
char *s;
|
||||||
int len;
|
int len;
|
||||||
len = va_arg(ap, int);
|
len = va_arg(ap, int);
|
||||||
if(len == 0)
|
if(len == 0)
|
||||||
break;
|
break;
|
||||||
s = va_arg(ap, char*);
|
s = va_arg(ap, char*);
|
||||||
krb5_principal_set_component(context, p, n, s, len);
|
append_component(context, p, s);
|
||||||
n++;
|
|
||||||
}
|
}
|
||||||
num_components(p) = n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
va_princ(krb5_context context, krb5_principal p, va_list ap)
|
va_princ(krb5_context context, krb5_principal p, va_list ap)
|
||||||
{
|
{
|
||||||
int n = 0;
|
|
||||||
while(1){
|
while(1){
|
||||||
char *s;
|
char *s;
|
||||||
int len;
|
|
||||||
s = va_arg(ap, char*);
|
s = va_arg(ap, char*);
|
||||||
if(s == NULL)
|
if(s == NULL)
|
||||||
break;
|
break;
|
||||||
len = strlen(s);
|
append_component(context, p, s);
|
||||||
krb5_principal_set_component(context, p, n, s, len);
|
|
||||||
n++;
|
|
||||||
}
|
}
|
||||||
num_components(p) = n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -321,7 +320,7 @@ build_principal(krb5_context context,
|
|||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
princ_type(p) = KRB5_NT_PRINCIPAL;
|
princ_type(p) = KRB5_NT_PRINCIPAL;
|
||||||
|
|
||||||
p->realm = strdup(realm);
|
princ_realm(p) = strdup(realm);
|
||||||
if(p->realm == NULL){
|
if(p->realm == NULL){
|
||||||
free(p);
|
free(p);
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
@@ -365,7 +364,6 @@ krb5_build_principal_va(krb5_context context,
|
|||||||
return build_principal(context, principal, rlen, realm, va_princ, ap);
|
return build_principal(context, principal, rlen, realm, va_princ, ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Not part of MIT K5 API */
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
krb5_build_principal_va_ext(krb5_context context,
|
krb5_build_principal_va_ext(krb5_context context,
|
||||||
krb5_principal *principal,
|
krb5_principal *principal,
|
||||||
@@ -398,13 +396,10 @@ krb5_copy_principal(krb5_context context,
|
|||||||
krb5_const_principal inprinc,
|
krb5_const_principal inprinc,
|
||||||
krb5_principal *outprinc)
|
krb5_principal *outprinc)
|
||||||
{
|
{
|
||||||
krb5_principal p;
|
krb5_principal p = malloc(sizeof(*p));
|
||||||
int i;
|
|
||||||
p = calloc(1, sizeof(*p));
|
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
copy_PrincipalName(&inprinc->name, &p->name);
|
copy_Principal(inprinc, p);
|
||||||
copy_Realm(&inprinc->realm, &p->realm);
|
|
||||||
*outprinc = p;
|
*outprinc = p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -418,11 +413,10 @@ krb5_principal_compare(krb5_context context,
|
|||||||
int i;
|
int i;
|
||||||
if(!krb5_realm_compare(context, princ1, princ2))
|
if(!krb5_realm_compare(context, princ1, princ2))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if(num_components(princ1) != num_components(princ2))
|
if(princ_num_comp(princ1) != princ_num_comp(princ2))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
for(i = 0; i < num_components(princ1); i++){
|
for(i = 0; i < princ_num_comp(princ1); i++){
|
||||||
if(strcmp(princ1->name.name_string.val[i],
|
if(strcmp(princ_ncomp(princ1, i), princ_ncomp(princ2, i)) != 0)
|
||||||
princ2->name.name_string.val[i]) != 0)
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -434,7 +428,7 @@ krb5_realm_compare(krb5_context context,
|
|||||||
krb5_const_principal princ1,
|
krb5_const_principal princ1,
|
||||||
krb5_const_principal princ2)
|
krb5_const_principal princ2)
|
||||||
{
|
{
|
||||||
return strcmp(princ1->realm, princ2->realm) == 0;
|
return strcmp(princ_realm(princ1), princ_realm(princ2)) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user