libsmbconf: add method is_writeable() and wrapper smbconf_is_writeable()
authorMichael Adam <obnox@samba.org>
Thu, 23 Oct 2008 09:16:50 +0000 (11:16 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 19 Mar 2009 17:03:52 +0000 (18:03 +0100)
This allows for per-config-source checking of write support.

Michael

source/lib/smbconf/smbconf.c
source/lib/smbconf/smbconf.h
source/lib/smbconf/smbconf_private.h
source/lib/smbconf/smbconf_reg.c
source/lib/smbconf/smbconf_txt.c

index 7911687a88999c046b0a59a68370221a238683e7..396feab02d5c3d57e8f78613b637733a5bae623b 100644 (file)
@@ -51,6 +51,14 @@ 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);
+}
+
 /**
  * Close the configuration.
  */
index 3f3435ea0092a6daebdd99bb52381c62ecc130d1..9ff9a83fad281539b821f25c78d034c4852afd86 100644 (file)
@@ -57,6 +57,7 @@ WERROR smbconf_init_txt(TALLOC_CTX *mem_ctx,
  * the smbconf API functions
  */
 bool smbconf_backend_requires_messaging(struct smbconf_ctx *ctx);
+bool smbconf_is_writeable(struct smbconf_ctx *ctx);
 void smbconf_shutdown(struct smbconf_ctx *ctx);
 bool smbconf_changed(struct smbconf_ctx *ctx, struct smbconf_csn *csn,
                     const char *service, const char *param);
index a47d81fa256c64fa672556b300af4e029fcf5e7d..b0333e981aabe61da133484f512bc24e4f0fe0a4 100644 (file)
@@ -24,6 +24,7 @@ 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,
index cfe874df49d488d1cf0fdfff7e1ee9f8e2897db0..beb3cf2c84d266b959857e1e181f3bf380ccd90d 100644 (file)
@@ -652,6 +652,17 @@ static bool smbconf_reg_requires_messaging(struct smbconf_ctx *ctx)
        return false;
 }
 
+static bool smbconf_reg_is_writeable(struct smbconf_ctx *ctx)
+{
+       /*
+        * The backend has write support.
+        *
+        *  TODO: add access checks whether the concrete
+        *  config source is really writeable by the calling user.
+        */
+       return true;
+}
+
 static WERROR smbconf_reg_open(struct smbconf_ctx *ctx)
 {
        WERROR werr;
@@ -1130,6 +1141,7 @@ struct smbconf_ops smbconf_ops_reg = {
        .init                   = smbconf_reg_init,
        .shutdown               = smbconf_reg_shutdown,
        .requires_messaging     = smbconf_reg_requires_messaging,
+       .is_writeable           = smbconf_reg_is_writeable,
        .open_conf              = smbconf_reg_open,
        .close_conf             = smbconf_reg_close,
        .get_csn                = smbconf_reg_get_csn,
index 7a6f510d5d902dc3701d522d906511ed542a2eb4..b4c4203f0f83a39e4558fb45e2fc4ca7d7310f3d 100644 (file)
@@ -248,6 +248,12 @@ 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);
@@ -610,6 +616,7 @@ 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,