summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorSamba Release Account <samba-bugs@samba.org>1997-08-20 01:22:05 +0000
committerSamba Release Account <samba-bugs@samba.org>1997-08-20 01:22:05 +0000
commitc76dc7c2963d1205cf46849df6b6f0edbf63692d (patch)
tree4d778d8bcded6c1096902cfa41cd74291307da2a /source3/smbd
parent5c3357953c038e0cfb20567c704ec0579ca192b7 (diff)
downloadsamba-c76dc7c2963d1205cf46849df6b6f0edbf63692d.tar.gz
samba-c76dc7c2963d1205cf46849df6b6f0edbf63692d.tar.bz2
samba-c76dc7c2963d1205cf46849df6b6f0edbf63692d.zip
Fix suggested by "Christian Groessler" <chris@fast-ag.de>
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)
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/dir.c2
-rw-r--r--source3/smbd/reply.c8
-rw-r--r--source3/smbd/server.c1
-rw-r--r--source3/smbd/trans2.c6
4 files changed, 13 insertions, 4 deletions
diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index 5bd5b1d573..06ee6ae8ed 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -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();
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 0216b58c34..f630e71e25 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -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));
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index 3d5b75794b..93d05ffab6 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -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},
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index 11a2a50ffe..e7fd6824ab 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -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 */
{