svn commit: samba r14485 - in branches/SAMBA_4_0/source/smb_server/smb: .

metze at samba.org metze at samba.org
Thu Mar 16 18:26:15 GMT 2006


Author: metze
Date: 2006-03-16 18:26:14 +0000 (Thu, 16 Mar 2006)
New Revision: 14485

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14485

Log:
mark smb commands as need session and need tcon explicit,
so we only need to check in one global place and can't forget
in other places...

metze
Modified:
   branches/SAMBA_4_0/source/smb_server/smb/receive.c
   branches/SAMBA_4_0/source/smb_server/smb/reply.c
   branches/SAMBA_4_0/source/smb_server/smb/service.c


Changeset:
Modified: branches/SAMBA_4_0/source/smb_server/smb/receive.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb/receive.c	2006-03-16 17:51:04 UTC (rev 14484)
+++ branches/SAMBA_4_0/source/smb_server/smb/receive.c	2006-03-16 18:26:14 UTC (rev 14485)
@@ -160,8 +160,9 @@
 /*
   These flags determine some of the permissions required to do an operation 
 */
-#define AS_USER (1<<0)
-#define SIGNING_NO_REPLY (1<<1)
+#define NEED_SESS		(1<<0)
+#define NEED_TCON		(1<<1)
+#define SIGNING_NO_REPLY	(1<<2)
 
 /* 
    define a list of possible SMB messages and their corresponding
@@ -175,60 +176,60 @@
 	int flags;
 }
  smb_messages[256] = {
-/* 0x00 */ { "SMBmkdir",	smbsrv_reply_mkdir,	AS_USER },
-/* 0x01 */ { "SMBrmdir",	smbsrv_reply_rmdir,	AS_USER },
-/* 0x02 */ { "SMBopen",		smbsrv_reply_open,	AS_USER },
-/* 0x03 */ { "SMBcreate",	smbsrv_reply_mknew,	AS_USER },
-/* 0x04 */ { "SMBclose",	smbsrv_reply_close,	AS_USER },
-/* 0x05 */ { "SMBflush",	smbsrv_reply_flush,	AS_USER },
-/* 0x06 */ { "SMBunlink",	smbsrv_reply_unlink,	AS_USER },
-/* 0x07 */ { "SMBmv",		smbsrv_reply_mv,	AS_USER },
-/* 0x08 */ { "SMBgetatr",	smbsrv_reply_getatr,	AS_USER },
-/* 0x09 */ { "SMBsetatr",	smbsrv_reply_setatr,	AS_USER },
-/* 0x0a */ { "SMBread",		smbsrv_reply_read,	AS_USER },
-/* 0x0b */ { "SMBwrite",	smbsrv_reply_write,	AS_USER },
-/* 0x0c */ { "SMBlock",		smbsrv_reply_lock,	AS_USER },
-/* 0x0d */ { "SMBunlock",	smbsrv_reply_unlock,	AS_USER },
-/* 0x0e */ { "SMBctemp",	smbsrv_reply_ctemp,	AS_USER },
-/* 0x0f */ { "SMBmknew",	smbsrv_reply_mknew,	AS_USER }, 
-/* 0x10 */ { "SMBchkpth",	smbsrv_reply_chkpth,	AS_USER },
-/* 0x11 */ { "SMBexit",		smbsrv_reply_exit,	0 },
-/* 0x12 */ { "SMBlseek",	smbsrv_reply_lseek,	AS_USER },
-/* 0x13 */ { "SMBlockread",	smbsrv_reply_lockread,	AS_USER },
-/* 0x14 */ { "SMBwriteunlock",	smbsrv_reply_writeunlock,AS_USER },
+/* 0x00 */ { "SMBmkdir",	smbsrv_reply_mkdir,		NEED_SESS|NEED_TCON },
+/* 0x01 */ { "SMBrmdir",	smbsrv_reply_rmdir,		NEED_SESS|NEED_TCON },
+/* 0x02 */ { "SMBopen",		smbsrv_reply_open,		NEED_SESS|NEED_TCON },
+/* 0x03 */ { "SMBcreate",	smbsrv_reply_mknew,		NEED_SESS|NEED_TCON },
+/* 0x04 */ { "SMBclose",	smbsrv_reply_close,		NEED_SESS|NEED_TCON },
+/* 0x05 */ { "SMBflush",	smbsrv_reply_flush,		NEED_SESS|NEED_TCON },
+/* 0x06 */ { "SMBunlink",	smbsrv_reply_unlink,		NEED_SESS|NEED_TCON },
+/* 0x07 */ { "SMBmv",		smbsrv_reply_mv,		NEED_SESS|NEED_TCON },
+/* 0x08 */ { "SMBgetatr",	smbsrv_reply_getatr,		NEED_SESS|NEED_TCON },
+/* 0x09 */ { "SMBsetatr",	smbsrv_reply_setatr,		NEED_SESS|NEED_TCON },
+/* 0x0a */ { "SMBread",		smbsrv_reply_read,		NEED_SESS|NEED_TCON },
+/* 0x0b */ { "SMBwrite",	smbsrv_reply_write,		NEED_SESS|NEED_TCON },
+/* 0x0c */ { "SMBlock",		smbsrv_reply_lock,		NEED_SESS|NEED_TCON },
+/* 0x0d */ { "SMBunlock",	smbsrv_reply_unlock,		NEED_SESS|NEED_TCON },
+/* 0x0e */ { "SMBctemp",	smbsrv_reply_ctemp,		NEED_SESS|NEED_TCON },
+/* 0x0f */ { "SMBmknew",	smbsrv_reply_mknew,		NEED_SESS|NEED_TCON }, 
+/* 0x10 */ { "SMBchkpth",	smbsrv_reply_chkpth,		NEED_SESS|NEED_TCON },
+/* 0x11 */ { "SMBexit",		smbsrv_reply_exit,		NEED_SESS },
+/* 0x12 */ { "SMBlseek",	smbsrv_reply_lseek,		NEED_SESS|NEED_TCON },
+/* 0x13 */ { "SMBlockread",	smbsrv_reply_lockread,		NEED_SESS|NEED_TCON },
+/* 0x14 */ { "SMBwriteunlock",	smbsrv_reply_writeunlock,	NEED_SESS|NEED_TCON },
 /* 0x15 */ { NULL, NULL, 0 },
 /* 0x16 */ { NULL, NULL, 0 },
 /* 0x17 */ { NULL, NULL, 0 },
 /* 0x18 */ { NULL, NULL, 0 },
 /* 0x19 */ { NULL, NULL, 0 },
