make bind principal a common function
This commit is contained in:
@@ -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) {
|
||||
|
Reference in New Issue
Block a user