summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/include/proto.h18
-rw-r--r--source/lib/util.c12
-rw-r--r--source/param/loadparm.c15
-rw-r--r--source/smbd/dir.c22
-rw-r--r--source/smbd/server.c6
5 files changed, 37 insertions, 36 deletions
diff --git a/source/include/proto.h b/source/include/proto.h
index bbfd0835b75..a8db4500e16 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -73,13 +73,13 @@ void dptr_closecnum(int cnum);
void dptr_idlecnum(int cnum);
void dptr_closepath(char *path,int pid);
int dptr_create(int cnum,char *path, BOOL expect_close,int pid);
-BOOL dptr_fill(char *buf1,unsigned int key);
+BOOL dptr_fill(int cnum, char *buf1,unsigned int key);
BOOL dptr_zero(char *buf);
-void *dptr_fetch(char *buf,int *num);
-void *dptr_fetch_lanman2(char *params,int dptr_num);
+void *dptr_fetch(int cnum, char *buf,int *num);
+void *dptr_fetch_lanman2(int cnum, char *params,int dptr_num);
BOOL dir_check_ftype(int cnum,int mode,struct stat *st,int dirtype);
BOOL get_dir_entry(int cnum,char *mask,int dirtype,char *fname,int *size,int *mode,time_t *date,BOOL check_descend);
-void *OpenDir(char *name);
+void *OpenDir(int cnum, char *name);
void CloseDir(void *p);
char *ReadDirName(void *p);
BOOL SeekDir(void *p,int pos);
@@ -141,8 +141,6 @@ char *lp_username_map(void);
char *lp_character_set(void);
char *lp_logon_script(void);
char *lp_logon_path(void);
-char *lp_veto_files(void);
-char *lp_hide_files(void);
char *lp_remote_announce(void);
char *lp_wins_server(void);
char *lp_interfaces(void);
@@ -219,6 +217,8 @@ char *lp_readlist(int );
char *lp_writelist(int );
char *lp_volume(int );
char *lp_mangled_map(int );
+char *lp_veto_files(int );
+char *lp_hide_files(int );
BOOL lp_alternate_permissions(int );
BOOL lp_revalidate(int );
BOOL lp_casesensitive(int );
@@ -948,9 +948,9 @@ char *gidtoname(int gid);
void BlockSignals(BOOL block,int signum);
void ajt_panic(void);
char *readdirname(void *p);
-BOOL is_vetoed_name(char *name);
-BOOL is_hidden_path(char *path);
-BOOL is_vetoed_path(char *path);
+BOOL is_vetoed_name(int snum, char *name);
+BOOL is_hidden_path(int cnum, char *path);
+BOOL is_vetoed_path(int cnum, char *path);
BOOL fcntl_lock(int fd,int op,uint32 offset,uint32 count,int type);
int file_lock(char *name,int timeout);
void file_unlock(int fd);
diff --git a/source/lib/util.c b/source/lib/util.c
index 889aa0b976b..18f22ad6843 100644
--- a/source/lib/util.c
+++ b/source/lib/util.c
@@ -3427,9 +3427,9 @@ char *readdirname(void *p)
}
-BOOL is_vetoed_name(char *name)
+BOOL is_vetoed_name(int snum, char *name)
{
- char *namelist = lp_veto_files();
+ char *namelist = lp_veto_files(snum);
char *nameptr = namelist;
char *name_end;
@@ -3524,17 +3524,17 @@ static BOOL is_in_path(char *name, char *namelist)
/****************************************************************************
used to make files hidden, but still accessible
****************************************************************************/
-BOOL is_hidden_path(char *path)
+BOOL is_hidden_path(int cnum, char *path)
{
- return is_in_path(path, lp_hide_files());
+ return is_in_path(path, lp_hide_files(cnum));
}
/****************************************************************************
used to make files _completely_ inaccessible
****************************************************************************/
-BOOL is_vetoed_path(char *path)
+BOOL is_vetoed_path(int cnum, char *path)
{
- return is_in_path(path, lp_veto_files());
+ return is_in_path(path, lp_veto_files(cnum));
}
/****************************************************************************
diff --git a/source/param/loadparm.c b/source/param/loadparm.c
index 9947aca5eaf..0e095c44bfb 100644
--- a/source/param/loadparm.c
+++ b/source/param/loadparm.c
@@ -129,8 +129,6 @@ typedef struct
char *szCharacterSet;
char *szLogonScript;
char *szLogonPath;
- char *szVetoFiles;
- char *szHideFiles;
char *szSmbrun;
char *szWINSserver;
char *szInterfaces;
@@ -214,6 +212,8 @@ typedef struct
char *szMagicScript;
char *szMagicOutput;
char *szMangledMap;
+ char *szVetoFiles;
+ char *szHideFiles;
char *comment;
char *force_user;
char *force_group;
@@ -291,6 +291,8 @@ static service sDefault =
NULL, /* szMagicScript */
NULL, /* szMagicOutput */
NULL, /* szMangledMap */
+ NULL, /* szVetoFiles */
+ DEFAULT_FILES_TO_HIDE, /* szHideFiles */
NULL, /* comment */
NULL, /* force user */
NULL, /* force group */
@@ -395,8 +397,6 @@ struct parm_struct
{"socket options", P_GSTRING, P_GLOBAL, user_socket_options, NULL},
{"netbios name", P_UGSTRING,P_GLOBAL, myname, NULL},
{"smbrun", P_STRING, P_GLOBAL, &Globals.szSmbrun, NULL},
- {"veto files", P_STRING, P_GLOBAL, &Globals.szVetoFiles, NULL},
- {"hide files", P_STRING, P_GLOBAL, &Globals.szHideFiles, NULL},
{"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL},
{"config file", P_STRING, P_GLOBAL, &Globals.szConfigFile, NULL},
{"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL},
@@ -509,6 +509,8 @@ struct parm_struct
{"set directory", P_BOOLREV, P_LOCAL, &sDefault.bNo_set_dir, NULL},
{"status", P_BOOL, P_LOCAL, &sDefault.status, NULL},
{"hide dot files", P_BOOL, P_LOCAL, &sDefault.bHideDotFiles, NULL},
+ {"veto files", P_STRING, P_LOCAL, &sDefault.szVetoFiles, NULL},
+ {"hide files", P_STRING, P_LOCAL, &sDefault.szHideFiles, NULL},
{"guest only", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL},
{"only guest", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL},
{"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL},
@@ -623,7 +625,6 @@ static void init_globals(void)
Globals.shmem_size = SHMEM_SIZE;
Globals.shmem_hash_size = SHMEM_HASH_SIZE;
Globals.bUnixRealname = False;
- Globals.szHideFiles = DEFAULT_FILES_TO_HIDE;
#if (defined(NETGROUP) && defined(AUTOMOUNT))
Globals.bNISHomeMap = False;
string_set(&Globals.szNISHomeMapName, "auto.home");
@@ -798,8 +799,6 @@ FN_GLOBAL_STRING(lp_username_map,&Globals.szUsernameMap)
FN_GLOBAL_STRING(lp_character_set,&Globals.szCharacterSet)
FN_GLOBAL_STRING(lp_logon_script,&Globals.szLogonScript)
FN_GLOBAL_STRING(lp_logon_path,&Globals.szLogonPath)
-FN_GLOBAL_STRING(lp_veto_files,&Globals.szVetoFiles)
-FN_GLOBAL_STRING(lp_hide_files,&Globals.szHideFiles)
FN_GLOBAL_STRING(lp_remote_announce,&Globals.szRemoteAnnounce)
FN_GLOBAL_STRING(lp_wins_server,&Globals.szWINSserver)
FN_GLOBAL_STRING(lp_interfaces,&Globals.szInterfaces)
@@ -879,6 +878,8 @@ FN_LOCAL_STRING(lp_readlist,readlist)
FN_LOCAL_STRING(lp_writelist,writelist)
FN_LOCAL_STRING(lp_volume,volume)
FN_LOCAL_STRING(lp_mangled_map,szMangledMap)
+FN_LOCAL_STRING(lp_veto_files,szVetoFiles)
+FN_LOCAL_STRING(lp_hide_files,szHideFiles)
FN_LOCAL_BOOL(lp_alternate_permissions,bAlternatePerm)
FN_LOCAL_BOOL(lp_revalidate,bRevalidate)
diff --git a/source/smbd/dir.c b/source/smbd/dir.c
index bc099dd1e8f..f674c92804b 100644
--- a/source/smbd/dir.c
+++ b/source/smbd/dir.c
@@ -108,7 +108,7 @@ static void dptr_idleoldest(void)
/****************************************************************************
get the dir ptr for a dir index
****************************************************************************/
-static void *dptr_get(int key,uint32 lastused)
+static void *dptr_get(int cnum, int key,uint32 lastused)
{
if (dirptrs[key].valid) {
if (lastused) dirptrs[key].lastused = lastused;
@@ -116,7 +116,7 @@ static void *dptr_get(int key,uint32 lastused)
if (dptrs_open >= MAXDIR)
dptr_idleoldest();
DEBUG(4,("Reopening dptr key %d\n",key));
- if ((dirptrs[key].ptr = OpenDir(dirptrs[key].path)))
+ if ((dirptrs[key].ptr = OpenDir(cnum, dirptrs[key].path)))
dptrs_open++;
}
return(dirptrs[key].ptr);
@@ -259,7 +259,7 @@ static BOOL start_dir(int cnum,char *directory)
if (! *directory)
directory = ".";
- Connections[cnum].dirptr = OpenDir(directory);
+ Connections[cnum].dirptr = OpenDir(cnum, directory);
if (Connections[cnum].dirptr) {
dptrs_open++;
string_set(&Connections[cnum].dirpath,directory);
@@ -345,10 +345,10 @@ int dptr_create(int cnum,char *path, BOOL expect_close,int pid)
/****************************************************************************
fill the 5 byte server reserved dptr field
****************************************************************************/
-BOOL dptr_fill(char *buf1,unsigned int key)
+BOOL dptr_fill(int cnum, char *buf1,unsigned int key)
{
unsigned char *buf = (unsigned char *)buf1;
- void *p = dptr_get(key,0);
+ void *p = dptr_get(cnum, key,0);
uint32 offset;
if (!p) {
DEBUG(1,("filling null dirptr %d\n",key));
@@ -373,10 +373,10 @@ BOOL dptr_zero(char *buf)
/****************************************************************************
fetch the dir ptr and seek it given the 5 byte server field
****************************************************************************/
-void *dptr_fetch(char *buf,int *num)
+void *dptr_fetch(int cnum, char *buf,int *num)
{
unsigned int key = *(unsigned char *)buf;
- void *p = dptr_get(key,dircounter++);
+ void *p = dptr_get(cnum, key,dircounter++);
uint32 offset;
if (!p) {
DEBUG(3,("fetched null dirptr %d\n",key));
@@ -393,9 +393,9 @@ void *dptr_fetch(char *buf,int *num)
/****************************************************************************
fetch the dir ptr and seek it given the lanman2 parameter block
****************************************************************************/
-void *dptr_fetch_lanman2(char *params,int dptr_num)
+void *dptr_fetch_lanman2(int cnum, char *params,int dptr_num)
{
- void *p = dptr_get(dptr_num,dircounter++);
+ void *p = dptr_get(cnum, dptr_num,dircounter++);
uint32 resume_key = SVAL(params,6);
BOOL uses_resume_key = BITSETW(params+10,2);
BOOL continue_bit = BITSETW(params+10,3);
@@ -520,7 +520,7 @@ typedef struct
/*******************************************************************
open a directory
********************************************************************/
-void *OpenDir(char *name)
+void *OpenDir(int cnum, char *name)
{
Dir *dirp;
char *n;
@@ -539,7 +539,7 @@ void *OpenDir(char *name)
while ((n = readdirname(p))) {
int l = strlen(n)+1;
/* If it's a vetoed file, pretend it doesn't even exist */
- if(is_vetoed_name(n))
+ if(is_vetoed_name(cnum, n))
continue;
if (used + l > dirp->mallocsize) {
int s = MAX(used+l,used+2000);
diff --git a/source/smbd/server.c b/source/smbd/server.c
index 30cf9cb016a..5af77d0ac44 100644
--- a/source/smbd/server.c
+++ b/source/smbd/server.c
@@ -222,7 +222,7 @@ int dos_mode(int cnum,char *path,struct stat *sbuf)
result |= aHIDDEN;
}
- if (is_hidden_path(path))
+ if (is_hidden_path(SNUM(cnum), path))
{
result |= aHIDDEN;
}
@@ -366,7 +366,7 @@ static BOOL scan_directory(char *path, char *name,int snum,BOOL docache)
check_mangled_stack(name);
/* open the directory */
- if (!(cur_dir = OpenDir(path)))
+ if (!(cur_dir = OpenDir(snum, path)))
{
DEBUG(3,("scan dir didn't open dir [%s]\n",path));
return(False);
@@ -796,7 +796,7 @@ BOOL check_name(char *name,int cnum)
errno = 0;
- if( is_vetoed_path(name))
+ if( is_vetoed_path(SNUM(cnum), name))
{
DEBUG(5,("file path name %s vetoed\n",name));
return(0);