summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2008-04-08 01:56:32 +0200
committerMichael Adam <obnox@samba.org>2008-04-10 01:28:57 +0200
commit8e9766289972ecf3f4bcaa1a9ed118bba5fea208 (patch)
treec598d5fde42d7f62601c5512cd9ad4bb06957dfc
parentdf6b68b07352a7265a3b6197a9334df77e44d0d2 (diff)
downloadsamba-8e9766289972ecf3f4bcaa1a9ed118bba5fea208.tar.gz
samba-8e9766289972ecf3f4bcaa1a9ed118bba5fea208.tar.bz2
samba-8e9766289972ecf3f4bcaa1a9ed118bba5fea208.zip
libsmbconf: add get_includes() and set_includes() to the API.
Includes have to get a special treatment, at least for registry. Includes are not like other smbconf parameters: they are some kind of metainformation. "include" has two effects when stated twice so it can not be stored boldly into registry, since there can only be one value named "include" in registry per key. I will provide special handling for includes for the registry backend. This patch provides the necessary methods in the smbconf API. Michael (This used to be commit e86eb375d9f83f73aeea0a16c8b43e2ef21a6e20)
-rw-r--r--source3/lib/smbconf/smbconf.c22
-rw-r--r--source3/lib/smbconf/smbconf.h6
-rw-r--r--source3/lib/smbconf/smbconf_private.h6
-rw-r--r--source3/lib/smbconf/smbconf_reg.c21
-rw-r--r--source3/lib/smbconf/smbconf_txt_simple.c20
5 files changed, 73 insertions, 2 deletions
diff --git a/source3/lib/smbconf/smbconf.c b/source3/lib/smbconf/smbconf.c
index 453e228c2c..1ce761ebd4 100644
--- a/source3/lib/smbconf/smbconf.c
+++ b/source3/lib/smbconf/smbconf.c
@@ -335,3 +335,25 @@ WERROR smbconf_delete_global_parameter(struct smbconf_ctx *ctx,
return werr;
}
+
+WERROR smbconf_get_includes(struct smbconf_ctx *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, service, num_includes, includes);
+}
+
+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);
+}
diff --git a/source3/lib/smbconf/smbconf.h b/source3/lib/smbconf/smbconf.h
index d333f6c88c..626d48e962 100644
--- a/source3/lib/smbconf/smbconf.h
+++ b/source3/lib/smbconf/smbconf.h
@@ -86,5 +86,11 @@ 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,
+ const char *service,
+ uint32_t *num_includes, char ***includes);
+WERROR smbconf_set_includes(struct smbconf_ctx *ctx,
+ const char *service,
+ uint32_t num_includes, const char **includes);
#endif /* _LIBSMBCONF_H_ */
diff --git a/source3/lib/smbconf/smbconf_private.h b/source3/lib/smbconf/smbconf_private.h
index 44229e26ec..1f26fca1ea 100644
--- a/source3/lib/smbconf/smbconf_private.h
+++ b/source3/lib/smbconf/smbconf_private.h
@@ -51,6 +51,12 @@ struct smbconf_ops {
char **valstr);
WERROR (*delete_parameter)(struct smbconf_ctx *ctx,
const char *service, const char *param);
+ WERROR (*get_includes)(struct smbconf_ctx *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);
};
struct smbconf_ctx {
diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c
index 6d24aecbff..0f499e3146 100644
--- a/source3/lib/smbconf/smbconf_reg.c
+++ b/source3/lib/smbconf/smbconf_reg.c
@@ -776,6 +776,23 @@ done:
return werr;
}
+static WERROR smbconf_reg_get_includes(struct smbconf_ctx *ctx,
+ const char *service,
+ uint32_t *num_includes,
+ char ***includes)
+{
+ return WERR_NOT_SUPPORTED;
+}
+
+static WERROR smbconf_reg_set_includes(struct smbconf_ctx *ctx,
+ const char *service,
+ uint32_t num_includes,
+ const char **includes)
+{
+ return WERR_NOT_SUPPORTED;
+}
+
+
struct smbconf_ops smbconf_ops_reg = {
.init = smbconf_reg_init,
.shutdown = smbconf_reg_shutdown,
@@ -790,7 +807,9 @@ struct smbconf_ops smbconf_ops_reg = {
.delete_share = smbconf_reg_delete_share,
.set_parameter = smbconf_reg_set_parameter,
.get_parameter = smbconf_reg_get_parameter,
- .delete_parameter = smbconf_reg_delete_parameter
+ .delete_parameter = smbconf_reg_delete_parameter,
+ .get_includes = smbconf_reg_get_includes,
+ .set_includes = smbconf_reg_set_includes,
};
diff --git a/source3/lib/smbconf/smbconf_txt_simple.c b/source3/lib/smbconf/smbconf_txt_simple.c
index e87cd04d16..9273b7947b 100644
--- a/source3/lib/smbconf/smbconf_txt_simple.c
+++ b/source3/lib/smbconf/smbconf_txt_simple.c
@@ -494,6 +494,22 @@ static WERROR smbconf_txt_delete_parameter(struct smbconf_ctx *ctx,
return WERR_NOT_SUPPORTED;
}
+static WERROR smbconf_txt_get_includes(struct smbconf_ctx *ctx,
+ const char *service,
+ uint32_t *num_includes,
+ char ***includes)
+{
+ return WERR_NOT_SUPPORTED;
+}
+
+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 struct smbconf_ops smbconf_ops_txt = {
.init = smbconf_txt_init,
.shutdown = smbconf_txt_shutdown,
@@ -508,7 +524,9 @@ static struct smbconf_ops smbconf_ops_txt = {
.delete_share = smbconf_txt_delete_share,
.set_parameter = smbconf_txt_set_parameter,
.get_parameter = smbconf_txt_get_parameter,
- .delete_parameter = smbconf_txt_delete_parameter
+ .delete_parameter = smbconf_txt_delete_parameter,
+ .get_includes = smbconf_txt_get_includes,
+ .set_includes = smbconf_txt_set_includes,
};