diff options
-rw-r--r-- | src/defs-nis.c | 10 | ||||
-rw-r--r-- | src/format.c | 40 |
2 files changed, 44 insertions, 6 deletions
diff --git a/src/defs-nis.c b/src/defs-nis.c index 7fdbbfc..8a39beb 100644 --- a/src/defs-nis.c +++ b/src/defs-nis.c @@ -1,5 +1,5 @@ /* - * Copyright 2008,2009 Red Hat, Inc. + * Copyright 2008,2009,2011 Red Hat, Inc. * * 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 @@ -52,22 +52,22 @@ static struct configuration { "(objectClass=posixAccount)", "%{uid}", NULL, "%{uid}:%regsub(\"%{userPassword}\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%regmatch(\"%{uidNumber}\",\"[0-9]+\"):%regmatch(\"%{gidNumber}\",\"[0-9]+\"):%{gecos:-%{cn:-}}:%{homeDirectory:-/}:%{loginShell:-" _PATH_BSHELL "}", NULL, - ":"}, + ":\r\n"}, {"passwd.byuid", config_exact, FALSE, NULL, "(objectClass=posixAccount)", "%{uidNumber}", NULL, "%{uid}:%regsub(\"%{userPassword}\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%regmatch(\"%{uidNumber}\",\"[0-9]+\"):%regmatch(\"%{gidNumber}\",\"[0-9]+\"):%{gecos:-%{cn:-}}:%{homeDirectory:-/}:%{loginShell:-" _PATH_BSHELL "}", NULL, - ":"}, + ":\r\n"}, {"group.byname", config_exact, FALSE, NULL, "(objectClass=posixGroup)", "%{cn}", NULL, "%{cn}:%regsub(\"%{userPassword}\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%regmatch(\"%{gidNumber}\",\"[0-9]+\"):%merge(\",\",\"%{memberUid}\",\"%deref_r(\\\"member\\\",\\\"uid\\\")\",\"%deref_r(\\\"uniqueMember\\\",\\\"uid\\\")\",\"%referred_r(\\\"group.byname\\\,\\\"memberOf\\\",\\\"passwd.byname\\\",\\\"memberOf\\\",\\\"uid\\\")\")", NULL, - ":,"}, + ":,\r\n"}, {"group.bygid", config_exact, FALSE, NULL, "(objectClass=posixGroup)", "%{gidNumber}", NULL, "%{cn}:%regsub(\"%{userPassword}\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%{gidNumber}:%merge(\",\",\"%{memberUid}\",\"%deref_r(\\\"member\\\",\\\"uid\\\")\",\"%deref_r(\\\"uniqueMember\\\",\\\"uid\\\")\",\"%referred_r(\\\"group.bygid\\\,\\\"memberOf\\\",\\\"passwd.byname\\\",\\\"memberOf\\\",\\\"uid\\\")\")", NULL, - ":,"}, + ":,\r\n"}, {"netgroup", config_exact, FALSE, NULL, "(objectClass=nisNetgroup)", "%{cn}", NULL, diff --git a/src/format.c b/src/format.c index c0f0e13..75d6db2 100644 --- a/src/format.c +++ b/src/format.c @@ -2803,10 +2803,48 @@ static char * format_check_disallowed(const struct berval *bv, const char *disallowed) { int i; + unsigned char c; char *p; if (disallowed != NULL) { for (i = 0; disallowed[i] != '\0'; i++) { - p = memchr(bv->bv_val, disallowed[i], bv->bv_len); + c = disallowed[i]; + if (c == '\\') { + switch (disallowed[i + 1]) { + case '\\': + c = '\\'; + i++; + break; + case 'a': + c = '\a'; + i++; + break; + case 'b': + c = '\b'; + i++; + break; + case 'f': + c = '\f'; + i++; + break; + case 'n': + c = '\n'; + i++; + break; + case 'r': + c = '\r'; + i++; + break; + case 't': + c = '\t'; + i++; + break; + case 'v': + c = '\v'; + i++; + break; + } + } + p = memchr(bv->bv_val, c, bv->bv_len); if (p != NULL) { return p; } |