svn commit: samba r2574 - in trunk/source: include libsmb smbd

jra at samba.org jra at samba.org
Fri Sep 24 00:55:47 GMT 2004


Author: jra
Date: 2004-09-24 00:55:46 +0000 (Fri, 24 Sep 2004)
New Revision: 2574

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/trunk/source&rev=2574&nolog=1

Log:
Return correct error codes on old SEARCH call (from Samba4 torture tester).
Jeremy.

Modified:
   trunk/source/include/nterr.h
   trunk/source/libsmb/errormap.c
   trunk/source/libsmb/nterr.c
   trunk/source/smbd/reply.c


Changeset:
Modified: trunk/source/include/nterr.h
===================================================================
--- trunk/source/include/nterr.h	2004-09-24 00:44:42 UTC (rev 2573)
+++ trunk/source/include/nterr.h	2004-09-24 00:55:46 UTC (rev 2574)
@@ -27,9 +27,10 @@
 /* Win32 Status codes. */
 
 #define STATUS_BUFFER_OVERFLOW            NT_STATUS(0x80000005)
+#define STATUS_NO_MORE_FILES              NT_STATUS(0x80000006)
 #define NT_STATUS_NO_MORE_ENTRIES         NT_STATUS(0x8000001a)
 
-#define STATUS_MORE_ENTRIES            NT_STATUS(0x0105)
+#define STATUS_MORE_ENTRIES               NT_STATUS(0x0105)
 #define STATUS_SOME_UNMAPPED              NT_STATUS(0x0107)
 #define ERROR_INVALID_PARAMETER		  NT_STATUS(0x0057)
 #define ERROR_INSUFFICIENT_BUFFER	  NT_STATUS(0x007a)

Modified: trunk/source/libsmb/errormap.c
===================================================================
--- trunk/source/libsmb/errormap.c	2004-09-24 00:44:42 UTC (rev 2573)
+++ trunk/source/libsmb/errormap.c	2004-09-24 00:55:46 UTC (rev 2574)
@@ -102,6 +102,7 @@
  * Not an official error, as only bit 0x80000000, not bits 0xC0000000 are set.
  */
 	{ERRDOS,	ERRmoredata,	STATUS_BUFFER_OVERFLOW},
+	{ERRDOS,	ERRnofiles,	STATUS_NO_MORE_FILES},
 	{ERRDOS,	ERRbadfid,	NT_STATUS_OBJECT_TYPE_MISMATCH},
 	{ERRHRD,	ERRgeneral,	NT_STATUS_NONCONTINUABLE_EXCEPTION},
 	{ERRHRD,	ERRgeneral,	NT_STATUS_INVALID_DISPOSITION},
@@ -632,7 +633,7 @@
 	{ERRDOS,	14,	NT_STATUS_SECTION_NOT_EXTENDED},
 	{ERRDOS,	ERRremcd,	NT_STATUS_DIRECTORY_NOT_EMPTY},
 	{ERRDOS,	ERRdiffdevice,	NT_STATUS_NOT_SAME_DEVICE},
-	{ERRDOS,	ERRnofiles,	NT_STATUS(0x80000006)},
+	{ERRDOS,	ERRnofiles,	STATUS_NO_MORE_FILES},
 	{ERRDOS,	19,	NT_STATUS_MEDIA_WRITE_PROTECTED},
 	{ERRDOS,	21,	NT_STATUS_NO_MEDIA_IN_DEVICE},
 	{ERRDOS,	22,	NT_STATUS_INVALID_DEVICE_STATE},

Modified: trunk/source/libsmb/nterr.c
===================================================================
--- trunk/source/libsmb/nterr.c	2004-09-24 00:44:42 UTC (rev 2573)
+++ trunk/source/libsmb/nterr.c	2004-09-24 00:55:46 UTC (rev 2574)
@@ -537,6 +537,7 @@
         { "NT_STATUS_NO_MORE_ENTRIES", NT_STATUS_NO_MORE_ENTRIES },
 	{ "STATUS_MORE_ENTRIES", STATUS_MORE_ENTRIES },
 	{ "STATUS_SOME_UNMAPPED", STATUS_SOME_UNMAPPED },
