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.c282
1 files changed, 70 insertions, 212 deletions
diff --git a/source/param/loadparm.c b/source/param/loadparm.c
index fb656aa627f..510a661dc39 100644
--- a/source/param/loadparm.c
+++ b/source/param/loadparm.c
@@ -49,11 +49,6 @@
#include "includes.h"
-/* Set default coding system for KANJI if none specified in Makefile. */
-#ifndef KANJI
-#define KANJI "sjis"
-#endif /* KANJI */
-
BOOL bLoaded = False;
extern int DEBUGLEVEL;
@@ -102,7 +97,9 @@ int keepalive=0;
extern BOOL use_getwd_cache;
extern int extra_time_offset;
+#ifdef KANJI
extern int coding_system;
+#endif
/*
* This structure describes global (ie., server-wide) parameters.
@@ -146,7 +143,6 @@ typedef struct
int max_mux;
int max_packet;
int pwordlevel;
- int unamelevel;
int deadtime;
int maxprotocol;
int security;
@@ -257,7 +253,6 @@ typedef struct
BOOL bLocking;
BOOL bStrictLocking;
BOOL bShareModes;
- BOOL bOpLocks;
BOOL bOnlyUser;
BOOL bMangledNames;
BOOL bWidelinks;
@@ -267,7 +262,6 @@ typedef struct
BOOL *copymap;
BOOL bDeleteReadonly;
BOOL bFakeOplocks;
- BOOL bDeleteVetoFiles;
char dummy[3]; /* for alignment */
} service;
@@ -339,7 +333,6 @@ static service sDefault =
True, /* bLocking */
False, /* bStrictLocking */
True, /* bShareModes */
- True, /* bOpLocks */
False, /* bOnlyUser */
True, /* bMangledNames */
True, /* bWidelinks */
@@ -349,7 +342,6 @@ static service sDefault =
NULL, /* copymap */
False, /* bDeleteReadonly */
False, /* bFakeOplocks */
- False, /* bDeleteVetoFiles */
"" /* dummy */
};
@@ -375,7 +367,9 @@ static BOOL handle_case(char *pszParmValue,int *val);
static BOOL handle_printing(char *pszParmValue,int *val);
static BOOL handle_character_set(char *pszParmValue,int *val);
static BOOL handle_announce_as(char *pszParmValue, int *val);
+#ifdef KANJI
static BOOL handle_coding_system(char *pszParmValue,int *val);
+#endif /* KANJI */
static void set_default_server_announce_type(void);
@@ -452,14 +446,15 @@ struct parm_struct
{"max packet", P_INTEGER, P_GLOBAL, &Globals.max_packet, NULL},
{"packet size", P_INTEGER, P_GLOBAL, &Globals.max_packet, NULL},
{"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL},
- {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL},
{"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL},
{"deadtime", P_INTEGER, P_GLOBAL, &Globals.deadtime, NULL},
{"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL},
{"read size", P_INTEGER, P_GLOBAL, &Globals.ReadSize, NULL},
{"shared mem size", P_INTEGER, P_GLOBAL, &Globals.shmem_size, NULL},
{"shared file entries", P_INTEGER, P_GLOBAL, &Globals.shmem_hash_size, NULL},
+#ifdef KANJI
{"coding system", P_INTEGER, P_GLOBAL, &coding_system, handle_coding_system},
+#endif /* KANJI */
{"client code page", P_INTEGER, P_GLOBAL, &Globals.client_code_page, NULL},
{"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL},
{"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL},
@@ -527,7 +522,6 @@ 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},
- {"delete veto files",P_BOOL, P_LOCAL, &sDefault.bDeleteVetoFiles, 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},
@@ -543,7 +537,6 @@ struct parm_struct
{"locking", P_BOOL, P_LOCAL, &sDefault.bLocking, NULL},
{"strict locking", P_BOOL, P_LOCAL, &sDefault.bStrictLocking, NULL},
{"share modes", P_BOOL, P_LOCAL, &sDefault.bShareModes, NULL},
- {"oplocks", P_BOOL, P_LOCAL, &sDefault.bOpLocks, NULL},
{"only user", P_BOOL, P_LOCAL, &sDefault.bOnlyUser, NULL},
{"wide links", P_BOOL, P_LOCAL, &sDefault.bWidelinks, NULL},
{"follow symlinks", P_BOOL, P_LOCAL, &sDefault.bSymlinks, NULL},
@@ -606,7 +599,11 @@ static void init_globals(void)
#endif
string_set(&Globals.szPasswdChat,"*old*password* %o\\n *new*password* %n\\n *new*password* %n\\n *changed*");
string_set(&Globals.szWorkGroup, WORKGROUP);
+#ifdef SMB_PASSWD
string_set(&Globals.szPasswdProgram, SMB_PASSWD);
+#else
+ string_set(&Globals.szPasswdProgram, "/bin/passwd");
+#endif
string_set(&Globals.szPrintcapname, PRINTCAP_NAME);
string_set(&Globals.szLockDir, LOCKDIR);
string_set(&Globals.szRootdir, "/");
@@ -624,7 +621,6 @@ static void init_globals(void)
Globals.max_mux = 50; /* This is *needed* for profile support. */
Globals.lpqcachetime = 10;
Globals.pwordlevel = 0;
- Globals.unamelevel = 0;
Globals.deadtime = 0;
Globals.max_log_size = 5000;
Globals.maxprotocol = PROTOCOL_NT1;
@@ -650,7 +646,9 @@ static void init_globals(void)
Globals.bNISHomeMap = False;
string_set(&Globals.szNISHomeMapName, "auto.home");
#endif
+#ifdef KANJI
coding_system = interpret_coding_system (KANJI, SJIS_CODE);
+#endif /* KANJI */
Globals.client_code_page = DEFAULT_CLIENT_CODE_PAGE;
Globals.bTimeServer = False;
@@ -871,7 +869,6 @@ FN_GLOBAL_INTEGER(lp_maxmux,&Globals.max_mux)
FN_GLOBAL_INTEGER(lp_maxpacket,&Globals.max_packet)
FN_GLOBAL_INTEGER(lp_keepalive,&keepalive)
FN_GLOBAL_INTEGER(lp_passwordlevel,&Globals.pwordlevel)
-FN_GLOBAL_INTEGER(lp_usernamelevel,&Globals.unamelevel)
FN_GLOBAL_INTEGER(lp_readsize,&Globals.ReadSize)
FN_GLOBAL_INTEGER(lp_shmem_size,&Globals.shmem_size)
FN_GLOBAL_INTEGER(lp_shmem_hash_size,&Globals.shmem_hash_size)
@@ -938,7 +935,6 @@ FN_LOCAL_BOOL(lp_map_archive,bMap_archive)
FN_LOCAL_BOOL(lp_locking,bLocking)
FN_LOCAL_BOOL(lp_strict_locking,bStrictLocking)
FN_LOCAL_BOOL(lp_share_modes,bShareModes)
-FN_LOCAL_BOOL(lp_oplocks,bOpLocks)
FN_LOCAL_BOOL(lp_onlyuser,bOnlyUser)
FN_LOCAL_BOOL(lp_manglednames,bMangledNames)
FN_LOCAL_BOOL(lp_widelinks,bWidelinks)
@@ -947,7 +943,6 @@ FN_LOCAL_BOOL(lp_syncalways,bSyncAlways)
FN_LOCAL_BOOL(lp_map_system,bMap_system)
FN_LOCAL_BOOL(lp_delete_readonly,bDeleteReadonly)
FN_LOCAL_BOOL(lp_fake_oplocks,bFakeOplocks)
-FN_LOCAL_BOOL(lp_recursive_veto_delete,bDeleteVetoFiles)
FN_LOCAL_INTEGER(lp_create_mode,iCreate_mask)
FN_LOCAL_INTEGER(lp_force_create_mode,iCreate_force_mode)
@@ -972,6 +967,8 @@ static void copy_service( service *pserviceDest,
static BOOL service_ok(int iService);
static BOOL do_parameter(char *pszParmName, char *pszParmValue);
static BOOL do_section(char *pszSectionName);
+static void dump_globals(void);
+static void dump_a_service(service *pService);
static void init_copymap(service *pservice);
@@ -1142,8 +1139,6 @@ BOOL lp_add_printer(char *pszPrintername, int iDefaultService)
iSERVICE(i).bRead_only = False;
/* No share modes on printer services. */
iSERVICE(i).bShareModes = False;
- /* No oplocks on printer services. */
- iSERVICE(i).bOpLocks = False;
/* Printer services must be printable. */
iSERVICE(i).bPrint_ok = True;
@@ -1425,6 +1420,7 @@ BOOL lp_file_list_changed(void)
return(False);
}
+#ifdef KANJI
/***************************************************************************
handle the interpretation of the coding system parameter
*************************************************************************/
@@ -1433,6 +1429,7 @@ static BOOL handle_coding_system(char *pszParmValue,int *val)
*val = interpret_coding_system(pszParmValue,*val);
return(True);
}
+#endif /* KANJI */
/***************************************************************************
handle the interpretation of the character set system parameter
@@ -1613,15 +1610,18 @@ static void init_copymap(service *pservice)
/***************************************************************************
-Process a parameter for a particular service number. If snum < 0
-then assume we are in the globals
+Process a parameter.
***************************************************************************/
-BOOL lp_do_parameter(int snum, char *pszParmName, char *pszParmValue)
+static BOOL do_parameter(char *pszParmName, char *pszParmValue)
{
int parmnum;
void *parm_ptr=NULL; /* where we are going to store the result */
void *def_ptr=NULL;
+ if (!bInGlobalSection && bGlobalOnly) return(True);
+
+ DEBUG(3,("doing parameter %s = %s\n",pszParmName,pszParmValue));
+
parmnum = map_parameter(pszParmName);
if (parmnum < 0)
@@ -1633,33 +1633,37 @@ BOOL lp_do_parameter(int snum, char *pszParmName, char *pszParmValue)
def_ptr = parm_table[parmnum].ptr;
/* we might point at a service, the default service or a global */
- if (snum < 0) {
+ if (bInGlobalSection)
parm_ptr = def_ptr;
- } else {
- if (parm_table[parmnum].class == P_GLOBAL) {
+ else
+ {
+ if (parm_table[parmnum].class == P_GLOBAL)
+ {
DEBUG(0,( "Global parameter %s found in service section!\n",pszParmName));
return(True);
}
- parm_ptr = ((char *)pSERVICE(snum)) + PTR_DIFF(def_ptr,&sDefault);
- }
+ parm_ptr = ((char *)pSERVICE(iServiceIndex)) + PTR_DIFF(def_ptr,&sDefault);
+ }
- if (snum >= 0) {
- int i;
- if (!iSERVICE(snum).copymap)
- init_copymap(pSERVICE(snum));
-
- /* this handles the aliases - set the copymap for other entries with
- the same data pointer */
- for (i=0;parm_table[i].label;i++)
- if (parm_table[i].ptr == parm_table[parmnum].ptr)
- iSERVICE(snum).copymap[i] = False;
- }
+ if (!bInGlobalSection)
+ {
+ int i;
+ if (!iSERVICE(iServiceIndex).copymap)
+ init_copymap(pSERVICE(iServiceIndex));
+
+ /* this handles the aliases - set the copymap for other entries with
+ the same data pointer */
+ for (i=0;parm_table[i].label;i++)
+ if (parm_table[i].ptr == parm_table[parmnum].ptr)
+ iSERVICE(iServiceIndex).copymap[i] = False;
+ }
/* if it is a special case then go ahead */
- if (parm_table[parmnum].special) {
- parm_table[parmnum].special(pszParmValue,parm_ptr);
- return(True);
- }
+ if (parm_table[parmnum].special)
+ {
+ parm_table[parmnum].special(pszParmValue,parm_ptr);
+ return(True);
+ }
/* now switch on the type of variable it is */
switch (parm_table[parmnum].type)
@@ -1708,105 +1712,48 @@ BOOL lp_do_parameter(int snum, char *pszParmName, char *pszParmValue)
}
/***************************************************************************
-Process a parameter.
-***************************************************************************/
-static BOOL do_parameter(char *pszParmName, char *pszParmValue)
-{
- if (!bInGlobalSection && bGlobalOnly) return(True);
-
- DEBUG(3,("doing parameter %s = %s\n",pszParmName,pszParmValue));
-
- return lp_do_parameter(bInGlobalSection?-2:iServiceIndex, pszParmName, pszParmValue);
-}
-
-
-/***************************************************************************
print a parameter of the specified type
***************************************************************************/
-static void print_parameter(parm_type type,void *ptr, FILE *f)
+static void print_parameter(parm_type type,void *ptr)
{
switch (type)
{
case P_BOOL:
- fprintf(f,"%s",BOOLSTR(*(BOOL *)ptr));
+ printf("%s",BOOLSTR(*(BOOL *)ptr));
break;
case P_BOOLREV:
- fprintf(f,"%s",BOOLSTR(! *(BOOL *)ptr));
+ printf("%s",BOOLSTR(! *(BOOL *)ptr));
break;
case P_INTEGER:
- fprintf(f,"%d",*(int *)ptr);
+ printf("%d",*(int *)ptr);
break;
case P_CHAR:
- fprintf(f,"%c",*(char *)ptr);
+ printf("%c",*(char *)ptr);
break;
case P_OCTAL:
- fprintf(f,"0%o",*(int *)ptr);
+ printf("0%o",*(int *)ptr);
break;
case P_GSTRING:
case P_UGSTRING:
if ((char *)ptr)
- fprintf(f,"%s",(char *)ptr);
+ printf("%s",(char *)ptr);
break;
case P_STRING:
case P_USTRING:
if (*(char **)ptr)
- fprintf(f,"%s",*(char **)ptr);
+ printf("%s",*(char **)ptr);
break;
}
}
/***************************************************************************
-print a parameter of the specified type
-***************************************************************************/
-static void parameter_string(parm_type type,void *ptr,char *s)
-{
- s[0] = 0;
-
- switch (type)
- {
- case P_BOOL:
- sprintf(s, "%s",BOOLSTR(*(BOOL *)ptr));
- break;
-
- case P_BOOLREV:
- sprintf(s, "%s",BOOLSTR(! *(BOOL *)ptr));
- break;
-
- case P_INTEGER:
- sprintf(s, "%d",*(int *)ptr);
- break;
-
- case P_CHAR:
- sprintf(s, "%c",*(char *)ptr);
- break;
-
- case P_OCTAL:
- sprintf(s, "0%o",*(int *)ptr);
- break;
-
- case P_GSTRING:
- case P_UGSTRING:
- if ((char *)ptr)
- sprintf(s, "%s",(char *)ptr);
- break;
-
- case P_STRING:
- case P_USTRING:
- if (*(char **)ptr)
- sprintf(s, "%s",*(char **)ptr);
- break;
- }
-}
-
-
-/***************************************************************************
check if two parameters are equal
***************************************************************************/
static BOOL equal_parameter(parm_type type,void *ptr1,void *ptr2)
@@ -1898,32 +1845,32 @@ static BOOL do_section(char *pszSectionName)
/***************************************************************************
Display the contents of the global structure.
***************************************************************************/
-static void dump_globals(FILE *f)
+static void dump_globals(void)
{
int i;
- fprintf(f, "# Global parameters\n");
+ printf("Global parameters:\n");
for (i=0;parm_table[i].label;i++)
if (parm_table[i].class == P_GLOBAL &&
parm_table[i].ptr &&
(i == 0 || (parm_table[i].ptr != parm_table[i-1].ptr)))
{
- fprintf(f,"\t%s = ",parm_table[i].label);
- print_parameter(parm_table[i].type,parm_table[i].ptr, f);
- fprintf(f,"\n");
+ printf("\t%s: ",parm_table[i].label);
+ print_parameter(parm_table[i].type,parm_table[i].ptr);
+ printf("\n");
}
}
/***************************************************************************
Display the contents of a single services record.
***************************************************************************/
-static void dump_a_service(service *pService, FILE *f)
+static void dump_a_service(service *pService)
{
int i;
if (pService == &sDefault)
- fprintf(f,"\n\n# Default service parameters\n");
+ printf("\nDefault service parameters:\n");
else
- fprintf(f,"\n[%s]\n",pService->szService);
+ printf("\nService parameters [%s]:\n",pService->szService);
for (i=0;parm_table[i].label;i++)
if (parm_table[i].class == P_LOCAL &&
@@ -1937,69 +1884,14 @@ static void dump_a_service(service *pService, FILE *f)
((char *)pService) + pdiff,
((char *)&sDefault) + pdiff))
{
- fprintf(f,"\t%s = ",parm_table[i].label);
+ printf("\t%s: ",parm_table[i].label);
print_parameter(parm_table[i].type,
- ((char *)pService) + pdiff, f);
- fprintf(f,"\n");
+ ((char *)pService) + pdiff);
+ printf("\n");
}
}
}
-
-/***************************************************************************
-return info about the next service in a service. snum==-1 gives the default
-serice and snum==-2 gives the globals
-
-return 0 when out of parameters
-***************************************************************************/
-int lp_next_parameter(int snum, int *i, char *label,
- char *value, int allparameters)
-{
- if (snum == -2) {
- /* do the globals */
- for (;parm_table[*i].label;(*i)++)
- if (parm_table[*i].class == P_GLOBAL &&
- parm_table[*i].ptr &&
- (*parm_table[*i].label != '-') &&
- ((*i) == 0 ||
- (parm_table[*i].ptr != parm_table[(*i)-1].ptr))) {
- strcpy(label, parm_table[*i].label);
- parameter_string(parm_table[*i].type,
- parm_table[*i].ptr,
- value);
- (*i)++;
- return 1;
- }
- return 0;
- } else {
- service *pService = (snum==-1?&sDefault:pSERVICE(snum));
-
- for (;parm_table[*i].label;(*i)++)
- if (parm_table[*i].class == P_LOCAL &&
- parm_table[*i].ptr &&
- (*parm_table[*i].label != '-') &&
- ((*i) == 0 ||
- (parm_table[*i].ptr != parm_table[(*i)-1].ptr))) {
- int pdiff = PTR_DIFF(parm_table[*i].ptr,&sDefault);
-
- if (snum == -1 || allparameters ||
- !equal_parameter(parm_table[*i].type,
- ((char *)pService) + pdiff,
- ((char *)&sDefault) + pdiff)) {
- strcpy(label, parm_table[*i].label);
- parameter_string(parm_table[*i].type,
- ((char *)pService) + pdiff,
- value);
- (*i)++;
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-
#if 0
/***************************************************************************
Display the contents of a single copy structure.
@@ -2108,7 +2000,7 @@ void lp_killunused(BOOL (*snumused)(int ))
{
int i;
for (i=0;i<iNumServices;i++)
- if (VALID(i) && (!snumused || !snumused(i)))
+ if (VALID(i) && !snumused(i))
{
iSERVICE(i).valid = False;
free_service(pSERVICE(i));
@@ -2171,13 +2063,13 @@ int lp_numservices(void)
/***************************************************************************
Display the contents of the services array in human-readable form.
***************************************************************************/
-void lp_dump(FILE *f)
+void lp_dump(void)
{
int iService;
- dump_globals(f);
+ dump_globals();
- dump_a_service(&sDefault, f);
+ dump_a_service(&sDefault);
for (iService = 0; iService < iNumServices; iService++)
{
@@ -2185,12 +2077,11 @@ void lp_dump(FILE *f)
{
if (iSERVICE(iService).szService[0] == '\0')
break;
- dump_a_service(pSERVICE(iService), f);
+ dump_a_service(pSERVICE(iService));
}
}
}
-
/***************************************************************************
Return the number of the service with the given name, or -1 if it doesn't
exist. Note that this is a DIFFERENT ANIMAL from the internal function
@@ -2268,38 +2159,6 @@ static void set_default_server_announce_type()
#endif
}
-
-/*******************************************************************
-rename a service
-********************************************************************/
-void lp_rename_service(int snum, char *new_name)
-{
- string_set(&pSERVICE(snum)->szService, new_name);
-}
-
-/*******************************************************************
-remove a service
-********************************************************************/
-void lp_remove_service(int snum)
-{
- pSERVICE(snum)->valid = False;
-}
-
-/*******************************************************************
-copy a service
-********************************************************************/
-void lp_copy_service(int snum, char *new_name)
-{
- char *oldname = lp_servicename(snum);
- do_section(new_name);
- if (snum >= 0) {
- snum = lp_servicenumber(new_name);
- if (snum >= 0)
- lp_do_parameter(snum, "copy", oldname);
- }
-}
-
-
/*******************************************************************
Get the default server type we will announce as via nmbd.
********************************************************************/
@@ -2354,4 +2213,3 @@ int lp_minor_announce_version(void)
minor_version = atoi(p);
return minor_version;
}
-