#define LOADPARM_EXTRA_GLOBALS \
struct parmlist_entry *param_opt; \
- char *szRealm; \
+ char *realm_original; \
char *szConfigFile; \
int iminreceivefile; \
char *szPrintcapname; \
char *tls_cafile; \
char *tls_crlfile; \
char *tls_dhpfile; \
- char *loglevel; \
- char *panic_action;
+ char *loglevel;
#include "lib/param/param_global.h"
FN_GLOBAL_CONST_STRING(statedir, szStateDir)
/* local prototypes */
-static int map_parameter(const char *pszParmName);
static struct loadparm_service *getservicebyname(struct loadparm_context *lp_ctx,
const char *pszServiceName);
static void copy_service(struct loadparm_service *pserviceDest,
service->comment = talloc_asprintf(service, "Home directory of %s", user);
}
service->bAvailable = default_service->bAvailable;
- service->bBrowseable = default_service->bBrowseable;
+ service->browseable = default_service->browseable;
DEBUG(3, ("adding home's share [%s] for user '%s' at '%s'\n",
pszHomename, user, service->pathname));
/* the printer name is set to the service name. */
lpcfg_string_set(service, &service->szPrintername, pszPrintername);
lpcfg_string_set(service, &service->comment, comment);
- service->bBrowseable = default_service->bBrowseable;
+ service->browseable = default_service->browseable;
/* Printers cannot be read_only. */
- service->bRead_only = false;
+ service->readonly = false;
/* Printer services must be printable. */
- service->bPrint_ok = true;
+ service->print_ok = true;
DEBUG(3, ("adding printer service %s\n", pszPrintername));
* Returns False if the parameter string is not recognised, else TRUE.
*/
-static int map_parameter(const char *pszParmName)
+int lpcfg_map_parameter(const char *pszParmName)
{
int iIndex;
- if (*pszParmName == '-')
- return -1;
-
for (iIndex = 0; parm_table[iIndex].label; iIndex++)
if (strwicmp(parm_table[iIndex].label, pszParmName) == 0)
return iIndex;
return lp_ctx->s3_fns->get_parm_struct(name);
}
- parmnum = map_parameter(name);
+ parmnum = lpcfg_map_parameter(name);
if (parmnum == -1) return NULL;
return &parm_table[parmnum];
}
return false;
}
- parmnum = map_parameter(name);
+ parmnum = lpcfg_map_parameter(name);
if (parmnum == -1) return false;
return lp_ctx->flags[parmnum] & FLAG_CMDLINE;
switch (parm_table[i].type) {
case P_BOOL:
+ case P_BOOLREV:
*(bool *)dest_ptr = *(bool *)src_ptr;
break;
*(int *)dest_ptr = *(int *)src_ptr;
break;
+ case P_CHAR:
+ *(char *)dest_ptr = *(char *)src_ptr;
+ break;
+
case P_STRING:
lpcfg_string_set(pserviceDest,
(char **)dest_ptr,
/* The [printers] entry MUST be printable. I'm all for flexibility, but */
/* I can't see why you'd want a non-printable printer service... */
if (strwicmp(service->szService, PRINTERS_NAME) == 0) {
- if (!service->bPrint_ok) {
+ if (!service->print_ok) {
DEBUG(0, ("WARNING: [%s] service MUST be printable!\n",
service->szService));
- service->bPrint_ok = true;
+ service->print_ok = true;
}
/* [printers] service must also be non-browsable. */
- if (service->bBrowseable)
- service->bBrowseable = false;
+ if (service->browseable)
+ service->browseable = false;
}
/* If a service is flagged unavailable, log the fact at level 0. */
{
lpcfg_string_set(lp_ctx, ptr, pszParmValue);
- talloc_free(lp_ctx->globals->szRealm_upper);
- talloc_free(lp_ctx->globals->szRealm_lower);
+ talloc_free(lp_ctx->globals->realm);
+ talloc_free(lp_ctx->globals->dnsdomain);
- lp_ctx->globals->szRealm_upper = strupper_talloc(lp_ctx, pszParmValue);
- lp_ctx->globals->szRealm_lower = strlower_talloc(lp_ctx, pszParmValue);
+ lp_ctx->globals->realm = strupper_talloc(lp_ctx, pszParmValue);
+ lp_ctx->globals->dnsdomain = strlower_talloc(lp_ctx, pszParmValue);
return true;
}
bool lpcfg_do_global_parameter(struct loadparm_context *lp_ctx,
const char *pszParmName, const char *pszParmValue)
{
- int parmnum = map_parameter(pszParmName);
+ int parmnum = lpcfg_map_parameter(pszParmName);
void *parm_ptr;
if (parmnum < 0) {
{
void *parm_ptr;
int i;
- int parmnum = map_parameter(pszParmName);
+ int parmnum = lpcfg_map_parameter(pszParmName);
if (parmnum < 0) {
if (strchr(pszParmName, ':')) {
return lp_ctx->s3_fns->set_cmdline(pszParmName, pszParmValue);
}
- parmnum = map_parameter(pszParmName);
+ parmnum = lpcfg_map_parameter(pszParmName);
while (isspace((unsigned char)*pszParmValue)) pszParmValue++;
lp_ctx->flags[parmnum] |= FLAG_CMDLINE;
/* we have to also set FLAG_CMDLINE on aliases */
- for (i=parmnum-1;i>=0 && parm_table[i].offset == parm_table[parmnum].offset;i--) {
+ for (i=parmnum-1;
+ i>=0 && parm_table[i].p_class == parm_table[parmnum].p_class &&
+ parm_table[i].offset == parm_table[parmnum].offset;
+ i--) {
lp_ctx->flags[i] |= FLAG_CMDLINE;
}
- for (i=parmnum+1;i<NUMPARAMETERS && parm_table[i].offset == parm_table[parmnum].offset;i++) {
+ for (i=parmnum+1;
+ i<NUMPARAMETERS &&
+ parm_table[i].p_class == parm_table[parmnum].p_class &&
+ parm_table[i].offset == parm_table[parmnum].offset;
+ i++) {
lp_ctx->flags[i] |= FLAG_CMDLINE;
}
* Print a parameter of the specified type.
*/
-static void print_parameter(struct parm_struct *p, void *ptr, FILE * f)
+void lpcfg_print_parameter(struct parm_struct *p, void *ptr, FILE * f)
{
/* For the seperation of lists values that we print below */
const char *list_sep = ", ";
if (val == -1) {
fprintf(f, "-1");
} else {
- fprintf(f, "0%o", val);
+ fprintf(f, "0%03o", val);
}
break;
}
* Check if two parameters are equal.
*/
-static bool equal_parameter(parm_type type, void *ptr1, void *ptr2)
+ bool lpcfg_equal_parameter(parm_type type, void *ptr1, void *ptr2)
{
switch (type) {
case P_BOOL:
if (!show_defaults && (lp_ctx->flags[i] & FLAG_DEFAULT))
continue;
fprintf(f, "\t%s = ", parm_table[i].label);
- print_parameter(&parm_table[i], lpcfg_parm_ptr(lp_ctx, NULL, &parm_table[i]), f);
+ lpcfg_print_parameter(&parm_table[i], lpcfg_parm_ptr(lp_ctx, NULL, &parm_table[i]), f);
fprintf(f, "\n");
}
if (lp_ctx->globals->param_opt != NULL) {
}
}
} else {
- if (equal_parameter(parm_table[i].type,
- ((char *)pService) +
- parm_table[i].offset,
- ((char *)sDefault) +
- parm_table[i].offset))
+ if (lpcfg_equal_parameter(parm_table[i].type,
+ ((char *)pService) +
+ parm_table[i].offset,
+ ((char *)sDefault) +
+ parm_table[i].offset))
continue;
}
fprintf(f, "\t%s = ", parm_table[i].label);
- print_parameter(&parm_table[i],
+ lpcfg_print_parameter(&parm_table[i],
((char *)pService) + parm_table[i].offset, f);
fprintf(f, "\n");
}
return false;
}
+ if (service != NULL && parm->p_class == P_GLOBAL) {
+ return false;
+ }
+
ptr = lpcfg_parm_ptr(lp_ctx, service,parm);
- print_parameter(parm, ptr, f);
+ lpcfg_print_parameter(parm, ptr, f);
fprintf(f, "\n");
return true;
}
-/**
- * Return info about the next parameter in a service.
- * snum==-1 gives the globals.
- * Return NULL when out of parameters.
- */
-
-
-struct parm_struct *lpcfg_next_parameter(struct loadparm_context *lp_ctx, int snum, int *i,
- int allparameters)
-{
- if (snum == -1) {
- /* do the globals */
- for (; parm_table[*i].label; (*i)++) {
- if ((*parm_table[*i].label == '-'))
- continue;
-
- if ((*i) > 0
- && (parm_table[*i].offset ==
- parm_table[(*i) - 1].offset)
- && (parm_table[*i].p_class ==
- parm_table[(*i) - 1].p_class))
- continue;
-
- return &parm_table[(*i)++];
- }
- } else {
- struct loadparm_service *pService = lp_ctx->services[snum];
-
- for (; parm_table[*i].label; (*i)++) {
- if (parm_table[*i].p_class == P_LOCAL &&
- (*parm_table[*i].label != '-') &&
- ((*i) == 0 ||
- (parm_table[*i].offset !=
- parm_table[(*i) - 1].offset)))
- {
- if (allparameters ||
- !equal_parameter(parm_table[*i].type,
- ((char *)pService) +
- parm_table[*i].offset,
- ((char *)lp_ctx->sDefault) +
- parm_table[*i].offset))
- {
- return &parm_table[(*i)++];
- }
- }
- }
- }
-
- return NULL;
-}
-
-
/**
* Auto-load some home services.
*/
lp_ctx->sDefault->iMaxPrintJobs = 1000;
lp_ctx->sDefault->bAvailable = true;
- lp_ctx->sDefault->bBrowseable = true;
- lp_ctx->sDefault->bRead_only = true;
- lp_ctx->sDefault->bMap_archive = true;
- lp_ctx->sDefault->iStrictLocking = true;
- lp_ctx->sDefault->bOpLocks = true;
- lp_ctx->sDefault->iCreate_mask = 0744;
- lp_ctx->sDefault->iCreate_force_mode = 0000;
- lp_ctx->sDefault->iDir_mask = 0755;
- lp_ctx->sDefault->iDir_force_mode = 0000;
+ lp_ctx->sDefault->browseable = true;
+ lp_ctx->sDefault->readonly = true;
+ lp_ctx->sDefault->map_archive = true;
+ lp_ctx->sDefault->strict_locking = true;
+ lp_ctx->sDefault->oplocks = true;
+ lp_ctx->sDefault->create_mask = 0744;
+ lp_ctx->sDefault->force_create_mode = 0000;
+ lp_ctx->sDefault->dir_mask = 0755;
+ lp_ctx->sDefault->force_dir_mode = 0000;
DEBUG(3, ("Initialising global parameters\n"));
lpcfg_do_global_parameter(lp_ctx, "fstype", "NTFS");
lpcfg_do_global_parameter(lp_ctx, "ntvfs handler", "unixuid default");
- lpcfg_do_global_parameter(lp_ctx, "max connections", "-1");
+ lpcfg_do_global_parameter(lp_ctx, "max connections", "0");
lpcfg_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi dssetup unixinfo browser eventlog6 backupkey dnsserver");
lpcfg_do_global_parameter(lp_ctx, "server services", "s3fs rpc nbt wrepl ldap cldap kdc drepl winbind ntp_signd kcc dnsupdate dns");
lpcfg_do_global_parameter(lp_ctx, "registry:HKEY_USERS", "hku.ldb");
/* using UTF8 by default allows us to support all chars */
- lpcfg_do_global_parameter(lp_ctx, "unix charset", "UTF8");
+ lpcfg_do_global_parameter(lp_ctx, "unix charset", "UTF-8");
/* Use codepage 850 as a default for the dos character set */
lpcfg_do_global_parameter(lp_ctx, "dos charset", "CP850");
lpcfg_do_global_parameter(lp_ctx, "cache directory", dyn_CACHEDIR);
lpcfg_do_global_parameter(lp_ctx, "ncalrpc dir", dyn_NCALRPCDIR);
- lpcfg_do_global_parameter(lp_ctx, "nbt client socket address", "");
+ lpcfg_do_global_parameter(lp_ctx, "nbt client socket address", "0.0.0.0");
lpcfg_do_global_parameter_var(lp_ctx, "server string",
"Samba %s", SAMBA_VERSION_STRING);
lpcfg_do_global_parameter(lp_ctx, "password server", "*");
lpcfg_do_global_parameter(lp_ctx, "max mux", "50");
- lpcfg_do_global_parameter(lp_ctx, "max xmit", "12288");
+ lpcfg_do_global_parameter(lp_ctx, "max xmit", "16644");
lpcfg_do_global_parameter(lp_ctx, "host msdfs", "true");
lpcfg_do_global_parameter(lp_ctx, "LargeReadwrite", "True");
- lpcfg_do_global_parameter(lp_ctx, "server min protocol", "CORE");
+ lpcfg_do_global_parameter(lp_ctx, "server min protocol", "LANMAN1");
lpcfg_do_global_parameter(lp_ctx, "server max protocol", "NT1");
lpcfg_do_global_parameter(lp_ctx, "client min protocol", "CORE");
lpcfg_do_global_parameter(lp_ctx, "client max protocol", "NT1");
lpcfg_do_global_parameter(lp_ctx, "allow dns updates", "secure only");
lpcfg_do_global_parameter(lp_ctx, "dns forwarder", "");
+ lpcfg_do_global_parameter(lp_ctx, "algorithmic rid base", "1000");
+
+ lpcfg_do_global_parameter(lp_ctx, "enhanced browsing", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "winbind nss info", "template");
+
+ lpcfg_do_global_parameter(lp_ctx, "server schannel", "Auto");
+
+ lpcfg_do_global_parameter(lp_ctx, "short preserve case", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "max open files", "16384");
+
+ lpcfg_do_global_parameter(lp_ctx, "cups connection timeout", "30");
+
+ lpcfg_do_global_parameter(lp_ctx, "locking", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "block size", "1024");
+
+ lpcfg_do_global_parameter(lp_ctx, "client use spnego", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "change notify", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "name cache timeout", "660");
+
+ lpcfg_do_global_parameter(lp_ctx, "defer sharing violations", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "ldap replication sleep", "1000");
+
+ lpcfg_do_global_parameter(lp_ctx, "idmap backend", "tdb");
+
+ lpcfg_do_global_parameter(lp_ctx, "enable privileges", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "smb2 max write", "1048576");
+
+ lpcfg_do_global_parameter(lp_ctx, "passdb backend", "tdbsam");
+
+ lpcfg_do_global_parameter(lp_ctx, "getwd cache", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "winbind nested groups", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "mangled names", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "smb2 max credits", "8192");
+
+ lpcfg_do_global_parameter(lp_ctx, "ldap ssl", "start tls");
+
+ lpcfg_do_global_parameter(lp_ctx, "ldap deref", "auto");
+
+ lpcfg_do_global_parameter(lp_ctx, "lm interval", "60");
+
+ lpcfg_do_global_parameter(lp_ctx, "mangling method", "hash2");
+
+ lpcfg_do_global_parameter(lp_ctx, "hide dot files", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "browse list", "True");
+
+ lpcfg_do_global_parameter(lp_ctx, "passwd chat timeout", "2");
+
+ lpcfg_do_global_parameter(lp_ctx, "guest account", GUEST_ACCOUNT);
+
+ lpcfg_do_global_parameter(lp_ctx, "client schannel", "auto");
+
+ lpcfg_do_global_parameter(lp_ctx, "smb encrypt", "default");
+
+ lpcfg_do_global_parameter(lp_ctx, "max log size", "5000");
+
+ lpcfg_do_global_parameter(lp_ctx, "idmap negative cache time", "120");
+
+ lpcfg_do_global_parameter(lp_ctx, "ldap follow referral", "auto");
+
+ lpcfg_do_global_parameter(lp_ctx, "multicast dns register", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "winbind reconnect delay", "30");
+
+ lpcfg_do_global_parameter(lp_ctx, "nt acl support", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "acl check permissions", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "keepalive", "300");
+
+ lpcfg_do_global_parameter(lp_ctx, "winbind cache time", "300");
+
+ lpcfg_do_global_parameter(lp_ctx, "level2 oplocks", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "show add printer wizard", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "allocation roundup size", "1048576");
+
+ lpcfg_do_global_parameter(lp_ctx, "ldap page size", "1024");
+
+ lpcfg_do_global_parameter(lp_ctx, "kernel share modes", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "strict locking", "Auto");
+
+ lpcfg_do_global_parameter(lp_ctx, "map readonly", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "allow trusted domains", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "default devmode", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "os level", "20");
+
+ lpcfg_do_global_parameter(lp_ctx, "dos filetimes", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "mangling char", "~");
+
+ lpcfg_do_global_parameter(lp_ctx, "printcap cache time", "750");
+
+ lpcfg_do_global_parameter(lp_ctx, "create krb5 conf", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "winbind max clients", "200");
+
+ lpcfg_do_global_parameter(lp_ctx, "acl map full control", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "nt pipe support", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "ldap debug threshold", "10");
+
+ lpcfg_do_global_parameter(lp_ctx, "follow symlinks", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "machine password timeout", "604800");
+
+ lpcfg_do_global_parameter(lp_ctx, "ldap connection timeout", "2");
+
+ lpcfg_do_global_parameter(lp_ctx, "winbind expand groups", "1");
+
+ lpcfg_do_global_parameter(lp_ctx, "stat cache", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "lpq cache time", "30");
+
+ lpcfg_do_global_parameter(lp_ctx, "smb2 max trans", "1048576");
+
+ lpcfg_do_global_parameter(lp_ctx, "smb2 max read", "1048576");
+
+ lpcfg_do_global_parameter(lp_ctx, "durable handles", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "max stat cache size", "256");
+
+ lpcfg_do_global_parameter(lp_ctx, "ldap passwd sync", "no");
+
+ lpcfg_do_global_parameter(lp_ctx, "kernel change notify", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "max ttl", "259200");
+
+ lpcfg_do_global_parameter(lp_ctx, "blocking locks", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "oplock contention limit", "2");
+
+ lpcfg_do_global_parameter(lp_ctx, "load printers", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "idmap cache time", "604800");
+
+ lpcfg_do_global_parameter(lp_ctx, "preserve case", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "lm announce", "auto");
+
+ lpcfg_do_global_parameter(lp_ctx, "afs token lifetime", "604800");
+
+ lpcfg_do_global_parameter(lp_ctx, "enable core files", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "winbind max domain connections", "1");
+
+ lpcfg_do_global_parameter(lp_ctx, "case sensitive", "auto");
+
+ lpcfg_do_global_parameter(lp_ctx, "ldap timeout", "15");
+
+ lpcfg_do_global_parameter(lp_ctx, "mangle prefix", "1");
+
+ lpcfg_do_global_parameter(lp_ctx, "posix locking", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "lock spin time", "200");
+
+ lpcfg_do_global_parameter(lp_ctx, "directory name cache size", "100");
+
+ lpcfg_do_global_parameter(lp_ctx, "nmbd bind explicit broadcast", "yes");
+
+ lpcfg_do_global_parameter(lp_ctx, "init logon delay", "100");
+
+ lpcfg_do_global_parameter(lp_ctx, "usershare owner only", "yes");
+
for (i = 0; parm_table[i].label; i++) {
if (!(lp_ctx->flags[i] & FLAG_CMDLINE)) {
lp_ctx->flags[i] |= FLAG_DEFAULT;
struct debug_settings settings;
lpcfg_add_auto_services(lp_ctx, lpcfg_auto_services(lp_ctx));
- if (!lp_ctx->globals->szWINSservers && lp_ctx->globals->bWINSsupport) {
+ if (!lp_ctx->globals->wins_server_list && lp_ctx->globals->we_are_a_wins_server) {
lpcfg_do_global_parameter(lp_ctx, "wins server", "127.0.0.1");
}
return true;
}
- panic_action = lp_ctx->globals->szPanicAction;
+ panic_action = lp_ctx->globals->panic_action;
reload_charcnv(lp_ctx);
/* Add any more debug-related smb.conf parameters created in
* future here */
settings.syslog = lp_ctx->globals->syslog;
- settings.syslog_only = lp_ctx->globals->bSyslogOnly;
- settings.timestamp_logs = lp_ctx->globals->bTimestampLogs;
- settings.debug_prefix_timestamp = lp_ctx->globals->bDebugPrefixTimestamp;
- settings.debug_hires_timestamp = lp_ctx->globals->bDebugHiresTimestamp;
- settings.debug_pid = lp_ctx->globals->bDebugPid;
- settings.debug_uid = lp_ctx->globals->bDebugUid;
- settings.debug_class = lp_ctx->globals->bDebugClass;
+ settings.syslog_only = lp_ctx->globals->syslog_only;
+ settings.timestamp_logs = lp_ctx->globals->timestamp_logs;
+ settings.debug_prefix_timestamp = lp_ctx->globals->debug_prefix_timestamp;
+ settings.debug_hires_timestamp = lp_ctx->globals->debug_hires_timestamp;
+ settings.debug_pid = lp_ctx->globals->debug_pid;
+ settings.debug_uid = lp_ctx->globals->debug_uid;
+ settings.debug_class = lp_ctx->globals->debug_class;
debug_set_settings(&settings);
/* FIXME: This is a bit of a hack, but we can't use a global, since