Fix sqlite HDB backend init bug

This commit is contained in:
Nicolas Williams
2015-06-02 11:40:55 -05:00
parent 7df165003a
commit fbc87e46fd

View File

@@ -832,13 +832,13 @@ hdb_sqlite_remove(krb5_context context, HDB *db,
* *
* @param context A Kerberos 5 context. * @param context A Kerberos 5 context.
* @param db a returned database handle. * @param db a returned database handle.
* @param argument filename * @param filename filename
* *
* @return 0 on success, an error code if not * @return 0 on success, an error code if not
*/ */
krb5_error_code krb5_error_code
hdb_sqlite_create(krb5_context context, HDB **db, const char *argument) hdb_sqlite_create(krb5_context context, HDB **db, const char *filename)
{ {
krb5_error_code ret; krb5_error_code ret;
hdb_sqlite_db *hsdb; hdb_sqlite_db *hsdb;
@@ -847,8 +847,16 @@ hdb_sqlite_create(krb5_context context, HDB **db, const char *argument)
if (*db == NULL) if (*db == NULL)
return krb5_enomem(context); return krb5_enomem(context);
(*db)->hdb_name = strdup(filename);
if ((*db)->hdb_name == NULL) {
free(*db);
*db = NULL;
return krb5_enomem(context);
}
hsdb = (hdb_sqlite_db*) calloc(1, sizeof (*hsdb)); hsdb = (hdb_sqlite_db*) calloc(1, sizeof (*hsdb));
if (hsdb == NULL) { if (hsdb == NULL) {
free((*db)->hdb_name);
free(*db); free(*db);
*db = NULL; *db = NULL;
return krb5_enomem(context); return krb5_enomem(context);
@@ -857,7 +865,7 @@ hdb_sqlite_create(krb5_context context, HDB **db, const char *argument)
(*db)->hdb_db = hsdb; (*db)->hdb_db = hsdb;
/* XXX make_database should make sure everything else is freed on error */ /* XXX make_database should make sure everything else is freed on error */
ret = hdb_sqlite_make_database(context, *db, argument); ret = hdb_sqlite_make_database(context, *db, filename);
if (ret) { if (ret) {
free((*db)->hdb_db); free((*db)->hdb_db);
free(*db); free(*db);