citadel
About: Citadel is an advanced messaging and collaboration system for groupware and BBS applications (preferred OS: Linux).
![]() ![]() |
#include "../../sysdep.h"
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
#include <pwd.h>
#include <errno.h>
#include <sys/types.h>
#include <time.h>
#include <sys/wait.h>
#include <ctype.h>
#include <string.h>
#include <limits.h>
#include <libcitadel.h>
#include "../../citadel.h"
#include "../../server.h"
#include "../../citserver.h"
#include "../../support.h"
#include "../../config.h"
#include "../../user_ops.h"
#include "../../database.h"
#include "../../msgbase.h"
#include "../../internet_addressing.h"
#include "serv_imap.h"
#include "imap_tools.h"
#include "imap_list.h"
#include "imap_fetch.h"
#include "imap_search.h"
#include "imap_store.h"
#include "imap_acl.h"
#include "imap_metadata.h"
#include "imap_misc.h"
#include "../../ctdl_module.h"
Go to the source code of this file.
Data Structures | |
struct | irl |
struct | __irlparms |
Typedefs | |
typedef struct __irlparms | irlparms |
Functions | |
void | registerImapCMD (const char *First, long FLen, const char *Second, long SLen, imap_handler H, int Flags) |
const imap_handler_hook * | imap_lookup (int num_parms, ConstStr *Params) |
void | imap_free_msgids (void) |
void | imap_free_transmitted_message (void) |
void | imap_set_seen_flags (int first_msg) |
void | imap_add_single_msgid (long msgnum, void *userdata) |
void | imap_load_msgids (void) |
void | imap_rescan_msgids (void) |
void | imap_cleanup_function (void) |
void | imap_output_capability_string (void) |
void | imap_capability (int num_parms, ConstStr *Params) |
void | imap_id (int num_parms, ConstStr *Params) |
void | imap_greeting (void) |
void | imaps_greeting (void) |
void | imap_login (int num_parms, ConstStr *Params) |
void | imap_authenticate (int num_parms, ConstStr *Params) |
void | imap_auth_plain (void) |
void | imap_auth_login_user (long state) |
void | imap_auth_login_pass (long state) |
void | imap_starttls (int num_parms, ConstStr *Params) |
void | imap_select (int num_parms, ConstStr *Params) |
int | imap_do_expunge (void) |
void | imap_expunge (int num_parms, ConstStr *Params) |
void | imap_close (int num_parms, ConstStr *Params) |
void | imap_namespace (int num_parms, ConstStr *Params) |
void | imap_create (int num_parms, ConstStr *Params) |
int | imap_grabroom (char *returned_roomname, const char *foldername, int zapped_ok) |
void | imap_status (int num_parms, ConstStr *Params) |
void | imap_subscribe (int num_parms, ConstStr *Params) |
void | imap_unsubscribe (int num_parms, ConstStr *Params) |
void | imap_delete (int num_parms, ConstStr *Params) |
void | imap_rename_backend (struct ctdlroom *qrbuf, void *data) |
void | imap_rename (int num_parms, ConstStr *Params) |
void | imap_command_loop (void) |
void | imap_noop (int num_parms, ConstStr *Params) |
void | imap_logout (int num_parms, ConstStr *Params) |
char * | ctdl_module_init_imap (void) |
Variables | |
HashList * | ImapCmds = NULL |
const char * | CitadelServiceIMAP ="IMAP" |
const char * | CitadelServiceIMAPS ="IMAPS" |
typedef struct __irlparms irlparms |
char * ctdl_module_init_imap | ( | void | ) |
Definition at line 1562 of file serv_imap.c.
References CitadelServiceIMAP, CitadelServiceIMAPS, CtdlGetConfigInt(), CtdlRegisterServiceHook(), CtdlRegisterSessionHook(), EVT_STOP, I_FLAG_LOGGED_IN, I_FLAG_NONE, I_FLAG_SELECT, I_FLAG_UNTAGGED, imap_append(), imap_authenticate(), imap_capability(), imap_cleanup_function(), imap_close(), imap_command_loop(), imap_copy(), imap_create(), imap_delete(), imap_deleteacl(), imap_expunge(), imap_fetch(), imap_getacl(), imap_getmetadata(), imap_greeting(), imap_id(), imap_list(), imap_listrights(), imap_login(), imap_logout(), imap_myrights(), imap_namespace(), imap_noop(), imap_rename(), imap_search(), imap_select(), imap_setacl(), imap_setmetadata(), imap_starttls(), imap_status(), imap_store(), imap_subscribe(), imap_uidcopy(), imap_uidfetch(), imap_uidsearch(), imap_uidstore(), imap_unsubscribe(), ImapCmds, imaps_greeting(), PRIO_STOP, RegisterImapCMD, and threading.
Referenced by initialize_modules().
void imap_add_single_msgid | ( | long | msgnum, |
void * | userdata | ||
) |
Definition at line 242 of file serv_imap.c.
References __citimap::flags, IMAP, __citimap::msgids, __citimap::num_alloc, __citimap::num_msgs, and REALLOC_INCREMENT.
Referenced by imap_rescan_msgids().
void imap_auth_login_pass | ( | long | state | ) |
Definition at line 722 of file serv_imap.c.
References __citimap::authseq, __citimap::authstate, __citimap::Cmd, __citimap_command::CmdBuf, CtdlTryPassword(), IAPrintf(), IMAP, imap_as_expecting_multilinepassword, imap_as_expecting_password, imap_as_normal, pass_ok, CitContext::state, and USERNAME_SIZE.
Referenced by imap_command_loop().
void imap_auth_login_user | ( | long | state | ) |
Definition at line 695 of file serv_imap.c.
References __citimap::authstate, __citimap::Cmd, __citimap_command::CmdBuf, CtdlLoginExistingUser(), IAPrintf(), IAPuts, IMAP, imap_as_expecting_multilinepassword, imap_as_expecting_multilineusername, imap_as_expecting_password, imap_as_expecting_username, SIZ, and CitContext::state.
Referenced by imap_command_loop().
void imap_auth_plain | ( | void | ) |
Definition at line 640 of file serv_imap.c.
References __citimap::authseq, __citimap::authstate, __citimap::Cmd, __citimap_command::CmdBuf, CtdlLoginExistingUser(), CtdlTryPassword(), IAPrintf(), IMAP, imap_as_normal, login_ok, pass_ok, and CitContext::user.
Referenced by imap_command_loop().
void imap_authenticate | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 596 of file serv_imap.c.
References CC, IAPrintf(), IAPuts, IMAP, imap_as_expecting_plainauth, imap_as_expecting_username, IReply, IReplyPrintf(), and SIZ.
Referenced by ctdl_module_init_imap().
void imap_capability | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 486 of file serv_imap.c.
References IAPuts, imap_output_capability_string(), and IReply.
Referenced by ctdl_module_init_imap().
void imap_cleanup_function | ( | void | ) |
Definition at line 413 of file serv_imap.c.
References __citimap::cached_body, __citimap::cached_body_len, __citimap::cached_bodymsgnum, __citimap::cached_rfc822, __citimap::cached_rfc822_msgnum, __citimap::cached_rfc822_withbody, CC, CCCIMAP, __citimap::Cmd, __citimap_command::CmdBuf, free(), imap_command_loop(), imap_do_expunge(), imap_free_msgids(), imap_free_transmitted_message(), __citimap_command::Params, __citimap::Reply, and __citimap::selected.
Referenced by ctdl_module_init_imap().
void imap_close | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 914 of file serv_imap.c.
References IMAP, imap_do_expunge(), imap_free_msgids(), and IReply.
Referenced by ctdl_module_init_imap().
void imap_command_loop | ( | void | ) |
Definition at line 1410 of file serv_imap.c.
References __citimap::authstate, CC, CCCIMAP, __citimap::Cmd, __citimap_command::CmdBuf, CtdlClientGetLine(), _imap_handler_hook::Flags, flush_output(), _imap_handler_hook::h, I_FLAG_LOGGED_IN, I_FLAG_SELECT, I_FLAG_UNTAGGED, imap_as_expecting_multilinepassword, imap_as_expecting_multilineusername, imap_as_expecting_password, imap_as_expecting_plainauth, imap_as_expecting_username, imap_auth_login_pass(), imap_auth_login_user(), imap_auth_plain(), imap_free_transmitted_message(), imap_lookup(), imap_parameterize(), imap_rescan_msgids(), IReply, IUnbuffer(), KILLME_CLIENT_DISCONNECTED, CitContext::lastcmd, __citimap_command::num_parms, __citimap_command::Params, __citimap::selected, and SIZ.
Referenced by ctdl_module_init_imap(), and imap_cleanup_function().
void imap_create | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 971 of file serv_imap.c.
References CC, CtdlAideMessage, CtdlCreateRoom(), floornum, free(), imap_roomname(), IR_MAILBOX, IReply, malloc(), QR_GUESSNAME, QR_MAILBOX, QR_PRIVATE, and ROOMNAMELEN.
Referenced by ctdl_module_init_imap().
void imap_delete | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 1244 of file serv_imap.c.
References CC, CtdlDoIHavePermissionToDeleteThisRoom(), CtdlScheduleRoomForDeletion(), CtdlUserGoto(), IMAP, imap_grabroom(), IReply, and ROOMNAMELEN.
Referenced by ctdl_module_init_imap().
int imap_do_expunge | ( | void | ) |
Definition at line 864 of file serv_imap.c.
References CC, CCCIMAP, CtdlDeleteMessages(), __citimap::flags, free(), IMAP_DELETED, imap_rescan_msgids(), malloc(), __citimap::msgids, __citimap::num_msgs, and __citimap::selected.
Referenced by imap_cleanup_function(), imap_close(), imap_do_store(), imap_expunge(), imap_logout(), and imap_select().
void imap_expunge | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 903 of file serv_imap.c.
References imap_do_expunge(), and IReplyPrintf().
Referenced by ctdl_module_init_imap().
void imap_free_msgids | ( | void | ) |
Definition at line 126 of file serv_imap.c.
References __citimap::flags, free(), IMAP, __citimap::last_mtime, __citimap::msgids, __citimap::num_alloc, and __citimap::num_msgs.
Referenced by imap_cleanup_function(), imap_close(), and imap_load_msgids().
void imap_free_transmitted_message | ( | void | ) |
Definition at line 145 of file serv_imap.c.
References IMAP.
Referenced by imap_append(), imap_cleanup_function(), and imap_command_loop().
int imap_grabroom | ( | char * | returned_roomname, |
const char * | foldername, | ||
int | zapped_ok | ||
) |
Definition at line 1047 of file serv_imap.c.
References CC, CtdlGetRoom(), CtdlMailboxName(), CtdlRoomAccess(), imap_roomname(), ctdlroom::QRname, ROOMNAMELEN, UA_KNOWN, and UA_ZAPPED.
Referenced by imap_append(), imap_delete(), imap_do_copy(), imap_getacl(), imap_getmetadata(), imap_listrights(), imap_myrights(), imap_setmetadata(), imap_status(), imap_subscribe(), and imap_unsubscribe().
void imap_greeting | ( | void | ) |
Definition at line 512 of file serv_imap.c.
References __citimap::authstate, __citimap::cached_rfc822_msgnum, __citimap::cached_rfc822_withbody, CC, CITADEL, CitContext::cs_clientname, CtdlGetConfigStr(), IAPrintf(), IAPuts, imap_as_normal, imap_output_capability_string(), IUnbuffer(), CitContext::kill_me, KILLME_NOLOGIN, malloc(), CitContext::nologin, __citimap::Reply, CitContext::session_specific_data, and SIZ.
Referenced by ctdl_module_init_imap(), and imaps_greeting().
void imap_id | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 503 of file serv_imap.c.
References IAPuts, and IReply.
Referenced by ctdl_module_init_imap().
void imap_load_msgids | ( | void | ) |
Definition at line 259 of file serv_imap.c.
References CC, CCCIMAP, cdb_fetch(), cdb_free(), CDB_MSGLISTS, __citimap::flags, imap_free_msgids(), imap_set_seen_flags(), cdbdata::len, malloc(), __citimap::msgids, __citimap::num_alloc, __citimap::num_msgs, cdbdata::ptr, and __citimap::selected.
Referenced by imap_select().
void imap_login | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 554 of file serv_imap.c.
References CC, CtdlLoginExistingUser(), CtdlTryPassword(), IAPrintf(), IAPuts, IMAP, imap_as_expecting_multilineusername, imap_output_capability_string(), IReply, IReplyPrintf(), login_ok, and pass_ok.
Referenced by ctdl_module_init_imap().
void imap_logout | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 1546 of file serv_imap.c.
References CC, CtdlGetConfigStr(), IAPrintf(), IMAP, imap_do_expunge(), IReply, and KILLME_CLIENT_LOGGED_OUT.
Referenced by ctdl_module_init_imap().
const imap_handler_hook * imap_lookup | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 65 of file serv_imap.c.
References CC, CCCIMAP, ImapCmds, and __citimap::Reply.
Referenced by imap_command_loop().
void imap_namespace | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 931 of file serv_imap.c.
References CtdlGetCachedFloor(), floor::f_flags, F_INUSE, floor::f_name, IAPuts, IPutStr(), IReply, MAXFLOORS, and SIZ.
Referenced by ctdl_module_init_imap().
void imap_noop | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 1541 of file serv_imap.c.
References IReply.
Referenced by ctdl_module_init_imap().
void imap_output_capability_string | ( | void | ) |
Definition at line 453 of file serv_imap.c.
Referenced by imap_capability(), imap_greeting(), and imap_login().
void imap_rename | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 1319 of file serv_imap.c.
References CC, crr_access_denied, crr_already_exists, crr_invalid_floor, crr_noneditable, crr_ok, crr_room_not_found, CtdlAideMessage, CtdlCreateRoom(), CtdlForEachRoom(), CtdlRenameRoom(), free(), imap_rename_backend(), imap_roomname(), IReply, IReplyPrintf(), __irlparms::irl, irl::irl_newfloor, irl::irl_newroom, irl::irl_oldroom, MAILROOM, __irlparms::newname, __irlparms::newnamelen, irl::next, __irlparms::oldname, __irlparms::oldnamelen, and ROOMNAMELEN.
Referenced by ctdl_module_init_imap().
void imap_rename_backend | ( | struct ctdlroom * | qrbuf, |
void * | data | ||
) |
Definition at line 1290 of file serv_imap.c.
References imap_mailboxname(), imap_roomname(), __irlparms::irl, irl::irl_newfloor, irl::irl_newroom, irl::irl_oldroom, malloc(), __irlparms::newname, irl::next, __irlparms::oldname, __irlparms::oldnamelen, qrbuf, ctdlroom::QRname, ROOMNAMELEN, and SIZ.
Referenced by imap_rename().
void imap_rescan_msgids | ( | void | ) |
Definition at line 294 of file serv_imap.c.
References CC, CCCIMAP, cdb_fetch(), cdb_free(), CDB_MSGLISTS, CtdlGetRoom(), __citimap::flags, free(), IAPrintf(), imap_add_single_msgid(), IMAP_RECENT, imap_set_seen_flags(), __citimap::last_mtime, cdbdata::len, __citimap::msgids, __citimap::num_msgs, cdbdata::ptr, and __citimap::selected.
Referenced by imap_command_loop(), imap_do_expunge(), and imap_do_store().
void imap_select | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 771 of file serv_imap.c.
References CC, CtdlGetConfigLong(), CtdlGetRoom(), CtdlMailboxName(), CtdlRoomAccess(), CtdlUserGoto(), GLOBAL_UIDVALIDITY_VALUE, IAPrintf(), IAPuts, IMAP, imap_do_expunge(), imap_load_msgids(), imap_roomname(), IReply, IReplyPrintf(), __citimap::last_mtime, __citimap::readonly, ROOMNAMELEN, __citimap::selected, and UA_KNOWN.
Referenced by ctdl_module_init_imap().
void imap_set_seen_flags | ( | int | first_msg | ) |
Definition at line 160 of file serv_imap.c.
References CC, CtdlGetRelationship(), __citimap::flags, IMAP, IMAP_ANSWERED, IMAP_RECENT, IMAP_SEEN, LONG_MAX, __citimap::msgids, __citimap::num_msgs, __visit::v_answered, __visit::v_seen, and vbuf.
Referenced by imap_load_msgids(), and imap_rescan_msgids().
void imap_starttls | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 756 of file serv_imap.c.
References CtdlModuleStartCryptoMsgs(), and SIZ.
Referenced by ctdl_module_init_imap().
void imap_status | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 1102 of file serv_imap.c.
References CC, CtdlGetConfigLong(), CtdlUserGoto(), IAPrintf(), IAPuts, IMAP, imap_grabroom(), imap_mailboxname(), IPutStr(), IReply, ROOMNAMELEN, and SIZ.
Referenced by ctdl_module_init_imap().
void imap_subscribe | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 1159 of file serv_imap.c.
References CC, CtdlUserGoto(), IMAP, imap_grabroom(), IReply, IReplyPrintf(), and ROOMNAMELEN.
Referenced by ctdl_module_init_imap().
void imap_unsubscribe | ( | int | num_parms, |
ConstStr * | Params | ||
) |
Definition at line 1200 of file serv_imap.c.
References CC, CtdlForgetThisRoom(), CtdlUserGoto(), IMAP, imap_grabroom(), IReply, and ROOMNAMELEN.
Referenced by ctdl_module_init_imap().
void imaps_greeting | ( | void | ) |
Definition at line 542 of file serv_imap.c.
References CC, CtdlModuleStartCryptoMsgs(), imap_greeting(), and KILLME_NO_CRYPTO.
Referenced by ctdl_module_init_imap().
void registerImapCMD | ( | const char * | First, |
long | FLen, | ||
const char * | Second, | ||
long | SLen, | ||
imap_handler | H, | ||
int | Flags | ||
) |
Definition at line 44 of file serv_imap.c.
References _imap_handler_hook::Flags, _imap_handler_hook::h, ImapCmds, malloc(), and SIZ.
const char* CitadelServiceIMAP ="IMAP" |
Definition at line 1557 of file serv_imap.c.
Referenced by ctdl_module_init_imap().
const char* CitadelServiceIMAPS ="IMAPS" |
Definition at line 1558 of file serv_imap.c.
Referenced by ctdl_module_init_imap().
HashList* ImapCmds = NULL |
Definition at line 43 of file serv_imap.c.
Referenced by ctdl_module_init_imap(), imap_lookup(), and registerImapCMD().