#include "pop3-proxy.h"
#include "pop3-login-settings.h"
+#include <ctype.h>
+
/* Disconnect client when it sends too many bad commands */
#define CLIENT_MAX_BAD_COMMANDS 3
+#define CLIENT_MAX_CMD_LEN 8
static bool cmd_stls(struct pop3_client *client)
{
static bool client_command_execute(struct pop3_client *client, const char *cmd,
const char *args)
{
- cmd = t_str_ucase(cmd);
if (strcmp(cmd, "CAPA") == 0)
return cmd_capa(client, args);
if (strcmp(cmd, "USER") == 0)
{
const unsigned char *data;
size_t size, i;
+ string_t *cmd = t_str_new(CLIENT_MAX_CMD_LEN);
if (i_stream_read_more(client->input, &data, &size) <= 0)
return FALSE;
for(i = 0; i < size; i++) {
+ if (data[i] == '\r') continue;
if (data[i] == ' ' ||
- data[i] == '\r' ||
- data[i] == '\n') {
- *cmd_r = t_str_ucase(t_strndup(data, i));
- i_stream_skip(client->input, i+1);
+ data[i] == '\n' ||
+ data[i] == '\0' ||
+ i >= CLIENT_MAX_CMD_LEN) {
+ *cmd_r = str_c(cmd);
+ /* only skip ws */
+ i_stream_skip(client->input, i + (data[i] == ' ' ? 1 : 0));
return TRUE;
}
+ str_append_c(cmd, i_toupper(data[i]));
}
return FALSE;
}