223 |
} |
} |
224 |
|
|
225 |
static int |
static int |
226 |
check_capa (f_imap_t f_imap, char *capa) |
read_capa (f_imap_t f_imap, int force) |
227 |
{ |
{ |
228 |
int i; |
int status = 0; |
229 |
|
|
230 |
|
if (force) |
231 |
|
{ |
232 |
|
argcv_free (f_imap->capac, f_imap->capav); |
233 |
|
f_imap->capac = 0; |
234 |
|
f_imap->capav = NULL; |
235 |
|
} |
236 |
|
|
237 |
if (!f_imap->capav) |
if (!f_imap->capav) |
238 |
{ |
{ |
|
int status; |
|
239 |
status = imap_writeline (f_imap, "g%u CAPABILITY\r\n", |
status = imap_writeline (f_imap, "g%u CAPABILITY\r\n", |
240 |
f_imap->seq++); |
f_imap->seq++); |
241 |
status = imap_send (f_imap); |
status = imap_send (f_imap); |
242 |
status = imap_parse (f_imap); |
status = imap_parse (f_imap); |
243 |
} |
} |
244 |
|
return status; |
245 |
|
} |
246 |
|
|
247 |
|
static int |
248 |
|
check_capa (f_imap_t f_imap, char *capa) |
249 |
|
{ |
250 |
|
int i; |
251 |
|
|
252 |
|
read_capa (f_imap, 0); |
253 |
for (i = 0; i < f_imap->capac; i++) |
for (i = 0; i < f_imap->capac; i++) |
254 |
if (strcasecmp (f_imap->capav[i], capa) == 0) |
if (strcasecmp (f_imap->capav[i], capa) == 0) |
255 |
return 0; |
return 0; |
283 |
folder->stream = str; |
folder->stream = str; |
284 |
FOLDER_DEBUG1 (folder, MU_DEBUG_PROT, "TLS negotiation %s\n", |
FOLDER_DEBUG1 (folder, MU_DEBUG_PROT, "TLS negotiation %s\n", |
285 |
status == 0 ? "succeeded" : "failed"); |
status == 0 ? "succeeded" : "failed"); |
286 |
|
read_capa (f_imap, 1); |
287 |
} |
} |
288 |
return status; |
return status; |
289 |
#else |
#else |
300 |
ticket_t ticket; |
ticket_t ticket; |
301 |
int status = 0; |
int status = 0; |
302 |
|
|
303 |
|
if (check_capa (f_imap, "LOGINDISABLED") == 0) |
304 |
|
{ |
305 |
|
FOLDER_DEBUG0 (folder, MU_DEBUG_PROT, "LOGIN command disabled\n"); |
306 |
|
return ENOSYS; |
307 |
|
} |
308 |
|
|
309 |
switch (f_imap->state) |
switch (f_imap->state) |
310 |
{ |
{ |
311 |
case IMAP_AUTH: |
case IMAP_AUTH: |