-/* 0x1a */ { "SMBreadbraw",	smbsrv_reply_readbraw,	AS_USER },
-/* 0x1b */ { "SMBreadBmpx",	smbsrv_reply_readbmpx,	AS_USER },
-/* 0x1c */ { "SMBreadBs",	NULL,			0 },
-/* 0x1d */ { "SMBwritebraw",	smbsrv_reply_writebraw,	AS_USER },
-/* 0x1e */ { "SMBwriteBmpx",	smbsrv_reply_writebmpx,	AS_USER },
-/* 0x1f */ { "SMBwriteBs",	smbsrv_reply_writebs,	AS_USER },
-/* 0x20 */ { "SMBwritec",	NULL,			0 },
+/* 0x1a */ { "SMBreadbraw",	smbsrv_reply_readbraw,		NEED_SESS|NEED_TCON },
+/* 0x1b */ { "SMBreadBmpx",	smbsrv_reply_readbmpx,		NEED_SESS|NEED_TCON },
+/* 0x1c */ { "SMBreadBs",	NULL,				0 },
+/* 0x1d */ { "SMBwritebraw",	smbsrv_reply_writebraw,		NEED_SESS|NEED_TCON },
+/* 0x1e */ { "SMBwriteBmpx",	smbsrv_reply_writebmpx,		NEED_SESS|NEED_TCON },
+/* 0x1f */ { "SMBwriteBs",	smbsrv_reply_writebs,		NEED_SESS|NEED_TCON },
+/* 0x20 */ { "SMBwritec",	NULL,				0 },
 /* 0x21 */ { NULL, NULL, 0 },
