Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP3:GA
sssd.10650
0011-trim_whitespaces_in_netgroup_triples.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0011-trim_whitespaces_in_netgroup_triples.patch of Package sssd.10650
Index: sssd-1.13.4/src/db/sysdb_search.c =================================================================== --- sssd-1.13.4.orig/src/db/sysdb_search.c +++ sssd-1.13.4/src/db/sysdb_search.c @@ -1301,10 +1301,54 @@ done: return ret; } + +/* Get string until the first delimiter and strip out + * leading and trailing whitespaces. + */ +static errno_t sysdb_netgr_split_triple_string(TALLOC_CTX *mem_ctx, + const char **in, + const char delimiter, + char **out) +{ + size_t len; + const char *p = *in; + const char *begin; + + /* Remove any leading whitespace */ + while (*p && isspace(*p)) p++; + begin = p; + + /* Find the delimiter */ + while (*p && *p != delimiter) p++; + + if (!*p) { + /* No delimiter was found: parse error */ + return EINVAL; + } + + len = p - begin; + /* Remove trailing spaces */ + while (len > 0 && isspace(begin[len - 1])) len--; + + *out = NULL; + if (len > 0) { + /* Copy the output string */ + *out = talloc_strndup(mem_ctx, begin, len); + if (!*out) { + return ENOMEM; + } + } + p++; + + *in = p; + return EOK; +} + + + /* This function splits a three-tuple into three strings - * It assumes that any whitespace between the parentheses - * and commas are intentional and does not attempt to - * strip them out. Leading and trailing whitespace is + * It strips out any whitespace between the parentheses + * and commas. Leading and trailing whitespace is * ignored. * * This behavior is compatible with nss_ldap's @@ -1349,72 +1393,22 @@ static errno_t sysdb_netgr_split_triple( goto done; } p++; - p_host = p; - - /* Find the first comma */ - while (*p && *p != ',') p++; - if (!*p) { - /* No comma was found: parse error */ - ret = EINVAL; + ret = sysdb_netgr_split_triple_string(tmp_ctx, &p, ',', &host); + if (ret != EOK) { goto done; } - len = p - p_host; - - if (len > 0) { - /* Copy the host string */ - host = talloc_strndup(tmp_ctx, p_host, len); - if (!host) { - ret = ENOMEM; - goto done; - } - } - p++; - p_user = p; - - /* Find the second comma */ - while (*p && *p != ',') p++; - - if (!*p) { - /* No comma was found: parse error */ - ret = EINVAL; + ret = sysdb_netgr_split_triple_string(tmp_ctx, &p, ',', &user); + if (ret != EOK) { goto done; } - len = p - p_user; - - if (len > 0) { - /* Copy the user string */ - user = talloc_strndup(tmp_ctx, p_user, len); - if (!user) { - ret = ENOMEM; - goto done; - } - } - p++; - p_domain = p; - - /* Find the closing parenthesis */ - while (*p && *p != ')') p++; - if (*p != ')') { - /* No trailing parenthesis: parse error */ - ret = EINVAL; + ret = sysdb_netgr_split_triple_string(tmp_ctx, &p, ')', &domain); + if (ret != EOK) { goto done; } - len = p - p_domain; - - if (len > 0) { - /* Copy the domain string */ - domain = talloc_strndup(tmp_ctx, p_domain, len); - if (!domain) { - ret = ENOMEM; - goto done; - } - } - p++; - /* skip trailing whitespace */ while (*p && isspace(*p)) p++;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor