From 65987846fda3dc8023d80cfb03060e11a177f557 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Tue, 28 Feb 2012 00:03:20 -0800 Subject: [PATCH] make bind principal a common function --- lib/hdb/hdb-sqlite.c | 74 +++++++++++++++++++++++----------------------------- 1 file changed, 33 insertions(+), 41 deletions(-) diff --git a/lib/hdb/hdb-sqlite.c b/lib/hdb/hdb-sqlite.c index e5040029c..e50dbbc76 100644 --- a/lib/hdb/hdb-sqlite.c +++ b/lib/hdb/hdb-sqlite.c @@ -189,6 +189,25 @@ hdb_sqlite_exec_stmt(krb5_context context, } /** + * + */ + +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) { -- 2.11.4.GIT