-/* 0x22 */ { "SMBsetattrE",	smbsrv_reply_setattrE,	AS_USER },
-/* 0x23 */ { "SMBgetattrE",	smbsrv_reply_getattrE,	AS_USER },
-/* 0x24 */ { "SMBlockingX",	smbsrv_reply_lockingX,	AS_USER },
-/* 0x25 */ { "SMBtrans",	smbsrv_reply_trans,	AS_USER },
-/* 0x26 */ { "SMBtranss",	smbsrv_reply_transs,	AS_USER },
-/* 0x27 */ { "SMBioctl",	smbsrv_reply_ioctl,	AS_USER },
-/* 0x28 */ { "SMBioctls",	NULL,			AS_USER },
-/* 0x29 */ { "SMBcopy",		smbsrv_reply_copy,	AS_USER },
-/* 0x2a */ { "SMBmove",		NULL,			AS_USER },
-/* 0x2b */ { "SMBecho",		smbsrv_reply_echo,	0 },
-/* 0x2c */ { "SMBwriteclose",	smbsrv_reply_writeclose,AS_USER },
-/* 0x2d */ { "SMBopenX",	smbsrv_reply_open_and_X,AS_USER },
-/* 0x2e */ { "SMBreadX",	smbsrv_reply_read_and_X,AS_USER },
-/* 0x2f */ { "SMBwriteX",	smbsrv_reply_write_and_X,AS_USER},
+/* 0x22 */ { "SMBsetattrE",	smbsrv_reply_setattrE,		NEED_SESS|NEED_TCON },
+/* 0x23 */ { "SMBgetattrE",	smbsrv_reply_getattrE,		NEED_SESS|NEED_TCON },
+/* 0x24 */ { "SMBlockingX",	smbsrv_reply_lockingX,		NEED_SESS|NEED_TCON },
+/* 0x25 */ { "SMBtrans",	smbsrv_reply_trans,		NEED_SESS|NEED_TCON },
+/* 0x26 */ { "SMBtranss",	smbsrv_reply_transs,		NEED_SESS|NEED_TCON },
+/* 0x27 */ { "SMBioctl",	smbsrv_reply_ioctl,		NEED_SESS|NEED_TCON },
+/* 0x28 */ { "SMBioctls",	NULL,				NEED_SESS|NEED_TCON },
+/* 0x29 */ { "SMBcopy",		smbsrv_reply_copy,		NEED_SESS|NEED_TCON },
+/* 0x2a */ { "SMBmove",		NULL,				NEED_SESS|NEED_TCON },
+/* 0x2b */ { "SMBecho",		smbsrv_reply_echo,		0 },
+/* 0x2c */ { "SMBwriteclose",	smbsrv_reply_writeclose,	NEED_SESS|NEED_TCON },
+/* 0x2d */ { "SMBopenX",	smbsrv_reply_open_and_X,	NEED_SESS|NEED_TCON },
+/* 0x2e */ { "SMBreadX",	smbsrv_reply_read_and_X,	NEED_SESS|NEED_TCON },
+/* 0x2f */ { "SMBwriteX",	smbsrv_reply_write_and_X,	NEED_SESS|NEED_TCON},
 /* 0x30 */ { NULL, NULL, 0 },
 /* 0x31 */ { NULL, NULL, 0 },
-/* 0x32 */ { "SMBtrans2",	smbsrv_reply_trans2,	AS_USER },
-/* 0x33 */ { "SMBtranss2",	smbsrv_reply_transs2,	AS_USER },
-/* 0x34 */ { "SMBfindclose",	smbsrv_reply_findclose,	AS_USER },
-/* 0x35 */ { "SMBfindnclose",	smbsrv_reply_findnclose,AS_USER },
+/* 0x32 */ { "SMBtrans2",	smbsrv_reply_trans2,		NEED_SESS|NEED_TCON },
+/* 0x33 */ { "SMBtranss2",	smbsrv_reply_transs2,		NEED_SESS|NEED_TCON },
+/* 0x34 */ { "SMBfindclose",	smbsrv_reply_findclose,		NEED_SESS|NEED_TCON },
+/* 0x35 */ { "SMBfindnclose",	smbsrv_reply_findnclose,	NEED_SESS|NEED_TCON },
 /* 0x36 */ { NULL, NULL, 0 },
 /* 0x37 */ { NULL, NULL, 0 },
 /* 0x38 */ { NULL, NULL, 0 },
