From e115c25af2df3549fb44b260e516d8c93d2adc8a Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 20 Nov 2009 12:11:28 -0500 Subject: Add initial failover support for ldap and ipa The retun values are still not directly used with ldap libraries that still do their own name resolution, but this patch introduces a very basic framework to have a multiple providers in one domain use and share a single failover service if they want to. --- server/util/util.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 server/util/util.c (limited to 'server/util/util.c') 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 + + 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 . +*/ + +#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; +} -- cgit