2 Unix SMB/CIFS implementation.
3 Samba utility functions
4 Copyright (C) Andrew Tridgell 1992-1998
5 Copyright (C) Jeremy Allison 2001-2002
6 Copyright (C) Simo Sorce 2001
7 Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003.
8 Copyright (C) James J Myers 2003
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 #include "dynconfig.h"
27 #include "system/network.h"
28 #include "system/filesys.h"
32 * @brief Misc utility functions
37 see if a string matches either our primary or one of our secondary
38 netbios aliases. do a case insensitive match
40 _PUBLIC_ BOOL
is_myname(const char *name
)
45 if (strcasecmp(name
, lp_netbios_name()) == 0) {
49 aliases
= lp_netbios_aliases();
50 for (i
=0; aliases
&& aliases
[i
]; i
++) {
51 if (strcasecmp(name
, aliases
[i
]) == 0) {
61 A useful function for returning a path in the Samba lock directory.
63 _PUBLIC_
char *lock_path(TALLOC_CTX
* mem_ctx
, const char *name
)
69 if (name
[0] == 0 || name
[0] == '/' || strstr(name
, ":/")) {
70 return talloc_strdup(mem_ctx
, name
);
73 dname
= talloc_strdup(mem_ctx
, lp_lockdir());
74 trim_string(dname
,"","/");
76 if (!directory_exist(dname
)) {
80 fname
= talloc_asprintf(mem_ctx
, "%s/%s", dname
, name
);
89 A useful function for returning a path in the Samba piddir directory.
91 static char *pid_path(TALLOC_CTX
* mem_ctx
, const char *name
)
95 dname
= talloc_strdup(mem_ctx
, lp_piddir());
96 trim_string(dname
,"","/");
98 if (!directory_exist(dname
)) {
102 fname
= talloc_asprintf(mem_ctx
, "%s/%s", dname
, name
);
111 * @brief Returns an absolute path to a file in the Samba lib directory.
113 * @param name File to find, relative to DATADIR.
115 * @retval Pointer to a talloc'ed string containing the full path.
118 _PUBLIC_
char *data_path(TALLOC_CTX
* mem_ctx
, const char *name
)
121 fname
= talloc_asprintf(mem_ctx
, "%s/%s", dyn_DATADIR
, name
);
126 * @brief Returns an absolute path to a file in the directory containing the current config file
128 * @param name File to find, relative to the config file directory.
130 * @retval Pointer to a talloc'ed string containing the full path.
133 _PUBLIC_
char *config_path(TALLOC_CTX
* mem_ctx
, const char *name
)
135 char *fname
, *config_dir
, *p
;
136 config_dir
= talloc_strdup(mem_ctx
, lp_configfile());
137 p
= strrchr(config_dir
, '/');
142 fname
= talloc_asprintf(mem_ctx
, "%s/%s", config_dir
, name
);
143 talloc_free(config_dir
);
148 * @brief Returns an absolute path to a file in the Samba private directory.
150 * @param name File to find, relative to PRIVATEDIR.
151 * if name is not relative, then use it as-is
153 * @retval Pointer to a talloc'ed string containing the full path.
155 _PUBLIC_
char *private_path(TALLOC_CTX
* mem_ctx
, const char *name
)
161 if (name
[0] == 0 || name
[0] == '/' || strstr(name
, ":/")) {
162 return talloc_strdup(mem_ctx
, name
);
164 fname
= talloc_asprintf(mem_ctx
, "%s/%s", lp_private_dir(), name
);
169 return a path in the smbd.tmp directory, where all temporary file
170 for smbd go. If NULL is passed for name then return the directory
173 _PUBLIC_
char *smbd_tmp_path(TALLOC_CTX
*mem_ctx
, const char *name
)
177 dname
= pid_path(mem_ctx
, "smbd.tmp");
178 if (!directory_exist(dname
)) {
186 fname
= talloc_asprintf(mem_ctx
, "%s/%s", dname
, name
);
192 static char *modules_path(TALLOC_CTX
* mem_ctx
, const char *name
)
194 const char *env_moduledir
= getenv("LD_SAMBA_MODULE_PATH");
195 return talloc_asprintf(mem_ctx
, "%s/%s",
196 env_moduledir
?env_moduledir
:lp_modulesdir(),
201 * Load the initialization functions from DSO files for a specific subsystem.
203 * Will return an array of function pointers to initialization functions
206 _PUBLIC_ init_module_fn
*load_samba_modules(TALLOC_CTX
*mem_ctx
, const char *subsystem
)
208 char *path
= modules_path(mem_ctx
, subsystem
);
211 ret
= load_modules(mem_ctx
, path
);