@@ -287,12 +288,12 @@
 /* 0x6d */ { NULL, NULL, 0 },
 /* 0x6e */ { NULL, NULL, 0 },
 /* 0x6f */ { NULL, NULL, 0 },
-/* 0x70 */ { "SMBtcon",		smbsrv_reply_tcon,	0 },
-/* 0x71 */ { "SMBtdis",		smbsrv_reply_tdis,	0 },
-/* 0x72 */ { "SMBnegprot",	smbsrv_reply_negprot,	0 },
-/* 0x73 */ { "SMBsesssetupX",	smbsrv_reply_sesssetup,	0 },
-/* 0x74 */ { "SMBulogoffX",	smbsrv_reply_ulogoffX,	0 }, /* ulogoff doesn't give a valid TID */
-/* 0x75 */ { "SMBtconX",	smbsrv_reply_tcon_and_X,0 },
+/* 0x70 */ { "SMBtcon",		smbsrv_reply_tcon,		NEED_SESS },
+/* 0x71 */ { "SMBtdis",		smbsrv_reply_tdis,		NEED_SESS },
+/* 0x72 */ { "SMBnegprot",	smbsrv_reply_negprot,		0 },
+/* 0x73 */ { "SMBsesssetupX",	smbsrv_reply_sesssetup,		0 },
+/* 0x74 */ { "SMBulogoffX",	smbsrv_reply_ulogoffX,		NEED_SESS }, /* ulogoff doesn't give a valid TID */
+/* 0x75 */ { "SMBtconX",	smbsrv_reply_tcon_and_X,	NEED_SESS },
 /* 0x76 */ { NULL, NULL, 0 },
 /* 0x77 */ { NULL, NULL, 0 },
 /* 0x78 */ { NULL, NULL, 0 },
@@ -303,11 +304,11 @@
 /* 0x7d */ { NULL, NULL, 0 },
 /* 0x7e */ { NULL, NULL, 0 },
 /* 0x7f */ { NULL, NULL, 0 },
-/* 0x80 */ { "SMBdskattr",	smbsrv_reply_dskattr,	AS_USER },
-/* 0x81 */ { "SMBsearch",	smbsrv_reply_search,	AS_USER },
-/* 0x82 */ { "SMBffirst",	smbsrv_reply_search,	AS_USER },
-/* 0x83 */ { "SMBfunique",	smbsrv_reply_search,	AS_USER },
-/* 0x84 */ { "SMBfclose",	smbsrv_reply_fclose,	AS_USER },
+/* 0x80 */ { "SMBdskattr",	smbsrv_reply_dskattr,		NEED_SESS|NEED_TCON },
+/* 0x81 */ { "SMBsearch",	smbsrv_reply_search,		NEED_SESS|NEED_TCON },
+/* 0x82 */ { "SMBffirst",	smbsrv_reply_search,		NEED_SESS|NEED_TCON },
+/* 0x83 */ { "SMBfunique",	smbsrv_reply_search,		NEED_SESS|NEED_TCON },
+/* 0x84 */ { "SMBfclose",	smbsrv_reply_fclose,		NEED_SESS|NEED_TCON },
 /* 0x85 */ { NULL, NULL, 0 },
 /* 0x86 */ { NULL, NULL, 0 },
 /* 0x87 */ { NULL, NULL, 0 },
@@ -335,12 +336,12 @@
 /* 0x9d */ { NULL, NULL, 0 },
 /* 0x9e */ { NULL, NULL, 0 },
 /* 0x9f */ { NULL, NULL, 0 },
