/**
A useful function for returning a path in the Samba lock directory.
**/
-char *lock_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
+char *lpcfg_lock_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
const char *name)
{
char *fname, *dname;
return fname;
}
+/**
+ A useful function for returning a path in the Samba state directory.
+**/
+char *lpcfg_state_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_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, lpcfg_statedir(lp_ctx));
+ 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 cache directory.
+**/
+char *lpcfg_cache_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_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, lpcfg_cachedir(lp_ctx));
+ 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 directory containing the current config file
*
* @retval Pointer to a talloc'ed string containing the full path.
**/
-char *config_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
+char *lpcfg_config_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
const char *name)
{
char *fname, *config_dir, *p;
*
* @retval Pointer to a talloc'ed string containing the full path.
**/
-char *private_path(TALLOC_CTX* mem_ctx,
+char *lpcfg_private_path(TALLOC_CTX* mem_ctx,
struct loadparm_context *lp_ctx,
const char *name)
{
{
char *fname, *dname;
- dname = private_path(mem_ctx, lp_ctx, "smbd.tmp");
+ dname = lpcfg_private_path(mem_ctx, lp_ctx, "smbd.tmp");
if (!directory_exist(dname)) {
mkdir(dname,0755);
}
return fname;
}
-/**
- * Obtain the init function from a shared library file
- */
-init_module_fn load_module(TALLOC_CTX *mem_ctx, const char *path)
-{
- void *handle;
- void *init_fn;
-
- handle = dlopen(path, RTLD_NOW);
- if (handle == NULL) {
- DEBUG(0, ("Unable to open %s: %s\n", path, dlerror()));
- return NULL;
- }
-
- init_fn = dlsym(handle, SAMBA_INIT_MODULE);
-
- if (init_fn == NULL) {
- DEBUG(0, ("Unable to find %s() in %s: %s\n",
- SAMBA_INIT_MODULE, path, dlerror()));
- DEBUG(1, ("Loading module '%s' failed\n", path));
- dlclose(handle);
- return NULL;
- }
-
- return (init_module_fn)init_fn;
-}
-
-/**
- * Obtain list of init functions from the modules in the specified
- * directory
- */
-init_module_fn *load_modules(TALLOC_CTX *mem_ctx, const char *path)
-{
- DIR *dir;
- struct dirent *entry;
- char *filename;
- int success = 0;
- init_module_fn *ret = talloc_array(mem_ctx, init_module_fn, 2);
-
- ret[0] = NULL;
-
- dir = opendir(path);
- if (dir == NULL) {
- talloc_free(ret);
- return NULL;
- }
-
- while((entry = readdir(dir))) {
- if (ISDOT(entry->d_name) || ISDOTDOT(entry->d_name))
- continue;
-
- filename = talloc_asprintf(mem_ctx, "%s/%s", path, entry->d_name);
-
- ret[success] = load_module(mem_ctx, filename);
- if (ret[success]) {
- ret = talloc_realloc(mem_ctx, ret, init_module_fn, success+2);
- success++;
- ret[success] = NULL;
- }
-
- talloc_free(filename);
- }
-
- closedir(dir);
-
- return ret;
-}
-
-/**
- * Run the specified init functions.
- *
- * @return true if all functions ran successfully, false otherwise
- */
-bool run_init_functions(init_module_fn *fns)
-{
- int i;
- bool ret = true;
-
- if (fns == NULL)
- return true;
-
- for (i = 0; fns[i]; i++) { ret &= (bool)NT_STATUS_IS_OK(fns[i]()); }
-
- return ret;
-}
-
-static char *modules_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
- const char *name)
-{
- const char *env_moduledir = getenv("LD_SAMBA_MODULE_PATH");
- return talloc_asprintf(mem_ctx, "%s/%s",
- env_moduledir?env_moduledir:lpcfg_modulesdir(lp_ctx),
- name);
-}
-
-/**
- * Load the initialization functions from DSO files for a specific subsystem.
- *
- * Will return an array of function pointers to initialization functions
- */
-
-init_module_fn *load_samba_modules(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, const char *subsystem)
-{
- char *path = modules_path(mem_ctx, lp_ctx, subsystem);
- init_module_fn *ret;
-
- ret = load_modules(mem_ctx, path);
-
- talloc_free(path);
-
- return ret;
-}
-
-const char *lpcfg_messaging_path(TALLOC_CTX *mem_ctx,
+const char *lpcfg_imessaging_path(TALLOC_CTX *mem_ctx,
struct loadparm_context *lp_ctx)
{
return smbd_tmp_path(mem_ctx, lp_ctx, "msg");
}
-struct smb_iconv_convenience *smb_iconv_convenience_reinit_lp(TALLOC_CTX *mem_ctx,
+struct smb_iconv_handle *smb_iconv_handle_reinit_lp(TALLOC_CTX *mem_ctx,
struct loadparm_context *lp_ctx,
- struct smb_iconv_convenience *old_ic)
+ struct smb_iconv_handle *old_ic)
{
- return smb_iconv_convenience_reinit(mem_ctx, lpcfg_dos_charset(lp_ctx),
- lpcfg_unix_charset(lp_ctx),
- lpcfg_parm_bool(lp_ctx, NULL, "iconv", "native", true),
- old_ic);
+ return smb_iconv_handle_reinit(mem_ctx, lpcfg_dos_charset(lp_ctx),
+ lpcfg_unix_charset(lp_ctx),
+ true,
+ old_ic);
}
const char *lpcfg_sam_name(struct loadparm_context *lp_ctx)
{
switch (lpcfg_server_role(lp_ctx)) {
- case ROLE_DOMAIN_CONTROLLER:
+ case ROLE_DOMAIN_BDC:
+ case ROLE_DOMAIN_PDC:
return lpcfg_workgroup(lp_ctx);
default:
return lpcfg_netbios_name(lp_ctx);