int mu_folder_create (mu_folder_t *pfolder, const char *name) { int rc; mu_url_t url; rc = mu_url_create (&url, name); if (rc) return rc; rc = mu_folder_create_from_record (pfolder, url, NULL); if (rc) mu_url_destroy (&url); return rc; }
/* preauth prog:///usr/sbin/progname preauth ident[://:port] preauth stdio */ static int cb_preauth (mu_debug_t debug, void *data, mu_config_value_t *val) { if (mu_cfg_assert_value_type (val, MU_CFG_STRING, debug)) return 1; if (strcmp (val->v.string, "stdio") == 0) preauth_mode = preauth_stdio; else if (strcmp (val->v.string, "ident") == 0) return parse_preauth_scheme (debug, val->v.string, NULL); else if (val->v.string[0] == '/') { preauth_program = xstrdup (val->v.string); preauth_mode = preauth_prog; } else { mu_url_t url; char *scheme; int rc = mu_url_create (&url, val->v.string); if (rc) { mu_diag_funcall (MU_DIAG_ERROR, "mu_url_create", val->v.string, rc); return 1; } rc = mu_url_parse (url); if (rc) { mu_cfg_format_error (debug, MU_DEBUG_ERROR, "%s: %s", val->v.string, mu_strerror (rc)); return 1; } rc = mu_url_aget_scheme (url, &scheme); if (rc) { mu_url_destroy (&url); mu_cfg_format_error (debug, MU_DEBUG_ERROR, _("URL error: %s"), mu_strerror (rc)); return 1; } rc = parse_preauth_scheme (debug, scheme, url); mu_url_destroy (&url); free (scheme); return rc; } return 0; }
int mu_registrar_lookup (const char *name, int flags, mu_record_t *precord, int *pflags) { int rc; mu_url_t url; rc = mu_url_create (&url, name); if (rc) return rc; rc = mu_url_parse (url); if (rc == 0) rc = mu_registrar_lookup_url (url, flags, precord, pflags); mu_url_destroy (&url); return rc; }
int mutool_send (int argc, char **argv) { int index; char *infile; mu_stream_t instr; mu_message_t msg; size_t count; mu_url_t urlhint, url; mu_mailer_t mailer; MU_ASSERT (mu_address_create_null (&rcpt_addr)); mu_register_all_mailer_formats (); if (argp_parse (&send_argp, argc, argv, 0, &index, NULL)) return 1; argc -= index; argv += index; if (argc < 1) { mu_error (_("not enough arguments")); return 1; } infile = argv[1]; if (infile) MU_ASSERT (mu_file_stream_create (&instr, infile, MU_STREAM_READ|MU_STREAM_SEEK)); else MU_ASSERT (mu_stdio_stream_create (&instr, MU_STDIN_FD, MU_STREAM_READ|MU_STREAM_SEEK)); MU_ASSERT (mu_stream_to_message (instr, &msg)); mu_stream_unref (instr); mu_address_get_count (rcpt_addr, &count); if (count == 0) read_recipients = 1; if (read_recipients) { int rc; mu_header_t header; const char *value; MU_ASSERT (mu_message_get_header (msg, &header)); rc = mu_header_sget_value (header, MU_HEADER_TO, &value); if (rc == 0) send_address_add (&rcpt_addr, value); else if (rc != MU_ERR_NOENT) { mu_diag_funcall (MU_DIAG_ERROR, "mu_header_sget_value", MU_HEADER_TO, rc); exit (1); } rc = mu_header_sget_value (header, MU_HEADER_CC, &value); if (rc == 0) send_address_add (&rcpt_addr, value); else if (rc != MU_ERR_NOENT) { mu_diag_funcall (MU_DIAG_ERROR, "mu_header_sget_value", MU_HEADER_CC, rc); exit (1); } rc = mu_header_sget_value (header, MU_HEADER_BCC, &value); if (rc == 0) send_address_add (&rcpt_addr, value); else if (rc != MU_ERR_NOENT) { mu_diag_funcall (MU_DIAG_ERROR, "mu_header_sget_value", MU_HEADER_BCC, rc); exit (1); } } mu_address_get_count (rcpt_addr, &count); if (count == 0) { mu_error (_("no recipients")); exit (1); } MU_ASSERT (mu_url_create (&urlhint, "smtp://")); MU_ASSERT (mu_url_create_hint (&url, argv[0], MU_URL_PARSE_DEFAULT, urlhint)); mu_url_invalidate (url); MU_ASSERT (mu_mailer_create_from_url (&mailer, url)); MU_ASSERT (mu_mailer_open (mailer, MU_STREAM_RDWR)); MU_ASSERT (mu_mailer_send_message (mailer, msg, from_addr, rcpt_addr)); mu_mailer_close (mailer); mu_mailer_destroy (&mailer); return 0; }
int main (int argc, char **argv) { int i = 1, rc; mu_url_t url = NULL; const char *arg; mu_set_program_name (argv[0]); if (argc > 1) { if (strcmp (argv[1], "help") == 0 || strcmp (argv[1], "--help") == 0 || strcmp (argv[1], "-h") == 0) usage (stdout, 0); if (strncmp (argv[1], "url=", 4) == 0) { MU_ASSERT (mu_url_create (&url, argv[1] + 4)); i = 2; } } if (!url) { MU_ASSERT (mu_url_create_null (&url)); i = 1; } for (; i < argc; i++) { if (strncmp (argv[i], "scheme=", 7) == 0) { MU_ASSERT (mu_url_set_scheme (url, strval (argv[i] + 7))); } else if (strncmp (argv[i], "user="******"path=", 5) == 0) { MU_ASSERT (mu_url_set_path (url, strval (argv[i] + 5))); } else if (strncmp (argv[i], "host=", 5) == 0) { MU_ASSERT (mu_url_set_host (url, strval (argv[i] + 5))); } else if (strncmp (argv[i], "port=", 5) == 0) { MU_ASSERT (mu_url_set_port (url, atoi (argv[i] + 5))); } else if (strncmp (argv[i], "service=", 8) == 0) { MU_ASSERT (mu_url_set_service (url, strval (argv[i] + 8))); } else if (strncmp (argv[i], "auth=", 5) == 0) { MU_ASSERT (mu_url_set_auth (url, strval (argv[i] + 5))); } else if (strncmp (argv[i], "pass="******"param=", 6) == 0) { arg = strval (argv[i] + 6); if (arg) MU_ASSERT (mu_url_add_param (url, 1, (const char **)&arg)); else MU_ASSERT (mu_url_clear_param (url)); } else if (strncmp (argv[i], "query=", 6) == 0) { arg = strval (argv[i] + 6); if (arg) MU_ASSERT (mu_url_add_query (url, 1, (const char **)&arg)); else MU_ASSERT (mu_url_clear_query (url)); } else { mu_error ("unrecognized argument: %s", argv[i]); return 1; } } rc = mu_url_sget_name (url, &arg); if (rc) { mu_error ("%s", mu_strerror (rc)); return 1; } printf ("%s\n", arg); return 0; }