libsmbconf: add smbconf_create_set_share
[ddiss/samba.git] / source3 / lib / smbconf / smbconf_reg.c
index ec6b93fd09dc2c50545479813eed14fbaa5415dd..1853f0ee315681d44367b55660b315e5fe0ca516 100644 (file)
@@ -894,6 +894,37 @@ static sbcErr smbconf_reg_create_share(struct smbconf_ctx *ctx,
        return err;
 }
 
+/**
+ * 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.
  */
@@ -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,