svn commit: samba r2150 - in branches/SAMBA_3_0/source/smbd: .
jra at samba.org
jra at samba.org
Tue Aug 31 21:29:53 GMT 2004
Author: jra
Date: 2004-08-31 21:29:50 +0000 (Tue, 31 Aug 2004)
New Revision: 2150
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_3_0/source/smbd&rev=2150&nolog=1
Log:
Fix parsing of names ending in dot and a few other error returns
(commit to Samba4 smbtorture will exercise these fixes).
Jeremy.
Modified:
branches/SAMBA_3_0/source/smbd/reply.c
Changeset:
Modified: branches/SAMBA_3_0/source/smbd/reply.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/reply.c 2004-08-31 21:29:46 UTC (rev 2149)
+++ branches/SAMBA_3_0/source/smbd/reply.c 2004-08-31 21:29:50 UTC (rev 2150)
@@ -97,26 +97,25 @@
d--;
}
s += 3;
- } else if ((s[0] == '.') && (IS_DIRECTORY_SEP(s[1]) || (s[1] == '\0'))) {
-
+ } 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])) {
/*
* No mb char starts with '.' so we're safe checking the directory separator here.
*/
- /* "./" or ".\\" fails with a different error depending on where it is... */
+ /* "./" or ".\\" fails with a different error depending on what is after it... */
- if (s == srcname) {
+ if (s[2] == '\0') {
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;
}
- s++;
+ break;
} else {
if (!(*s & 0x80)) {
if (allow_wcard_names) {
@@ -521,7 +520,6 @@
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;
@@ -544,8 +542,6 @@
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))) {
@@ -578,9 +574,8 @@
}
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);
}
More information about the samba-cvs
mailing list