Mercurial > dovecot > core-2.2
changeset 9232:2dcf2f313329 HEAD
Added str_tabescape*() to write escaped strings to Dovecot's IPC protocols.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 05 May 2009 20:25:13 -0400 |
parents | 8f770c8ad198 |
children | 770a02e0dbd2 |
files | src/auth/auth-stream.c src/lib/strescape.c src/lib/strescape.h |
diffstat | 3 files changed, 46 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/auth-stream.c Tue May 05 18:47:54 2009 -0400 +++ b/src/auth/auth-stream.c Tue May 05 20:25:13 2009 -0400 @@ -2,6 +2,7 @@ #include "auth-common.h" #include "str.h" +#include "strescape.h" #include "ostream.h" #include "auth-request.h" #include "auth-stream.h" @@ -35,25 +36,7 @@ } if (value != NULL) { /* escape dangerous characters in the value */ - for (; *value != '\0'; value++) { - switch (*value) { - case '\001': - str_append_c(reply->str, '\001'); - str_append_c(reply->str, '1'); - break; - case '\t': - str_append_c(reply->str, '\001'); - str_append_c(reply->str, 't'); - break; - case '\n': - str_append_c(reply->str, '\001'); - str_append_c(reply->str, 'n'); - break; - default: - str_append_c(reply->str, *value); - break; - } - } + str_tabescape_write(reply->str, value); } }
--- a/src/lib/strescape.c Tue May 05 18:47:54 2009 -0400 +++ b/src/lib/strescape.c Tue May 05 20:25:13 2009 -0400 @@ -71,3 +71,42 @@ *dest = '\0'; return start; } + +void str_tabescape_write(string_t *dest, const char *src) +{ + for (; *src != '\0'; src++) { + switch (*src) { + case '\001': + str_append_c(dest, '\001'); + str_append_c(dest, '1'); + break; + case '\t': + str_append_c(dest, '\001'); + str_append_c(dest, 't'); + break; + case '\n': + str_append_c(dest, '\001'); + str_append_c(dest, 'n'); + break; + default: + str_append_c(dest, *src); + break; + } + } +} + +const char *str_tabescape(const char *str) +{ + string_t *tmp; + const char *p; + + for (p = str; *p != '\0'; p++) { + if (*p <= '\n') { + tmp = t_str_new(128); + str_append_n(tmp, str, p-str); + str_tabescape_write(tmp, p); + return str_c(tmp); + } + } + return str; +}
--- a/src/lib/strescape.h Tue May 05 18:47:54 2009 -0400 +++ b/src/lib/strescape.h Tue May 05 20:25:13 2009 -0400 @@ -12,4 +12,9 @@ /* remove all '\' characters */ char *str_unescape(char *str); +/* For Dovecot's internal protocols: Escape \001, \t and \n characters + using \001. */ +const char *str_tabescape(const char *str); +void str_tabescape_write(string_t *dest, const char *src); + #endif