diff options
author | John Kohl <jtkohl@mit.edu> | 1990-04-27 15:43:28 +0000 |
---|---|---|
committer | John Kohl <jtkohl@mit.edu> | 1990-04-27 15:43:28 +0000 |
commit | 483f552a1ff2e00643ef9a6ec947523c50d28dfc (patch) | |
tree | 3b9467be56688138e308dc8fecf96fc24c3c6f37 /src/lib/kdb/setup_mkey.c | |
parent | e84b187a7069bfcec4f9977cf0d0043ca0e67ca0 (diff) | |
download | krb5-483f552a1ff2e00643ef9a6ec947523c50d28dfc.tar.gz krb5-483f552a1ff2e00643ef9a6ec947523c50d28dfc.tar.xz krb5-483f552a1ff2e00643ef9a6ec947523c50d28dfc.zip |
need fullname argument, so re-write
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@613 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/kdb/setup_mkey.c')
-rw-r--r-- | src/lib/kdb/setup_mkey.c | 57 |
1 files changed, 21 insertions, 36 deletions
diff --git a/src/lib/kdb/setup_mkey.c b/src/lib/kdb/setup_mkey.c index 55b7a834dc..451221a9c7 100644 --- a/src/lib/kdb/setup_mkey.c +++ b/src/lib/kdb/setup_mkey.c @@ -24,8 +24,12 @@ static char rcsid_setup_mkey_c[] = /* * Given a key name and a realm name, construct a principal which can be used * to fetch the master key from the database. + * + * If the key name is NULL, the default key name will be used. */ +#define REALM_SEP_STRING "@" + krb5_error_code krb5_db_setup_mkey_name(keyname, realm, fullname, principal) const char *keyname; @@ -34,47 +38,28 @@ char **fullname; krb5_principal *principal; { krb5_error_code retval; - krb5_principal retprinc; - int keylen = strlen(keyname); + int keylen; int rlen = strlen(realm); + char *fname; - retprinc = (krb5_principal) calloc(3, sizeof(krb5_data)); - if (!retprinc) + if (!keyname) + keyname = KRB5_KDB_M_NAME; /* XXX external? */ + + keylen = strlen(keyname); + + fname = malloc(keylen+rlen+2); + if (!fname) return ENOMEM; - retprinc[0] = (krb5_data *) malloc(sizeof(krb5_data)); - if (!retprinc[0]) { - goto freeprinc; - } - retprinc[1] = (krb5_data *) malloc(sizeof(krb5_data)); - if (!retprinc[1]) { - goto free0; - } - if (!(retprinc[0]->data = malloc(rlen))) { - goto free1; - } - if (!(retprinc[1]->data = malloc(keylen))) { - xfree(retprinc[0]->data); - goto free1; - } - bcopy(realm, retprinc[0]->data, rlen); - retprinc[0]->length = rlen; - bcopy(keyname, retprinc[1]->data, keylen); - retprinc[1]->length = keylen; + strcpy(fname, keyname); + strcat(fname, REALM_SEP_STRING); + strcat(fname, realm); - if (fullname && (retval = krb5_unparse_name(retprinc, fullname))) { - xfree(retprinc[1]); - xfree(retprinc[0]); - xfree(retprinc); + if (retval = krb5_parse_name(fname, principal)) return retval; - } + if (fullname) + *fullname = fname; + else + free(fname); return 0; - - free1: - xfree(retprinc[1]); - free0: - xfree(retprinc[0]); - freeprinc: - xfree(retprinc); - return ENOMEM; } |