From 0de5569304ec1d1650865983dba32f13c313104c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell 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(-) (limited to 'source3') 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