Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15:Update
sssd.10371
0004-Strip-whitespaces-in-netgroup-triple.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0004-Strip-whitespaces-in-netgroup-triple.patch of Package sssd.10371
From 084489ce001eb84a3bb53131f09771d637a03da4 Mon Sep 17 00:00:00 2001 From: Josef Cejka <jcejka@suse.com> Date: Mon, 7 May 2018 16:11:25 +0200 Subject: [PATCH] Strip whitespaces in netgroup triple. Strip leading and trailing whitespaces from netgroup three-tuple strings to be compatible with nss_ldap. Reviewed-by: Jakub Hrozek <jhrozek@redhat.com> (cherry picked from commit dbb1abae6eaa9df24f61e3a9f855e2461a66a197) --- src/db/sysdb_search.c | 116 +++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 63 deletions(-) diff --git a/src/db/sysdb_search.c b/src/db/sysdb_search.c index dc0bd4f2c..4cc755496 100644 --- a/src/db/sysdb_search.c +++ b/src/db/sysdb_search.c @@ -1684,10 +1684,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 @@ -1702,10 +1746,6 @@ static errno_t sysdb_netgr_split_triple(TALLOC_CTX *mem_ctx, errno_t ret; TALLOC_CTX *tmp_ctx; const char *p = triple; - const char *p_host; - const char *p_user; - const char *p_domain; - size_t len; char *host = NULL; char *user = NULL; @@ -1732,72 +1772,22 @@ static errno_t sysdb_netgr_split_triple(TALLOC_CTX *mem_ctx, 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++; -- 2.20.1
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