[s3]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>
Mon, 27 Oct 2008 12:02:40 +0000 (13:02 +0100)
This allows for per-config-source checking of write support.

Michael

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

index f0188380a0368598a01f291e68cc7f7876ea91e9..e5a865a62bb22762a82a7d20a6a79b9cd382149b 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 6edb9ed22e8a998e6cfb483c17e37e86a6d44105..c5092895bb584f162cbf4046a19d060091e54f66 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 d932705e7d104ed281a351d374a1bfb42d39290a..70d5f82bf06f078bb0169e4803ff316432d7be04 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,