X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Fopen.c;h=59b4667d1bb86320ef79f226e3de609888dc6939;hp=5d5eff1394b870233e90d22375438cc4be591cfc;hb=fc44729c471bcdc7ab0410448d991a65e74cec3d;hpb=49475d68deecd0b31597ed6094229171d2699b11 diff --git a/ccan/tdb2/open.c b/ccan/tdb2/open.c index 5d5eff13..59b4667d 100644 --- a/ccan/tdb2/open.c +++ b/ccan/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",