summaryrefslogtreecommitdiffstats
path: root/src/format.c
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@redhat.com>2011-07-26 11:59:09 -0400
committerNalin Dahyabhai <nalin@redhat.com>2011-07-26 11:59:09 -0400
commit260cbd12471639197dd87b5fc613613745ffd0ab (patch)
treea3dfd7d8af19161243b9956ff736f0b91f88093e /src/format.c
parent64c268ebead2454ec067bc92844c0c1df9f1e503 (diff)
downloadslapi-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.c40
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;
}