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; }
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; }
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; }
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); }
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); }
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; }
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; }
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; }
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"); }