trans2.c: Forced trans2_findfirst to behave as NT does in error returns.
authorJeremy Allison <jra@samba.org>
Sat, 20 Dec 1997 05:25:37 +0000 (05:25 +0000)
committerJeremy Allison <jra@samba.org>
Sat, 20 Dec 1997 05:25:37 +0000 (05:25 +0000)
util.c: Applied fix from Branko Cibej <branko.cibej@hermes.si> where
StrnCaseCmp tests one character too many.
Jeremy.
(This used to be commit cb771b2667070cff8d6cf86998a11ba2e4977690)

source3/lib/util.c
source3/smbd/trans2.c

index 18f1240bbdddbc55b42ece7a689a77fc46cd00ca..58560bd22719b6060bc56ae1f3b97f70506365fc 100644 (file)
@@ -953,10 +953,11 @@ int StrnCaseCmp(char *s, char *t, int n)
   else
 #endif /* KANJI_WIN95_COMPATIBILITY */
   {
-    while (n-- && *s && *t && toupper(*s) == toupper(*t))
+    while (n && *s && *t && toupper(*s) == toupper(*t))
     {
       s++;
       t++;
+      n--;
     }
 
     /* not run out of chars - strings are different lengths */
index 0ca678b7682d44871f7ab518864202b0a5ca7871..ce4a45005020d7b4b50d447180b4a90923172547 100644 (file)
@@ -646,29 +646,7 @@ static int call_trans2findfirst(char *inbuf, char *outbuf, int bufsize, int cnum
 
   dptr_num = dptr_create(cnum,directory, True ,SVAL(inbuf,smb_pid));
   if (dptr_num < 0)
-    {
-      if(dptr_num == -2)
-      {
-        if((errno == ENOENT) && bad_path)
-        {
-          unix_ERR_class = ERRDOS;
-          unix_ERR_code = ERRbadpath;
-        }
-
-#if 0
-        /* Ugly - NT specific hack - maybe not needed ? (JRA) */
-        if((errno == ENOTDIR) && (Protocol >= PROTOCOL_NT1) && 
-           (get_remote_arch() == RA_WINNT))
-        {
-          unix_ERR_class = ERRDOS;
-          unix_ERR_code = ERRbaddirectory;
-        }
-#endif
-
-        return (UNIXERROR(ERRDOS,ERRbadpath));
-      }
-      return(ERROR(ERRDOS,ERRbadpath));
-    }
+    return(ERROR(ERRDOS,ERRbadfile));
 
   /* convert the formatted masks */
   {
@@ -748,6 +726,14 @@ static int call_trans2findfirst(char *inbuf, char *outbuf, int bufsize, int cnum
       dptr_num = -1;
     }
 
+  /* 
+   * If there are no matching entries we must return ERRDOS/ERRbadfile - 
+   * from observation of NT.
+   */
+
+  if(numentries == 0)
+    return(ERROR(ERRDOS,ERRbadfile));
+
   /* At this point pdata points to numentries directory entries. */
 
   /* Set up the return parameter block */