]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Simplify principal access within libkrb5
authorGreg Hudson <ghudson@mit.edu>
Sat, 6 Apr 2013 05:23:40 +0000 (01:23 -0400)
committerGreg Hudson <ghudson@mit.edu>
Mon, 8 Apr 2013 17:14:36 +0000 (13:14 -0400)
For conciseness, directly use fields of krb5_principal objects instead
of using the accessor macros.

28 files changed:
src/lib/krb5/ccache/cc_file.c
src/lib/krb5/ccache/cc_keyring.c
src/lib/krb5/ccache/ccfns.c
src/lib/krb5/keytab/kt_file.c
src/lib/krb5/krb/bld_pr_ext.c
src/lib/krb5/krb/bld_princ.c
src/lib/krb5/krb/chk_trans.c
src/lib/krb5/krb/conv_princ.c
src/lib/krb5/krb/copy_princ.c
src/lib/krb5/krb/fast.c
src/lib/krb5/krb/fwd_tgt.c
src/lib/krb5/krb/gc_via_tkt.c
src/lib/krb5/krb/get_creds.c
src/lib/krb5/krb/get_in_tkt.c
src/lib/krb5/krb/int-proto.h
src/lib/krb5/krb/kfree.c
src/lib/krb5/krb/pr_to_salt.c
src/lib/krb5/krb/princ_comp.c
src/lib/krb5/krb/rd_req_dec.c
src/lib/krb5/krb/recvauth.c
src/lib/krb5/krb/s4u_creds.c
src/lib/krb5/krb/set_realm.c
src/lib/krb5/krb/t_princ.c
src/lib/krb5/krb/tgtname.c
src/lib/krb5/krb/unparse.c
src/lib/krb5/os/changepw.c
src/lib/krb5/os/localauth_rule.c
src/lib/krb5/os/sn2princ.c

