pop3-proxy.c revision ab1236617440e654d5c5a043b677512714b788dd
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (C) 2004 Timo Sirainen */
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainenstatic void proxy_input(struct istream *input, struct ostream *output,
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen /* remote authentication failed, we're just
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen freeing the proxy */
ecdce39e5ef4b62eefa9f5818f17d153fd5d710aTimo Sirainen /* failed for some reason */
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen /* buffer full */
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen i_error("pop-proxy(%s): Remote input buffer full",
ecdce39e5ef4b62eefa9f5818f17d153fd5d710aTimo Sirainen /* disconnected */
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen client_destroy(client, "Proxy: Remote disconnected");
beae08c3abc23434d15572ab3b059fbdf8efc2dfTimo Sirainen /* this is a banner */
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen "Remote returned invalid banner: %s",
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen /* send USER command */
c649139f889c02154fc9a153728b81619edb5663Timo Sirainen (void)o_stream_send(output, str_data(str), str_len(str));
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen /* USER successful, send PASS */
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen /* Login successful. Send this line to client. */
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen (void)o_stream_send_str(client->output, line);
df1713bd29d29a3e3f3ebfdf05f929525825a7d3Timo Sirainen (void)o_stream_send(client->output, "\r\n", 2);
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen login_proxy_detach(client->proxy, client->input,
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen /* Login failed. Send our own failure reply so client can't
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen figure out if user exists or not just by looking at the
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen reply string. */
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen client_send_line(client, "-ERR "AUTH_FAILED_MSG);
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen /* allow client input again */
48566ca412a7cf3b42512fd0ec112744778e5da0Timo Sirainen client->io = io_add(client->common.fd, IO_READ,
c649139f889c02154fc9a153728b81619edb5663Timo Sirainenint pop3_proxy_new(struct pop3_client *client, const char *host,
c649139f889c02154fc9a153728b81619edb5663Timo Sirainen unsigned int port, const char *user, const char *password)
c649139f889c02154fc9a153728b81619edb5663Timo Sirainen client->proxy = login_proxy_new(&client->common, host, port,
53ec1ff2231d477db3103c51987fa9cb6033bc16Timo Sirainen /* disable input until authentication is finished */