summaryrefslogtreecommitdiff
path: root/source3/smbd/conn.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2009-08-06 13:22:33 +0200
committerStefan Metzmacher <metze@samba.org>2009-08-07 14:18:14 +0200
commitc54e6b19e395724eb84f6e7157073e8772bc8594 (patch)
tree959cf0c63c920a933f407025bb99bcef489cd90c /source3/smbd/conn.c
parent8300b255a5f88cc4ca23678595810d7caec50a00 (diff)
downloadsamba-c54e6b19e395724eb84f6e7157073e8772bc8594.tar.gz
samba-c54e6b19e395724eb84f6e7157073e8772bc8594.tar.bz2
samba-c54e6b19e395724eb84f6e7157073e8772bc8594.zip
s3:smbd: add a smbd_server_connection pointer to connection_struct
This can be NULL for faked connection structs used in the rpc server or printing code. metze
Diffstat (limited to 'source3/smbd/conn.c')
-rw-r--r--source3/smbd/conn.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/source3/smbd/conn.c b/source3/smbd/conn.c
index af6e0919a4..9d1bbee8c9 100644
--- a/source3/smbd/conn.c
+++ b/source3/smbd/conn.c
@@ -101,6 +101,7 @@ connection_struct *conn_new(struct smbd_server_connection *sconn)
TALLOC_FREE(conn);
return NULL;
}
+ conn->sconn = sconn;
return conn;
}
@@ -154,6 +155,7 @@ find_again:
TALLOC_FREE(conn);
return NULL;
}
+ conn->sconn = sconn;
conn->cnum = i;
conn->force_group_gid = (gid_t)-1;
@@ -181,7 +183,7 @@ bool conn_close_all(struct smbd_server_connection *sconn)
for (conn=sconn->smb1.tcons.Connections;conn;conn=next) {
next=conn->next;
set_current_service(conn, 0, True);
- close_cnum(sconn, conn, conn->vuid);
+ close_cnum(conn, conn->vuid);
ret = true;
}
return ret;
@@ -294,19 +296,24 @@ void conn_free_internal(connection_struct *conn)
Free a conn structure.
****************************************************************************/
-void conn_free(struct smbd_server_connection *sconn, connection_struct *conn)
+void conn_free(connection_struct *conn)
{
- if (sconn->allow_smb2) {
+ if (conn->sconn == NULL) {
+ conn_free_internal(conn);
+ return;
+ }
+
+ if (conn->sconn->allow_smb2) {
conn_free_internal(conn);
return;
}
- DLIST_REMOVE(sconn->smb1.tcons.Connections, conn);
+ DLIST_REMOVE(conn->sconn->smb1.tcons.Connections, conn);
- bitmap_clear(sconn->smb1.tcons.bmap, conn->cnum);
+ bitmap_clear(conn->sconn->smb1.tcons.bmap, conn->cnum);
- SMB_ASSERT(sconn->smb1.tcons.num_open > 0);
- sconn->smb1.tcons.num_open--;
+ SMB_ASSERT(conn->sconn->smb1.tcons.num_open > 0);
+ conn->sconn->smb1.tcons.num_open--;
conn_free_internal(conn);
}
@@ -340,7 +347,7 @@ void msg_force_tdis(struct messaging_context *msg,
if (strequal(lp_servicename(SNUM(conn)), sharename)) {
DEBUG(1,("Forcing close of share %s cnum=%d\n",
sharename, conn->cnum));
- close_cnum(sconn, conn, (uint16)-1);
+ close_cnum(conn, (uint16)-1);
}
}
}