int main (int argc, char **argv) { int index; mu_url_t url; MU_APP_INIT_NLS (); mh_argp_init (program_version); mh_argp_parse (&argc, &argv, 0, options, mh_option, args_doc, doc, opt_handler, NULL, &index); if (!oplist) addop ("date", comp_date); if (action == ACTION_LIST && mh_format_parse (format_str, &format)) { mu_error (_("Bad format string")); exit (1); } mbox = mh_open_folder (mh_current_folder (), 0); mu_mailbox_get_url (mbox, &url); mbox_path = mu_url_to_string (url); if (memcmp (mbox_path, "mh:", 3) == 0) mbox_path += 3; argc -= index; argv += index; mh_msgset_parse (mbox, &msgset, argc, argv, "all"); sort (mbox, msgset); return 0; }
int main (int argc, char **argv) { int index = 0; mu_mailbox_t mbox; mh_msgset_t msgset; int status; /* Native Language Support */ MU_APP_INIT_NLS (); mh_argp_init (program_version); mh_argp_parse (&argc, &argv, 0, options, mh_option, args_doc, doc, opt_handler, NULL, &index); mbox = mh_open_folder (mh_current_folder (), 0); mh_msgset_parse (mbox, &msgset, argc - index, argv + index, "cur"); status = mh_iterate (mbox, &msgset, rmm, NULL); mu_mailbox_expunge (mbox); mu_mailbox_close (mbox); mu_mailbox_destroy (&mbox); return status; }
int main (int argc, char **argv) { int status; int index; mu_mailbox_t mbox; mu_msgset_t msgset; int interactive = mh_interactive_mode_p (); MU_APP_INIT_NLS (); for (index = 1; index < argc; index++) { int colon = 0, cpos; if (argv[index][0] == '-' && argv[index][1] == '-' && !strchr (argv[index], '=') && (!interactive || (colon = argv[index][cpos = strlen (argv[index]) - 1] == ':') || *mu_str_skip_class_comp (argv[index], MU_CTYPE_UPPER)) && index + 1 < argc) { if (colon) { cpos -= 2; mu_asprintf (&argv[index], "--component=%*.*s", cpos, cpos, argv[index] + 2); } else mu_asprintf (&argv[index], "--component=%s", argv[index] + 2); mu_asprintf (&argv[index + 1], "--pattern=%s", argv[index + 1]); index++; } } mh_help_hook = pick_help_hook; mh_argp_init (); mh_argp_parse (&argc, &argv, 0, options, mh_option, args_doc, doc, opt_handler, NULL, &index); if (pick_parse (lexlist)) return 1; mbox = mh_open_folder (mh_current_folder (), seq_list ? MU_STREAM_RDWR : MU_STREAM_READ); argc -= index; argv += index; if (seq_list) mu_msgset_create (&picked_message_uids, NULL, MU_MSGSET_UID); mh_msgset_parse (&msgset, mbox, argc, argv, "all"); status = mu_msgset_foreach_message (msgset, pick_message, NULL); if (picked_message_uids) mu_list_foreach (seq_list, action_add, mbox); mh_global_save_state (); mu_mailbox_close (mbox); mu_mailbox_destroy (&mbox); return status; }
int main (int argc, char **argv) { int index; mu_msgset_t msgset; mu_mailbox_t mbox; mu_url_t url; struct mark_closure clos; MU_APP_INIT_NLS (); mh_argp_init (); mh_argp_parse (&argc, &argv, 0, options, mh_option, args_doc, doc, opt_handler, NULL, &index); mbox = mh_open_folder (mh_current_folder (), MU_STREAM_RDWR); mu_mailbox_get_url (mbox, &url); mbox_dir = mu_url_to_string (url); if (memcmp (mbox_dir, "mh:", 3) == 0) mbox_dir += 3; argc -= index; argv += index; mh_msgset_parse (&msgset, mbox, argc, argv, "cur"); clos.mbox = mbox; clos.msgset = msgset; //FIXME: msgset operates on UIDs but there's no way to inform it about that. switch (action) { case ARG_ADD: if (!seq_list) { mu_error (_("--add requires at least one --sequence argument")); return 1; } mu_list_foreach (seq_list, action_add, (void *) &clos); mh_global_save_state (); break; case ARG_DELETE: if (!seq_list) { mu_error (_("--delete requires at least one --sequence argument")); return 1; } mu_list_foreach (seq_list, action_delete, (void *) &clos); mh_global_save_state (); break; case ARG_LIST: if (!seq_list) list_all (mbox); else mu_list_foreach (seq_list, action_list, &clos); break; } mu_mailbox_close (mbox); mu_mailbox_destroy (&mbox); return 0; }
int main (int argc, char **argv) { char *name; /* Native Language Support */ MU_APP_INIT_NLS (); mh_argp_init (program_version); mh_argp_parse (&argc, &argv, 0, options, mh_option, args_doc, doc, opt_handler, NULL, NULL); cur_folder_path = current_folder_path (); if (!explicit_folder) { interactive = 1; name = cur_folder_path; } else name = mh_expand_name (NULL, folder_name, 0); rmf (name); return 0; }
int main (int argc, char **argv) { struct group *gr; int status = 0; static int sigtab[] = { SIGILL, SIGBUS, SIGFPE, SIGSEGV, SIGSTOP, SIGPIPE, SIGABRT }; imap4d_argc = argc; imap4d_argv = argv; /* Native Language Support */ MU_APP_INIT_NLS (); state = STATE_NONAUTH; /* Starting state in non-auth. */ MU_AUTH_REGISTER_ALL_MODULES (); /* Register the desired formats. */ mu_register_local_mbox_formats (); imap4d_capability_init (); #ifdef WITH_TLS mu_gocs_register ("tls", mu_tls_module_init); #endif /* WITH_TLS */ #ifdef WITH_GSASL mu_gocs_register ("gsasl", mu_gsasl_module_init); #endif mu_tcpwrapper_cfg_init (); mu_acl_cfg_init (); mu_m_server_cfg_init (); mu_argp_init (program_version, NULL); mu_m_server_create (&server, program_version); mu_m_server_set_conn (server, imap4d_connection); mu_m_server_set_prefork (server, mu_tcp_wrapper_prefork); mu_m_server_set_mode (server, MODE_INTERACTIVE); mu_m_server_set_max_children (server, 20); /* FIXME mu_m_server_set_pidfile (); */ mu_m_server_set_default_port (server, 143); mu_m_server_set_timeout (server, 1800); /* RFC2060: 30 minutes. */ mu_m_server_set_strexit (server, mu_strexit); if (mu_app_init (&argp, imap4d_capa, imap4d_cfg_param, argc, argv, 0, NULL, server)) exit (EX_CONFIG); /* FIXME: No way to discern from EX_USAGE? */ if (login_disabled) imap4d_capability_add (IMAP_CAPA_LOGINDISABLED); #ifdef WITH_TLS if (tls_required) imap4d_capability_add (IMAP_CAPA_XTLSREQUIRED); #endif namespace_init (); auth_gssapi_init (); auth_gsasl_init (); #ifdef USE_LIBPAM if (!mu_pam_service) mu_pam_service = "gnu-imap4d"; #endif if (mu_m_server_mode (server) == MODE_DAEMON) { /* Normal operation: */ /* First we want our group to be mail so we can access the spool. */ errno = 0; gr = getgrnam ("mail"); if (gr == NULL) { if (errno == 0 || errno == ENOENT) { mu_error (_("%s: no such group"), "mail"); exit (EX_CONFIG); } else { mu_diag_funcall (MU_DIAG_ERROR, "getgrnam", "mail", errno); exit (EX_OSERR); } } if (setgid (gr->gr_gid) == -1) { mu_error (_("error setting mail group: %s"), mu_strerror (errno)); exit (EX_OSERR); } } /* Set the signal handlers. */ mu_set_signals (imap4d_master_signal, sigtab, MU_ARRAY_SIZE (sigtab)); /* Set up for syslog. */ openlog (MU_LOG_TAG (), LOG_PID, mu_log_facility); /* Redirect any stdout error from the library to syslog, they should not go to the client. */ { mu_debug_t debug; mu_diag_get_debug (&debug); mu_debug_set_print (debug, mu_diag_syslog_printer, NULL); mu_debug_default_printer = mu_debug_syslog_printer; } umask (S_IROTH | S_IWOTH | S_IXOTH); /* 007 */ /* Check TLS environment, i.e. cert and key files */ #ifdef WITH_TLS starttls_init (); #endif /* WITH_TLS */ /* Actually run the daemon. */ if (mu_m_server_mode (server) == MODE_DAEMON) { mu_m_server_begin (server); status = mu_m_server_run (server); mu_m_server_end (server); mu_m_server_destroy (&server); } else { /* Make sure we are in the root directory. */ chdir ("/"); status = imap4d_mainloop (fileno (stdin), stdin, stdout); } if (status) mu_error (_("main loop status: %s"), mu_strerror (status)); /* Close the syslog connection and exit. */ closelog (); return status ? EX_SOFTWARE : EX_OK; }
int main (int argc, char *argv[]) { mu_locker_t locker = 0; int err = 0; pid_t usergid = getgid (); pid_t mailgid = getegid (); /* Native Language Support */ MU_APP_INIT_NLS (); /* Drop permissions during argument parsing. */ if (setegid (usergid) < 0) return MU_DL_EX_ERROR; argp_err_exit_status = MU_DL_EX_ERROR; mu_argp_init (NULL, NULL); if (mu_app_init (&argp, dotlock_capa, dotlock_cfg_param, argc, argv, 0, NULL, NULL)) exit (1); if (force) { force *= 60; flags |= MU_LOCKER_TIME; } if (retries != 0) flags |= MU_LOCKER_RETRY; if ((err = mu_locker_create (&locker, file, flags))) { if (debug) mu_diag_funcall (MU_DIAG_ERROR, "mu_locker_create", NULL, err); return MU_DL_EX_ERROR; } if (force != 0) mu_locker_set_expire_time (locker, force); if (retries != 0) mu_locker_set_retries (locker, retries); if (setegid (mailgid) < 0) return MU_DL_EX_ERROR; if (unlock) err = mu_locker_remove_lock (locker); else err = mu_locker_lock (locker); setegid(usergid); mu_locker_destroy (&locker); if (debug && err) mu_error (unlock ? _("unlocking the file %s failed: %s") : _("locking the file %s failed: %s"), file, mu_strerror (err)); switch (err) { case 0: err = MU_DL_EX_OK; break; case EPERM: err = MU_DL_EX_PERM; break; case MU_ERR_LOCK_NOT_HELD: err = MU_DL_EX_NEXIST; break; case MU_ERR_LOCK_CONFLICT: err = MU_DL_EX_EXIST; break; default: err = MU_DL_EX_ERROR; break; } return err; }
int main (int argc, char **argv) { int index; int rc; mu_stream_t in, tmp; mu_message_t msg; mu_header_t hdr; mu_iterator_t itr; const char *file; char *newval; mu_off_t size; mu_body_t body; mu_stream_t bstr; MU_APP_INIT_NLS (); mh_argp_init (); mh_argp_parse (&argc, &argv, 0, options, mh_option, args_doc, doc, opt_handler, NULL, &index); if (index == argc) { mu_error (_("file name not given")); exit (1); } file = argv[index]; prompter_init (); if (erase_seq) prompter_set_erase (erase_seq); if (kill_seq) prompter_set_erase (kill_seq); if ((rc = mu_stdio_stream_create (&strout, MU_STDOUT_FD, MU_STREAM_WRITE))) { mu_error (_("cannot open stdout: %s"), mu_strerror (rc)); return 1; } if ((rc = mu_file_stream_create (&in, file, MU_STREAM_RDWR))) { mu_error (_("cannot open input file `%s': %s"), file, mu_strerror (rc)); return 1; } rc = mu_stream_to_message (in, &msg); mu_stream_unref (in); if (rc) { mu_error (_("input stream %s is not a message (%s)"), file, mu_strerror (rc)); return 1; } if ((rc = mu_temp_file_stream_create (&tmp, NULL, 0))) { mu_error (_("Cannot open temporary file: %s"), mu_strerror (rc)); return 1; } /* Copy headers */ mu_message_get_header (msg, &hdr); mu_header_get_iterator (hdr, &itr); for (mu_iterator_first (itr); !mu_iterator_is_done (itr); mu_iterator_next (itr)) { const char *name, *val; mu_iterator_current_kv (itr, (const void **)&name, (void**)&val); if (!is_empty_string (val)) { mu_stream_printf (tmp, "%s: %s\n", name, val); mu_stream_printf (strout, "%s: %s\n", name, val); } else { int cont = 0; mu_opool_t opool; const char *prompt = name; mu_opool_create (&opool, 1); do { size_t len; char *p; p = prompter_get_value (prompt); if (!p) return 1; prompt = NULL; if (cont) { mu_opool_append_char (opool, '\n'); if (!mu_isspace (p[0])) mu_opool_append_char (opool, '\t'); } len = strlen (p); if (len > 0 && p[len-1] == '\\') { len--; cont = 1; } else cont = 0; mu_opool_append (opool, p, len); free (p); } while (cont); mu_opool_append_char (opool, 0); newval = mu_opool_finish (opool, NULL); if (!is_empty_string (newval)) mu_stream_printf (tmp, "%s: %s\n", name, newval); mu_opool_destroy (&opool); } } mu_iterator_destroy (&itr); mu_stream_printf (strout, "--------\n"); mu_stream_write (tmp, "\n", 1, NULL); /* Copy body */ if (prepend_option) { mu_stream_printf (strout, "\n--------%s\n\n", _("Enter initial text")); while ((newval = prompter_get_line ())) { mu_stream_write (tmp, newval, strlen (newval), NULL); free (newval); mu_stream_write (tmp, "\n", 1, NULL); } } mu_message_get_body (msg, &body); mu_body_get_streamref (body, &bstr); if (!prepend_option && !rapid_option) { mu_stream_copy (strout, bstr, 0, NULL); mu_stream_seek (bstr, 0, MU_SEEK_SET, NULL); } mu_stream_copy (tmp, bstr, 0, NULL); mu_stream_unref (bstr); if (!prepend_option && !rapid_option) { printf ("\n--------%s\n\n", _("Enter additional text")); while ((newval = prompter_get_line ())) { mu_stream_write (tmp, newval, strlen (newval), NULL); free (newval); mu_stream_write (tmp, "\n", 1, NULL); } } /* Destroy the message */ mu_message_destroy (&msg, mu_message_get_owner (msg)); /* Rewind the streams and copy data back to in. */ mu_stream_seek (in, 0, MU_SEEK_SET, NULL); mu_stream_seek (tmp, 0, MU_SEEK_SET, NULL); mu_stream_copy (in, tmp, 0, &size); mu_stream_truncate (in, size); mu_stream_destroy (&in); mu_stream_destroy (&tmp); mu_stream_destroy (&strout); prompter_done (); return 0; }
int main (int argc, char **argv) { struct group *gr; int status = OK; static int sigtab[] = { SIGILL, SIGBUS, SIGFPE, SIGSEGV, SIGSTOP, SIGPIPE }; /* Native Language Support */ MU_APP_INIT_NLS (); MU_AUTH_REGISTER_ALL_MODULES(); /* Register the desired formats. */ mu_register_local_mbox_formats (); #ifdef WITH_TLS mu_gocs_register ("tls", mu_tls_module_init); #endif /* WITH_TLS */ mu_tcpwrapper_cfg_init (); manlock_cfg_init (); mu_acl_cfg_init (); mu_m_server_cfg_init (pop3d_srv_param); mu_argp_init (NULL, NULL); mu_m_server_create (&server, program_version); mu_m_server_set_config_size (server, sizeof (struct pop3d_srv_config)); mu_m_server_set_conn (server, pop3d_connection); mu_m_server_set_prefork (server, mu_tcp_wrapper_prefork); mu_m_server_set_mode (server, MODE_INTERACTIVE); mu_m_server_set_max_children (server, 20); /* FIXME mu_m_server_set_pidfile (); */ mu_m_server_set_default_port (server, 110); mu_m_server_set_timeout (server, 600); mu_m_server_set_strexit (server, mu_strexit); mu_alloc_die_hook = pop3d_alloc_die; mu_log_syslog = 1; manlock_mandatory_locking = 1; #ifdef ENABLE_DBM set_dbm_safety (); #endif if (mu_app_init (&argp, pop3d_argp_capa, pop3d_cfg_param, argc, argv, 0, NULL, server)) exit (EX_CONFIG); /* FIXME: No way to discern from EX_USAGE? */ if (expire == 0) expire_on_exit = 1; #ifdef USE_LIBPAM if (!mu_pam_service) mu_pam_service = "gnu-pop3d"; #endif if (mu_m_server_mode (server) == MODE_INTERACTIVE && isatty (0)) { /* If input is a tty, switch to debug mode */ debug_mode = 1; } else { errno = 0; gr = getgrnam ("mail"); if (gr == NULL) { if (errno == 0 || errno == ENOENT) { mu_error (_("%s: no such group"), "mail"); exit (EX_CONFIG); } else { mu_diag_funcall (MU_DIAG_ERROR, "getgrnam", "mail", errno); exit (EX_OSERR); } } if (setgid (gr->gr_gid) == -1) { mu_error (_("error setting mail group: %s"), mu_strerror (errno)); exit (EX_OSERR); } } /* Set the signal handlers. */ mu_set_signals (pop3d_master_signal, sigtab, MU_ARRAY_SIZE (sigtab)); mu_stdstream_strerr_setup (mu_log_syslog ? MU_STRERR_SYSLOG : MU_STRERR_STDERR); umask (S_IROTH | S_IWOTH | S_IXOTH); /* 007 */ /* Check TLS environment, i.e. cert and key files */ #ifdef WITH_TLS tls_available = mu_check_tls_environment (); if (tls_available) enable_stls (); #endif /* WITH_TLS */ /* Actually run the daemon. */ if (mu_m_server_mode (server) == MODE_DAEMON) { mu_m_server_begin (server); status = mu_m_server_run (server); mu_m_server_end (server); mu_m_server_destroy (&server); } else { /* Make sure we are in the root directory. */ chdir ("/"); status = pop3d_mainloop (MU_STDIN_FD, MU_STDOUT_FD, tls_mode); } if (status) mu_error (_("main loop status: %s"), mu_strerror (status)); /* Close the syslog connection and exit. */ closelog (); return status ? EX_SOFTWARE : EX_OK; }