svn commit: samba r16562 - in branches/tmp/vl-messaging/source: .
include lib locking param
jmcd at samba.org
jmcd at samba.org
Tue Jun 27 14:24:26 GMT 2006
Author: jmcd
Date: 2006-06-27 14:24:25 +0000 (Tue, 27 Jun 2006)
New Revision: 16562
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16562
Log:
Aleksey's changes to put in dbwrapper to later enable messaging.
Modified:
branches/tmp/vl-messaging/source/Makefile.in
branches/tmp/vl-messaging/source/include/smb.h
branches/tmp/vl-messaging/source/lib/dbwrap_file.c
branches/tmp/vl-messaging/source/lib/dbwrap_tdb.c
branches/tmp/vl-messaging/source/locking/brlock.c
branches/tmp/vl-messaging/source/locking/locking.c
branches/tmp/vl-messaging/source/param/loadparm.c
Changeset:
Modified: branches/tmp/vl-messaging/source/Makefile.in
===================================================================
--- branches/tmp/vl-messaging/source/Makefile.in 2006-06-27 11:07:55 UTC (rev 16561)
+++ branches/tmp/vl-messaging/source/Makefile.in 2006-06-27 14:24:25 UTC (rev 16562)
@@ -182,7 +182,7 @@
tdb/lock.o tdb/open.o tdb/transaction.o tdb/traverse.o
TDB_OBJ = $(TDBBASE_OBJ) tdb/tdbutil.o tdb/tdbback.o \
- lib/dbwrap_tdb.o lib/dbwrap_file.o
+ lib/dbwrap.o lib/dbwrap_tdb.o lib/dbwrap_file.o lib/dbwrap_msg.o
SMBLDAP_OBJ = @SMBLDAP@ @SMBLDAPUTIL@
Modified: branches/tmp/vl-messaging/source/include/smb.h
===================================================================
--- branches/tmp/vl-messaging/source/include/smb.h 2006-06-27 11:07:55 UTC (rev 16561)
+++ branches/tmp/vl-messaging/source/include/smb.h 2006-06-27 14:24:25 UTC (rev 16562)
@@ -713,6 +713,7 @@
BOOL initial_delete_on_close;
BOOL fresh;
BOOL modified;
+ struct db_record *record;
};
/*
@@ -862,6 +863,7 @@
BOOL modified;
struct lock_key key;
void *lock_data;
+ struct db_record *record;
};
#define BRLOCK_FN_CAST() \
@@ -1512,6 +1514,9 @@
enum messaging_type {MESSAGING_TYPE_TDB, MESSAGING_TYPE_DGRAM,
MESSAGING_TYPE_STREAM, MESSAGING_TYPE_DISPATCHER};
+/* locking types */
+enum locking_type {LOCKING_TYPE_TDB, LOCKING_TYPE_FILES, LOCKING_TYPE_MESSAGES};
+
/*
* Global value meaing that the smb_uid field should be
* ingored (in share level security and protocol level == CORE)
Modified: branches/tmp/vl-messaging/source/lib/dbwrap_file.c
===================================================================
--- branches/tmp/vl-messaging/source/lib/dbwrap_file.c 2006-06-27 11:07:55 UTC (rev 16561)
+++ branches/tmp/vl-messaging/source/lib/dbwrap_file.c 2006-06-27 14:24:25 UTC (rev 16562)
@@ -123,7 +123,10 @@
return NULL;
}
+ become_root();
file->fd = open(file->path, O_RDWR|O_CREAT, 0644);
+ unbecome_root();
+
if (file->fd < 0) {
DEBUG(3, ("Could not open/create %s: %s\n",
file->path, strerror(errno)));
@@ -221,11 +224,14 @@
talloc_get_type_abort(rec->private_data,
struct db_locked_file);
+ become_root();
if (unlink(file->path) != 0) {
+ unbecome_root();
DEBUG(3, ("unlink(%s) failed: %s\n", file->path,
strerror(errno)));
return -1;
}
+ unbecome_root();
return 0;
}
Modified: branches/tmp/vl-messaging/source/lib/dbwrap_tdb.c
===================================================================
--- branches/tmp/vl-messaging/source/lib/dbwrap_tdb.c 2006-06-27 11:07:55 UTC (rev 16561)
+++ branches/tmp/vl-messaging/source/lib/dbwrap_tdb.c 2006-06-27 14:24:25 UTC (rev 16562)
@@ -165,7 +165,7 @@
return 0;
}
-struct db_context *db_open(TALLOC_CTX *mem_ctx, const char *name,
+struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx, const char *name,
int hash_size, int tdb_flags,
int open_flags, mode_t mode)
{
Modified: branches/tmp/vl-messaging/source/locking/brlock.c
===================================================================
--- branches/tmp/vl-messaging/source/locking/brlock.c 2006-06-27 11:07:55 UTC (rev 16561)
+++ branches/tmp/vl-messaging/source/locking/brlock.c 2006-06-27 14:24:25 UTC (rev 16562)
@@ -57,7 +57,7 @@
/* The open brlock.tdb database. */
-static TDB_CONTEXT *tdb;
+static struct db_context *brlock_db;
/****************************************************************************
Debug info at level 10 for lock struct.
@@ -267,14 +267,14 @@
void brl_init(int read_only)
{
- if (tdb) {
+ if (brlock_db) {
return;
}
- tdb = tdb_open_log(lock_path("brlock.tdb"),
- lp_open_files_db_hash_size(),
- TDB_DEFAULT|(read_only?0x0:TDB_CLEAR_IF_FIRST),
- read_only?O_RDONLY:(O_RDWR|O_CREAT), 0644 );
- if (!tdb) {
+ brlock_db = db_open(NULL, lock_path("brlock.tdb"),
+ lp_open_files_db_hash_size(),
+ TDB_DEFAULT|(read_only?0x0:TDB_CLEAR_IF_FIRST),
+ read_only?O_RDONLY:(O_RDWR|O_CREAT), 0644 );
+ if (!brlock_db) {
DEBUG(0,("Failed to open byte range locking database %s\n",
lock_path("brlock.tdb")));
return;
@@ -287,10 +287,10 @@
void brl_shutdown(int read_only)
{
- if (!tdb) {
+ if (!brlock_db) {
return;
}
- tdb_close(tdb);
+ TALLOC_FREE(brlock_db);
}
#if ZERO_ZERO
@@ -1317,7 +1317,7 @@
on each lock.
****************************************************************************/
-static int traverse_fn(TDB_CONTEXT *ttdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
+static int traverse_fn(TDB_DATA kbuf, TDB_DATA dbuf, void *state)
{
struct lock_struct *locks;
struct lock_key *key;
@@ -1346,13 +1346,22 @@
}
if (orig_num_locks != num_locks) {
+ struct db_record *rec;
+
dbuf.dptr = (void *)locks;
dbuf.dsize = num_locks * sizeof(*locks);
- if (dbuf.dsize) {
- tdb_store(ttdb, kbuf, dbuf, TDB_REPLACE);
+ rec = brlock_db->fetch_locked(brlock_db, brlock_db, kbuf);
+
+ if(rec == NULL) {
+ DEBUG(0, ("Can't fetch db record\n"));
} else {
- tdb_delete(ttdb, kbuf);
+ if (dbuf.dsize) {
+ rec->store(rec, dbuf, TDB_REPLACE);
+ } else {
+ rec->delete_rec(rec);
+ }
+ TALLOC_FREE(rec);
}
}
@@ -1376,10 +1385,10 @@
int brl_forall(BRLOCK_FN(fn))
{
- if (!tdb) {
+ if (!brlock_db) {
return 0;
}
- return tdb_traverse(tdb, traverse_fn, (void *)fn);
+ return brlock_db->traverse(brlock_db, traverse_fn, (void *)fn);
}
/*******************************************************************
@@ -1392,18 +1401,14 @@
{
struct byte_range_lock *br_lck =
talloc_get_type_abort(p, struct byte_range_lock);
- TDB_DATA key;
- key.dptr = (char *)&br_lck->key;
- key.dsize = sizeof(struct lock_key);
-
if (!br_lck->modified) {
goto done;
}
if (br_lck->num_locks == 0) {
/* No locks - delete this entry. */
- if (tdb_delete(tdb, key) == -1) {
+ if (br_lck->record->delete_rec(br_lck->record) == -1) {
smb_panic("Could not delete byte range lock entry\n");
}
} else {
@@ -1411,15 +1416,15 @@
data.dptr = br_lck->lock_data;
data.dsize = br_lck->num_locks * sizeof(struct lock_struct);
- if (tdb_store(tdb, key, data, TDB_REPLACE) == -1) {
+ if (br_lck->record->store(br_lck->record, data, TDB_REPLACE) == -1) {
smb_panic("Could not store byte range mode entry\n");
}
}
done:
- tdb_chainunlock(tdb, key);
SAFE_FREE(br_lck->lock_data);
+ TALLOC_FREE(br_lck->record);
return 0;
}
@@ -1433,7 +1438,6 @@
files_struct *fsp)
{
TDB_DATA key;
- TDB_DATA data;
struct byte_range_lock *br_lck = TALLOC_P(mem_ctx, struct byte_range_lock);
if (br_lck == NULL) {
@@ -1450,7 +1454,9 @@
key.dptr = (char *)&br_lck->key;
key.dsize = sizeof(struct lock_key);
- if (tdb_chainlock(tdb, key) != 0) {
+ br_lck->record = brlock_db->fetch_locked(brlock_db, brlock_db, key);
+
+ if (br_lck->record == NULL) {
DEBUG(3, ("Could not lock byte range lock entry\n"));
TALLOC_FREE(br_lck);
return NULL;
@@ -1458,10 +1464,11 @@
talloc_set_destructor(br_lck, byte_range_lock_destructor);
- data = tdb_fetch(tdb, key);
- br_lck->lock_data = (void *)data.dptr;
- br_lck->num_locks = data.dsize / sizeof(struct lock_struct);
-
+ br_lck->num_locks = br_lck->record->value.dsize / sizeof(struct lock_struct);
+ br_lck->lock_data = SMB_MALLOC_ARRAY(struct lock_struct, br_lck->num_locks);
+ memcpy(br_lck->lock_data, br_lck->record->value.dptr,
+ br_lck->record->value.dsize);
+
if (!fsp->lockdb_clean) {
/* This is the first time we've accessed this. */
@@ -1469,7 +1476,6 @@
/* Makes the lockdb self cleaning at low cost. */
if (!validate_lock_entries(&br_lck->num_locks, (struct lock_struct **)&br_lck->lock_data)) {
- tdb_chainunlock(tdb, key);
SAFE_FREE(br_lck->lock_data);
TALLOC_FREE(br_lck);
return NULL;
Modified: branches/tmp/vl-messaging/source/locking/locking.c
===================================================================
--- branches/tmp/vl-messaging/source/locking/locking.c 2006-06-27 11:07:55 UTC (rev 16561)
+++ branches/tmp/vl-messaging/source/locking/locking.c 2006-06-27 14:24:25 UTC (rev 16562)
@@ -43,7 +43,7 @@
#define DBGC_CLASS DBGC_LOCKING
/* the locking database handle */
-static TDB_CONTEXT *tdb;
+static struct db_context *lock_db;
/****************************************************************************
Debugging aids :-).
@@ -366,16 +366,16 @@
{
brl_init(read_only);
- if (tdb)
+ if (lock_db)
return True;
- tdb = tdb_open_log(lock_path("locking.tdb"),
- lp_open_files_db_hash_size(),
- TDB_DEFAULT|(read_only?0x0:TDB_CLEAR_IF_FIRST),
- read_only?O_RDONLY:O_RDWR|O_CREAT,
- 0644);
+ lock_db = db_open(NULL, lock_path("locking.tdb"),
+ lp_open_files_db_hash_size(),
+ TDB_DEFAULT|(read_only?0x0:TDB_CLEAR_IF_FIRST),
+ read_only?O_RDONLY:O_RDWR|O_CREAT,
+ 0644);
- if (!tdb) {
+ if (!lock_db) {
DEBUG(0,("ERROR: Failed to initialise locking database\n"));
return False;
}
@@ -394,15 +394,11 @@
BOOL locking_end(void)
{
- BOOL ret = True;
-
brl_shutdown(open_read_only);
- if (tdb) {
- if (tdb_close(tdb) != 0)
- ret = False;
+ if (lock_db) {
+ TALLOC_FREE(lock_db);
}
-
- return ret;
+ return True;
}
/*******************************************************************
@@ -691,7 +687,6 @@
{
struct share_mode_lock *lck =
talloc_get_type_abort(p, struct share_mode_lock);
- TDB_DATA key = locking_key(lck->dev, lck->ino);
TDB_DATA data;
if (!lck->modified) {
@@ -703,20 +698,19 @@
if (data.dptr == NULL) {
if (!lck->fresh) {
/* There has been an entry before, delete it */
- if (tdb_delete(tdb, key) == -1) {
+ if (lck->record->delete_rec(lck->record) == -1) {
smb_panic("Could not delete share entry\n");
}
}
goto done;
}
- if (tdb_store(tdb, key, data, TDB_REPLACE) == -1) {
+ if (lck->record->store(lck->record, data, TDB_REPLACE) == -1) {
smb_panic("Could not store share mode entry\n");
}
done:
- tdb_chainunlock(tdb, key);
-
+ TALLOC_FREE(lck->record);
return 0;
}
@@ -727,7 +721,6 @@
{
struct share_mode_lock *lck;
TDB_DATA key = locking_key(dev, ino);
- TDB_DATA data;
lck = TALLOC_P(mem_ctx, struct share_mode_lock);
if (lck == NULL) {
@@ -750,7 +743,8 @@
lck->fresh = False;
lck->modified = False;
- if (tdb_chainlock(tdb, key) != 0) {
+ lck->record = lock_db->fetch_locked(lock_db, lock_db, key);
+ if (lck->record == NULL) {
DEBUG(3, ("Could not lock share entry\n"));
TALLOC_FREE(lck);
return NULL;
@@ -762,8 +756,7 @@
talloc_set_destructor(lck, share_mode_lock_destructor);
- data = tdb_fetch(tdb, key);
- lck->fresh = (data.dptr == NULL);
+ lck->fresh = (lck->record->value.dptr == NULL);
if (lck->fresh) {
@@ -779,16 +772,13 @@
return NULL;
}
} else {
- if (!parse_share_modes(data, lck)) {
+ if (!parse_share_modes(lck->record->value, lck)) {
DEBUG(0, ("Could not parse share modes\n"));
TALLOC_FREE(lck);
- SAFE_FREE(data.dptr);
return NULL;
}
}
- SAFE_FREE(data.dptr);
-
return lck;
}
@@ -1266,8 +1256,7 @@
return True;
}
-static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf,
- void *state)
+static int traverse_fn(TDB_DATA kbuf, TDB_DATA dbuf, void *state)
{
struct locking_data *data;
struct share_mode_entry *shares;
@@ -1303,7 +1292,7 @@
int share_mode_forall(void (*fn)(const struct share_mode_entry *, const char *, const char *))
{
- if (tdb == NULL)
+ if (lock_db == NULL)
return 0;
- return tdb_traverse(tdb, traverse_fn, fn);
+ return lock_db->traverse(lock_db, traverse_fn, fn);
}
Modified: branches/tmp/vl-messaging/source/param/loadparm.c
===================================================================
--- branches/tmp/vl-messaging/source/param/loadparm.c 2006-06-27 11:07:55 UTC (rev 16561)
+++ branches/tmp/vl-messaging/source/param/loadparm.c 2006-06-27 14:24:25 UTC (rev 16562)
@@ -240,6 +240,8 @@
char *szMsgAddress;
char *szMsgNetwork;
int iMsgPort;
+ int iLockType;
+ char *szLockAddress;
char *szCupsServer;
char *szIPrintServer;
int ldap_passwd_sync;
@@ -791,6 +793,14 @@
{ -1, NULL}
};
+/* locking type options. */
+static const struct enum_list enum_locking_type_vals[] = {
+ { LOCKING_TYPE_TDB, "tdb" },
+ { LOCKING_TYPE_FILES, "files" },
+ { LOCKING_TYPE_MESSAGES, "messages" },
+ { -1, NULL}
+};
+
/*
Do you want session setups at user level security with a invalid
password to be rejected or allowed in as guest? WinNT rejects them
@@ -986,6 +996,8 @@
{"messaging address", P_STRING, P_GLOBAL, &Globals.szMsgAddress, NULL, NULL, FLAG_ADVANCED},
{"messaging network", P_STRING, P_GLOBAL, &Globals.szMsgNetwork, NULL, NULL, FLAG_ADVANCED},
{"messaging port", P_INTEGER, P_GLOBAL, &Globals.iMsgPort, NULL, NULL, FLAG_ADVANCED},
+ {"locking type", P_ENUM, P_GLOBAL, &Globals.iLockType, NULL, enum_locking_type_vals, FLAG_ADVANCED | FLAG_GLOBAL},
+ {"locking address", P_STRING, P_GLOBAL, &Globals.szLockAddress, NULL, NULL, FLAG_ADVANCED},
{"defer sharing violations", P_BOOL, P_GLOBAL, &Globals.bDeferSharingViolations, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL},
{"ea support", P_BOOL, P_LOCAL, &sDefault.bEASupport, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL},
{"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL},
@@ -1633,6 +1645,8 @@
string_set(&Globals.szMsgAddress, "127.0.0.1");
string_set(&Globals.szMsgNetwork, "127.0.0.0/8");
Globals.iMsgPort = DEFAULT_MESSAGING_PORT;
+ Globals.iLockType = LOCKING_TYPE_TDB;
+ string_set(&Globals.szLockAddress, "127.0.0.1");
string_set(&Globals.szCupsServer, "");
string_set(&Globals.szIPrintServer, "");
@@ -1850,6 +1864,8 @@
FN_GLOBAL_STRING(lp_messaging_address, &Globals.szMsgAddress)
FN_GLOBAL_STRING(lp_messaging_network, &Globals.szMsgNetwork)
FN_GLOBAL_INTEGER(lp_messaging_port, &Globals.iMsgPort)
+FN_GLOBAL_INTEGER(lp_locking_type, &Globals.iLockType)
+FN_GLOBAL_STRING(lp_locking_address, &Globals.szLockAddress)
FN_GLOBAL_BOOL(lp_winbind_enum_users, &Globals.bWinbindEnumUsers)
FN_GLOBAL_BOOL(lp_winbind_enum_groups, &Globals.bWinbindEnumGroups)
FN_GLOBAL_BOOL(lp_winbind_use_default_domain, &Globals.bWinbindUseDefaultDomain)
More information about the samba-cvs
mailing list