summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2000-11-17 03:15:18 +0000
committerAndrew Tridgell <tridge@samba.org>2000-11-17 03:15:18 +0000
commit0de5569304ec1d1650865983dba32f13c313104c (patch)
treee48c0c7d40944fc3af5c0f759db7590823e58af3
parent475fb713a9427b54c747a4e71a011c7db29d5e13 (diff)
downloadsamba-0de5569304ec1d1650865983dba32f13c313104c.tar.gz
samba-0de5569304ec1d1650865983dba32f13c313104c.tar.bz2
samba-0de5569304ec1d1650865983dba32f13c313104c.zip
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)
-rw-r--r--source3/lib/messages.c2
-rw-r--r--source3/smbd/connection.c3
-rw-r--r--source3/smbd/service.c60
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;