summaryrefslogtreecommitdiff
path: root/source3/smbd/service.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2012-03-28 16:14:09 +0200
committerStefan Metzmacher <metze@samba.org>2012-06-25 20:55:06 +0200
commitfaa8edccef556fb281d24b76b9739c994128f6ef (patch)
tree451ed88a7e676adc61fafd51c75637855507de78 /source3/smbd/service.c
parent463b308f16733b5a0bd896c46347d39064cee170 (diff)
downloadsamba-faa8edccef556fb281d24b76b9739c994128f6ef.tar.gz
samba-faa8edccef556fb281d24b76b9739c994128f6ef.tar.bz2
samba-faa8edccef556fb281d24b76b9739c994128f6ef.zip
s3:smbd: make use of smbXsrv_tcon for smb1
Pair-Programmed-With: Michael Adam <obnox@samba.org> metze
Diffstat (limited to 'source3/smbd/service.c')
-rw-r--r--source3/smbd/service.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index fe5838225d..da5d763ad8 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -917,12 +917,32 @@ static connection_struct *make_connection_smb1(struct smbd_server_connection *sc
const char *pdev,
NTSTATUS *pstatus)
{
- connection_struct *conn = conn_new(sconn);
+ struct smbXsrv_tcon *tcon;
+ NTSTATUS status;
+ NTTIME now = 0;
+ struct connection_struct *conn;
+ const char *share_name;
+
+ status = smb1srv_tcon_create(sconn->conn, now, &tcon);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0,("make_connection_smb1: Couldn't find free tcon %s.\n",
+ nt_errstr(status)));
+ *pstatus = status;
+ return NULL;
+ }
+
+ conn = conn_new(sconn);
if (!conn) {
+ TALLOC_FREE(tcon);
+
DEBUG(0,("make_connection_smb1: Couldn't find free connection.\n"));
*pstatus = NT_STATUS_INSUFFICIENT_RESOURCES;
return NULL;
}
+
+ conn->cnum = tcon->global->tcon_wire_id;
+ conn->tcon = tcon;
+
*pstatus = make_connection_snum(sconn,
conn,
snum,
@@ -930,9 +950,29 @@ static connection_struct *make_connection_smb1(struct smbd_server_connection *sc
pdev);
if (!NT_STATUS_IS_OK(*pstatus)) {
conn_free(conn);
+ TALLOC_FREE(tcon);
return NULL;
}
- return conn;
+
+ share_name = lp_servicename(SNUM(conn));
+ tcon->global->share_name = talloc_strdup(tcon->global, share_name);
+ if (tcon->global->share_name == NULL) {
+ conn_free(conn);
+ TALLOC_FREE(tcon);
+ *pstatus = NT_STATUS_NO_MEMORY;
+ return NULL;
+ }
+
+ tcon->compat = talloc_move(tcon, &conn);
+ tcon->status = NT_STATUS_OK;
+
+ *pstatus = smbXsrv_tcon_update(tcon);
+ if (!NT_STATUS_IS_OK(*pstatus)) {
+ TALLOC_FREE(tcon);
+ return NULL;
+ }
+
+ return tcon->compat;
}
/****************************************************************************