--- sbbs/src/sbbs3/file.cpp 2018/04/24 16:41:23 1.1.1.1 +++ sbbs/src/sbbs3/file.cpp 2018/04/24 16:43:32 1.1.1.2 @@ -2,13 +2,13 @@ /* Synchronet file transfer-related functions */ -/* $Id: file.cpp,v 1.1.1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: file.cpp,v 1.1.1.2 2018/04/24 16:43:32 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2005 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2011 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -71,9 +71,9 @@ void sbbs_t::fileinfo(file_t* f) bprintf(text[FiDescription],f->desc); bprintf(text[FiUploadedBy],f->misc&FM_ANON ? text[UNKNOWN_USER] : f->uler); if(f->date) - bprintf(text[FiFileDate],timestr(&f->date)); - bprintf(text[FiDateUled],timestr(&f->dateuled)); - bprintf(text[FiDateDled],f->datedled ? timestr(&f->datedled) : "Never"); + bprintf(text[FiFileDate],timestr(f->date)); + bprintf(text[FiDateUled],timestr(f->dateuled)); + bprintf(text[FiDateDled],f->datedled ? timestr(f->datedled) : "Never"); bprintf(text[FiTimesDled],f->timesdled); if(f->size!=-1L) bprintf(text[FiTransferTime],sectostr(f->timetodl,tmp)); @@ -90,9 +90,13 @@ void sbbs_t::fileinfo(file_t* f) getextdesc(&cfg,f->dir,f->datoffset,ext); CRLF; putmsg(ext,P_NOATCODES); - CRLF; } - if(f->size==-1L) + CRLF; + } + if(f->size==-1L) { bprintf(text[FileIsNotOnline],f->name); + if(SYSOP) + bprintf("%s\r\n",fpath); + } if(f->opencount) bprintf(text[FileIsOpen],f->opencount,f->opencount>1 ? "s" : nulstr); @@ -114,12 +118,14 @@ void sbbs_t::openfile(file_t* f) sprintf(str1,"%s%s.dat",cfg.dir[f->dir]->data_dir,cfg.dir[f->dir]->code); if((file=nopen(str1,O_RDWR))==-1) { errormsg(WHERE,ERR_OPEN,str1,O_RDWR); - return; } + return; + } lseek(file,f->datoffset+F_OPENCOUNT,SEEK_SET); if(read(file,str2,3)!=3) { close(file); errormsg(WHERE,ERR_READ,str1,3); - return; } + return; + } str2[3]=0; ultoa(atoi(str2)+1,str3,10); putrec(str2,0,3,str3); @@ -127,7 +133,8 @@ void sbbs_t::openfile(file_t* f) if(write(file,str2,3)!=3) { close(file); errormsg(WHERE,ERR_WRITE,str1,3); - return; } + return; + } close(file); /**********************************/ /* Add transaction to BACKOUT.DAB */ @@ -135,7 +142,8 @@ void sbbs_t::openfile(file_t* f) sprintf(str1,"%sbackout.dab",cfg.node_dir); if((file=nopen(str1,O_WRONLY|O_APPEND|O_CREAT))==-1) { errormsg(WHERE,ERR_OPEN,str1,O_WRONLY|O_APPEND|O_CREAT); - return; } + return; + } ch=BO_OPENFILE; write(file,&ch,1); /* backout type */ write(file,cfg.dir[f->dir]->code,8); /* directory code */ @@ -160,12 +168,14 @@ void sbbs_t::closefile(file_t* f) sprintf(str1,"%s%s.dat",cfg.dir[f->dir]->data_dir,cfg.dir[f->dir]->code); if((file=nopen(str1,O_RDWR))==-1) { errormsg(WHERE,ERR_OPEN,str1,O_RDWR); - return; } + return; + } lseek(file,f->datoffset+F_OPENCOUNT,SEEK_SET); if(read(file,str2,3)!=3) { close(file); errormsg(WHERE,ERR_READ,str1,3); - return; } + return; + } str2[3]=0; ch=atoi(str2); if(ch) ch--; @@ -175,7 +185,8 @@ void sbbs_t::closefile(file_t* f) if(write(file,str2,3)!=3) { close(file); errormsg(WHERE,ERR_WRITE,str1,3); - return; } + return; + } close(file); /*****************************************/ /* Removing transaction from BACKOUT.DAB */ @@ -185,21 +196,25 @@ void sbbs_t::closefile(file_t* f) return; if((file=nopen(str1,O_RDONLY))==-1) { errormsg(WHERE,ERR_OPEN,str1,O_RDONLY); - return; } - length=filelength(file); + return; + } + length=(long)filelength(file); if((buf=(char *)malloc(length))==NULL) { close(file); errormsg(WHERE,ERR_ALLOC,str1,length); - return; } + return; + } if(read(file,buf,length)!=length) { close(file); free(buf); errormsg(WHERE,ERR_READ,str1,length); - return; } + return; + } close(file); if((file=nopen(str1,O_WRONLY|O_TRUNC))==-1) { errormsg(WHERE,ERR_OPEN,str1,O_WRONLY|O_TRUNC); - return; } + return; + } ch=0; /* 'ch' is a 'file already removed' flag */ for(l=0;l 1 */ if(!ch && buf[l]==BO_OPENFILE) { @@ -208,8 +223,11 @@ void sbbs_t::closefile(file_t* f) memcpy(&offset,buf+l+9,4); if(!stricmp(str1,cfg.dir[f->dir]->code) && offset==f->datoffset) { ch=1; - continue; } } - write(file,buf+l,BO_LEN); } + continue; + } + } + write(file,buf+l,BO_LEN); + } free(buf); close(file); } @@ -236,7 +254,7 @@ char * sbbs_t::getfilespec(char *str) /****************************************************************************/ /* Checks to see if filename matches filespec. Returns 1 if yes, 0 if no */ /****************************************************************************/ -extern "C" BOOL filematch(char *filename, char *filespec) +extern "C" BOOL filematch(const char *filename, const char *filespec) { char c; @@ -258,13 +276,12 @@ extern "C" BOOL filematch(char *filename /*****************************************************************************/ bool sbbs_t::checkfname(char *fname) { - char str[256]; int c=0,d; if(fname[0]=='-' || strcspn(fname,ILLEGAL_FILENAME_CHARS)!=strlen(fname)) { - SAFEPRINTF(str,"Suspicious filename attempt: '%s'",fname); - errorlog(str); + lprintf(LOG_WARNING,"Suspicious filename attempt: '%s'",fname); + hacklog("Filename", fname); return(false); } if(strstr(fname,".."))