diff options
author | Nalin Dahyabhai <nalin@redhat.com> | 2011-07-26 11:59:09 -0400 |
---|---|---|
committer | Nalin Dahyabhai <nalin@redhat.com> | 2011-07-26 11:59:09 -0400 |
commit | 260cbd12471639197dd87b5fc613613745ffd0ab (patch) | |
tree | a3dfd7d8af19161243b9956ff736f0b91f88093e /src/format.c | |
parent | 64c268ebead2454ec067bc92844c0c1df9f1e503 (diff) | |
download | slapi-nis-260cbd12471639197dd87b5fc613613745ffd0ab.tar.gz slapi-nis-260cbd12471639197dd87b5fc613613745ffd0ab.tar.xz slapi-nis-260cbd12471639197dd87b5fc613613745ffd0ab.zip |
- handle control characters in disallowed-chars lists
Diffstat (limited to 'src/format.c')
-rw-r--r-- | src/format.c | 40 |
1 files changed, 39 insertions, 1 deletions
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; } |