1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +03:00

r16789: Fix bug #3909, when using ea's getting a directory tries to

read ea's from an msdfs link. Stop it from doing that.
Jerry please merge to 3.0.23.
Jeremy.
(This used to be commit 95e5ace6b4f348a3244b6a3ea0fd8badf55271f5)
This commit is contained in:
Jeremy Allison 2006-07-03 21:07:46 +00:00 committed by Gerald (Jerry) Carter
parent 26c0b81d75
commit 192062c4a6
2 changed files with 59 additions and 3 deletions

View File

@ -315,6 +315,57 @@ static BOOL set_ea_dos_attribute(connection_struct *conn, const char *path, SMB_
return True;
}
/****************************************************************************
Change a unix mode to a dos mode for an ms dfs link.
****************************************************************************/
uint32 dos_mode_msdfs(connection_struct *conn, const char *path,SMB_STRUCT_STAT *sbuf)
{
uint32 result = 0;
DEBUG(8,("dos_mode_msdfs: %s\n", path));
if (!VALID_STAT(*sbuf)) {
return 0;
}
/* First do any modifications that depend on the path name. */
/* hide files with a name starting with a . */
if (lp_hide_dot_files(SNUM(conn))) {
const char *p = strrchr_m(path,'/');
if (p) {
p++;
} else {
p = path;
}
if (p[0] == '.' && p[1] != '.' && p[1] != 0) {
result |= aHIDDEN;
}
}
result |= dos_mode_from_sbuf(conn, path, sbuf);
/* Optimization : Only call is_hidden_path if it's not already
hidden. */
if (!(result & aHIDDEN) && IS_HIDDEN_PATH(conn,path)) {
result |= aHIDDEN;
}
DEBUG(8,("dos_mode_msdfs returning "));
if (result & aHIDDEN) DEBUG(8, ("h"));
if (result & aRONLY ) DEBUG(8, ("r"));
if (result & aSYSTEM) DEBUG(8, ("s"));
if (result & aDIR ) DEBUG(8, ("d"));
if (result & aARCH ) DEBUG(8, ("a"));
if (result & FILE_ATTRIBUTE_SPARSE ) DEBUG(8, ("[sparse]"));
DEBUG(8,("\n"));
return(result);
}
/****************************************************************************
Change a unix mode to a dos mode.
****************************************************************************/

View File

@ -1091,6 +1091,8 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn,
while (!found) {
BOOL got_match;
BOOL ms_dfs_link = False;
/* Needed if we run out of space */
long curr_dirpos = prev_dirpos = dptr_TellDir(conn->dirptr);
dname = dptr_ReadDirName(conn->dirptr,&curr_dirpos,&sbuf);
@ -1154,8 +1156,7 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn,
if(lp_host_msdfs() &&
lp_msdfs_root(SNUM(conn)) &&
is_msdfs_link(NULL,conn, pathreal, NULL, NULL,
&sbuf)) {
((ms_dfs_link = is_msdfs_link(NULL,conn, pathreal, NULL, NULL, &sbuf)) == True)) {
DEBUG(5,("get_lanman2_dir_entry: Masquerading msdfs link %s as a directory\n", pathreal));
sbuf.st_mode = (sbuf.st_mode & 0xFFF) | S_IFDIR;
@ -1168,7 +1169,11 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn,
}
}
mode = dos_mode(conn,pathreal,&sbuf);
if (ms_dfs_link) {
mode = dos_mode_msdfs(conn,pathreal,&sbuf);
} else {
mode = dos_mode(conn,pathreal,&sbuf);
}
if (!dir_check_ftype(conn,mode,dirtype)) {
DEBUG(5,("[%s] attribs didn't match %x\n",fname,dirtype));