diff options
| author | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-07-03 15:34:07 -0400 |
|---|---|---|
| committer | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-07-03 15:34:07 -0400 |
| commit | 0b7de0dd675f9e9b6ebc708eacfe22c4a127cb38 (patch) | |
| tree | 22eadd915fa1f9d349af7fc70ed9713b2c8df0c5 /src | |
| parent | f421501cf65db22629d3ae820a7bfd57cc5fcdd1 (diff) | |
- add some simple wrappers for reading configuration settings
Diffstat (limited to 'src')
| -rw-r--r-- | src/back-shr.c | 95 | ||||
| -rw-r--r-- | src/back-shr.h | 9 |
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 |
