diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2011-09-14 07:48:13 +0930 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2011-09-14 07:48:13 +0930 |
commit | 333a23fa995faf1735e5234272f56b792d91a877 (patch) | |
tree | 3e636d7e0662190ef26020c3ba4df37bed69a35b /lib/tdb2 | |
parent | 6e16e29d532d7542c210fd725bf61df1e7a97795 (diff) | |
download | samba-333a23fa995faf1735e5234272f56b792d91a877.tar.gz samba-333a23fa995faf1735e5234272f56b792d91a877.tar.bz2 samba-333a23fa995faf1735e5234272f56b792d91a877.zip |
tdb2: disallow SEED attribute with TDB_VERSION1.
It also only makes sense with O_CREAT.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(Imported from CCAN commit fc44729c471bcdc7ab0410448d991a65e74cec3d)
Diffstat (limited to 'lib/tdb2')
-rw-r--r-- | lib/tdb2/open.c | 26 | ||||
-rw-r--r-- | lib/tdb2/test/failtest_helper.h | 2 |
2 files changed, 27 insertions, 1 deletions
diff --git a/lib/tdb2/open.c b/lib/tdb2/open.c index b17e91c251..bad365756b 100644 --- a/lib/tdb2/open.c +++ b/lib/tdb2/open.c @@ -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", diff --git a/lib/tdb2/test/failtest_helper.h b/lib/tdb2/test/failtest_helper.h index 37acbdd832..403ff64758 100644 --- a/lib/tdb2/test/failtest_helper.h +++ b/lib/tdb2/test/failtest_helper.h @@ -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 |