summaryrefslogtreecommitdiff
path: root/server/util
diff options
context:
space:
mode:
Diffstat (limited to 'server/util')
-rw-r--r--server/util/util.c85
-rw-r--r--server/util/util.h4
2 files changed, 89 insertions, 0 deletions
diff --git a/server/util/util.c b/server/util/util.c
new file mode 100644
index 00000000..9049602c
--- /dev/null
+++ b/server/util/util.c
@@ -0,0 +1,85 @@
+/*
+ Authors:
+ Simo Sorce <ssorce@redhat.com>
+
+ Copyright (C) 2009 Red Hat
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "talloc.h"
+#include "util/util.h"
+
+/* Split string in a list using a set of legal seprators */
+
+int sss_split_list(TALLOC_CTX *memctx, const char *string,
+ const char *sep, char ***_list, int *c)
+{
+ const char *p;
+ const char *s;
+ char **list;
+ char **t;
+ int i;
+
+ /* split server parm into a list */
+ list = NULL;
+ s = string;
+ i = 0;
+
+ while (s) {
+ p = strpbrk(s, sep);
+ if (p) {
+ if (p - s == 1) {
+ s++;
+ continue;
+ }
+
+ t = talloc_realloc(memctx, list, char *, i + 1);
+ if (!t) {
+ talloc_zfree(list);
+ return ENOMEM;
+ }
+ list = t;
+ list[i] = talloc_asprintf(list, "%.*s", (int)(p - s), s);
+ if (!list[i]) {
+ talloc_zfree(list);
+ return ENOMEM;
+ }
+ i++;
+
+ s = p + 1;
+ }
+ else {
+
+ t = talloc_realloc(memctx, list, char *, i + 1);
+ if (!t) {
+ talloc_zfree(list);
+ return ENOMEM;
+ }
+ list = t;
+ list[i] = talloc_strdup(list, s);
+ if (!list[i]) {
+ talloc_zfree(list);
+ return ENOMEM;
+ }
+ i++;
+
+ s = NULL;
+ }
+ }
+
+ *_list = list;
+ *c = i;
+ return EOK;
+}
diff --git a/server/util/util.h b/server/util/util.h
index 3ca43a40..b116a66a 100644
--- a/server/util/util.h
+++ b/server/util/util.h
@@ -221,4 +221,8 @@ int backup_file(const char *src, int dbglvl);
errno_t check_and_open_readonly(const char *filename, int *fd, const uid_t uid,
const gid_t gid, const mode_t mode);
+/* from util.c */
+int sss_split_list(TALLOC_CTX *memctx, const char *string,
+ const char *sep, char ***_list, int *c);
+
#endif /* __SSSD_UTIL_H__ */