(DB_open): catch errors from the d->open calls instead of letting them

slip though to d->cursor. Bug repport from Andrew Bartlett <abartlet@samba.org>


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@15853 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2005-08-09 09:28:39 +00:00
parent 235d18238c
commit 8443e8221a

View File

@@ -267,24 +267,28 @@ DB_open(krb5_context context, HDB *db, int flags, mode_t mode)
} }
db_create(&d, NULL, 0); db_create(&d, NULL, 0);
db->hdb_db = d; db->hdb_db = d;
#if (DB_VERSION_MAJOR >= 4) && (DB_VERSION_MINOR >= 1) #if (DB_VERSION_MAJOR >= 4) && (DB_VERSION_MINOR >= 1)
if ((ret = d->open(db->hdb_db, NULL, fn, NULL, DB_BTREE, myflags, mode))) { ret = d->open(db->hdb_db, NULL, fn, NULL, DB_BTREE, myflags, mode);
#else #else
if ((ret = d->open(db->hdb_db, fn, NULL, DB_BTREE, myflags, mode))) { ret = d->open(db->hdb_db, fn, NULL, DB_BTREE, myflags, mode);
#endif #endif
if(ret == ENOENT)
if (ret == ENOENT) {
/* try to open without .db extension */ /* try to open without .db extension */
#if (DB_VERSION_MAJOR >= 4) && (DB_VERSION_MINOR >= 1) #if (DB_VERSION_MAJOR >= 4) && (DB_VERSION_MINOR >= 1)
if (d->open(db->hdb_db, NULL, db->hdb_name, NULL, DB_BTREE, myflags, mode)) { ret = d->open(db->hdb_db, NULL, db->hdb_name, NULL, DB_BTREE, myflags, mode);
#else #else
if (d->open(db->hdb_db, db->hdb_name, NULL, DB_BTREE, myflags, mode)) { ret = d->open(db->hdb_db, db->hdb_name, NULL, DB_BTREE, myflags, mode);
#endif #endif
}
if (ret) {
free(fn); free(fn);
krb5_set_error_string(context, "opening %s: %s", krb5_set_error_string(context, "opening %s: %s",
db->hdb_name, strerror(ret)); db->hdb_name, strerror(ret));
return ret; return ret;
} }
}
free(fn); free(fn);
ret = d->cursor(d, NULL, (DBC **)&db->hdb_dbc, 0); ret = d->cursor(d, NULL, (DBC **)&db->hdb_dbc, 0);