+	{ "STATUS_NO_MORE_FILES", STATUS_NO_MORE_FILES },
 	{ NULL, NT_STATUS(0) }
 };
 
@@ -634,14 +635,15 @@
 	{ "Insufficient logon information", 	NT_STATUS_INSUFFICIENT_LOGON_INFO },
 	
 	{ "License quota exceeded", 		NT_STATUS_LICENSE_QUOTA_EXCEEDED },
+	{ "No more files",			STATUS_NO_MORE_FILES },
 
 	{ NULL, NT_STATUS(0) }
 };
 
-
 /*****************************************************************************
- returns an NT error message.  not amazingly helpful, but better than a number.
+ Returns an NT error message.  not amazingly helpful, but better than a number.
  *****************************************************************************/
+
 const char *nt_errstr(NTSTATUS nt_code)
 {
         static pstring msg;
@@ -669,8 +671,7 @@
         int idx = 0;
 
 	while (nt_err_desc[idx].nt_errstr != NULL) {
-		if (NT_STATUS_V(nt_err_desc[idx].nt_errcode) == NT_STATUS_V(nt_code)) 
-		{
+		if (NT_STATUS_V(nt_err_desc[idx].nt_errcode) == NT_STATUS_V(nt_code)) {
                         return nt_err_desc[idx].nt_errstr;
 		}
 		idx++;
@@ -682,8 +683,9 @@
 }
 
 /*****************************************************************************
- returns an NT_STATUS constant as a string for inclusion in autogen C code
+ Returns an NT_STATUS constant as a string for inclusion in autogen C code.
  *****************************************************************************/
+
 const char *get_nt_error_c_code(NTSTATUS nt_code)
 {
         static pstring out;
@@ -703,8 +705,9 @@
 }
 
 /*****************************************************************************
- returns the NT_STATUS constant matching the string supplied (as an NTSTATUS)
+ Returns the NT_STATUS constant matching the string supplied (as an NTSTATUS)
  *****************************************************************************/
+
 NTSTATUS nt_status_string_to_code(char *nt_status_str)
 {
         int idx = 0;
@@ -718,7 +721,6 @@
 	return NT_STATUS_UNSUCCESSFUL;
 }
 
-
 /**
  * Squash an NT_STATUS in line with security requirements.
  * In an attempt to avoid giving the whole game away when users

Modified: trunk/source/smbd/reply.c
===================================================================
--- trunk/source/smbd/reply.c	2004-09-24 00:44:42 UTC (rev 2573)
+++ trunk/source/smbd/reply.c	2004-09-24 00:55:46 UTC (rev 2574)
@@ -934,8 +934,8 @@
 						make_dir_struct(p,mask,fname,size,mode,date,conn->case_sensitive);
 						dptr_fill(p+12,dptr_num);
 						numentries++;
+						p += DIR_STRUCT_SIZE;
 					}
-					p += DIR_STRUCT_SIZE;
 				}
 			}
 		} /* if (ok ) */
@@ -949,18 +949,12 @@
 		(X/Open spec) */
 
 	if(ok && expect_close && numentries == 0 && status_len == 0) {
-		if (Protocol < PROTOCOL_NT1) {
-			SCVAL(outbuf,smb_rcls,ERRDOS);
-			SSVAL(outbuf,smb_err,ERRnofiles);
-		}
-		/* Also close the dptr - we know it's gone */
+		/* Close the dptr - we know it's gone */
 		dptr_close(&dptr_num);
+		return ERROR_BOTH(STATUS_NO_MORE_FILES,ERRDOS,ERRnofiles);
 	} else if (numentries == 0 || !ok) {
-		if (Protocol < PROTOCOL_NT1) {
-			SCVAL(outbuf,smb_rcls,ERRDOS);
-			SSVAL(outbuf,smb_err,ERRnofiles);
-		}
 		dptr_close(&dptr_num);
+		return ERROR_BOTH(STATUS_NO_MORE_FILES,ERRDOS,ERRnofiles);
 	}
 
 	/* If we were called as SMBfunique, then we can close the dirptr now ! */



More information about the samba-cvs mailing list