[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Sun Jul 4 13:49:39 MDT 2010
The branch, master has been updated
via 05237dc... s3: Remove an unused variable -- thanks, metze!
via 23a31be... s3: Remove unused msg_flags from connections.tdb
via b0c83d5... s3: Replace register_message_flags() with serverid_register_msg_flags()
from 8cf1cd2... s3: Use msg_ctx->id in messaging
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 05237dca11b902104e271120a31a8a3114b35cc4
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jul 4 20:04:55 2010 +0200
s3: Remove an unused variable -- thanks, metze!
commit 23a31becacee9da11ebe4dff4a3146e19c95a5be
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jul 4 20:45:43 2010 +0200
s3: Remove unused msg_flags from connections.tdb
This breaks rolling code upgrade!
commit b0c83d50f9f609848c19180b6b032e73a1d504cb
Author: Volker Lendecke <vl at samba.org>
Date: Sun Jul 4 20:40:46 2010 +0200
s3: Replace register_message_flags() with serverid_register_msg_flags()
message_send_all is now done by walking the serverid.tdb, not the
connections.tdb anymore.
Günther, Simo, please check!
-----------------------------------------------------------------------
Summary of changes:
source3/include/proto.h | 4 +--
source3/include/serverid.h | 6 ++++
source3/include/smb.h | 1 -
source3/lib/serverid.c | 55 +++++++++++++++++++++++++++++++++-
source3/rpc_server/srv_spoolss_nt.c | 8 ++++-
source3/smbd/connection.c | 48 +-----------------------------
source3/smbd/service.c | 2 +-
7 files changed, 68 insertions(+), 56 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 30a4325..2d79aed 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5356,9 +5356,7 @@ void msg_force_tdis(struct messaging_context *msg,
bool yield_connection(connection_struct *conn, const char *name);
int count_current_connections( const char *sharename, bool clear );
-bool claim_connection(connection_struct *conn, const char *name,
- uint32 msg_flags);
-bool register_message_flags(bool doreg, uint32 msg_flags);
+bool claim_connection(connection_struct *conn, const char *name);
/* The following definitions come from smbd/dfree.c */
diff --git a/source3/include/serverid.h b/source3/include/serverid.h
index db2ce5a..3fcb554 100644
--- a/source3/include/serverid.h
+++ b/source3/include/serverid.h
@@ -33,6 +33,12 @@ bool serverid_register(const struct server_id id, uint32_t msg_flags);
bool serverid_deregister(const struct server_id id);
/*
+ * (De)register additional message flags
+ */
+bool serverid_register_msg_flags(const struct server_id id, bool do_reg,
+ uint32_t msg_flags);
+
+/*
* Check existence of a server id
*/
bool serverid_exists(const struct server_id *id);
diff --git a/source3/include/smb.h b/source3/include/smb.h
index b042de9..140d810 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -841,7 +841,6 @@ struct connections_data {
char addr[24];
char machine[FSTRING_LEN];
time_t start;
- uint32 bcast_msg_flags;
};
diff --git a/source3/lib/serverid.c b/source3/lib/serverid.c
index f92c8cf..74effa4 100644
--- a/source3/lib/serverid.c
+++ b/source3/lib/serverid.c
@@ -117,6 +117,58 @@ done:
return ret;
}
+bool serverid_register_msg_flags(const struct server_id id, bool do_reg,
+ uint32_t msg_flags)
+{
+ struct db_context *db;
+ struct serverid_key key;
+ struct serverid_data *data;
+ struct db_record *rec;
+ TDB_DATA tdbkey, tdbdata;
+ NTSTATUS status;
+ bool ret = false;
+
+ db = serverid_db();
+ if (db == NULL) {
+ return false;
+ }
+
+ serverid_fill_key(&id, &key);
+ tdbkey = make_tdb_data((uint8_t *)&key, sizeof(key));
+
+ rec = db->fetch_locked(db, talloc_tos(), tdbkey);
+ if (rec == NULL) {
+ DEBUG(1, ("Could not fetch_lock serverid.tdb record\n"));
+ return false;
+ }
+
+ if (rec->value.dsize != sizeof(struct serverid_data)) {
+ DEBUG(1, ("serverid record has unexpected size %d "
+ "(wanted %d)\n", (int)rec->value.dsize,
+ sizeof(struct serverid_data)));
+ goto done;
+ }
+
+ data = (struct serverid_data *)rec->value.dptr;
+
+ if (do_reg) {
+ data->msg_flags |= msg_flags;
+ } else {
+ data->msg_flags &= ~msg_flags;
+ }
+
+ status = rec->store(rec, tdbdata, 0);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("Storing serverid.tdb record failed: %s\n",
+ nt_errstr(status)));
+ goto done;
+ }
+ ret = true;
+done:
+ TALLOC_FREE(rec);
+ return ret;
+}
+
bool serverid_deregister(struct server_id id)
{
struct db_context *db;
@@ -161,7 +213,6 @@ static int server_exists_parse(TDB_DATA key, TDB_DATA data, void *priv)
{
struct serverid_exists_state *state =
(struct serverid_exists_state *)priv;
- uint64_t unique_id;
if (data.dsize != sizeof(struct serverid_data)) {
return -1;
@@ -172,7 +223,7 @@ static int server_exists_parse(TDB_DATA key, TDB_DATA data, void *priv)
* aligned.
*/
state->exists = (memcmp(&state->id->unique_id, data.dptr,
- sizeof(unique_id)) == 0);
+ sizeof(state->id->unique_id)) == 0);
return 0;
}
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index c844027..dae9f37 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -185,7 +185,9 @@ static void srv_spoolss_replycloseprinter(int snum, struct policy_handle *handle
/* Tell the connections db we're no longer interested in
* printer notify messages. */
- register_message_flags(false, FLAG_MSG_PRINT_NOTIFY);
+ serverid_register_msg_flags(
+ procid_self(),
+ false, FLAG_MSG_PRINT_NOTIFY);
}
smb_connections--;
@@ -2355,7 +2357,9 @@ static bool srv_spoolss_replyopenprinter(int snum, const char *printer,
receive_notify2_message_list);
/* Tell the connections db we're now interested in printer
* notify messages. */
- register_message_flags(true, FLAG_MSG_PRINT_NOTIFY);
+ serverid_register_msg_flags(
+ procid_self(),
+ true, FLAG_MSG_PRINT_NOTIFY);
}
/*
diff --git a/source3/smbd/connection.c b/source3/smbd/connection.c
index e2b01d0..e2d15f1 100644
--- a/source3/smbd/connection.c
+++ b/source3/smbd/connection.c
@@ -120,8 +120,7 @@ int count_current_connections( const char *sharename, bool clear )
Claim an entry in the connections database.
****************************************************************************/
-bool claim_connection(connection_struct *conn, const char *name,
- uint32 msg_flags)
+bool claim_connection(connection_struct *conn, const char *name)
{
struct db_record *rec;
struct connections_data crec;
@@ -148,7 +147,6 @@ bool claim_connection(connection_struct *conn, const char *name,
sizeof(crec.servicename));
}
crec.start = time(NULL);
- crec.bcast_msg_flags = msg_flags;
strlcpy(crec.machine,get_remote_machine_name(),sizeof(crec.machine));
strlcpy(crec.addr,conn?conn->client_address:
@@ -170,47 +168,3 @@ bool claim_connection(connection_struct *conn, const char *name,
return True;
}
-
-bool register_message_flags(bool doreg, uint32 msg_flags)
-{
- struct db_record *rec;
- struct connections_data *pcrec;
- NTSTATUS status;
-
- DEBUG(10,("register_message_flags: %s flags 0x%x\n",
- doreg ? "adding" : "removing",
- (unsigned int)msg_flags ));
-
- if (!(rec = connections_fetch_entry(NULL, NULL, ""))) {
- DEBUG(0, ("connections_fetch_entry failed\n"));
- return False;
- }
-
- if (rec->value.dsize != sizeof(struct connections_data)) {
- DEBUG(0,("register_message_flags: Got wrong record size\n"));
- TALLOC_FREE(rec);
- return False;
- }
-
- pcrec = (struct connections_data *)rec->value.dptr;
- if (doreg)
- pcrec->bcast_msg_flags |= msg_flags;
- else
- pcrec->bcast_msg_flags &= ~msg_flags;
-
- status = rec->store(rec, rec->value, TDB_REPLACE);
-
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0,("register_message_flags: tdb_store failed: %s.\n",
- nt_errstr(status)));
- TALLOC_FREE(rec);
- return False;
- }
-
- DEBUG(10,("register_message_flags: new flags 0x%x\n",
- (unsigned int)pcrec->bcast_msg_flags ));
-
- TALLOC_FREE(rec);
-
- return True;
-}
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index 472de24..e3f8ce6 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -864,7 +864,7 @@ connection_struct *make_connection_snum(struct smbd_server_connection *sconn,
/*
* Get us an entry in the connections db
*/
- if (!claim_connection(conn, lp_servicename(snum), 0)) {
+ if (!claim_connection(conn, lp_servicename(snum))) {
DEBUG(1, ("Could not store connections entry\n"));
*pstatus = NT_STATUS_INTERNAL_DB_ERROR;
goto err_root_exit;
--
Samba Shared Repository
More information about the samba-cvs
mailing list