summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2004-09-02 14:16:50 +0000
committerGerald Carter <jerry@samba.org>2004-09-02 14:16:50 +0000
commitf42202ba00e30286caaa45b5cfdf8b488957cf24 (patch)
treef8e67f199c275c3a505ad9a39c4a10d58b395e3a
parent0fc6ce7e4d44b4e1544ef58e16f0d615579b09ab (diff)
downloadsamba-f42202ba00e30286caaa45b5cfdf8b488957cf24.tar.gz
samba-f42202ba00e30286caaa45b5cfdf8b488957cf24.tar.xz
samba-f42202ba00e30286caaa45b5cfdf8b488957cf24.zip
r2187: revert merge of r2150 from 3.0
-rw-r--r--source/smbd/reply.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/source/smbd/reply.c b/source/smbd/reply.c
index 30616a66fbf..611fb04c19b 100644
--- a/source/smbd/reply.c
+++ b/source/smbd/reply.c
@@ -97,25 +97,26 @@ NTSTATUS check_path_syntax(pstring destname, const pstring srcname, BOOL allow_w
d--;
}
s += 3;
- } else if ((s[0] == '.') && (s[1] == '\0')) {
- if (s == srcname) {
- ret = NT_STATUS_OBJECT_NAME_INVALID;
- break;
- }
- *d++ = *s++;
- } else if ((s[0] == '.') && IS_DIRECTORY_SEP(s[1])) {
+ } else if ((s[0] == '.') && (IS_DIRECTORY_SEP(s[1]) || (s[1] == '\0'))) {
+
/*
* No mb char starts with '.' so we're safe checking the directory separator here.
*/
- /* "./" or ".\\" fails with a different error depending on what is after it... */
+ /* "./" or ".\\" fails with a different error depending on where it is... */
- if (s[2] == '\0') {
+ if (s == srcname) {
ret = NT_STATUS_OBJECT_NAME_INVALID;
+ break;
} else {
+ if (s[1] != '\0' && s[2] == '\0') {
+ ret = NT_STATUS_INVALID_PARAMETER;
+ break;
+ }
ret = NT_STATUS_OBJECT_PATH_NOT_FOUND;
+ break;
}
- break;
+ s++;
} else {
if (!(*s & 0x80)) {
if (allow_wcard_names) {
@@ -520,6 +521,7 @@ int reply_ioctl(connection_struct *conn,
int reply_chkpth(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
{
int outsize = 0;
+ int mode;
pstring name;
BOOL ok = False;
BOOL bad_path = False;
@@ -542,6 +544,8 @@ int reply_chkpth(connection_struct *conn, char *inbuf,char *outbuf, int dum_size
return ERROR_NT(NT_STATUS_OBJECT_PATH_NOT_FOUND);
}
+ mode = SVAL(inbuf,smb_vwv0);
+
if (check_name(name,conn)) {
if (VALID_STAT(sbuf) || SMB_VFS_STAT(conn,name,&sbuf) == 0)
if (!(ok = S_ISDIR(sbuf.st_mode))) {
@@ -574,7 +578,8 @@ int reply_chkpth(connection_struct *conn, char *inbuf,char *outbuf, int dum_size
}
outsize = set_message(outbuf,0,0,True);
- DEBUG(3,("chkpth %s mode=%d\n", name, (int)SVAL(inbuf,smb_vwv0)));
+
+ DEBUG(3,("chkpth %s mode=%d\n", name, mode));
END_PROFILE(SMBchkpth);
return(outsize);