int main(int argc,char **argv){ int c, errflag = 0; while ((c = getopt(argc, argv, "p:h?")) != -1) switch (c) { case 'p': DefaultPath = optarg; break; case 'h': case '?': default: errflag++; break; } if (errflag > 0) { usage(argv[0]); return (1); } if (argc - optind < 1) { usage(argv[0]); exit(1); } initial_bbs(NULL); initsocket(); ctlinnbbsd(argc - optind, argv + optind); closesocket(); return 0; }
int main(int argc, char **argv) { char *ptr, *server, *active; int c, errflag=0; int lockfd; char *inputtype; DefaultNntpProtocol = NntpIhaveProtocol; *DefaultNewsgroups = '\0'; *DefaultModerator = '\0'; *DefaultOrganization = '\0'; *DefaultTrustFrom = '\0'; *DefaultTrustfrom = '\0'; inputtype = NntpInputType; while ((c = getopt(argc,argv,"f:F:m:o:g:w:r:p:a:s:t:h?ncv"))!= -1) switch (c) { case 'v': verboseon("bbsnnrp.log"); break; case 'c': ResetActive = 1; break; case 'g': strncpy(DefaultNewsgroups, optarg, sizeof DefaultNewsgroups); break; case 'm': strncpy(DefaultModerator, optarg, sizeof DefaultModerator); break; case 'o': strncpy(DefaultOrganization, optarg, sizeof DefaultOrganization); break; case 'f': strncpy(DefaultTrustfrom, optarg, sizeof DefaultTrustfrom); break; case 'F': strncpy(DefaultTrustFrom, optarg, sizeof DefaultTrustFrom); break; case 'r': { char *hostptr; AskLocal = 0; DefaultRemoteHost = optarg; if ((hostptr = strchr(optarg,':')) != NULL) { *hostptr = '\0'; DefaultRemoteHost = hostptr+1; if (strcasecmp( optarg, "post" ) == 0) DefaultNntpProtocol = NntpPostProtocol; *hostptr = ':'; } break; } case 'w': RunOnce = 0; DefaultWait = atoi(optarg); if (DefaultWait < MIN_WAIT) DefaultWait = MIN_WAIT; break; case 'p': if (AskLocal == 0) { DefaultPort = optarg; } else { DefaultPath = optarg; } break; case 'n': StatHistory = 0; break; case 'a': Max_Arts = atol(optarg); if (Max_Arts < 0) Max_Arts = 0; break; case 's': Max_Stats = atol(optarg); if (Max_Stats < 0) Max_Stats = 0; break; case 't': if ( strcasecmp(optarg,StdinInputType) == 0) { inputtype = StdinInputType; } break; case 'h': case '?': default: errflag ++; } if (errflag > 0) { usage(argv[0]); return(1); } if (inputtype == NntpInputType && argc - optind < 2) { usage(argv[0]); exit(1); } if (inputtype == NntpInputType) { server = argv[optind]; active = argv[optind+1]; if ( isfile(active) ) { strncpy(BBSNNRP.activefile, active, sizeof BBSNNRP.activefile); } else if ( strchr(active,'/') == NULL) { sprintf(BBSNNRP.activefile, "%s/innd/%.*s",BBSHOME, sizeof BBSNNRP.activefile - 7 - strlen(BBSHOME), active); } else { strncpy(BBSNNRP.activefile, active, sizeof BBSNNRP.activefile); } strncpy(LockFile , (char*)fileglue("%s.lock",active), sizeof LockFile); if ((lockfd = open(LockFile, O_RDONLY)) >= 0) { char buf[10]; int pid; if (read(lockfd, buf, sizeof buf) > 0 && (pid = atoi(buf))>0 && kill(pid,0)==0) { fprintf(stderr, "another process [%d] running\n", pid); exit(1); } else { fprintf(stderr, "no process [%d] running, but lock file existed, unlinked\n", pid); unlink(LockFile); } close(lockfd); } if ((lockfd = open(LockFile, O_RDWR|O_CREAT|O_EXCL,0644)) < 0) { fprintf( stderr, "maybe another %s process running\n",argv[0]); exit(1); } else { char buf[10]; int pid; sprintf(buf,"%-.8d\n",getpid()); write(lockfd, buf, strlen(buf)); close(lockfd); } for (;;) { if (!initial_bbs(NULL)) { fprintf(stderr, "Initial BBS failed\n"); exit(1); } initsockets(server, &BBSNNRP, inputtype); ptr = (char*)strrchr(active,'/'); if (ptr != NULL) ptr++; else ptr = active; sprintf(BBSNNRP.rcfile,"%s/.newsrc.%s.%s",INNDHOME, server, ptr); initrcfiles(&BBSNNRP); signal(SIGTERM, doterm); signal(SIGKILL, doterm); signal(SIGHUP, doterm); signal(SIGPIPE, doterm); readnews(&BBSNNRP); writerc(&BBSNNRP); closesockets(); if (RunOnce) break; sleep(DefaultWait); } unlink(LockFile); } /* NntpInputType */ else { if (!initial_bbs(NULL)) { fprintf(stderr, "Initial BBS failed\n"); exit(1); } initsockets(server, &BBSNNRP, inputtype); signal(SIGTERM, doterm); signal(SIGKILL, doterm); signal(SIGHUP, doterm); signal(SIGPIPE, doterm); stdinreadnews(&BBSNNRP); closesockets(); } /* stdin input type */ return 0; }