int mu_set_user_email (const char *candidate) { int err = 0; mu_address_t addr = NULL; size_t emailno = 0; char *email = NULL; const char *domain = NULL; if (!candidate) { free (mu_user_email); mu_user_email = NULL; return 0; } if ((err = mu_address_create (&addr, candidate)) != 0) return err; if ((err = mu_address_get_email_count (addr, &emailno)) != 0) goto cleanup; if (emailno != 1) { errno = EINVAL; goto cleanup; } if ((err = mu_address_aget_email (addr, 1, &email)) != 0) goto cleanup; free (mu_user_email); mu_user_email = email; if ((err = mu_address_sget_domain (addr, 1, &domain)) == 0) mu_set_user_email_domain (domain); cleanup: mu_address_destroy (&addr); return err; }
int main (int argc, char **argv) { int c, status; char *domain; progname = strrchr (argv[0], '/'); if (!progname) progname = argv[0]; while ((c = getopt (argc, argv, "b:f:p:to:")) != EOF) { switch (c) { case 'b': switch (optarg[0]) { case 'd': smtp_mode = 1; break; default: /*FIXME*/; } break; case 'f': from_person = optarg; break; case 'p': port = strtoul (optarg, NULL, 0); break; case 't': read_recipients = 1; break; case 'o': switch (optarg[0]) { case 'i': dot = 0; break; default: /* FIXME */ ; } break; default: exit (1); } } if (!diag) { char *name = getenv ("MTA_DIAG"); if (name) { char *mode = getenv ("MTA_APPEND") ? "a" : "w"; diag = fopen (name, mode); if (!diag) { mu_error ("%s: can't open diagnostic output: %s", progname, name); return 1; } } else diag = stdout; } register_handlers (); domain = getenv ("MTA_DOMAIN"); mu_set_user_email_domain (domain ? domain : "localhost"); argc -= optind; argv += optind; if (smtp_mode) status = mta_smtp (argc, argv); else status = mta_stdin (argc, argv); fclose (diag); return status; }