summaryrefslogtreecommitdiffstats
path: root/src/lib/kdb/kdb5.c
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2010-07-06 21:53:23 +0000
committerGreg Hudson <ghudson@mit.edu>2010-07-06 21:53:23 +0000
commit8e78a7eeb7266329891971090d2666f5c6a13ad0 (patch)
treeb5d8a1827176cd1fdc9da5983181ee25c30b31b8 /src/lib/kdb/kdb5.c
parent4a1d6a694452122f71d876e39ee335ea7ee022b6 (diff)
downloadkrb5-8e78a7eeb7266329891971090d2666f5c6a13ad0.tar.gz
krb5-8e78a7eeb7266329891971090d2666f5c6a13ad0.tar.xz
krb5-8e78a7eeb7266329891971090d2666f5c6a13ad0.zip
Remove count parameters from get_principal, put_principal,
free_principal, delete_principal, and get_policy. Make get_principal allocate the DB entry container. Fold krb5_db_get_principal_ext into krb5_db_get_principal. ticket: 6749 status: open git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@24175 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/kdb/kdb5.c')
-rw-r--r--src/lib/kdb/kdb5.c180
1 files changed, 59 insertions, 121 deletions
diff --git a/src/lib/kdb/kdb5.c b/src/lib/kdb/kdb5.c
index 493647d017..af81d37bf4 100644
--- a/src/lib/kdb/kdb5.c
+++ b/src/lib/kdb/kdb5.c
@@ -698,43 +698,23 @@ krb5_db_unlock(krb5_context kcontext)
}
krb5_error_code
-krb5_db_get_principal(krb5_context kcontext,
- krb5_const_principal search_for,
- krb5_db_entry * entries,
- int *nentries, krb5_boolean * more)
+krb5_db_get_principal(krb5_context kcontext, krb5_const_principal search_for,
+ unsigned int flags, krb5_db_entry **entry)
{
krb5_error_code status = 0;
kdb_vftabl *v;
+ *entry = NULL;
status = get_vftabl(kcontext, &v);
if (status)
return status;
if (v->get_principal == NULL)
return KRB5_PLUGIN_OP_NOTSUPP;
- return v->get_principal(kcontext, search_for, 0, entries, nentries, more);
-}
-
-krb5_error_code
-krb5_db_get_principal_ext(krb5_context kcontext,
- krb5_const_principal search_for,
- unsigned int flags,
- krb5_db_entry * entries,
- int *nentries, krb5_boolean * more)
-{
- krb5_error_code status = 0;
- kdb_vftabl *v;
-
- status = get_vftabl(kcontext, &v);
- if (status)
- return status;
- if (v->get_principal == NULL)
- return KRB5_PLUGIN_OP_NOTSUPP;
- return v->get_principal(kcontext, search_for, flags, entries, nentries,
- more);
+ return v->get_principal(kcontext, search_for, flags, entry);
}
void
-krb5_db_free_principal(krb5_context kcontext, krb5_db_entry * entry, int count)
+krb5_db_free_principal(krb5_context kcontext, krb5_db_entry *entry)
{
krb5_error_code status = 0;
kdb_vftabl *v;
@@ -742,7 +722,7 @@ krb5_db_free_principal(krb5_context kcontext, krb5_db_entry * entry, int count)
status = get_vftabl(kcontext, &v);
if (status)
return;
- v->free_principal(kcontext, entry, count);
+ v->free_principal(kcontext, entry);
}
static void
@@ -826,8 +806,7 @@ clean_n_exit:
}
krb5_error_code
-krb5int_put_principal_no_log(krb5_context kcontext,
- krb5_db_entry *entries, int *nentries)
+krb5int_put_principal_no_log(krb5_context kcontext, krb5_db_entry *entry)
{
kdb_vftabl *v;
krb5_error_code status;
@@ -838,53 +817,47 @@ krb5int_put_principal_no_log(krb5_context kcontext,
return status;
if (v->put_principal == NULL)
return KRB5_PLUGIN_OP_NOTSUPP;
- status = extract_db_args_from_tl_data(kcontext, &entries->tl_data,
- &entries->n_tl_data,
+ status = extract_db_args_from_tl_data(kcontext, &entry->tl_data,
+ &entry->n_tl_data,
&db_args);
if (status)
return status;
- status = v->put_principal(kcontext, entries, nentries, db_args);
+ status = v->put_principal(kcontext, entry, db_args);
free_db_args(kcontext, db_args);
return status;
}
krb5_error_code
-krb5_db_put_principal(krb5_context kcontext,
- krb5_db_entry * entries, int *nentries)
+krb5_db_put_principal(krb5_context kcontext, krb5_db_entry *entry)
{
krb5_error_code status = 0;
kdb_vftabl *v;
char **db_args = NULL;
- kdb_incr_update_t *upd, *fupd = 0;
+ kdb_incr_update_t *upd = NULL;
char *princ_name = NULL;
kdb_log_context *log_ctx;
- int i;
int ulog_locked = 0;
log_ctx = kcontext->kdblog_context;
status = get_vftabl(kcontext, &v);
if (status)
- goto clean_n_exit;
+ return status;
+ if (v->put_principal == NULL)
+ return KRB5_PLUGIN_OP_NOTSUPP;
- status = extract_db_args_from_tl_data(kcontext, &entries->tl_data,
- &entries->n_tl_data,
+ status = extract_db_args_from_tl_data(kcontext, &entry->tl_data,
+ &entry->n_tl_data,
&db_args);
if (status)
goto clean_n_exit;
if (log_ctx && (log_ctx->iproprole == IPROP_MASTER)) {
- if (!(upd = (kdb_incr_update_t *)
- malloc(sizeof (kdb_incr_update_t)* *nentries))) {
- status = errno;
- goto err_lock;
- }
- fupd = upd;
-
- (void) memset(upd, 0, sizeof(kdb_incr_update_t)* *nentries);
-
- if ((status = ulog_conv_2logentry(kcontext, entries, upd, *nentries)))
- goto err_lock;
+ upd = k5alloc(sizeof(*upd), &status);
+ if (upd == NULL)
+ goto clean_n_exit;
+ if ((status = ulog_conv_2logentry(kcontext, entry, upd)))
+ goto clean_n_exit;
}
status = ulog_lock(kcontext, KRB5_LOCKMODE_EXCLUSIVE);
@@ -892,51 +865,35 @@ krb5_db_put_principal(krb5_context kcontext,
goto err_lock;
ulog_locked = 1;
- for (i = 0; i < *nentries; i++) {
- if (fupd) {
- if ((status = krb5_unparse_name(kcontext, entries->princ,
- &princ_name)))
- goto err_lock;
+ if (upd != NULL) {
+ status = krb5_unparse_name(kcontext, entry->princ, &princ_name);
+ if (status != 0)
+ goto err_lock;
- upd->kdb_princ_name.utf8str_t_val = princ_name;
- upd->kdb_princ_name.utf8str_t_len = strlen(princ_name);
+ upd->kdb_princ_name.utf8str_t_val = princ_name;
+ upd->kdb_princ_name.utf8str_t_len = strlen(princ_name);
- if ((status = ulog_add_update(kcontext, upd)) != 0)
- goto err_lock;
- upd++;
- }
+ if ((status = ulog_add_update(kcontext, upd)) != 0)
+ goto err_lock;
}
- if (v->put_principal == NULL) {
- status = KRB5_PLUGIN_OP_NOTSUPP;
- goto err_lock;
- }
+ status = v->put_principal(kcontext, entry, db_args);
+ if (status == 0 && upd != NULL)
+ (void) ulog_finish_update(kcontext, upd);
- status = v->put_principal(kcontext, entries, nentries, db_args);
- if (status == 0 && fupd) {
- upd = fupd;
- for (i = 0; i < *nentries; i++) {
- (void) ulog_finish_update(kcontext, upd);
- upd++;
- }
- }
err_lock:
if (ulog_locked)
ulog_lock(kcontext, KRB5_LOCKMODE_UNLOCK);
clean_n_exit:
free_db_args(kcontext, db_args);
-
- if (log_ctx && (log_ctx->iproprole == IPROP_MASTER))
- ulog_free_entries(fupd, *nentries);
-
+ ulog_free_entries(upd, 1);
return status;
}
krb5_error_code
krb5int_delete_principal_no_log(krb5_context kcontext,
- krb5_principal search_for,
- int *nentries)
+ krb5_principal search_for)
{
kdb_vftabl *v;
krb5_error_code status;
@@ -946,12 +903,12 @@ krb5int_delete_principal_no_log(krb5_context kcontext,
return status;
if (v->delete_principal == NULL)
return KRB5_PLUGIN_OP_NOTSUPP;
- return v->delete_principal(kcontext, search_for, nentries);
+ return v->delete_principal(kcontext, search_for);
}
krb5_error_code
krb5_db_delete_principal(krb5_context kcontext,
- krb5_principal search_for, int *nentries)
+ krb5_principal search_for)
{
krb5_error_code status = 0;
kdb_vftabl *v;
@@ -994,7 +951,7 @@ krb5_db_delete_principal(krb5_context kcontext,
if (v->delete_principal == NULL)
return KRB5_PLUGIN_OP_NOTSUPP;
- status = v->delete_principal(kcontext, search_for, nentries);
+ status = v->delete_principal(kcontext, search_for);
/*
* We need to commit our update upon success
@@ -1168,21 +1125,15 @@ krb5_db_fetch_mkey(krb5_context context,
* princ.
*/
if (kvno != NULL && *kvno == IGNORE_VNO) {
- int nentries = 1;
- krb5_boolean more;
krb5_error_code rc;
- krb5_db_entry master_entry;
-
- rc = krb5_db_get_principal(context, mname,
- &master_entry, &nentries, &more);
+ krb5_db_entry *master_entry;
- if (rc == 0 && nentries == 1 && more == FALSE)
- *kvno = (krb5_kvno) master_entry.key_data->key_data_kvno;
- else
+ rc = krb5_db_get_principal(context, mname, 0, &master_entry);
+ if (rc == 0) {
+ *kvno = (krb5_kvno) master_entry->key_data->key_data_kvno;
+ krb5_db_free_principal(context, master_entry);
+ } else
*kvno = 1;
-
- if (rc == 0 && nentries)
- krb5_db_free_principal(context, &master_entry, nentries);
}
if (!salt)
@@ -1233,32 +1184,18 @@ krb5_dbe_fetch_act_key_list(krb5_context context,
krb5_actkvno_node **act_key_list)
{
krb5_error_code retval = 0;
- krb5_db_entry entry;
- int nprinc;
- krb5_boolean more;
+ krb5_db_entry *entry;
if (act_key_list == NULL)
return (EINVAL);
- nprinc = 1;
- if ((retval = krb5_db_get_principal(context, princ, &entry,
- &nprinc, &more))) {
- return (retval);
- }
-
- if (nprinc != 1) {
- if (nprinc) {
- krb5_db_free_principal(context, &entry, nprinc);
- return (KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE);
- } else {
- return(KRB5_KDB_NOMASTERKEY);
- }
- } else if (more) {
- krb5_db_free_principal(context, &entry, nprinc);
- return (KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE);
- }
+ retval = krb5_db_get_principal(context, princ, 0, &entry);
+ if (retval == KRB5_KDB_NOENTRY)
+ return KRB5_KDB_NOMASTERKEY;
+ else if (retval)
+ return retval;
- retval = krb5_dbe_lookup_actkvno(context, &entry, act_key_list);
+ retval = krb5_dbe_lookup_actkvno(context, entry, act_key_list);
if (*act_key_list == NULL) {
krb5_actkvno_node *tmp_actkvno;
@@ -1267,17 +1204,19 @@ krb5_dbe_fetch_act_key_list(krb5_context context,
*/
tmp_actkvno = (krb5_actkvno_node *) malloc(sizeof(krb5_actkvno_node));
- if (tmp_actkvno == NULL)
- return (ENOMEM);
+ if (tmp_actkvno == NULL) {
+ krb5_db_free_principal(context, entry);
+ return ENOMEM;
+ }
memset(tmp_actkvno, 0, sizeof(krb5_actkvno_node));
tmp_actkvno->act_time = 0; /* earliest time possible */
/* use most current key */
- tmp_actkvno->act_kvno = entry.key_data[0].key_data_kvno;
+ tmp_actkvno->act_kvno = entry->key_data[0].key_data_kvno;
*act_key_list = tmp_actkvno;
}
- krb5_db_free_principal(context, &entry, nprinc);
+ krb5_db_free_principal(context, entry);
return retval;
}
@@ -2144,8 +2083,7 @@ krb5_db_create_policy(krb5_context kcontext, osa_policy_ent_t policy)
}
krb5_error_code
-krb5_db_get_policy(krb5_context kcontext, char *name,
- osa_policy_ent_t * policy, int *cnt)
+krb5_db_get_policy(krb5_context kcontext, char *name, osa_policy_ent_t *policy)
{
krb5_error_code status = 0;
kdb_vftabl *v;
@@ -2155,7 +2093,7 @@ krb5_db_get_policy(krb5_context kcontext, char *name,
return status;
if (v->get_policy == NULL)
return KRB5_PLUGIN_OP_NOTSUPP;
- return v->get_policy(kcontext, name, policy, cnt);
+ return v->get_policy(kcontext, name, policy);
}
krb5_error_code