summaryrefslogtreecommitdiff
path: root/src/confdb
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2012-07-05 20:44:00 -0400
committerStephen Gallagher <sgallagh@redhat.com>2012-07-06 11:44:46 -0400
commita6cbaf2932762e3e191a6bec252afec3c91bf97c (patch)
tree695c3ccd7ec50a56a9919856e6614a617cbafc9f /src/confdb
parent03532fb1cbb7e8c1d5cf2e93aa3719f926631cab (diff)
downloadsssd-a6cbaf2932762e3e191a6bec252afec3c91bf97c.tar.gz
sssd-a6cbaf2932762e3e191a6bec252afec3c91bf97c.tar.bz2
sssd-a6cbaf2932762e3e191a6bec252afec3c91bf97c.zip
CONFDB: Add the ability to set a boolean value in the confdb
Diffstat (limited to 'src/confdb')
-rw-r--r--src/confdb/confdb.c75
-rw-r--r--src/confdb/confdb.h5
2 files changed, 80 insertions, 0 deletions
diff --git a/src/confdb/confdb.c b/src/confdb/confdb.c
index 5915f2f3..ab0d0048 100644
--- a/src/confdb/confdb.c
+++ b/src/confdb/confdb.c
@@ -288,6 +288,81 @@ done:
return ret;
}
+int confdb_set_bool(struct confdb_ctx *cdb,
+ const char *section,
+ const char *attribute,
+ bool val)
+{
+ TALLOC_CTX *tmp_ctx;
+ struct ldb_dn *dn;
+ char *secdn;
+ struct ldb_message *msg;
+ int ret, lret;
+
+ tmp_ctx = talloc_new(NULL);
+ if (!tmp_ctx)
+ return ENOMEM;
+
+ ret = parse_section(tmp_ctx, section, &secdn, NULL);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ dn = ldb_dn_new(tmp_ctx, cdb->ldb, secdn);
+ if (!dn) {
+ ret = EIO;
+ goto done;
+ }
+
+ msg = ldb_msg_new(tmp_ctx);
+ if (!msg) {
+ ret = ENOMEM;
+ goto done;
+ }
+
+ msg->dn = dn;
+
+ lret = ldb_msg_add_empty(msg, attribute, LDB_FLAG_MOD_REPLACE, NULL);
+ if (lret != LDB_SUCCESS) {
+ DEBUG(SSSDBG_MINOR_FAILURE,
+ ("ldb_msg_add_empty failed: [%s]\n", ldb_strerror(lret)));
+ ret = EIO;
+ goto done;
+ }
+
+ if (val) {
+ lret = ldb_msg_add_string(msg, attribute, "True");
+ } else {
+ lret = ldb_msg_add_string(msg, attribute, "False");
+ }
+ if (lret != LDB_SUCCESS) {
+ DEBUG(SSSDBG_MINOR_FAILURE,
+ ("ldb_msg_add_string failed: [%s]\n", ldb_strerror(lret)));
+ ret = EIO;
+ goto done;
+ }
+
+
+ lret = ldb_modify(cdb->ldb, msg);
+ if (lret != LDB_SUCCESS) {
+ DEBUG(SSSDBG_MINOR_FAILURE,
+ ("ldb_modify failed: [%s]\n", ldb_strerror(lret)));
+ ret = EIO;
+ goto done;
+ }
+
+ ret = EOK;
+
+done:
+ talloc_free(tmp_ctx);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ ("Failed to set [%s] from [%s], error [%d] (%s)\n",
+ attribute, section, ret, strerror(ret)));
+ }
+ return ret;
+}
+
int confdb_get_string(struct confdb_ctx *cdb, TALLOC_CTX *ctx,
const char *section, const char *attribute,
const char *defstr, char **result)
diff --git a/src/confdb/confdb.h b/src/confdb/confdb.h
index cdbd1ff1..8ed23565 100644
--- a/src/confdb/confdb.h
+++ b/src/confdb/confdb.h
@@ -414,6 +414,11 @@ int confdb_get_bool(struct confdb_ctx *cdb,
const char *section, const char *attribute,
bool defval, bool *result);
+int confdb_set_bool(struct confdb_ctx *cdb,
+ const char *section,
+ const char *attribute,
+ bool val);
+
/**
* @brief Convenience function to retrieve a single-valued attribute as a
* null-terminated array of strings