summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-07-03 15:34:07 -0400
committerNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-07-03 15:34:07 -0400
commit0b7de0dd675f9e9b6ebc708eacfe22c4a127cb38 (patch)
tree22eadd915fa1f9d349af7fc70ed9713b2c8df0c5 /src
parentf421501cf65db22629d3ae820a7bfd57cc5fcdd1 (diff)
- add some simple wrappers for reading configuration settings
Diffstat (limited to 'src')
-rw-r--r--src/back-shr.c95
-rw-r--r--src/back-shr.h9
2 files changed, 104 insertions, 0 deletions
diff --git a/src/back-shr.c b/src/back-shr.c
index 15bc7f6..38a9949 100644
--- a/src/back-shr.c
+++ b/src/back-shr.c
@@ -356,6 +356,101 @@ backend_shr_set_config_entry_add(struct plugin_state *state, Slapi_Entry *e,
return 0;
}
+/* Read a list of string values for the named attribute. */
+char **
+backend_shr_get_vattr_strlist(struct plugin_state *state,
+ Slapi_Entry *e, const char *attribute)
+{
+ Slapi_ValueSet *values;
+ Slapi_Value *value;
+ int disposition, buffer_flags;
+ char *actual_attr, **ret;
+ const char **tmp;
+ int i, j;
+ ret = NULL;
+ if (slapi_vattr_values_get(e, (char *) attribute,
+ &values, &disposition, &actual_attr,
+ 0, &buffer_flags) == 0) {
+ tmp = malloc(sizeof(char **) *
+ (slapi_valueset_count(values) + 1));
+ if (tmp != NULL) {
+ for (i = slapi_valueset_first_value(values, &value);
+ i != -1;
+ i = slapi_valueset_next_value(values, i, &value)) {
+ tmp[j++] = slapi_value_get_string(value);
+ }
+ ret = backend_shr_dup_strlist((char **) tmp);
+ free(tmp);
+ }
+ slapi_vattr_values_free(&values, &actual_attr, buffer_flags);
+ }
+ return ret;
+}
+char *
+backend_shr_get_vattr_str(struct plugin_state *state,
+ Slapi_Entry *e, const char *attribute)
+{
+ Slapi_ValueSet *values;
+ Slapi_Value *value;
+ int disposition, buffer_flags;
+ char *actual_attr, *ret;
+ const char *cvalue;
+ int i;
+ ret = NULL;
+ if (slapi_vattr_values_get(e, (char *) attribute,
+ &values, &disposition, &actual_attr,
+ 0, &buffer_flags) == 0) {
+ i = slapi_valueset_first_value(values, &value);
+ if (i != -1) {
+ ret = strdup(slapi_value_get_string(value));
+ }
+ slapi_vattr_values_free(&values, &actual_attr, buffer_flags);
+ }
+ return ret;
+}
+char *
+backend_shr_get_vattr_filter(struct plugin_state *state,
+ Slapi_Entry *e, const char *attribute)
+{
+ char *tmp, *ret;
+ ret = backend_shr_get_vattr_filter(state, e, attribute);
+ if (ret != NULL) {
+ if (strlen(ret) > 0) {
+ if ((ret[0] != '(') || (ret[strlen(ret) - 1] != ')')) {
+ tmp = malloc(strlen(ret) + 3);
+ if (tmp != NULL) {
+ sprintf(tmp, "(%s)", ret);
+ free(ret);
+ ret = tmp;
+ }
+ }
+ }
+ }
+ return ret;
+}
+bool_t
+backend_shr_get_vattr_boolean(struct plugin_state *state,
+ Slapi_Entry *e, const char *attribute,
+ bool_t default_value)
+{
+ char *tmp;
+ bool_t ret;
+ ret = default_value;
+ tmp = backend_shr_get_vattr_str(state, e, attribute);
+ if (tmp != NULL) {
+ /* FIXME: should we use nl_langinfo(YESEXPR) here? */
+ if ((strcasecmp(cvalue, "yes") == 0) ||
+ (strcasecmp(cvalue, "on") == 0) ||
+ (strcasecmp(cvalue, "1") == 0)) {
+ ret = TRUE;
+ } else {
+ ret = FALSE;
+ }
+ free(tmp);
+ }
+ return ret;
+}
+
/* Scan for the list of configured groups and sets. */
void
backend_shr_startup(struct plugin_state *state, const char *filter)
diff --git a/src/back-shr.h b/src/back-shr.h
index f477362..178043c 100644
--- a/src/back-shr.h
+++ b/src/back-shr.h
@@ -46,4 +46,13 @@ int backend_shr_set_config_entry_delete(struct plugin_state *state,
Slapi_Entry *e,
const char *group_attr,
const char *set_attr);
+char **backend_shr_get_vattr_strlist(struct plugin_state *state,
+ Slapi_Entry *e, const char *attribute);
+char *backend_shr_get_vattr_str(struct plugin_state *state,
+ Slapi_Entry *e, const char *attribute);
+char *backend_shr_get_vattr_filter(struct plugin_state *state,
+ Slapi_Entry *e, const char *attribute);
+bool_t backend_shr_get_vattr_boolean(struct plugin_state *state,
+ Slapi_Entry *e, const char *attribute,
+ bool_t default_value);
#endif