diff options
-rw-r--r-- | source4/auth/auth.c | 2 | ||||
-rw-r--r-- | source4/auth/gensec/gensec.c | 2 | ||||
-rw-r--r-- | source4/build/smb_build/makefile.pm | 5 | ||||
-rw-r--r-- | source4/lib/tls/config.mk | 2 | ||||
-rw-r--r-- | source4/lib/util/config.mk | 2 | ||||
-rw-r--r-- | source4/lib/util/debug.c | 3 | ||||
-rw-r--r-- | source4/lib/util/fault.c | 7 | ||||
-rw-r--r-- | source4/lib/util/util.c | 158 | ||||
-rw-r--r-- | source4/lib/util/util.h | 3 | ||||
-rw-r--r-- | source4/param/config.mk | 1 | ||||
-rw-r--r-- | source4/param/loadparm.c | 8 | ||||
-rw-r--r-- | source4/param/util.c | 194 | ||||
-rw-r--r-- | source4/passdb/secrets.c | 1 |
13 files changed, 212 insertions, 176 deletions
diff --git a/source4/auth/auth.c b/source4/auth/auth.c index 8ca7c3ea5ca..b4a473a6904 100644 --- a/source4/auth/auth.c +++ b/source4/auth/auth.c @@ -282,7 +282,7 @@ NTSTATUS auth_register(const void *_ops) backends = realloc_p(backends, struct auth_backend, num_backends+1); if (!backends) { - smb_panic("out of memory in auth_register"); + return NT_STATUS_NO_MEMORY; } new_ops = smb_xmemdup(ops, sizeof(*ops)); diff --git a/source4/auth/gensec/gensec.c b/source4/auth/gensec/gensec.c index 0328d0dfea3..8dbf9fe2db3 100644 --- a/source4/auth/gensec/gensec.c +++ b/source4/auth/gensec/gensec.c @@ -1088,7 +1088,7 @@ NTSTATUS gensec_register(const struct gensec_security_ops *ops) struct gensec_security_ops *, gensec_num_backends+2); if (!generic_security_ops) { - smb_panic("out of memory (or failed to realloc referenced memory) in gensec_register"); + return NT_STATUS_NO_MEMORY; } generic_security_ops[gensec_num_backends] = discard_const(ops); diff --git a/source4/build/smb_build/makefile.pm b/source4/build/smb_build/makefile.pm index 03c172c38da..46345283cbf 100644 --- a/source4/build/smb_build/makefile.pm +++ b/source4/build/smb_build/makefile.pm @@ -424,10 +424,7 @@ sub PkgConfig($$) $link_name =~ s/^LIB//g; $link_name = lc($link_name); - if (not defined($ctx->{DESCRIPTION})) { - warn("$ctx->{NAME} has not DESCRIPTION set, not generating .pc file"); - return; - } + return if (not defined($ctx->{DESCRIPTION})); my $path = "$ctx->{BASEDIR}/$link_name.pc"; diff --git a/source4/lib/tls/config.mk b/source4/lib/tls/config.mk index 8e59bb33e5d..810dc17d2de 100644 --- a/source4/lib/tls/config.mk +++ b/source4/lib/tls/config.mk @@ -5,7 +5,7 @@ OBJ_FILES = \ tls.o \ tlscert.o REQUIRED_SUBSYSTEMS = \ - LIBTALLOC EXT_LIB_GNUTLS + LIBTALLOC EXT_LIB_GNUTLS LIBSAMBA-CONFIG # # End SUBSYSTEM LIBTLS ################################################ diff --git a/source4/lib/util/config.mk b/source4/lib/util/config.mk index 5aac2911523..c598d703c5c 100644 --- a/source4/lib/util/config.mk +++ b/source4/lib/util/config.mk @@ -33,7 +33,7 @@ OBJ_FILES = xfile.o \ module.o REQUIRED_SUBSYSTEMS = \ CHARSET LIBREPLACE LIBCRYPTO EXT_LIB_DL LIBTALLOC \ - SOCKET_WRAPPER LIBSAMBA-CONFIG \ + SOCKET_WRAPPER \ # for the base64 functions ldb diff --git a/source4/lib/util/debug.c b/source4/lib/util/debug.c index 2c40064b755..fa781c823a6 100644 --- a/source4/lib/util/debug.c +++ b/source4/lib/util/debug.c @@ -117,12 +117,13 @@ _PUBLIC_ void do_debug(const char *format, ...) _PRINTF_ATTRIBUTE(1,2) free(s); } +_PUBLIC_ const char *logfile = NULL; + /** reopen the log file (usually called because the log file name might have changed) */ _PUBLIC_ void reopen_logs(void) { - const char *logfile = lp_logfile(); char *fname = NULL; int old_fd = state.fd; diff --git a/source4/lib/util/fault.c b/source4/lib/util/fault.c index ff44b8a2921..8b447851dc0 100644 --- a/source4/lib/util/fault.c +++ b/source4/lib/util/fault.c @@ -109,18 +109,19 @@ _PUBLIC_ void call_backtrace(void) #endif } +_PUBLIC_ const char *panic_action = NULL; + /** Something really nasty happened - panic ! **/ _PUBLIC_ void smb_panic(const char *why) { - const char *cmd = lp_panic_action(); int result; - if (cmd && *cmd) { + if (panic_action && *panic_action) { char pidstr[20]; char cmdstring[200]; - safe_strcpy(cmdstring, cmd, sizeof(cmdstring)); + safe_strcpy(cmdstring, panic_action, sizeof(cmdstring)); snprintf(pidstr, sizeof(pidstr), "%u", getpid()); all_string_sub(cmdstring, "%PID%", pidstr, sizeof(cmdstring)); if (progname) { diff --git a/source4/lib/util/util.c b/source4/lib/util/util.c index a0890d5ba97..b7293c00923 100644 --- a/source4/lib/util/util.c +++ b/source4/lib/util/util.c @@ -23,7 +23,6 @@ */ #include "includes.h" -#include "dynconfig.h" #include "system/network.h" #include "system/iconv.h" #include "system/filesys.h" @@ -268,30 +267,6 @@ _PUBLIC_ void safe_free(void *p) /** - see if a string matches either our primary or one of our secondary - netbios aliases. do a case insensitive match -*/ -_PUBLIC_ BOOL is_myname(const char *name) -{ - const char **aliases; - int i; - - if (strcasecmp(name, lp_netbios_name()) == 0) { - return True; - } - - aliases = lp_netbios_aliases(); - for (i=0; aliases && aliases[i]; i++) { - if (strcasecmp(name, aliases[i]) == 0) { - return True; - } - } - - return False; -} - - -/** Get my own name, return in malloc'ed storage. **/ @@ -585,139 +560,6 @@ _PUBLIC_ void *memdup(const void *p, size_t size) } /** - A useful function for returning a path in the Samba lock directory. -**/ -_PUBLIC_ char *lock_path(TALLOC_CTX* mem_ctx, const char *name) -{ - char *fname, *dname; - if (name == NULL) { - return NULL; - } - if (name[0] == 0 || name[0] == '/' || strstr(name, ":/")) { - return talloc_strdup(mem_ctx, name); - } - - dname = talloc_strdup(mem_ctx, lp_lockdir()); - trim_string(dname,"","/"); - - if (!directory_exist(dname)) { - mkdir(dname,0755); - } - - fname = talloc_asprintf(mem_ctx, "%s/%s", dname, name); - - talloc_free(dname); - - return fname; -} - - -/** - A useful function for returning a path in the Samba piddir directory. -**/ -static char *pid_path(TALLOC_CTX* mem_ctx, const char *name) -{ - char *fname, *dname; - - dname = talloc_strdup(mem_ctx, lp_piddir()); - trim_string(dname,"","/"); - - if (!directory_exist(dname)) { - mkdir(dname,0755); - } - - fname = talloc_asprintf(mem_ctx, "%s/%s", dname, name); - - talloc_free(dname); - - return fname; -} - - -/** - * @brief Returns an absolute path to a file in the Samba lib directory. - * - * @param name File to find, relative to DATADIR. - * - * @retval Pointer to a talloc'ed string containing the full path. - **/ - -_PUBLIC_ char *data_path(TALLOC_CTX* mem_ctx, const char *name) -{ - char *fname; - fname = talloc_asprintf(mem_ctx, "%s/%s", dyn_DATADIR, name); - return fname; -} - -/** - * @brief Returns an absolute path to a file in the Samba private directory. - * - * @param name File to find, relative to PRIVATEDIR. - * if name is not relative, then use it as-is - * - * @retval Pointer to a talloc'ed string containing the full path. - **/ -_PUBLIC_ char *private_path(TALLOC_CTX* mem_ctx, const char *name) -{ - char *fname; - if (name == NULL) { - return NULL; - } - if (name[0] == 0 || name[0] == '/' || strstr(name, ":/")) { - return talloc_strdup(mem_ctx, name); - } - fname = talloc_asprintf(mem_ctx, "%s/%s", lp_private_dir(), name); - return fname; -} - -/** - return a path in the smbd.tmp directory, where all temporary file - for smbd go. If NULL is passed for name then return the directory - path itself -*/ -_PUBLIC_ char *smbd_tmp_path(TALLOC_CTX *mem_ctx, const char *name) -{ - char *fname, *dname; - - dname = pid_path(mem_ctx, "smbd.tmp"); - if (!directory_exist(dname)) { - mkdir(dname,0755); - } - - if (name == NULL) { - return dname; - } - - fname = talloc_asprintf(mem_ctx, "%s/%s", dname, name); - talloc_free(dname); - - return fname; -} - -static char *modules_path(TALLOC_CTX* mem_ctx, const char *name) -{ - return talloc_asprintf(mem_ctx, "%s/%s", dyn_MODULESDIR, name); -} - -/** - * Load the initialization functions from DSO files for a specific subsystem. - * - * Will return an array of function pointers to initialization functions - */ - -_PUBLIC_ init_module_fn *load_samba_modules(TALLOC_CTX *mem_ctx, const char *subsystem) -{ - char *path = modules_path(mem_ctx, subsystem); - init_module_fn *ret; - - ret = load_modules(mem_ctx, path); - - talloc_free(path); - - return ret; -} - -/** * Write a password to the log file. * * @note Only actually does something if DEBUG_PASSWORD was defined during diff --git a/source4/lib/util/util.h b/source4/lib/util/util.h index 73fb675e281..1b48bafc942 100644 --- a/source4/lib/util/util.h +++ b/source4/lib/util/util.h @@ -36,6 +36,9 @@ struct substitute_context; struct asn1_data; struct smbsrv_tcon; +extern const char *logfile; +extern const char *panic_action; + #include "util/xfile.h" #include "util/debug.h" #include "util/mutex.h" diff --git a/source4/param/config.mk b/source4/param/config.mk index 4ef685a35be..b04dbd3e123 100644 --- a/source4/param/config.mk +++ b/source4/param/config.mk @@ -5,6 +5,7 @@ SO_VERSION = 0 OBJ_FILES = loadparm.o \ params.o \ generic.o \ + util.o \ ../lib/version.o REQUIRED_SUBSYSTEMS = LIBSAMBA-UTIL DYNCONFIG PUBLIC_PROTO_HEADER = proto.h diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c index 931eed626fd..21d1e0d57db 100644 --- a/source4/param/loadparm.c +++ b/source4/param/loadparm.c @@ -103,7 +103,6 @@ typedef struct char *szServerString; char *szAutoServices; char *szPasswdChat; - char *szLogFile; char *szConfigFile; char *szSAM_URL; char *szSPOOLSS_URL; @@ -124,7 +123,6 @@ typedef struct char *szNetbiosScope; char *szDomainOtherSIDs; char **szNameResolveOrder; - char *szPanicAction; char **dcerpc_ep_servers; char **server_services; char *ntptr_providor; @@ -431,7 +429,7 @@ static struct parm_struct parm_table[] = { {"log level", P_INTEGER, P_GLOBAL, &DEBUGLEVEL, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"debuglevel", P_INTEGER, P_GLOBAL, &DEBUGLEVEL, NULL, NULL, FLAG_HIDE}, - {"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"log file", P_STRING, P_GLOBAL, &logfile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Protocol Options", P_SEP, P_SEPARATOR}, @@ -544,7 +542,7 @@ static struct parm_struct parm_table[] = { {"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_SHARE }, {"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_SHARE}, - {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"panic action", P_STRING, P_GLOBAL, &panic_action, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE}, {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, @@ -819,7 +817,6 @@ _PUBLIC_ FN_GLOBAL_STRING(lp_tls_cafile, &Globals.tls_cafile) _PUBLIC_ FN_GLOBAL_STRING(lp_tls_crlfile, &Globals.tls_crlfile) _PUBLIC_ FN_GLOBAL_STRING(lp_unix_charset, &Globals.unix_charset) _PUBLIC_ FN_GLOBAL_STRING(lp_display_charset, &Globals.display_charset) -_PUBLIC_ FN_GLOBAL_STRING(lp_logfile, &Globals.szLogFile) _PUBLIC_ FN_GLOBAL_STRING(lp_configfile, &Globals.szConfigFile) _PUBLIC_ FN_GLOBAL_STRING(lp_sam_url, &Globals.szSAM_URL) _PUBLIC_ FN_GLOBAL_STRING(lp_spoolss_url, &Globals.szSPOOLSS_URL) @@ -850,7 +847,6 @@ _PUBLIC_ FN_GLOBAL_LIST(lp_wins_server_list, &Globals.szWINSservers) _PUBLIC_ FN_GLOBAL_LIST(lp_interfaces, &Globals.szInterfaces) _PUBLIC_ FN_GLOBAL_STRING(lp_socket_address, &Globals.szSocketAddress) _PUBLIC_ FN_GLOBAL_LIST(lp_netbios_aliases, &Globals.szNetbiosAliases) -_PUBLIC_ FN_GLOBAL_STRING(lp_panic_action, &Globals.szPanicAction) _PUBLIC_ FN_GLOBAL_BOOL(lp_disable_netbios, &Globals.bDisableNetbios) _PUBLIC_ FN_GLOBAL_BOOL(lp_wins_support, &Globals.bWINSsupport) diff --git a/source4/param/util.c b/source4/param/util.c new file mode 100644 index 00000000000..85a0587827b --- /dev/null +++ b/source4/param/util.c @@ -0,0 +1,194 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + Copyright (C) Andrew Tridgell 1992-1998 + Copyright (C) Jeremy Allison 2001-2002 + Copyright (C) Simo Sorce 2001 + Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003. + Copyright (C) James J Myers 2003 + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "dynconfig.h" +#include "system/network.h" +#include "system/iconv.h" +#include "system/filesys.h" + +/** + * @file + * @brief Misc utility functions + */ + + +/** + see if a string matches either our primary or one of our secondary + netbios aliases. do a case insensitive match +*/ +_PUBLIC_ BOOL is_myname(const char *name) +{ + const char **aliases; + int i; + + if (strcasecmp(name, lp_netbios_name()) == 0) { + return True; + } + + aliases = lp_netbios_aliases(); + for (i=0; aliases && aliases[i]; i++) { + if (strcasecmp(name, aliases[i]) == 0) { + return True; + } + } + + return False; +} + + +/** + A useful function for returning a path in the Samba lock directory. +**/ +_PUBLIC_ char *lock_path(TALLOC_CTX* mem_ctx, const char *name) +{ + char *fname, *dname; + if (name == NULL) { + return NULL; + } + if (name[0] == 0 || name[0] == '/' || strstr(name, ":/")) { + return talloc_strdup(mem_ctx, name); + } + + dname = talloc_strdup(mem_ctx, lp_lockdir()); + trim_string(dname,"","/"); + + if (!directory_exist(dname)) { + mkdir(dname,0755); + } + + fname = talloc_asprintf(mem_ctx, "%s/%s", dname, name); + + talloc_free(dname); + + return fname; +} + + +/** + A useful function for returning a path in the Samba piddir directory. +**/ +static char *pid_path(TALLOC_CTX* mem_ctx, const char *name) +{ + char *fname, *dname; + + dname = talloc_strdup(mem_ctx, lp_piddir()); + trim_string(dname,"","/"); + + if (!directory_exist(dname)) { + mkdir(dname,0755); + } + + fname = talloc_asprintf(mem_ctx, "%s/%s", dname, name); + + talloc_free(dname); + + return fname; +} + + +/** + * @brief Returns an absolute path to a file in the Samba lib directory. + * + * @param name File to find, relative to DATADIR. + * + * @retval Pointer to a talloc'ed string containing the full path. + **/ + +_PUBLIC_ char *data_path(TALLOC_CTX* mem_ctx, const char *name) +{ + char *fname; + fname = talloc_asprintf(mem_ctx, "%s/%s", dyn_DATADIR, name); + return fname; +} + +/** + * @brief Returns an absolute path to a file in the Samba private directory. + * + * @param name File to find, relative to PRIVATEDIR. + * if name is not relative, then use it as-is + * + * @retval Pointer to a talloc'ed string containing the full path. + **/ +_PUBLIC_ char *private_path(TALLOC_CTX* mem_ctx, const char *name) +{ + char *fname; + if (name == NULL) { + return NULL; + } + if (name[0] == 0 || name[0] == '/' || strstr(name, ":/")) { + return talloc_strdup(mem_ctx, name); + } + fname = talloc_asprintf(mem_ctx, "%s/%s", lp_private_dir(), name); + return fname; +} + +/** + return a path in the smbd.tmp directory, where all temporary file + for smbd go. If NULL is passed for name then return the directory + path itself +*/ +_PUBLIC_ char *smbd_tmp_path(TALLOC_CTX *mem_ctx, const char *name) +{ + char *fname, *dname; + + dname = pid_path(mem_ctx, "smbd.tmp"); + if (!directory_exist(dname)) { + mkdir(dname,0755); + } + + if (name == NULL) { + return dname; + } + + fname = talloc_asprintf(mem_ctx, "%s/%s", dname, name); + talloc_free(dname); + + return fname; +} + +static char *modules_path(TALLOC_CTX* mem_ctx, const char *name) +{ + return talloc_asprintf(mem_ctx, "%s/%s", dyn_MODULESDIR, name); +} + +/** + * Load the initialization functions from DSO files for a specific subsystem. + * + * Will return an array of function pointers to initialization functions + */ + +_PUBLIC_ init_module_fn *load_samba_modules(TALLOC_CTX *mem_ctx, const char *subsystem) +{ + char *path = modules_path(mem_ctx, subsystem); + init_module_fn *ret; + + ret = load_modules(mem_ctx, path); + + talloc_free(path); + + return ret; +} + + diff --git a/source4/passdb/secrets.c b/source4/passdb/secrets.c index 13f71e269e0..cbf94c0c3e8 100644 --- a/source4/passdb/secrets.c +++ b/source4/passdb/secrets.c @@ -25,6 +25,7 @@ #include "includes.h" #include "lib/tdb/include/tdbutil.h" #include "secrets.h" +#include "param/param.h" #include "system/filesys.h" #include "db_wrap.h" #include "lib/ldb/include/ldb.h" |