Exemple #1
0
int main()
{
    int msqid, i;
    struct bbs_msgbuf *msg;

    struct sigaction act;

    umask(027);

    chdir(BBSHOME);
    setuid(BBSUID);
    setreuid(BBSUID, BBSUID);
    setgid(BBSGID);
    setregid(BBSGID, BBSGID);
    if (dodaemon("bbslogd", true, true)) {
        bbslog("3error", "bbslogd had already been started!");
        return 0;
    }
    atexit(flushBBSlog_exit);
    bzero(&act, sizeof(act));
    act.sa_handler = flushlog;
    sigaction(SIGTERM, &act, NULL);
    sigaction(SIGABRT, &act, NULL);
    sigaction(SIGHUP, &act, NULL);
    act.sa_handler = flushBBSlog_time;
    sigaction(SIGALRM, &act, NULL);
    act.sa_handler = trunclog;
    sigaction(SIGUSR1, &act, NULL);
    act.sa_handler = truncboardlog;
    sigaction(SIGUSR2, &act, NULL);
    alarm(60*10); /*十分钟flush一次*/

    msqid = init_bbslog();
    if (msqid < 0)
        return -1;

    gb_trunclog=false;
    truncboard=false;
    openbbslog(1);
    while (1) {
        if ((msg = rcvlog(msqid)) != NULL)
            writelog(msg);
        if (gb_trunclog)
        	do_trunclog();
		else if(truncboard)
			do_truncboardlog();
    }
    flushlog(-1);
    for (i = 0; i < sizeof(logconfig) / sizeof(struct taglogconfig); i++) {
        free(logconfig[i].buf);
    }
}
Exemple #2
0
int main(int argc, char *argv[]) {
	char *str;
	int i = 0, day = 0, hour = 4;

	umask(027);

	lockfd = open(MY_BBS_HOME "/friends.lock", O_CREAT | O_RDONLY, 0660);
	if (flock(lockfd, LOCK_EX | LOCK_NB) < 0)
		exit(1);
	
	if(argc == 2) {
		if(!strcmp(argv[1], "-d")) { //run as daemon
			if (fork())
				return 0;
			setsid();
			if (fork())
				return 0;
			close(0);
			close(1);
			close(2);
		}
	}
	
	msqid = initFriendsMSQ();
	if (msqid < 0)
		exit(1);
	
	fidx = ght_create(MAXUSERS + 3);
	if (fidx == NULL)
		exit(1);

	mkdir(FRIENDS_TMPDIR, 0770);	//try making tmp dir
	if(load_friends() == -1)
		exit(1);	
	div_friends();
	friends_top10();
	
	signal(SIGHUP, set_sync_flag);	//sync if disconnected
	signal(SIGTERM, write_back_all);
	signal(SIGCHLD, sig_child);
	while (1) {
		while ((str = rcvlog(msqid, 1))) {
		//	printf("%s\n", str);
			handle_msg(str);
		}
		sleep(5);
		i++;
		if (i == hour*12*60 || sync_flag) { //write back from time to time
			system("rm -f " FRIENDS_TMPDIR "/*");
			if(++day == 24/hour) {//daily
				day = 0;
				estrange_by_time();
			}
			save_friends();
			div_friends();
			friends_top10();
			i = 0;
			sync_flag = 0;
		}
	}
	return 0;
}
Exemple #3
0
int
main()
{
	char *str;
	int i = 0, fd = -1, msqid = -1;
	int sp_retv, sv_retv;
	
	srandom(time(NULL));
	chdir(MY_BBS_HOME);
	mkdir(SP_DIR, 0770);
	umask(027);

	msqid = initAILogMSQ();
	if (msqid < 0)
		return -1;
#if !defined(DEBUG_MODE)
	if (fork())
		return 0;
	setsid();
	if (fork())
		return 0;
	close(0);
	close(1);
	close(2);
#endif
	signal(SIGHUP, sig_hup);
	signal(SIGTERM, sig_term);
	signal(SIGCHLD, sig_chld);
	fd = open(MY_BBS_HOME "/reclog/AId.lock", O_CREAT | O_RDONLY,
		  0660);
	if (flock(fd, LOCK_EX | LOCK_NB) < 0)
		return -1;
#ifdef DEBUG_MODE
	printf("msq started...\n");
#endif
	while (1) {
		if(i % 128 == 0) {
			sv_retv = load_server();
			sp_retv = load_special();
			if(fork() == 0) {
				close(fd);
				update_special_html();
				if(sp_retv == 1)
					return send_special();
				else
					return MAX_SERVER_NUM;
			}
		}

		while ((str = rcvlog(msqid, 1))) {
			strsncpy(queue[qlen++], str, 512);
#ifdef DEBUG_MODE
			printf("recved@%ld |%s|\n", time(NULL), str);
			if(qlen < 1)
#else
			if(qlen < 16)
#endif
				continue;
			if(num_server == 0) {
				if(qlen > MAX_QLEN - 1)
					qlen--;//drop msg
				break;
			}
			if(fork() == 0) {
				close(fd);
				return require_ai(i%num_server);
			}
			qlen=0;
			break;
		}
		i++;
		sleep(5);
	}
}
Exemple #4
0
int
main()
{
	char lastch = 0, *str;
	int l, msqid, i;

	umask(027);

	msqid = init_bbslogmsq();
	if (msqid < 0)
		return -1;

	if (fork())
		return 0;
	setsid();
	if (fork())
		return 0;

	close(0);
	close(1);
	close(2);

	fd = open(MY_BBS_HOME "/.bbslogd.lock", O_CREAT | O_RDONLY, 0660);
	if (flock(fd, LOCK_EX | LOCK_NB) < 0)
		return -1;

	signal(SIGHUP, set_sync_flag);
	signal(SIGTERM, write_back_all);
	fd = open(getfilename(), O_WRONLY | O_CREAT | O_APPEND, 0660);
	i = 0;
	while (1) {
		while ((str = rcvlog(msqid, 1))) {
			if (filterlog(str))
				continue;
			if (str[0] != lastch) {
				if (fd >= 0) {
					write(fd, buf, n);
					n = 0;
					i = 0;
					close(fd);
				}
				fd = open(getfilename(),
					  O_WRONLY | O_CREAT | O_APPEND, 0660);
				lastch = str[0];
			}
			l = strlen(str);
			if (l > sizeof (buf) - n) {
				write(fd, buf, n);
				sync_flag = 0;
				n = 0;
				i = 0;
			}
			memcpy(buf + n, str, l);
			n += l;
		}
		sleep(1);
		i++;
		if (i< 30 && !sync_flag)
			continue;
		write(fd, buf, n);
		n = 0;
		i = 0;
		sync_flag = 0;
	}
}