- /* Now for the command set. */
-
- if (Imap->Cmd.num_parms < 2) {
- cprintf("BAD syntax error\r\n");
- }
-
- /* The commands below may be executed in any state */
-
- else if ((!strcasecmp(Imap->Cmd.Params[1].Key, "NOOP"))
- || (!strcasecmp(Imap->Cmd.Params[1].Key, "CHECK"))) {
- cprintf("%s OK No operation\r\n",
- Imap->Cmd.Params[0].Key);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "ID")) {
- imap_id(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "LOGOUT")) {
- if (Imap->selected) {
- imap_do_expunge(); /* yes, we auto-expunge at logout */
- }
- cprintf("* BYE %s logging out\r\n", config.c_fqdn);
- cprintf("%s OK Citadel IMAP session ended.\r\n",
- Imap->Cmd.Params[0].Key);
- CC->kill_me = 1;
- return;
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "LOGIN")) {
- imap_login(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "AUTHENTICATE")) {
- imap_authenticate(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "CAPABILITY")) {
- imap_capability(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-#ifdef HAVE_OPENSSL
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "STARTTLS")) {
- imap_starttls(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-#endif
- else if (!CC->logged_in) {
- cprintf("%s BAD Not logged in.\r\n", Imap->Cmd.Params[0].Key);
- }
-
- /* The commans below require a logged-in state */
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "SELECT")) {
- imap_select(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "EXAMINE")) {
- imap_select(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "LSUB")) {
- imap_list(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "LIST")) {
- imap_list(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "CREATE")) {
- imap_create(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "DELETE")) {
- imap_delete(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "RENAME")) {
- imap_rename(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "STATUS")) {
- imap_status(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "SUBSCRIBE")) {
- imap_subscribe(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "UNSUBSCRIBE")) {
- imap_unsubscribe(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "APPEND")) {
- imap_append(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "NAMESPACE")) {
- imap_namespace(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "SETACL")) {
- imap_setacl(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "DELETEACL")) {
- imap_deleteacl(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "GETACL")) {
- imap_getacl(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "LISTRIGHTS")) {
- imap_listrights(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "MYRIGHTS")) {
- imap_myrights(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "GETMETADATA")) {
- imap_getmetadata(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "SETMETADATA")) {
- imap_setmetadata(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (Imap->selected == 0) {
- cprintf("%s BAD no folder selected\r\n", Imap->Cmd.Params[0].Key);
- }
-
- /* The commands below require the SELECT state on a mailbox */
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "FETCH")) {
- imap_fetch(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if ((!strcasecmp(Imap->Cmd.Params[1].Key, "UID"))
- && (!strcasecmp(Imap->Cmd.Params[2].Key, "FETCH"))) {
- imap_uidfetch(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if (!strcasecmp(Imap->Cmd.Params[1].Key, "SEARCH")) {
- imap_search(Imap->Cmd.num_parms, Imap->Cmd.Params);
- }
-
- else if ((!strcasecmp(Imap->Cmd.Params[1].Key, "UID"))
- && (!strcasecmp(Imap->Cmd.Params[2].Key, "SEARCH"))) {
- imap_uidsearch(Imap->Cmd.num_parms, Imap->Cmd.Params);