diff --git a/src/sbbs3/logon.cpp b/src/sbbs3/logon.cpp index 33c1f4cba2aa4309b92d5edb214a76342e914bd8..b60647a0d969f791799ab4d899a36227d9296901 100644 --- a/src/sbbs3/logon.cpp +++ b/src/sbbs3/logon.cpp @@ -103,7 +103,7 @@ bool sbbs_t::logon() if(!chk_ar(cfg.node_ar,&useron,&client)) { bputs(text[NoNodeAccess]); - sprintf(str,"(%04u) %-25s Insufficient node access" + safe_snprintf(str, sizeof(str), "(%04u) %-25s Insufficient node access" ,useron.number,useron.alias); logline(LOG_NOTICE,"+!",str); hangup(); @@ -115,7 +115,7 @@ bool sbbs_t::logon() putnodedat(cfg.node_num,&thisnode); /* must unlock! */ if(!SYSOP && !(useron.exempt&FLAG('N'))) { bputs(text[NodeLocked]); - sprintf(str,"(%04u) %-25s Locked node logon attempt" + safe_snprintf(str, sizeof(str), "(%04u) %-25s Locked node logon attempt" ,useron.number,useron.alias); logline(LOG_NOTICE,"+!",str); hangup(); @@ -198,9 +198,9 @@ bool sbbs_t::logon() last_ns_time=ns_time=useron.ns_time; // ns_time-=(useron.tlast*60); /* file newscan time == last logon time */ delfiles(cfg.temp_dir,ALLFILES); - sprintf(str,"%smsgs/n%3.3u.msg",cfg.data_dir,cfg.node_num); + safe_snprintf(str, sizeof(str), "%smsgs/n%3.3u.msg",cfg.data_dir,cfg.node_num); remove(str); /* remove any pending node messages */ - sprintf(str,"%smsgs/n%3.3u.ixb",cfg.data_dir,cfg.node_num); + safe_snprintf(str, sizeof(str), "%smsgs/n%3.3u.ixb",cfg.data_dir,cfg.node_num); remove(str); /* remove any pending node message indices */ if(!SYSOP && online==ON_REMOTE && !(sys_status&SS_QWKLOGON)) { @@ -223,7 +223,7 @@ bool sbbs_t::logon() useron.ltoday++; gettimeleft(); - sprintf(str,"%sfile/%04u.dwn",cfg.data_dir,useron.number); + safe_snprintf(str, sizeof(str), "%sfile/%04u.dwn",cfg.data_dir,useron.number); batch_add_list(str); if(!(sys_status&SS_QWKLOGON)) { /* QWK Nodes don't go through this */ @@ -266,7 +266,7 @@ bool sbbs_t::logon() } break; } - strcpy(useron.pass,str); + SAFECOPY(useron.pass,str); useron.pwmod=time32(NULL); putuserrec(&cfg,useron.number,U_PWMOD,8,ultoa((ulong)useron.pwmod,str,16)); bputs(text[PasswordChanged]); @@ -275,7 +275,7 @@ bool sbbs_t::logon() if(useron.ltoday>cfg.level_callsperday[useron.level] && !(useron.exempt&FLAG('L'))) { bputs(text[NoMoreLogons]); - sprintf(str,"(%04u) %-25s Out of logons" + safe_snprintf(str, sizeof(str), "(%04u) %-25s Out of logons" ,useron.number,useron.alias); logline(LOG_NOTICE,"+!",str); hangup(); @@ -283,7 +283,7 @@ bool sbbs_t::logon() } if(useron.rest&FLAG('L') && useron.ltoday>1) { bputs(text[R_Logons]); - sprintf(str,"(%04u) %-25s Out of logons" + safe_snprintf(str, sizeof(str), "(%04u) %-25s Out of logons" ,useron.number,useron.alias); logline(LOG_NOTICE,"+!",str); hangup(); @@ -317,7 +317,7 @@ bool sbbs_t::logon() break; } if(cfg.uq&UQ_HANDLE && !useron.handle[0]) { - sprintf(useron.handle,"%.*s",LEN_HANDLE,useron.alias); + SAFECOPY(useron.handle, useron.alias); while(online) { bputs(text[EnterYourHandle]); if(!getstr(useron.handle,LEN_HANDLE @@ -383,14 +383,14 @@ bool sbbs_t::logon() useron.misc&=~NETMAIL; } if(cfg.new_sif[0]) { - sprintf(str,"%suser/%4.4u.dat",cfg.data_dir,useron.number); + safe_snprintf(str, sizeof(str), "%suser/%4.4u.dat",cfg.data_dir,useron.number); if(flength(str)<1L) create_sif_dat(cfg.new_sif,str); } } } if(!online) { - sprintf(str,"(%04u) %-25s Unsuccessful logon" + safe_snprintf(str, sizeof(str), "(%04u) %-25s Unsuccessful logon" ,useron.number,useron.alias); logline(LOG_NOTICE,"+!",str); return(false); @@ -404,7 +404,7 @@ bool sbbs_t::logon() sys_status|=SS_USERON; /* moved from further down */ if(useron.rest&FLAG('Q')) { - sprintf(str,"(%04u) %-25s QWK Network Connection" + safe_snprintf(str, sizeof(str), "(%04u) %-25s QWK Network Connection" ,useron.number,useron.alias); logline("++",str); return(true); @@ -414,7 +414,7 @@ bool sbbs_t::logon() /* SUCCESSFUL LOGON */ /********************/ totallogons=logonstats(); - sprintf(str,"(%04u) %-25s %sLogon %lu - %u" + safe_snprintf(str, sizeof(str), "(%04u) %-25s %sLogon %lu - %u" ,useron.number,useron.alias, (sys_status&SS_FASTLOGON) ? "Fast-":"", totallogons,useron.ltoday); logline("++",str); @@ -422,14 +422,14 @@ bool sbbs_t::logon() exec_bin(cfg.logon_mod,&main_csi); if(thisnode.status!=NODE_QUIET && (!REALSYSOP || cfg.sys_misc&SM_SYSSTAT)) { - sprintf(str,"%slogon.lst",cfg.data_dir); + safe_snprintf(str, sizeof(str), "%slogon.lst",cfg.data_dir); if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) { errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_CREAT|O_APPEND); return(false); } getuserrec(&cfg,useron.number,U_IPADDR,LEN_IPADDR,useron.ipaddr); getuserrec(&cfg,useron.number,U_LOCATION,LEN_LOCATION,useron.location); - sprintf(str,text[LastFewCallersFmt],cfg.node_num + safe_snprintf(str, sizeof(str), text[LastFewCallersFmt],cfg.node_num ,totallogons,useron.alias ,cfg.sys_misc&SM_LISTLOC ? useron.location : useron.ipaddr ,tm.tm_hour,tm.tm_min @@ -458,12 +458,8 @@ bool sbbs_t::logon() bprintf(text[LiTimeonToday],useron.ttoday ,cfg.level_timeperday[useron.level]+useron.min); bprintf(text[LiMailWaiting],mailw); - strcpy(str,text[LiSysopIs]); - if(sysop_available(&cfg)) - strcat(str,text[LiSysopAvailable]); - else - strcat(str,text[LiSysopNotAvailable]); - bprintf("%s\r\n\r\n",str); + bprintf("%s%s\r\n\r\n", text[LiSysopIs] + , text[sysop_available(&cfg) ? LiSysopAvailable : LiSysopNotAvailable]); } if(sys_status&SS_EVENT) @@ -502,7 +498,7 @@ bool sbbs_t::logon() if(thisnode.status!=NODE_QUIET && (node.status==NODE_INUSE || node.status==NODE_QUIET) && !(node.misc&NODE_AOFF) && node.useron!=useron.number) { - sprintf(str,text[NodeLoggedOnAtNbps] + safe_snprintf(str, sizeof(str), text[NodeLoggedOnAtNbps] ,cfg.node_num ,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias ,connection); @@ -555,7 +551,7 @@ ulong sbbs_t::logonstats() sys_status&=~SS_DAILY; memset(&stats,0,sizeof(stats)); - sprintf(str,"%sdsts.dab",cfg.ctrl_dir); + safe_snprintf(str, sizeof(str), "%sdsts.dab",cfg.ctrl_dir); if((dsts=nopen(str,O_RDWR))==-1) { errormsg(WHERE,ERR_OPEN,str,O_RDWR); return(0L); @@ -575,11 +571,11 @@ ulong sbbs_t::logonstats() if((tm.tm_mday>update_tm.tm_mday && tm.tm_mon==update_tm.tm_mon) || tm.tm_mon>update_tm.tm_mon || tm.tm_year>update_tm.tm_year) { - sprintf(str,"New Day - Prev: %s ",timestr(update_t)); + safe_snprintf(str, sizeof(str), "New Day - Prev: %s ",timestr(update_t)); logentry("!=",str); sys_status|=SS_DAILY; /* New Day !!! */ - sprintf(str,"%slogon.lst",cfg.data_dir); /* Truncate logon list */ + safe_snprintf(str, sizeof(str), "%slogon.lst",cfg.data_dir); /* Truncate logon list */ if((dsts=nopen(str,O_TRUNC|O_CREAT|O_WRONLY))==-1) { errormsg(WHERE,ERR_OPEN,str,O_TRUNC|O_CREAT|O_WRONLY); return(0L); @@ -591,10 +587,10 @@ ulong sbbs_t::logonstats() node.misc|=NODE_EVENT; putnodedat(i,&node); } - sprintf(str,"%sdsts.dab",i ? cfg.node_path[i-1] : cfg.ctrl_dir); + safe_snprintf(str, sizeof(str), "%sdsts.dab",i ? cfg.node_path[i-1] : cfg.ctrl_dir); if((dsts=nopen(str,O_RDWR))==-1) /* node doesn't have stats yet */ continue; - sprintf(str,"%scsts.dab",i ? cfg.node_path[i-1] : cfg.ctrl_dir); + safe_snprintf(str, sizeof(str), "%scsts.dab",i ? cfg.node_path[i-1] : cfg.ctrl_dir); if((csts=nopen(str,O_WRONLY|O_APPEND|O_CREAT))==-1) { close(dsts); errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_APPEND|O_CREAT); @@ -652,7 +648,7 @@ ulong sbbs_t::logonstats() return(0); for(i=0;i<2;i++) { - sprintf(str,"%sdsts.dab",i ? cfg.ctrl_dir : cfg.node_dir); + safe_snprintf(str, sizeof(str), "%sdsts.dab",i ? cfg.ctrl_dir : cfg.node_dir); if((dsts=nopen(str,O_RDWR))==-1) { errormsg(WHERE,ERR_OPEN,str,O_RDWR); return(0L);