From c76dc7c2963d1205cf46849df6b6f0edbf63692d Mon Sep 17 00:00:00 2001 From: Samba Release Account Date: Wed, 20 Aug 1997 01:22:05 +0000 Subject: Fix suggested by "Christian Groessler" 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 | 2 +- source3/smbd/reply.c | 8 ++++++-- source3/smbd/server.c | 1 + source3/smbd/trans2.c | 6 +++++- 4 files changed, 13 insertions(+), 4 deletions(-) (limited to 'source3/smbd') 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 */ { -- cgit