14 |
* a unique [:alnum:] string. */ |
* a unique [:alnum:] string. */ |
15 |
|
|
16 |
|
|
17 |
unsigned int send_command(conn_t * conn, char *cmd); |
unsigned int send_command(conn_t * conn, char *cmd, char *alt); |
18 |
void send_command_cont(conn_t * conn, char *cmd); |
void send_command_cont(conn_t * conn, char *cmd); |
19 |
|
|
20 |
|
|
22 |
* Send to server data; a command. |
* Send to server data; a command. |
23 |
*/ |
*/ |
24 |
unsigned int |
unsigned int |
25 |
send_command(conn_t * conn, char *cmd) |
send_command(conn_t * conn, char *cmd, char *alt) |
26 |
{ |
{ |
27 |
debug("sending command (%s):\n\n%s\n", |
debug("sending command (%s):\n\n%s\n", |
28 |
(conn == &connpri ? "primary" : "auxiliary"), cmd); |
(conn == &connpri ? "primary" : "auxiliary"), (alt ? alt : cmd)); |
29 |
verbose("%s: %s", (conn == &connpri ? "C" : "c"), cmd); |
verbose("%s: %s", (conn == &connpri ? "C" : "c"), (alt ? alt : cmd)); |
30 |
|
|
31 |
socket_write(conn, cmd); |
socket_write(conn, cmd); |
32 |
|
|
64 |
|
|
65 |
snprintf(obuf.data, obuf.size, "%04X NOOP\r\n", tag); |
snprintf(obuf.data, obuf.size, "%04X NOOP\r\n", tag); |
66 |
|
|
67 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
68 |
} |
} |
69 |
|
|
70 |
|
|
79 |
|
|
80 |
snprintf(obuf.data, obuf.size, "%04X CAPABILITY\r\n", tag); |
snprintf(obuf.data, obuf.size, "%04X CAPABILITY\r\n", tag); |
81 |
|
|
82 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
83 |
} |
} |
84 |
|
|
85 |
|
|
95 |
|
|
96 |
snprintf(obuf.data, obuf.size, "%04X NAMESPACE\r\n", tag); |
snprintf(obuf.data, obuf.size, "%04X NAMESPACE\r\n", tag); |
97 |
|
|
98 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
99 |
} |
} |
100 |
|
|
101 |
|
|
110 |
|
|
111 |
snprintf(obuf.data, obuf.size, "%04X LOGOUT\r\n", tag); |
snprintf(obuf.data, obuf.size, "%04X LOGOUT\r\n", tag); |
112 |
|
|
113 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
114 |
} |
} |
115 |
|
|
116 |
|
|
125 |
|
|
126 |
snprintf(obuf.data, obuf.size, "%04X STARTTLS\r\n", tag); |
snprintf(obuf.data, obuf.size, "%04X STARTTLS\r\n", tag); |
127 |
|
|
128 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
129 |
} |
} |
130 |
|
|
131 |
|
|
143 |
if (!cont) { |
if (!cont) { |
144 |
snprintf(obuf.data, obuf.size, "%04X AUTHENTICATE %s\r\n", |
snprintf(obuf.data, obuf.size, "%04X AUTHENTICATE %s\r\n", |
145 |
tag, auth); |
tag, auth); |
146 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
147 |
} else { |
} else { |
148 |
send_command_cont(conn, auth); |
send_command_cont(conn, auth); |
149 |
return 0; |
return 0; |
161 |
int r, n; |
int r, n; |
162 |
char *sbuf; |
char *sbuf; |
163 |
|
|
164 |
|
/* Command to send to server. */ |
165 |
n = strlen("LOGIN") + strlen(user) + strlen(pass) + 18; |
n = strlen("LOGIN") + strlen(user) + strlen(pass) + 18; |
166 |
sbuf = (char *)smalloc(n); |
sbuf = (char *)smalloc(n); |
|
|
|
167 |
snprintf(sbuf, n, "%04X LOGIN \"%s\" \"%s\"\r\n", tag, user, pass); |
snprintf(sbuf, n, "%04X LOGIN \"%s\" \"%s\"\r\n", tag, user, pass); |
168 |
|
|
169 |
r = send_command(conn, sbuf); |
/* Alternate command with password shrouded for safe printing. */ |
170 |
|
reset_buffer(&obuf); |
171 |
|
check_buffer(&obuf, strlen("LOGIN") + strlen(user) + 18); |
172 |
|
snprintf(obuf.data, obuf.size, "%04X LOGIN \"%s\" \"\"\r\n", tag, user); |
173 |
|
|
174 |
|
r = send_command(conn, sbuf, obuf.data); |
175 |
|
|
176 |
sfree(sbuf); |
sfree(sbuf); |
177 |
|
|
193 |
snprintf(obuf.data, obuf.size, "%04X LIST \"%s\" \"%s\"\r\n", tag, |
snprintf(obuf.data, obuf.size, "%04X LIST \"%s\" \"%s\"\r\n", tag, |
194 |
refer, mbox); |
refer, mbox); |
195 |
|
|
196 |
r = send_command(conn, obuf.data); |
r = send_command(conn, obuf.data, NULL); |
197 |
|
|
198 |
return r; |
return r; |
199 |
}*/ |
}*/ |
211 |
|
|
212 |
snprintf(obuf.data, obuf.size, "%04X SUBSCRIBE \"%s\"\r\n", tag, mbox); |
snprintf(obuf.data, obuf.size, "%04X SUBSCRIBE \"%s\"\r\n", tag, mbox); |
213 |
|
|
214 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
215 |
} |
} |
216 |
|
|
217 |
|
|
226 |
|
|
227 |
snprintf(obuf.data, MEDIUM_CMD, "%04X EXAMINE \"%s\"\r\n", tag, mbox); |
snprintf(obuf.data, MEDIUM_CMD, "%04X EXAMINE \"%s\"\r\n", tag, mbox); |
228 |
|
|
229 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
230 |
}*/ |
}*/ |
231 |
|
|
232 |
|
|
241 |
|
|
242 |
snprintf(obuf.data, obuf.size, "%04X SELECT \"%s\"\r\n", tag, mbox); |
snprintf(obuf.data, obuf.size, "%04X SELECT \"%s\"\r\n", tag, mbox); |
243 |
|
|
244 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
245 |
} |
} |
246 |
|
|
247 |
|
|
257 |
|
|
258 |
snprintf(obuf.data, obuf.size, "%04X STATUS \"%s\" (%s)\r\n", tag, mbox, items); |
snprintf(obuf.data, obuf.size, "%04X STATUS \"%s\" (%s)\r\n", tag, mbox, items); |
259 |
|
|
260 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
261 |
} |
} |
262 |
|
|
263 |
|
|
272 |
|
|
273 |
snprintf(obuf.data, obuf.size, "%04X CREATE \"%s\"\r\n", tag, mbox); |
snprintf(obuf.data, obuf.size, "%04X CREATE \"%s\"\r\n", tag, mbox); |
274 |
|
|
275 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
276 |
} |
} |
277 |
|
|
278 |
|
|
292 |
else |
else |
293 |
snprintf(obuf.data, obuf.size, "%04X SEARCH %s\r\n", tag, search); |
snprintf(obuf.data, obuf.size, "%04X SEARCH %s\r\n", tag, search); |
294 |
|
|
295 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
296 |
} |
} |
297 |
|
|
298 |
|
|
307 |
|
|
308 |
snprintf(obuf.data, obuf.size, "%04X FETCH %s %s\r\n", tag, mesg, items); |
snprintf(obuf.data, obuf.size, "%04X FETCH %s %s\r\n", tag, mesg, items); |
309 |
|
|
310 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
311 |
} |
} |
312 |
|
|
313 |
|
|
325 |
tag, mesg, (mode == STORE_FLAG_REPLACE ? "" : |
tag, mesg, (mode == STORE_FLAG_REPLACE ? "" : |
326 |
mode == STORE_FLAG_ADD ? "+" : "-"), flags); |
mode == STORE_FLAG_ADD ? "+" : "-"), flags); |
327 |
|
|
328 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
329 |
} |
} |
330 |
|
|
331 |
|
|
340 |
|
|
341 |
snprintf(obuf.data, obuf.size, "%04X COPY %s \"%s\"\r\n", tag, mesg, mbox); |
snprintf(obuf.data, obuf.size, "%04X COPY %s \"%s\"\r\n", tag, mesg, mbox); |
342 |
|
|
343 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
344 |
} |
} |
345 |
|
|
346 |
|
|
357 |
snprintf(obuf.data, obuf.size, "%04X APPEND \"%s\" (%s) \"%s\" {%d}\r\n", |
snprintf(obuf.data, obuf.size, "%04X APPEND \"%s\" (%s) \"%s\" {%d}\r\n", |
358 |
tag, mbox, flags, date, size); |
tag, mbox, flags, date, size); |
359 |
|
|
360 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
361 |
} |
} |
362 |
|
|
363 |
|
|
373 |
|
|
374 |
snprintf(obuf.data, obuf.size, "%04X CLOSE\r\n", tag); |
snprintf(obuf.data, obuf.size, "%04X CLOSE\r\n", tag); |
375 |
|
|
376 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
377 |
} |
} |
378 |
|
|
379 |
|
|
388 |
|
|
389 |
snprintf(obuf.data, obuf.size, "%04X EXPUNGE\r\n", tag); |
snprintf(obuf.data, obuf.size, "%04X EXPUNGE\r\n", tag); |
390 |
|
|
391 |
return send_command(conn, obuf.data); |
return send_command(conn, obuf.data, NULL); |
392 |
} |
} |