Fix suggested by "Christian Groessler" <chris@fast-ag.de>
authorSamba Release Account <samba-bugs@samba.org>
Wed, 20 Aug 1997 01:22:05 +0000 (01:22 +0000)
committerSamba Release Account <samba-bugs@samba.org>
Wed, 20 Aug 1997 01:22:05 +0000 (01:22 +0000)
dir.c: Cause dptr_create to return -2 when failing on unix error.
reply.c: Use UNIXERROR in more cases.
server.c: Add ENOTDIR mapping to error table.
trans2.c: Correctly determine UNIX error on dptr_create.
Jeremy (jallison@whistle.com)
(This used to be commit de38a0b34fcd65fa3024300f978aa30eb86d854f)

source3/smbd/dir.c
source3/smbd/reply.c
source3/smbd/server.c
source3/smbd/trans2.c

index 5bd5b1d5736376615105f8941bdc56cd2de12729..06ee6ae8ed7315cc2e549af8eec4f35b48b397d2 100644 (file)
@@ -282,7 +282,7 @@ int dptr_create(int cnum,char *path, BOOL expect_close,int pid)
   int oldi;
 
   if (!start_dir(cnum,path))
-    return(-1);
+    return(-2); /* Code to say use a unix error return code. */
 
   if (dptrs_open >= MAXDIR)
     dptr_idleoldest();
index 0216b58c34afea10af93e8ba85397c93b07ea325..f630e71e25806d35f6d7fe52f109c394ef19e198 100644 (file)
@@ -546,7 +546,7 @@ int reply_chkpth(char *inbuf,char *outbuf)
     ok = directory_exist(name,NULL);
 
   if (!ok)
-    return(ERROR(ERRDOS,ERRbadpath));
+    return(UNIXERROR(ERRDOS,ERRbadpath));
   
   outsize = set_message(outbuf,0,0,True);
   
@@ -825,7 +825,11 @@ int reply_search(char *inbuf,char *outbuf)
        {
          dptr_num = dptr_create(cnum,directory,expect_close,SVAL(inbuf,smb_pid));
          if (dptr_num < 0)
-           return(ERROR(ERRDOS,ERRnofids));
+        {
+          if(dptr_num == -2)
+            return (UNIXERROR(ERRDOS,ERRnofids));
+          return(ERROR(ERRDOS,ERRnofids));
+        }
        }
 
       DEBUG(4,("dptr_num is %d\n",dptr_num));
index 3d5b75794b18261319d10216faeb95af98408bbc..93d05ffab6415f32037c744c64f3920f392a4197 100644 (file)
@@ -1940,6 +1940,7 @@ struct
   {EPERM,ERRDOS,ERRnoaccess},
   {EACCES,ERRDOS,ERRnoaccess},
   {ENOENT,ERRDOS,ERRbadfile},
+  {ENOTDIR,ERRDOS,ERRbadpath},
   {EIO,ERRHRD,ERRgeneral},
   {EBADF,ERRSRV,ERRsrverror},
   {EINVAL,ERRSRV,ERRsrverror},
index 11a2a50ffeba8c667e7fbddb1e1ee5e495858254..e7fd6824abd2162a302f335a90cc128a68b7700e 100644 (file)
@@ -614,7 +614,11 @@ 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)
-    return(ERROR(ERRDOS,ERRbadpath));
+    {
+      if(dptr_num == -2)
+        return (UNIXERROR(ERRDOS,ERRbadpath));
+      return(ERROR(ERRDOS,ERRbadpath));
+    }
 
   /* convert the formatted masks */
   {