rfc2253 says we need to escape " and leading and trailing space.

This commit is contained in:
Todd C. Miller
2018-05-17 11:16:44 -06:00
parent dfb66044ed
commit 7d42a609d9
2 changed files with 16 additions and 11 deletions

View File

@@ -326,6 +326,7 @@ print_cmndspec_ldif(FILE *fp, struct cmndspec *cs, struct cmndspec **nextp, stru
/* /*
* Convert user name to cn, avoiding duplicates and quoting as needed. * Convert user name to cn, avoiding duplicates and quoting as needed.
* See http://www.faqs.org/rfcs/rfc2253.html
*/ */
static char * static char *
user_to_cn(const char *user) user_to_cn(const char *user)
@@ -363,19 +364,23 @@ user_to_cn(const char *user)
for (src = user, dst = cn; *src != '\0'; src++) { for (src = user, dst = cn; *src != '\0'; src++) {
switch (*src) { switch (*src) {
case ',': case ',':
case '\\':
case '#':
case '+': case '+':
case '"':
case '\\':
case '<': case '<':
case '>': case '>':
case '#':
case ';': case ';':
*dst++ = '\\'; *dst++ = '\\'; /* always escape */
*dst++ = *src; break;
case ' ':
if (src == user || src[1] == '\0')
*dst++ = '\\'; /* only escape at beginning or end of string */
break; break;
default: default:
*dst++ = *src;
break; break;
} }
*dst++ = *src;
} }
*dst = '\0'; *dst = '\0';

View File

@@ -45,10 +45,10 @@ sudoRunAsUser: root
sudoCommand: ALL sudoCommand: ALL
sudoOrder: 2 sudoOrder: 2
dn: cn=foo",ou=SUDOers,dc=sudo,dc=ws dn: cn=foo\",ou=SUDOers,dc=sudo,dc=ws
objectClass: top objectClass: top
objectClass: sudoRole objectClass: sudoRole
cn: foo" cn: foo\"
sudoUser: foo" sudoUser: foo"
sudoHost: hostc sudoHost: hostc
sudoRunAsUser: root sudoRunAsUser: root
@@ -65,10 +65,10 @@ sudoRunAsUser: root
sudoCommand: ALL sudoCommand: ALL
sudoOrder: 4 sudoOrder: 4
dn: cn=foo:bar",ou=SUDOers,dc=sudo,dc=ws dn: cn=foo:bar\",ou=SUDOers,dc=sudo,dc=ws
objectClass: top objectClass: top
objectClass: sudoRole objectClass: sudoRole
cn: foo:bar" cn: foo:bar\"
sudoUser: foo:bar" sudoUser: foo:bar"
sudoHost: hoste sudoHost: hoste
sudoRunAsUser: root sudoRunAsUser: root
@@ -115,10 +115,10 @@ sudoRunAsUser: root
sudoCommand: ALL sudoCommand: ALL
sudoOrder: 9 sudoOrder: 9
dn: cn=%:C/non"UNIX"0 c,ou=SUDOers,dc=sudo,dc=ws dn: cn=%:C/non\"UNIX\"0 c,ou=SUDOers,dc=sudo,dc=ws
objectClass: top objectClass: top
objectClass: sudoRole objectClass: sudoRole
cn: %:C/non"UNIX"0 c cn: %:C/non\"UNIX\"0 c
sudoUser: %:C/non"UNIX"0 c sudoUser: %:C/non"UNIX"0 c
sudoHost: hoste sudoHost: hoste
sudoRunAsUser: root sudoRunAsUser: root