int main(int ac, char **av) { time_t t; int i = 1; LoadDiabloConfig(ac, av); while (i < ac) { char *p = av[i]; if (*p == '-') { p++; i++; switch (*p++) { case 'c': t = strtol(*p ? p : av[i++], NULL, 0); if (t != 0) printf("%s", ctime(&t)); else printf("Bad time specification\n"); exit(0); case 'g': t = strtol(*p ? p : av[i++], NULL, 0) * 60; if (t != 0) printf("%s", ctime(&t)); else printf("Bad time specification\n"); exit(0); default: Usage(av[0]); } } else { break; } } if (ac == 1) Usage(av[0]); t = parsedate(av[ac - 1]); if (t == (time_t)-1) printf("Illegal format\n"); else printf("%s", ctime(&t)); return(0); }
int main(int ac, char **av) { int r = 0; int i; char *arg = NULL; char *file = NULL; LogFo = stderr; LoadDiabloConfig(ac, av); for (i = 1; i < ac; ++i) { char *ptr = av[i]; if (*ptr != '-') { arg = ptr; continue; } ptr += 2; switch(ptr[-1]) { case 'C': if (*ptr == 0) ++i; break; case 'd': DebugOpt = atoi(*ptr ? ptr : av[++i]); break; case 'F': ForceOpt = 1; break; case 'f': file = (*ptr) ? ptr : av[++i]; break; case 'H': ShowFileHeader = 1; break; case 'h': HeadOnly = 1; break; case 'q': QuietOpt = 1; break; case 's': StripCR = 0; break; case 'V': PrintVersion(); break; case 'v': VerifyOnly = 1; LogFo = stdout; break; default: fprintf(stderr, "dreadart: Illegal option: %s\n", ptr - 2); Usage(av[0]); } } if (arg == NULL && file == NULL) Usage(av[0]); HistoryOpen(NULL, HGF_READONLY); LoadSpoolCtl(0, 1); if (arg == NULL) { char buf[8192]; char msgid[MAXMSGIDLEN]; FILE *fi = (strcmp(file, "-") == 0) ? stdin : fopen(file, "r"); if (fi) { while (fgets(buf, sizeof(buf), fi) != NULL) { hash_t hv; char *m; if (strncmp(buf, "DUMP ", 5) == 0) { History h = { 0 }; if (sscanf(buf + 5, "%s gm=%d ex=%hd boff=%d bsize=%d", msgid, &h.gmt, &h.exp, &h.boffset, &h.bsize) == 5) { char *p; h.hv.h1 = (int32)strtoul(msgid, &p, 16); if (*p == '.') h.hv.h2 = (int32)strtoul(p + 1, &p, 16); if (*p == '.') h.iter = (int16)strtoul(p + 1, NULL, 16); r = LookupHash(h.hv, NULL, &h); } } else if ((m = strchr(buf, '<')) != NULL) { char *p; if ((p = strchr(m, '>')) == NULL) continue; *++p = 0; hv = hhash(m); r = LookupHash(hv, m, NULL); } else if (sscanf(buf, "%x.%x", &hv.h1, &hv.h2) == 2) { r = LookupHash(hv, NULL, NULL); } } if (fi != stdin) fclose(fi); } else { fprintf(stderr, "Unable to open %s (%s)\n", file, strerror(errno)); } } else { hash_t hv; char *msgid = NULL; if (arg[0] == '<') { msgid = arg; hv = hhash(arg); r = LookupHash(hv, msgid, NULL); } else if (arg[0] == 'D' && arg[1] == '.') { int32 dummy; if (sscanf(arg + 2, "%x/%x.%x", &dummy, &hv.h1, &hv.h2) != 3) { fprintf(stderr, "argument error\n"); exit(1); } r = LookupHash(hv, msgid, NULL); } else if (sscanf(arg, "%x.%x", &hv.h1, &hv.h2) == 2) { r = LookupHash(hv, msgid, NULL); } else { char fname[PATH_MAX]; char *p = fname; History h = { 0 }; *p = 0; if (*arg != '/') { sprintf(p, "%s/", PatExpand(SpoolHomePat)); p += strlen(p); } if (sscanf(arg, "%[^:]:%d,%d", p, &h.boffset, &h.bsize) == 3) { DumpArticle(fname, &h, NULL); } else { printf("Unknown argument: %s\n", arg); } } } exit(r); }
int main(int ac, char **av) { char *qFile = NULL; const char *cFile = NULL; int oldFormat = 0; OpenLog("dspoolout", (DebugOpt > 0 ? LOG_PERROR: 0) | LOG_NDELAY | LOG_PID); LoadDiabloConfig(ac, av); cFile = DNewsfeedsPat; /* * Maintain compatability with old format */ { struct stat sb; if (stat(PatLibExpand(DNNTPSpoolCtlPat), &sb) == 0) { cFile = DNNTPSpoolCtlPat; oldFormat = 1; } } /* * Shift into the out.going directory */ if (chdir(PatExpand(DQueueHomePat)) != 0) { fprintf(stderr, "unable to chdir to %s\n", PatExpand(DQueueHomePat)); exit(1); } { int i; for (i = 1; i < ac; ++i) { char *ptr = av[i]; if (*ptr == '-') { ptr += 2; switch(ptr[-1]) { case 'B': if (*ptr == 0) ptr = av[++i]; OutboundIpStr = malloc(strlen(ptr) + 8); sprintf(OutboundIpStr, "-B%s", ptr); break; case 'C': if (*ptr == 0) ++i; break; case 'd': DebugOpt = 1; if (*ptr) DebugOpt = strtol(ptr, NULL, 0); break; case 'f': cFile = (*ptr) ? ptr : av[++i]; break; case 'm': MaxRun = strtol((*ptr ? ptr : av[++i]), NULL, 0); break; case 'n': ForReal = 0; break; case 'p': oldFormat = 1; break; case 'q': Quiet = 1; break; case 'R': RxBufSize = strtol((*ptr ? ptr : av[++i]), NULL, 0); break; case 'Q': TOS = strtol((*ptr ? ptr : av[++i]), NULL, 0); break; case 'r': ForceRealTime = 1; break; case 's': MinFlushSecs = strtol((*ptr ? ptr : av[++i]), NULL, 0) * 60; break; case 'T': TxBufSize = strtol((*ptr ? ptr : av[++i]), NULL, 0); break; case 'V': PrintVersion(); break; case 'v': VerboseOpt = 1; break; default: break; } } else { qFile = ptr; } } } if (DebugOpt && qFile != NULL) printf("Processing label: %s\n", qFile); if (oldFormat || strstr(PatLibExpand(cFile), "dspoolout") != NULL) { processDspoolout(PatLibExpand(cFile), qFile); } else { DNewsfeedsPat = cFile; processDnewsfeeds(qFile); } return(0); }
int main(int ac, char **av) { int flags = 0; int uflag = 0; int aflag = 0; uint16 spoolObj = (uint16)-1; char *historyFileName = NULL; LoadDiabloConfig(ac, av); FileAry = calloc(sizeof(char *), FileMax); { int i; for (i = 1; i < ac; ++i) { char *ptr = av[i]; if (*ptr != '-') { if (FileIdx == FileMax) { FileMax = FileMax * 2; FileAry = realloc(FileAry, sizeof(char *) * FileMax); } FileAry[FileIdx++] = ptr; continue; } ptr += 2; switch(ptr[-1]) { case 'a': aflag = 1; break; case 'C': if (*ptr == 0) ++i; break; case 'd': DebugOpt = (*ptr) ? strtol(ptr, NULL, 0) : strtol(av[++i], NULL, 0); break; case 'e': UnExpireOpt = 1; break; case 'F': historyFileName = (*ptr) ? ptr : av[++i]; break; case 'f': flags |= HGF_FAST | HGF_NOSEARCH; break; case 'h': NewHSize = bsizetol((*ptr) ? ptr : av[++i]); if ((NewHSize ^ (NewHSize - 1)) != (NewHSize << 1) - 1) { fprintf(stderr, "specified history size is not a power of 2\n"); exit(1); } break; case 'n': ForReal = 0; break; case 'Q': RequeueOpt = 1; break; case 'q': QuietOpt = 1; break; case 'S': spoolObj = (*ptr) ? strtol(ptr, NULL, 10) : strtol(av[++i], NULL, 10); break; case 't': if (*ptr == 'b') { ptr++; GmtStart = timeConv(*ptr ? ptr : av[++i]); } else if (*ptr == 'e') { ptr++; GmtEnd = timeConv(*ptr ? ptr : av[++i]); } else { fprintf(stderr, "Invalid option: %s\n", &ptr[-2]); Usage(); } break; case 'u': uflag = 1; break; case 'V': PrintVersion(); break; case 'v': VerboseOpt = (*ptr) ? strtol(ptr, NULL, 0) : 1; break; default: Usage(); } } } if (!UnExpireOpt && !aflag && FileIdx == 0 && spoolObj == (uint16)-1) Usage(); if (flags & HGF_FAST || UnExpireOpt) { struct stat st; if (historyFileName == NULL) { fprintf(stderr, "You cannot run fastmode/unexpire without specifying a filename!\n"); exit(1); } if (stat(historyFileName, &st) == 0 && uflag == 0) { fprintf(stderr, "-f history files may not previously exist unless you also specify -u\n"); fprintf(stderr, "WARNING! -f -u is NOT suggested!\n"); exit(1); } if (uflag) flags &= ~HGF_NOSEARCH; } if (VerboseOpt) { if (GmtStart != 0 && GmtEnd != 0) printf("Scanning directories from D.%08x to D.%08x\n", GmtStart, GmtEnd); else if (GmtStart == 0 && GmtEnd != 0) printf("Scanning directories from earliest to D.%08x\n", GmtEnd); else if (GmtStart != 0 && GmtEnd == 0) printf("Scanning directories from D.%08x to latest\n", GmtStart); } if (UnExpireOpt) { hisfd = open(historyFileName, O_RDWR); if (hisfd == -1) { fprintf(stderr, "Unable to open history (%s): %s\n", historyFileName, strerror(errno)); exit(1); } } LoadSpoolCtl(0, 1); if (RequeueOpt) { ForReal = 0; QuietOpt = 1; } else { /* * historyFileName can be NULL and causes the default dhistory path * to be used. */ HistoryOpen(historyFileName, flags); } { int i; for (i = 0; i < FileIdx; ++i) { struct stat st; if (VerboseOpt > 1) printf("Check: %s\n", FileAry[i]); if (stat(FileAry[i], &st) == 0) { if (S_ISDIR(st.st_mode)) { int gmt; if (sscanf(FileAry[i], "D.%x", &gmt) == 1) { ScanSpoolDirectory(FileAry[i], gmt, spoolObj); } else { fprintf(stderr, "Illegal path format for dir: %s\n", FileAry[i]); } } else { int gmt; int iter; if (sscanf(FileAry[i], "D.%x/B.%x", &gmt, &iter) == 2) { ScanSpoolFile(FileAry[i], gmt, iter, spoolObj); } else { fprintf(stderr, "Illegal path format for file: %s\n", FileAry[i]); } } } else { printf("Unable to stat: %s (%s)\n", FileAry[i], strerror(errno)); } } } if (aflag || spoolObj != (uint16)-1) { ScanSpoolObject(spoolObj); } printf("diload: %d/%d entries loaded (%d duplicate)\n", LoadCount, LoadCount + LoadDupCount, LoadDupCount); if (!RequeueOpt) { int r = HistoryClose(); if (r == RCOK) return(0); else return(1); } return(0); /* not reached */ }
int main(int ac, char **av) { int LoadArticle = 0; int DumpFeeds = 0; int SpoolMatch = 0; if (ac < 1) Usage(av[0]); LoadDiabloConfig(ac, av); /* * Options */ { int i; for (i = 1; i < ac; ++i) { char *ptr = av[i]; if (*ptr != '-') continue; ptr += 2; switch(ptr[-1]) { case 'a': LoadArticle = 1; break; case 'C': if (*ptr == 0) ++i; break; case 'D': if (*ptr == 0) { ++i; ptr = av[i]; } Dist = ptr; break; case 'd': if (isdigit((int)(unsigned char)*ptr)) { DebugOpt = strtol(ptr, NULL, 0); } else { --ptr; while (*ptr == 'd') { ++DebugOpt; ++ptr; } } FeedDebug = 1; break; case 'F': DumpFeeds = 1; break; case 'h': HeadOnly = 1; break; case 'l': if (*ptr == 0) { ++i; ptr = av[i]; } Label = ptr; break; case 'M': if (*ptr == 0) { ++i; ptr = av[i]; } MessageId = ptr; break; case 'N': if (*ptr == 0) { ++i; ptr = av[i]; } DNewsfeedsPat = ptr; break; case 'n': if (*ptr == 0) { ++i; ptr = av[i]; } Newsgroups = ptr; break; case 'p': if (*ptr == 0) { ++i; ptr = av[i]; } NumPath = ptr; break; case 'S': Spam = 1; break; case 's': if (*ptr == 0) { ++i; ptr = av[i]; } Size = ptr; break; case 't': if (*ptr == 0) { ++i; ptr = av[i]; } ArtType = ArtTypeConv(ptr); break; case 'V': PrintVersion(); break; case 'X': SpoolMatch = 1; break; default: Usage(av[0]); } } } LoadNewsFeed(0, 1, Label); if (LoadArticle) LoadArt(); if (DumpFeeds) { if (Label == NULL) DumpAllFeedInfo(stdout); else DumpFeedInfo(stdout, Label); exit(0); } if (Newsgroups == NULL) { printf("Missing Newsgroups\n\n"); Usage(av[0]); } { char artType[32]; char offSize[64]; sprintf(artType, "%06x", ArtType); sprintf(offSize, "0,%s", Size); printf("Matching:\n"); printf("\tNewsgroups: %s\n", Newsgroups); printf("\tDistribution: %s\n", Dist); printf("\tSize: %s\n", Size); printf("\tMessage-ID: %s\n", MessageId != NULL ? MessageId : "NONE"); printf("\tNumPath: %s\n", NumPath); printf("\tArtType: %s\n", artType); printf("\tHeadOnly: %s\n", HeadOnly ? "Yes" : "No"); printf("\tSpam: %s\n", Spam ? "Yes" : "No"); if (SpoolMatch) { uint16 Spool; LoadSpoolCtl(0, 1); AllocateSpools(0); Spool = GetSpool(MessageId, Newsgroups, atoi(Size), ArtType, Label, NULL, NULL); printf("\nMatched spool: "); if (Spool == (uint16)-3) printf("DontStore\n"); else if (Spool == (uint16)-2) printf("RejectArt\n"); else if (Spool == (uint16)-1) printf("NoSpool\n"); else printf("%02d\n", Spool); exit(0); } FeedWrite(0, fwCallBack, "", "", offSize, Newsgroups, NumPath, Dist, HeadOnly ? "1" : "0", artType, Spam, 0); } exit(0); }
int main(int ac, char **av) { char *id = NULL; int i; int r = 0; LoadDiabloConfig(ac, av); for (i = 1; i < ac; ++i) { char *ptr = av[i]; if (*ptr != '-') { id = ptr; } else { ptr += 2; switch(ptr[-1]) { case 'C': if (*ptr == 0) ++i; break; case 'f': ScanFile = *ptr ? ptr : ptr + 1; ScanOpt = 1; break; case 'h': DHistoryPat = *ptr ? ptr : ptr + 1; break; case 'q': QuietOpt = 1; break; case 's': ScanOpt = 1; break; case 'V': PrintVersion(); break; default: Usage(); } } } if (ScanOpt == 0 && id == NULL) Usage(); HistoryOpen(NULL, HGF_READONLY); LoadSpoolCtl(0, 1); if (ScanOpt == 0) { r += DILookup(id); } else { char buf[1024]; FILE *f; if (ScanFile == NULL) f = stdin; else f = fopen(ScanFile, "r"); if (f == NULL) { fprintf(stderr, "Unable to open %s (%s)\n", ScanFile, strerror(errno)); exit(1); } while (fgets(buf, sizeof(buf), f) != NULL) { char *p = strrchr(buf, ' '); if (p) { *p++ = '\0'; printf("%s", buf); } else p = buf; r += DILookup(p); } if (ScanFile != NULL) fclose(f); } return(r); }