-/* 0xa0 */ { "SMBnttrans",	smbsrv_reply_nttrans,		AS_USER },
-/* 0xa1 */ { "SMBnttranss",	smbsrv_reply_nttranss,		AS_USER},
-/* 0xa2 */ { "SMBntcreateX",	smbsrv_reply_ntcreate_and_X,	AS_USER },
+/* 0xa0 */ { "SMBnttrans",	smbsrv_reply_nttrans,		NEED_SESS|NEED_TCON },
+/* 0xa1 */ { "SMBnttranss",	smbsrv_reply_nttranss,		NEED_SESS|NEED_TCON },
+/* 0xa2 */ { "SMBntcreateX",	smbsrv_reply_ntcreate_and_X,	NEED_SESS|NEED_TCON },
 /* 0xa3 */ { NULL, NULL, 0 },
-/* 0xa4 */ { "SMBntcancel",	smbsrv_reply_ntcancel,		AS_USER | SIGNING_NO_REPLY },
-/* 0xa5 */ { "SMBntrename",	smbsrv_reply_ntrename,		AS_USER },
+/* 0xa4 */ { "SMBntcancel",	smbsrv_reply_ntcancel,		NEED_SESS|NEED_TCON|SIGNING_NO_REPLY },
+/* 0xa5 */ { "SMBntrename",	smbsrv_reply_ntrename,		NEED_SESS|NEED_TCON },
 /* 0xa6 */ { NULL, NULL, 0 },
 /* 0xa7 */ { NULL, NULL, 0 },
 /* 0xa8 */ { NULL, NULL, 0 },
@@ -367,10 +368,10 @@
 /* 0xbd */ { NULL, NULL, 0 },
 /* 0xbe */ { NULL, NULL, 0 },
 /* 0xbf */ { NULL, NULL, 0 },
-/* 0xc0 */ { "SMBsplopen",	smbsrv_reply_printopen,		AS_USER },
-/* 0xc1 */ { "SMBsplwr",	smbsrv_reply_printwrite,	AS_USER },
-/* 0xc2 */ { "SMBsplclose",	smbsrv_reply_printclose,	AS_USER },
-/* 0xc3 */ { "SMBsplretq",	smbsrv_reply_printqueue,	AS_USER },
+/* 0xc0 */ { "SMBsplopen",	smbsrv_reply_printopen,		NEED_SESS|NEED_TCON },
+/* 0xc1 */ { "SMBsplwr",	smbsrv_reply_printwrite,	NEED_SESS|NEED_TCON },
+/* 0xc2 */ { "SMBsplclose",	smbsrv_reply_printclose,	NEED_SESS|NEED_TCON },
+/* 0xc3 */ { "SMBsplretq",	smbsrv_reply_printqueue,	NEED_SESS|NEED_TCON },
 /* 0xc4 */ { NULL, NULL, 0 },
 /* 0xc5 */ { NULL, NULL, 0 },
 /* 0xc6 */ { NULL, NULL, 0 },
@@ -383,14 +384,14 @@
 /* 0xcd */ { NULL, NULL, 0 },
 /* 0xce */ { NULL, NULL, 0 },
 /* 0xcf */ { NULL, NULL, 0 },
-/* 0xd0 */ { "SMBsends",	smbsrv_reply_sends,		0 },
+/* 0xd0 */ { "SMBsends",	NULL,				0 },
 /* 0xd1 */ { "SMBsendb",	NULL,				0 },
 /* 0xd2 */ { "SMBfwdname",	NULL,				0 },
 /* 0xd3 */ { "SMBcancelf",	NULL,				0 },
 /* 0xd4 */ { "SMBgetmac",	NULL,				0 },
-/* 0xd5 */ { "SMBsendstrt",	smbsrv_reply_sendstrt,		0 },
-/* 0xd6 */ { "SMBsendend",	smbsrv_reply_sendend,		0 },
-/* 0xd7 */ { "SMBsendtxt",	smbsrv_reply_sendtxt,		0 },
+/* 0xd5 */ { "SMBsendstrt",	NULL,				0 },
+/* 0xd6 */ { "SMBsendend",	NULL,				0 },
+/* 0xd7 */ { "SMBsendtxt",	NULL,				0 },
 /* 0xd8 */ { NULL, NULL, 0 },
 /* 0xd9 */ { NULL, NULL, 0 },
 /* 0xda */ { NULL, NULL, 0 },
