petidomo/main.c

108 lines
2.9 KiB
C
Raw Normal View History

2000-12-13 13:19:03 +00:00
/*
$Source$
$Revision$
Copyright (C) 2000 by CyberSolutions GmbH, Germany.
This file is part of Petidomo.
Petidomo 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.
Petidomo 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.
*/
2000-12-13 13:19:03 +00:00
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include "libargv/argv.h"
#include "petidomo.h"
2000-12-13 13:19:03 +00:00
#ifndef LOG_PERROR
# define LOG_PERROR 0
#endif
static char* listname = NULL;
static char* mode = NULL;
static char* masterconfig_path = SYSCONFDIR "/petidomo.conf";
char g_is_approved = ARGV_FALSE;
2000-12-13 13:19:03 +00:00
int
main(int argc, char * argv[])
{
2000-12-13 13:19:03 +00:00
const struct PD_Config * MasterConfig;
char * incoming_mail;
argv_t args[] =
{
{ARGV_MAND, "mode", ARGV_CHAR_P, &mode, "mode", "listserv, deliver, or approve."},
{ARGV_MAYBE, "listname", ARGV_CHAR_P, &listname, "listname", "Default mailing list."},
{ARGV_MAYBE, "masterconf", ARGV_CHAR_P, &masterconfig_path, "masterconf", "Path to petidomo.conf."},
{ARGV_MAYBE, "approved", ARGV_BOOL, &g_is_approved, "approved", "approved flag."},
2000-12-13 13:19:03 +00:00
{ARGV_LAST}
};
2000-12-13 13:19:03 +00:00
/* Init logging routines first of all, so that we can report
errors. */
openlog("petidomo", LOG_CONS | LOG_PID | LOG_PERROR, LOG_MAIL);
2000-12-13 13:19:03 +00:00
/* Parse the command line. */
argv_help_string = "Petidomo Mailing List Server";
argv_version_string = "Petidomo";
2000-12-13 13:19:03 +00:00
argv_process(args, argc, argv);
/* Init Petidomo's internal stuff. */
if (InitPetidomo(masterconfig_path) != 0) {
2000-12-13 13:19:03 +00:00
syslog(LOG_CRIT, "Failed to initialize my internals.");
exit(1);
}
MasterConfig = getMasterConfig();
/* Load the file from standard input and save it, so that it isn't
lost in case of an error. */
incoming_mail = LoadFromDescriptor(STDIN_FILENO);
if (incoming_mail == NULL) {
syslog(LOG_ERR, "Failed to read incoming mail from standard input.");
exit(1);
}
/* Now decide what we actually do with the mail. */
if (strcasecmp("listserv", mode) == 0)
listserv_main(incoming_mail, listname);
else if (strcasecmp("deliver", mode) == 0)
{
2000-12-13 13:19:03 +00:00
if (listname != NULL)
hermes_main(incoming_mail, listname);
else
{
syslog(LOG_ERR, "Wrong command line syntax; deliver mode requires a parameter.");
2000-12-13 13:19:03 +00:00
exit(1);
}
2000-12-13 13:19:03 +00:00
}
else if (strcasecmp("approve", mode) == 0)
{
approve_main(incoming_mail);
}
else
{
syslog(LOG_ERR, "I don't know anything about mode \"%s\".", mode);
2000-12-13 13:19:03 +00:00
exit(1);
}
2000-12-13 13:19:03 +00:00
/* Exit gracefully. */
return 0;
}