Remove non ASN.1 principal code.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2354 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
16
admin/ank.c
16
admin/ank.c
@@ -30,19 +30,11 @@ doit(char *principal, int mod)
|
|||||||
krb5_realm *realm;
|
krb5_realm *realm;
|
||||||
|
|
||||||
realm = krb5_princ_realm(context, ent.principal);
|
realm = krb5_princ_realm(context, ent.principal);
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
krb5_build_principal(context, &def.principal,
|
krb5_build_principal(context, &def.principal,
|
||||||
strlen(*realm),
|
strlen(*realm),
|
||||||
*realm,
|
*realm,
|
||||||
"default",
|
"default",
|
||||||
NULL);
|
NULL);
|
||||||
#else
|
|
||||||
krb5_build_principal(context, &def.principal,
|
|
||||||
realm->length,
|
|
||||||
realm->data,
|
|
||||||
"default",
|
|
||||||
NULL);
|
|
||||||
#endif
|
|
||||||
if(db->fetch(context, db, &def)){
|
if(db->fetch(context, db, &def)){
|
||||||
/* XXX */
|
/* XXX */
|
||||||
}
|
}
|
||||||
@@ -103,19 +95,11 @@ doit(char *principal, int mod)
|
|||||||
{
|
{
|
||||||
krb5_realm *realm = krb5_princ_realm(context, ent.principal);
|
krb5_realm *realm = krb5_princ_realm(context, ent.principal);
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
krb5_build_principal(context, &ent.changed_by,
|
krb5_build_principal(context, &ent.changed_by,
|
||||||
strlen(*realm),
|
strlen(*realm),
|
||||||
*realm,
|
*realm,
|
||||||
"kadmin",
|
"kadmin",
|
||||||
NULL);
|
NULL);
|
||||||
#else
|
|
||||||
krb5_build_principal(context, &ent.changed_by,
|
|
||||||
krb5_princ_realm(context, ent.principal)->length,
|
|
||||||
krb5_princ_realm(context, ent.principal)->data,
|
|
||||||
"kadmin",
|
|
||||||
NULL);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
err = db->store(context, db, &ent);
|
err = db->store(context, db, &ent);
|
||||||
if(err == -1){
|
if(err == -1){
|
||||||
|
@@ -89,32 +89,18 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
err = krb5_build_principal_ext (context,
|
err = krb5_build_principal_ext (context,
|
||||||
&server,
|
&server,
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
strlen(principal->realm),
|
strlen(principal->realm),
|
||||||
principal->realm,
|
principal->realm,
|
||||||
#else
|
|
||||||
principal->realm.length,
|
|
||||||
principal->realm.data,
|
|
||||||
#endif
|
|
||||||
strlen("krbtgt"),
|
strlen("krbtgt"),
|
||||||
"krbtgt",
|
"krbtgt",
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
strlen(principal->realm),
|
strlen(principal->realm),
|
||||||
principal->realm,
|
principal->realm,
|
||||||
#else
|
|
||||||
principal->realm.length,
|
|
||||||
principal->realm.data,
|
|
||||||
#endif
|
|
||||||
NULL);
|
NULL);
|
||||||
if (err)
|
if (err)
|
||||||
errx (1, "krb5_build_principal_ext: %s",
|
errx (1, "krb5_build_principal_ext: %s",
|
||||||
krb5_get_err_text(context, err));
|
krb5_get_err_text(context, err));
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
server->name.name_type = KRB5_NT_SRV_INST;
|
server->name.name_type = KRB5_NT_SRV_INST;
|
||||||
#else
|
|
||||||
server->type = KRB5_NT_SRV_INST;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
cred.client = principal;
|
cred.client = principal;
|
||||||
cred.server = server;
|
cred.server = server;
|
||||||
|
@@ -9,11 +9,7 @@ hdb_principal2key(krb5_context context, krb5_principal p, krb5_data *key)
|
|||||||
krb5_principal new;
|
krb5_principal new;
|
||||||
|
|
||||||
krb5_copy_principal(context, p, &new);
|
krb5_copy_principal(context, p, &new);
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
new->name.name_type = 0;
|
new->name.name_type = 0;
|
||||||
#else
|
|
||||||
new->type = 0;
|
|
||||||
#endif
|
|
||||||
sp = krb5_storage_emem();
|
sp = krb5_storage_emem();
|
||||||
krb5_store_principal(sp, new);
|
krb5_store_principal(sp, new);
|
||||||
krb5_storage_to_data(sp, key);
|
krb5_storage_to_data(sp, key);
|
||||||
|
@@ -10,21 +10,7 @@ krb5_error_code
|
|||||||
krb5_principal2principalname (PrincipalName *p,
|
krb5_principal2principalname (PrincipalName *p,
|
||||||
const krb5_principal from)
|
const krb5_principal from)
|
||||||
{
|
{
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
copy_PrincipalName(&from->name, p);
|
copy_PrincipalName(&from->name, p);
|
||||||
#else
|
|
||||||
int i;
|
|
||||||
|
|
||||||
p->name_type = from->type;
|
|
||||||
p->name_string.len = from->ncomp;
|
|
||||||
p->name_string.val = malloc(from->ncomp * sizeof(*p->name_string.val));
|
|
||||||
for (i = 0; i < from->ncomp; ++i) {
|
|
||||||
int len = from->comp[i].length;
|
|
||||||
p->name_string.val[i] = malloc(len + 1);
|
|
||||||
strncpy (p->name_string.val[i], from->comp[i].data, len);
|
|
||||||
p->name_string.val[i][len] = '\0';
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,22 +20,8 @@ principalname2krb5_principal (krb5_principal *principal,
|
|||||||
const Realm realm)
|
const Realm realm)
|
||||||
{
|
{
|
||||||
krb5_principal p = malloc(sizeof(*p));
|
krb5_principal p = malloc(sizeof(*p));
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
copy_PrincipalName(&from, &p->name);
|
copy_PrincipalName(&from, &p->name);
|
||||||
p->realm = strdup(realm);
|
p->realm = strdup(realm);
|
||||||
#else
|
|
||||||
int i;
|
|
||||||
p->type = from.name_type;
|
|
||||||
p->ncomp = from.name_string.len;
|
|
||||||
p->comp = malloc (p->ncomp * sizeof(*p->comp));
|
|
||||||
for (i = 0; i < p->ncomp; ++i) {
|
|
||||||
int len = strlen(from.name_string.val[i]);
|
|
||||||
p->comp[i].length = len;
|
|
||||||
p->comp[i].data = strdup(from.name_string.val[i]);
|
|
||||||
}
|
|
||||||
p->realm.data = strdup(realm);
|
|
||||||
p->realm.length = strlen(realm);
|
|
||||||
#endif
|
|
||||||
*principal = p;
|
*principal = p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -20,16 +20,8 @@ krb5_build_ap_req (krb5_context context,
|
|||||||
ap.ap_options.mutual_required = (ap_options & AP_OPTS_MUTUAL_REQUIRED) > 0;
|
ap.ap_options.mutual_required = (ap_options & AP_OPTS_MUTUAL_REQUIRED) > 0;
|
||||||
|
|
||||||
ap.ticket.tkt_vno = 5;
|
ap.ticket.tkt_vno = 5;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
copy_Realm(&cred->server->realm, &ap.ticket.realm);
|
copy_Realm(&cred->server->realm, &ap.ticket.realm);
|
||||||
copy_PrincipalName(&cred->server->name, &ap.ticket.sname);
|
copy_PrincipalName(&cred->server->name, &ap.ticket.sname);
|
||||||
#else
|
|
||||||
ap.ticket.realm = malloc(cred->server->realm.length + 1);
|
|
||||||
strncpy(ap.ticket.realm, cred->server->realm.data,
|
|
||||||
cred->server->realm.length);
|
|
||||||
ap.ticket.realm[cred->server->realm.length] = '\0';
|
|
||||||
krb5_principal2principalname(&ap.ticket.sname, cred->server);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
decode_Ticket(cred->ticket.data, cred->ticket.length, &t, &len);
|
decode_Ticket(cred->ticket.data, cred->ticket.length, &t, &len);
|
||||||
copy_EncryptedData(&t.enc_part, &ap.ticket.enc_part);
|
copy_EncryptedData(&t.enc_part, &ap.ticket.enc_part);
|
||||||
|
@@ -18,15 +18,8 @@ krb5_build_authenticator (krb5_context context,
|
|||||||
unsigned seq_number;
|
unsigned seq_number;
|
||||||
|
|
||||||
auth->authenticator_vno = 5;
|
auth->authenticator_vno = 5;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
copy_Realm(&cred->client->realm, &auth->crealm);
|
copy_Realm(&cred->client->realm, &auth->crealm);
|
||||||
copy_PrincipalName(&cred->client->name, &auth->cname);
|
copy_PrincipalName(&cred->client->name, &auth->cname);
|
||||||
#else
|
|
||||||
auth->crealm = malloc(cred->client->realm.length + 1);
|
|
||||||
strncpy(auth->crealm, cred->client->realm.data, cred->client->realm.length);
|
|
||||||
auth->crealm[cred->client->realm.length] = '\0';
|
|
||||||
krb5_principal2principalname(&auth->cname, cred->client);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
auth->cusec = tv.tv_usec;
|
auth->cusec = tv.tv_usec;
|
||||||
|
@@ -79,19 +79,9 @@ krb5_get_credentials (krb5_context context,
|
|||||||
flags.i = options;
|
flags.i = options;
|
||||||
a.req_body.kdc_options = flags.b;
|
a.req_body.kdc_options = flags.b;
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
copy_Realm(&in_creds->server->realm, &a.req_body.realm);
|
copy_Realm(&in_creds->server->realm, &a.req_body.realm);
|
||||||
a.req_body.sname = malloc(sizeof(*a.req_body.sname));
|
a.req_body.sname = malloc(sizeof(*a.req_body.sname));
|
||||||
copy_PrincipalName(&in_creds->server->name, a.req_body.sname);
|
copy_PrincipalName(&in_creds->server->name, a.req_body.sname);
|
||||||
#else
|
|
||||||
a.req_body.realm = malloc(in_creds->server->realm.length + 1);
|
|
||||||
strncpy (a.req_body.realm, in_creds->server->realm.data,
|
|
||||||
in_creds->server->realm.length);
|
|
||||||
a.req_body.realm[in_creds->server->realm.length] = '\0';
|
|
||||||
|
|
||||||
a.req_body.sname = malloc(sizeof(*a.req_body.sname));
|
|
||||||
krb5_principal2principalname(a.req_body.sname, in_creds->server);
|
|
||||||
#endif
|
|
||||||
a.req_body.from = NULL;
|
a.req_body.from = NULL;
|
||||||
a.req_body.till = in_creds->times.endtime;
|
a.req_body.till = in_creds->times.endtime;
|
||||||
a.req_body.rtime = NULL;
|
a.req_body.rtime = NULL;
|
||||||
|
@@ -186,14 +186,7 @@ krb5_get_in_tkt(krb5_context context,
|
|||||||
a.req_body.sname = malloc(sizeof(*a.req_body.sname));
|
a.req_body.sname = malloc(sizeof(*a.req_body.sname));
|
||||||
krb5_principal2principalname (a.req_body.cname, creds->client);
|
krb5_principal2principalname (a.req_body.cname, creds->client);
|
||||||
krb5_principal2principalname (a.req_body.sname, creds->server);
|
krb5_principal2principalname (a.req_body.sname, creds->server);
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
copy_Realm(&creds->client->realm, &a.req_body.realm);
|
copy_Realm(&creds->client->realm, &a.req_body.realm);
|
||||||
#else
|
|
||||||
a.req_body.realm = malloc(creds->client->realm.length + 1);
|
|
||||||
strncpy (a.req_body.realm, creds->client->realm.data,
|
|
||||||
creds->client->realm.length);
|
|
||||||
a.req_body.realm[creds->client->realm.length] = '\0';
|
|
||||||
#endif
|
|
||||||
|
|
||||||
a.req_body.till = creds->times.endtime;
|
a.req_body.till = creds->times.endtime;
|
||||||
krb5_generate_random_block (&a.req_body.nonce, sizeof(a.req_body.nonce));
|
krb5_generate_random_block (&a.req_body.nonce, sizeof(a.req_body.nonce));
|
||||||
|
@@ -205,7 +205,6 @@ krb5_kt_ret_principal(krb5_storage *sp,
|
|||||||
|
|
||||||
ret = krb5_ret_int16(sp, &tmp);
|
ret = krb5_ret_int16(sp, &tmp);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
p->name.name_type = KRB5_NT_SRV_HST;
|
p->name.name_type = KRB5_NT_SRV_HST;
|
||||||
p->name.name_string.len = tmp;
|
p->name.name_string.len = tmp;
|
||||||
ret = krb5_kt_ret_string(sp, &p->realm);
|
ret = krb5_kt_ret_string(sp, &p->realm);
|
||||||
@@ -218,20 +217,6 @@ krb5_kt_ret_principal(krb5_storage *sp,
|
|||||||
ret = krb5_kt_ret_string(sp, p->name.name_string.val + i);
|
ret = krb5_kt_ret_string(sp, p->name.name_string.val + i);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
p->type = KRB5_NT_SRV_HST;
|
|
||||||
p->ncomp = tmp;
|
|
||||||
ret = krb5_kt_ret_data(sp, &p->realm);
|
|
||||||
if(ret) return ret;
|
|
||||||
p->comp = ALLOC(p->ncomp, krb5_data);
|
|
||||||
if(p->comp == NULL){
|
|
||||||
return ENOMEM;
|
|
||||||
}
|
|
||||||
for(i = 0; i < p->ncomp; i++){
|
|
||||||
ret = krb5_kt_ret_data(sp, &p->comp[i]);
|
|
||||||
if(ret) return ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
*princ = p;
|
*princ = p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -305,7 +290,6 @@ krb5_kt_store_principal(krb5_storage *sp,
|
|||||||
int ret;
|
int ret;
|
||||||
int16_t tmp;
|
int16_t tmp;
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
ret = krb5_store_int16(sp, p->name.name_string.len);
|
ret = krb5_store_int16(sp, p->name.name_string.len);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
ret = krb5_kt_store_string(sp, p->realm);
|
ret = krb5_kt_store_string(sp, p->realm);
|
||||||
@@ -314,16 +298,6 @@ krb5_kt_store_principal(krb5_storage *sp,
|
|||||||
ret = krb5_kt_store_string(sp, p->name.name_string.val[i]);
|
ret = krb5_kt_store_string(sp, p->name.name_string.val[i]);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
ret = krb5_store_int16(sp, p->ncomp);
|
|
||||||
if(ret) return ret;
|
|
||||||
ret = krb5_kt_store_data(sp, p->realm);
|
|
||||||
if(ret) return ret;
|
|
||||||
for(i = 0; i < p->ncomp; i++){
|
|
||||||
ret = krb5_kt_store_data(sp, p->comp[i]);
|
|
||||||
if(ret) return ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,11 +327,7 @@ krb5_kt_add_entry(krb5_context context,
|
|||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
ret = krb5_kt_store_principal (sp, entry->principal);
|
ret = krb5_kt_store_principal (sp, entry->principal);
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
ret = krb5_store_int32 (sp, entry->principal->name.name_type);
|
ret = krb5_store_int32 (sp, entry->principal->name.name_type);
|
||||||
#else
|
|
||||||
ret = krb5_store_int32 (sp, entry->principal->type);
|
|
||||||
#endif
|
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
ret = krb5_store_int32 (sp, time(NULL));
|
ret = krb5_store_int32 (sp, time(NULL));
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
@@ -389,12 +359,8 @@ krb5_kt_next_entry(krb5_context context,
|
|||||||
ret = krb5_kt_ret_principal (cursor->sp, &entry->principal);
|
ret = krb5_kt_ret_principal (cursor->sp, &entry->principal);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
ret = krb5_ret_int32(cursor->sp, &tmp32);
|
ret = krb5_ret_int32(cursor->sp, &tmp32);
|
||||||
entry->principal->name.name_type = tmp32;
|
entry->principal->name.name_type = tmp32;
|
||||||
#else
|
|
||||||
ret = krb5_ret_int32(cursor->sp, &entry->principal->type);
|
|
||||||
#endif
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = krb5_ret_int32(cursor->sp, &tmp32);
|
ret = krb5_ret_int32(cursor->sp, &tmp32);
|
||||||
|
@@ -137,25 +137,10 @@ typedef struct krb5_ccache_data *krb5_ccache;
|
|||||||
|
|
||||||
typedef struct krb5_context_data *krb5_context;
|
typedef struct krb5_context_data *krb5_context;
|
||||||
|
|
||||||
#define USE_ASN1_PRINCIPAL
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
typedef Realm krb5_realm;
|
typedef Realm krb5_realm;
|
||||||
typedef Principal krb5_principal_data;
|
typedef Principal krb5_principal_data;
|
||||||
typedef struct Principal *krb5_principal;
|
typedef struct Principal *krb5_principal;
|
||||||
typedef const struct Principal *krb5_const_principal;
|
typedef const struct Principal *krb5_const_principal;
|
||||||
#else
|
|
||||||
typedef krb5_data krb5_realm;
|
|
||||||
typedef struct krb5_principal_data{
|
|
||||||
int type;
|
|
||||||
krb5_realm realm;
|
|
||||||
krb5_data *comp;
|
|
||||||
int ncomp;
|
|
||||||
}krb5_principal_data;
|
|
||||||
|
|
||||||
typedef krb5_principal_data *krb5_principal;
|
|
||||||
typedef const krb5_principal_data *krb5_const_principal;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
typedef time_t krb5_time;
|
typedef time_t krb5_time;
|
||||||
|
|
||||||
|
@@ -15,13 +15,7 @@ krb5_get_krbhst (krb5_context context,
|
|||||||
krb5_boolean done;
|
krb5_boolean done;
|
||||||
char **tmp;
|
char **tmp;
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
r = *realm;
|
r = *realm;
|
||||||
#else
|
|
||||||
r = malloc (realm->length + 1);
|
|
||||||
strncpy (r, realm->data, realm->length);
|
|
||||||
r[realm->length] = '\0';
|
|
||||||
#endif
|
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
max = 10;
|
max = 10;
|
||||||
@@ -62,9 +56,6 @@ krb5_get_krbhst (krb5_context context,
|
|||||||
}
|
}
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
#ifndef USE_ASN1_PRINCIPAL
|
|
||||||
free (r);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* There should always be room for the NULL here */
|
/* There should always be room for the NULL here */
|
||||||
res[count++] = NULL;
|
res[count++] = NULL;
|
||||||
|
@@ -27,11 +27,7 @@ krb5_mk_error(krb5_context context,
|
|||||||
msg.e_text = (general_string*)&e_text;
|
msg.e_text = (general_string*)&e_text;
|
||||||
if (e_data)
|
if (e_data)
|
||||||
msg.e_data = (octet_string*)e_data;
|
msg.e_data = (octet_string*)e_data;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
msg.realm = server->realm;
|
msg.realm = server->realm;
|
||||||
#else
|
|
||||||
msg.realm = server->realm.data;
|
|
||||||
#endif
|
|
||||||
msg.sname = server->name;
|
msg.sname = server->name;
|
||||||
if(client){
|
if(client){
|
||||||
msg.crealm = &client->realm;
|
msg.crealm = &client->realm;
|
||||||
|
@@ -4,27 +4,14 @@ RCSID("$Id$");
|
|||||||
|
|
||||||
/* Public principal handling functions */
|
/* Public principal handling functions */
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
#define num_components(P) ((P)->name.name_string.len)
|
#define num_components(P) ((P)->name.name_string.len)
|
||||||
#define princ_type(P) ((P)->name.name_type)
|
#define princ_type(P) ((P)->name.name_type)
|
||||||
#else
|
|
||||||
#define num_components(P) ((P)->ncomp)
|
|
||||||
#define princ_type(P) ((P)->type)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
krb5_free_principal(krb5_context context,
|
krb5_free_principal(krb5_context context,
|
||||||
krb5_principal p)
|
krb5_principal p)
|
||||||
{
|
{
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
free_Principal(p);
|
free_Principal(p);
|
||||||
#else
|
|
||||||
int i;
|
|
||||||
for(i = 0; i < num_components(p); i++)
|
|
||||||
krb5_data_free(&p->comp[i]);
|
|
||||||
free(p->comp);
|
|
||||||
krb5_data_free(&p->realm);
|
|
||||||
#endif
|
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,13 +21,8 @@ krb5_parse_name(krb5_context context,
|
|||||||
krb5_principal *principal)
|
krb5_principal *principal)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
general_string *comp;
|
general_string *comp;
|
||||||
general_string realm;
|
general_string realm;
|
||||||
#else
|
|
||||||
krb5_data *comp;
|
|
||||||
krb5_data realm;
|
|
||||||
#endif
|
|
||||||
int ncomp;
|
int ncomp;
|
||||||
|
|
||||||
char *p;
|
char *p;
|
||||||
@@ -62,11 +44,7 @@ krb5_parse_name(krb5_context context,
|
|||||||
} else if(*p == '/')
|
} else if(*p == '/')
|
||||||
ncomp++;
|
ncomp++;
|
||||||
}
|
}
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
comp = calloc(ncomp, sizeof(*comp));
|
comp = calloc(ncomp, sizeof(*comp));
|
||||||
#else
|
|
||||||
comp = ALLOC(ncomp, krb5_data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
start = q = p = s = strdup(name);
|
start = q = p = s = strdup(name);
|
||||||
@@ -86,25 +64,15 @@ krb5_parse_name(krb5_context context,
|
|||||||
if(got_realm){
|
if(got_realm){
|
||||||
exit:
|
exit:
|
||||||
while(n>0){
|
while(n>0){
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
free(comp[--n]);
|
free(comp[--n]);
|
||||||
#else
|
|
||||||
free(comp[--n].data);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
free(comp);
|
free(comp);
|
||||||
free(s);
|
free(s);
|
||||||
return KRB5_PARSE_MALFORMED;
|
return KRB5_PARSE_MALFORMED;
|
||||||
}else{
|
}else{
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
comp[n] = malloc(q - start + 1);
|
comp[n] = malloc(q - start + 1);
|
||||||
strncpy(comp[n], start, q - start);
|
strncpy(comp[n], start, q - start);
|
||||||
comp[n][q - start] = 0;
|
comp[n][q - start] = 0;
|
||||||
#else
|
|
||||||
comp[n].length = q - start;
|
|
||||||
comp[n].data = (krb5_pointer)malloc(comp[n].length);
|
|
||||||
memmove(comp[n].data, start, comp[n].length);
|
|
||||||
#endif
|
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
if(c == '@')
|
if(c == '@')
|
||||||
@@ -117,37 +85,20 @@ krb5_parse_name(krb5_context context,
|
|||||||
*q++ = c;
|
*q++ = c;
|
||||||
}
|
}
|
||||||
if(got_realm){
|
if(got_realm){
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
realm = malloc(q - start + 1);
|
realm = malloc(q - start + 1);
|
||||||
strncpy(realm, start, q - start);
|
strncpy(realm, start, q - start);
|
||||||
realm[q - start] = 0;
|
realm[q - start] = 0;
|
||||||
#else
|
|
||||||
realm.length = q - start;
|
|
||||||
realm.data = (krb5_pointer)malloc(realm.length);
|
|
||||||
memmove(realm.data, start, realm.length);
|
|
||||||
#endif
|
|
||||||
}else{
|
}else{
|
||||||
krb5_get_default_realm (context, &realm);
|
krb5_get_default_realm (context, &realm);
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
comp[n] = malloc(q - start + 1);
|
comp[n] = malloc(q - start + 1);
|
||||||
strncpy(comp[n], start, q - start);
|
strncpy(comp[n], start, q - start);
|
||||||
comp[n][q - start] = 0;
|
comp[n][q - start] = 0;
|
||||||
#else
|
|
||||||
comp[n].length = q - start;
|
|
||||||
comp[n].data = (krb5_pointer)malloc(comp[n].length);
|
|
||||||
memmove(comp[n].data, start, comp[n].length);
|
|
||||||
#endif
|
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
*principal = malloc(sizeof(**principal));
|
*principal = malloc(sizeof(**principal));
|
||||||
#ifdef USE_ASN1_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;
|
||||||
#else
|
|
||||||
(*principal)->type = KRB5_NT_PRINCIPAL;
|
|
||||||
(*principal)->comp = comp;
|
|
||||||
#endif
|
|
||||||
num_components(*principal) = n;
|
num_components(*principal) = n;
|
||||||
(*principal)->realm = realm;
|
(*principal)->realm = realm;
|
||||||
free(s);
|
free(s);
|
||||||
@@ -159,9 +110,7 @@ static void quote_string(char *s, int len, char **out)
|
|||||||
char *q;
|
char *q;
|
||||||
char *p = *out;
|
char *p = *out;
|
||||||
int c=0;
|
int c=0;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
len = strlen(s);
|
len = strlen(s);
|
||||||
#endif
|
|
||||||
for(q = s; q < s + len; q++){
|
for(q = s; q < s + len; q++){
|
||||||
if(*q == '\n')
|
if(*q == '\n')
|
||||||
c = 'n';
|
c = 'n';
|
||||||
@@ -196,33 +145,19 @@ krb5_unparse_name(krb5_context context,
|
|||||||
char *s;
|
char *s;
|
||||||
int i;
|
int i;
|
||||||
int ncomp = num_components(principal);
|
int ncomp = num_components(principal);
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
size = 2 * strlen(principal->realm) + 1;
|
size = 2 * strlen(principal->realm) + 1;
|
||||||
for (i = 0; i < ncomp; i++)
|
for (i = 0; i < ncomp; i++)
|
||||||
size += 2 * strlen(principal->name.name_string.val[i]) + 1;
|
size += 2 * strlen(principal->name.name_string.val[i]) + 1;
|
||||||
#else
|
|
||||||
size = 2 * principal->realm.length + 1;
|
|
||||||
for(i = 0; i < ncomp; i++)
|
|
||||||
size += 2 * principal->comp[i].length + 1;
|
|
||||||
#endif
|
|
||||||
s = malloc(size);
|
s = malloc(size);
|
||||||
p = s;
|
p = s;
|
||||||
for(i = 0; i < ncomp; i++){
|
for(i = 0; i < ncomp; i++){
|
||||||
if(i) *p++ = '/';
|
if(i) *p++ = '/';
|
||||||
quote_string(
|
quote_string(
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
principal->name.name_string.val[i], 0,
|
principal->name.name_string.val[i], 0,
|
||||||
#else
|
|
||||||
principal->comp[i].data, principal->comp[i].length,
|
|
||||||
#endif
|
|
||||||
&p);
|
&p);
|
||||||
}
|
}
|
||||||
*p++ = '@';
|
*p++ = '@';
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
quote_string(principal->realm, 0, &p);
|
quote_string(principal->realm, 0, &p);
|
||||||
#else
|
|
||||||
quote_string(principal->realm.data, principal->realm.length, &p);
|
|
||||||
#endif
|
|
||||||
*p = 0;
|
*p = 0;
|
||||||
*name = s;
|
*name = s;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -276,11 +211,7 @@ krb5_error_code
|
|||||||
krb5_principal_set_component(krb5_context context, krb5_principal p,
|
krb5_principal_set_component(krb5_context context, krb5_principal p,
|
||||||
int n, void *data, size_t len)
|
int n, void *data, size_t len)
|
||||||
{
|
{
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
general_string *tmp = p->name.name_string.val;
|
general_string *tmp = p->name.name_string.val;
|
||||||
#else
|
|
||||||
krb5_data *tmp = p->comp;
|
|
||||||
#endif
|
|
||||||
if(num_components(p) <= n){
|
if(num_components(p) <= n){
|
||||||
int s = n + 10;
|
int s = n + 10;
|
||||||
tmp = realloc(tmp, s * sizeof(*tmp));
|
tmp = realloc(tmp, s * sizeof(*tmp));
|
||||||
@@ -288,24 +219,14 @@ krb5_principal_set_component(krb5_context context, krb5_principal p,
|
|||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
memset(tmp + num_components(p), 0,
|
memset(tmp + num_components(p), 0,
|
||||||
(s - num_components(p)) * sizeof(*tmp));
|
(s - num_components(p)) * sizeof(*tmp));
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
p->name.name_string.val = tmp;
|
p->name.name_string.val = tmp;
|
||||||
#else
|
|
||||||
p->comp = tmp;
|
|
||||||
#endif
|
|
||||||
num_components(p)= s;
|
num_components(p)= s;
|
||||||
}
|
}
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
if(p->name.name_string.val[n])
|
if(p->name.name_string.val[n])
|
||||||
free(p->name.name_string.val[n]);
|
free(p->name.name_string.val[n]);
|
||||||
p->name.name_string.val[n] = malloc(len + 1);
|
p->name.name_string.val[n] = malloc(len + 1);
|
||||||
strncpy(p->name.name_string.val[n], data, len);
|
strncpy(p->name.name_string.val[n], data, len);
|
||||||
p->name.name_string.val[n][len] = 0;
|
p->name.name_string.val[n][len] = 0;
|
||||||
#else
|
|
||||||
p->comp[n].length = 0;
|
|
||||||
p->comp[n].data = NULL;
|
|
||||||
krb5_data_copy(&p->comp[n], data, len);
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,18 +281,11 @@ build_principal(krb5_context context,
|
|||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
princ_type(p) = KRB5_NT_PRINCIPAL;
|
princ_type(p) = KRB5_NT_PRINCIPAL;
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
p->realm = strdup(realm);
|
p->realm = strdup(realm);
|
||||||
if(p->realm == NULL){
|
if(p->realm == NULL){
|
||||||
free(p);
|
free(p);
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if(krb5_data_copy(&p->realm, (void*)realm, rlen)){
|
|
||||||
free(p);
|
|
||||||
return ENOMEM;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
(*func)(context, p, ap);
|
(*func)(context, p, ap);
|
||||||
*principal = p;
|
*principal = p;
|
||||||
@@ -426,31 +340,8 @@ krb5_copy_principal(krb5_context context,
|
|||||||
p = calloc(1, sizeof(*p));
|
p = calloc(1, sizeof(*p));
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
copy_PrincipalName(&inprinc->name, &p->name);
|
copy_PrincipalName(&inprinc->name, &p->name);
|
||||||
copy_Realm(&inprinc->realm, &p->realm);
|
copy_Realm(&inprinc->realm, &p->realm);
|
||||||
#else
|
|
||||||
princ_type(p) = princ_type(inprinc);
|
|
||||||
if(krb5_data_copy(&p->realm, inprinc->realm.data, inprinc->realm.length)){
|
|
||||||
krb5_free_principal(context, p);
|
|
||||||
return ENOMEM;
|
|
||||||
}
|
|
||||||
p->comp = ALLOC(inprinc->ncomp, krb5_data);
|
|
||||||
if(!p->comp){
|
|
||||||
krb5_free_principal(context, p);
|
|
||||||
return ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i=0; i<inprinc->ncomp; i++){
|
|
||||||
p->comp[i].length = 0;
|
|
||||||
if(krb5_data_copy(&p->comp[i], inprinc->comp[i].data,
|
|
||||||
inprinc->comp[i].length)){
|
|
||||||
krb5_free_principal(context, p);
|
|
||||||
return ENOMEM;
|
|
||||||
}
|
|
||||||
p->ncomp = i+1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
*outprinc = p;
|
*outprinc = p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -467,17 +358,9 @@ krb5_principal_compare(krb5_context context,
|
|||||||
if(num_components(princ1) != num_components(princ2))
|
if(num_components(princ1) != num_components(princ2))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
for(i = 0; i < num_components(princ1); i++){
|
for(i = 0; i < num_components(princ1); i++){
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
if(strcmp(princ1->name.name_string.val[i],
|
if(strcmp(princ1->name.name_string.val[i],
|
||||||
princ2->name.name_string.val[i]) != 0)
|
princ2->name.name_string.val[i]) != 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#else
|
|
||||||
if(princ1->comp[i].length != princ2->comp[i].length)
|
|
||||||
return FALSE;
|
|
||||||
if(memcmp(princ1->comp[i].data, princ2->comp[i].data,
|
|
||||||
princ1->comp[i].length))
|
|
||||||
return FALSE;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -488,15 +371,7 @@ krb5_realm_compare(krb5_context context,
|
|||||||
krb5_const_principal princ1,
|
krb5_const_principal princ1,
|
||||||
krb5_const_principal princ2)
|
krb5_const_principal princ2)
|
||||||
{
|
{
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
return strcmp(princ1->realm, princ2->realm) == 0;
|
return strcmp(princ1->realm, princ2->realm) == 0;
|
||||||
#else
|
|
||||||
if(princ1->realm.length != princ2->realm.length)
|
|
||||||
return FALSE;
|
|
||||||
if(memcmp(princ1->realm.data, princ2->realm.data, princ1->realm.length))
|
|
||||||
return FALSE;
|
|
||||||
return TRUE;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -520,7 +395,6 @@ krb5_524_conv_principal(krb5_context context,
|
|||||||
char *instance,
|
char *instance,
|
||||||
char *realm)
|
char *realm)
|
||||||
{
|
{
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
char *n, *i, *r;
|
char *n, *i, *r;
|
||||||
char tmpinst[40];
|
char tmpinst[40];
|
||||||
r = principal->realm;
|
r = principal->realm;
|
||||||
@@ -557,9 +431,6 @@ krb5_524_conv_principal(krb5_context context,
|
|||||||
strcpy(name, n);
|
strcpy(name, n);
|
||||||
strcpy(instance, i);
|
strcpy(instance, i);
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
|
||||||
abort();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -222,7 +222,6 @@ krb5_store_principal(krb5_storage *sp,
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int ret;
|
int ret;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
ret = krb5_store_int32(sp, p->name.name_type);
|
ret = krb5_store_int32(sp, p->name.name_type);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
ret = krb5_store_int32(sp, p->name.name_string.len);
|
ret = krb5_store_int32(sp, p->name.name_string.len);
|
||||||
@@ -233,18 +232,6 @@ krb5_store_principal(krb5_storage *sp,
|
|||||||
ret = krb5_store_string(sp, p->name.name_string.val[i]);
|
ret = krb5_store_string(sp, p->name.name_string.val[i]);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
ret = krb5_store_int32(sp, p->type);
|
|
||||||
if(ret) return ret;
|
|
||||||
ret = krb5_store_int32(sp, p->ncomp);
|
|
||||||
if(ret) return ret;
|
|
||||||
ret = krb5_store_data(sp, p->realm);
|
|
||||||
if(ret) return ret;
|
|
||||||
for(i = 0; i < p->ncomp; i++){
|
|
||||||
ret = krb5_store_data(sp, p->comp[i]);
|
|
||||||
if(ret) return ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,7 +257,6 @@ krb5_ret_principal(krb5_storage *sp,
|
|||||||
free(p);
|
free(p);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
p->name.name_type = type;
|
p->name.name_type = type;
|
||||||
p->name.name_string.len = ncomp;
|
p->name.name_string.len = ncomp;
|
||||||
ret = krb5_ret_string(sp, &p->realm);
|
ret = krb5_ret_string(sp, &p->realm);
|
||||||
@@ -284,20 +270,6 @@ krb5_ret_principal(krb5_storage *sp,
|
|||||||
ret = krb5_ret_string(sp, &p->name.name_string.val[i]);
|
ret = krb5_ret_string(sp, &p->name.name_string.val[i]);
|
||||||
if(ret) return ret; /* XXX */
|
if(ret) return ret; /* XXX */
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
p->type = type;
|
|
||||||
p->ncomp = ncomp;
|
|
||||||
ret = krb5_ret_data(sp, &p->realm);
|
|
||||||
if(ret) return ret;
|
|
||||||
p->comp = ALLOC(p->ncomp, krb5_data);
|
|
||||||
if(p->comp == NULL){
|
|
||||||
return ENOMEM;
|
|
||||||
}
|
|
||||||
for(i = 0; i < p->ncomp; i++){
|
|
||||||
ret = krb5_ret_data(sp, &p->comp[i]);
|
|
||||||
if(ret) return ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
*princ = p;
|
*princ = p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -153,20 +153,13 @@ krb5_get_salt (krb5_principal princ,
|
|||||||
krb5_error_code err;
|
krb5_error_code err;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
len = strlen(princ->realm);
|
len = strlen(princ->realm);
|
||||||
for (i = 0; i < princ->name.name_string.len; ++i)
|
for (i = 0; i < princ->name.name_string.len; ++i)
|
||||||
len += strlen(princ->name.name_string.val[i]);
|
len += strlen(princ->name.name_string.val[i]);
|
||||||
#else
|
|
||||||
len = princ->realm.length;
|
|
||||||
for (i = 0; i < princ->ncomp; ++i)
|
|
||||||
len += princ->comp[i].length;
|
|
||||||
#endif
|
|
||||||
err = krb5_data_alloc (salt, len);
|
err = krb5_data_alloc (salt, len);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
p = salt->data;
|
p = salt->data;
|
||||||
#ifdef USE_ASN1_PRINCIPAL
|
|
||||||
strncpy (p, princ->realm, strlen(princ->realm));
|
strncpy (p, princ->realm, strlen(princ->realm));
|
||||||
p += strlen(princ->realm);
|
p += strlen(princ->realm);
|
||||||
for (i = 0; i < princ->name.name_string.len; ++i) {
|
for (i = 0; i < princ->name.name_string.len; ++i) {
|
||||||
@@ -175,14 +168,6 @@ krb5_get_salt (krb5_principal princ,
|
|||||||
strlen(princ->name.name_string.val[i]));
|
strlen(princ->name.name_string.val[i]));
|
||||||
p += strlen(princ->name.name_string.val[i]);
|
p += strlen(princ->name.name_string.val[i]);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
strncpy (p, princ->realm.data, princ->realm.length);
|
|
||||||
p += princ->realm.length;
|
|
||||||
for (i = 0; i < princ->ncomp; ++i) {
|
|
||||||
strncpy (p, princ->comp[i].data, princ->comp[i].length);
|
|
||||||
p += princ->comp[i].length;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user