make bind principal a common function

This commit is contained in:
Love Hörnquist Åstrand
2012-02-28 00:03:20 -08:00
parent 91f2de8d1a
commit 65987846fd

View File

@@ -188,6 +188,25 @@ hdb_sqlite_exec_stmt(krb5_context context,
return 0;
}
/**
*
*/
static krb5_error_code
bind_principal(krb5_context context, krb5_const_principal principal, sqlite3_stmt *stmt, int key)
{
krb5_error_code ret;
char *str = NULL;
ret = krb5_unparse_name(context, principal, &str);
if (ret)
return ret;
sqlite3_bind_text(stmt, key, str, -1, SQLITE_TRANSIENT);
free(str);
return 0;
}
/**
* Opens an sqlite3 database handle to a file, may create the
* database file depending on flags.
@@ -389,18 +408,13 @@ hdb_sqlite_fetch_kvno(krb5_context context, HDB *db, krb5_const_principal princi
{
int sqlite_error;
krb5_error_code ret;
char *principal_string;
hdb_sqlite_db *hsdb = (hdb_sqlite_db*)(db->hdb_db);
sqlite3_stmt *fetch = hsdb->fetch;
krb5_data value;
ret = krb5_unparse_name(context, principal, &principal_string);
if (ret) {
free(principal_string);
return ret;
}
sqlite3_bind_text(fetch, 1, principal_string, -1, SQLITE_STATIC);
ret = bind_principal(context, principal, fetch, 1);
if (ret)
return ret;
sqlite_error = hdb_sqlite_step(context, hsdb->db, fetch);
if (sqlite_error != SQLITE_ROW) {
@@ -438,7 +452,6 @@ out:
sqlite3_clear_bindings(fetch);
sqlite3_reset(fetch);
free(principal_string);
return ret;
}
@@ -484,8 +497,6 @@ hdb_sqlite_store(krb5_context context, HDB *db, unsigned flags,
int ret;
int i;
sqlite_int64 entry_id;
char *principal_string = NULL;
char *alias_string;
const HDB_Ext_Aliases *aliases;
hdb_sqlite_db *hsdb = (hdb_sqlite_db *)(db->hdb_db);
@@ -502,12 +513,6 @@ hdb_sqlite_store(krb5_context context, HDB *db, unsigned flags,
goto rollback;
}
ret = krb5_unparse_name(context,
entry->entry.principal, &principal_string);
if (ret) {
goto rollback;
}
ret = hdb_seal_keys(context, db, &entry->entry);
if(ret) {
goto rollback;
@@ -518,7 +523,10 @@ hdb_sqlite_store(krb5_context context, HDB *db, unsigned flags,
goto rollback;
}
sqlite3_bind_text(get_ids, 1, principal_string, -1, SQLITE_STATIC);
ret = bind_principal(context, entry->entry.principal, get_ids, 1);
if (ret)
return ret;
ret = hdb_sqlite_step(context, hsdb->db, get_ids);
if(ret == SQLITE_DONE) { /* No such principal */
@@ -531,8 +539,10 @@ hdb_sqlite_store(krb5_context context, HDB *db, unsigned flags,
if(ret != SQLITE_DONE)
goto rollback;
sqlite3_bind_text(hsdb->add_principal, 1,
principal_string, -1, SQLITE_STATIC);
ret = bind_principal(context, entry->entry.principal, hsdb->add_principal, 1);
if (ret)
goto rollback;
ret = hdb_sqlite_step(context, hsdb->db, hsdb->add_principal);
sqlite3_clear_bindings(hsdb->add_principal);
sqlite3_reset(hsdb->add_principal);
@@ -571,20 +581,13 @@ hdb_sqlite_store(krb5_context context, HDB *db, unsigned flags,
for(i = 0; i < aliases->aliases.len; i++) {
ret = krb5_unparse_name(context, &aliases->aliases.val[i],
&alias_string);
if (ret) {
free(alias_string);
ret = bind_principal(context, &aliases->aliases.val[i], hsdb->add_alias, 1);
if (ret)
goto rollback;
}
sqlite3_bind_text(hsdb->add_alias, 1, alias_string,
-1, SQLITE_STATIC);
sqlite3_bind_int64(hsdb->add_alias, 2, entry_id);
ret = hdb_sqlite_step_once(context, db, hsdb->add_alias);
free(alias_string);
if(ret != SQLITE_DONE)
goto rollback;
}
@@ -593,8 +596,6 @@ hdb_sqlite_store(krb5_context context, HDB *db, unsigned flags,
commit:
free(principal_string);
krb5_data_free(&value);
sqlite3_clear_bindings(get_ids);
@@ -612,8 +613,6 @@ rollback:
krb5_warnx(context, "hdb-sqlite: store rollback problem: %d: %s",
ret, sqlite3_errmsg(hsdb->db));
free(principal_string);
ret = hdb_sqlite_exec_stmt(context, hsdb->db,
"ROLLBACK", EINVAL);
return ret;
@@ -790,17 +789,10 @@ hdb_sqlite_remove(krb5_context context, HDB *db,
krb5_const_principal principal)
{
krb5_error_code ret;
char *principal_string;
hdb_sqlite_db *hsdb = (hdb_sqlite_db*)(db->hdb_db);
sqlite3_stmt *rm = hsdb->remove;
ret = krb5_unparse_name(context, principal, &principal_string);
if (ret) {
free(principal_string);
return ret;
}
sqlite3_bind_text(rm, 1, principal_string, -1, SQLITE_STATIC);
bind_principal(context, principal, rm, 1);
ret = hdb_sqlite_step(context, hsdb->db, rm);
if (ret != SQLITE_DONE) {