int main(int argc, char *argv[]) { chdir(BBSHOME); setuid(BBSUID); setgid(BBSGID); setreuid(BBSUID, BBSUID); setregid(BBSGID, BBSGID); #ifndef CYGWIN #undef time bbssettime(time(0)); sleep(1); #define time(x) bbstime(x) #endif setpublicshmreadonly(0); #ifndef CYGWIN setpublicshmreadonly(1); #endif init_bbslog(); if (argc > 1) { if (strcasecmp(argv[1], "killuser") == 0) { //Added by Marvel resolve_utmp(); if (resolve_ucache() != 0) return -1; return dokilluser(); } if (strcasecmp(argv[1], "giveup") == 0) { if (resolve_ucache() != 0) return -1; return doupdategiveupuser(); } if (strcasecmp(argv[1], "allboards") == 0) return dokillalldir(); if (strcasecmp(argv[1], "daemon") == 0) return miscd_dodaemon(argv[1], argv[2]); if (strcasecmp(argv[1], "killdir") == 0) return dokilldir(argv[2]); if (strcasecmp(argv[1], "flush") == 0) { if (resolve_ucache() != 0) return -1; resolve_boards(); flushdata(); return 0; } return miscd_dodaemon(NULL, argv[1]); } printf("Usage : %s daemon: to run as a daemon (this is the most common use)\n", argv[0]); printf(" %s killuser: to kill old users\n", argv[0]); printf(" %s giveup: to unlock given-up users\n", argv[0]); printf(" %s killdir <BOARDNAME>: to delete old file in <BOARDNAME>\n", argv[0]); printf(" %s allboards: to delete old files in all boards\n", argv[0]); printf(" %s flush: to synchronize .PASSWDS and .BOARDS to disk\n", argv[0]); printf("That's all, folks. See doc/README.SYSOP for more details\n"); return 0; }
void timed() { #ifndef CYGWIN setpublicshmreadonly(0); #endif while (1) { #undef time bbssettime(time(0)); sleep(1); #define time(x) bbstime(x) } }
void timed() { char line[20]; const char *path = "var/timed.pid"; int pidfd = open(path, O_RDWR | O_CREAT, 0660); if (write_lock(pidfd, 0, SEEK_SET, 0) < 0) { bbslog("3error", "timed had already been started!"); exit(-1); } snprintf(line, sizeof(line), "%ld\n", (long)getpid()); ftruncate(pidfd, 0); write(pidfd, line, strlen(line)); #ifndef CYGWIN setpublicshmreadonly(0); #endif while (1) { #undef time bbssettime(time(0)); sleep(1); #define time(x) bbstime(x) } }
int main(int argc, char **argv) { chdir(BBSHOME); #undef time bbssettime(time(0)); sleep(1); resolve_boards(); load_ucache(); if (argc == 2 && strcmp(argv[1], "--all") == 0) { printf("Transfering Board....\n"); apply_boards(strip_board, NULL); printf("Transfering user mail....\n"); apply_users(strip_mail, NULL); } else if (argc == 2 && strcmp(argv[1], "--mail") == 0) { apply_users(strip_mail, NULL); } else if (argc == 2 && strcmp(argv[1], "--board") == 0) { apply_boards(strip_board, NULL); } else if (argc == 2 && strcmp(argv[1], "--rollback") == 0) { //apply_boards(rollback_board, NULL); apply_users(rollback_mail, NULL); } else if (argc == 3 && strcmp(argv[1], "-b") == 0) { struct boardheader *bh; if ((bh = getbcache(argv[2])) == NULL) { fprintf(stderr, "Board <%s> not found!\n", argv[2]); exit(-1); } strip_board(bh, NULL); } else if (argc == 3 && strcmp(argv[1], "-m") == 0) { struct userec *user; if (!getuser(argv[2], &user)) { fprintf(stderr, "User <%s> not found!\n", argv[2]); exit(-1); } strip_mail(user, NULL); } else if (argc == 3 && strcmp(argv[1], "--rollback-board") == 0) { struct boardheader *bh; if ((bh = getbcache(argv[2])) == NULL) { fprintf(stderr, "Board <%s> not found!\n", argv[2]); exit(-1); } rollback_board(bh, NULL); } else if (argc == 3 && strcmp(argv[1], "--rollback-mail") == 0) { struct userec *user; if (!getuser(argv[2], &user)) { fprintf(stderr, "User <%s> not found!\n", argv[2]); exit(-1); } rollback_mail(user, NULL); } else { fprintf(stderr, "Usage:\n", argv[0]); fprintf(stderr, " %s --all Strip all fileheaders.\n", argv[0]); fprintf(stderr, " %s --mail Strip mail fileheaders.\n", argv[0]); fprintf(stderr, " %s --board Strip board fileheaders.\n", argv[0]); fprintf(stderr, " %s --rollback Rollback all fileheaders.\n", argv[0]); fprintf(stderr, " %s -b board Strip fileheaders of a board.\n", argv[0]); fprintf(stderr, " %s -m user Strip fileheaders of a user's mailbox.\n", argv[0]); fprintf(stderr, " %s --rollback-board board Rollback fileheaders of a board.\n", argv[0]); fprintf(stderr, " %s --rollback-mail user Rollback fileheaders of a user's mailbox.\n", argv[0]); exit(-1); } return 0; }