예제 #1
0
파일: bbslogd.c 프로젝트: xingskycn/kbs
static void trunclog(int signo)
{
    int i;
    flushlog(-1);

    /* see libBBS/log.c:logconf[] */
    static const char *dirty_rotate[] = {"error.log", "connect.log", "msg.log",
       "trace.chatd", "trace"};
    for (i = 0; i < sizeof(dirty_rotate) / sizeof(dirty_rotate[0]); i++) {
        char buf[MAXPATH];
        int j;

        if (!dashf(dirty_rotate[i]))
            continue;

        j=0;
        while (1) {
            sprintf(buf,"%s.%d", dirty_rotate[i],j);
            if (!dashf(buf))
               break;
            j++;
        }
        f_mv(dirty_rotate[i],buf);
    }
    
    for (i = 0; i < sizeof(logconfig) / sizeof(struct taglogconfig); i++) {
        struct taglogconfig *pconf;

		if (! strcmp(logconfig[i].filename,"boardusage.log"))
			continue;
        pconf = &logconfig[i];
        if (pconf->fd>=0) {
        	char buf[MAXPATH];
        	int j;
        	close(pconf->fd);
		j=0;
        	while (1) {
        	    sprintf(buf,"%s.%d",pconf->filename,j);
        	    if (!dashf(buf))
        	    	break;
		    j++;
        	}
        	f_mv(pconf->filename,buf);
        }
    }
    openbbslog(0);
    gb_trunclog=true;
}
예제 #2
0
void
expire_grp()
{
  int pos, fd;
  char fgrp[80], fold[80], fnew[80];
  SLOT grp;

  pos = 0;
  sprintf(fgrp, "2nd/%s", FN_GRP);
  sprintf(fnew, "2nd/%s.new", FN_GRP);
  fd = open(fnew, O_CREAT | O_TRUNC, 0600);	// touch a new file
  if(fd > 0) close(fd);

  while(rec_get(fgrp, &grp, sizeof(SLOT), pos) != -1)
  {
    if(grp.prop & PROP_G_CANCEL)
    {
      sprintf(fold, "2nd/%s", grp.fn);
      f_rm(fold);
    }
    else
    {
      rec_add(fnew, &grp, sizeof(SLOT));
    }
    pos++;
  }
  sprintf(fold, "2nd/%s.old", FN_GRP);
  f_cp(fgrp, fold, O_TRUNC);
  f_mv(fnew, fgrp);

  return;
}
예제 #3
0
파일: bbslogd.c 프로젝트: xingskycn/kbs
static void truncboardlog(int signo)
{
    int i;
    flushlog(-1);
    
    for (i = 0; i < sizeof(logconfig) / sizeof(struct taglogconfig); i++) {
		if (strcmp(logconfig[i].filename,"boardusage.log"))
			continue;
        if (logconfig[i].fd>=0) {
        	close(logconfig[i].fd);
        	f_mv(logconfig[i].filename,"boardusage.log.0");
        }
        if (logconfig[i].filename) {
            /*logconfig[i].fd = open(logconfig[i].filename, O_WRONLY);
            if (logconfig[i].fd < 0)
                logconfig[i].fd = creat(logconfig[i].filename, 0644);*/
            logconfig[i].fd = open(logconfig[i].filename, O_RDWR | O_CREAT, 0644);
            if (logconfig[i].fd < 0)
                bbslog("3error","can't open log file:%s.%s",logconfig[i].filename,strerror(errno));
        }
        if (logconfig[i].buf==NULL)
            logconfig[i].buf = malloc(logconfig[i].bufsize);
    }
    truncboard=true;
}
예제 #4
0
Rename(char* src, char* dst)
{
   char cmd[200];

   if (f_mv(src, dst) == -1)
      return 0;

   sprintf(cmd, "/bin/mv %s %s", src, dst);
   return system(cmd);
}
예제 #5
0
파일: refriend.c 프로젝트: xingskycn/kbs
int refriend(struct userec* user,char* arg)
{
   char buf[256],buf2[256];
   char cmd[1024];
   sethomefile(buf,user->userid,"friends");
   sethomefile(buf2,user->userid,"friends.sav");
   f_cp(buf,buf2,O_TRUNC);
   sethomefile(buf2,user->userid,"newfriends");
   newfd=open(buf2,O_WRONLY|O_TRUNC|O_CREAT,0644);
   apply_record(buf,(APPLY_FUNC_ARG)conver,sizeof(struct oldfriend),NULL,0,false);
   close(newfd);
   f_rm(buf);
   f_mv(buf2,buf);
}
예제 #6
0
파일: show_login.c 프로젝트: yrchen/Athena
void 
clear_aloha(char *direct)
{
	char		fname    [PATHLEN];
	char 		newfname  [PATHLEN];
	FILE           *fp, *newfp;
	PAL		pal;
	int count_r = 0, count_w = 0;
	
	sprintf(fname, "%s/%s", direct, FN_ALOHA);
	sprintf(newfname, "%s/%s.new", direct, FN_ALOHA);

	if(!(fp = fopen(fname, "r")))
	{
		ca_log("%s: cannot open", fname);
		return;
	}
	
	if(!(newfp = fopen(newfname, "w")))
	{
		fclose(fp);
		ca_log("%s: cannot open", newfname);
		return;
	}

	while(fread(&pal, sizeof(PAL), 1, fp) != 0)
	{
		count_r++;
		if(!pal.userid[0] || !searchuser(pal.userid))
			continue;
		fwrite(&pal, sizeof(PAL), 1, newfp);
		count_w++;
	}
	
	ca_log("%s: delete %d bad records.", fname, count_r - count_w);

	fclose(fp);
	fclose(newfp);
	
	if(count_r - count_w != 0)
	{
		f_mv(fname, newfname);
	}
	else
		unlink(newfname);
	return;
}
예제 #7
0
void
expire_item()
{
  int pos, pos1, fd;
  char fgrp[80], fitem[80], fname[80], fold[80], fnew[80];
  time_t expire;
  SLOT grp, item;

  expire = time(0) - EXP * 86400;
  pos = pos1 = 0;
  sprintf(fgrp, "2nd/%s", FN_GRP);

  while(rec_get(fgrp, &grp, sizeof(SLOT), pos) != -1)
  {
    sprintf(fitem, "2nd/%s/%s", grp.fn, FN_ITEM);
    sprintf(fnew, "2nd/%s/%s.new", grp.fn, FN_ITEM);

    fd = open(fnew, O_CREAT | O_TRUNC, 0600);	// touch a new file
    if(fd > 0) close(fd);
    fd = 0;

    while(rec_get(fitem, &item, sizeof(SLOT), pos1) != -1)
    {
      if((item.prop & PROP_I_CANCEL) || (item.chrono < expire))
      {
        sprintf(fname, "2nd/%s/%c/%s", grp.fn, item.fn[7], item.fn);
        f_rm(fname);
      }
      else
      {
        fd++;
        rec_add(fnew, &item, sizeof(SLOT));
      }
      pos1++;
    }
    sprintf(fold, "2nd/%s/%s.old", grp.fn, FN_ITEM);
    f_cp(fitem, fold, O_TRUNC);
    f_mv(fnew, fitem);

    grp.reply = fd;
    rec_put(fgrp, &grp, sizeof(SLOT), pos);
    pos++;
  }

  return;
}
예제 #8
0
int main(int argc, char **argv)
{
    char mdir[256];
    char mdir_bak[256];
    char mdir_new[256];
    struct stat st;
    int fd;
    char touser[20];
    int len;

    if (argc != 2) {
        fprintf(stderr, "Usage: %s fromuser\n", argv[0]);
        return -1;
    }
    chdir(BBSHOME);
    resolve_ucache();
    while (!feof(stdin)) {
        if (fgets(touser, sizeof(touser) - 1, stdin) == NULL)
            return -1;
        touser[sizeof(touser) - 1] = '\0';
        len = strlen(touser);
        if (touser[len - 1] == '\n')
            touser[len - 1] = '\0';
        setmailfile(mdir, touser, ".DIR");
        if (stat(mdir, &st) < 0) {
            fprintf(stderr, "User '%s' not found.\n", touser);
            continue;
        }
        sprintf(mdir_bak, "%s.BAK", mdir);
        f_cp(mdir, mdir_bak, 0);
        sprintf(mdir_new, "%s.NEW", mdir);
        if ((fd = open(mdir_new, O_RDWR | O_CREAT, 0644)) > 0) {
            delete_all_mail(fd, touser, mdir, sizeof(struct fileheader),
                            (RECORD_FUNC_ARG)cmpauthor, argv[1]);
            close(fd);
            f_mv(mdir_new, mdir);
        }
    }
    return 0;
}
예제 #9
0
파일: cnv_register.c 프로젝트: wyat/kbs
int main(int argc, char **argv)
{
    FILE* fin,*fout1,*fout2;
	char genbuf[8][256];
	char* ptr;
	int i;
	struct userec * uc;
	int now;
    int exit = 0,goonsearch = 1;
	char userid[IDLEN+2];

	chdir(BBSHOME);
	
	resolve_ucache();
	resolve_utmp();

    now = time(NULL);
	if((fin = fopen("pre_register","r+")) == NULL)
	{
	    printf("open pre_register file failed.\n");
	    return 0;
	}
	if((fout1 = fopen("pre_register1","w")) == NULL)
	{
	    fclose(fin);
	    printf("open pre_register1 file failed.\n");
	    return 0;
	}
	if((fout2 = fopen("new_register","a")) == NULL)
	{
	    fclose(fin);
		fclose(fout1);
	    printf("open pre_register file failed.\n");
	    return 0;
	}

    writew_lock(fileno(fin), 0, SEEK_SET, 0);
	while(!exit){
	    for(i = 0; i < 8;i++)
		{
            if(fgets(genbuf[i], 256, fin) == NULL){
			    exit = 1;
			    break;
			}
		}
		if(exit == 1)break;
		if(goonsearch){
			strncpy(userid,genbuf[1]+8,IDLEN);
			if((ptr=strchr(userid,'\n')) != NULL)*ptr = 0;
			userid[IDLEN]=0;
			if(getuser(userid,&uc) == 0)
			{
		    	printf("genbuf[1] is %s",genbuf[1]);
		    	printf("%s not found\n",userid);
		    	continue;  //get userid's userec
			}
			if((now - uc->firstlogin) > REGISTER_WAIT_TIME)
			{
            		for(i = 0; i < 8;i++)fputs(genbuf[i],fout2);
			}
			else{
				goonsearch=0;
            			for(i = 0; i < 8;i++)fputs(genbuf[i],fout1);
			}
		}else{
			for(i = 0;i< 8; i++)fputs(genbuf[i],fout1);
		}
    }
//    rewind(fout1);
//    ftruncate(fileno(fin),0);
//    while(fgets(genbuf[0],256,fout1))
//    	fputs(genbuf[0],fin);
    un_lock(fileno(fin), 0, SEEK_SET, 0);
    fclose(fin);
    fclose(fout1);
    fclose(fout2);
	
	f_mv("pre_register1","pre_register");
}