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 <[email protected]>
Date:   Sun Jul 4 20:04:55 2010 +0200

    s3: Remove an unused variable -- thanks, metze!

commit 23a31becacee9da11ebe4dff4a3146e19c95a5be
Author: Volker Lendecke <[email protected]>
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 <[email protected]>
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

Reply via email to