48 |
return analyze_response(buf); |
return analyze_response(buf); |
49 |
} |
} |
50 |
} |
} |
|
|
|
51 |
fcntl(sock, F_SETFL, flags); |
fcntl(sock, F_SETFL, flags); |
52 |
|
|
53 |
fatal(ERROR_NETWORK, "imapfilter: waiting input from socket; %s\n", |
fatal(ERROR_NETWORK, "imapfilter: waiting input from socket; %s\n", |
54 |
strerror(errno)); |
strerror(errno)); |
55 |
|
|
56 |
return ERROR_NETWORK; |
return ERROR_NETWORK; |
57 |
} |
} |
58 |
|
|
64 |
{ |
{ |
65 |
int r; |
int r; |
66 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF]; |
67 |
|
|
68 |
do |
do |
69 |
r = receive_response(buf); |
r = receive_response(buf); |
70 |
while (*cmd && !strstr(buf, cmd)); |
while (*cmd && !strstr(buf, cmd)); |
71 |
|
|
72 |
return r; |
return r; |
73 |
} |
} |
74 |
|
|
91 |
sscanf(buf, "* STATUS %*s (MESSAGES %d RECENT %d UNSEEN %d)", &exist, |
sscanf(buf, "* STATUS %*s (MESSAGES %d RECENT %d UNSEEN %d)", &exist, |
92 |
&recent, &unseen); |
&recent, &unseen); |
93 |
|
|
94 |
info("%d messages exist, %d recent, %d unseen,", exist, recent, |
info(" %d messages exist, %d recent, %d unseen.\n", exist, recent, |
95 |
unseen); |
unseen); |
96 |
|
|
97 |
return r; |
return r; |
125 |
char buf[RESPONSE_BUF]; |
char buf[RESPONSE_BUF]; |
126 |
char *pos; |
char *pos; |
127 |
char headers[HEADERS_BUF]; |
char headers[HEADERS_BUF]; |
128 |
|
|
129 |
headers[0] = 0; |
headers[0] = 0; |
130 |
|
|
131 |
do |
do |
132 |
r = receive_response(buf); |
r = receive_response(buf); |
133 |
while (!strstr(buf, "FETCH")); |
while (!strstr(buf, "FETCH")); |
134 |
|
|
135 |
pos = buf; |
pos = buf; |
136 |
|
|
137 |
while((pos = strchr(pos, '{'))) { |
while ((pos = strchr(pos, '{'))) { |
138 |
s = atoi(pos + 1); |
s = atoi(pos + 1); |
139 |
pos = strchr(pos, '}'); |
pos = strchr(pos, '}'); |
140 |
|
|
141 |
for (i = 0; i < HEADERS_BUF - 1 && i < s - 2; i++) |
for (i = 0; i < HEADERS_BUF - 1 && i < s - 2; i++) |
142 |
headers[i] = *(pos + 3 + i); |
headers[i] = *(pos + 3 + i); |
143 |
|
|
144 |
headers[i] = 0; |
headers[i] = 0; |
145 |
|
|
146 |
|
if ((options & OPTION_HEADERS)) |
147 |
|
info("%s\n", headers); |
148 |
|
|
149 |
info("\n%s", headers); |
if (*headers) |
150 |
log_info(LOG_WRITE, headers); |
log_info(LOG_WRITE, headers); |
151 |
|
else |
152 |
|
log_info(LOG_WRITE, NULL); |
153 |
} |
} |
154 |
|
|
155 |
return r; |
return r; |
156 |
} |
} |
157 |
|
|
190 |
result[0] = 0; |
result[0] = 0; |
191 |
|
|
192 |
regcomp(&creg, reg, REG_EXTENDED); |
regcomp(&creg, reg, REG_EXTENDED); |
193 |
|
|
194 |
if (!regexec(&creg, buf, 3, match, 0)) { |
if (!regexec(&creg, buf, 3, match, 0)) { |
195 |
strncat(result, buf + match[1].rm_so, |
strncat(result, buf + match[1].rm_so, |
196 |
min(match[1].rm_eo - match[1].rm_so, RESULT_BUF - 1)); |
min(match[1].rm_eo - match[1].rm_so, RESULT_BUF - 1)); |
199 |
r = 1; |
r = 1; |
200 |
else if (!strncmp(buf + match[2].rm_so, "BAD", 3)) |
else if (!strncmp(buf + match[2].rm_so, "BAD", 3)) |
201 |
r = -1; |
r = -1; |
202 |
|
|
203 |
verbose("Server response: %s\n", result); |
verbose("Server response: %s\n", result); |
204 |
} |
} |
|
|
|
205 |
regfree(&creg); |
regfree(&creg); |
206 |
|
|
207 |
return r; |
return r; |
208 |
} |
} |