diff options
author | Andrew Tridgell <tridge@samba.org> | 2000-11-17 03:15:18 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2000-11-17 03:15:18 +0000 |
commit | 0de5569304ec1d1650865983dba32f13c313104c (patch) | |
tree | e48c0c7d40944fc3af5c0f759db7590823e58af3 | |
parent | 475fb713a9427b54c747a4e71a011c7db29d5e13 (diff) | |
download | samba-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.c | 2 | ||||
-rw-r--r-- | source3/smbd/connection.c | 3 | ||||
-rw-r--r-- | 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; |