diff -up sudo-1.8.6p7/common/fmt_string.c.ldap_sssd_parse_whitespaces sudo-1.8.6p7/common/fmt_string.c --- sudo-1.8.6p7/common/fmt_string.c.ldap_sssd_parse_whitespaces 2013-02-25 20:42:44.000000000 +0100 +++ sudo-1.8.6p7/common/fmt_string.c 2016-05-11 10:31:30.206090322 +0200 @@ -38,6 +38,8 @@ # include #endif /* HAVE_STRINGS_H */ +#include + #include "missing.h" #include "sudo_debug.h" @@ -64,3 +66,17 @@ fmt_string(const char *var, const char * debug_return_str(str); } + +char * rm_whitespaces(char * str){ + int state = 1; + char * c; + for (c = str ; *c != '\0' ; c++){ + if (state && isspace(*c))str++; + else if (!isspace(*c))state = 0; + else if (!state && isspace(*c)){ + *c = '\0'; + break; + } + } + return str; +} diff -up sudo-1.8.6p7/plugins/sudoers/ldap.c.ldap_sssd_parse_whitespaces sudo-1.8.6p7/plugins/sudoers/ldap.c --- sudo-1.8.6p7/plugins/sudoers/ldap.c.ldap_sssd_parse_whitespaces 2016-05-11 10:31:30.202090379 +0200 +++ sudo-1.8.6p7/plugins/sudoers/ldap.c 2016-05-11 10:31:30.207090307 +0200 @@ -1012,17 +1012,17 @@ sudo_ldap_parse_options(LDAP *ld, LDAPMe if (op == '+' || op == '-') { *(val - 2) = '\0'; /* found, remove extra char */ /* case var+=val or var-=val */ - set_default(var, strunquote(val), (int) op); + set_default(rm_whitespaces(var), strunquote(val), (int) op); } else { /* case var=val */ - set_default(var, strunquote(val), true); + set_default(rm_whitespaces(var), strunquote(val), true); } } else if (*var == '!') { /* case !var Boolean False */ - set_default(var + 1, NULL, false); + set_default(rm_whitespaces(var + 1), NULL, false); } else { /* case var Boolean True */ - set_default(var, NULL, true); + set_default(rm_whitespaces(var), NULL, true); } efree(var); } diff -up sudo-1.8.6p7/plugins/sudoers/sssd.c.ldap_sssd_parse_whitespaces sudo-1.8.6p7/plugins/sudoers/sssd.c --- sudo-1.8.6p7/plugins/sudoers/sssd.c.ldap_sssd_parse_whitespaces 2016-05-11 10:31:30.202090379 +0200 +++ sudo-1.8.6p7/plugins/sudoers/sssd.c 2016-05-11 10:31:30.207090307 +0200 @@ -1004,17 +1004,17 @@ sudo_sss_parse_options(struct sudo_sss_h if (op == '+' || op == '-') { *(val - 2) = '\0'; /* found, remove extra char */ /* case var+=val or var-=val */ - set_default(v, strunquote(val), (int) op); + set_default(rm_whitespaces(v), strunquote(val), (int) op); } else { /* case var=val */ - set_default(v, strunquote(val), true); + set_default(rm_whitespaces(v), strunquote(val), true); } } else if (*v == '!') { /* case !var Boolean False */ - set_default(v + 1, NULL, false); + set_default(rm_whitespaces(v + 1), NULL, false); } else { /* case var Boolean True */ - set_default(v, NULL, true); + set_default(rm_whitespaces(v), NULL, true); } efree(v); } diff -up sudo-1.8.6p7/plugins/sudoers/sudoers.h.ldap_sssd_parse_whitespaces sudo-1.8.6p7/plugins/sudoers/sudoers.h --- sudo-1.8.6p7/plugins/sudoers/sudoers.h.ldap_sssd_parse_whitespaces 2016-05-11 10:31:30.204090350 +0200 +++ sudo-1.8.6p7/plugins/sudoers/sudoers.h 2016-05-11 10:31:30.207090307 +0200 @@ -346,6 +346,7 @@ int sudoers_hook_unsetenv(const char *na /* fmt_string.c */ char *fmt_string(const char *, const char *); +char *rm_whitespaces(char * str); /* sudoers.c */ void plugin_cleanup(int);