From ae31e19f92e717919ac8e3db9039eb38d2b89aae Mon Sep 17 00:00:00 2001 From: in2 Date: Thu, 7 Mar 2002 15:13:44 +0000 Subject: Initial revision git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@1 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- util/reaper.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 util/reaper.c (limited to 'util/reaper.c') diff --git a/util/reaper.c b/util/reaper.c new file mode 100644 index 00000000..925ea11b --- /dev/null +++ b/util/reaper.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "config.h" +#include "pttstruct.h" +#include "perm.h" +#include "util.h" + +time_t now; + +int invalid(char *userid) { + int i; + + if(!isalpha(userid[0])) + return 1; + + for(i = 1; i < IDLEN && userid[i]; i++) + if(!isalpha(userid[i]) && !isdigit(userid[i])) + return 1; + return 0; +} + +int check(int n, userec_t *u) { + time_t d; + char buf[256]; + + if(u->userid[0] != '\0') { + if(invalid(u->userid)) { + syslog(LOG_ERR, "bad userid(%d): %s", n, u->userid); + u->userid[0] = '\0'; + } else { + d = now - u->lastlogin; + if((d > MAX_GUEST_LIFE && (u->userlevel & PERM_LOGINOK) == 0) || + (d > MAX_LIFE && (u->userlevel & PERM_XEMPT) == 0)) { + /* expired */ + int unum; + + unum = searchuser(u->userid); + strcpy(buf, ctime(&u->lastlogin)); + strtok(buf, "\n"); + syslog(LOG_NOTICE, "kill user(%d): %s %s", unum, u->userid, buf); + sprintf(buf, "mv home/%c/%s tmp/", u->userid[0], u->userid); + if(system(buf)) + syslog(LOG_ERR, "can't move user home: %s", u->userid); + u->userid[0] = '\0'; + setuserid(unum, u->userid); + } + } + } + return 0; +} + +int main() { + now = time(NULL); + openlog("reaper", LOG_PID | LOG_PERROR, SYSLOG_FACILITY); + chdir(BBSHOME); + + if(passwd_mmap()) + exit(1); + passwd_apply2(check); + + return 0; +} -- cgit v1.2.3