@@ -497,11 +498,12 @@
 	}
 
 	/* see if the vuid is valid */
-	if ((flags & AS_USER) && !req->session) {
+	if ((flags & NEED_SESS) && !req->session) {
 		/* amazingly, the error code depends on the command */
 		switch (type) {
 			case SMBntcreateX:
 			case SMBntcancel:
+			case SMBulogoffX:
 				status = NT_STATUS_DOS(ERRSRV, ERRbaduid);
 				break;
 			default:
@@ -525,7 +527,7 @@
 	}
 
 	/* does this protocol need a valid tree connection? */
-	if ((flags & AS_USER) && !req->tcon) {
+	if ((flags & NEED_TCON) && !req->tcon) {
 		/* amazingly, the error code depends on the command */
 		switch (type) {
 			case SMBntcreateX:

Modified: branches/SAMBA_4_0/source/smb_server/smb/reply.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb/reply.c	2006-03-16 17:51:04 UTC (rev 14484)
+++ branches/SAMBA_4_0/source/smb_server/smb/reply.c	2006-03-16 18:26:14 UTC (rev 14485)
@@ -1362,11 +1362,6 @@
 {
 	REQ_CHECK_WCT(req, 0);
 
-	if (req->tcon == NULL) {
-		smbsrv_send_error(req, NT_STATUS_INVALID_HANDLE);
-		return;
-	}
-
 	talloc_free(req->tcon);
 
 	/* construct reply */
@@ -2185,11 +2180,6 @@
 	struct smbsrv_tcon *tcon;
 	NTSTATUS status;
 
-	if (!req->session) {
-		smbsrv_send_error(req, NT_STATUS_DOS(ERRSRV, ERRbaduid));
-		return;
-	}
-
 	/* in user level security we are supposed to close any files
 	   open by this user on all open tree connects */
 	for (tcon=req->smb_conn->smb_tcons.list;tcon;tcon=tcon->next) {
@@ -2350,39 +2340,6 @@
 	talloc_free(req);
 }
 
-/****************************************************************************
- Reply to an SMBsends request
-****************************************************************************/
-void smbsrv_reply_sends(struct smbsrv_request *req)
-{
-	smbsrv_send_error(req, NT_STATUS_FOOBAR);
-}
-
-/****************************************************************************
- Reply to an SMBsendstrt request
-****************************************************************************/
-void smbsrv_reply_sendstrt(struct smbsrv_request *req)
-{
-	smbsrv_send_error(req, NT_STATUS_FOOBAR);
-}
-
-/****************************************************************************
- Reply to an SMBsendend request
-****************************************************************************/
-void smbsrv_reply_sendend(struct smbsrv_request *req)
-{
-	smbsrv_send_error(req, NT_STATUS_FOOBAR);
-}
-
-/****************************************************************************
- Reply to an SMBsendtxt request
-****************************************************************************/
-void smbsrv_reply_sendtxt(struct smbsrv_request *req)
-{
-	smbsrv_send_error(req, NT_STATUS_FOOBAR);
-}
-
-
 /*
   parse the called/calling names from session request
 */

Modified: branches/SAMBA_4_0/source/smb_server/smb/service.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb/service.c	2006-03-16 17:51:04 UTC (rev 14484)
+++ branches/SAMBA_4_0/source/smb_server/smb/service.c	2006-03-16 18:26:14 UTC (rev 14485)
@@ -167,11 +167,6 @@
 	NTSTATUS status;
 	int snum;
 
-	/* can only do bare tcon in share level security */
-	if (!req->session && lp_security() != SEC_SHARE) {
-		return NT_STATUS_ACCESS_DENIED;
-	}
-
 	if (con->generic.level == RAW_TCON_TCON) {
 		DATA_BLOB password;
 		password = data_blob(con->tcon.in.password, strlen(con->tcon.in.password) + 1);



More information about the samba-cvs mailing list