[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