libsmbconf: Convert smbconf_get_parameter() to sbcErr.
[gd/samba-autobuild/.git] / lib / smbconf / smbconf.c
index d723f0b1408e25493d49d656606d1adb3b0d7ae0..02c49cc877dbb885fb56b01c5f6b3513cea56fc0 100644 (file)
  *
  **********************************************************************/
 
-static WERROR smbconf_global_check(struct smbconf_ctx *ctx)
+static sbcErr smbconf_global_check(struct smbconf_ctx *ctx)
 {
        if (!smbconf_share_exists(ctx, GLOBAL_NAME)) {
                return smbconf_create_share(ctx, GLOBAL_NAME);
        }
-       return WERR_OK;
+
+       return SBC_ERR_OK;
 }
 
 
@@ -42,6 +43,41 @@ static WERROR smbconf_global_check(struct smbconf_ctx *ctx)
  *
  **********************************************************************/
 
+const char *sbcErrorString(sbcErr error)
+{
+       switch (error) {
+               case SBC_ERR_OK:
+                       return "SBC_ERR_OK";
+               case SBC_ERR_NOT_IMPLEMENTED:
+                       return "SBC_ERR_NOT_IMPLEMENTED";
+               case SBC_ERR_NOT_SUPPORTED:
+                       return "SBC_ERR_NOT_SUPPORTED";
+               case SBC_ERR_UNKNOWN_FAILURE:
+                       return "SBC_ERR_UNKNOWN_FAILURE";
+               case SBC_ERR_NOMEM:
+                       return "SBC_ERR_NOMEM";
+               case SBC_ERR_INVALID_PARAM:
+                       return "SBC_ERR_INVALID_PARAM";
+               case SBC_ERR_BADFILE:
+                       return "SBC_ERR_BADFILE";
+               case SBC_ERR_NO_SUCH_SERVICE:
+                       return "SBC_ERR_NO_SUCH_SERVICE";
+               case SBC_ERR_IO_FAILURE:
+                       return "SBC_ERR_IO_FAILURE";
+               case SBC_ERR_CAN_NOT_COMPLETE:
+                       return "SBC_ERR_CAN_NOT_COMPLETE";
+               case SBC_ERR_NO_MORE_ITEMS:
+                       return "SBC_ERR_NO_MORE_ITEMS";
+               case SBC_ERR_FILE_EXISTS:
+                       return "SBC_ERR_FILE_EXISTS";
+               case SBC_ERR_ACCESS_DENIED:
+                       return "SBC_ERR_ACCESS_DENIED";
+       }
+
+       return "unknown sbcErr value";
+}
+
+
 /**
  * Tell whether the backend requires messaging to be set up
  * for the backend to work correctly.
@@ -91,7 +127,7 @@ bool smbconf_changed(struct smbconf_ctx *ctx, struct smbconf_csn *csn,
 /**
  * Drop the whole configuration (restarting empty).
  */
-WERROR smbconf_drop(struct smbconf_ctx *ctx)
+sbcErr smbconf_drop(struct smbconf_ctx *ctx)
 {
        return ctx->ops->drop(ctx);
 }
