[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Tue Jul 31 03:34:02 MDT 2012
The branch, master has been updated
via 35c0f16 s3:smbd: do a clean shutdown during release_ip() after CTDB_SRVID_RELEASE_IP
via d73b793 s3:smbd: use print_sockaddr() instead of client_socket_addr()
via 13de233 s3:smbd: move smbd_register_ips() next to release_ip()
via ec69eb4 s3:dbwrap_ctdb: initialize db_record->db
from cddcaf7 ldb: Add parameter to avoid NULL format string flagged by -Werror=format
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 35c0f164bcdbb52e38aa9d53b90d368659963764
Author: Stefan Metzmacher <metze at samba.org>
Date: Sun Jul 29 23:23:09 2012 +0200
s3:smbd: do a clean shutdown during release_ip() after CTDB_SRVID_RELEASE_IP
metze
Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
Autobuild-Date(master): Tue Jul 31 11:33:27 CEST 2012 on sn-devel-104
commit d73b7938bba32725b37f9bfa7ce3e23fbea50ce4
Author: Stefan Metzmacher <metze at samba.org>
Date: Sun Jul 29 23:27:56 2012 +0200
s3:smbd: use print_sockaddr() instead of client_socket_addr()
We already have a server address in sockaddr_storage format.
Also the name "client_socket" was very miss leading,
as it returns the local address of the socket.
metze
commit 13de233fc6a562387791281b3b0cc1bcbe56b9ef
Author: Stefan Metzmacher <metze at samba.org>
Date: Sun Jul 29 23:25:12 2012 +0200
s3:smbd: move smbd_register_ips() next to release_ip()
metze
commit ec69eb41bf1e32bec1d2d6e40bcfbd635ca505d2
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Jul 31 09:30:29 2012 +0200
s3:dbwrap_ctdb: initialize db_record->db
metze
-----------------------------------------------------------------------
Summary of changes:
source3/lib/dbwrap/dbwrap_ctdb.c | 1 +
source3/smbd/process.c | 90 +++++++++++++++++++++++---------------
2 files changed, 55 insertions(+), 36 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c
index 5605b47..0a57997 100644
--- a/source3/lib/dbwrap/dbwrap_ctdb.c
+++ b/source3/lib/dbwrap/dbwrap_ctdb.c
@@ -1057,6 +1057,7 @@ static struct db_record *fetch_locked_internal(struct db_ctdb_ctx *ctx,
return NULL;
}
+ result->db = ctx->db;
result->private_data = (void *)crec;
crec->ctdb_ctx = ctx;
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index adb773d..dd26a27 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -2462,12 +2462,21 @@ static void smbd_server_echo_handler(struct event_context *ev,
}
#ifdef CLUSTER_SUPPORT
+
+struct smbd_release_ip_state {
+ struct smbd_server_connection *sconn;
+ char addr[INET6_ADDRSTRLEN];
+};
+
/****************************************************************************
received when we should release a specific IP
****************************************************************************/
static void release_ip(const char *ip, void *priv)
{
- const char *addr = (const char *)priv;
+ struct smbd_release_ip_state *state =
+ talloc_get_type_abort(priv,
+ struct smbd_release_ip_state);
+ const char *addr = state->addr;
const char *p = addr;
if (strncmp("::ffff:", addr, 7) == 0) {
@@ -2478,19 +2487,55 @@ static void release_ip(const char *ip, void *priv)
"our address is %s\n", ip, p));
if ((strcmp(p, ip) == 0) || ((p != addr) && strcmp(addr, ip) == 0)) {
- /* we can't afford to do a clean exit - that involves
- database writes, which would potentially mean we
- are still running after the failover has finished -
- we have to get rid of this process ID straight
- away */
DEBUG(0,("Got release IP message for our IP %s - exiting immediately\n",
ip));
- /* note we must exit with non-zero status so the unclean handler gets
- called in the parent, so that the brl database is tickled */
- _exit(1);
+ /*
+ * With SMB2 we should do a clean disconnect,
+ * the previous_session_id in the session setup
+ * will cleanup the old session, tcons and opens.
+ *
+ * A clean disconnect is needed in order to support
+ * durable handles.
+ *
+ * Note: typically this is never triggered
+ * as we got a TCP RST (triggered by ctdb event scripts)
+ * before we get CTDB_SRVID_RELEASE_IP.
+ *
+ * We used to call _exit(1) here, but as this was mostly never
+ * triggered and has implication on our process model,
+ * we can just use smbd_server_connection_terminate()
+ * (also for SMB1).
+ */
+ smbd_server_connection_terminate(state->sconn,
+ "CTDB_SRVID_RELEASE_IP");
+ return;
}
}
+static NTSTATUS smbd_register_ips(struct smbd_server_connection *sconn,
+ struct sockaddr_storage *srv,
+ struct sockaddr_storage *clnt)
+{
+ struct smbd_release_ip_state *state;
+ struct ctdbd_connection *cconn;
+
+ cconn = messaging_ctdbd_connection();
+ if (cconn == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ state = talloc_zero(sconn, struct smbd_release_ip_state);
+ if (state == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ state->sconn = sconn;
+ if (print_sockaddr(state->addr, sizeof(state->addr), srv) == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ return ctdbd_register_ips(cconn, srv, clnt, release_ip, state);
+}
+
static int client_get_tcp_info(int sock, struct sockaddr_storage *server,
struct sockaddr_storage *client)
{
@@ -3067,33 +3112,6 @@ fail:
return false;
}
-#if CLUSTER_SUPPORT
-
-static NTSTATUS smbd_register_ips(struct smbd_server_connection *sconn,
- struct sockaddr_storage *srv,
- struct sockaddr_storage *clnt)
-{
- struct ctdbd_connection *cconn;
- char tmp_addr[INET6_ADDRSTRLEN];
- char *addr;
-
- cconn = messaging_ctdbd_connection();
- if (cconn == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
-
- if (client_socket_addr(sconn->sock, tmp_addr, sizeof(tmp_addr)) == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
- addr = talloc_strdup(cconn, tmp_addr);
- if (addr == NULL) {
- return NT_STATUS_NO_MEMORY;
- }
- return ctdbd_register_ips(cconn, srv, clnt, release_ip, addr);
-}
-
-#endif
-
static bool uid_in_use(const struct user_struct *user, uid_t uid)
{
while (user) {
--
Samba Shared Repository
More information about the samba-cvs
mailing list