summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>1997-12-20 05:25:37 +0000
committerJeremy Allison <jra@samba.org>1997-12-20 05:25:37 +0000
commit42e0d9a1f0b635076ecfc5823217662dc4a39d22 (patch)
tree954038ed4cc19eab04a382691509d1dd0a1ed283
parentb88f43dfdbabbc265ab5a394332df23826860154 (diff)
downloadsamba-42e0d9a1f0b635076ecfc5823217662dc4a39d22.tar.gz
samba-42e0d9a1f0b635076ecfc5823217662dc4a39d22.tar.bz2
samba-42e0d9a1f0b635076ecfc5823217662dc4a39d22.zip
trans2.c: Forced trans2_findfirst to behave as NT does in error returns.
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)
-rw-r--r--source3/lib/util.c3
-rw-r--r--source3/smbd/trans2.c32
2 files changed, 11 insertions, 24 deletions
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 18f1240bbd..58560bd227 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -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 */
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index 0ca678b768..ce4a450050 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -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 */