@@ -111,6 +147,7 @@ WERROR smbconf_get_config(struct smbconf_ctx *ctx,
                          struct smbconf_service ***services)
 {
        WERROR werr = WERR_OK;
+       sbcErr err;
        TALLOC_CTX *tmp_ctx = NULL;
        uint32_t tmp_num_shares;
        char **tmp_share_names;
@@ -124,13 +161,14 @@ WERROR smbconf_get_config(struct smbconf_ctx *ctx,
 
        tmp_ctx = talloc_stackframe();
 
-       werr = smbconf_get_share_names(ctx, tmp_ctx, &tmp_num_shares,
-                                      &tmp_share_names);
-       if (!W_ERROR_IS_OK(werr)) {
+       err = smbconf_get_share_names(ctx, tmp_ctx, &tmp_num_shares,
+                                     &tmp_share_names);
+       if (!SBC_ERROR_IS_OK(err)) {
+               werr = WERR_GENERAL_FAILURE;
                goto done;
        }
 
-       tmp_services = TALLOC_ARRAY(tmp_ctx, struct smbconf_service *,
+       tmp_services = talloc_array(tmp_ctx, struct smbconf_service *,
                                    tmp_num_shares);
 
        if (tmp_services == NULL) {
@@ -139,10 +177,11 @@ WERROR smbconf_get_config(struct smbconf_ctx *ctx,
        }
 
        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)) {
+               err = smbconf_get_share(ctx, tmp_services,
+                                       tmp_share_names[count],
+                                       &tmp_services[count]);
+               if (!SBC_ERROR_IS_OK(err)) {
+                       werr = WERR_GENERAL_FAILURE;
                        goto done;
                }
        }
@@ -164,7 +203,7 @@ done:
 /**
  * get the list of share names defined in the configuration.
  */
-WERROR smbconf_get_share_names(struct smbconf_ctx *ctx,
+sbcErr smbconf_get_share_names(struct smbconf_ctx *ctx,
                               TALLOC_CTX *mem_ctx,
                               uint32_t *num_shares,
                               char ***share_names)
@@ -185,11 +224,11 @@ bool smbconf_share_exists(struct smbconf_ctx *ctx,
 /**
  * Add a service if it does not already exist.
  */
-WERROR smbconf_create_share(struct smbconf_ctx *ctx,
+sbcErr smbconf_create_share(struct smbconf_ctx *ctx,
                            const char *servicename)
 {
        if ((servicename != NULL) && smbconf_share_exists(ctx, servicename)) {
-               return WERR_FILE_EXISTS;
+               return SBC_ERR_FILE_EXISTS;
        }
 
        return ctx->ops->create_share(ctx, servicename);
@@ -198,25 +237,21 @@ WERROR smbconf_create_share(struct smbconf_ctx *ctx,
 /**
  * get a definition of a share (service) from configuration.
  */
-WERROR smbconf_get_share(struct smbconf_ctx *ctx,
+sbcErr 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)
+sbcErr smbconf_delete_share(struct smbconf_ctx *ctx, const char *servicename)
 {
        if (!smbconf_share_exists(ctx, servicename)) {
-               return WERR_NO_SUCH_SERVICE;
+               return SBC_ERR_NO_SUCH_SERVICE;
        }
 
        return ctx->ops->delete_share(ctx, servicename);
@@ -225,15 +260,11 @@ WERROR smbconf_delete_share(struct smbconf_ctx *ctx, const char *servicename)
 /**
  * set a configuration parameter to the value provided.
  */
-WERROR smbconf_set_parameter(struct smbconf_ctx *ctx,
+sbcErr 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);
 }
 
@@ -243,34 +274,31 @@ WERROR smbconf_set_parameter(struct smbconf_ctx *ctx,
  *
  * This also creates [global] when it does not exist.
  */
-WERROR smbconf_set_global_parameter(struct smbconf_ctx *ctx,
+sbcErr smbconf_set_global_parameter(struct smbconf_ctx *ctx,
                                    const char *param, const char *val)
 {
-       WERROR werr;
+       sbcErr err;
 
-       werr = smbconf_global_check(ctx);
-       if (W_ERROR_IS_OK(werr)) {
-               werr = smbconf_set_parameter(ctx, GLOBAL_NAME, param, val);
+       err = smbconf_global_check(ctx);
+       if (!SBC_ERROR_IS_OK(err)) {
+               return err;
        }
+       err = smbconf_set_parameter(ctx, GLOBAL_NAME, param, val);
 
-       return werr;
+       return err;
 }
 
 /**
  * get the value of a configuration parameter as a string
  */
-WERROR smbconf_get_parameter(struct smbconf_ctx *ctx,
+sbcErr 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 SBC_ERR_INVALID_PARAM;
        }
 
        return ctx->ops->get_parameter(ctx, mem_ctx, service, param, valstr);
@@ -281,20 +309,22 @@ WERROR smbconf_get_parameter(struct smbconf_ctx *ctx,
  *
  * Create [global] if it does not exist.
  */
-WERROR smbconf_get_global_parameter(struct smbconf_ctx *ctx,
+sbcErr smbconf_get_global_parameter(struct smbconf_ctx *ctx,
                                    TALLOC_CTX *mem_ctx,
                                    const char *param,
                                    char **valstr)
 {
-       WERROR werr;
+       sbcErr err;
 
-       werr = smbconf_global_check(ctx);
-       if (W_ERROR_IS_OK(werr)) {
-               werr = smbconf_get_parameter(ctx, mem_ctx, GLOBAL_NAME, param,
-                                            valstr);
+       err = smbconf_global_check(ctx);
+       if (!SBC_ERROR_IS_OK(err)) {
+               return err;
        }
 
-       return werr;
+       err = smbconf_get_parameter(ctx, mem_ctx, GLOBAL_NAME, param,
+                                   valstr);
+
+       return err;
 }
 
 /**
@@ -303,10 +333,6 @@ WERROR smbconf_get_global_parameter(struct smbconf_ctx *ctx,
 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);
 }
 
@@ -319,11 +345,13 @@ WERROR smbconf_delete_global_parameter(struct smbconf_ctx *ctx,
                                       const char *param)
 {
        WERROR werr;
+       sbcErr err;
 
-       werr = smbconf_global_check(ctx);
-       if (W_ERROR_IS_OK(werr)) {
-               werr = smbconf_delete_parameter(ctx, GLOBAL_NAME, param);
+       err = smbconf_global_check(ctx);
+       if (!SBC_ERROR_IS_OK(err)) {
+               return WERR_GENERAL_FAILURE;
        }
+       werr = smbconf_delete_parameter(ctx, GLOBAL_NAME, param);
 
        return werr;
 }
@@ -333,10 +361,6 @@ 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, mem_ctx, service, num_includes,
                                      includes);
 }
@@ -346,12 +370,14 @@ WERROR smbconf_get_global_includes(struct smbconf_ctx *ctx,
                                   uint32_t *num_includes, char ***includes)
 {
        WERROR werr;
+       sbcErr err;
 
-       werr = smbconf_global_check(ctx);
-       if (W_ERROR_IS_OK(werr)) {
-               werr = smbconf_get_includes(ctx, mem_ctx, GLOBAL_NAME,
-                                           num_includes, includes);
+       err = smbconf_global_check(ctx);
+       if (SBC_ERROR_IS_OK(err)) {
+               return WERR_GENERAL_FAILURE;
        }
+       werr = smbconf_get_includes(ctx, mem_ctx, GLOBAL_NAME,
+                                   num_includes, includes);
 
        return werr;
 }
@@ -360,10 +386,6 @@ 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);
 }
 
@@ -372,12 +394,14 @@ WERROR smbconf_set_global_includes(struct smbconf_ctx *ctx,
                                   const char **includes)
 {
        WERROR werr;
+       sbcErr err;
 
-       werr = smbconf_global_check(ctx);
-       if (W_ERROR_IS_OK(werr)) {
-               werr = smbconf_set_includes(ctx, GLOBAL_NAME,
-                                           num_includes, includes);
+       err = smbconf_global_check(ctx);
+       if (!SBC_ERROR_IS_OK(err)) {
+               return WERR_GENERAL_FAILURE;
        }
+       werr = smbconf_set_includes(ctx, GLOBAL_NAME,
+                                   num_includes, includes);
 
        return werr;
 }
@@ -385,21 +409,34 @@ WERROR smbconf_set_global_includes(struct smbconf_ctx *ctx,
 
 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;
+       sbcErr err;
 
-       werr = smbconf_global_check(ctx);
-       if (W_ERROR_IS_OK(werr)) {
-               werr = smbconf_delete_includes(ctx, GLOBAL_NAME);
+       err = smbconf_global_check(ctx);
+       if (!SBC_ERROR_IS_OK(err)) {
+               return WERR_GENERAL_FAILURE;
        }
+       werr = smbconf_delete_includes(ctx, GLOBAL_NAME);
 
        return werr;
 }
+
+WERROR smbconf_transaction_start(struct smbconf_ctx *ctx)
+{
+       return ctx->ops->transaction_start(ctx);
+}
+
+WERROR smbconf_transaction_commit(struct smbconf_ctx *ctx)
+{
+       return ctx->ops->transaction_commit(ctx);
+}
+
+WERROR smbconf_transaction_cancel(struct smbconf_ctx *ctx)
+{
+       return ctx->ops->transaction_cancel(ctx);
+}