summaryrefslogtreecommitdiff
path: root/source/param/loadparm.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/param/loadparm.c')
-rw-r--r--source/param/loadparm.c96
1 files changed, 57 insertions, 39 deletions
diff --git a/source/param/loadparm.c b/source/param/loadparm.c
index dd183ab8af9..47515d688a6 100644
--- a/source/param/loadparm.c
+++ b/source/param/loadparm.c
@@ -240,6 +240,7 @@ typedef struct
BOOL sslReqServerCert;
BOOL sslCompatibility;
#endif /* WITH_SSL */
+ char *szAclCompat;
BOOL bMsAddPrinterWizard;
BOOL bDNSproxy;
BOOL bWINSsupport;
@@ -556,19 +557,20 @@ static int default_server_announce;
#define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct))
/* prototypes for the special type handlers */
-static BOOL handle_valid_chars(char *pszParmValue, char **ptr);
-static BOOL handle_include(char *pszParmValue, char **ptr);
-static BOOL handle_copy(char *pszParmValue, char **ptr);
-static BOOL handle_character_set(char *pszParmValue, char **ptr);
-static BOOL handle_coding_system(char *pszParmValue, char **ptr);
-static BOOL handle_client_code_page(char *pszParmValue, char **ptr);
-static BOOL handle_vfs_object(char *pszParmValue, char **ptr);
-static BOOL handle_source_env(char *pszParmValue, char **ptr);
-static BOOL handle_netbios_name(char *pszParmValue, char **ptr);
-static BOOL handle_winbind_uid(char *pszParmValue, char **ptr);
-static BOOL handle_winbind_gid(char *pszParmValue, char **ptr);
-static BOOL handle_wins_server_list(char *pszParmValue, char **ptr);
-static BOOL handle_debug_list( char *pszParmValue, char **ptr );
+static BOOL handle_valid_chars(const char *pszParmValue, char **ptr);
+static BOOL handle_include(const char *pszParmValue, char **ptr);
+static BOOL handle_copy(const char *pszParmValue, char **ptr);
+static BOOL handle_character_set(const char *pszParmValue, char **ptr);
+static BOOL handle_coding_system(const char *pszParmValue, char **ptr);
+static BOOL handle_client_code_page(const char *pszParmValue, char **ptr);
+static BOOL handle_vfs_object(const char *pszParmValue, char **ptr);
+static BOOL handle_source_env(const char *pszParmValue, char **ptr);
+static BOOL handle_netbios_name(const char *pszParmValue, char **ptr);
+static BOOL handle_winbind_uid(const char *pszParmValue, char **ptr);
+static BOOL handle_winbind_gid(const char *pszParmValue, char **ptr);
+static BOOL handle_wins_server_list(const char *pszParmValue, char **ptr);
+static BOOL handle_debug_list(const char *pszParmValue, char **ptr );
+static BOOL handle_acl_compatibility(const char *pszParmValue, char **ptr);
static void set_server_role(void);
static void set_default_server_announce_type(void);
@@ -858,6 +860,7 @@ static struct parm_struct parm_table[] = {
{"read raw", P_BOOL, P_GLOBAL, &Globals.bReadRaw, NULL, NULL, 0},
{"write raw", P_BOOL, P_GLOBAL, &Globals.bWriteRaw, NULL, NULL, 0},
+ {"acl compatibility", P_STRING, P_GLOBAL, &Globals.szAclCompat, handle_acl_compatibility, NULL, FLAG_SHARE | FLAG_GLOBAL | FLAG_ADVANCED},
{"nt smb support", P_BOOL, P_GLOBAL, &Globals.bNTSmbSupport, NULL, NULL, 0},
{"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, 0},
{"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE },
@@ -1451,6 +1454,7 @@ static void init_globals(void)
string_set(&Globals.szTemplateShell, "/bin/false");
string_set(&Globals.szTemplateHomedir, "/home/%D/%U");
string_set(&Globals.szWinbindSeparator, "\\");
+ string_set(&Globals.szAclCompat, "");
Globals.winbind_cache_time = 15;
Globals.bWinbindEnumUsers = True;
@@ -1594,6 +1598,7 @@ FN_GLOBAL_STRING(lp_domain_guest_group, &Globals.szDomainGuestGroup)
FN_GLOBAL_STRING(lp_template_homedir, &Globals.szTemplateHomedir)
FN_GLOBAL_STRING(lp_template_shell, &Globals.szTemplateShell)
FN_GLOBAL_STRING(lp_winbind_separator, &Globals.szWinbindSeparator)
+FN_GLOBAL_STRING(lp_acl_compatibility, &Globals.szAclCompat)
FN_GLOBAL_BOOL(lp_winbind_enum_users, &Globals.bWinbindEnumUsers)
FN_GLOBAL_BOOL(lp_winbind_enum_groups, &Globals.bWinbindEnumGroups)
FN_GLOBAL_BOOL(lp_winbind_use_default_domain, &Globals.bWinbindUseDefaultDomain)
@@ -1825,9 +1830,9 @@ FN_GLOBAL_BOOL(lp_hide_local_users, &Globals.bHideLocalUsers)
/* local prototypes */
-static int map_parameter(char *pszParmName);
-static BOOL set_boolean(BOOL *pb, char *pszParmValue);
-static int getservicebyname(char *pszServiceName,
+static int map_parameter(const char *pszParmName);
+static BOOL set_boolean(BOOL *pb, const char *pszParmValue);
+static int getservicebyname(const char *pszServiceName,
service * pserviceDest);
static void copy_service(service * pserviceDest,
service * pserviceSource, BOOL *pcopymapDest);
@@ -1879,7 +1884,7 @@ static void free_service(service * pservice)
add a new service to the services array initialising it with the given
service. name must be in DOS codepage.
***************************************************************************/
-static int add_a_service(service * pservice, char *name)
+static int add_a_service(service * pservice, const char *name)
{
int i;
service tservice;
@@ -1996,7 +2001,7 @@ int lp_add_service(char *pszService, int iDefaultService)
/***************************************************************************
add the IPC service
***************************************************************************/
-static BOOL lp_add_ipc(char *ipc_name, BOOL guest_ok)
+static BOOL lp_add_ipc(const char *ipc_name, BOOL guest_ok)
{
pstring comment;
int i = add_a_service(&sDefault, ipc_name);
@@ -2032,7 +2037,7 @@ printername must be in DOS codepage.
***************************************************************************/
BOOL lp_add_printer(char *pszPrintername, int iDefaultService)
{
- char *comment = "From Printcap";
+ const char *comment = "From Printcap";
int i = add_a_service(ServicePtrs[iDefaultService], pszPrintername);
if (i < 0)
@@ -2063,7 +2068,7 @@ BOOL lp_add_printer(char *pszPrintername, int iDefaultService)
Map a parameter's string representation to something we can use.
Returns False if the parameter string is not recognised, else TRUE.
***************************************************************************/
-static int map_parameter(char *pszParmName)
+static int map_parameter(const char *pszParmName)
{
int iIndex;
@@ -2084,7 +2089,7 @@ Set a boolean variable from the text value stored in the passed string.
Returns True in success, False if the passed string does not correctly
represent a boolean.
***************************************************************************/
-static BOOL set_boolean(BOOL *pb, char *pszParmValue)
+static BOOL set_boolean(BOOL *pb, const char *pszParmValue)
{
BOOL bRetval;
@@ -2111,7 +2116,7 @@ static BOOL set_boolean(BOOL *pb, char *pszParmValue)
/***************************************************************************
Find a service by name. Otherwise works like get_service.
***************************************************************************/
-static int getservicebyname(char *pszServiceName, service * pserviceDest)
+static int getservicebyname(const char *pszServiceName, service * pserviceDest)
{
int iService;
@@ -2254,7 +2259,7 @@ static struct file_lists
keep a linked list of all config files so we know when one has changed
it's date and needs to be reloaded
********************************************************************/
-static void add_to_file_list(char *fname, char *subfname)
+static void add_to_file_list(const char *fname, const char *subfname)
{
struct file_lists *f = file_lists;
@@ -2326,7 +2331,7 @@ BOOL lp_file_list_changed(void)
Note: We must *NOT* use string_set() here as ptr points to global_myname.
***************************************************************************/
-static BOOL handle_netbios_name(char *pszParmValue, char **ptr)
+static BOOL handle_netbios_name(const char *pszParmValue, char **ptr)
{
pstring netbios_name;
@@ -2410,7 +2415,7 @@ static BOOL source_env(char **lines)
Handle the source environment operation
***************************************************************************/
-static BOOL handle_source_env(char *pszParmValue, char **ptr)
+static BOOL handle_source_env(const char *pszParmValue, char **ptr)
{
pstring fname;
char *p = fname;
@@ -2455,7 +2460,7 @@ static BOOL handle_source_env(char *pszParmValue, char **ptr)
/***************************************************************************
handle the interpretation of the vfs object parameter
*************************************************************************/
-static BOOL handle_vfs_object(char *pszParmValue, char **ptr)
+static BOOL handle_vfs_object(const char *pszParmValue, char **ptr)
{
/* Set string value */
@@ -2470,7 +2475,7 @@ static BOOL handle_vfs_object(char *pszParmValue, char **ptr)
/***************************************************************************
handle the interpretation of the coding system parameter
*************************************************************************/
-static BOOL handle_coding_system(char *pszParmValue, char **ptr)
+static BOOL handle_coding_system(const char *pszParmValue, char **ptr)
{
string_set(ptr, pszParmValue);
interpret_coding_system(pszParmValue);
@@ -2483,7 +2488,7 @@ static BOOL handle_coding_system(char *pszParmValue, char **ptr)
static char *saved_character_set = NULL;
-static BOOL handle_character_set(char *pszParmValue, char **ptr)
+static BOOL handle_character_set(const char *pszParmValue, char **ptr)
{
/* A dependency here is that the parameter client code page should be
set before this is called.
@@ -2501,7 +2506,7 @@ static BOOL handle_character_set(char *pszParmValue, char **ptr)
parameter in case this came before 'client code page' in the smb.conf.
***************************************************************************/
-static BOOL handle_client_code_page(char *pszParmValue, char **ptr)
+static BOOL handle_client_code_page(const char *pszParmValue, char **ptr)
{
Globals.client_code_page = atoi(pszParmValue);
if (saved_character_set != NULL)
@@ -2515,7 +2520,7 @@ static BOOL handle_client_code_page(char *pszParmValue, char **ptr)
handle the valid chars lines
***************************************************************************/
-static BOOL handle_valid_chars(char *pszParmValue, char **ptr)
+static BOOL handle_valid_chars(const char *pszParmValue, char **ptr)
{
string_set(ptr, pszParmValue);
@@ -2533,7 +2538,7 @@ static BOOL handle_valid_chars(char *pszParmValue, char **ptr)
handle the include operation
***************************************************************************/
-static BOOL handle_include(char *pszParmValue, char **ptr)
+static BOOL handle_include(const char *pszParmValue, char **ptr)
{
pstring fname;
pstrcpy(fname, pszParmValue);
@@ -2556,7 +2561,7 @@ static BOOL handle_include(char *pszParmValue, char **ptr)
/***************************************************************************
handle the interpretation of the copy parameter
***************************************************************************/
-static BOOL handle_copy(char *pszParmValue, char **ptr)
+static BOOL handle_copy(const char *pszParmValue, char **ptr)
{
BOOL bRetval;
int iTemp;
@@ -2646,7 +2651,7 @@ BOOL lp_winbind_gid(gid_t *low, gid_t *high)
/* Do some simple checks on "winbind [ug]id" parameter values */
-static BOOL handle_winbind_uid(char *pszParmValue, char **ptr)
+static BOOL handle_winbind_uid(const char *pszParmValue, char **ptr)
{
unsigned int low, high;
@@ -2663,7 +2668,7 @@ static BOOL handle_winbind_uid(char *pszParmValue, char **ptr)
return True;
}
-static BOOL handle_winbind_gid(char *pszParmValue, char **ptr)
+static BOOL handle_winbind_gid(const char *pszParmValue, char **ptr)
{
unsigned int low, high;
@@ -2684,7 +2689,7 @@ static BOOL handle_winbind_gid(char *pszParmValue, char **ptr)
Handle the WINS SERVER list.
***************************************************************************/
-static BOOL handle_wins_server_list( char *pszParmValue, char **ptr )
+static BOOL handle_wins_server_list(const char *pszParmValue, char **ptr )
{
if( !wins_srv_load_list( pszParmValue ) )
return( False ); /* Parse failed. */
@@ -2697,7 +2702,7 @@ static BOOL handle_wins_server_list( char *pszParmValue, char **ptr )
Handle the DEBUG level list.
***************************************************************************/
-static BOOL handle_debug_list( char *pszParmValueIn, char **ptr )
+static BOOL handle_debug_list(const char *pszParmValueIn, char **ptr )
{
pstring pszParmValue;
@@ -2706,6 +2711,19 @@ static BOOL handle_debug_list( char *pszParmValueIn, char **ptr )
}
+static BOOL handle_acl_compatibility(const char *pszParmValue, char **ptr)
+{
+ if (strequal(pszParmValue, "auto"))
+ string_set(ptr, "");
+ else if (strequal(pszParmValue, "winnt"))
+ string_set(ptr, "winnt");
+ else if (strequal(pszParmValue, "win2k"))
+ string_set(ptr, "win2k");
+ else
+ return False;
+ return True;
+}
+
/***************************************************************************
Initialise a copymap.
***************************************************************************/
@@ -2738,7 +2756,7 @@ void *lp_local_ptr(int snum, void *ptr)
Process a parameter for a particular service number. If snum < 0
then assume we are in the globals
***************************************************************************/
-BOOL lp_do_parameter(int snum, char *pszParmName, char *pszParmValue)
+BOOL lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue)
{
int parmnum, i;
void *parm_ptr = NULL; /* where we are going to store the result */
@@ -3450,7 +3468,7 @@ static void set_server_role(void)
Load the services array from the services file. Return True on success,
False on failure.
***************************************************************************/
-BOOL lp_load(char *pszFname, BOOL global_only, BOOL save_defaults,
+BOOL lp_load(const char *pszFname, BOOL global_only, BOOL save_defaults,
BOOL add_ipc)
{
pstring n2;
@@ -3569,7 +3587,7 @@ exist. Note that this is a DIFFERENT ANIMAL from the internal function
getservicebyname()! This works ONLY if all services have been loaded, and
does not copy the found service.
***************************************************************************/
-int lp_servicenumber(char *pszServiceName)
+int lp_servicenumber(const char *pszServiceName)
{
int iService;
fstring serviceName;