diff options
author | Gerald Carter <jerry@samba.org> | 2004-09-02 14:16:50 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2004-09-02 14:16:50 +0000 |
commit | f42202ba00e30286caaa45b5cfdf8b488957cf24 (patch) | |
tree | f8e67f199c275c3a505ad9a39c4a10d58b395e3a | |
parent | 0fc6ce7e4d44b4e1544ef58e16f0d615579b09ab (diff) | |
download | samba-f42202ba00e30286caaa45b5cfdf8b488957cf24.tar.gz samba-f42202ba00e30286caaa45b5cfdf8b488957cf24.tar.xz samba-f42202ba00e30286caaa45b5cfdf8b488957cf24.zip |
r2187: revert merge of r2150 from 3.0
-rw-r--r-- | source/smbd/reply.c | 27 |
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); |