Changeset 1414:f8449f93c867
- Timestamp:
- 1999-12-09 03:17:04 (9 years ago)
- Author:
- Thomas Roessler <roessler@…>
- Branch:
- HEAD
- Message:
-
Tommi Komulainen's multiple IMAP usernames patch.
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r1383
|
r1414
|
 |
| 809 | 809 | {Â |
| 810 | 810 | char msg[LONG_STRING];Â |
| 811 | Â | char* mbox;Â |
| Â | 811 | IMAP_MBOX mx;Â |
| 812 | 812 | int nentry = menu->current;Â |
| 813 | 813 | Â |
| 814 |  | imap_parse_path (state.entry[nentry].name, NULL, 0, NULL, |
| 815 | Â | NULL, &mbox);Â |
| Â | 814 | imap_parse_path (state.entry[nentry].name, &mx);Â |
| 816 | 815 | snprintf (msg, sizeof (msg), _("Really delete mailbox \"%s\"?"), |
| 817 | Â | mbox);Â |
| Â | 816 | mx.mbox);Â |
| 818 | 817 | if (mutt_yesorno (msg, M_NO) == M_YES)Â |
| 819 | 818 | {Â |
| 820 | Â | if (!imap_delete_mailbox (Context, mbox))Â |
| Â | 819 | if (!imap_delete_mailbox (Context, mx.mbox))Â |
| 821 | 820 | {Â |
| 822 | 821 | /* free the mailbox from the browser */Â |
-
|
r1410
|
r1414
|
 |
| 1960 | 1960 | <tt/{imapserver:port}inbox/. |
| 1961 | 1961 | Â |
| Â | 1962 | You can also specify different username for each folder, ie:Â |
|  | 1963 | <tt/{username@imapserver[:port]}inbox/. |
| Â | 1964 | Â |
| 1962 | 1965 | If Mutt was compiled with SSL support (by running the <em/configure/Â |
| 1963 | 1966 | script with the <em/--enable-ssl/ flag), connections to IMAP servers |
| 1964 | 1967 | can be encrypted. This naturally requires that the server supports |
| 1965 | 1968 | SSL encrypted connections. To access a folder with IMAP/SSL, you should |
| 1966 |  | use <tt>{imapserver[:port]/ssl}path/to/folder</tt> as your  |
|  | 1969 | use <tt>{[username@]imapserver[:port]/ssl}path/to/folder</tt> as your  |
| 1967 | 1970 | folder path. |
| 1968 | 1971 | Â |
-
|
r1383
|
r1414
|
 |
| 27 | 27 | * Preserve deleted messages if you don't choose to expunge them |
| 28 | 28 | * Delete mailboxes (from the browser)Â |
|  | 29 | * Multiple IMAP usernames |
-
|
r1334
|
r1414
|
 |
| 122 | 122 | Â |
| 123 | 123 | /* get an IMAP service ticket for the server */Â |
| 124 | Â | snprintf (buf1, sizeof (buf1), "imap@%s", idata->conn->server);Â |
| Â | 124 | snprintf (buf1, sizeof (buf1), "imap@%s", idata->conn->mx.host);Â |
| 125 | 125 | request_buf.value = buf1;Â |
| 126 | 126 | request_buf.length = strlen (buf1) + 1;Â |
| … |
… |
 |
| 478 | 478 | while (r != 0)Â |
| 479 | 479 | {Â |
| 480 | Â | if (!ImapUser)Â |
| 481 | Â | {Â |
| 482 | Â | strfcpy (user, NONULL(Username), sizeof (user));Â |
| 483 | Â | if (mutt_get_field (_("IMAP Username: "), user, sizeof (user), 0) != 0)Â |
| 484 | Â | {Â |
| 485 | Â | user[0] = 0;Â |
| 486 | Â | return (-1);Â |
| 487 | Â | }Â |
| Â | 480 | if (! (conn->mx.flags & M_IMAP_USER))Â |
| Â | 481 | {Â |
| Â | 482 | if (!ImapUser)Â |
| Â | 483 | {Â |
| Â | 484 | strfcpy (user, NONULL(Username), sizeof (user));Â |
| Â | 485 | if (mutt_get_field (_("IMAP Username: "), user, sizeof (user), 0) != 0)Â |
| Â | 486 | {Â |
| Â | 487 | user[0] = 0;Â |
| Â | 488 | return (-1);Â |
| Â | 489 | }Â |
| Â | 490 | }Â |
|  | 491 | else |
| Â | 492 | strfcpy (user, ImapUser, sizeof (user));Â |
| 488 | 493 | }Â |
| 489 | 494 | else |
| 490 | Â | strfcpy (user, ImapUser, sizeof (user));Â |
| Â | 495 | strfcpy (user, conn->mx.user, sizeof (user));Â |
| 491 | 496 | Â |
| 492 | 497 | if (!user[0])Â |
| … |
… |
 |
| 520 | 525 | if (mutt_bit_isset (idata->capabilities, ACRAM_MD5))Â |
| 521 | 526 | {Â |
| 522 | Â | if (!ImapCRAMKey)Â |
| 523 | Â | {Â |
| 524 | Â | ckey[0] = '\0';Â |
| 525 |  | snprintf (buf, sizeof (buf), _("CRAM key for %s@%s: "), user, |
| 526 | Â | conn->server);Â |
| 527 | Â | if (mutt_get_field (buf, ckey, sizeof (ckey), M_PASS) != 0)Â |
| 528 | Â | return -1;Â |
| Â | 527 | if (!(conn->mx.flags & M_IMAP_CRAM))Â |
| Â | 528 | {Â |
| Â | 529 | if (!ImapCRAMKey)Â |
| Â | 530 | {Â |
| Â | 531 | ckey[0] = '\0';Â |
|  | 532 | snprintf (buf, sizeof (buf), _("CRAM key for %s@%s: "), user, |
| Â | 533 | conn->mx.host);Â |
| Â | 534 | if (mutt_get_field (buf, ckey, sizeof (ckey), M_PASS) != 0)Â |
| Â | 535 | return -1;Â |
| Â | 536 | }Â |
|  | 537 | else |
| Â | 538 | strfcpy (ckey, ImapCRAMKey, sizeof (ckey));Â |
| 529 | 539 | }Â |
| 530 | 540 | else |
| 531 | Â | strfcpy (ckey, ImapCRAMKey, sizeof (ckey));Â |
| Â | 541 | strfcpy (ckey, conn->mx.pass, sizeof (ckey));Â |
| 532 | 542 | Â |
| 533 | 543 | if (*ckey)Â |
| … |
… |
 |
| 537 | 547 | mutt_error _("CRAM-MD5 authentication failed.");Â |
| 538 | 548 | sleep (1);Â |
| Â | 549 | if (!(conn->mx.flags & M_IMAP_CRAM))Â |
| Â | 550 | FREE (&ImapCRAMKey);Â |
| Â | 551 | conn->mx.flags &= ~M_IMAP_CRAM;Â |
| 539 | 552 | }Â |
| 540 | 553 | else |
| Â | 554 | {Â |
| Â | 555 | strfcpy (conn->mx.pass, ckey, sizeof (conn->mx.pass));Â |
| Â | 556 | conn->mx.flags |= M_IMAP_CRAM;Â |
| 541 | 557 | return 0;Â |
| Â | 558 | }Â |
| 542 | 559 | }Â |
| 543 | 560 | else |
| … |
… |
 |
| 550 | 567 | dprint (2, (debugfile, "CRAM-MD5 authentication is not available\n"));Â |
| 551 | 568 | Â |
| 552 | Â | if (!ImapPass)Â |
| 553 | Â | {Â |
| 554 | Â | pass[0]=0;Â |
| 555 | Â | snprintf (buf, sizeof (buf), _("Password for %s@%s: "), user, conn->server);Â |
| 556 | Â | if (mutt_get_field (buf, pass, sizeof (pass), M_PASS) != 0 ||Â |
| 557 | Â | !pass[0])Â |
| 558 | Â | {Â |
| 559 | Â | return (-1);Â |
| 560 | Â | }Â |
| Â | 569 | if (! (conn->mx.flags & M_IMAP_PASS))Â |
| Â | 570 | {Â |
| Â | 571 | if (!ImapPass)Â |
| Â | 572 | {Â |
| Â | 573 | pass[0]=0;Â |
| Â | 574 | snprintf (buf, sizeof (buf), _("Password for %s@%s: "), user, conn->mx.host);Â |
| Â | 575 | if (mutt_get_field (buf, pass, sizeof (pass), M_PASS) != 0 ||Â |
| Â | 576 | !pass[0])Â |
| Â | 577 | {Â |
| Â | 578 | return (-1);Â |
| Â | 579 | }Â |
| Â | 580 | }Â |
|  | 581 | else |
| Â | 582 | strfcpy (pass, ImapPass, sizeof (pass));Â |
| 561 | 583 | }Â |
| 562 | 584 | else |
| 563 | Â | strfcpy (pass, ImapPass, sizeof (pass));Â |
| Â | 585 | strfcpy (pass, conn->mx.pass, sizeof (pass));Â |
| 564 | 586 | Â |
| 565 | 587 | imap_quote_string (q_user, sizeof (q_user), user);Â |
| … |
… |
 |
| 581 | 603 | sleep (1);Â |
| 582 | 604 | Â |
| 583 | Â | FREE (&ImapUser);Â |
| 584 | Â | FREE (&ImapPass);Â |
| Â | 605 | if (!(conn->mx.flags & M_IMAP_USER))Â |
| Â | 606 | FREE (&ImapUser);Â |
| Â | 607 | if (!(conn->mx.flags & M_IMAP_PASS))Â |
| Â | 608 | FREE (&ImapPass);Â |
| Â | 609 | conn->mx.flags &= ~M_IMAP_PASS;Â |
| 585 | 610 | }Â |
| 586 | 611 | else |
| … |
… |
 |
| 588 | 613 | /* If they have a successful login, we may as well cache the  |
| 589 | 614 | * user/password. */Â |
| 590 | Â | if (!ImapUser)Â |
| 591 | Â | ImapUser = safe_strdup (user);Â |
| 592 | Â | if (!ImapPass)Â |
| 593 | Â | ImapPass = safe_strdup (pass);Â |
| Â | 615 | if (!(conn->mx.flags & M_IMAP_USER))Â |
| Â | 616 | strfcpy (conn->mx.user, user, sizeof (conn->mx.user));Â |
| Â | 617 | if (!(conn->mx.flags & M_IMAP_PASS))Â |
| Â | 618 | strfcpy (conn->mx.pass, pass, sizeof (conn->mx.pass));Â |
| Â | 619 | Â |
| Â | 620 | conn->mx.flags |= (M_IMAP_USER | M_IMAP_PASS);Â |
| 594 | 621 | }Â |
| 595 | 622 | }Â |
-
|
r1373
|
r1414
|
 |
| 44 | 44 | char nsbuf[LONG_STRING];Â |
| 45 | 45 | char mbox[LONG_STRING];Â |
| 46 | Â | char host[SHORT_STRING];Â |
| 47 | Â | int port;Â |
| 48 | 46 | char list_cmd[5];Â |
| 49 | 47 | char seq[16];Â |
| 50 | Â | char *ipath = NULL;Â |
| 51 | 48 | IMAP_NAMESPACE_INFO nsi[16];Â |
| 52 | 49 | int home_namespace = 0;Â |
| … |
… |
 |
| 60 | 57 | int noselect;Â |
| 61 | 58 | int noinferiors;Â |
| 62 | Â | Â |
| 63 | Â | if (imap_parse_path (path, host, sizeof (host), &port, NULL, &ipath))Â |
| Â | 59 | IMAP_MBOX mx;Â |
| Â | 60 | Â |
| Â | 61 | if (imap_parse_path (path, &mx))Â |
| 64 | 62 | {Â |
| 65 | 63 | mutt_error ("%s is an invalid IMAP path", path);Â |
| … |
… |
 |
| 69 | 67 | strfcpy (list_cmd, option (OPTIMAPLSUB) ? "LSUB" : "LIST", sizeof (list_cmd));Â |
| 70 | 68 | Â |
| 71 | Â | conn = mutt_socket_select_connection (host, port, 0);Â |
| Â | 69 | conn = mutt_socket_select_connection (&mx, 0);Â |
| 72 | 70 | idata = CONN_DATA;Â |
| 73 | 71 | Â |
| … |
… |
 |
| 85 | 83 | }Â |
| 86 | 84 | Â |
| 87 | Â | if (ipath[0] == '\0')Â |
| Â | 85 | if (mx.mbox[0] == '\0')Â |
| 88 | 86 | {Â |
| 89 | 87 | home_namespace = 1;Â |
| 90 | 88 | mbox[0] = 0; /* Do not replace "" with "INBOX" here */Â |
| 91 | Â | ipath = ImapHomeNamespace;Â |
| Â | 89 | mx.mbox = ImapHomeNamespace;Â |
| 92 | 90 | nns = 0;Â |
| 93 | 91 | if (mutt_bit_isset(idata->capabilities,NAMESPACE))Â |
| … |
… |
 |
| 99 | 97 | return (-1);Â |
| 100 | 98 | }Â |
| 101 | Â | if (!ipath) /* Any explicitly set imap_home_namespace wins */Â |
| Â | 99 | if (!mx.mbox) /* Any explicitly set imap_home_namespace wins */Â |
| 102 | 100 | { Â |
| 103 | 101 | for (i = 0; i < nns; i++)Â |
| … |
… |
 |
| 105 | 103 | (nsi[i].type == IMAP_NS_PERSONAL || nsi[i].type == IMAP_NS_SHARED))Â |
| 106 | 104 | {Â |
| 107 | Â | ipath = nsi->prefix;Â |
| Â | 105 | mx.mbox = nsi->prefix;Â |
| 108 | 106 | nsi->home_namespace = 1;Â |
| 109 | 107 | break;Â |
| … |
… |
 |
| 114 | 112 | mutt_message _("Contacted server, getting folder list...");Â |
| 115 | 113 | Â |
| 116 | Â | if (ipath && ipath[0] != '\0')Â |
| 117 | Â | {Â |
| 118 | Â | imap_fix_path (idata, ipath, mbox, sizeof (mbox));Â |
| Â | 114 | if (mx.mbox && mx.mbox[0] != '\0')Â |
| Â | 115 | {Â |
| Â | 116 | imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox));Â |
| 119 | 117 | n = mutt_strlen (mbox);Â |
| 120 | 118 | Â |
| … |
… |
 |
| 154 | 152 | {Â |
| 155 | 153 | showparents = 1;Â |
| 156 | Â | imap_qualify_path (buf, sizeof (buf), host, port, mbox, NULL);Â |
| Â | 154 | imap_qualify_path (buf, sizeof (buf), &mx, mbox, NULL);Â |
| 157 | 155 | state->folder = safe_strdup (buf);Â |
| 158 | 156 | n--;Â |
| … |
… |
 |
| 183 | 181 | ctmp = mbox[n];Â |
| 184 | 182 | mbox[n] = '\0';Â |
| 185 | Â | imap_qualify_path (buf, sizeof (buf), host, port, mbox, NULL);Â |
| Â | 183 | imap_qualify_path (buf, sizeof (buf), &mx, mbox, NULL);Â |
| 186 | 184 | state->folder = safe_strdup (buf);Â |
| 187 | 185 | }Â |
| … |
… |
 |
| 198 | 196 | if (!state->folder)Â |
| 199 | 197 | {Â |
| 200 | Â | imap_qualify_path (buf, sizeof (buf), host, port, relpath, NULL);Â |
| Â | 198 | imap_qualify_path (buf, sizeof (buf), &mx, relpath, NULL);Â |
| 201 | 199 | state->folder = safe_strdup (buf);Â |
| 202 | 200 | }Â |
| … |
… |
 |
| 207 | 205 | if (!state->folder)Â |
| 208 | 206 | {Â |
| 209 | Â | imap_qualify_path (buf, sizeof (buf), host, port, NULL, NULL);Â |
| Â | 207 | imap_qualify_path (buf, sizeof (buf), &mx, NULL, NULL);Â |
| 210 | 208 | state->folder = safe_strdup (buf);Â |
| 211 | 209 | }Â |
| … |
… |
 |
| 249 | 247 | IMAP_DATA *idata = CONN_DATA;Â |
| 250 | 248 | char buf[LONG_STRING];Â |
| 251 | Â | char host[SHORT_STRING];Â |
| 252 | Â | int port;Â |
| 253 | Â | char *curfolder;Â |
| 254 | 249 | char *name;Â |
| 255 | 250 | int noselect;Â |
| 256 | 251 | int noinferiors;Â |
| 257 | Â | Â |
| 258 | Â | if (imap_parse_path (state->folder, host, sizeof (host), &port, NULL, &curfolder))Â |
| Â | 252 | IMAP_MBOX mx;Â |
| Â | 253 | Â |
| Â | 254 | if (imap_parse_path (state->folder, &mx))Â |
| 259 | 255 | {Â |
| 260 | 256 | dprint (2, (debugfile, |
| … |
… |
 |
| 278 | 274 | noselect = 1;Â |
| 279 | 275 | /* prune current folder from output */Â |
| 280 | Â | if (isparent || strncmp (name, curfolder, strlen (name)))Â |
| Â | 276 | if (isparent || strncmp (name, mx.mbox, strlen (name)))Â |
| 281 | 277 | imap_add_folder (idata->delim, name, noselect, noinferiors, state, |
| 282 | 278 | isparent);Â |
| … |
… |
 |
| 295 | 291 | char tmp[LONG_STRING];Â |
| 296 | 292 | char relpath[LONG_STRING];Â |
| 297 | Â | char host[SHORT_STRING];Â |
| 298 | Â | int port;Â |
| 299 | Â | char *curfolder;Â |
| 300 | 293 | int flen = strlen (folder);Â |
| 301 | Â | Â |
| 302 | Â | if (imap_parse_path (state->folder, host, sizeof (host), &port, NULL, &curfolder))Â |
| Â | 294 | IMAP_MBOX mx;Â |
| Â | 295 | Â |
| Â | 296 | if (imap_parse_path (state->folder, &mx))Â |
| 303 | 297 | return;Â |
| 304 | 298 | Â |
| … |
… |
 |
| 321 | 315 | strfcpy (relpath, "../", sizeof (relpath));Â |
| 322 | 316 | /* strip current folder from target, to render a relative path */Â |
| 323 | Â | else if (!strncmp (curfolder, folder, strlen (curfolder)))Â |
| 324 | Â | strfcpy (relpath, folder + strlen (curfolder), sizeof (relpath));Â |
| Â | 317 | else if (!strncmp (mx.mbox, folder, strlen (mx.mbox)))Â |
| Â | 318 | strfcpy (relpath, folder + strlen (mx.mbox), sizeof (relpath));Â |
| 325 | 319 | else |
| 326 | 320 | strfcpy (relpath, folder, sizeof (relpath));Â |
| … |
… |
 |
| 334 | 328 | if (!noselect)Â |
| 335 | 329 | {Â |
| 336 | Â | imap_qualify_path (tmp, sizeof (tmp), host, port, folder, NULL);Â |
| Â | 330 | imap_qualify_path (tmp, sizeof (tmp), &mx, folder, NULL);Â |
| 337 | 331 | (state->entry)[state->entrylen].name = safe_strdup (tmp);Â |
| 338 | 332 | Â |
| … |
… |
 |
| 350 | 344 | trailing_delim[0] = (flen && folder[flen - 1] != delim) ? delim : '\0';Â |
| 351 | 345 | Â |
| 352 | Â | imap_qualify_path (tmp, sizeof (tmp), host, port, folder, trailing_delim);Â |
| Â | 346 | imap_qualify_path (tmp, sizeof (tmp), &mx, folder, trailing_delim);Â |
| 353 | 347 | (state->entry)[state->entrylen].name = safe_strdup (tmp);Â |
| 354 | 348 | Â |
-
|
r1383
|
r1414
|
 |
| 538 | 538 | char buf[LONG_STRING];Â |
| 539 | 539 | char bufout[LONG_STRING];Â |
| 540 | Â | char host[SHORT_STRING];Â |
| 541 | 540 | char seq[16];Â |
| 542 | Â | char *pc = NULL;Â |
| 543 | 541 | int count = 0;Â |
| 544 | 542 | int n;Â |
| 545 | Â | int port;Â |
| 546 | Â | int socktype;Â |
| 547 | Â | Â |
| 548 | Â | if (imap_parse_path (ctx->path, host, sizeof (host), &port, &socktype, &pc))Â |
| Â | 543 | IMAP_MBOX mx;Â |
| Â | 544 | Â |
| Â | 545 | if (imap_parse_path (ctx->path, &mx))Â |
| 549 | 546 | {Â |
| 550 | 547 | mutt_error ("%s is an invalid IMAP path", ctx->path);Â |
| … |
… |
 |
| 552 | 549 | }Â |
| 553 | 550 | Â |
| 554 | Â | conn = mutt_socket_select_connection (host, port, 0);Â |
| Â | 551 | conn = mutt_socket_select_connection (&mx, 0);Â |
| 555 | 552 | idata = CONN_DATA;Â |
| 556 | 553 | Â |
| … |
… |
 |
| 563 | 560 | idata = safe_calloc (1, sizeof (IMAP_DATA));Â |
| 564 | 561 | Â |
| 565 | Â | conn = mutt_socket_select_connection (host, port, socktype);Â |
| Â | 562 | conn = mutt_socket_select_connection (&mx, 1);Â |
| 566 | 563 | conn->data = idata;Â |
| 567 | 564 | idata->conn = conn;Â |
| … |
… |
 |
| 573 | 570 | Â |
| 574 | 571 | /* Clean up path and replace the one in the ctx */Â |
| 575 | Â | imap_fix_path (idata, pc, buf, sizeof (buf));Â |
| Â | 572 | imap_fix_path (idata, mx.mbox, buf, sizeof (buf));Â |
| 576 | 573 | FREE(&(idata->selected_mailbox));Â |
| 577 | 574 | idata->selected_mailbox = safe_strdup (buf);Â |
| 578 |  | imap_qualify_path (buf, sizeof (buf), host, port, idata->selected_mailbox, |
|  | 575 | imap_qualify_path (buf, sizeof (buf), &mx, idata->selected_mailbox, |
| 579 | 576 | NULL);Â |
| 580 | 577 | Â |
| … |
… |
 |
| 598 | 595 | do |
| 599 | 596 | {Â |
| Â | 597 | char *pc;Â |
| Â | 598 | Â |
| 600 | 599 | if (mutt_socket_read_line_d (buf, sizeof (buf), conn) < 0)Â |
| 601 | 600 | break;Â |
| … |
… |
 |
| 713 | 712 | IMAP_DATA* idata;Â |
| 714 | 713 | CONNECTION* conn;Â |
| 715 | Â | char host[SHORT_STRING];Â |
| 716 | Â | int port;Â |
| 717 | 714 | char curpath[LONG_STRING];Â |
| 718 | Â | char* mbox = NULL;Â |
| Â | 715 | IMAP_MBOX mx;Â |
| 719 | 716 | Â |
| 720 | 717 | strfcpy (curpath, path, sizeof (curpath));Â |
| 721 | 718 | /* check that the target folder makes sense */Â |
| 722 | Â | if (imap_parse_path (curpath, host, sizeof (host), &port, NULL, &mbox))Â |
| Â | 719 | if (imap_parse_path (curpath, &mx))Â |
| 723 | 720 | return -1;Â |
| 724 | 721 | Â |
| 725 | 722 | /* and that it's on the same server as the current folder */Â |
| 726 | Â | conn = mutt_socket_select_connection (host, port, 0);Â |
| Â | 723 | conn = mutt_socket_select_connection (&mx, 0);Â |
| 727 | 724 | if (!CTX_DATA || !CONN_DATA || (CTX_DATA->conn != CONN_DATA->conn))Â |
| 728 | 725 | {Â |
| … |
… |
 |
| 748 | 745 | CONNECTION *conn;Â |
| 749 | 746 | IMAP_DATA *idata;Â |
| 750 | Â | char host[SHORT_STRING];Â |
| 751 | 747 | char buf[LONG_STRING], mbox[LONG_STRING];Â |
| 752 | 748 | char mailbox[LONG_STRING];Â |
| 753 | Â | char *pc;Â |
| 754 | 749 | int r;Â |
| 755 | Â | int port;Â |
| 756 | Â | int socktype;Â |
| 757 | Â | Â |
| 758 | Â | if (imap_parse_path (ctx->path, host, sizeof (host), &port, &socktype, &pc))Â |
| Â | 750 | IMAP_MBOX mx;Â |
| Â | 751 | Â |
| Â | 752 | if (imap_parse_path (ctx->path, &mx))Â |
| 759 | 753 | return (-1);Â |
| 760 | 754 | Â |
| 761 | 755 | ctx->magic = M_IMAP;Â |
| 762 | 756 | Â |
| 763 | Â | conn = mutt_socket_select_connection (host, port, 0);Â |
| Â | 757 | conn = mutt_socket_select_connection (&mx, 0);Â |
| 764 | 758 | idata = CONN_DATA;Â |
| 765 | 759 | Â |
| … |
… |
 |
| 780 | 774 | /* check mailbox existance */Â |
| 781 | 775 | Â |
| 782 | Â | imap_fix_path (idata, pc, mailbox, sizeof (mailbox));Â |
| Â | 776 | imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox));Â |
| 783 | 777 | Â |
| 784 | 778 | imap_quote_string (mbox, sizeof (mbox), mailbox);Â |
| … |
… |
 |
| 1168 | 1162 | CONNECTION *conn;Â |
| 1169 | 1163 | IMAP_DATA *idata;Â |
| 1170 | Â | char host[SHORT_STRING];Â |
| 1171 | 1164 | char buf[LONG_STRING];Â |
| 1172 | 1165 | char mbox[LONG_STRING];Â |
| … |
… |
 |
| 1174 | 1167 | char seq[8];Â |
| 1175 | 1168 | char *s;Â |
| 1176 | Â | char *pc;Â |
| 1177 | 1169 | int msgcount = 0;Â |
| 1178 | Â | int port;Â |
| 1179 | Â | Â |
| 1180 | Â | if (imap_parse_path (path, host, sizeof (host), &port, NULL, &pc))Â |
| 1181 | Â | return -1;Â |
| 1182 | Â | Â |
| 1183 | Â | conn = mutt_socket_select_connection (host, port, 0);Â |
| Â | 1170 | IMAP_MBOX mx;Â |
| Â | 1171 | Â |
| Â | 1172 | if (imap_parse_path (path, &mx))Â |
| Â | 1173 | return -1;Â |
| Â | 1174 | Â |
| Â | 1175 | conn = mutt_socket_select_connection (&mx, 0);Â |
| 1184 | 1176 | idata = CONN_DATA;Â |
| 1185 | 1177 | Â |
| … |
… |
 |
| 1201 | 1193 | }Â |
| 1202 | 1194 | Â |
| 1203 | Â | imap_fix_path (idata, pc, buf, sizeof (buf));Â |
| Â | 1195 | imap_fix_path (idata, mx.mbox, buf, sizeof (buf));Â |
| 1204 | 1196 | /* Update the path, if it fits */Â |
| 1205 | Â | if (strlen (buf) < strlen (pc))Â |
| 1206 | Â | strcpy (pc, buf);Â |
| Â | 1197 | if (strlen (buf) < strlen (mx.mbox))Â |
| Â | 1198 | strcpy (mx.mbox, buf);Â |
| 1207 | 1199 | Â |
| 1208 | 1200 | imap_make_sequence (seq, sizeof (seq)); Â |
| … |
… |
 |
| 1359 | 1351 | char buf[LONG_STRING];Â |
| 1360 | 1352 | char mbox[LONG_STRING];Â |
| 1361 | Â | char host[SHORT_STRING];Â |
| 1362 | Â | char *ipath = NULL;Â |
| 1363 | Â | int port;Â |
| 1364 | Â | Â |
| 1365 | Â | if (imap_parse_path (path, host, sizeof (host), &port, NULL, &ipath))Â |
| Â | 1353 | IMAP_MBOX mx;Â |
| Â | 1354 | Â |
| Â | 1355 | if (imap_parse_path (path, &mx))Â |
| 1366 | 1356 | return (-1);Â |
| 1367 | 1357 | Â |
| 1368 | Â | conn = mutt_socket_select_connection (host, port, 0);Â |
| Â | 1358 | conn = mutt_socket_select_connection (&mx, 0);Â |
| 1369 | 1359 | idata = CONN_DATA;Â |
| 1370 | 1360 | Â |
| … |
… |
 |
| 1382 | 1372 | }Â |
| 1383 | 1373 | Â |
| 1384 | Â | imap_fix_path (idata, ipath, buf, sizeof (buf));Â |
| Â | 1374 | imap_fix_path (idata, mx.mbox, buf, sizeof (buf));Â |
| 1385 | 1375 | if (subscribe)Â |
| 1386 | 1376 | mutt_message (_("Subscribing to %s..."), buf);Â |
| … |
… |
 |
| 1403 | 1393 | CONNECTION* conn;Â |
| 1404 | 1394 | IMAP_DATA* idata;Â |
| 1405 | Â | char host[SHORT_STRING];Â |
| 1406 | Â | int port;Â |
| 1407 | 1395 | char list[LONG_STRING];Â |
| 1408 | 1396 | char buf[LONG_STRING];Â |
| 1409 | 1397 | char seq[16];Â |
| 1410 | Â | char* mbox = NULL;Â |
| 1411 | 1398 | char* list_word = NULL;Â |
| 1412 | 1399 | int noselect, noinferiors;Â |
| … |
… |
 |
| 1416 | 1403 | int completions = 0;Â |
| 1417 | 1404 | int pos = 0;Â |
| Â | 1405 | IMAP_MBOX mx;Â |
| 1418 | 1406 | Â |
| 1419 | 1407 | /* verify passed in path is an IMAP path */Â |
| 1420 | Â | if (imap_parse_path (path, host, sizeof(host), &port, NULL, &mbox))Â |
| Â | 1408 | if (imap_parse_path (path, &mx))Â |
| 1421 | 1409 | {Â |
| 1422 | 1410 | dprint(2, (debugfile, "imap_complete: bad path %s\n", path));Â |
| … |
… |
 |
| 1424 | 1412 | }Â |
| 1425 | 1413 | Â |
| 1426 | Â | conn = mutt_socket_select_connection (host, port, 0);Â |
| Â | 1414 | conn = mutt_socket_select_connection (&mx, 0);Â |
| 1427 | 1415 | idata = CONN_DATA;Â |
| 1428 | 1416 | Â |
| … |
… |
 |
| 1437 | 1425 | /* reformat path for IMAP list, and append wildcard */Â |
| 1438 | 1426 | /* don't use INBOX in place of "" */Â |
| 1439 | Â | if (mbox[0])Â |
| 1440 | Â | imap_fix_path (idata, mbox, list, sizeof(list));Â |
| Â | 1427 | if (mx.mbox[0])Â |
| Â | 1428 | imap_fix_path (idata, mx.mbox, list, sizeof(list));Â |
| 1441 | 1429 | else |
| 1442 | 1430 | list[0] = '\0';Â |
| … |
… |
 |
| 1449 | 1437 | Â |
| 1450 | 1438 | /* and see what the results are */Â |
| 1451 | Â | strfcpy (completion, mbox, sizeof(completion));Â |
| Â | 1439 | strfcpy (completion, mx.mbox, sizeof(completion));Â |
| 1452 | 1440 | do |
| 1453 | 1441 | {Â |
| … |
… |
 |
| 1493 | 1481 | {Â |
| 1494 | 1482 | /* reformat output */Â |
| 1495 | Â | imap_qualify_path (dest, dlen, host, port, completion, NULL);Â |
| Â | 1483 | imap_qualify_path (dest, dlen, &mx, completion, NULL);Â |
| 1496 | 1484 | mutt_pretty_mailbox (dest);Â |
| 1497 | 1485 | Â |
-
|
r1397
|
r1414
|
 |
| 22 | 22 | #include "browser.h"Â |
| 23 | 23 | #include "mailbox.h"Â |
| Â | 24 | Â |
|  | 25 | typedef struct |
| Â | 26 | {Â |
| Â | 27 | char user[32];Â |
| Â | 28 | char pass[32];Â |
| Â | 29 | char host[128];Â |
| Â | 30 | int port;Â |
| Â | 31 | char type[16];Â |
| Â | 32 | int socktype;Â |
| Â | 33 | char *mbox;Â |
| Â | 34 | int flags;Â |
| Â | 35 | } IMAP_MBOX;Â |
| Â | 36 | Â |
| 24 | 37 | Â |
| 25 | 38 | /* imap.c */Â |
| … |
… |
 |
| 48 | 61 | Â |
| 49 | 62 | /* util.c */Â |
| 50 |  | int imap_parse_path (char* path, char* host, size_t hlen, int* port, |
| 51 | Â | int *socktype, char** mbox);Â |
| 52 |  | void imap_qualify_path (char* dest, size_t len, const char* host, int port, |
| Â | 63 | int imap_parse_path (const char* path, IMAP_MBOX *mx);Â |
|  | 64 | void imap_qualify_path (char* dest, size_t len, const IMAP_MBOX *mx, |
| 53 | 65 | const char* path, const char* name);Â |
| 54 | 66 | Â |
-
|
r1383
|
r1414
|
 |
| 32 | 32 | Â |
| 33 | 33 | #define SEQLEN 5Â |
| Â | 34 | Â |
| Â | 35 | #define M_IMAP_USER (1<<0)Â |
| Â | 36 | #define M_IMAP_PORT (1<<1)Â |
| Â |