summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/Makefile.in5
-rw-r--r--source3/configure.in2
-rw-r--r--source3/include/includes.h3
-rw-r--r--source3/lib/ldb/tools/ldbdel.c4
-rw-r--r--source3/lib/smbconf/smbconf.c431
-rw-r--r--source3/lib/smbconf/smbconf.h117
-rw-r--r--source3/lib/smbconf/smbconf_init.c6
-rw-r--r--source3/lib/smbconf/smbconf_init.h32
-rw-r--r--source3/lib/smbconf/smbconf_private.h87
-rw-r--r--source3/lib/smbconf/smbconf_reg.c42
-rw-r--r--source3/lib/smbconf/smbconf_reg.h33
-rw-r--r--source3/lib/smbconf/smbconf_txt.c654
-rw-r--r--source3/lib/smbconf/smbconf_util.c151
-rw-r--r--source3/lib/smbconf/testsuite.c10
-rw-r--r--source3/modules/vfs_extd_audit.c145
15 files changed, 190 insertions, 1532 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 08ba0ad32a..1924ade8fb 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -856,9 +856,10 @@ CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) \
$(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
$(DISPLAY_SEC_OBJ)
-LIBSMBCONF_OBJ = lib/smbconf/smbconf.o lib/smbconf/smbconf_util.o \
+LIBSMBCONF_OBJ = ../lib/smbconf/smbconf.o \
+ ../lib/smbconf/smbconf_util.o \
+ ../lib/smbconf/smbconf_txt.o \
lib/smbconf/smbconf_reg.o \
- lib/smbconf/smbconf_txt.o \
lib/smbconf/smbconf_init.o
SMBCONFTORT_OBJ0 = lib/smbconf/testsuite.o
diff --git a/source3/configure.in b/source3/configure.in
index f1004778f4..87b4c33417 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -6286,7 +6286,7 @@ m4_include(../lib/zlib/zlib.m4)
if test x$enable_merged_build = xauto; then
# Check for python
- m4_include(../source4/build/m4/check_python.m4)
+ m4_include(../m4/check_python.m4)
AC_SAMBA_PYTHON_DEVEL([true], [merged_build_possible=no])
AC_MSG_CHECKING([whether it would be possible to do a merged build])
diff --git a/source3/include/includes.h b/source3/include/includes.h
index 63b567d419..9c7f15b9cb 100644
--- a/source3/include/includes.h
+++ b/source3/include/includes.h
@@ -654,6 +654,9 @@ struct smb_iconv_convenience *lp_iconv_convenience(void *lp_ctx);
#include "eventlog.h"
#include "lib/smbconf/smbconf.h"
+#include "lib/smbconf/smbconf_init.h"
+#include "lib/smbconf/smbconf_reg.h"
+#include "lib/smbconf/smbconf_txt.h"
/* Defines for wisXXX functions. */
#define UNI_UPPER 0x1
diff --git a/source3/lib/ldb/tools/ldbdel.c b/source3/lib/ldb/tools/ldbdel.c
index cafe0bd352..c58a82a523 100644
--- a/source3/lib/ldb/tools/ldbdel.c
+++ b/source3/lib/ldb/tools/ldbdel.c
@@ -35,7 +35,7 @@
#include "ldb/include/includes.h"
#include "ldb/tools/cmdline.h"
-static int ldb_delete_recursive(struct ldb_context *ldb, const struct ldb_dn *dn)
+static int ldb_delete_recursive(struct ldb_context *ldb, struct ldb_dn *dn)
{
int ret, i, total=0;
const char *attrs[] = { NULL };
@@ -90,7 +90,7 @@ int main(int argc, const char **argv)
}
for (i=0;i<options->argc;i++) {
- const struct ldb_dn *dn;
+ struct ldb_dn *dn;
dn = ldb_dn_explode(ldb, options->argv[i]);
if (dn == NULL) {
diff --git a/source3/lib/smbconf/smbconf.c b/source3/lib/smbconf/smbconf.c
deleted file mode 100644
index 86c1692574..0000000000
--- a/source3/lib/smbconf/smbconf.c
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * libsmbconf - Samba configuration library
- * Copyright (C) Michael Adam 2007-2008
- * Copyright (C) Guenther Deschner 2007
- *
- * 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/>.
- */
-
-#include "includes.h"
-#include "smbconf_private.h"
-
-/**********************************************************************
- *
- * internal helper functions
- *
- **********************************************************************/
-
-static WERROR smbconf_global_check(struct smbconf_ctx *ctx)
-{
- if (!smbconf_share_exists(ctx, GLOBAL_NAME)) {
- return smbconf_create_share(ctx, GLOBAL_NAME);
- }
- return WERR_OK;
-}
-
-
-/**********************************************************************
- *
- * The actual libsmbconf API functions that are exported.
- *
- **********************************************************************/
-
-/**
- * Tell whether the backend requires messaging to be set up
- * for the backend to work correctly.
- */
-bool smbconf_backend_requires_messaging(struct smbconf_ctx *ctx)
-{
- return ctx->ops->requires_messaging(ctx);
-}
-
-/**
- * Tell whether the source is writeable.
- */
-bool smbconf_is_writeable(struct smbconf_ctx *ctx)
-{
- return ctx->ops->is_writeable(ctx);
-}
-
-/**
- * utitlity function:
- * check whether a config source is writeable,
- * given only the name of the config source.
- */
-bool smbconf_is_writeable_bystring(const char *configsource)
-{
- struct smbconf_ctx *conf_ctx;
- WERROR err;
- bool ret;
- TALLOC_CTX *mem_ctx = talloc_stackframe;
-
- err = smbconf_init_reg(mem_ctx, &conf_ctx, configsource);
- if (!W_ERROR_IS_OK(err)) {
- ret = false;
- goto done;
- }
-
- ret = smbconf_is_writeable(conf_ctx);
-
-done:
- smbconf_shutdown(conf_ctx);
- TALLOC_FREE(mem_ctx);
- return ret;
-}
-
-/**
- * Close the configuration.
- */
-void smbconf_shutdown(struct smbconf_ctx *ctx)
-{
- TALLOC_FREE(ctx);
-}
-
-/**
- * Detect changes in the configuration.
- * The given csn struct is filled with the current csn.
- * smbconf_changed() can also be used for initial retrieval
- * of the csn.
- */
-bool smbconf_changed(struct smbconf_ctx *ctx, struct smbconf_csn *csn,
- const char *service, const char *param)
-{
- struct smbconf_csn old_csn;
-
- if (csn == NULL) {
- return false;
- }
-
- old_csn = *csn;
-
- ctx->ops->get_csn(ctx, csn, service, param);
- return (csn->csn != old_csn.csn);
-}
-
-/**
- * Drop the whole configuration (restarting empty).
- */
-WERROR smbconf_drop(struct smbconf_ctx *ctx)
-{
- return ctx->ops->drop(ctx);
-}
-
-/**
- * Get the whole configuration as lists of strings with counts:
- *
- * num_shares : number of shares
- * share_names : list of length num_shares of share names
- * num_params : list of length num_shares of parameter counts for each share
- * param_names : list of lists of parameter names for each share
- * param_values : list of lists of parameter values for each share
- */
-WERROR smbconf_get_config(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- uint32_t *num_shares,
- struct smbconf_service ***services)
-{
- WERROR werr = WERR_OK;
- TALLOC_CTX *tmp_ctx = NULL;
- uint32_t tmp_num_shares;
- char **tmp_share_names;
- struct smbconf_service **tmp_services;
- uint32_t count;
-
- if ((num_shares == NULL) || (services == NULL)) {
- werr = WERR_INVALID_PARAM;
- goto done;
- }
-
- tmp_ctx = talloc_stackframe();
-
- werr = smbconf_get_share_names(ctx, tmp_ctx, &tmp_num_shares,
- &tmp_share_names);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
-
- tmp_services = TALLOC_ARRAY(tmp_ctx, struct smbconf_service *,
- tmp_num_shares);
-
- if (tmp_services == NULL) {
- werr = WERR_NOMEM;
- goto done;
- }
-
- for (count = 0; count < tmp_num_shares; count++) {
- werr = smbconf_get_share(ctx, tmp_services,
- tmp_share_names[count],
- &tmp_services[count]);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
- }
-
- werr = WERR_OK;
-
- *num_shares = tmp_num_shares;
- if (tmp_num_shares > 0) {
- *services = talloc_move(mem_ctx, &tmp_services);
- } else {
- *services = NULL;
- }
-
-done:
- TALLOC_FREE(tmp_ctx);
- return werr;
-}
-
-/**
- * get the list of share names defined in the configuration.
- */
-WERROR smbconf_get_share_names(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- uint32_t *num_shares,
- char ***share_names)
-{
- return ctx->ops->get_share_names(ctx, mem_ctx, num_shares,
- share_names);
-}
-
-/**
- * check if a share/service of a given name exists
- */
-bool smbconf_share_exists(struct smbconf_ctx *ctx,
- const char *servicename)
-{
- return ctx->ops->share_exists(ctx, servicename);
-}
-
-/**
- * Add a service if it does not already exist.
- */
-WERROR smbconf_create_share(struct smbconf_ctx *ctx,
- const char *servicename)
-{
- if ((servicename != NULL) && smbconf_share_exists(ctx, servicename)) {
- return WERR_FILE_EXISTS;
- }
-
- return ctx->ops->create_share(ctx, servicename);
-}
-
-/**
- * get a definition of a share (service) from configuration.
- */
-WERROR smbconf_get_share(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *servicename,
- struct smbconf_service **service)
-{
- if (!smbconf_share_exists(ctx, servicename)) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- return ctx->ops->get_share(ctx, mem_ctx, servicename, service);
-}
-
-/**
- * delete a service from configuration
- */
-WERROR smbconf_delete_share(struct smbconf_ctx *ctx, const char *servicename)
-{
- if (!smbconf_share_exists(ctx, servicename)) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- return ctx->ops->delete_share(ctx, servicename);
-}
-
-/**
- * set a configuration parameter to the value provided.
- */
-WERROR smbconf_set_parameter(struct smbconf_ctx *ctx,
- const char *service,
- const char *param,
- const char *valstr)
-{
- if (!smbconf_share_exists(ctx, service)) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- return ctx->ops->set_parameter(ctx, service, param, valstr);
-}
-
-/**
- * Set a global parameter
- * (i.e. a parameter in the [global] service).
- *
- * This also creates [global] when it does not exist.
- */
-WERROR smbconf_set_global_parameter(struct smbconf_ctx *ctx,
- const char *param, const char *val)
-{
- WERROR werr;
-
- werr = smbconf_global_check(ctx);
- if (W_ERROR_IS_OK(werr)) {
- werr = smbconf_set_parameter(ctx, GLOBAL_NAME, param, val);
- }
-
- return werr;
-}
-
-/**
- * get the value of a configuration parameter as a string
- */
-WERROR smbconf_get_parameter(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *service,
- const char *param,
- char **valstr)
-{
- if (valstr == NULL) {
- return WERR_INVALID_PARAM;
- }
-
- if (!smbconf_share_exists(ctx, service)) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- return ctx->ops->get_parameter(ctx, mem_ctx, service, param, valstr);
-}
-
-/**
- * Get the value of a global parameter.
- *
- * Create [global] if it does not exist.
- */
-WERROR smbconf_get_global_parameter(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *param,
- char **valstr)
-{
- WERROR werr;
-
- werr = smbconf_global_check(ctx);
- if (W_ERROR_IS_OK(werr)) {
- werr = smbconf_get_parameter(ctx, mem_ctx, GLOBAL_NAME, param,
- valstr);
- }
-
- return werr;
-}
-
-/**
- * delete a parameter from configuration
- */
-WERROR smbconf_delete_parameter(struct smbconf_ctx *ctx,
- const char *service, const char *param)
-{
- if (!smbconf_share_exists(ctx, service)) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- return ctx->ops->delete_parameter(ctx, service, param);
-}
-
-/**
- * Delete a global parameter.
- *
- * Create [global] if it does not exist.
- */
-WERROR smbconf_delete_global_parameter(struct smbconf_ctx *ctx,
- const char *param)
-{
- WERROR werr;
-
- werr = smbconf_global_check(ctx);
- if (W_ERROR_IS_OK(werr)) {
- werr = smbconf_delete_parameter(ctx, GLOBAL_NAME, param);
- }
-
- return werr;
-}
-
-WERROR smbconf_get_includes(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *service,
- uint32_t *num_includes, char ***includes)
-{
- if (!smbconf_share_exists(ctx, service)) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- return ctx->ops->get_includes(ctx, mem_ctx, service, num_includes,
- includes);
-}
-
-WERROR smbconf_get_global_includes(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- uint32_t *num_includes, char ***includes)
-{
- WERROR werr;
-
- werr = smbconf_global_check(ctx);
- if (W_ERROR_IS_OK(werr)) {
- werr = smbconf_get_includes(ctx, mem_ctx, GLOBAL_NAME,
- num_includes, includes);
- }
-
- return werr;
-}
-
-WERROR smbconf_set_includes(struct smbconf_ctx *ctx,
- const char *service,
- uint32_t num_includes, const char **includes)
-{
- if (!smbconf_share_exists(ctx, service)) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- return ctx->ops->set_includes(ctx, service, num_includes, includes);
-}
-
-WERROR smbconf_set_global_includes(struct smbconf_ctx *ctx,
- uint32_t num_includes,
- const char **includes)
-{
- WERROR werr;
-
- werr = smbconf_global_check(ctx);
- if (W_ERROR_IS_OK(werr)) {
- werr = smbconf_set_includes(ctx, GLOBAL_NAME,
- num_includes, includes);
- }
-
- return werr;
-}
-
-
-WERROR smbconf_delete_includes(struct smbconf_ctx *ctx, const char *service)
-{
- if (!smbconf_share_exists(ctx, service)) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- return ctx->ops->delete_includes(ctx, service);
-}
-
-WERROR smbconf_delete_global_includes(struct smbconf_ctx *ctx)
-{
- WERROR werr;
-
- werr = smbconf_global_check(ctx);
- if (W_ERROR_IS_OK(werr)) {
- werr = smbconf_delete_includes(ctx, GLOBAL_NAME);
- }
-
- return werr;
-}
diff --git a/source3/lib/smbconf/smbconf.h b/source3/lib/smbconf/smbconf.h
deleted file mode 100644
index f65842ee34..0000000000
--- a/source3/lib/smbconf/smbconf.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * libsmbconf - Samba configuration library
- * Copyright (C) Michael Adam 2008
- *
- * 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/>.
- */
-
-#ifndef __LIBSMBCONF_H__
-#define __LIBSMBCONF_H__
-
-struct smbconf_ctx;
-
-/* the change sequence number */
-struct smbconf_csn {
- uint64_t csn;
-};
-
-struct smbconf_service {
- char *name;
- uint32_t num_params;
- char **param_names;
- char **param_values;
-};
-
-
-/**
- * intialization dispatcher function.
- * takes source string in the form of "backend:path"
- */
-WERROR smbconf_init(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
- const char *source);
-
-/**
- * initialization functions for the available modules
- */
-
-WERROR smbconf_init_reg(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
- const char *path);
-
-WERROR smbconf_init_txt(TALLOC_CTX *mem_ctx,
- struct smbconf_ctx **conf_ctx,
- const char *path);
-
-/*
- * the smbconf API functions
- */
-bool smbconf_backend_requires_messaging(struct smbconf_ctx *ctx);
-bool smbconf_is_writeable(struct smbconf_ctx *ctx);
-bool smbconf_is_writeable_bystring(const char *configsource);
-void smbconf_shutdown(struct smbconf_ctx *ctx);
-bool smbconf_changed(struct smbconf_ctx *ctx, struct smbconf_csn *csn,
- const char *service, const char *param);
-WERROR smbconf_drop(struct smbconf_ctx *ctx);
-WERROR smbconf_get_config(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- uint32_t *num_shares,
- struct smbconf_service ***services);
-WERROR smbconf_get_share_names(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- uint32_t *num_shares,
- char ***share_names);
-bool smbconf_share_exists(struct smbconf_ctx *ctx, const char *servicename);
-WERROR smbconf_create_share(struct smbconf_ctx *ctx, const char *servicename);
-WERROR smbconf_get_share(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *servicename,
- struct smbconf_service **service);
-WERROR smbconf_delete_share(struct smbconf_ctx *ctx,
- const char *servicename);
-WERROR smbconf_set_parameter(struct smbconf_ctx *ctx,
- const char *service,
- const char *param,
- const char *valstr);
-WERROR smbconf_set_global_parameter(struct smbconf_ctx *ctx,
- const char *param, const char *val);
-WERROR smbconf_get_parameter(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *service,
- const char *param,
- char **valstr);
-WERROR smbconf_get_global_parameter(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *param,
- char **valstr);
-WERROR smbconf_delete_parameter(struct smbconf_ctx *ctx,
- const char *service, const char *param);
-WERROR smbconf_delete_global_parameter(struct smbconf_ctx *ctx,
- const char *param);
-WERROR smbconf_get_includes(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *service,
- uint32_t *num_includes, char ***includes);
-WERROR smbconf_get_global_includes(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- uint32_t *num_includes, char ***includes);
-WERROR smbconf_set_includes(struct smbconf_ctx *ctx,
- const char *service,
- uint32_t num_includes, const char **includes);
-WERROR smbconf_set_global_includes(struct smbconf_ctx *ctx,
- uint32_t num_includes,
- const char **includes);
-WERROR smbconf_delete_includes(struct smbconf_ctx *ctx, const char *service);
-WERROR smbconf_delete_global_includes(struct smbconf_ctx *ctx);
-
-#endif /* _LIBSMBCONF_H_ */
diff --git a/source3/lib/smbconf/smbconf_init.c b/source3/lib/smbconf/smbconf_init.c
index a362a663af..58bb9d9362 100644
--- a/source3/lib/smbconf/smbconf_init.c
+++ b/source3/lib/smbconf/smbconf_init.c
@@ -18,7 +18,9 @@
*/
#include "includes.h"
-#include "smbconf_private.h"
+#include "lib/smbconf/smbconf_private.h"
+#include "lib/smbconf/smbconf_txt.h"
+#include "lib/smbconf/smbconf_reg.h"
/**
* smbconf initialization dispatcher
@@ -88,6 +90,6 @@ WERROR smbconf_init(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
}
done:
- TALLOC_FREE(tmp_ctx);
+ talloc_free(tmp_ctx);
return werr;
}
diff --git a/source3/lib/smbconf/smbconf_init.h b/source3/lib/smbconf/smbconf_init.h
new file mode 100644
index 0000000000..abd62df204
--- /dev/null
+++ b/source3/lib/smbconf/smbconf_init.h
@@ -0,0 +1,32 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * libsmbconf - Samba configuration library
+ * Copyright (C) Michael Adam 2009
+ *
+ * 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/>.
+ */
+
+#ifndef __LIBSMBCONF_INIT_H__
+#define __LIBSMBCONF_INIT_H__
+
+struct smbconf_ctx;
+
+/**
+ * intialization dispatcher function.
+ * takes source string in the form of "backend:path"
+ */
+WERROR smbconf_init(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
+ const char *source);
+
+#endif /* _LIBSMBCONF_INIT_H_ */
diff --git a/source3/lib/smbconf/smbconf_private.h b/source3/lib/smbconf/smbconf_private.h
deleted file mode 100644
index b0333e981a..0000000000
--- a/source3/lib/smbconf/smbconf_private.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * libsmbconf - Samba configuration library
- * Copyright (C) Michael Adam 2008
- *
- * 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/>.
- */
-
-#ifndef __LIBSMBCONF_PRIVATE_H__
-#define __LIBSMBCONF_PRIVATE_H__
-
-struct smbconf_ops {
- WERROR (*init)(struct smbconf_ctx *ctx, const char *path);
- int (*shutdown)(struct smbconf_ctx *ctx);
- bool (*requires_messaging)(struct smbconf_ctx *ctx);
- bool (*is_writeable)(struct smbconf_ctx *ctx);
- WERROR (*open_conf)(struct smbconf_ctx *ctx);
- int (*close_conf)(struct smbconf_ctx *ctx);
- void (*get_csn)(struct smbconf_ctx *ctx, struct smbconf_csn *csn,
- const char *service, const char *param);
- WERROR (*drop)(struct smbconf_ctx *ctx);
- WERROR (*get_share_names)(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- uint32_t *num_shares,
- char ***share_names);
- bool (*share_exists)(struct smbconf_ctx *ctx, const char *service);
- WERROR (*create_share)(struct smbconf_ctx *ctx, const char *service);
- WERROR (*get_share)(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *servicename,
- struct smbconf_service **service);
- WERROR (*delete_share)(struct smbconf_ctx *ctx,
- const char *servicename);
- WERROR (*set_parameter)(struct smbconf_ctx *ctx,
- const char *service,
- const char *param,
- const char *valstr);
- WERROR (*get_parameter)(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *service,
- const char *param,
- char **valstr);
- WERROR (*delete_parameter)(struct smbconf_ctx *ctx,
- const char *service, const char *param);
- WERROR (*get_includes)(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *service,
- uint32_t *num_includes, char ***includes);
- WERROR (*set_includes)(struct smbconf_ctx *ctx,
- const char *service,
- uint32_t num_includes, const char **includes);
- WERROR (*delete_includes)(struct smbconf_ctx *ctx,
- const char *service);
-};
-
-struct smbconf_ctx {
- const char *path;
- struct smbconf_ops *ops;
- void *data; /* private data for use in backends */
-};
-
-WERROR smbconf_init_internal(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
- const char *path, struct smbconf_ops *ops);
-
-WERROR smbconf_add_string_to_array(TALLOC_CTX *mem_ctx,
- char ***array,
- uint32_t count,
- const char *string);
-
-bool smbconf_find_in_array(const char *string, char **list,
- uint32_t num_entries, uint32_t *entry);
-
-bool smbconf_reverse_find_in_array(const char *string, char **list,
- uint32_t num_entries, uint32_t *entry);
-
-#endif
diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c
index cae16ad2e5..e36fa8a2a1 100644
--- a/source3/lib/smbconf/smbconf_reg.c
+++ b/source3/lib/smbconf/smbconf_reg.c
@@ -18,7 +18,7 @@
*/
#include "includes.h"
-#include "smbconf_private.h"
+#include "lib/smbconf/smbconf_private.h"
#define INCLUDES_VALNAME "includes"
@@ -145,7 +145,7 @@ static WERROR smbconf_reg_open_service_key(TALLOC_CTX *mem_ctx,
werr = smbconf_reg_open_path(mem_ctx, ctx, path, desired_access, key);
done:
- TALLOC_FREE(path);
+ talloc_free(path);
return werr;
}
@@ -176,7 +176,7 @@ static bool smbconf_value_exists(struct registry_key *key, const char *param)
ret = true;
}
- TALLOC_FREE(ctx);
+ talloc_free(ctx);
return ret;
}
@@ -216,7 +216,7 @@ static WERROR smbconf_reg_create_service_key(TALLOC_CTX *mem_ctx,
}
done:
- TALLOC_FREE(create_ctx);
+ talloc_free(create_ctx);
return werr;
}
@@ -331,7 +331,7 @@ static WERROR smbconf_reg_set_multi_sz_value(struct registry_key *key,
}
done:
- TALLOC_FREE(tmp_ctx);
+ talloc_free(tmp_ctx);
return werr;
}
@@ -436,7 +436,7 @@ static WERROR smbconf_reg_get_includes_internal(TALLOC_CTX *mem_ctx,
}
done:
- TALLOC_FREE(tmp_ctx);
+ talloc_free(tmp_ctx);
return werr;
}
@@ -533,7 +533,7 @@ static WERROR smbconf_reg_get_values(TALLOC_CTX *mem_ctx,
}
done:
- TALLOC_FREE(tmp_ctx);
+ talloc_free(tmp_ctx);
return werr;
}
@@ -592,7 +592,7 @@ static WERROR smbconf_reg_delete_values(struct registry_key *key)
werr = WERR_OK;
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return werr;
}
@@ -748,7 +748,7 @@ static WERROR smbconf_reg_drop(struct smbconf_ctx *ctx)
&new_key, &action);
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return werr;
}
@@ -833,7 +833,7 @@ static WERROR smbconf_reg_get_share_names(struct smbconf_ctx *ctx,
}
done:
- TALLOC_FREE(tmp_ctx);
+ talloc_free(tmp_ctx);
return werr;
}
@@ -854,7 +854,7 @@ static bool smbconf_reg_share_exists(struct smbconf_ctx *ctx,
ret = true;
}
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return ret;
}
@@ -876,7 +876,7 @@ static WERROR smbconf_reg_create_share(struct smbconf_ctx *ctx,
servicename, &key);
}
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return werr;
}
@@ -923,7 +923,7 @@ static WERROR smbconf_reg_get_share(struct smbconf_ctx *ctx,
}
done:
- TALLOC_FREE(tmp_ctx);
+ talloc_free(tmp_ctx);
return werr;
}
@@ -949,7 +949,7 @@ static WERROR smbconf_reg_delete_share(struct smbconf_ctx *ctx,
}
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return werr;
}
@@ -974,7 +974,7 @@ static WERROR smbconf_reg_set_parameter(struct smbconf_ctx *ctx,
werr = smbconf_reg_set_value(key, param, valstr);
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return werr;
}
@@ -1019,8 +1019,8 @@ static WERROR smbconf_reg_get_parameter(struct smbconf_ctx *ctx,
}
done:
- TALLOC_FREE(key);
- TALLOC_FREE(value);
+ talloc_free(key);
+ talloc_free(value);
return werr;
}
@@ -1054,7 +1054,7 @@ static WERROR smbconf_reg_delete_parameter(struct smbconf_ctx *ctx,
werr = reg_deletevalue(key, param);
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return werr;
}
@@ -1078,7 +1078,7 @@ static WERROR smbconf_reg_get_includes(struct smbconf_ctx *ctx,
includes);
done:
- TALLOC_FREE(tmp_ctx);
+ talloc_free(tmp_ctx);
return werr;
}
@@ -1108,7 +1108,7 @@ static WERROR smbconf_reg_set_includes(struct smbconf_ctx *ctx,
}
done:
- TALLOC_FREE(tmp_ctx);
+ talloc_free(tmp_ctx);
return werr;
}
@@ -1133,7 +1133,7 @@ static WERROR smbconf_reg_delete_includes(struct smbconf_ctx *ctx,
done:
- TALLOC_FREE(tmp_ctx);
+ talloc_free(tmp_ctx);
return werr;
}
diff --git a/source3/lib/smbconf/smbconf_reg.h b/source3/lib/smbconf/smbconf_reg.h
new file mode 100644
index 0000000000..7f54b6e32d
--- /dev/null
+++ b/source3/lib/smbconf/smbconf_reg.h
@@ -0,0 +1,33 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * libsmbconf - Samba configuration library
+ * Copyright (C) Michael Adam 2009
+ *
+ * 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/>.
+ */
+
+#ifndef __LIBSMBCONF_REG_H__
+#define __LIBSMBCONF_REG_H__
+
+struct smbconf_ctx;
+
+/**
+ * initialization functions for the registry backend modules
+ */
+
+WERROR smbconf_init_reg(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
+ const char *path);
+
+
+#endif /* _LIBSMBCONF_REG_H_ */
diff --git a/source3/lib/smbconf/smbconf_txt.c b/source3/lib/smbconf/smbconf_txt.c
deleted file mode 100644
index 70d5f82bf0..0000000000
--- a/source3/lib/smbconf/smbconf_txt.c
+++ /dev/null
@@ -1,654 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * libsmbconf - Samba configuration library, text backend
- * Copyright (C) Michael Adam 2008
- *
- * 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/>.
- */
-
-/*
- * This is a sample implementation of a libsmbconf text backend
- * using the params.c parser.
- *
- * It is read only.
- * Don't expect brilliant performance, since it is not hashing the lists.
- */
-
-#include "includes.h"
-#include "smbconf_private.h"
-
-struct txt_cache {
- uint32_t current_share;
- uint32_t num_shares;
- char **share_names;
- uint32_t *num_params;
- char ***param_names;
- char ***param_values;
-};
-
-struct txt_private_data {
- struct txt_cache *cache;
- uint64_t csn;
- bool verbatim;
-};
-
-/**********************************************************************
- *
- * helper functions
- *
- **********************************************************************/
-
-/**
- * a convenience helper to cast the private data structure
- */
-static struct txt_private_data *pd(struct smbconf_ctx *ctx)
-{
- return (struct txt_private_data *)(ctx->data);
-}
-
-static bool smbconf_txt_do_section(const char *section, void *private_data)
-{
- WERROR werr;
- uint32_t idx;
- struct txt_private_data *tpd = (struct txt_private_data *)private_data;
- struct txt_cache *cache = tpd->cache;
-
- if (smbconf_find_in_array(section, cache->share_names,
- cache->num_shares, &idx))
- {
- cache->current_share = idx;
- return true;
- }
-
- werr = smbconf_add_string_to_array(cache, &(cache->share_names),
- cache->num_shares, section);
- if (!W_ERROR_IS_OK(werr)) {
- return false;
- }
- cache->current_share = cache->num_shares;
- cache->num_shares++;
-
- cache->param_names = TALLOC_REALLOC_ARRAY(cache,
- cache->param_names,
- char **,
- cache->num_shares);
- if (cache->param_names == NULL) {
- return false;
- }
- cache->param_names[cache->current_share] = NULL;
-
- cache->param_values = TALLOC_REALLOC_ARRAY(cache,
- cache->param_values,
- char **,
- cache->num_shares);
- if (cache->param_values == NULL) {
- return false;
- }
- cache->param_values[cache->current_share] = NULL;
-
- cache->num_params = TALLOC_REALLOC_ARRAY(cache,
- cache->num_params,
- uint32_t,
- cache->num_shares);
- if (cache->num_params == NULL) {
- return false;
- }
- cache->num_params[cache->current_share] = 0;
-
- return true;
-}
-
-static bool smbconf_txt_do_parameter(const char *param_name,
- const char *param_value,
- void *private_data)
-{
- WERROR werr;
- char **param_names, **param_values;
- uint32_t num_params;
- uint32_t idx;
- struct txt_private_data *tpd = (struct txt_private_data *)private_data;
- struct txt_cache *cache = tpd->cache;
-
- if (cache->num_shares == 0) {
- /*
- * not in any share yet,
- * initialize the "empty" section (NULL):
- * parameters without a previous [section] are stored here.
- */
- if (!smbconf_txt_do_section(NULL, private_data)) {
- return false;
- }
- }
-
- param_names = cache->param_names[cache->current_share];
- param_values = cache->param_values[cache->current_share];
- num_params = cache->num_params[cache->current_share];
-
- if (!(tpd->verbatim) &&
- smbconf_find_in_array(param_name, param_names, num_params, &idx))
- {
- TALLOC_FREE(param_values[idx]);
- param_values[idx] = talloc_strdup(cache, param_value);
- if (param_values[idx] == NULL) {
- return false;
- }
- return true;
- }
- werr = smbconf_add_string_to_array(cache,
- &(cache->param_names[cache->current_share]),
- num_params, param_name);
- if (!W_ERROR_IS_OK(werr)) {
- return false;
- }
- werr = smbconf_add_string_to_array(cache,
- &(cache->param_values[cache->current_share]),
- num_params, param_value);
- cache->num_params[cache->current_share]++;
- return W_ERROR_IS_OK(werr);
-}
-
-static void smbconf_txt_flush_cache(struct smbconf_ctx *ctx)
-{
- TALLOC_FREE(pd(ctx)->cache);
-}
-
-static WERROR smbconf_txt_init_cache(struct smbconf_ctx *ctx)
-{
- if (pd(ctx)->cache != NULL) {
- smbconf_txt_flush_cache(ctx);
- }
-
- pd(ctx)->cache = TALLOC_ZERO_P(pd(ctx), struct txt_cache);
-
- if (pd(ctx)->cache == NULL) {
- return WERR_NOMEM;
- }
-
- return WERR_OK;
-}
-
-static WERROR smbconf_txt_load_file(struct smbconf_ctx *ctx)
-{
- WERROR werr;
- uint64_t new_csn;
-
- if (!file_exist(ctx->path)) {
- return WERR_BADFILE;
- }
-
- new_csn = (uint64_t)file_modtime(ctx->path);
- if (new_csn == pd(ctx)->csn) {
- return WERR_OK;
- }
-
- werr = smbconf_txt_init_cache(ctx);
- if (!W_ERROR_IS_OK(werr)) {
- return werr;
- }
-
- if (!pm_process(ctx->path, smbconf_txt_do_section,
- smbconf_txt_do_parameter, pd(ctx)))
- {
- return WERR_CAN_NOT_COMPLETE;
- }
-
- pd(ctx)->csn = new_csn;
-
- return WERR_OK;
-}
-
-
-/**********************************************************************
- *
- * smbconf operations: text backend implementations
- *
- **********************************************************************/
-
-/**
- * initialize the text based smbconf backend
- */
-static WERROR smbconf_txt_init(struct smbconf_ctx *ctx, const char *path)
-{
- if (path == NULL) {
- return WERR_BADFILE;
- }
- ctx->path = talloc_strdup(ctx, path);
- if (ctx->path == NULL) {
- return WERR_NOMEM;
- }
-
- ctx->data = TALLOC_ZERO_P(ctx, struct txt_private_data);
- if (ctx->data == NULL) {
- return WERR_NOMEM;
- }
-
- pd(ctx)->verbatim = true;
-
- return WERR_OK;
-}
-
-static int smbconf_txt_shutdown(struct smbconf_ctx *ctx)
-{
- return ctx->ops->close_conf(ctx);
-}
-
-static bool smbconf_txt_requires_messaging(struct smbconf_ctx *ctx)
-{
- return false;
-}
-
-static bool smbconf_txt_is_writeable(struct smbconf_ctx *ctx)
-{
- /* no write support in this backend yet... */
- return false;
-}
-
-static WERROR smbconf_txt_open(struct smbconf_ctx *ctx)
-{
- return smbconf_txt_load_file(ctx);
-}
-
-static int smbconf_txt_close(struct smbconf_ctx *ctx)
-{
- smbconf_txt_flush_cache(ctx);
- return 0;
-}
-
-/**
- * Get the change sequence number of the given service/parameter.
- * service and parameter strings may be NULL.
- */
-static void smbconf_txt_get_csn(struct smbconf_ctx *ctx,
- struct smbconf_csn *csn,
- const char *service, const char *param)
-{
- if (csn == NULL) {
- return;
- }
-
- csn->csn = (uint64_t)file_modtime(ctx->path);
-}
-
-/**
- * Drop the whole configuration (restarting empty)
- */
-static WERROR smbconf_txt_drop(struct smbconf_ctx *ctx)
-{
- return WERR_NOT_SUPPORTED;
-}
-
-/**
- * get the list of share names defined in the configuration.
- */
-static WERROR smbconf_txt_get_share_names(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- uint32_t *num_shares,
- char ***share_names)
-{
- uint32_t count;
- uint32_t added_count = 0;
- TALLOC_CTX *tmp_ctx = NULL;
- WERROR werr = WERR_OK;
- char **tmp_share_names = NULL;
-
- if ((num_shares == NULL) || (share_names == NULL)) {
- werr = WERR_INVALID_PARAM;
- goto done;
- }
-
- werr = smbconf_txt_load_file(ctx);
- if (!W_ERROR_IS_OK(werr)) {
- return werr;
- }
-
- tmp_ctx = talloc_stackframe();
-
- /* make sure "global" is always listed first,
- * possibly after NULL section */
-
- if (smbconf_share_exists(ctx, NULL)) {
- werr = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
- 0, NULL);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
- added_count++;
- }
-
- if (smbconf_share_exists(ctx, GLOBAL_NAME)) {
- werr = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
- added_count, GLOBAL_NAME);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
- added_count++;
- }
-
- for (count = 0; count < pd(ctx)->cache->num_shares; count++) {
- if (strequal(pd(ctx)->cache->share_names[count], GLOBAL_NAME) ||
- (pd(ctx)->cache->share_names[count] == NULL))
- {
- continue;
- }
-
- werr = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
- added_count,
- pd(ctx)->cache->share_names[count]);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
- added_count++;
- }
-
- *num_shares = added_count;
- if (added_count > 0) {
- *share_names = talloc_move(mem_ctx, &tmp_share_names);
- } else {
- *share_names = NULL;
- }
-
-done:
- TALLOC_FREE(tmp_ctx);
- return werr;
-}
-
-/**
- * check if a share/service of a given name exists
- */
-static bool smbconf_txt_share_exists(struct smbconf_ctx *ctx,
- const char *servicename)
-{
- WERROR werr;
-
- werr = smbconf_txt_load_file(ctx);
- if (!W_ERROR_IS_OK(werr)) {
- return false;
- }
-
- return smbconf_find_in_array(servicename,
- pd(ctx)->cache->share_names,
- pd(ctx)->cache->num_shares, NULL);
-}
-
-/**
- * Add a service if it does not already exist
- */
-static WERROR smbconf_txt_create_share(struct smbconf_ctx *ctx,
- const char *servicename)
-{
- return WERR_NOT_SUPPORTED;
-}
-
-/**
- * get a definition of a share (service) from configuration.
- */
-static WERROR smbconf_txt_get_share(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *servicename,
- struct smbconf_service **service)
-{
- WERROR werr;
- uint32_t sidx, count;
- bool found;
- TALLOC_CTX *tmp_ctx = NULL;
- struct smbconf_service *tmp_service = NULL;
-
- werr = smbconf_txt_load_file(ctx);
- if (!W_ERROR_IS_OK(werr)) {
- return werr;
- }
-
- found = smbconf_find_in_array(servicename,
- pd(ctx)->cache->share_names,
- pd(ctx)->cache->num_shares,
- &sidx);
- if (!found) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- tmp_ctx = talloc_stackframe();
-
- tmp_service = TALLOC_ZERO_P(tmp_ctx, struct smbconf_service);
- if (tmp_service == NULL) {
- werr = WERR_NOMEM;
- goto done;
- }
-
- if (servicename != NULL) {
- tmp_service->name = talloc_strdup(tmp_service, servicename);
- if (tmp_service->name == NULL) {
- werr = WERR_NOMEM;
- goto done;
- }
- }
-
- for (count = 0; count < pd(ctx)->cache->num_params[sidx]; count++) {
- werr = smbconf_add_string_to_array(tmp_service,
- &(tmp_service->param_names),
- count,
- pd(ctx)->cache->param_names[sidx][count]);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
- werr = smbconf_add_string_to_array(tmp_service,
- &(tmp_service->param_values),
- count,
- pd(ctx)->cache->param_values[sidx][count]);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
- }
-
- tmp_service->num_params = count;
- if (count > 0) {
- *service = talloc_move(mem_ctx, &tmp_service);
- } else {
- *service = NULL;
- }
-
-done:
- TALLOC_FREE(tmp_ctx);
- return werr;
-}
-
-/**
- * delete a service from configuration
- */
-static WERROR smbconf_txt_delete_share(struct smbconf_ctx *ctx,
- const char *servicename)
-{
- return WERR_NOT_SUPPORTED;
-}
-
-/**
- * set a configuration parameter to the value provided.
- */
-static WERROR smbconf_txt_set_parameter(struct smbconf_ctx *ctx,
- const char *service,
- const char *param,
- const char *valstr)
-{
- return WERR_NOT_SUPPORTED;
-}
-
-/**
- * get the value of a configuration parameter as a string
- */
-static WERROR smbconf_txt_get_parameter(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *service,
- const char *param,
- char **valstr)
-{
- WERROR werr;
- bool found;
- uint32_t share_index, param_index;
-
- werr = smbconf_txt_load_file(ctx);
- if (!W_ERROR_IS_OK(werr)) {
- return werr;
- }
-
- found = smbconf_find_in_array(service,
- pd(ctx)->cache->share_names,
- pd(ctx)->cache->num_shares,
- &share_index);
- if (!found) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- found = smbconf_reverse_find_in_array(param,
- pd(ctx)->cache->param_names[share_index],
- pd(ctx)->cache->num_params[share_index],
- &param_index);
- if (!found) {
- return WERR_INVALID_PARAM;
- }
-
- *valstr = talloc_strdup(mem_ctx,
- pd(ctx)->cache->param_values[share_index][param_index]);
-
- if (*valstr == NULL) {
- return WERR_NOMEM;
- }
-
- return WERR_OK;
-}
-
-/**
- * delete a parameter from configuration
- */
-static WERROR smbconf_txt_delete_parameter(struct smbconf_ctx *ctx,
- const char *service,
- const char *param)
-{
- return WERR_NOT_SUPPORTED;
-}
-
-static WERROR smbconf_txt_get_includes(struct smbconf_ctx *ctx,
- TALLOC_CTX *mem_ctx,
- const char *service,
- uint32_t *num_includes,
- char ***includes)
-{
- WERROR werr;
- bool found;
- uint32_t sidx, count;
- TALLOC_CTX *tmp_ctx = NULL;
- uint32_t tmp_num_includes = 0;
- char **tmp_includes = NULL;
-
- werr = smbconf_txt_load_file(ctx);
- if (!W_ERROR_IS_OK(werr)) {
- return werr;
- }
-
- found = smbconf_find_in_array(service,
- pd(ctx)->cache->share_names,
- pd(ctx)->cache->num_shares,
- &sidx);
- if (!found) {
- return WERR_NO_SUCH_SERVICE;
- }
-
- tmp_ctx = talloc_stackframe();
-
- for (count = 0; count < pd(ctx)->cache->num_params[sidx]; count++) {
- if (strequal(pd(ctx)->cache->param_names[sidx][count],
- "include"))
- {
- werr = smbconf_add_string_to_array(tmp_ctx,
- &tmp_includes,
- tmp_num_includes,
- pd(ctx)->cache->param_values[sidx][count]);
- if (!W_ERROR_IS_OK(werr)) {
- goto done;
- }
- tmp_num_includes++;
- }
- }
-
- *num_includes = tmp_num_includes;
- if (*num_includes > 0) {
- *includes = talloc_move(mem_ctx, &tmp_includes);
- if (*includes == NULL) {
- werr = WERR_NOMEM;
- goto done;
- }
- } else {
- *includes = NULL;
- }
-
- werr = WERR_OK;
-
-done:
- TALLOC_FREE(tmp_ctx);
- return werr;
-}
-
-static WERROR smbconf_txt_set_includes(struct smbconf_ctx *ctx,
- const char *service,
- uint32_t num_includes,
- const char **includes)
-{
- return WERR_NOT_SUPPORTED;
-}
-
-static WERROR smbconf_txt_delete_includes(struct smbconf_ctx *ctx,
- const char *service)
-{
- return WERR_NOT_SUPPORTED;
-}
-
-
-static struct smbconf_ops smbconf_ops_txt = {
- .init = smbconf_txt_init,
- .shutdown = smbconf_txt_shutdown,
- .requires_messaging = smbconf_txt_requires_messaging,
- .is_writeable = smbconf_txt_is_writeable,
- .open_conf = smbconf_txt_open,
- .close_conf = smbconf_txt_close,
- .get_csn = smbconf_txt_get_csn,
- .drop = smbconf_txt_drop,
- .get_share_names = smbconf_txt_get_share_names,
- .share_exists = smbconf_txt_share_exists,
- .create_share = smbconf_txt_create_share,
- .get_share = smbconf_txt_get_share,
- .delete_share = smbconf_txt_delete_share,
- .set_parameter = smbconf_txt_set_parameter,
- .get_parameter = smbconf_txt_get_parameter,
- .delete_parameter = smbconf_txt_delete_parameter,
- .get_includes = smbconf_txt_get_includes,
- .set_includes = smbconf_txt_set_includes,
- .delete_includes = smbconf_txt_delete_includes,
-};
-
-
-/**
- * initialize the smbconf text backend
- * the only function that is exported from this module
- */
-WERROR smbconf_init_txt(TALLOC_CTX *mem_ctx,
- struct smbconf_ctx **conf_ctx,
- const char *path)
-{
- WERROR werr;
-
- werr = smbconf_init_internal(mem_ctx, conf_ctx, path, &smbconf_ops_txt);
- if (!W_ERROR_IS_OK(werr)) {
- return werr;
- }
-
- return smbconf_txt_load_file(*conf_ctx);
-}
diff --git a/source3/lib/smbconf/smbconf_util.c b/source3/lib/smbconf/smbconf_util.c
deleted file mode 100644
index 271fc47dd4..0000000000
--- a/source3/lib/smbconf/smbconf_util.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * libsmbconf - Samba configuration library, utility functions
- * Copyright (C) Michael Adam 2008
- *
- * 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/>.
- */
-
-#include "includes.h"
-#include "smbconf_private.h"
-
-
-static int smbconf_destroy_ctx(struct smbconf_ctx *ctx)
-{
- return ctx->ops->shutdown(ctx);
-}
-
-/**
- * Initialize the configuration.
- *
- * This should be the first function in a sequence of calls to smbconf
- * functions:
- *
- * Upon success, this creates and returns the conf context
- * that should be passed around in subsequent calls to the other
- * smbconf functions.
- *
- * After the work with the configuration is completed, smbconf_shutdown()
- * should be called.
- */
-WERROR smbconf_init_internal(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
- const char *path, struct smbconf_ops *ops)
-{
- WERROR werr = WERR_OK;
- struct smbconf_ctx *ctx;
-
- if (conf_ctx == NULL) {
- return WERR_INVALID_PARAM;
- }
-
- ctx = TALLOC_ZERO_P(mem_ctx, struct smbconf_ctx);
- if (ctx == NULL) {
- return WERR_NOMEM;
- }
-
- ctx->ops = ops;
-
- werr = ctx->ops->init(ctx, path);
- if (!W_ERROR_IS_OK(werr)) {
- goto fail;
- }
-
- talloc_set_destructor(ctx, smbconf_destroy_ctx);
-
- *conf_ctx = ctx;
- return werr;
-
-fail:
- TALLOC_FREE(ctx);
- return werr;
-}
-
-
-/**
- * add a string to a talloced array of strings.
- */
-WERROR smbconf_add_string_to_array(TALLOC_CTX *mem_ctx,
- char ***array,
- uint32_t count,
- const char *string)
-{
- char **new_array = NULL;
-
- if (array == NULL) {
- return WERR_INVALID_PARAM;
- }
-
- new_array = TALLOC_REALLOC_ARRAY(mem_ctx, *array, char *, count + 1);
- if (new_array == NULL) {
- return WERR_NOMEM;
- }
-
- if (string == NULL) {
- new_array[count] = NULL;
- } else {
- new_array[count] = talloc_strdup(new_array, string);
- if (new_array[count] == NULL) {
- TALLOC_FREE(new_array);
- return WERR_NOMEM;
- }
- }
-
- *array = new_array;
-
- return WERR_OK;
-}
-
-bool smbconf_find_in_array(const char *string, char **list,
- uint32_t num_entries, uint32_t *entry)
-{
- uint32_t i;
-
- if (list == NULL) {
- return false;
- }
-
- for (i = 0; i < num_entries; i++) {
- if (((string == NULL) && (list[i] == NULL)) ||
- strequal(string, list[i]))
- {
- if (entry != NULL) {
- *entry = i;
- }
- return true;
- }
- }
-
- return false;
-}
-
-bool smbconf_reverse_find_in_array(const char *string, char **list,
- uint32_t num_entries, uint32_t *entry)
-{
- int32_t i;
-
- if ((string == NULL) || (list == NULL) || (num_entries == 0)) {
- return false;
- }
-
- for (i = num_entries - 1; i >= 0; i--) {
- if (strequal(string, list[i])) {
- if (entry != NULL) {
- *entry = i;
- }
- return true;
- }
- }
-
- return false;
-}
diff --git a/source3/lib/smbconf/testsuite.c b/source3/lib/smbconf/testsuite.c
index edc9a7ffac..3d3c2d0ff0 100644
--- a/source3/lib/smbconf/testsuite.c
+++ b/source3/lib/smbconf/testsuite.c
@@ -57,7 +57,7 @@ static bool test_get_includes(struct smbconf_ctx *ctx)
ret = true;
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return ret;
}
@@ -114,7 +114,7 @@ static bool test_set_get_includes(struct smbconf_ctx *ctx)
ret = true;
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return ret;
}
@@ -235,7 +235,7 @@ static bool torture_smbconf_txt(void)
printf("%s: text backend\n", ret ? "success" : "failure");
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return ret;
}
@@ -266,7 +266,7 @@ static bool torture_smbconf_reg(void)
printf("%s: registry backend\n", ret ? "success" : "failure");
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return ret;
}
@@ -315,6 +315,6 @@ int main(int argc, const char **argv)
ret = torture_smbconf();
done:
- TALLOC_FREE(mem_ctx);
+ talloc_free(mem_ctx);
return ret ? 0 : -1;
}
diff --git a/source3/modules/vfs_extd_audit.c b/source3/modules/vfs_extd_audit.c
index 7516cba1d3..d7c9d39c5e 100644
--- a/source3/modules/vfs_extd_audit.c
+++ b/source3/modules/vfs_extd_audit.c
@@ -132,8 +132,11 @@ static int audit_connect(vfs_handle_struct *handle, const char *svc, const char
openlog("smbd_audit", LOG_PID, audit_syslog_facility(handle));
- syslog(audit_syslog_priority(handle), "connect to service %s by user %s\n",
- svc, user);
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle),
+ "connect to service %s by user %s\n",
+ svc, user);
+ }
DEBUG(10, ("Connected to service %s as user %s\n",
svc, user));
@@ -144,7 +147,9 @@ static int audit_connect(vfs_handle_struct *handle, const char *svc, const char
static void audit_disconnect(vfs_handle_struct *handle)
{
- syslog(audit_syslog_priority(handle), "disconnected\n");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "disconnected\n");
+ }
DEBUG(10, ("Disconnected from VFS module extd_audit\n"));
SMB_VFS_NEXT_DISCONNECT(handle);
@@ -157,10 +162,12 @@ static SMB_STRUCT_DIR *audit_opendir(vfs_handle_struct *handle, const char *fnam
result = SMB_VFS_NEXT_OPENDIR(handle, fname, mask, attr);
- syslog(audit_syslog_priority(handle), "opendir %s %s%s\n",
- fname,
- (result == NULL) ? "failed: " : "",
- (result == NULL) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "opendir %s %s%s\n",
+ fname,
+ (result == NULL) ? "failed: " : "",
+ (result == NULL) ? strerror(errno) : "");
+ }
DEBUG(1, ("vfs_extd_audit: opendir %s %s %s\n",
fname,
(result == NULL) ? "failed: " : "",
@@ -172,13 +179,15 @@ static SMB_STRUCT_DIR *audit_opendir(vfs_handle_struct *handle, const char *fnam
static int audit_mkdir(vfs_handle_struct *handle, const char *path, mode_t mode)
{
int result;
-
+
result = SMB_VFS_NEXT_MKDIR(handle, path, mode);
-
- syslog(audit_syslog_priority(handle), "mkdir %s %s%s\n",
- path,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "mkdir %s %s%s\n",
+ path,
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(0, ("vfs_extd_audit: mkdir %s %s %s\n",
path,
(result < 0) ? "failed: " : "",
@@ -190,13 +199,15 @@ static int audit_mkdir(vfs_handle_struct *handle, const char *path, mode_t mode)
static int audit_rmdir(vfs_handle_struct *handle, const char *path)
{
int result;
-
+
result = SMB_VFS_NEXT_RMDIR(handle, path);
- syslog(audit_syslog_priority(handle), "rmdir %s %s%s\n",
- path,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "rmdir %s %s%s\n",
+ path,
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(0, ("vfs_extd_audit: rmdir %s %s %s\n",
path,
(result < 0) ? "failed: " : "",
@@ -208,14 +219,16 @@ static int audit_rmdir(vfs_handle_struct *handle, const char *path)
static int audit_open(vfs_handle_struct *handle, const char *fname, files_struct *fsp, int flags, mode_t mode)
{
int result;
-
+
result = SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
- syslog(audit_syslog_priority(handle), "open %s (fd %d) %s%s%s\n",
- fname, result,
- ((flags & O_WRONLY) || (flags & O_RDWR)) ? "for writing " : "",
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "open %s (fd %d) %s%s%s\n",
+ fname, result,
+ ((flags & O_WRONLY) || (flags & O_RDWR)) ? "for writing " : "",
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(2, ("vfs_extd_audit: open %s %s %s\n",
fname,
(result < 0) ? "failed: " : "",
@@ -227,13 +240,15 @@ static int audit_open(vfs_handle_struct *handle, const char *fname, files_struct
static int audit_close(vfs_handle_struct *handle, files_struct *fsp)
{
int result;
-
+
result = SMB_VFS_NEXT_CLOSE(handle, fsp);
- syslog(audit_syslog_priority(handle), "close fd %d %s%s\n",
- fsp->fh->fd,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "close fd %d %s%s\n",
+ fsp->fh->fd,
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(2, ("vfs_extd_audit: close fd %d %s %s\n",
fsp->fh->fd,
(result < 0) ? "failed: " : "",
@@ -245,31 +260,35 @@ static int audit_close(vfs_handle_struct *handle, files_struct *fsp)
static int audit_rename(vfs_handle_struct *handle, const char *oldname, const char *newname)
{
int result;
-
+
result = SMB_VFS_NEXT_RENAME(handle, oldname, newname);
- syslog(audit_syslog_priority(handle), "rename %s -> %s %s%s\n",
- oldname, newname,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "rename %s -> %s %s%s\n",
+ oldname, newname,
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(1, ("vfs_extd_audit: rename old: %s newname: %s %s %s\n",
oldname, newname,
(result < 0) ? "failed: " : "",
(result < 0) ? strerror(errno) : ""));
- return result;
+ return result;
}
static int audit_unlink(vfs_handle_struct *handle, const char *path)
{
int result;
-
+
result = SMB_VFS_NEXT_UNLINK(handle, path);
- syslog(audit_syslog_priority(handle), "unlink %s %s%s\n",
- path,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "unlink %s %s%s\n",
+ path,
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(0, ("vfs_extd_audit: unlink %s %s %s\n",
path,
(result < 0) ? "failed: " : "",
@@ -284,10 +303,12 @@ static int audit_chmod(vfs_handle_struct *handle, const char *path, mode_t mode)
result = SMB_VFS_NEXT_CHMOD(handle, path, mode);
- syslog(audit_syslog_priority(handle), "chmod %s mode 0x%x %s%s\n",
- path, mode,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "chmod %s mode 0x%x %s%s\n",
+ path, mode,
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(1, ("vfs_extd_audit: chmod %s mode 0x%x %s %s\n",
path, mode,
(result < 0) ? "failed: " : "",
@@ -299,13 +320,15 @@ static int audit_chmod(vfs_handle_struct *handle, const char *path, mode_t mode)
static int audit_chmod_acl(vfs_handle_struct *handle, const char *path, mode_t mode)
{
int result;
-
+
result = SMB_VFS_NEXT_CHMOD_ACL(handle, path, mode);
- syslog(audit_syslog_priority(handle), "chmod_acl %s mode 0x%x %s%s\n",
- path, mode,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "chmod_acl %s mode 0x%x %s%s\n",
+ path, mode,
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(1, ("vfs_extd_audit: chmod_acl %s mode 0x%x %s %s\n",
path, mode,
(result < 0) ? "failed: " : "",
@@ -317,13 +340,15 @@ static int audit_chmod_acl(vfs_handle_struct *handle, const char *path, mode_t m
static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
{
int result;
-
+
result = SMB_VFS_NEXT_FCHMOD(handle, fsp, mode);
- syslog(audit_syslog_priority(handle), "fchmod %s mode 0x%x %s%s\n",
- fsp->fsp_name, mode,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "fchmod %s mode 0x%x %s%s\n",
+ fsp->fsp_name, mode,
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(1, ("vfs_extd_audit: fchmod %s mode 0x%x %s %s",
fsp->fsp_name, mode,
(result < 0) ? "failed: " : "",
@@ -335,13 +360,15 @@ static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mod
static int audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
{
int result;
-
+
result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode);
- syslog(audit_syslog_priority(handle), "fchmod_acl %s mode 0x%x %s%s\n",
- fsp->fsp_name, mode,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ if (lp_syslog() > 0) {
+ syslog(audit_syslog_priority(handle), "fchmod_acl %s mode 0x%x %s%s\n",
+ fsp->fsp_name, mode,
+ (result < 0) ? "failed: " : "",
+ (result < 0) ? strerror(errno) : "");
+ }
DEBUG(1, ("vfs_extd_audit: fchmod_acl %s mode 0x%x %s %s",
fsp->fsp_name, mode,
(result < 0) ? "failed: " : "",