[PATCH] libsmbconf: add smbconf_create_set_share
Michael Adam
obnox at samba.org
Tue May 21 09:52:37 MDT 2013
Hi David,
On 2013-05-16 at 14:42 +0300, Alexander Bokovoy wrote:
> On Thu, May 16, 2013 at 12:55 PM, David Disseldorp <ddiss at samba.org> wrote:
>
> > This call creates a new share definition, using the parameters provided
> > with a smbconf_service structure.
> > Such an interface allows for simple cloning of services with:
> > smbconf_get_share(conf_ctx, mem_ctx, base_sharename, &base_service_def);
> > base_service_def->name = clone_sharename;
> > smbconf_create_set_share(conf_ctx, clone_sharename, base_service_def);
Attached find a patchset that bases on your patch and
changes the code according to our discussion at sambaXP:
- moves the implementation from the reg backend to the
central smbconf.c file
- wraps the action in a transaction
- removes the smbconf_ops function for create_set_share again
If you are happy with the changes, we could squash them
together with your initial patch and submit this under
your copyright and
Pair-Programmed-With: /me
and signed-off-by /me
additional patches:
- improve some doxygen for the transaction calls.
- change "net conf import" to use the new smbconf_create_set_share()
The patches are also in my master-libsmbclient branch:
https://gitweb.samba.org/?p=obnox/samba/samba-obnox.git;a=shortlog;h=refs/heads/master-libsmbconf
> Looks OK but I thought to ask for proper ABI handling for libsmbconf since
> it is public library. Should we actually increment its ABI version (it has
> none right now) with this change?
Not certain if we want to publish it.
What would be the advantages/disadvantages?
If yes, the above branch contains a version bump patch.
Is that all that is needed?
Cheers - Michael
-------------- next part --------------
From 8ab008ea53edf1f3e8a23f4304c8091a0417f8e5 Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Mon, 20 May 2013 23:30:14 +0200
Subject: [PATCH 1/8] libsmbconf: fix documentation of transaction calls.
Signed-off-by: Michael Adam <obnox at samba.org>
---
lib/smbconf/smbconf.h | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/lib/smbconf/smbconf.h b/lib/smbconf/smbconf.h
index 7f62b06..fcb1388 100644
--- a/lib/smbconf/smbconf.h
+++ b/lib/smbconf/smbconf.h
@@ -447,7 +447,8 @@ sbcErr smbconf_delete_global_includes(struct smbconf_ctx *ctx);
/**
* @brief Start a transaction on the configuration backend.
*
- * This is to speed up writes to the registry based backend.
+ * Transactions are exposed in order to make it possible
+ * to create atomic compound writing commands.
*
* @param[in] ctx The smbconf context to start the transaction.
*
@@ -459,7 +460,8 @@ sbcErr smbconf_transaction_start(struct smbconf_ctx *ctx);
/**
* @brief Commit a transaction on the configuration backend.
*
- * This is to speed up writes to the registry based backend.
+ * Transactions are exposed in order to make it possible
+ * to create atomic compound writing commands.
*
* @param[in] ctx The smbconf context to commit the transaction.
*
@@ -473,6 +475,9 @@ sbcErr smbconf_transaction_commit(struct smbconf_ctx *ctx);
/**
* @brief Cancel a transaction on the configuration backend.
*
+ * Transactions are exposed in order to make it possible
+ * to create atomic compound writing commands.
+ *
* @param[in] ctx The smbconf context to cancel the transaction.
*
* @return SBC_ERR_OK on success, a corresponding sbcErr if an
--
1.7.9.5
From d7c43ff7a8c89be3ae85e4c151c0f0e514c11c06 Mon Sep 17 00:00:00 2001
From: David Disseldorp <ddiss at samba.org>
Date: Thu, 16 May 2013 11:55:04 +0200
Subject: [PATCH 2/8] libsmbconf: add smbconf_create_set_share
This call creates a new share definition, using the parameters provided
with a smbconf_service structure.
Such an interface allows for simple cloning of services with:
smbconf_get_share(conf_ctx, mem_ctx, base_sharename, &base_service_def);
base_service_def->name = clone_sharename;
smbconf_create_set_share(conf_ctx, clone_sharename, base_service_def);
Signed-off-by: David Disseldorp <ddiss at samba.org>
---
lib/smbconf/smbconf.c | 14 ++++++++++++++
lib/smbconf/smbconf.h | 16 ++++++++++++++++
lib/smbconf/smbconf_private.h | 3 +++
lib/smbconf/smbconf_txt.c | 11 +++++++++++
source3/lib/smbconf/smbconf_reg.c | 32 ++++++++++++++++++++++++++++++++
5 files changed, 76 insertions(+)
diff --git a/lib/smbconf/smbconf.c b/lib/smbconf/smbconf.c
index e0441ed..37048a4 100644
--- a/lib/smbconf/smbconf.c
+++ b/lib/smbconf/smbconf.c
@@ -231,6 +231,20 @@ sbcErr smbconf_create_share(struct smbconf_ctx *ctx,
}
/**
+ * create and set the definition for a new share (service).
+ */
+sbcErr smbconf_create_set_share(struct smbconf_ctx *ctx,
+ const char *servicename,
+ struct smbconf_service *service)
+{
+ if ((servicename != NULL) && smbconf_share_exists(ctx, servicename)) {
+ return SBC_ERR_FILE_EXISTS;
+ }
+
+ return ctx->ops->create_set_share(ctx, servicename, service);
+}
+
+/**
* get a definition of a share (service) from configuration.
*/
sbcErr smbconf_get_share(struct smbconf_ctx *ctx,
diff --git a/lib/smbconf/smbconf.h b/lib/smbconf/smbconf.h
index fcb1388..53661dd 100644
--- a/lib/smbconf/smbconf.h
+++ b/lib/smbconf/smbconf.h
@@ -205,6 +205,22 @@ bool smbconf_share_exists(struct smbconf_ctx *ctx, const char *servicename);
sbcErr smbconf_create_share(struct smbconf_ctx *ctx, const char *servicename);
/**
+ * @brief create and set the definition for a new service.
+ *
+ * @param[in] ctx The smbconf context to use.
+ *
+ * @param[in] servicename The name of the service to add.
+ *
+ * @param[in] service The definition for the added service.
+ *
+ * @return SBC_ERR_OK on success, a corresponding sbcErr if an
+ * error occured.
+ */
+sbcErr smbconf_create_set_share(struct smbconf_ctx *ctx,
+ const char *servicename,
+ struct smbconf_service *service);
+
+/**
* @brief Get a definition of a share (service) from configuration.
*
* @param[in] ctx The smbconf context to use.
diff --git a/lib/smbconf/smbconf_private.h b/lib/smbconf/smbconf_private.h
index e768c30..0205ce9 100644
--- a/lib/smbconf/smbconf_private.h
+++ b/lib/smbconf/smbconf_private.h
@@ -42,6 +42,9 @@ struct smbconf_ops {
char ***share_names);
bool (*share_exists)(struct smbconf_ctx *ctx, const char *service);
sbcErr (*create_share)(struct smbconf_ctx *ctx, const char *service);
+ sbcErr (*create_set_share)(struct smbconf_ctx *ctx,
+ const char *servicename,
+ struct smbconf_service *service);
sbcErr (*get_share)(struct smbconf_ctx *ctx,
TALLOC_CTX *mem_ctx,
const char *servicename,
diff --git a/lib/smbconf/smbconf_txt.c b/lib/smbconf/smbconf_txt.c
index 5c4bd27..4432346 100644
--- a/lib/smbconf/smbconf_txt.c
+++ b/lib/smbconf/smbconf_txt.c
@@ -392,6 +392,16 @@ static sbcErr smbconf_txt_create_share(struct smbconf_ctx *ctx,
}
/**
+ * create and set the definition for a new share (service).
+ */
+static sbcErr smbconf_txt_create_set_share(struct smbconf_ctx *ctx,
+ const char *servicename,
+ struct smbconf_service *service)
+{
+ return SBC_ERR_NOT_SUPPORTED;
+}
+
+/**
* get a definition of a share (service) from configuration.
*/
static sbcErr smbconf_txt_get_share(struct smbconf_ctx *ctx,
@@ -635,6 +645,7 @@ static struct smbconf_ops smbconf_ops_txt = {
.get_share_names = smbconf_txt_get_share_names,
.share_exists = smbconf_txt_share_exists,
.create_share = smbconf_txt_create_share,
+ .create_set_share = smbconf_txt_create_set_share,
.get_share = smbconf_txt_get_share,
.delete_share = smbconf_txt_delete_share,
.set_parameter = smbconf_txt_set_parameter,
diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c
index ec6b93f..1853f0e 100644
--- a/source3/lib/smbconf/smbconf_reg.c
+++ b/source3/lib/smbconf/smbconf_reg.c
@@ -895,6 +895,37 @@ static sbcErr smbconf_reg_create_share(struct smbconf_ctx *ctx,
}
/**
+ * create and set the definition for a new share (service).
+ */
+static sbcErr smbconf_reg_create_set_share(struct smbconf_ctx *ctx,
+ const char *servicename,
+ struct smbconf_service *service)
+{
+ sbcErr err;
+ struct registry_key *key = NULL;
+ int i;
+ TALLOC_CTX *tmp_ctx = talloc_stackframe();
+
+ err = smbconf_reg_create_service_key(tmp_ctx, ctx,
+ servicename, &key);
+ if (!SBC_ERROR_IS_OK(err)) {
+ goto done;
+ }
+
+ for (i = 0; i < service->num_params; i++) {
+ err = smbconf_reg_set_value(key, service->param_names[i],
+ service->param_values[i]);
+ if (!SBC_ERROR_IS_OK(err)) {
+ goto done;
+ }
+ }
+
+done:
+ talloc_free(tmp_ctx);
+ return err;
+}
+
+/**
* get a definition of a share (service) from configuration.
*/
static sbcErr smbconf_reg_get_share(struct smbconf_ctx *ctx,
@@ -1215,6 +1246,7 @@ struct smbconf_ops smbconf_ops_reg = {
.get_share_names = smbconf_reg_get_share_names,
.share_exists = smbconf_reg_share_exists,
.create_share = smbconf_reg_create_share,
+ .create_set_share = smbconf_reg_create_set_share,
.get_share = smbconf_reg_get_share,
.delete_share = smbconf_reg_delete_share,
.set_parameter = smbconf_reg_set_parameter,
--
1.7.9.5
From d015ef6a4392db4b627412fec969884ad8041b23 Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Tue, 21 May 2013 14:25:27 +0200
Subject: [PATCH 3/8] TODO: libsmbconf: remove "servicename" parameter from
create_set_share()
This is redundant since it is in the service struct.
Signed-off-by: Michael Adam <obnox at samba.org>
---
lib/smbconf/smbconf.c | 6 +++---
lib/smbconf/smbconf.h | 3 ---
lib/smbconf/smbconf_private.h | 1 -
lib/smbconf/smbconf_txt.c | 1 -
source3/lib/smbconf/smbconf_reg.c | 3 +--
5 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/lib/smbconf/smbconf.c b/lib/smbconf/smbconf.c
index 37048a4..ae43532 100644
--- a/lib/smbconf/smbconf.c
+++ b/lib/smbconf/smbconf.c
@@ -234,14 +234,14 @@ sbcErr smbconf_create_share(struct smbconf_ctx *ctx,
* create and set the definition for a new share (service).
*/
sbcErr smbconf_create_set_share(struct smbconf_ctx *ctx,
- const char *servicename,
struct smbconf_service *service)
{
- if ((servicename != NULL) && smbconf_share_exists(ctx, servicename)) {
+ if ((service->name != NULL) && smbconf_share_exists(ctx, service->name))
+ {
return SBC_ERR_FILE_EXISTS;
}
- return ctx->ops->create_set_share(ctx, servicename, service);
+ return ctx->ops->create_set_share(ctx, service);
}
/**
diff --git a/lib/smbconf/smbconf.h b/lib/smbconf/smbconf.h
index 53661dd..69a55db 100644
--- a/lib/smbconf/smbconf.h
+++ b/lib/smbconf/smbconf.h
@@ -209,15 +209,12 @@ sbcErr smbconf_create_share(struct smbconf_ctx *ctx, const char *servicename);
*
* @param[in] ctx The smbconf context to use.
*
- * @param[in] servicename The name of the service to add.
- *
* @param[in] service The definition for the added service.
*
* @return SBC_ERR_OK on success, a corresponding sbcErr if an
* error occured.
*/
sbcErr smbconf_create_set_share(struct smbconf_ctx *ctx,
- const char *servicename,
struct smbconf_service *service);
/**
diff --git a/lib/smbconf/smbconf_private.h b/lib/smbconf/smbconf_private.h
index 0205ce9..49e97bc 100644
--- a/lib/smbconf/smbconf_private.h
+++ b/lib/smbconf/smbconf_private.h
@@ -43,7 +43,6 @@ struct smbconf_ops {
bool (*share_exists)(struct smbconf_ctx *ctx, const char *service);
sbcErr (*create_share)(struct smbconf_ctx *ctx, const char *service);
sbcErr (*create_set_share)(struct smbconf_ctx *ctx,
- const char *servicename,
struct smbconf_service *service);
sbcErr (*get_share)(struct smbconf_ctx *ctx,
TALLOC_CTX *mem_ctx,
diff --git a/lib/smbconf/smbconf_txt.c b/lib/smbconf/smbconf_txt.c
index 4432346..265290b 100644
--- a/lib/smbconf/smbconf_txt.c
+++ b/lib/smbconf/smbconf_txt.c
@@ -395,7 +395,6 @@ static sbcErr smbconf_txt_create_share(struct smbconf_ctx *ctx,
* create and set the definition for a new share (service).
*/
static sbcErr smbconf_txt_create_set_share(struct smbconf_ctx *ctx,
- const char *servicename,
struct smbconf_service *service)
{
return SBC_ERR_NOT_SUPPORTED;
diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c
index 1853f0e..70a147e 100644
--- a/source3/lib/smbconf/smbconf_reg.c
+++ b/source3/lib/smbconf/smbconf_reg.c
@@ -898,7 +898,6 @@ static sbcErr smbconf_reg_create_share(struct smbconf_ctx *ctx,
* create and set the definition for a new share (service).
*/
static sbcErr smbconf_reg_create_set_share(struct smbconf_ctx *ctx,
- const char *servicename,
struct smbconf_service *service)
{
sbcErr err;
@@ -907,7 +906,7 @@ static sbcErr smbconf_reg_create_set_share(struct smbconf_ctx *ctx,
TALLOC_CTX *tmp_ctx = talloc_stackframe();
err = smbconf_reg_create_service_key(tmp_ctx, ctx,
- servicename, &key);
+ service->name, &key);
if (!SBC_ERROR_IS_OK(err)) {
goto done;
}
--
1.7.9.5
From 68afb3f13049da8a9ea1aa89ccee22c12d19b0e4 Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Tue, 21 May 2013 14:26:12 +0200
Subject: [PATCH 4/8] TODO: libsmbconf: implementation
smbconf_create_set_share() inside smbconf.c
This is a higher level compound task that need not be in the backends.
This implementation is wrapped in a transaction and uses smbconf api functions
create_share() and set_parameter() to do the work.
Signed-off-by: Michael Adam <obnox at samba.org>
---
lib/smbconf/smbconf.c | 39 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/lib/smbconf/smbconf.c b/lib/smbconf/smbconf.c
index ae43532..c9399c3 100644
--- a/lib/smbconf/smbconf.c
+++ b/lib/smbconf/smbconf.c
@@ -236,12 +236,49 @@ sbcErr smbconf_create_share(struct smbconf_ctx *ctx,
sbcErr smbconf_create_set_share(struct smbconf_ctx *ctx,
struct smbconf_service *service)
{
+ sbcErr err, err2;
+ int i;
+
if ((service->name != NULL) && smbconf_share_exists(ctx, service->name))
{
return SBC_ERR_FILE_EXISTS;
}
- return ctx->ops->create_set_share(ctx, service);
+ err = smbconf_transaction_start(ctx);
+ if (!SBC_ERROR_IS_OK(err)) {
+ return err;
+ }
+
+ err = smbconf_create_share(ctx, service->name);
+ if (!SBC_ERROR_IS_OK(err)) {
+ goto cancel;
+ }
+
+ for (i = 0; i < service->num_params; i++) {
+ err = smbconf_set_parameter(ctx,
+ service->name,
+ service->param_names[i],
+ service->param_values[i]);
+ if (!SBC_ERROR_IS_OK(err)) {
+ goto cancel;
+ }
+ }
+
+ err = smbconf_transaction_commit(ctx);
+ if (!SBC_ERROR_IS_OK(err)) {
+ return err;
+ }
+
+ return SBC_ERR_OK;
+
+cancel:
+ err2 = smbconf_transaction_cancel(ctx);
+ if (!SBC_ERROR_IS_OK(err2)) {
+ DEBUG(5, (__location__ ": Error cancelling transaction: %s\n",
+ sbcErrorString(err2)));
+ }
+
+ return err;
}
/**
--
1.7.9.5
From d943e0778628845c3cd6fc74fbd01689c34431b0 Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Tue, 21 May 2013 14:29:46 +0200
Subject: [PATCH 5/8] TODO: libsmbconf: remove create_set_share from the ops
(and remove implementations)
This is now implemented in the smbconf.c code.
Signed-off-by: Michael Adam <obnox at samba.org>
---
lib/smbconf/smbconf_private.h | 2 --
lib/smbconf/smbconf_txt.c | 10 ----------
source3/lib/smbconf/smbconf_reg.c | 31 -------------------------------
3 files changed, 43 deletions(-)
diff --git a/lib/smbconf/smbconf_private.h b/lib/smbconf/smbconf_private.h
index 49e97bc..e768c30 100644
--- a/lib/smbconf/smbconf_private.h
+++ b/lib/smbconf/smbconf_private.h
@@ -42,8 +42,6 @@ struct smbconf_ops {
char ***share_names);
bool (*share_exists)(struct smbconf_ctx *ctx, const char *service);
sbcErr (*create_share)(struct smbconf_ctx *ctx, const char *service);
- sbcErr (*create_set_share)(struct smbconf_ctx *ctx,
- struct smbconf_service *service);
sbcErr (*get_share)(struct smbconf_ctx *ctx,
TALLOC_CTX *mem_ctx,
const char *servicename,
diff --git a/lib/smbconf/smbconf_txt.c b/lib/smbconf/smbconf_txt.c
index 265290b..5c4bd27 100644
--- a/lib/smbconf/smbconf_txt.c
+++ b/lib/smbconf/smbconf_txt.c
@@ -392,15 +392,6 @@ static sbcErr smbconf_txt_create_share(struct smbconf_ctx *ctx,
}
/**
- * create and set the definition for a new share (service).
- */
-static sbcErr smbconf_txt_create_set_share(struct smbconf_ctx *ctx,
- struct smbconf_service *service)
-{
- return SBC_ERR_NOT_SUPPORTED;
-}
-
-/**
* get a definition of a share (service) from configuration.
*/
static sbcErr smbconf_txt_get_share(struct smbconf_ctx *ctx,
@@ -644,7 +635,6 @@ static struct smbconf_ops smbconf_ops_txt = {
.get_share_names = smbconf_txt_get_share_names,
.share_exists = smbconf_txt_share_exists,
.create_share = smbconf_txt_create_share,
- .create_set_share = smbconf_txt_create_set_share,
.get_share = smbconf_txt_get_share,
.delete_share = smbconf_txt_delete_share,
.set_parameter = smbconf_txt_set_parameter,
diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c
index 70a147e..ec6b93f 100644
--- a/source3/lib/smbconf/smbconf_reg.c
+++ b/source3/lib/smbconf/smbconf_reg.c
@@ -895,36 +895,6 @@ static sbcErr smbconf_reg_create_share(struct smbconf_ctx *ctx,
}
/**
- * create and set the definition for a new share (service).
- */
-static sbcErr smbconf_reg_create_set_share(struct smbconf_ctx *ctx,
- struct smbconf_service *service)
-{
- sbcErr err;
- struct registry_key *key = NULL;
- int i;
- TALLOC_CTX *tmp_ctx = talloc_stackframe();
-
- err = smbconf_reg_create_service_key(tmp_ctx, ctx,
- service->name, &key);
- if (!SBC_ERROR_IS_OK(err)) {
- goto done;
- }
-
- for (i = 0; i < service->num_params; i++) {
- err = smbconf_reg_set_value(key, service->param_names[i],
- service->param_values[i]);
- if (!SBC_ERROR_IS_OK(err)) {
- goto done;
- }
- }
-
-done:
- talloc_free(tmp_ctx);
- return err;
-}
-
-/**
* get a definition of a share (service) from configuration.
*/
static sbcErr smbconf_reg_get_share(struct smbconf_ctx *ctx,
@@ -1245,7 +1215,6 @@ struct smbconf_ops smbconf_ops_reg = {
.get_share_names = smbconf_reg_get_share_names,
.share_exists = smbconf_reg_share_exists,
.create_share = smbconf_reg_create_share,
- .create_set_share = smbconf_reg_create_set_share,
.get_share = smbconf_reg_get_share,
.delete_share = smbconf_reg_delete_share,
.set_parameter = smbconf_reg_set_parameter,
--
1.7.9.5
From de00e9b41848e6b6513c5008500f3024539cdeef Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Tue, 21 May 2013 16:49:58 +0200
Subject: [PATCH 6/8] TODO: libsmbconf: add treatment of includes to
smbconf_create_set_share()
Signed-off-by: Michael Adam <obnox at samba.org>
---
lib/smbconf/smbconf.c | 44 +++++++++++++++++++++++++++++++++++---------
1 file changed, 35 insertions(+), 9 deletions(-)
diff --git a/lib/smbconf/smbconf.c b/lib/smbconf/smbconf.c
index c9399c3..27d36ca 100644
--- a/lib/smbconf/smbconf.c
+++ b/lib/smbconf/smbconf.c
@@ -238,6 +238,9 @@ sbcErr smbconf_create_set_share(struct smbconf_ctx *ctx,
{
sbcErr err, err2;
int i;
+ uint32_t num_includes = 0;
+ char **includes = NULL;
+ TALLOC_CTX *tmp_ctx = NULL;
if ((service->name != NULL) && smbconf_share_exists(ctx, service->name))
{
@@ -249,27 +252,48 @@ sbcErr smbconf_create_set_share(struct smbconf_ctx *ctx,
return err;
}
+ tmp_ctx = talloc_stackframe();
+
err = smbconf_create_share(ctx, service->name);
if (!SBC_ERROR_IS_OK(err)) {
goto cancel;
}
for (i = 0; i < service->num_params; i++) {
- err = smbconf_set_parameter(ctx,
- service->name,
- service->param_names[i],
- service->param_values[i]);
- if (!SBC_ERROR_IS_OK(err)) {
- goto cancel;
+ if (strequal(service->param_names[i], "include")) {
+ includes = talloc_realloc(tmp_ctx, includes, char *,
+ num_includes+1);
+ if (includes == NULL) {
+ err = SBC_ERR_NOMEM;
+ goto cancel;
+ }
+ includes[num_includes] = talloc_strdup(includes,
+ service->param_values[i]);
+ if (includes[num_includes] == NULL) {
+ err = SBC_ERR_NOMEM;
+ goto cancel;
+ }
+ num_includes++;
+ } else {
+ err = smbconf_set_parameter(ctx,
+ service->name,
+ service->param_names[i],
+ service->param_values[i]);
+ if (!SBC_ERROR_IS_OK(err)) {
+ goto cancel;
+ }
}
}
- err = smbconf_transaction_commit(ctx);
+ err = smbconf_set_includes(ctx, service->name, num_includes,
+ (const char **)includes);
if (!SBC_ERROR_IS_OK(err)) {
- return err;
+ goto cancel;
}
- return SBC_ERR_OK;
+ err = smbconf_transaction_commit(ctx);
+
+ goto done;
cancel:
err2 = smbconf_transaction_cancel(ctx);
@@ -278,6 +302,8 @@ cancel:
sbcErrorString(err2)));
}
+done:
+ talloc_free(tmp_ctx);
return err;
}
--
1.7.9.5
From faf259d8b7dd05722c9ed3d0354d2f7da6875f43 Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Tue, 21 May 2013 16:50:49 +0200
Subject: [PATCH 7/8] net: use smbconf_create_set_share() in "net conf import"
Signed-off-by: Michael Adam <obnox at samba.org>
---
source3/utils/net_conf.c | 49 ++--------------------------------------------
1 file changed, 2 insertions(+), 47 deletions(-)
diff --git a/source3/utils/net_conf.c b/source3/utils/net_conf.c
index 60588c0..e43cd12 100644
--- a/source3/utils/net_conf.c
+++ b/source3/utils/net_conf.c
@@ -179,13 +179,10 @@ static sbcErr import_process_service(struct net_context *c,
struct smbconf_ctx *conf_ctx,
struct smbconf_service *service)
{
- uint32_t idx;
sbcErr err = SBC_ERR_OK;
- uint32_t num_includes = 0;
- char **includes = NULL;
- TALLOC_CTX *mem_ctx = talloc_stackframe();
if (c->opt_testmode) {
+ uint32_t idx;
const char *indent = "";
if (service->name != NULL) {
d_printf("[%s]\n", service->name);
@@ -206,52 +203,10 @@ static sbcErr import_process_service(struct net_context *c,
goto done;
}
}
- err = smbconf_create_share(conf_ctx, service->name);
- if (!SBC_ERROR_IS_OK(err)) {
- goto done;
- }
- for (idx = 0; idx < service->num_params; idx ++) {
- if (strequal(service->param_names[idx], "include")) {
- includes = talloc_realloc(mem_ctx,
- includes,
- char *,
- num_includes+1);
- if (includes == NULL) {
- err = SBC_ERR_NOMEM;
- goto done;
- }
- includes[num_includes] = talloc_strdup(includes,
- service->param_values[idx]);
- if (includes[num_includes] == NULL) {
- err = SBC_ERR_NOMEM;
- goto done;
- }
- num_includes++;
- } else {
- err = smbconf_set_parameter(conf_ctx,
- service->name,
- service->param_names[idx],
- service->param_values[idx]);
- if (!SBC_ERROR_IS_OK(err)) {
- d_fprintf(stderr,
- _("Error in section [%s], parameter \"%s\": %s\n"),
- service->name, service->param_names[idx],
- sbcErrorString(err));
- goto done;
- }
- }
- }
+ err = smbconf_create_set_share(conf_ctx, service);
- err = smbconf_set_includes(conf_ctx, service->name, num_includes,
- (const char **)includes);
- if (!SBC_ERROR_IS_OK(err)) {
- goto done;
- }
-
- err = SBC_ERR_OK;
done:
- TALLOC_FREE(mem_ctx);
return err;
}
--
1.7.9.5
From 8f1b54ba489197744ad8eb400d6a5100657bedbe Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Tue, 21 May 2013 17:12:24 +0200
Subject: [PATCH 8/8] libsmbconf: bump version number of the smbconf library
to 1
Signed-off-by: Michael Adam <obnox at samba.org>
---
source3/wscript_build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source3/wscript_build b/source3/wscript_build
index 0a85653..00ceeb3 100755
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -943,7 +943,7 @@ bld.SAMBA3_LIBRARY('smbconf',
util_reg''',
public_headers='../lib/smbconf/smbconf.h',
pc_files=[],
- vnum='0')
+ vnum='1')
bld.SAMBA3_LIBRARY('smbd_conn',
source='smbd/conn.c',
--
1.7.9.5
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 206 bytes
Desc: Digital signature
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20130521/b8c1689b/attachment.pgp>
More information about the samba-technical
mailing list