summaryrefslogtreecommitdiff
path: root/lib/tdb2/tdb1_transaction.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2011-09-14 08:11:13 +0930
committerRusty Russell <rusty@rustcorp.com.au>2011-09-14 08:11:13 +0930
commit85fe9cffe529fd6a8c76ca5f0e3c68c090ce25bf (patch)
treeb115b236b8c142833137041a5804ee2e549f0f3c /lib/tdb2/tdb1_transaction.c
parent26f3587d4bf60fe3c82084a7661c4f856534725f (diff)
downloadsamba-85fe9cffe529fd6a8c76ca5f0e3c68c090ce25bf.tar.gz
samba-85fe9cffe529fd6a8c76ca5f0e3c68c090ce25bf.tar.bz2
samba-85fe9cffe529fd6a8c76ca5f0e3c68c090ce25bf.zip
tdb2: return TDB_ERR_RDONLY from transactions on R/O databases, log nesting
Rather than rturning TDB_ERR_EINVAL, return TDB_ERR_RDONLY, and log when we fail due to nesting. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 27647f94668040d91de377849dce87dabd72be69)
Diffstat (limited to 'lib/tdb2/tdb1_transaction.c')
-rw-r--r--lib/tdb2/tdb1_transaction.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/lib/tdb2/tdb1_transaction.c b/lib/tdb2/tdb1_transaction.c
index 126f768468..6e39de33f4 100644
--- a/lib/tdb2/tdb1_transaction.c
+++ b/lib/tdb2/tdb1_transaction.c
@@ -418,18 +418,34 @@ static const struct tdb1_methods transaction1_methods = {
static int _tdb1_transaction_start(struct tdb_context *tdb)
{
/* some sanity checks */
- if ((tdb->flags & TDB_RDONLY) || (tdb->flags & TDB_INTERNAL) || tdb->tdb1.traverse_read) {
- tdb->last_error = tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
- "tdb1_transaction_start: cannot start a"
- " transaction on a read-only or"
- " internal db");
+ if (tdb->flags & TDB_INTERNAL) {
+ tdb->last_error = tdb_logerr(tdb, TDB_ERR_EINVAL,
+ TDB_LOG_USE_ERROR,
+ "tdb1_transaction_start:"
+ " cannot start a"
+ " transaction on an"
+ " internal tdb");
+ return -1;
+ }
+
+ if ((tdb->flags & TDB_RDONLY) || tdb->tdb1.traverse_read) {
+ tdb->last_error = tdb_logerr(tdb, TDB_ERR_RDONLY,
+ TDB_LOG_USE_ERROR,
+ "tdb_transaction_start:"
+ " cannot start a"
+ " transaction on a "
+ " read-only tdb");
return -1;
}
/* cope with nested tdb1_transaction_start() calls */
if (tdb->tdb1.transaction != NULL) {
if (!(tdb->flags & TDB_ALLOW_NESTING)) {
- tdb->last_error = TDB_ERR_EINVAL;
+ tdb->last_error
+ = tdb_logerr(tdb, TDB_ERR_EINVAL,
+ TDB_LOG_USE_ERROR,
+ "tdb_transaction_start:"
+ " already inside transaction");
return -1;
}
tdb->stats.transaction_nest++;