/* GNU Mailutils -- a suite of utilities for electronic mail Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. GNU Mailutils 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, or (at your option) any later version. GNU Mailutils 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 GNU Mailutils; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "imap4d.h" int imap4d_bye (int reason) { return imap4d_bye0 (reason, NULL); } int imap4d_bye0 (int reason, struct imap4d_command *command) { int status = EXIT_FAILURE; if (mbox) { mailbox_flush (mbox, 0); mailbox_close (mbox); mailbox_destroy (&mbox); } switch (reason) { case ERR_NO_MEM: util_out (RESP_BYE, "Server terminating no more resources."); syslog (LOG_ERR, _("Out of memory")); break; case ERR_SIGNAL: if (!util_is_master ()) util_out (RESP_BYE, "Quitting on signal"); syslog (LOG_ERR, _("Quitting on signal")); break; case ERR_TIMEOUT: util_out (RESP_BYE, "Session timed out"); if (state == STATE_NONAUTH) syslog (LOG_INFO, _("Session timed out for no user")); else syslog (LOG_INFO, _("Session timed out for user: %s"), auth_data->name); break; case ERR_NO_OFILE: syslog (LOG_INFO, _("No socket to send to")); break; case OK: util_out (RESP_BYE, "Session terminating."); if (state == STATE_NONAUTH) syslog (LOG_INFO, _("Session terminating")); else syslog (LOG_INFO, _("Session terminating for user: %s"), auth_data->name); status = EXIT_SUCCESS; break; default: util_out (RESP_BYE, "Quitting (reason unknown)"); syslog (LOG_ERR, _("Quitting (numeric reason %d)"), reason); break; } if (status == EXIT_SUCCESS && command) util_finish (command, RESP_OK, "Completed"); util_bye (); closelog (); exit (status); }