if ( override_logfile )
setup_logging( lp_logfile(), false );
- if (!lp_load(dyn_CONFIGFILE,true,false,false,true)) {
+ if (!lp_load(get_dyn_CONFIGFILE(),true,false,false,true)) {
fprintf(stderr, "%s: Can't load %s - run testparm to debug it\n",
- argv[0], dyn_CONFIGFILE);
+ argv[0], get_dyn_CONFIGFILE());
}
load_interfaces();
if (sys_fork() == 0) {
char *smbmnt_path;
- asprintf(&smbmnt_path, "%s/smbmnt", dyn_BINDIR);
+ asprintf(&smbmnt_path, "%s/smbmnt", get_dyn_BINDIR());
if (file_exist(smbmnt_path, NULL)) {
execv(smbmnt_path, (char * const *)args);
int fd = -1;
char *p;
bool close_it = False;
- char *spec;
+ char *spec = NULL;
TALLOC_CTX *ctx = talloc_tos();
char pass[128];
}
}
- if (!lp_load(dyn_CONFIGFILE,True,False,False,True)) {
+ if (!lp_load(get_dyn_CONFIGFILE(),True,False,False,True)) {
fprintf(stderr, "Can't load %s - run testparm to debug it\n",
- dyn_CONFIGFILE);
+ get_dyn_CONFIGFILE());
}
parse_mount_smb(argc, argv);
load_case_tables();
- if (!lp_load(dyn_CONFIGFILE, True, False, False, True))
+ if (!lp_load(get_dyn_CONFIGFILE(), True, False, False, True))
{
- fprintf(stderr, "ERROR: Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
+ fprintf(stderr, "ERROR: Can't load %s - run testparm to debug it\n", get_dyn_CONFIGFILE());
goto done;
}
-/*
+/*
Unix SMB/CIFS implementation.
Copyright (C) 2001 by Martin Pool <mbp@samba.org>
Copyright (C) 2003 by Jim McDonough <jmcd@us.ibm.com>
-
+ Copyright (C) 2007 by Jeremy Allison <jra@samba.org>
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
* table? There's kind of a chicken-and-egg situation there...
**/
-char const *dyn_SBINDIR = SBINDIR,
- *dyn_BINDIR = BINDIR,
- *dyn_SWATDIR = SWATDIR;
+#if 0
+static char const *dyn_SBINDIR = SBINDIR;
+static char const *dyn_BINDIR = BINDIR;
+static char const *dyn_SWATDIR = SWATDIR;
+#endif
+
+#define DEFINE_DYN_CONFIG_PARAM(name) \
+static char *dyn_##name; \
+\
+ const char *get_dyn_##name(void) \
+{\
+ if (dyn_##name == NULL) {\
+ return name;\
+ }\
+ return dyn_##name;\
+}\
+\
+ const char *set_dyn_##name(const char *newpath) \
+{\
+ if (dyn_##name) {\
+ SAFE_FREE(dyn_##name);\
+ }\
+ dyn_##name = SMB_STRDUP(newpath);\
+ return dyn_##name;\
+}
+
+DEFINE_DYN_CONFIG_PARAM(SBINDIR)
+DEFINE_DYN_CONFIG_PARAM(BINDIR)
+DEFINE_DYN_CONFIG_PARAM(SWATDIR)
+DEFINE_DYN_CONFIG_PARAM(CONFIGFILE) /**< Location of smb.conf file. **/
+DEFINE_DYN_CONFIG_PARAM(LOGFILEBASE) /** Log file directory. **/
+DEFINE_DYN_CONFIG_PARAM(LMHOSTSFILE) /** Statically configured LanMan hosts. **/
+DEFINE_DYN_CONFIG_PARAM(CODEPAGEDIR)
+DEFINE_DYN_CONFIG_PARAM(LIBDIR)
+DEFINE_DYN_CONFIG_PARAM(SHLIBEXT)
+DEFINE_DYN_CONFIG_PARAM(LOCKDIR)
+DEFINE_DYN_CONFIG_PARAM(PIDDIR)
+DEFINE_DYN_CONFIG_PARAM(SMB_PASSWD_FILE)
+DEFINE_DYN_CONFIG_PARAM(PRIVATE_DIR)
+
+#if 0
+static char *dyn_CONFIGFILE; /**< Location of smb.conf file. **/
+
+const char *get_dyn_CONFIGFILE(void)
+{
+ if (dyn_CONFIGFILE == NULL) {
+ return CONFIGFILE;
+ }
+ return dyn_CONFIGFILE;
+}
-/* JRA - FIXME - these should be dynamic char * */
-char dyn_CONFIGFILE[1024] = CONFIGFILE; /**< Location of smb.conf file. **/
+const char *set_dyn_CONFIGFILE(const char *newpath)
+{
+ if (dyn_CONFIGFILE) {
+ SAFE_FREE(dyn_CONFIGFILE);
+ }
+ dyn_CONFIGFILE = SMB_STRDUP(newpath);
+ return dyn_CONFIGFILE;
+}
/** Log file directory. **/
-char dyn_LOGFILEBASE[1024] = LOGFILEBASE;
+static char *dyn_LOGFILEBASE;
+
+const char *get_dyn_LOGFILEBASE(void)
+{
+ if (dyn_LOGFILEBASE == NULL) {
+ return LOGFILEBASE;
+ }
+ return dyn_LOGFILEBASE;
+}
+
+const char *set_dyn_LOGFILEBASE(const char *newpath)
+{
+ if (dyn_LOGFILEBASE) {
+ SAFE_FREE(dyn_LOGFILEBASE);
+ }
+ dyn_LOGFILEBASE = SMB_STRDUP(newpath);
+ return dyn_LOGFILEBASE;
+}
/** Statically configured LanMan hosts. **/
-char dyn_LMHOSTSFILE[1024] = LMHOSTSFILE;
+static char *dyn_LMHOSTSFILE;
+
+const char *get_dyn_LMHOSTSFILE(void)
+{
+ if (dyn_LMHOSTSFILE == NULL) {
+ return LMHOSTSFILE;
+ }
+ return dyn_LMHOSTSFILE;
+}
+
+const char *set_dyn_LMHOSTSFILE(const char *newpath)
+{
+ if (dyn_LMHOSTSFILE) {
+ SAFE_FREE(dyn_LMHOSTSFILE);
+ }
+ dyn_LMHOSTSFILE = SMB_STRDUP(newpath);
+ return dyn_LMHOSTSFILE;
+}
/**
* @brief Samba data directory.
*
* @sa data_path() to get the path to a file inside the CODEPAGEDIR.
**/
-char dyn_CODEPAGEDIR[1024] = CODEPAGEDIR;
+static char *dyn_CODEPAGEDIR;
+
+const char *get_dyn_CODEPAGEDIR(void)
+{
+ if (dyn_CODEPAGEDIR == NULL) {
+ return CODEPAGEDIR;
+ }
+ return dyn_CODEPAGEDIR;
+}
+
+const char *set_dyn_CODEPAGEDIR(const char *newpath)
+{
+ if (dyn_CODEPAGEDIR) {
+ SAFE_FREE(dyn_CODEPAGEDIR);
+ }
+ dyn_CODEPAGEDIR = SMB_STRDUP(newpath);
+ return dyn_CODEPAGEDIR;
+}
/**
* @brief Samba library directory.
*
* @sa lib_path() to get the path to a file inside the LIBDIR.
**/
-char dyn_LIBDIR[1024] = LIBDIR;
-fstring dyn_SHLIBEXT = SHLIBEXT;
+static char *dyn_LIBDIR;
+
+const char *get_dyn_LIBDIR(void)
+{
+ if (dyn_LIBDIR == NULL) {
+ return LIBDIR;
+ }
+ return dyn_CODEPAGEDIR;
+}
+
+const char *set_dyn_LIBDIR(const char *newpath)
+{
+ if (dyn_LIBDIR) {
+ SAFE_FREE(dyn_LIBDIR);
+ }
+ dyn_LIBDIR = SMB_STRDUP(newpath);
+ return dyn_LIBDIR;
+}
+
+static char *dyn_SHLIBEXT;
+
+const char *get_dyn_SHLIBEXT(void)
+{
+ if (dyn_SHLIBEXT == NULL) {
+ return SHLIBEXT;
+ }
+ return dyn_SHLIBEXT;
+}
+
+const char *set_dyn_SHLIBEXT(const char *newpath)
+{
+ if (dyn_SHLIBEXT) {
+ SAFE_FREE(dyn_SHLIBEXT);
+ }
+ dyn_SHLIBEXT = SMB_STRDUP(newpath);
+ return dyn_SHLIBEXT;
+}
/**
* @brief Directory holding lock files.
*
* Not writable, but used to set a default in the parameter table.
**/
-char dyn_LOCKDIR[1024] = LOCKDIR;
-char dyn_PIDDIR[1024] = PIDDIR;
-char dyn_SMB_PASSWD_FILE[1024] = SMB_PASSWD_FILE;
-char dyn_PRIVATE_DIR[1024] = PRIVATE_DIR;
+static char *dyn_LOCKDIR;
+
+const char *get_dyn_LOCKDIR(void)
+{
+ if (dyn_LOCKDIR == NULL) {
+ return LOCKDIR;
+ }
+ return dyn_LOCKDIR;
+}
+
+const char *set_dyn_LOCKDIR(const char *newpath)
+{
+ if (dyn_LOCKDIR) {
+ SAFE_FREE(dyn_LOCKDIR);
+ }
+ dyn_LOCKDIR = SMB_STRDUP(newpath);
+ return dyn_LOCKDIR;
+}
+
+static char *dyn_PIDDIR;
+
+const char *get_dyn_PIDDIR(void)
+{
+ if (dyn_PIDDIR == NULL) {
+ return PIDDIR;
+ }
+ return dyn_PIDDIR;
+}
+const char *set_dyn_PIDDIR(const char *newpath)
+{
+ if (dyn_PIDDIR) {
+ SAFE_FREE(dyn_PIDDIR);
+ }
+ dyn_PIDDIR = SMB_STRDUP(newpath);
+ return dyn_PIDDIR;
+}
+
+static char *dyn_SMB_PASSWD_FILE;
+
+const char *get_dyn_SMB_PASSWD_FILE(void)
+{
+ if (dyn_SMB_PASSWD_FILE == NULL) {
+ return SMB_PASSWD_FILE;
+ }
+ return dyn_SMB_PASSWD_FILE;
+}
+
+const char *set_dyn_SMB_PASSWD_FILE(const char *newpath)
+{
+ if (dyn_SMB_PASSWD_FILE) {
+ SAFE_FREE(dyn_SMB_PASSWD_FILE);
+ }
+ dyn_SMB_PASSWD_FILE = SMB_STRDUP(newpath);
+ return dyn_SMB_PASSWD_FILE;
+}
+
+static char *dyn_PRIVATE_DIR;
+
+const char *get_dyn_PRIVATE_DIR(void)
+{
+ if (dyn_PRIVATE_DIR == NULL) {
+ return PRIVATE_DIR;
+ }
+ return dyn_PRIVATE_DIR;
+}
+
+const char *set_dyn_PRIVATE_DIR(const char *newpath)
+{
+ if (dyn_PRIVATE_DIR) {
+ SAFE_FREE(dyn_PRIVATE_DIR);
+ }
+ dyn_PRIVATE_DIR = SMB_STRDUP(newpath);
+ return dyn_PRIVATE_DIR;
+}
+#endif
/* In non-FHS mode, these should be configurable using 'lock dir =';
but in FHS mode, they are their own directory. Implement as wrapper
functions so that everything can still be kept in dynconfig.c.
*/
-char *dyn_STATEDIR(void)
+const char *get_dyn_STATEDIR(void)
{
#ifdef FHS_COMPATIBLE
return STATEDIR;
#endif
}
-char *dyn_CACHEDIR(void)
+const char *get_dyn_CACHEDIR(void)
{
#ifdef FHS_COMPATIBLE
return CACHEDIR;
* @brief Exported global configurations.
**/
-extern char const *dyn_SBINDIR,
- *dyn_BINDIR,
- *dyn_SWATDIR;
+#if 0
+const char *get_dyn_SBINDIR(void);
+const char *get_dyn_BINDIR(void);
+const char *get_dyn_SWATDIR(void);
extern char dyn_CONFIGFILE[1024];
extern char dyn_LOGFILEBASE[1024], dyn_LMHOSTSFILE[1024];
extern char dyn_PIDDIR[1024];
extern char dyn_SMB_PASSWD_FILE[1024];
extern char dyn_PRIVATE_DIR[1024];
+#endif
-char *dyn_STATEDIR(void);
-char *dyn_CACHEDIR(void);
+const char *get_dyn_SBINDIR(void);
+const char *set_dyn_SBINDIR(const char *newpath);
+
+const char *get_dyn_BINDIR(void);
+const char *set_dyn_BINDIR(const char *newpath);
+
+const char *get_dyn_SWATDIR(void);
+const char *set_dyn_SWATDIR(const char *newpath);
+
+const char *get_dyn_CONFIGFILE(void);
+const char *set_dyn_CONFIGFILE(const char *newpath);
+
+const char *get_dyn_dyn_LOGFILEBASE(void);
+const char *set_dyn_dyn_LOGFILEBASE(const char *newpath);
+
+const char *get_dyn_LMHOSTSFILE(void);
+const char *set_dyn_LMHOSTSFILE(const char *newpath);
+
+const char *get_dyn_CODEPAGEDIR(void);
+const char *set_dyn_CODEPAGEDIR(const char *newpath);
+
+const char *get_dyn_LIBDIR(void);
+const char *set_dyn_LIBDIR(const char *newpath);
+
+const char *get_dyn_SHLIBEXT(void);
+const char *set_dyn_SHLIBEXT(const char *newpath);
+
+const char *get_dyn_LOCKDIR(void);
+const char *set_dyn_LOCKDIR(const char *newpath);
+
+const char *get_dyn_PIDDIR(void);
+const char *set_dyn_PIDDIR(const char *newpath);
+
+const char *get_dyn_SMB_PASSWD_FILE(void);
+const char *set_dyn_SMB_PASSWD_FILE(const char *newpath);
+
+const char *get_dyn_PRIVATE_DIR(void);
+const char *set_dyn_PRIVATE_DIR(const char *newpath);
+
+const char *get_dyn_STATEDIR(void);
+const char *get_dyn_CACHEDIR(void);
* line by the -l option but the "log file" option is not set
* in smb.conf.
*/
- if (asprintf(&logbase, "%s", dyn_LOGFILEBASE) < 0) {
+ if (asprintf(&logbase, "%s", get_dyn_LOGFILEBASE()) < 0) {
return;
}
}
modulesdir = talloc_strdup(ldb, getenv("LD_LDB_MODULE_PATH"));
} else {
#ifdef _SAMBA_BUILD_
- modulesdir = talloc_asprintf(ldb, "%s/ldb", dyn_MODULESDIR);
+ modulesdir = talloc_asprintf(ldb, "%s/ldb", get_dyn_LIBDIR());
#else
modulesdir = talloc_strdup(ldb, MODULESDIR);
#endif
{
int fd;
char buf[20];
- char *short_configfile;
+ const char *short_configfile;
char *name;
char *pidFile;
pid_t pid;
/* Add a suffix to the program name if this is a process with a
* none default configuration file name. */
- if (strcmp( CONFIGFILE, dyn_CONFIGFILE) == 0) {
+ if (strcmp( CONFIGFILE, get_dyn_CONFIGFILE()) == 0) {
name = SMB_STRDUP(program_name);
} else {
- short_configfile = strrchr( dyn_CONFIGFILE, '/');
+ short_configfile = strrchr( get_dyn_CONFIGFILE(), '/');
if (short_configfile == NULL) {
/* conf file in current directory */
- short_configfile = dyn_CONFIGFILE;
+ short_configfile = get_dyn_CONFIGFILE();
} else {
/* full/relative path provided */
short_configfile++;
{
if (reason == POPT_CALLBACK_REASON_PRE) {
- set_logfile(con, dyn_LOGFILEBASE);
+ set_logfile(con, get_dyn_LOGFILEBASE());
return;
}
case 's':
if (arg) {
- strlcpy(dyn_CONFIGFILE, arg,sizeof(dyn_CONFIGFILE));
+ set_dyn_CONFIGFILE(arg);
}
break;
if (arg) {
set_logfile(con, arg);
override_logfile = True;
- snprintf(dyn_LOGFILEBASE, sizeof(dyn_LOGFILEBASE), "%s", arg);
+ set_dyn_LOGFILEBASE(arg);
}
break;
switch (opt->val) {
case DYN_SBINDIR:
if (arg) {
- dyn_SBINDIR = SMB_STRDUP(arg);
+ set_dyn_SBINDIR(arg);
}
break;
case DYN_BINDIR:
if (arg) {
- dyn_BINDIR = SMB_STRDUP(arg);
+ set_dyn_BINDIR(arg);
}
break;
case DYN_SWATDIR:
if (arg) {
- dyn_SWATDIR = SMB_STRDUP(arg);
+ set_dyn_SWATDIR(arg);
}
break;
case DYN_LMHOSTSFILE:
if (arg) {
- strlcpy(dyn_LMHOSTSFILE, arg,sizeof(dyn_LMHOSTSFILE));
+ set_dyn_LMHOSTSFILE(arg);
}
break;
case DYN_LIBDIR:
if (arg) {
- strlcpy(dyn_LIBDIR, arg,sizeof(dyn_LIBDIR));
+ set_dyn_LIBDIR(arg);
}
break;
case DYN_SHLIBEXT:
if (arg) {
- fstrcpy(dyn_SHLIBEXT, arg);
+ set_dyn_SHLIBEXT(arg);
}
break;
case DYN_LOCKDIR:
if (arg) {
- strlcpy(dyn_LOCKDIR, arg,sizeof(dyn_LOCKDIR));
+ set_dyn_LOCKDIR(arg);
}
break;
case DYN_PIDDIR:
if (arg) {
- strlcpy(dyn_PIDDIR, arg,sizeof(dyn_PIDDIR));
+ set_dyn_PIDDIR(arg);
}
break;
case DYN_SMB_PASSWD_FILE:
if (arg) {
- strlcpy(dyn_SMB_PASSWD_FILE, arg,sizeof(dyn_SMB_PASSWD_FILE));
+ set_dyn_SMB_PASSWD_FILE(arg);
}
break;
case DYN_PRIVATE_DIR:
if (arg) {
- strlcpy(dyn_PRIVATE_DIR, arg, sizeof(dyn_PRIVATE_DIR));
+ set_dyn_PRIVATE_DIR(arg);
}
break;
char *lib_path(const char *name)
{
- return talloc_asprintf(talloc_tos(), "%s/%s", dyn_LIBDIR, name);
+ return talloc_asprintf(talloc_tos(), "%s/%s", get_dyn_LIBDIR(), name);
}
/**
char *data_path(const char *name)
{
- return talloc_asprintf(talloc_tos(), "%s/%s", dyn_CODEPAGEDIR, name);
+ return talloc_asprintf(talloc_tos(), "%s/%s", get_dyn_CODEPAGEDIR(), name);
}
/*****************************************************************
char *state_path(const char *name)
{
- return xx_path(name, dyn_STATEDIR());
+ return xx_path(name, get_dyn_STATEDIR());
}
/**
* @brief Returns the platform specific shared library extension.
*
- * @retval Pointer to a static #fstring containing the extension.
+ * @retval Pointer to a const char * containing the extension.
**/
const char *shlib_ext(void)
{
- return dyn_SHLIBEXT;
+ return get_dyn_SHLIBEXT();
}
/*******************************************************************
if (!conf_loaded) {
/*
- * Well, if that failed, try the dyn_CONFIGFILE
+ * Well, if that failed, try the get_dyn_CONFIGFILE
* Which points to the standard locn, and if that
* fails, silently ignore it and use the internal
* defaults ...
*/
- if (!lp_load(dyn_CONFIGFILE, True, False, False, False)) {
+ if (!lp_load(get_dyn_CONFIGFILE(), True, False, False, False)) {
DEBUG(5, ("Could not load config file: %s\n",
- dyn_CONFIGFILE));
+ get_dyn_CONFIGFILE()));
} else if (home) {
char *conf;
/*
"Attempting lmhosts lookup for name %s<0x%x>\n",
name, name_type));
- fp = startlmhosts(dyn_LMHOSTSFILE);
+ fp = startlmhosts(get_dyn_LMHOSTSFILE());
if ( fp == NULL )
return NT_STATUS_NO_SUCH_FILE;
if ( lp_loaded() ) {
const char *fname = lp_configfile();
- if (file_exist(fname,NULL) && !strcsequal(fname,dyn_CONFIGFILE)) {
- strlcpy(dyn_CONFIGFILE,fname,sizeof(dyn_CONFIGFILE));
+ if (file_exist(fname,NULL) && !strcsequal(fname,get_dyn_CONFIGFILE())) {
+ set_dyn_CONFIGFILE(fname);
test = False;
}
}
if ( test && !lp_file_list_changed() )
return(True);
- ret = lp_load( dyn_CONFIGFILE, True , False, False, True);
+ ret = lp_load(get_dyn_CONFIGFILE(), True , False, False, True);
/* perhaps the config filename is now set */
if ( !test ) {
static bool no_process_group;
static bool log_stdout;
poptContext pc;
- static char *p_lmhosts = dyn_LMHOSTSFILE;
+ char *p_lmhosts = NULL;
int opt;
enum {
OPT_DAEMON = 1000,
if (!override_logfile) {
char *logfile = NULL;
- if (asprintf(&logfile, "%s/log.nmbd", dyn_LOGFILEBASE) < 0) {
+ if (asprintf(&logfile, "%s/log.nmbd", get_dyn_LOGFILEBASE()) < 0) {
exit(1);
}
lp_set_logfile(logfile);
}
/* Load in any static local names. */
- load_lmhosts_file(p_lmhosts);
- DEBUG(3,("Loaded hosts file %s\n", p_lmhosts));
+ if (p_lmhosts) {
+ set_dyn_LMHOSTSFILE(p_lmhosts);
+ }
+ load_lmhosts_file(get_dyn_LMHOSTSFILE());
+ DEBUG(3,("Loaded hosts file %s\n", get_dyn_LMHOSTSFILE()));
/* If we are acting as a WINS server, initialise data structures. */
if( !initialise_wins() ) {
}
}
- if (asprintf(&fname, "%s/%s", dyn_STATEDIR(), WINS_LIST) < 0) {
+ if (asprintf(&fname, "%s/%s", get_dyn_STATEDIR(), WINS_LIST) < 0) {
goto err_exit;
}
/* This is safe as the 0 length means "don't expand". */
/* Samba client initialisation */
load_case_tables();
- if (!lp_load(dyn_CONFIGFILE, True, False, False, True)) {
+ if (!lp_load(get_dyn_CONFIGFILE(), True, False, False, True)) {
d_fprintf(stderr, "wbinfo: error opening config file %s. Error was %s\n",
- dyn_CONFIGFILE, strerror(errno));
+ get_dyn_CONFIGFILE(), strerror(errno));
exit(1);
}
TimeInit();
setup_logging("nss_wins",False);
load_case_tables();
- lp_load(dyn_CONFIGFILE,True,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
load_interfaces();
}
/* default configuration file location */
- char *servicesf = dyn_CONFIGFILE;
+ const char *servicesf = get_dyn_CONFIGFILE();
/* syslogging function for errors and other information */
int set_ctrl( int flags, int argc, const char **argv )
{
int i = 0;
- const char *service_file = dyn_CONFIGFILE;
+ const char *service_file = get_dyn_CONFIGFILE();
unsigned int ctrl;
ctrl = SMB_DEFAULTS; /* the default selection of options */
DEBUG(3, ("Initialising global parameters\n"));
- string_set(&Globals.szSMBPasswdFile, dyn_SMB_PASSWD_FILE);
- string_set(&Globals.szPrivateDir, dyn_PRIVATE_DIR);
+ string_set(&Globals.szSMBPasswdFile, get_dyn_SMB_PASSWD_FILE());
+ string_set(&Globals.szPrivateDir, get_dyn_PRIVATE_DIR());
/* use the new 'hash2' method by default, with a prefix of 1 */
string_set(&Globals.szManglingMethod, "hash2");
string_set(&Globals.szWorkgroup, lp_workgroup());
string_set(&Globals.szPasswdProgram, "");
- string_set(&Globals.szPidDir, dyn_PIDDIR);
- string_set(&Globals.szLockDir, dyn_LOCKDIR);
+ string_set(&Globals.szPidDir, get_dyn_PIDDIR());
+ string_set(&Globals.szLockDir, get_dyn_LOCKDIR());
string_set(&Globals.szSocketAddress, "0.0.0.0");
if (asprintf(&s, "Samba %s", SAMBA_VERSION_STRING) < 0) {
Globals.bASUSupport = False;
/* User defined shares. */
- if (asprintf(&s, "%s/usershares", dyn_STATEDIR()) < 0) {
+ if (asprintf(&s, "%s/usershares", get_dyn_STATEDIR()) < 0) {
smb_panic("init_globals: ENOMEM");
}
string_set(&Globals.szUsersharePath, s);
/* save the path for later */
if (!location) {
- if (asprintf(&tdbfile, "%s/%s", dyn_STATEDIR(), PASSDB_FILE_NAME) < 0) {
+ if (asprintf(&tdbfile, "%s/%s", get_dyn_STATEDIR(), PASSDB_FILE_NAME) < 0) {
return NT_STATUS_NO_MEMORY;
}
pfile = tdbfile;
char *dump_name = NULL;
/* Also capture received data */
if (asprintf(&dump_name, "%s/reply_%s_%d",
- dyn_LOGFILEBASE, cli->pipe_name,
+ get_dyn_LOGFILEBASE(), cli->pipe_name,
op_num) > 0) {
prs_dump(dump_name, op_num, out_data);
SAFE_FREE(dump_name);
command = talloc_asprintf(p->mem_ctx,
"%s \"%s\" \"%s\" \"%s\" \"%s\" %d",
lp_change_share_cmd(),
- dyn_CONFIGFILE,
+ get_dyn_CONFIGFILE(),
share_name,
path,
comment ? comment : "",
command = talloc_asprintf(ctx,
"%s \"%s\" \"%s\" \"%s\" \"%s\" %d",
lp_add_share_cmd(),
- dyn_CONFIGFILE,
+ get_dyn_CONFIGFILE(),
share_name,
path,
comment ? comment : "",
command = talloc_asprintf(ctx,
"%s \"%s\" \"%s\"",
lp_delete_share_cmd(),
- dyn_CONFIGFILE,
+ get_dyn_CONFIGFILE(),
lp_servicename(snum));
if (!command) {
return WERR_NOMEM;
/* Load smb.conf file */
- if (!lp_load(dyn_CONFIGFILE,True,False,False,True))
- fprintf(stderr, "Can't load %s\n", dyn_CONFIGFILE);
+ if (!lp_load(get_dyn_CONFIGFILE(),True,False,False,True))
+ fprintf(stderr, "Can't load %s\n", get_dyn_CONFIGFILE());
if ( strlen(new_workgroup) != 0 )
set_global_myworkgroup( new_workgroup );
/* attempt the file open */
- filepath = talloc_asprintf(info, "%s/%s/%s", dyn_LIBDIR,
+ filepath = talloc_asprintf(info, "%s/%s/%s", get_dyn_LIBDIR(),
SVCCTL_SCRIPT_DIR, servicename);
if (!filepath) {
TALLOC_FREE(info);
if ( strequal( name, builtin_svcs[i].servicename ) ) {
char *pstr = NULL;
if (asprintf(&pstr, "%s/%s/%s",
- dyn_LIBDIR, SVCCTL_SCRIPT_DIR,
+ get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR,
builtin_svcs[i].daemon) > 0) {
init_unistr2( &ipath, pstr, UNI_STR_TERMINATE );
SAFE_FREE(pstr);
char *pstr = NULL;
struct rcinit_file_information *init_info = NULL;
- if (asprintf(&pstr, "%s/%s/%s",dyn_LIBDIR,
+ if (asprintf(&pstr, "%s/%s/%s",get_dyn_LIBDIR(),
SVCCTL_SCRIPT_DIR, name) > 0) {
init_unistr2( &ipath, pstr, UNI_STR_TERMINATE );
SAFE_FREE(pstr);
int ret, fd;
if (asprintf(&command, "%s/%s/%s stop",
- dyn_LIBDIR, SVCCTL_SCRIPT_DIR, service) < 0) {
+ get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, service) < 0) {
return WERR_NOMEM;
}
int ret, fd;
if (asprintf(&command, "%s/%s/%s start",
- dyn_LIBDIR, SVCCTL_SCRIPT_DIR, service) < 0) {
+ get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, service) < 0) {
return WERR_NOMEM;
}
int ret, fd;
if (asprintf(&command, "%s/%s/%s status",
- dyn_LIBDIR, SVCCTL_SCRIPT_DIR, service) < 0) {
+ get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, service) < 0) {
return WERR_NOMEM;
}
}
asprintf(&command, "%s \"%s\" \"%s\" \"%s\" \"%s\"",
- lp_add_share_cmd(), dyn_CONFIGFILE, sharename, pathname, comment);
+ lp_add_share_cmd(), get_dyn_CONFIGFILE(), sharename, pathname, comment);
if (command) {
DEBUG(10,("api_RNetShareAdd: Running [%s]\n", command ));
if (lp_loaded()) {
char *fname = lp_configfile();
if (file_exist(fname, NULL) &&
- !strcsequal(fname, dyn_CONFIGFILE)) {
- strlcpy(dyn_CONFIGFILE, fname,sizeof(dyn_CONFIGFILE));
+ !strcsequal(fname, get_dyn_CONFIGFILE())) {
+ set_dyn_CONFIGFILE(fname);
test = False;
}
}
lp_killunused(conn_snum_used);
- ret = lp_load(dyn_CONFIGFILE, False, False, True, True);
+ ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True);
reload_printers();
argc -= NSERVERS;
argv += NSERVERS;
- lp_load(dyn_CONFIGFILE,True,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
load_interfaces();
if (getenv("USER")) {
argc -= 4;
argv += 4;
- lp_load(dyn_CONFIGFILE,True,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
load_interfaces();
if (getenv("USER")) {
argc -= 1;
argv += 1;
- lp_load(dyn_CONFIGFILE,True,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
load_interfaces();
if (getenv("USER")) {
setup_logging(argv[0],True);
- lp_load(dyn_CONFIGFILE,False,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),False,False,False,True);
if (!(evt_ctx = event_context_init(NULL)) ||
!(msg_ctx = messaging_init(NULL, server_id_self(), evt_ctx))) {
poptFreeContext(pc);
/* Load configuration */
- lp_load(dyn_CONFIGFILE, False, False, True, True);
+ lp_load(get_dyn_CONFIGFILE(), False, False, True, True);
setup_logging("pdbtest", True);
if (backend == NULL) {
load_case_tables();
- lp_load(dyn_CONFIGFILE,True,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
load_interfaces();
if (argc < 2) {
if (lp_loaded()) {
const char *fname = lp_configfile();
if (file_exist(fname, NULL) &&
- !strcsequal(fname, dyn_CONFIGFILE)) {
- strlcpy(dyn_CONFIGFILE, fname, sizeof(dyn_CONFIGFILE));
+ !strcsequal(fname, get_dyn_CONFIGFILE())) {
+ set_dyn_CONFIGFILE(fname);
test = False;
}
}
lp_killunused(conn_snum_used);
- ret = lp_load(dyn_CONFIGFILE, False, False, True, True);
+ ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True);
/* perhaps the config filename is now set */
if (!test)
opt_debug = 0; /* todo set this from getopts */
- lp_load( dyn_CONFIGFILE, True, False, False, True);
+ lp_load(get_dyn_CONFIGFILE(), True, False, False, True);
exename = argv[0];
* set by cmdline arg or remain default (0)
*/
AllowDebugChange = False;
- lp_load(dyn_CONFIGFILE,True,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
argv_new = (const char **)poptGetArgs(pc);
if ( lp_security() == SEC_ADS && !*lp_realm()) {
d_fprintf(stderr, "realm must be set in in %s for ADS "
- "join to succeed.\n", dyn_CONFIGFILE);
+ "join to succeed.\n", get_dyn_CONFIGFILE());
return NT_STATUS_INVALID_PARAMETER;
}
if (strcmp(ads->config.realm, lp_realm()) != 0) {
d_fprintf(stderr, "realm of remote server (%s) and realm in %s "
"(%s) DO NOT match. Aborting join\n",
- ads->config.realm, dyn_CONFIGFILE, lp_realm());
+ ads->config.realm, get_dyn_CONFIGFILE(), lp_realm());
nt_status = NT_STATUS_INVALID_PARAMETER;
goto fail;
}
/* Check the short name of the domain */
if ( !strequal(lp_workgroup(), short_domain_name) ) {
- d_printf("The workgroup in %s does not match the short\n", dyn_CONFIGFILE);
+ d_printf("The workgroup in %s does not match the short\n", get_dyn_CONFIGFILE());
d_printf("domain name obtained from the server.\n");
d_printf("Using the name [%s] from the server.\n", short_domain_name);
d_printf("You should set \"workgroup = %s\" in %s.\n",
- short_domain_name, dyn_CONFIGFILE);
+ short_domain_name, get_dyn_CONFIGFILE());
}
d_printf("Using short domain name -- %s\n", short_domain_name);
exit(1);
}
- if (!lp_load(dyn_CONFIGFILE,True,False,False,True)) {
+ if (!lp_load(get_dyn_CONFIGFILE(),True,False,False,True)) {
fprintf(stderr, "Can't load %s - run testparm to debug it\n",
- dyn_CONFIGFILE);
+ get_dyn_CONFIGFILE());
}
load_interfaces();
/* Samba client initialisation */
- if (!lp_load(dyn_CONFIGFILE, True, False, False, True)) {
+ if (!lp_load(get_dyn_CONFIGFILE(), True, False, False, True)) {
d_fprintf(stderr, "ntlm_auth: error opening config file %s. Error was %s\n",
- dyn_CONFIGFILE, strerror(errno));
+ get_dyn_CONFIGFILE(), strerror(errno));
exit(1);
}
if (user_name == NULL)
user_name = poptGetArg(pc);
- if (!lp_load(dyn_CONFIGFILE,True,False,False,True)) {
- fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
+ if (!lp_load(get_dyn_CONFIGFILE(),True,False,False,True)) {
+ fprintf(stderr, "Can't load %s - run testparm to debug it\n", get_dyn_CONFIGFILE());
exit(1);
}
load_case_tables();
- lp_load( dyn_CONFIGFILE, False, False, False, True );
+ lp_load( get_dyn_CONFIGFILE(), False, False, False, True );
/* check for initializing secrets.tdb first */
setlinebuf(stdout);
- lp_load(dyn_CONFIGFILE,True,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
load_interfaces();
pc = poptGetContext("smbcacls", argc, argv, long_options, 0);
if (argc <= 1)
usage(pc);
- lp_load(dyn_CONFIGFILE,False,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),False,False,False,True);
/* Need to invert sense of return code -- samba
* routines mostly return True==1 for success, but
fault_setup(NULL);
- lp_load(dyn_CONFIGFILE,True,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
load_interfaces();
pc = poptGetContext("smbcquotas", argc, argv, long_options, 0);
setup_logging(argv[0],True);
- configfile = dyn_CONFIGFILE;
+ configfile = get_dyn_CONFIGFILE();
if (argc < 2) {
fprintf(stderr,"smbfilter <desthost> <netbiosname>\n");
static int process_options(int argc, char **argv, int local_flags)
{
int ch;
- const char *configfile = dyn_CONFIGFILE;
+ const char *configfile = get_dyn_CONFIGFILE();
local_flags |= LOCAL_SET_PASSWORD;
while(poptGetNextOpt(pc) != -1);
poptFreeContext(pc);
- lp_load(dyn_CONFIGFILE,True,False,False,True);
+ lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
load_interfaces();
/* Parse command line args */
extern char *optarg;
extern int optind;
char *path;
+ TALLOC_CTX *frame = talloc_stackframe();
- lp_load(dyn_CONFIGFILE,1,0,0,1);
+ lp_load(get_dyn_CONFIGFILE(),1,0,0,1);
smbw_setup_shared();
while ((opt = getopt(argc, argv, "W:U:R:d:P:l:hL:")) != EOF) {
printf("%s\n", dent->d_name);
}
smbw_closedir(dir);
+ TALLOC_FREE(frame);
return 0;
}
Ucrit_addUid( nametouid(username) );
if (verbose) {
- d_printf("using configfile = %s\n", dyn_CONFIGFILE);
+ d_printf("using configfile = %s\n", get_dyn_CONFIGFILE());
}
- if (!lp_load(dyn_CONFIGFILE,False,False,False,True)) {
- fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
+ if (!lp_load(get_dyn_CONFIGFILE(),False,False,False,True)) {
+ fprintf(stderr, "Can't load %s - run testparm to debug it\n", get_dyn_CONFIGFILE());
ret = -1;
goto done;
}
int main(int argc, const char *argv[])
{
- const char *config_file = dyn_CONFIGFILE;
+ const char *config_file = get_dyn_CONFIGFILE();
int s;
static int silent_mode = False;
static int show_all_parameters = False;
return;
}
- if (asprintf(&binfile, "%s/smbd", dyn_SBINDIR) > 0) {
+ if (asprintf(&binfile, "%s/smbd", get_dyn_SBINDIR()) > 0) {
become_daemon(true, false);
execl(binfile, binfile, "-D", NULL);
}
return;
}
- if (asprintf(&binfile, "%s/nmbd", dyn_SBINDIR) > 0) {
+ if (asprintf(&binfile, "%s/nmbd", get_dyn_SBINDIR()) > 0) {
become_daemon(true, false);
execl(binfile, binfile, "-D", NULL);
}
return;
}
- if (asprintf(&binfile, "%s/winbindd", dyn_SBINDIR) > 0) {
+ if (asprintf(&binfile, "%s/winbindd", get_dyn_SBINDIR()) > 0) {
become_daemon(true, false);
execl(binfile, binfile, NULL);
}
static bool load_config(bool save_def)
{
lp_resetnumservices();
- return lp_load(dyn_CONFIGFILE,False,save_def,False,True);
+ return lp_load(get_dyn_CONFIGFILE(),False,save_def,False,True);
}
/****************************************************************************
FILE *f;
struct stat st;
- f = sys_fopen(dyn_CONFIGFILE,"w");
+ f = sys_fopen(get_dyn_CONFIGFILE(),"w");
if (!f) {
- printf(_("failed to open %s for writing"), dyn_CONFIGFILE);
+ printf(_("failed to open %s for writing"), get_dyn_CONFIGFILE());
printf("\n");
return 0;
}
#if defined HAVE_FCHMOD
fchmod(fileno(f), S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
#else
- chmod(dyn_CONFIGFILE, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
+ chmod(get_dyn_CONFIGFILE(), S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
#endif
}
lp_killunused(NULL);
if (!load_config(False)) {
- printf(_("Can't reload %s"), dyn_CONFIGFILE);
+ printf(_("Can't reload %s"), get_dyn_CONFIGFILE());
printf("\n");
return 0;
}
iNumNonAutoPrintServices = lp_numservices();
load_printers();
- cgi_setup(dyn_SWATDIR, !demo_mode);
+ cgi_setup(get_dyn_SWATDIR(), !demo_mode);
print_header();
cgi_load_variables();
- if (!file_exist(dyn_CONFIGFILE, NULL)) {
+ if (!file_exist(get_dyn_CONFIGFILE(), NULL)) {
have_read_access = True;
have_write_access = True;
} else {
/* check if the authenticated user has write access - if not then
don't show write options */
- have_write_access = (access(dyn_CONFIGFILE,W_OK) == 0);
+ have_write_access = (access(get_dyn_CONFIGFILE(),W_OK) == 0);
/* if the user doesn't have read access to smb.conf then
don't let them view it */
- have_read_access = (access(dyn_CONFIGFILE,R_OK) == 0);
+ have_read_access = (access(get_dyn_CONFIGFILE(),R_OK) == 0);
}
show_main_buttons();
DEBUG(0, ("WARNING: idmap backend uses obsolete"
" and deprecated 'idmap_' prefix.\n"
"Please replace 'idmap_%s' by '%s' in"
- " %s\n", q, q, dyn_CONFIGFILE));
+ " %s\n", q, q, get_dyn_CONFIGFILE()));
compat_backend = talloc_strdup(idmap_ctx, q);
} else {
compat_backend = talloc_strdup(idmap_ctx,
if (lp_loaded()) {
const char *fname = lp_configfile();
- if (file_exist(fname,NULL) && !strcsequal(fname,dyn_CONFIGFILE)) {
- strlcpy(dyn_CONFIGFILE,fname,sizeof(dyn_CONFIGFILE));
+ if (file_exist(fname,NULL) && !strcsequal(fname,get_dyn_CONFIGFILE())) {
+ set_dyn_CONFIGFILE(fname);
}
}
reopen_logs();
- ret = lp_load(dyn_CONFIGFILE,False,False,True,True);
+ ret = lp_load(get_dyn_CONFIGFILE(),False,False,True,True);
reopen_logs();
load_interfaces();
if (!override_logfile) {
char *logfile = NULL;
if (asprintf(&logfile,"%s/log.winbindd",
- dyn_LOGFILEBASE) > 0) {
+ get_dyn_LOGFILEBASE()) > 0) {
lp_set_logfile(logfile);
SAFE_FREE(logfile);
}
if (!override_logfile) {
char *logfile;
- if (asprintf(&logfile, "%s/log.winbindd-dc-connect", dyn_LOGFILEBASE) > 0) {
+ if (asprintf(&logfile, "%s/log.winbindd-dc-connect", get_dyn_LOGFILEBASE()) > 0) {
lp_set_logfile(logfile);
SAFE_FREE(logfile);
reopen_logs();
{
if (explicit_logfile != NULL) {
if (asprintf(&child->logfilename, "%s/log.winbindd-%s",
- dyn_LOGFILEBASE, explicit_logfile) < 0) {
+ get_dyn_LOGFILEBASE(), explicit_logfile) < 0) {
smb_panic("Internal error: asprintf failed");
}
} else if (domain != NULL) {
if (asprintf(&child->logfilename, "%s/log.wb-%s",
- dyn_LOGFILEBASE, domain->name) < 0) {
+ get_dyn_LOGFILEBASE(), domain->name) < 0) {
smb_panic("Internal error: asprintf failed");
}
} else {