index d39250f89f1bc07549b89ec9912298469ec9c8e6..24b36b835abb5d5abd9f740970e445b071a5c90e 100644 (file)
@@ -509,13 +509,13 @@ krb5_fcc_read_principal(krb5_context context, krb5_ccache id, krb5_principal *pr
     tmpprinc->length = length;
     tmpprinc->type = type;
 
-    kret = krb5_fcc_read_data(context, id, krb5_princ_realm(context, tmpprinc));
+    kret = krb5_fcc_read_data(context, id, &tmpprinc->realm);
 
     i = 0;
     CHECK(kret);
 
     for (i=0; i < length; i++) {
-        kret = krb5_fcc_read_data(context, id, krb5_princ_component(context, tmpprinc, i));
+        kret = krb5_fcc_read_data(context, id, &tmpprinc->data[i]);
         CHECK(kret);
     }
     *princ = tmpprinc;
@@ -523,8 +523,8 @@ krb5_fcc_read_principal(krb5_context context, krb5_ccache id, krb5_principal *pr
 
 errout:
     while(--i >= 0)
-        free(krb5_princ_component(context, tmpprinc, i)->data);
-    free(krb5_princ_realm(context, tmpprinc)->data);
+        free(tmpprinc->data[i].data);
+    free(tmpprinc->realm.data);
     free(tmpprinc->data);
     free(tmpprinc);
     return kret;
@@ -949,8 +949,8 @@ krb5_fcc_store_principal(krb5_context context, krb5_ccache id, krb5_principal pr
 
     k5_cc_mutex_assert_locked(context, &((krb5_fcc_data *) id->data)->lock);
 
-    type = krb5_princ_type(context, princ);
-    tmp = length = krb5_princ_size(context, princ);
+    type = princ->type;
+    tmp = length = princ->length;
 
     if (data->version == KRB5_FCC_FVNO_1) {
         /*
@@ -967,11 +967,11 @@ krb5_fcc_store_principal(krb5_context context, krb5_ccache id, krb5_principal pr
     ret = krb5_fcc_store_int32(context, id, tmp);
     CHECK(ret);
 
-    ret = krb5_fcc_store_data(context, id, krb5_princ_realm(context, princ));
+    ret = krb5_fcc_store_data(context, id, &princ->realm);
     CHECK(ret);
 
     for (i=0; i < length; i++) {
-        ret = krb5_fcc_store_data(context, id, krb5_princ_component(context, princ, i));
+        ret = krb5_fcc_store_data(context, id, &princ->data[i]);
         CHECK(ret);
     }
 
index 7f1a641d67b918693cdbf88a58e0f4bae4e80574..20b275c41818d0dc3f1d57f6b623c0f2e0ee5f43 100644 (file)
@@ -1396,15 +1396,12 @@ krb5_krcc_parse_principal(krb5_context context, krb5_ccache id,
     tmpprinc->length = length;
     tmpprinc->type = type;
 
-    kret = krb5_krcc_parse_krb5data(context, id,
-                                    krb5_princ_realm(context, tmpprinc), bc);
+    kret = krb5_krcc_parse_krb5data(context, id, &tmpprinc->realm, bc);
     i = 0;
     CHECK(kret);
 
     for (i = 0; i < length; i++) {
-        kret = krb5_krcc_parse_krb5data(context, id,
-                                        krb5_princ_component(context, tmpprinc,
-                                                             i), bc);
+        kret = krb5_krcc_parse_krb5data(context, id, &tmpprinc->data[i], bc);
         CHECK(kret);
     }
     *princ = tmpprinc;
@@ -1412,8 +1409,8 @@ krb5_krcc_parse_principal(krb5_context context, krb5_ccache id,
 
 errout:
     while (--i >= 0)
-        free(krb5_princ_component(context, tmpprinc, i)->data);
-    free(krb5_princ_realm(context, tmpprinc)->data);
+        free(tmpprinc->data[i].data);
+    free(tmpprinc->realm.data);
     free(tmpprinc->data);
     free(tmpprinc);
     return kret;
@@ -1775,8 +1772,8 @@ krb5_krcc_unparse_principal(krb5_context context, krb5_ccache id,
     krb5_error_code kret;
     krb5_int32 i, length, tmp, type;
 
-    type = krb5_princ_type(context, princ);
-    tmp = length = krb5_princ_size(context, princ);
+    type = princ->type;
+    tmp = length = princ->length;
 
     kret = krb5_krcc_unparse_int32(context, id, type, bc);
     CHECK_OUT(kret);
@@ -1784,14 +1781,11 @@ krb5_krcc_unparse_principal(krb5_context context, krb5_ccache id,
     kret = krb5_krcc_unparse_int32(context, id, tmp, bc);
     CHECK_OUT(kret);
 
-    kret = krb5_krcc_unparse_krb5data(context, id,
-                                      krb5_princ_realm(context, princ), bc);
+    kret = krb5_krcc_unparse_krb5data(context, id, &princ->realm, bc);
     CHECK_OUT(kret);
 
     for (i = 0; i < length; i++) {
-        kret = krb5_krcc_unparse_krb5data(context, id,
-                                          krb5_princ_component(context, princ,
-                                                               i), bc);
+        kret = krb5_krcc_unparse_krb5data(context, id, &princ->data[i], bc);
         CHECK_OUT(kret);
     }
 
index 419150ae760ee518ff8b9e3f7d41b80046dab4e9..3154b17c8f3091dba149526da9a2d9d69f324d8c 100644 (file)
@@ -252,9 +252,7 @@ krb5_boolean KRB5_CALLCONV
 krb5_is_config_principal(krb5_context context,
                          krb5_const_principal principal)
 {
-    const krb5_data *realm;
-
-    realm = krb5_princ_realm(context, principal);
+    const krb5_data *realm = &principal->realm;
 
     if (realm->length != sizeof(conf_realm) - 1 ||
         memcmp(realm->data, conf_realm, sizeof(conf_realm) - 1) != 0)
index d34e7480e85cc17a9b029c8c240daac3b5bbfca4..8dcf787edee861b2e39e622b405ccd896a6775ac 100644 (file)
@@ -1279,7 +1279,7 @@ krb5_ktfileint_internal_read_entry(krb5_context context, krb5_keytab id, krb5_ke
     }
     u_princ_size = princ_size;
 
-    krb5_princ_set_realm_length(context, ret_entry->principal, u_princ_size);
+    ret_entry->principal->realm.length = u_princ_size;
     tmpdata = malloc(u_princ_size+1);
     if (!tmpdata) {
         error = ENOMEM;
@@ -1293,10 +1293,10 @@ krb5_ktfileint_internal_read_entry(krb5_context context, krb5_keytab id, krb5_ke
     tmpdata[princ_size] = 0;    /* Some things might be expecting null */
                                 /* termination...  ``Be conservative in */
                                 /* what you send out'' */
-    krb5_princ_set_realm_data(context, ret_entry->principal, tmpdata);
+    ret_entry->principal->realm.data = tmpdata;
 
     for (i = 0; i < count; i++) {
-        princ = krb5_princ_component(context, ret_entry->principal, i);
+        princ = &ret_entry->principal->data[i];
         if (!fread(&princ_size, sizeof(princ_size), 1, KTFILEP(id))) {
             error = KRB5_KT_END;
             goto fail;
@@ -1395,11 +1395,8 @@ krb5_ktfileint_internal_read_entry(krb5_context context, krb5_keytab id, krb5_ke
     return 0;
 fail:
 
-    for (i = 0; i < krb5_princ_size(context, ret_entry->principal); i++) {
-        princ = krb5_princ_component(context, ret_entry->principal, i);
-        if (princ->data)
-            free(princ->data);
-    }
+    for (i = 0; i < ret_entry->principal->length; i++)
+        free(ret_entry->principal->data[i].data);
     free(ret_entry->principal->data);
     ret_entry->principal->data = 0;
     free(ret_entry->principal);
@@ -1444,29 +1441,29 @@ krb5_ktfileint_write_entry(krb5_context context, krb5_keytab id, krb5_keytab_ent
     }
 
     if (KTVERSION(id) == KRB5_KT_VNO_1) {
-        count = (krb5_int16) krb5_princ_size(context, entry->principal) + 1;
+        count = (krb5_int16)entry->principal->length + 1;
     } else {
-        count = htons((u_short) krb5_princ_size(context, entry->principal));
+        count = htons((u_short)entry->principal->length);
     }
 
     if (!fwrite(&count, sizeof(count), 1, KTFILEP(id))) {
     abend:
         return KRB5_KT_IOERR;
     }
-    size = krb5_princ_realm(context, entry->principal)->length;
+    size = entry->principal->realm.length;
     if (KTVERSION(id) != KRB5_KT_VNO_1)
         size = htons(size);
     if (!fwrite(&size, sizeof(size), 1, KTFILEP(id))) {
         goto abend;
     }
-    if (!fwrite(krb5_princ_realm(context, entry->principal)->data, sizeof(char),
-                krb5_princ_realm(context, entry->principal)->length, KTFILEP(id))) {
+    if (!fwrite(entry->principal->realm.data, sizeof(char),
+                entry->principal->realm.length, KTFILEP(id))) {
         goto abend;
     }
 
-    count = (krb5_int16) krb5_princ_size(context, entry->principal);
+    count = (krb5_int16)entry->principal->length;
     for (i = 0; i < count; i++) {
-        princ = krb5_princ_component(context, entry->principal, i);
+        princ = &entry->principal->data[i];
         size = princ->length;
         if (KTVERSION(id) != KRB5_KT_VNO_1)
             size = htons(size);
@@ -1482,7 +1479,7 @@ krb5_ktfileint_write_entry(krb5_context context, krb5_keytab id, krb5_keytab_ent
      * Write out the principal type
      */
     if (KTVERSION(id) != KRB5_KT_VNO_1) {
-        princ_type = htonl(krb5_princ_type(context, entry->principal));
+        princ_type = htonl(entry->principal->type);
         if (!fwrite(&princ_type, sizeof(princ_type), 1, KTFILEP(id))) {
             goto abend;
         }
@@ -1563,15 +1560,13 @@ krb5_ktfileint_size_entry(krb5_context context, krb5_keytab_entry *entry, krb5_i
     krb5_int32 total_size, i;
     krb5_error_code retval = 0;
 
-    count = (krb5_int16) krb5_princ_size(context, entry->principal);
+    count = (krb5_int16)entry->principal->length;
 
     total_size = sizeof(count);
-    total_size += krb5_princ_realm(context, entry->principal)->length + (sizeof(krb5_int16));
+    total_size += entry->principal->realm.length + sizeof(krb5_int16);
 
-    for (i = 0; i < count; i++) {
-        total_size += krb5_princ_component(context, entry->principal,i)->length
-            + (sizeof(krb5_int16));
-    }
+    for (i = 0; i < count; i++)
+        total_size += entry->principal->data[i].length + sizeof(krb5_int16);
 
     total_size += sizeof(entry->principal->type);
     total_size += sizeof(entry->timestamp);
index 9c6a4dcce91b8a94a084cb950370cbb553e2d729..10268a0ff0380b203eef851474a1d1240fa20f7c 100644 (file)
@@ -83,7 +83,7 @@ krb5_build_principal_ext(krb5_context context,  krb5_principal * princ,
     }
     va_end(ap);
     *princ = princ_ret;
-    krb5_princ_type(context, princ_ret) = KRB5_NT_UNKNOWN;
+    princ_ret->type = KRB5_NT_UNKNOWN;
     return 0;
 
 free_out:
index ba411a6cd91925250206c8d0f901d63fc8c476f8..3dbe3561d559ac6602f618e26db3b25eb7486c2a 100644 (file)
@@ -70,8 +70,7 @@ build_principal_va(krb5_context context, krb5_principal princ,
     if (!retval) {
         princ->type = KRB5_NT_UNKNOWN;
         princ->magic = KV5M_PRINCIPAL;
-        krb5_princ_set_realm_data(context, princ, r);
-        krb5_princ_set_realm_length(context, princ, rlen);
+        princ->realm = make_data(r, rlen);
         princ->data = data;
         princ->length = count;
         r = NULL;    /* take ownership */
index 0d42c97dcd9b7f049335903584581c4a82ef6b67..2c29e62c610d5a91699b1372ed2e8361d324116e 100644 (file)
@@ -298,7 +298,7 @@ check_realm_in_list (krb5_data *realm, void *data)
 
     Tprintf ((".. checking '%.*s'\n", (int) realm->length, realm->data));
     for (i = 0; cdata->tgs[i]; i++) {
-        if (data_eq (*krb5_princ_realm (cdata->ctx, cdata->tgs[i]), *realm))
+        if (data_eq (cdata->tgs[i]->realm, *realm))
             return 0;
     }
     Tprintf (("BAD!\n"));
index 17b5ccc18a43fe2943543937709400a80e725365..04d4b6514afcb5f88404e25627b65d8d900a9a42 100644 (file)
@@ -162,10 +162,10 @@ krb5_524_conv_principal(krb5_context context, krb5_const_principal princ,
         return KRB5_CONFIG_CANTOPEN;
 
     *name = *inst = '\0';
-    switch (krb5_princ_size(context, princ)) {
+    switch (princ->length) {
     case 2:
         /* Check if this principal is listed in the table */
-        compo = krb5_princ_component(context, princ, 0);
+        compo = &princ->data[0];
         p = sconv_list;
         while (p->v4_str) {
             if (p->len == compo->length
@@ -177,7 +177,7 @@ krb5_524_conv_principal(krb5_context context, krb5_const_principal princ,
                 if (strlcpy(name, p->v4_str, ANAME_SZ) >= ANAME_SZ)
                     return KRB5_INVALID_PRINCIPAL;
                 if (p->flags & DO_REALM_CONVERSION) {
-                    compo = krb5_princ_component(context, princ, 1);
+                    compo = &princ->data[1];
                     c = strnchr(compo->data, '.', compo->length);
                     if (!c || (c - compo->data) >= INST_SZ - 1)
                         return KRB5_INVALID_PRINCIPAL;
@@ -191,7 +191,7 @@ krb5_524_conv_principal(krb5_context context, krb5_const_principal princ,
         /* If inst isn't set, the service isn't listed in the table, */
         /* so just copy it. */
         if (*inst == '\0') {
-            compo = krb5_princ_component(context, princ, 1);
+            compo = &princ->data[1];
             if (compo->length >= INST_SZ - 1)
                 return KRB5_INVALID_PRINCIPAL;
             memcpy(inst, compo->data, compo->length);
@@ -201,7 +201,7 @@ krb5_524_conv_principal(krb5_context context, krb5_const_principal princ,
     case 1:
         /* name may have been set above; otherwise, just copy it */
         if (*name == '\0') {
-            compo = krb5_princ_component(context, princ, 0);
+            compo = &princ->data[0];
             if (compo->length >= ANAME_SZ)
                 return KRB5_INVALID_PRINCIPAL;
             memcpy(name, compo->data, compo->length);
@@ -212,7 +212,7 @@ krb5_524_conv_principal(krb5_context context, krb5_const_principal princ,
         return KRB5_INVALID_PRINCIPAL;
     }
 
-    compo = krb5_princ_realm(context, princ);
+    compo = &princ->realm;
 
     tmp_prealm = malloc(compo->length + 1);
     if (tmp_prealm == NULL)
index 3db027e1742230efca8e0e0f79fb535884e1295b..0d0e6a004807d7142093edce1ec4f717499ef382 100644 (file)
@@ -33,7 +33,7 @@ krb5_error_code KRB5_CALLCONV
 krb5_copy_principal(krb5_context context, krb5_const_principal inprinc, krb5_principal *outprinc)
 {
     register krb5_principal tempprinc;
-    register int i, nelems;
+    krb5_int32 i;
 
     tempprinc = (krb5_principal)malloc(sizeof(krb5_principal_data));
 
@@ -42,20 +42,18 @@ krb5_copy_principal(krb5_context context, krb5_const_principal inprinc, krb5_pri
 
     *tempprinc = *inprinc;
 
-    nelems = (int) krb5_princ_size(context, inprinc);
-    tempprinc->data = malloc(nelems * sizeof(krb5_data));
+    tempprinc->data = malloc(inprinc->length * sizeof(krb5_data));
 
     if (tempprinc->data == 0) {
         free(tempprinc);
         return ENOMEM;
     }
 
-    for (i = 0; i < nelems; i++) {
-        if (krb5int_copy_data_contents(context,
-                                       krb5_princ_component(context, inprinc, i),
-                                       krb5_princ_component(context, tempprinc, i)) != 0) {
+    for (i = 0; i < inprinc->length; i++) {
+        if (krb5int_copy_data_contents(context, &inprinc->data[i],
+                                       &tempprinc->data[i]) != 0) {
             while (--i >= 0)
-                free(krb5_princ_component(context, tempprinc, i)->data);
+                free(tempprinc->data[i].data);
             free (tempprinc->data);
             free (tempprinc);
             return ENOMEM;
@@ -64,8 +62,8 @@ krb5_copy_principal(krb5_context context, krb5_const_principal inprinc, krb5_pri
 
     if (krb5int_copy_data_contents_add0(context, &inprinc->realm,
                                         &tempprinc->realm) != 0) {
-        for (i = 0; i < nelems; i++)
-            free(krb5_princ_component(context, tempprinc, i)->data);
+        for (i = 0; i < inprinc->length; i++)
+            free(tempprinc->data[i].data);
         free(tempprinc->data);
         free(tempprinc);
         return ENOMEM;
index 4555b71be9709f14255152069394ddd302742748..84eaca441be5c6d96a638767e6e2e5701865a8c9 100644 (file)
@@ -180,7 +180,7 @@ krb5int_fast_as_armor(krb5_context context,
     krb5_data *target_realm;
 
     krb5_clear_error_message(context);
-    target_realm = krb5_princ_realm(context, request->server);
+    target_realm = &request->server->realm;
     if (opte->opt_private->fast_ccache_name) {
         TRACE_FAST_ARMOR_CCACHE(context, opte->opt_private->fast_ccache_name);
         state->fast_state_flags |= KRB5INT_FAST_ARMOR_AVAIL;
index 250af3ad9b385cb78676ac96a04319b31a3c0a9e..a217d4c240014de60c14b9eb8a09bdf1ed0f3291 100644 (file)
@@ -121,12 +121,12 @@ krb5_fwd_tgt_creds(krb5_context context, krb5_auth_context auth_context,
 
     if (tgt.addresses && *tgt.addresses) {
         if (rhost == NULL) {
-            if (krb5_princ_type(context, server) != KRB5_NT_SRV_HST) {
+            if (server->type != KRB5_NT_SRV_HST) {
                 retval = KRB5_FWD_BAD_PRINCIPAL;
                 goto errout;
             }
 
-            if (krb5_princ_size(context, server) < 2){
+            if (server->length < 2){
                 retval = KRB5_CC_BADNAME;
                 goto errout;
             }
index 4c7268a7b911533d0a390a86298182dec96e235f..92b53ecd0c7f9bcf329b2a0a045a254141850fdb 100644 (file)
@@ -126,8 +126,8 @@ check_reply_server(krb5_context context, krb5_flags kdcoptions,
 
     /* We didn't request canonicalization. */
 
-    if (!IS_TGS_PRINC(context, in_cred->server) ||
-        !IS_TGS_PRINC(context, dec_rep->ticket->server)) {
+    if (!IS_TGS_PRINC(in_cred->server) ||
+        !IS_TGS_PRINC(dec_rep->ticket->server)) {
         /* Canonicalization not requested, and not a TGS referral. */
         return KRB5_KDCREP_MODIFIED;
     }
@@ -264,7 +264,7 @@ krb5int_process_tgs_reply(krb5_context context,
     /* make sure the response hasn't been tampered with..... */
     retval = 0;
 
-    if (s4u2self && !IS_TGS_PRINC(context, dec_rep->ticket->server)) {
+    if (s4u2self && !IS_TGS_PRINC(dec_rep->ticket->server)) {
         /* Final hop, check whether KDC supports S4U2Self */
         if (krb5_principal_compare(context, dec_rep->client, in_cred->server))
             retval = KRB5KDC_ERR_PADATA_TYPE_NOSUPP;
@@ -374,8 +374,7 @@ krb5_get_cred_via_tkt_ext(krb5_context context, krb5_creds *tkt,
 
 send_again:
     use_master = 0;
-    retval = krb5_sendto_kdc(context, &request_data,
-                             krb5_princ_realm(context, in_cred->server),
+    retval = krb5_sendto_kdc(context, &request_data, &in_cred->server->realm,
                              &response_data, &use_master, tcp_only);
     if (retval == 0) {
         if (krb5_is_krb_error(&response_data)) {
index fc74c1617bef3d0ffa13731590d93b714d20a564..23c0a108387d38b5e071c0666c7a0484cb30a739 100644 (file)
@@ -563,7 +563,7 @@ step_referrals(krb5_context context, krb5_tkt_creds_context ctx)
 
     /* Old versions of Active Directory can rewrite the server name instead of
      * returning a referral.  Try a non-referral query if we see this. */
-    if (!IS_TGS_PRINC(context, ctx->reply_creds->server)) {
+    if (!IS_TGS_PRINC(ctx->reply_creds->server)) {
         TRACE_TKT_CREDS_NON_TGT(context, ctx->reply_creds->server);
         return begin_non_referral(context, ctx);
     }
@@ -674,7 +674,7 @@ step_get_tgt_offpath(krb5_context context, krb5_tkt_creds_context ctx)
         return ctx->reply_code;
 
     /* Verify that we got a TGT. */
-    if (!IS_TGS_PRINC(context, ctx->reply_creds->server))
+    if (!IS_TGS_PRINC(ctx->reply_creds->server))
         return KRB5_KDCREP_MODIFIED;
 
     /* Use this tgt for the next request. */
@@ -879,7 +879,7 @@ step_get_tgt(krb5_context context, krb5_tkt_creds_context ctx)
         TRACE_TKT_CREDS_CLOSER_REALM(context, ctx->next_realm);
     } else {
         /* Verify that we got a TGT. */
-        if (!IS_TGS_PRINC(context, ctx->reply_creds->server))
+        if (!IS_TGS_PRINC(ctx->reply_creds->server))
             return KRB5_KDCREP_MODIFIED;
 
         /* Use this tgt for the next request regardless of what it is. */
index e5fd5542c49eada9c772bdfa5668fd9bc7cf3df3..15f7cc6dc6ddfe147591114d6b6ee14cae578345 100644 (file)
@@ -158,12 +158,11 @@ verify_as_reply(krb5_context            context,
      * principal) and we requested (and received) a TGT.
      */
     canon_req = ((request->kdc_options & KDC_OPT_CANONICALIZE) != 0) ||
-        (krb5_princ_type(context, request->client) ==
-         KRB5_NT_ENTERPRISE_PRINCIPAL) ||
+        request->client->type == KRB5_NT_ENTERPRISE_PRINCIPAL ||
         (request->kdc_options & KDC_OPT_REQUEST_ANONYMOUS);
     if (canon_req) {
-        canon_ok = IS_TGS_PRINC(context, request->server) &&
-            IS_TGS_PRINC(context, as_reply->enc_part2->server);
+        canon_ok = IS_TGS_PRINC(request->server) &&
+            IS_TGS_PRINC(as_reply->enc_part2->server);
         if (!canon_ok && (request->kdc_options & KDC_OPT_REQUEST_ANONYMOUS)) {
             canon_ok = krb5_principal_compare_any_realm(context,
                                                         as_reply->client,
@@ -475,11 +474,8 @@ build_in_tkt_name(krb5_context context,
      * Windows Server 2008 R2 RODC insists on TGS principal names having the
      * right name type.
      */
-    if (krb5_princ_size(context, server) == 2 &&
-        data_eq_string(*krb5_princ_component(context, server, 0),
-                       KRB5_TGS_NAME)) {
-        krb5_princ_type(context, server) = KRB5_NT_SRV_INST;
-    }
+    if (server->length == 2 && data_eq_string(server->data[0], KRB5_TGS_NAME))
+        server->type = KRB5_NT_SRV_INST;
     *server_out = server;
     return 0;
 }
@@ -957,7 +953,7 @@ krb5_init_creds_init(krb5_context context,
                 goto cleanup;
             krb5_free_principal(context, ctx->request->client);
             ctx->request->client = new_client;
-            krb5_princ_type(context, ctx->request->client) = KRB5_NT_WELLKNOWN;
+            ctx->request->client->type = KRB5_NT_WELLKNOWN;
         }
     }
     /* We will also handle anonymous if the input principal is the anonymous
@@ -965,7 +961,7 @@ krb5_init_creds_init(krb5_context context,
     if (krb5_principal_compare_any_realm(context, ctx->request->client,
                                          krb5_anonymous_principal())) {
         ctx->request->kdc_options |= KDC_OPT_REQUEST_ANONYMOUS;
-        krb5_princ_type(context, ctx->request->client) = KRB5_NT_WELLKNOWN;
+        ctx->request->client->type = KRB5_NT_WELLKNOWN;
     }
     code = restart_init_creds_loop(context, ctx, NULL);
     if (code)
@@ -1434,7 +1430,7 @@ init_creds_step_reply(krb5_context context,
 
         } else if (canon_flag && ctx->err_reply->error == KDC_ERR_WRONG_REALM) {
             if (ctx->err_reply->client == NULL ||
-                !krb5_princ_realm(context, ctx->err_reply->client)->length) {
+                !ctx->err_reply->client->realm.length) {
                 code = KRB5KDC_ERR_WRONG_REALM;
                 goto cleanup;
             }
index 04535f6cc327bec2bea0963f33b1175df33570ed..33261543f71167a9155df57a630fe2e6dca285cc 100644 (file)
@@ -164,9 +164,8 @@ krb5int_construct_matching_creds(krb5_context context, krb5_flags options,
 
 #define in_clock_skew(date, now) (labs((date)-(now)) < context->clockskew)
 
-#define IS_TGS_PRINC(c, p)                                              \
-    (krb5_princ_size((c), (p)) == 2 &&                                  \
-     data_eq_string(*krb5_princ_component((c), (p), 0), KRB5_TGS_NAME))
+#define IS_TGS_PRINC(p) ((p)->length == 2 &&                            \
+                         data_eq_string((p)->data[0], KRB5_TGS_NAME))
 
 typedef krb5_error_code
 (*k5_pacb_fn)(krb5_context context, krb5_keyblock *subkey, krb5_kdc_req *req,
index 466861f73760d440ecc587fa1055a7c07df33daf..32b215182770b7cac19f8131c177a0ebbd312cbe 100644 (file)
@@ -389,9 +389,9 @@ krb5_free_principal(krb5_context context, krb5_principal val)
         return;
 
     if (val->data) {
-        i = krb5_princ_size(context, val);
+        i = val->length;
         while(--i >= 0)
-            free(krb5_princ_component(context, val, i)->data);
+            free(val->data[i].data);
         free(val->data);
     }
     free(val->realm.data);
index 53fc0ae24026085fa85ad0e219a6bf59d9c0d673..87fe91117fa5b9efe3a273a9e768eb348940db6a 100644 (file)
@@ -39,33 +39,29 @@ principal2salt_internal(krb5_context context,
                         krb5_data *ret, int use_realm)
 {
     unsigned int size = 0, offset=0;
-    krb5_int32 nelem;
-    register int i;
+    krb5_int32 i;
 
     *ret = empty_data();
     if (pr == NULL)
         return 0;
 
-    nelem = krb5_princ_size(context, pr);
-
     if (use_realm)
-        size += krb5_princ_realm(context, pr)->length;
+        size += pr->realm.length;
 
-    for (i = 0; i < (int) nelem; i++)
-        size += krb5_princ_component(context, pr, i)->length;
+    for (i = 0; i < pr->length; i++)
+        size += pr->data[i].length;
 
     if (alloc_data(ret, size))
         return ENOMEM;
 
     if (use_realm) {
-        offset = krb5_princ_realm(context, pr)->length;
-        memcpy(ret->data, krb5_princ_realm(context, pr)->data, offset);
+        offset = pr->realm.length;
+        memcpy(ret->data, pr->realm.data, offset);
     }
 
-    for (i = 0; i < (int) nelem; i++) {
-        memcpy(&ret->data[offset], krb5_princ_component(context, pr, i)->data,
-               krb5_princ_component(context, pr, i)->length);
-        offset += krb5_princ_component(context, pr, i)->length;
+    for (i = 0; i < pr->length; i++) {
+        memcpy(&ret->data[offset], pr->data[i].data, pr->data[i].length);
+        offset += pr->data[i].length;
     }
     return 0;
 }
index db0d3058c12588d853251728c98aad91d2137a0f..994f41d45c89b46e4524c27627c171a3127b3539 100644 (file)
@@ -33,8 +33,8 @@ realm_compare_flags(krb5_context context,
                     krb5_const_principal princ2,
                     int flags)
 {
-    const krb5_data *realm1 = krb5_princ_realm(context, princ1);
-    const krb5_data *realm2 = krb5_princ_realm(context, princ2);
+    const krb5_data *realm1 = &princ1->realm;
+    const krb5_data *realm2 = &princ2->realm;
 
     if (realm1->length != realm2->length)
         return FALSE;
@@ -79,8 +79,7 @@ krb5_principal_compare_flags(krb5_context context,
                              krb5_const_principal princ2,
                              int flags)
 {
-    register int i;
-    krb5_int32 nelem;
+    krb5_int32 i;
     unsigned int utf8 = (flags & KRB5_PRINCIPAL_COMPARE_UTF8) != 0;
     unsigned int casefold = (flags & KRB5_PRINCIPAL_COMPARE_CASEFOLD) != 0;
     krb5_principal upn1 = NULL;
@@ -89,27 +88,26 @@ krb5_principal_compare_flags(krb5_context context,
 
     if (flags & KRB5_PRINCIPAL_COMPARE_ENTERPRISE) {
         /* Treat UPNs as if they were real principals */
-        if (krb5_princ_type(context, princ1) == KRB5_NT_ENTERPRISE_PRINCIPAL) {
+        if (princ1->type == KRB5_NT_ENTERPRISE_PRINCIPAL) {
             if (upn_to_principal(context, princ1, &upn1) == 0)
                 princ1 = upn1;
         }
-        if (krb5_princ_type(context, princ2) == KRB5_NT_ENTERPRISE_PRINCIPAL) {
+        if (princ2->type == KRB5_NT_ENTERPRISE_PRINCIPAL) {
             if (upn_to_principal(context, princ2, &upn2) == 0)
                 princ2 = upn2;
         }
     }
 
-    nelem = krb5_princ_size(context, princ1);
-    if (nelem != krb5_princ_size(context, princ2))
+    if (princ1->length != princ2->length)
         goto out;
 
     if ((flags & KRB5_PRINCIPAL_COMPARE_IGNORE_REALM) == 0 &&
         !realm_compare_flags(context, princ1, princ2, flags))
         goto out;
 
-    for (i = 0; i < (int) nelem; i++) {
-        const krb5_data *p1 = krb5_princ_component(context, princ1, i);
-        const krb5_data *p2 = krb5_princ_component(context, princ2, i);
+    for (i = 0; i < princ1->length; i++) {
+        const krb5_data *p1 = &princ1->data[i];
+        const krb5_data *p2 = &princ2->data[i];
         krb5_boolean eq;
 
         if (casefold) {
index 6495baebed80125557271ee48bafab49814d5132..bd447f3439f379447b363dcc0c1180dd1b01e7e1 100644 (file)
@@ -312,12 +312,12 @@ rd_req_decoded_opt(krb5_context context, krb5_auth_context *auth_context,
         server = req->ticket->server;
     }
     /* Get an rcache if necessary. */
-    if (((*auth_context)->rcache == NULL)
-        && ((*auth_context)->auth_context_flags & KRB5_AUTH_CONTEXT_DO_TIME)
-        && server) {
-        if ((retval = krb5_get_server_rcache(context,
-                                             krb5_princ_component(context,server,0),
-                                             &(*auth_context)->rcache)))
+    if (((*auth_context)->rcache == NULL) &&
+        ((*auth_context)->auth_context_flags & KRB5_AUTH_CONTEXT_DO_TIME) &&
+        server != NULL && server->length > 0) {
+        retval = krb5_get_server_rcache(context, &server->data[0],
+                                        &(*auth_context)->rcache);
+        if (retval)
             goto cleanup;
     }
     /* okay, now check cross-realm policy */
@@ -343,7 +343,7 @@ rd_req_decoded_opt(krb5_context context, krb5_auth_context *auth_context,
         krb5_data       * realm;
         krb5_transited  * trans;
 
-        realm = krb5_princ_realm(context, req->ticket->enc_part2->client);
+        realm = &req->ticket->enc_part2->client->realm;
         trans = &(req->ticket->enc_part2->transited);
 
         /*
@@ -366,7 +366,7 @@ rd_req_decoded_opt(krb5_context context, krb5_auth_context *auth_context,
         krb5_data      * realm;
         krb5_transited * trans;
 
-        realm = krb5_princ_realm(context, req->ticket->enc_part2->client);
+        realm = &req->ticket->enc_part2->client->realm;
         trans = &(req->ticket->enc_part2->transited);
 
         /*
@@ -376,8 +376,7 @@ rd_req_decoded_opt(krb5_context context, krb5_auth_context *auth_context,
          */
         if (trans->tr_contents.length > 0 && trans->tr_contents.data[0]) {
             retval = krb5_check_transited_list(context, &(trans->tr_contents),
-                                               realm,
-                                               krb5_princ_realm (context,server));
+                                               realm, &server->realm);
         }
     }
 
index aa6e3785fba37863982cd9d41b14cd9a3ae73533..da83628303faf3ec0f5fbb6ed5fba467f5ca9115 100644 (file)
@@ -132,9 +132,9 @@ recvauth_common(krb5_context context,
         /*
          * Setup the replay cache.
          */
-        if (server) {
-            problem = krb5_get_server_rcache(context,
-                                             krb5_princ_component(context, server, 0), &rcache);
+        if (server != NULL && server->length > 0) {
+            problem = krb5_get_server_rcache(context, &server->data[0],
+                                             &rcache);
         } else {
             null_server.length = 7;
             null_server.data = "default";
index 8d5f130a54bb43966f198d738620be4bda08777d..b7bb9fe5b035b11bb5a92fa69642e152f1fc4d09 100644 (file)
@@ -74,8 +74,7 @@ s4u_identify_user(krb5_context context,
     }
 
     if (in_creds->client != NULL &&
-        krb5_princ_type(context, in_creds->client) !=
-        KRB5_NT_ENTERPRISE_PRINCIPAL) {
+        in_creds->client->type != KRB5_NT_ENTERPRISE_PRINCIPAL) {
         int anonymous;
 
         anonymous = krb5_principal_compare(context, in_creds->client,
@@ -142,37 +141,32 @@ make_pa_for_user_checksum(krb5_context context,
 {
     krb5_error_code code;
     int i;
-    krb5_int32 name_type;
     char *p;
     krb5_data data;
 
     data.length = 4;
-    for (i = 0; i < krb5_princ_size(context, req->user); i++) {
-        data.length += krb5_princ_component(context, req->user, i)->length;
-    }
-    data.length += krb5_princ_realm(context, req->user)->length;
+    for (i = 0; i < req->user->length; i++)
+        data.length += req->user->data[i].length;
+    data.length += req->user->realm.length;
     data.length += req->auth_package.length;
 
     p = data.data = malloc(data.length);
     if (data.data == NULL)
         return ENOMEM;
 
-    name_type = krb5_princ_type(context, req->user);
-    p[0] = (name_type >> 0 ) & 0xFF;
-    p[1] = (name_type >> 8 ) & 0xFF;
-    p[2] = (name_type >> 16) & 0xFF;
-    p[3] = (name_type >> 24) & 0xFF;
+    p[0] = (req->user->type >> 0) & 0xFF;
+    p[1] = (req->user->type >> 8) & 0xFF;
+    p[2] = (req->user->type >> 16) & 0xFF;
+    p[3] = (req->user->type >> 24) & 0xFF;
     p += 4;
 
-    for (i = 0; i < krb5_princ_size(context, req->user); i++) {
-        memcpy(p, krb5_princ_component(context, req->user, i)->data,
-               krb5_princ_component(context, req->user, i)->length);
-        p += krb5_princ_component(context, req->user, i)->length;
+    for (i = 0; i < req->user->length; i++) {
+        memcpy(p, req->user->data[i].data, req->user->data[i].length);
+        p += req->user->data[i].length;
     }
 
-    memcpy(p, krb5_princ_realm(context, req->user)->data,
-           krb5_princ_realm(context, req->user)->length);
-    p += krb5_princ_realm(context, req->user)->length;
+    memcpy(p, req->user->realm.data, req->user->realm.length);
+    p += req->user->realm.length;
 
     memcpy(p, req->auth_package.data, req->auth_package.length);
 
@@ -467,11 +461,8 @@ krb5_get_self_cred_from_kdc(krb5_context context,
 
     memset(&s4u_user, 0, sizeof(s4u_user));
 
-    if (in_creds->client != NULL &&
-        krb5_princ_size(context, in_creds->client)) {
-        if (krb5_princ_type(context, in_creds->client) ==
-            KRB5_NT_ENTERPRISE_PRINCIPAL)
-        {
+    if (in_creds->client != NULL && in_creds->client->length > 0) {
+        if (in_creds->client->type == KRB5_NT_ENTERPRISE_PRINCIPAL) {
             code = krb5_build_principal_ext(context,
                                             &s4u_user.user_id.user,
                                             user_realm->length,
@@ -502,8 +493,8 @@ krb5_get_self_cred_from_kdc(krb5_context context,
     s4u_user.user_id.options = KRB5_S4U_OPTS_USE_REPLY_KEY_USAGE;
 
     /* First, acquire a TGT to the user's realm. */
-    code = krb5int_tgtname(context, user_realm,
-                           krb5_princ_realm(context, in_creds->server), &tgs);
+    code = krb5int_tgtname(context, user_realm, &in_creds->server->realm,
+                           &tgs);
     if (code != 0)
         goto cleanup;
 
@@ -547,8 +538,7 @@ krb5_get_self_cred_from_kdc(krb5_context context,
         krb5_pa_data **enc_padata = NULL;
         krb5_keyblock *subkey = NULL;
 
-        if (s4u_user.user_id.user != NULL &&
-            krb5_princ_size(context, s4u_user.user_id.user)) {
+        if (s4u_user.user_id.user != NULL && s4u_user.user_id.user->length) {
             in_padata = calloc(2, sizeof(krb5_pa_data *));
             if (in_padata == NULL) {
                 code = ENOMEM;
@@ -606,7 +596,7 @@ krb5_get_self_cred_from_kdc(krb5_context context,
                                    (*out_creds)->server)) {
             code = 0;
             goto cleanup;
-        } else if (IS_TGS_PRINC(context, (*out_creds)->server)) {
+        } else if (IS_TGS_PRINC((*out_creds)->server)) {
             krb5_data *r1 = &tgtptr->server->data[1];
             krb5_data *r2 = &(*out_creds)->server->data[1];
 
@@ -693,10 +683,8 @@ krb5_get_credentials_for_user(krb5_context context, krb5_flags options,
             goto cleanup;
     }
 
-    code = krb5_get_self_cred_from_kdc(context, options, ccache,
-                                       in_creds, subject_cert,
-                                       krb5_princ_realm(context, realm),
-                                       out_creds);
+    code = krb5_get_self_cred_from_kdc(context, options, ccache, in_creds,
+                                       subject_cert, &realm->realm, out_creds);
     if (code != 0)
         goto cleanup;
 
index 5a7f81a4479b2d94df9a4f0f4882547e58a5dc5b..9697ff6eeda2ac8f1a0f62419ca54c0fdb87d1d3 100644 (file)
@@ -41,10 +41,8 @@ krb5_set_principal_realm(krb5_context context, krb5_principal principal,
     if (!newrealm)
         return ENOMEM;
 
-    (void) free(krb5_princ_realm(context,principal)->data);
-
-    krb5_princ_realm(context, principal)->length = length;
-    krb5_princ_realm(context, principal)->data = newrealm;
+    free(principal->realm.data);
+    principal->realm = make_data(newrealm, length);
 
     return 0;
 }
index 502c22a4eaef33ebd66e7a6e6dfb4f01c92870b9..78ca178995b513326307a4da88f4561faab6b599 100644 (file)
@@ -101,7 +101,7 @@ test_princ(krb5_context context)
         err(context, 0, "%s != %s", princ_short, princ_unparsed);
     free(princ_unparsed);
 
-    realm = krb5_princ_realm(context, p)->data;
+    realm = p->realm.data;
 
     asprintf(&princ_reformed, "%s@%s", princ_short, realm);
 
index 1cd113a1d5bc4f3f14c1c8600fc193e5e3050203..0ffeb17df4e3d54f37b739758c41330c9e7a9a58 100644 (file)
@@ -42,7 +42,7 @@ krb5int_tgtname(krb5_context context, const krb5_data *server, const krb5_data *
      * Windows Server 2008 R2 RODC insists on TGS principal names having the
      * right name type.
      */
-    krb5_princ_type(context, *tgtprinc) = KRB5_NT_SRV_INST;
+    (*tgtprinc)->type = KRB5_NT_SRV_INST;
 
     return ret;
 }
index d774b7c12da6587cd9753885a13757866f031fce..779121a860e9ceedfff75a5a44cce824b74ce404 100644 (file)
@@ -144,8 +144,7 @@ k5_unparse_name(krb5_context context, krb5_const_principal principal,
                 int flags, char **name, unsigned int *size)
 {
     char *q;
-    int i;
-    krb5_int32 nelem;
+    krb5_int32 i;
     unsigned int totalsize = 0;
     char *default_realm = NULL;
     krb5_error_code ret = 0;
@@ -161,26 +160,22 @@ k5_unparse_name(krb5_context context, krb5_const_principal principal,
         if (ret != 0)
             goto cleanup;
 
-        krb5_princ_realm(context, &p)->length = strlen(default_realm);
-        krb5_princ_realm(context, &p)->data = default_realm;
+        p.realm = string2data(default_realm);
 
         if (krb5_realm_compare(context, &p, principal))
             flags |= KRB5_PRINCIPAL_UNPARSE_NO_REALM;
     }
 
     if ((flags & KRB5_PRINCIPAL_UNPARSE_NO_REALM) == 0) {
-        totalsize += component_length_quoted(krb5_princ_realm(context,
-                                                              principal),
-                                             flags);
+        totalsize += component_length_quoted(&principal->realm, flags);
         totalsize++;            /* This is for the separator */
     }
 
-    nelem = krb5_princ_size(context, principal);
-    for (i = 0; i < (int) nelem; i++) {
-        totalsize += component_length_quoted(krb5_princ_component(context, principal, i), flags);
+    for (i = 0; i < principal->length; i++) {
+        totalsize += component_length_quoted(&principal->data[i], flags);
         totalsize++;    /* This is for the separator */
     }
-    if (nelem == 0)
+    if (principal->length == 0)
         totalsize++;
 
     /*
@@ -208,12 +203,8 @@ k5_unparse_name(krb5_context context, krb5_const_principal principal,
 
     q = *name;
 
-    for (i = 0; i < (int) nelem; i++) {
-        q += copy_component_quoting(q,
-                                    krb5_princ_component(context,
-                                                         principal,
-                                                         i),
-                                    flags);
+    for (i = 0; i < principal->length; i++) {
+        q += copy_component_quoting(q, &principal->data[i], flags);
         *q++ = COMPONENT_SEP;
     }
 
@@ -221,7 +212,7 @@ k5_unparse_name(krb5_context context, krb5_const_principal principal,
         q--;                /* Back up last component separator */
     if ((flags & KRB5_PRINCIPAL_UNPARSE_NO_REALM) == 0) {
         *q++ = REALM_SEP;
-        q += copy_component_quoting(q, krb5_princ_realm(context, principal), flags);
+        q += copy_component_quoting(q, &principal->realm, flags);
     }
     *q++ = '\0';
 
index 46f4f0e5f33724485340ed26237806e32caa8b21..25b89db49f9e20a4ae3c84e67b19687be413a91e 100644 (file)
@@ -252,10 +252,9 @@ change_set_password(krb5_context context,
 
     do {
         int socktype = (use_tcp ? SOCK_STREAM : SOCK_DGRAM);
-        if ((code = locate_kpasswd(callback_ctx.context,
-                                   krb5_princ_realm(callback_ctx.context,
-                                                    creds->server),
-                                   &sl, socktype)))
+        code = locate_kpasswd(callback_ctx.context, &creds->server->realm, &sl,
+                              socktype);
+        if (code)
             break;
 
         addrlen = sizeof(remote_addr);
@@ -404,8 +403,8 @@ krb5_set_password_using_ccache(krb5_context context,
     code = krb5_cc_get_principal (context, ccache, &creds.client);
     if (!code) {
         code = krb5_build_principal(context, &creds.server,
-                                    krb5_princ_realm(context, change_password_for)->length,
-                                    krb5_princ_realm(context, change_password_for)->data,
+                                    change_password_for->realm.length,
+                                    change_password_for->realm.data,
                                     "kadmin", "changepw", NULL);
         if (!code) {
             code = krb5_get_credentials(context, 0, ccache, &creds, &credsp);
index bf4b21dafaab23a10ce7c7512984e0204309f3bf..584dcba5408b8609f0293f8a9379f4890001c82a 100644 (file)
@@ -251,10 +251,7 @@ aname_get_selstring(krb5_context context, krb5_const_principal aname,
         if (errno || ind > num_comps)
             break;
         current = end;
-        datap = ind > 0 ? krb5_princ_component(context, aname, ind - 1) :
-            krb5_princ_realm(context, aname);
-        if (!datap)
-            break;
+        datap = ind > 0 ? &aname->data[ind - 1] : &aname->realm;
         k5_buf_add_len(&selstring, datap->data, datap->length);
     }
 
index cc99934d81c87557d8fac3908e6da8befb04ee36..b3de66383ed601696c939d84ee1fde87ddb1b628 100644 (file)
@@ -177,7 +177,7 @@ krb5_sname_to_principal(krb5_context context, const char *hostname, const char *
                                       realm, sname, remote_host,
                                       (char *)0);
         if (retval == 0)
-            krb5_princ_type(context, *ret_princ) = type;
+            (*ret_princ)->type = type;
 
         TRACE_SNAME_TO_PRINCIPAL_RETURN(context, *ret_princ);