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