commands.c revision 78a5b3e697af5db96fe0dffed600b0d6370bb8e5
b9f30617c2c96d54acbc4f85ed17b939c4f28916Timo Sirainen/* Copyright (c) 2009-2010 Dovecot authors, see the included COPYING file */
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#define ERRSTR_TEMP_MAILBOX_FAIL "451 4.3.0 <%s> Temporary internal error"
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#define ERRSTR_TEMP_USERDB_FAIL_PREFIX "451 4.3.0 <%s> "
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen ERRSTR_TEMP_USERDB_FAIL_PREFIX "Temporary user lookup failure"
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#define LMTP_PROXY_DEFAULT_TIMEOUT_MSECS (1000*30)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenint cmd_lhlo(struct client *client, const char *args)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *p;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen client_send_line(client, "501 Missing hostname");
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen /* domain / address-literal */
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen rfc822_parser_init(&parser, (const unsigned char *)args, strlen(args),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen client_send_line(client, "250-%s", client->my_domain);
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen client_send_line(client, "250-ENHANCEDSTATUSCODES");
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen client->state.lhlo = p_strdup(client->state_pool, str_c(domain));
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainenint cmd_mail(struct client *client, const char *args)
383d0e8c24451468d6bea17e4b55d74de744abe6Timo Sirainen unsigned int len;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen client_send_line(client, "503 5.5.1 MAIL already given");
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen if (strncasecmp(addr, "FROM:<", 6) != 0 || addr[len-1] != '>') {
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen client_send_line(client, "501 5.5.4 Invalid parameters");
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen else if (strcasecmp(*argv, "BODY=8BITMIME") == 0)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen "501 5.5.4 Unsupported options");
1cbc0c6372d24168962698c5f4d3e15df8943ebfTimo Sirainen p_strndup(client->state_pool, addr + 6, len - 7);
1cbc0c6372d24168962698c5f4d3e15df8943ebfTimo Sirainen p_array_init(&client->state.rcpt_to, client->state_pool, 64);
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainenclient_proxy_rcpt_parse_fields(struct lmtp_proxy_settings *set,
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen const char *const *args, const char **address)
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen /* changing the username */
97db4761382024093f441e4bc78ba8b6a056504dTimo Sirainen /* just ignore it */
1358e2c58ce29231485a5cfa454756d429ad3d2cTimo Sirainenclient_proxy_is_ourself(const struct client *client,
97db4761382024093f441e4bc78ba8b6a056504dTimo Sirainenstatic bool client_proxy_rcpt(struct client *client, const char *address,
int ret;
if (ret <= 0) {
if (ret < 0) {
return TRUE;
return FALSE;
return FALSE;
return FALSE;
return TRUE;
return name;
return name;
return name;
return name;
return name;
const char *p, *p2;
if (p != NULL) {
unsigned int len;
int ret = 0;
argv++;
if (ret < 0) {
username);
if (ret == 0) {
void **sets;
int ret;
ret = 0;
return ret;
unsigned int count;
int ret;
src_mail);
if (ret == 0)
return TRUE;
return FALSE;
FALSE);
return cinput;
static const char *wanted_headers[] = {
0, headers_ctx);
if (seteuid(0) < 0)
if (old_uid == 0) {
if (seteuid(0) < 0)
if (timeout) {
return ret;
int fd;
const unsigned char *data;
if (ret == 0)