/***************************************************************************** POPular -- A POP3 server and proxy for large mail systems $Id: info.c,v 1.10 2002/09/15 12:27:16 sqrt Exp $ http://www.remote.org/jochen/mail/popular/ ****************************************************************************** Copyright (C) 1999-2002 Jochen Topf This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA *****************************************************************************/ #if HAVE_CONFIG_H # include #endif #include "popular.h" /***************************************************************************** find_backend_state_info() *****************************************************************************/ struct backend_state_info * find_backend_state_info(backend_state_t t, const char *n) { struct backend_state_info *p; static struct backend_state_info list[] = { { bstFree, "FREE" }, { bstOffline, "OFFLINE" }, { bstFake, "FAKE" }, { bstOnline, "ONLINE" }, { -1, NULL } }; for (p = list; p->name; p++) { if ((t >= 0) && p->type == t) return p; if ((n != NULL) && !strcasecmp(p->name, n)) return p; } return NULL; } /***************************************************************************** find_virt_serv_state_info() *****************************************************************************/ struct virt_serv_state_info * find_virt_serv_state_info(virt_serv_state_t t, const char *n) { struct virt_serv_state_info *p; static struct virt_serv_state_info list[] = { { vsstFree, "FREE", 0 }, { vsstOffline, "OFFLINE", 0 }, { vsstDisabled, "DISABLED", 1 }, { vsstFake, "FAKE", 1 }, { vsstOnline, "ONLINE", 1 }, { -1, NULL, 0 } }; for (p = list; p->name; p++) { if ((t >= 0) && p->type == t) return p; if ((n != NULL) && !strcasecmp(p->name, n)) return p; } return NULL; } /***************************************************************************** find_protocol_info() *****************************************************************************/ struct protocol_info * find_protocol_info(protocol_t t, const char *n) { struct protocol_info *p; static struct protocol_info list[] = { { ptPOP3, "POP3", 0, DEFAULT_PORT_POP3, 1, 1 }, { ptIMAP4, "IMAP4", 0, DEFAULT_PORT_IMAP4, 0, 0 }, { ptXPOP, "XPOP", 0, DEFAULT_PORT_XPOP, 0, 1 }, { ptCXPOP, "CXPOP", 0, DEFAULT_PORT_XPOP, 0, 1 }, #ifdef USE_TLS { ptPOP3TLS, "POP3s", 1, DEFAULT_PORT_POP3TLS, 1, 0 }, #else { ptPOP3TLS, "POP3s", 1, DEFAULT_PORT_POP3TLS, 0, 0 }, #endif { -1, NULL, 0, 0, 0, 0 } }; for (p = list; p->name; p++) { if ((t >= 0) && p->type == t) return p; if ((n != NULL) && !strcasecmp(p->name, n)) return p; } return NULL; } /***************************************************************************** is_tls_protocol() Returns 1 if the named protocol uses TLS and 0 otherwise. *****************************************************************************/ int is_tls_protocol(protocol_t t) { struct protocol_info *pi = find_protocol_info(t, NULL); if (! pi) { /* XLOG-DOC:BUG:019c:unknown_protocol * No protocol information for this virtual server is found. This * should never happen. */ xlog_printf(xlog_bug, 0x019c, "unknown_protocol"); exit(RCODE_ERR); } return pi->tls; } /***************************************************************************** find_session_state_info() *****************************************************************************/ struct session_state_info * find_session_state_info(session_state_t t, const char *n) { struct session_state_info *p; static struct session_state_info list[] = { { sstFree, "-----" }, { sstNew, "NEW" }, { sstIdle, "IDLE" }, { sstRead, "READ" }, { sstDone, "DONE" }, { sstAuthPhase, "AUTH" }, { sstVirtServDisabled, "VSDIS" }, { sstVirtServFake, "VSFAK" }, { sstCheck, "CHECK" }, { sstConnecting, "CONNS" }, { sstBackendUnreachable, "BEUNR" }, { sstBackendDisabled, "BEDIS" }, { sstBackendFake, "BEFAK" }, { sstProxy, "PROXY" }, { sstMailboxEmpty, "EMPTY" }, { sstUnknownBackend, "UKNBE" }, { sstConnQuit, "CQUIT" }, { sstConnBroken, "CBROK" }, { -1, NULL } }; for (p = list; p->name; p++) { if ((t >= 0) && p->type == t) return p; if ((n != NULL) && !strcasecmp(p->name, n)) return p; } return NULL; } /***************************************************************************** find_debug_info() *****************************************************************************/ static struct debug_info di_list[] = { { DG_MAIN, "MAIN" }, { DG_AUTH, "AUTH" }, { DG_PASS, "PASS" }, { DG_POP, "POP" }, { DG_CTRL, "CTRL" }, { DG_NET, "NET" }, { DG_RINGD, "RINGD" }, { DG_TLS, "TLS" }, { DG_IO, "IO" }, { DG_ALL, "ALL" }, { 0, "NONE" }, { -1, NULL } }; struct debug_info * find_debug_info(int t, const char *n) { struct debug_info *p; for (p = di_list; p->name; p++) { if ((t >= 0) && p->type == t) return p; if ((n != NULL) && !strcasecmp(p->name, n)) return p; } return NULL; } char * print_debug_list(int debug) { struct debug_info *p; static char buf[sizeof(di_list)]; buf[0] = '\0'; for (p = di_list; p->name; p++) { if (debug & p->type && p->type != DG_ALL) { (void) strlcat(buf, " ", sizeof(buf)); (void) strlcat(buf, p->name, sizeof(buf)); } } return buf; } /** THE END *****************************************************************/