Commit fc44729c authored by Rusty Russell's avatar Rusty Russell

tdb2: disallow SEED attribute with TDB_VERSION1.

It also only makes sense with O_CREAT.
parent 49475d68
......@@ -259,6 +259,13 @@ enum TDB_ERROR tdb_get_attribute(struct tdb_context *tdb,
attr->hash.data = tdb->hash_data;
break;
case TDB_ATTRIBUTE_SEED:
if (tdb->flags & TDB_VERSION1)
return tdb->last_error
= tdb_logerr(tdb, TDB_ERR_EINVAL,
TDB_LOG_USE_ERROR,
"tdb_get_attribute:"
" cannot get TDB_ATTRIBUTE_SEED"
" on TDB1 tdb.");
attr->seed.seed = tdb->hash_seed;
break;
case TDB_ATTRIBUTE_OPENHOOK:
......@@ -431,6 +438,25 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
}
}
if (seed) {
if (tdb_flags & TDB_VERSION1) {
ecode = tdb_logerr(tdb, TDB_ERR_EINVAL,
TDB_LOG_USE_ERROR,
"tdb_open:"
" cannot set TDB_ATTRIBUTE_SEED"
" on TDB1 tdb.");
goto fail;
} else if (!(tdb_flags & TDB_INTERNAL)
&& !(open_flags & O_CREAT)) {
ecode = tdb_logerr(tdb, TDB_ERR_EINVAL,
TDB_LOG_USE_ERROR,
"tdb_open:"
" cannot set TDB_ATTRIBUTE_SEED"
" without O_CREAT.");
goto fail;
}
}
if ((open_flags & O_ACCMODE) == O_WRONLY) {
ecode = tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
"tdb_open: can't open tdb %s write-only",
......
......@@ -4,7 +4,7 @@
#include <stdbool.h>
/* FIXME: Check these! */
#define INITIAL_TDB_MALLOC "open.c", 360, FAILTEST_MALLOC
#define INITIAL_TDB_MALLOC "open.c", 367, FAILTEST_MALLOC
#define URANDOM_OPEN "open.c", 61, FAILTEST_OPEN
#define URANDOM_READ "open.c", 41, FAILTEST_READ
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment