Finished new outbound queue

This commit is contained in:
Michiel Broek
2002-08-05 20:43:29 +00:00
parent 79327388e9
commit 445582946a
8 changed files with 319 additions and 243 deletions

View File

@@ -168,200 +168,210 @@ void Fatal(char *msg)
int main(int argc, char *argv[])
{
char *cmd, flavor = 'x';
int i, j, rc = 0;
struct passwd *pw;
faddr *addr = NULL;
node *nlent;
char *cmd, flavor = 'x';
int i, j, rc = 0;
struct passwd *pw;
faddr *addr = NULL;
node *nlent;
FILE *fl;
#ifdef MEMWATCH
mwInit();
mwInit();
#endif
InitConfig();
InitNode();
InitFidonet();
TermInit(1);
t_start = time(NULL);
umask(002);
InitConfig();
InitNode();
InitFidonet();
TermInit(1);
t_start = time(NULL);
umask(002);
/*
* Catch all signals we can, and ignore the rest.
*/
for (i = 0; i < NSIG; i++) {
if ((i == SIGHUP) || (i == SIGINT) || (i == SIGBUS) ||
(i == SIGILL) || (i == SIGSEGV) || (i == SIGTERM) ||
(i == SIGKILL))
signal(i, (void (*))die);
else
signal(i, SIG_IGN);
}
if(argc < 2)
Help();
cmd = xstrcpy((char *)"Command line: mbout");
if (argc > 1) {
cmd = xstrcat(cmd, (char *)" ");
cmd = xstrcat(cmd, argv[1]);
if (!strncasecmp(argv[1], "a", 1))
do_attach = TRUE;
if (!strncasecmp(argv[1], "n", 1))
do_node = TRUE;
if (!strncasecmp(argv[1], "p", 1))
do_poll = TRUE;
if (!strncasecmp(argv[1], "req", 3))
do_req = TRUE;
if (!strncasecmp(argv[1], "res", 3))
do_reset = TRUE;
if (!strncasecmp(argv[1], "sta", 3))
do_stat = TRUE;
if (!strncasecmp(argv[1], "sto", 3))
do_stop = TRUE;
}
for (i = 2; i < argc; i++) {
cmd = xstrcat(cmd, (char *)" ");
cmd = xstrcat(cmd, argv[i]);
if (!strncasecmp(argv[i], "-q", 2))
do_quiet = TRUE;
}
ProgName();
pw = getpwuid(getuid());
InitClient(pw->pw_name, (char *)"mbout", CFG.location, CFG.logfile, CFG.util_loglevel, CFG.error_log);
Syslog(' ', " ");
Syslog(' ', "MBOUT v%s", VERSION);
Syslog(' ', cmd);
free(cmd);
if (!do_quiet) {
colour(3, 0);
printf("\n");
}
if (do_stat) {
rc = outstat();
if (rc)
rc += 100;
die(rc);
}
/*
* Get node number from commandline
*/
if (do_attach || do_node || do_poll || do_stop || do_req || do_reset) {
if (argc < 3)
Fatal((char *)"Not enough parameters");
}
if (do_attach || do_node || do_req || do_reset) {
if ((addr = parsefaddr(argv[2])) == NULL)
Fatal((char *)"Unrecognizable address");
}
if (do_node) {
rc = nlinfo(addr);
tidy_faddr(addr);
if (rc)
rc += 100;
die(rc);
}
if (do_poll || do_stop) {
for (i = 3; i <= argc; i++) {
if (strncasecmp(argv[i-1], "-q", 2)) {
if ((addr = parsefaddr(argv[i-1])) == NULL)
Fatal((char *)"Unrecognizable address");
j = poll(addr, do_stop);
tidy_faddr(addr);
if (j > rc)
rc = j;
}
}
if (rc)
rc = 100;
die(rc);
}
if (do_reset) {
for (i = 3; i <= argc; i++) {
if (strncasecmp(argv[i-1], "-q", 2)) {
if ((addr = parsefaddr(argv[i-1])) == NULL)
Fatal((char *)"Unrecognizable address");
j = reset(addr);
tidy_faddr(addr);
if (j > rc)
rc = j;
}
}
if (rc)
rc = 100;
die(rc);
}
if (do_attach) {
if (argc < 5)
Fatal((char *)"Not enough parameters");
flavor = tolower(argv[3][0]);
switch (flavor) {
case 'n' : flavor = 'f'; break;
case 'i' : flavor = 'i'; break;
case 'c' : flavor = 'c'; break;
case 'h' : flavor = 'h'; break;
default : Fatal((char *)"Invalid flavor, must be: immediate, crash, normal or hold");
}
nlent = getnlent(addr);
if (nlent->pflag == NL_DUMMY)
Fatal((char *)"Node is not in nodelist");
if (nlent->pflag == NL_DOWN)
Fatal((char *)"Node has status Down");
if (nlent->pflag == NL_HOLD)
Fatal((char *)"Node has status Hold");
if (((nlent->oflags & OL_CM) == 0) && (flavor == 'c'))
Fatal((char *)"Node is not CM, must use Immediate, Normal or Hold flavor");
if (argv[4][0] == '-')
Fatal((char *)"Invalid filename given");
if (file_exist(argv[4], R_OK) != 0)
Fatal((char *)"File doesn't exist");
if (attach(*addr, argv[4], LEAVE, flavor)) {
Syslog('+', "File attach %s is successfull", argv[4]);
if (!do_quiet)
printf("File attach %s is successfull", argv[4]);
CreateSema((char *)"scanout");
tidy_faddr(addr);
die(0);
} else {
Fatal((char *)"File attach failed");
}
}
if (do_req) {
if (argc < 4)
Fatal((char *)"Not enough parameters");
for (i = 4; i <= argc; i++) {
if (strncasecmp(argv[i-1], "-q", 2)) {
rc = freq(addr, argv[i-1]);
if (rc)
break;
}
}
if (rc)
rc += 100;
die(rc);
}
/*
* Catch all signals we can, and ignore the rest.
*/
for (i = 0; i < NSIG; i++) {
if ((i == SIGHUP) || (i == SIGINT) || (i == SIGBUS) || (i == SIGILL) || (i == SIGSEGV) || (i == SIGTERM) || (i == SIGKILL))
signal(i, (void (*))die);
else
signal(i, SIG_IGN);
}
if(argc < 2)
Help();
cmd = xstrcpy((char *)"Command line: mbout");
if (argc > 1) {
cmd = xstrcat(cmd, (char *)" ");
cmd = xstrcat(cmd, argv[1]);
if (!strncasecmp(argv[1], "a", 1))
do_attach = TRUE;
if (!strncasecmp(argv[1], "n", 1))
do_node = TRUE;
if (!strncasecmp(argv[1], "p", 1))
do_poll = TRUE;
if (!strncasecmp(argv[1], "req", 3))
do_req = TRUE;
if (!strncasecmp(argv[1], "res", 3))
do_reset = TRUE;
if (!strncasecmp(argv[1], "sta", 3))
do_stat = TRUE;
if (!strncasecmp(argv[1], "sto", 3))
do_stop = TRUE;
}
for (i = 2; i < argc; i++) {
cmd = xstrcat(cmd, (char *)" ");
cmd = xstrcat(cmd, argv[i]);
if (!strncasecmp(argv[i], "-q", 2))
do_quiet = TRUE;
}
ProgName();
pw = getpwuid(getuid());
InitClient(pw->pw_name, (char *)"mbout", CFG.location, CFG.logfile, CFG.util_loglevel, CFG.error_log);
Syslog(' ', " ");
Syslog(' ', "MBOUT v%s", VERSION);
Syslog(' ', cmd);
free(cmd);
if (!do_quiet) {
colour(3, 0);
printf("\n");
}
if (strcmp(pw->pw_name, "mbse"))
Fatal((char *)"You are not user 'mbse'");
if (do_stat) {
rc = outstat();
if (rc)
rc += 100;
die(rc);
}
/*
* Get node number from commandline
*/
if (do_attach || do_node || do_poll || do_stop || do_req || do_reset) {
if (argc < 3)
Fatal((char *)"Not enough parameters");
}
if (do_attach || do_node || do_req || do_reset) {
if ((addr = parsefaddr(argv[2])) == NULL)
Fatal((char *)"Unrecognizable address");
}
if (do_node) {
rc = nlinfo(addr);
tidy_faddr(addr);
if (rc)
rc += 100;
die(rc);
}
if (do_poll || do_stop) {
for (i = 3; i <= argc; i++) {
if (strncasecmp(argv[i-1], "-q", 2)) {
if ((addr = parsefaddr(argv[i-1])) == NULL)
Fatal((char *)"Unrecognizable address");
j = poll(addr, do_stop);
tidy_faddr(addr);
if (j > rc)
rc = j;
}
}
if (rc)
rc = 100;
die(rc);
}
if (do_reset) {
for (i = 3; i <= argc; i++) {
if (strncasecmp(argv[i-1], "-q", 2)) {
if ((addr = parsefaddr(argv[i-1])) == NULL)
Fatal((char *)"Unrecognizable address");
j = reset(addr);
tidy_faddr(addr);
if (j > rc)
rc = j;
}
}
if (rc)
rc = 100;
die(rc);
}
if (do_attach) {
if (argc < 5)
Fatal((char *)"Not enough parameters");
flavor = tolower(argv[3][0]);
switch (flavor) {
case 'n' : flavor = 'f'; break;
case 'i' : flavor = 'i'; break;
case 'c' : flavor = 'c'; break;
case 'h' : flavor = 'h'; break;
default : Fatal((char *)"Invalid flavor, must be: immediate, crash, normal or hold");
}
nlent = getnlent(addr);
if (nlent->pflag == NL_DUMMY)
Fatal((char *)"Node is not in nodelist");
if (nlent->pflag == NL_DOWN)
Fatal((char *)"Node has status Down");
if (nlent->pflag == NL_HOLD)
Fatal((char *)"Node has status Hold");
if (((nlent->oflags & OL_CM) == 0) && (flavor == 'c'))
Fatal((char *)"Node is not CM, must use Immediate, Normal or Hold flavor");
if (argv[4][0] == '-')
Fatal((char *)"Invalid filename given");
if (file_exist(argv[4], R_OK) != 0)
Fatal((char *)"File doesn't exist");
cmd = calloc(PATH_MAX, sizeof(char));
sprintf(cmd, "%s/%d.%d.%d.%d/.filelist", CFG.out_queue, addr->zone, addr->net, addr->node, addr->point);
mkdirs(cmd, 0750);
if ((fl = fopen(cmd, "a+")) == NULL) {
Fatal((char *)"File attach failed");
} else {
fprintf(fl, "%c LEAVE %s\n", flavor, argv[4]);
Syslog('+', "File attach %s is successfull", argv[4]);
if (!do_quiet)
printf("File attach %s is successfull", argv[4]);
CreateSema((char *)"mailin");
tidy_faddr(addr);
fsync(fileno(fl));
fclose(fl);
free(cmd);
die(0);
}
free(cmd);
}
if (do_req) {
if (argc < 4)
Fatal((char *)"Not enough parameters");
for (i = 4; i <= argc; i++) {
if (strncasecmp(argv[i-1], "-q", 2)) {
rc = freq(addr, argv[i-1]);
if (rc)
break;
}
}
if (rc)
rc += 100;
die(rc);
}
Help();
#ifdef MEMWATCH
mwTerm();
mwTerm();
#endif
return 0;
return 0;
}