Mercurial > dovecot > original-hg > dovecot-1.2
view src/auth/auth-stream.c @ 4891:6ab2712f1a93 HEAD
Only imap binary was actually working.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 10 Dec 2006 14:35:02 +0200 |
parents | e2d267e6f930 |
children | 7a8f68b0cc31 |
line wrap: on
line source
/* Copyright (C) 2005 Timo Sirainen */ #include "common.h" #include "str.h" #include "ostream.h" #include "auth-request.h" #include "auth-stream.h" struct auth_stream_reply { string_t *str; }; struct auth_stream_reply *auth_stream_reply_init(struct auth_request *request) { struct auth_stream_reply *reply; reply = p_new(request->pool, struct auth_stream_reply, 1); reply->str = str_new(request->pool, 256); return reply; } void auth_stream_reply_add(struct auth_stream_reply *reply, const char *key, const char *value) { if (str_len(reply->str) > 0) str_append_c(reply->str, '\t'); if (key != NULL) { i_assert(*key != '\0'); i_assert(strchr(key, '\t') == NULL && strchr(key, '\n') == NULL); str_append(reply->str, key); if (value != NULL) str_append_c(reply->str, '='); } 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; } } } } void auth_stream_reply_reset(struct auth_stream_reply *reply) { str_truncate(reply->str, 0); } void auth_stream_reply_import(struct auth_stream_reply *reply, const char *str) { if (str_len(reply->str) > 0) str_append_c(reply->str, '\t'); str_append(reply->str, str); } const char *auth_stream_reply_export(struct auth_stream_reply *reply) { return str_c(reply->str); }