From 0de5569304ec1d1650865983dba32f13c313104c Mon Sep 17 00:00:00 2001
From: Andrew Tridgell <tridge@samba.org>
Date: Fri, 17 Nov 2000 03:15:18 +0000
Subject: fixed the problem with messages not getting through

the problem had nothing to do with being your own pid, it was instead
a problem with IPC$ connections not being registered in the
connections database and an incorrect test for -1 in the messaging
code.

These changes also mean that IPC$ shares now show up in
smbstatus. That is probably a good thing.
(This used to be commit 3575ad10985a18f897e38179ca69fa9a49a7ea02)
---
 source3/lib/messages.c    |  2 +-
 source3/smbd/connection.c |  3 ---
 source3/smbd/service.c    | 60 +++++++++++++++++++++--------------------------
 3 files changed, 28 insertions(+), 37 deletions(-)

diff --git a/source3/lib/messages.c b/source3/lib/messages.c
index 8f181f0982..7a0343b249 100644
--- a/source3/lib/messages.c
+++ b/source3/lib/messages.c
@@ -374,7 +374,7 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void
 
 	memcpy(&crec, dbuf.dptr, sizeof(crec));
 
-	if (crec.cnum == -1) return 0;
+	if (crec.cnum != -1) return 0;
 	message_send_pid(crec.pid, msg_all.msg_type, msg_all.buf, msg_all.len, msg_all.duplicates);
 	return 0;
 }
diff --git a/source3/smbd/connection.c b/source3/smbd/connection.c
index 6e088f9f8f..cf455c0a8b 100644
--- a/source3/smbd/connection.c
+++ b/source3/smbd/connection.c
@@ -72,9 +72,6 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO
 	struct connections_data crec;
 	TDB_DATA kbuf, dbuf;
 
-	if (max_connections <= 0)
-		return(True);
-
 	if (!tdb) {
 		tdb = tdb_open(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST, 
 			       O_RDWR | O_CREAT, 0644);
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index fcdd9a376b..ba381a40e8 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -452,27 +452,25 @@ connection_struct *make_connection(char *service,char *user,char *password, int
 	conn->ngroups = 0;
 	conn->groups = NULL;
 	
-	if (!IS_IPC(conn)) {
-		/* Find all the groups this uid is in and
-		   store them. Used by become_user() */
-		initialise_groups(conn->user, conn->uid, conn->gid); 
-		get_current_groups(&conn->ngroups,&conn->groups);
+	/* Find all the groups this uid is in and
+	   store them. Used by become_user() */
+	initialise_groups(conn->user, conn->uid, conn->gid); 
+	get_current_groups(&conn->ngroups,&conn->groups);
 		
-		/* check number of connections */
-		if (!claim_connection(conn,
-				      lp_servicename(SNUM(conn)),
-				      lp_max_connections(SNUM(conn)),
-				      False)) {
-			DEBUG(1,("too many connections - rejected\n"));
-			*ecode = ERRnoresource;
-			conn_free(conn);
-			return NULL;
-		}  
+	/* check number of connections */
+	if (!claim_connection(conn,
+			      lp_servicename(SNUM(conn)),
+			      lp_max_connections(SNUM(conn)),
+			      False)) {
+		DEBUG(1,("too many connections - rejected\n"));
+		*ecode = ERRnoresource;
+		conn_free(conn);
+		return NULL;
+	}  
 		
-		if (lp_status(SNUM(conn)))
-			claim_connection(conn,"",
-					 MAXSTATUS,False);
-	} /* IS_IPC */
+	if (lp_status(SNUM(conn)))
+		claim_connection(conn,"",
+				 MAXSTATUS,False);
 
 	conn->nt_user_token = create_nt_token(conn->uid, conn->gid, conn->ngroups, conn->groups);
 
@@ -519,13 +517,11 @@ connection_struct *make_connection(char *service,char *user,char *password, int
 	
 	if (!become_user(conn, conn->vuid)) {
 		DEBUG(0,("Can't become connected user!\n"));
-		if (!IS_IPC(conn)) {
-			yield_connection(conn,
-					 lp_servicename(SNUM(conn)),
-					 lp_max_connections(SNUM(conn)));
-			if (lp_status(SNUM(conn))) {
-				yield_connection(conn,"",MAXSTATUS);
-			}
+		yield_connection(conn,
+				 lp_servicename(SNUM(conn)),
+				 lp_max_connections(SNUM(conn)));
+		if (lp_status(SNUM(conn))) {
+			yield_connection(conn,"",MAXSTATUS);
 		}
 		conn_free(conn);
 		*ecode = ERRbadpw;
@@ -536,13 +532,11 @@ connection_struct *make_connection(char *service,char *user,char *password, int
 		DEBUG(0,("Can't change directory to %s (%s)\n",
 			 conn->connectpath,strerror(errno)));
 		unbecome_user();
-		if (!IS_IPC(conn)) {
-			yield_connection(conn,
-					 lp_servicename(SNUM(conn)),
-					 lp_max_connections(SNUM(conn)));
-			if (lp_status(SNUM(conn))) 
-				yield_connection(conn,"",MAXSTATUS);
-		}
+		yield_connection(conn,
+				 lp_servicename(SNUM(conn)),
+				 lp_max_connections(SNUM(conn)));
+		if (lp_status(SNUM(conn))) 
+			yield_connection(conn,"",MAXSTATUS);
 		conn_free(conn);
 		*ecode = ERRnosuchshare;
 		return NULL;
-- 
cgit