diff --git a/src/sbbs3/addfiles.c b/src/sbbs3/addfiles.c index 5b20a8dcf7b2fd4e6ee597fad6a8778333a07b73..0c956cb504b908412e6e079f77eff9a74d150ff8 100644 --- a/src/sbbs3/addfiles.c +++ b/src/sbbs3/addfiles.c @@ -732,7 +732,7 @@ int main(int argc, char **argv) fprintf(stderr,"!ERROR changing directory to: %s", scfg.ctrl_dir); printf("\nLoading configuration files from %s\n",scfg.ctrl_dir); - if(!load_cfg(&scfg,NULL,TRUE,error)) { + if(!load_cfg(&scfg,NULL,TRUE,error, sizeof(error))) { fprintf(stderr,"!ERROR loading configuration files: %s\n",error); exit(1); } diff --git a/src/sbbs3/ctrl/ConfigWizardUnit.cpp b/src/sbbs3/ctrl/ConfigWizardUnit.cpp index 32667eaecdf39e4e6f40ea852ffab419bab9823c..66b01669d234ef3ffd50da1ca751dabdb553322d 100644 --- a/src/sbbs3/ctrl/ConfigWizardUnit.cpp +++ b/src/sbbs3/ctrl/ConfigWizardUnit.cpp @@ -1,7 +1,5 @@ /* Synchronet Control Panel (GUI Borland C++ Builder Project for Win32) */ -/* $Id: ConfigWizardUnit.cpp,v 1.26 2018/11/06 01:49:51 rswindell Exp $ */ - /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * @@ -15,21 +13,9 @@ * See the GNU General Public License for more details: gpl.txt or * * http://www.fsf.org/copyleft/gpl.html * * * - * Anonymous FTP access to the most recent released source is available at * - * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * - * * - * Anonymous CVS access to the development source and modification history * - * is available at cvs.synchro.net:/cvsroot/sbbs, example: * - * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login * - * (just hit return, no password is necessary) * - * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src * - * * * For Synchronet coding style and modification guidelines, see * * http://www.synchro.net/source.html * * * - * You are encouraged to submit any modifications (preferably in Unix diff * - * format) via e-mail to mods@synchro.net * - * * * Note: If this box doesn't appear square, then you need to fix your tabs. * ****************************************************************************/ //--------------------------------------------------------------------------- @@ -145,7 +131,7 @@ void __fastcall TConfigWizard::FormShow(TObject *Sender) scfg.size=sizeof(scfg); char error[256]; SAFECOPY(error,UNKNOWN_LOAD_ERROR); - if(!load_cfg(&scfg,NULL,FALSE,error)) { + if(!load_cfg(&scfg,NULL,FALSE,error,sizeof(error))) { Application->MessageBox(error,"ERROR Loading Configuration" ,MB_OK|MB_ICONEXCLAMATION); Close(); diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp index 660684b7c68ea22bb61d0f84b1bd9620539815b1..39668a3869f85ab370665eec74c2de0eef6753c7 100644 --- a/src/sbbs3/ctrl/MainFormUnit.cpp +++ b/src/sbbs3/ctrl/MainFormUnit.cpp @@ -1950,7 +1950,7 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) SAFECOPY(error,UNKNOWN_LOAD_ERROR); StatusBar->Panels->Items[STATUSBAR_LAST_PANEL]->Text="Loading configuration..."; - if(!load_cfg(&cfg, NULL, TRUE, error)) { + if(!load_cfg(&cfg, NULL, TRUE, error, sizeof(error))) { Application->MessageBox(error,"ERROR Loading Configuration" ,MB_OK|MB_ICONEXCLAMATION); Application->Terminate(); @@ -3121,7 +3121,7 @@ void __fastcall TMainForm::reload_config(void) char error[256]; SAFECOPY(error,UNKNOWN_LOAD_ERROR); StatusBar->Panels->Items[STATUSBAR_LAST_PANEL]->Text="Reloading configuration..."; - if(!load_cfg(&cfg, NULL, TRUE, error)) { + if(!load_cfg(&cfg, NULL, TRUE, error, sizeof(error))) { Application->MessageBox(error,"ERROR Re-loading Configuration" ,MB_OK|MB_ICONEXCLAMATION); Application->Terminate(); diff --git a/src/sbbs3/delfiles.c b/src/sbbs3/delfiles.c index c38e8fad6d8bee4ae8d6d89da82f41d8a7c7e05b..8e7e051dca404b435078124a66c71f9240463c0d 100644 --- a/src/sbbs3/delfiles.c +++ b/src/sbbs3/delfiles.c @@ -113,7 +113,7 @@ int main(int argc, char **argv) SAFECOPY(cfg.ctrl_dir, p); backslash(cfg.ctrl_dir); - load_cfg(&cfg, NULL, TRUE, str); + load_cfg(&cfg, NULL, TRUE, str, sizeof(str)); chdir(cfg.ctrl_dir); dirnum=libnum=-1; diff --git a/src/sbbs3/dupefind.c b/src/sbbs3/dupefind.c index 554436aace2c734077e1164dfca38c1963396327..6e516db5fd22fdeaedbc8a3f76d4ec63153d6876 100644 --- a/src/sbbs3/dupefind.c +++ b/src/sbbs3/dupefind.c @@ -111,7 +111,7 @@ int main(int argc,char **argv) cfg.size=sizeof(cfg); SAFECOPY(cfg.ctrl_dir,p); - if(!load_cfg(&cfg,NULL,TRUE,str)) { + if(!load_cfg(&cfg,NULL,TRUE,str, sizeof(str))) { fprintf(stderr,"!ERROR loading configuration files: %s\n",str); return(1); } diff --git a/src/sbbs3/filelist.c b/src/sbbs3/filelist.c index ee1a762714b9ef832929b37c8d5046fa2e5b83f9..e3922471902757d85137414f9be2729e81e3bfd6 100644 --- a/src/sbbs3/filelist.c +++ b/src/sbbs3/filelist.c @@ -153,7 +153,7 @@ int main(int argc, char **argv) fprintf(stderr,"!ERROR changing directory to: %s", scfg.ctrl_dir); printf("\nLoading configuration files from %s\n",scfg.ctrl_dir); - if(!load_cfg(&scfg,NULL,TRUE,error)) { + if(!load_cfg(&scfg,NULL,TRUE,error, sizeof(error))) { fprintf(stderr,"!ERROR loading configuration files: %s\n",error); exit(1); } diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index ab67deb720199b344add3165053788d05e60729c..4558db1bc36f511e98b900e3eaad257674b65764 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -5175,7 +5175,7 @@ void DLLCALL ftp_server(void* arg) lprintf(LOG_INFO,"Loading configuration files from %s", scfg.ctrl_dir); scfg.size=sizeof(scfg); SAFECOPY(error,UNKNOWN_LOAD_ERROR); - if(!load_cfg(&scfg, text, TRUE, error)) { + if(!load_cfg(&scfg, text, TRUE, error, sizeof(error))) { lprintf(LOG_CRIT,"!ERROR %s",error); lprintf(LOG_CRIT,"!Failed to load configuration files"); cleanup(1,__LINE__); diff --git a/src/sbbs3/gtkchat/chatfuncs.c b/src/sbbs3/gtkchat/chatfuncs.c index cccaac1529978a6e68331d28a7b4b43d4d2fac47..ab016c0744ee4bce69f9e321baf9f4e392172823 100644 --- a/src/sbbs3/gtkchat/chatfuncs.c +++ b/src/sbbs3/gtkchat/chatfuncs.c @@ -53,7 +53,7 @@ int chat_open(int node_num, char *ctrl_dir) memset(&cfg,0,sizeof(cfg)); cfg.size=sizeof(cfg); SAFECOPY(cfg.ctrl_dir,ctrl_dir); - if(!load_cfg(&cfg, NULL, TRUE, str)) + if(!load_cfg(&cfg, NULL, TRUE, str, sizeof(str))) return(-1); nodenum=node_num; diff --git a/src/sbbs3/gtkmonitor/gtkmonitor.c b/src/sbbs3/gtkmonitor/gtkmonitor.c index 9453c9afa9c1880d4eceda1ce32871998feec7de..3d714899a361a087f9cb39fe229a0e319f29a6b8 100644 --- a/src/sbbs3/gtkmonitor/gtkmonitor.c +++ b/src/sbbs3/gtkmonitor/gtkmonitor.c @@ -76,7 +76,7 @@ void refresh_events(void) /* Read .cfg files here */ free_cfg(&cfg); - if(!load_cfg(&cfg, NULL, TRUE, str)) { + if(!load_cfg(&cfg, NULL, TRUE, str, sizeof(str))) { char error[256]; SAFEPRINTF(error, "ERROR Loading Configuration Files: %s", str); display_message("Load Error",error,"gtk-dialog-error"); diff --git a/src/sbbs3/gtkuseredit/gtkuseredit.c b/src/sbbs3/gtkuseredit/gtkuseredit.c index f3c3f1e5e730d294f7ec93c25cdb04c7b1e8f301..0aa7b7dd254079a923f7ff5e9d1c73850c7ca40b 100644 --- a/src/sbbs3/gtkuseredit/gtkuseredit.c +++ b/src/sbbs3/gtkuseredit/gtkuseredit.c @@ -90,7 +90,7 @@ int refresh_globals(void) } /* Read .cfg files here */ - if(!load_cfg(&cfg, NULL, TRUE, str)) { + if(!load_cfg(&cfg, NULL, TRUE, str, sizeof(str))) { fprintf(stderr,"Cannot load configuration data: %s\n", str); return(-1); } diff --git a/src/sbbs3/gtkuserlist/events.c b/src/sbbs3/gtkuserlist/events.c index 49a93cd8f26f3063284177423c1115adf016ba4c..c1f52b4fdc5cb72204025d4e2c4023146d89a3b3 100644 --- a/src/sbbs3/gtkuserlist/events.c +++ b/src/sbbs3/gtkuserlist/events.c @@ -125,7 +125,7 @@ G_MODULE_EXPORT void update_userlist_callback(GtkWidget *wiggy, gpointer data) char str[1024]; free_cfg(&cfg); - if(!load_cfg(&cfg, NULL, TRUE, str)) { + if(!load_cfg(&cfg, NULL, TRUE, str, sizeof(str))) { char error[256]; SAFEPRINTF(error, "ERROR Loading Configuration Data: %s", str); display_message("Load Error",error,"gtk-dialog-error"); diff --git a/src/sbbs3/gtkuserlist/gtkuserlist.c b/src/sbbs3/gtkuserlist/gtkuserlist.c index c40749ab35f042583d59c72ff0ab9324a88064ae..f99a8268bbc23cdbee01b1372efe7daeed3265a7 100644 --- a/src/sbbs3/gtkuserlist/gtkuserlist.c +++ b/src/sbbs3/gtkuserlist/gtkuserlist.c @@ -39,7 +39,7 @@ int main(int argc, char **argv) } cfg.size=sizeof(cfg); - if(!load_cfg(&cfg, NULL, TRUE, str)) { + if(!load_cfg(&cfg, NULL, TRUE, str, sizeof(str))) { fprintf(stderr,"Cannot load configuration data (%s)",str); return(-1); } diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c index afa5cd907b8637de6daf64be2ee05edb6d6ceeb5..63ab04784c931816ec50e164e137881e94e52f66 100644 --- a/src/sbbs3/js_internal.c +++ b/src/sbbs3/js_internal.c @@ -294,7 +294,7 @@ js_execfile(JSContext *cx, uintN argc, jsval *arglist) JSObject* pscope; JSObject* js_script=NULL; JSObject* nargv; - jsval rval; + jsval rval = JSVAL_VOID; jsrefcount rc; uintN i; jsval val; @@ -465,7 +465,9 @@ js_execfile(JSContext *cx, uintN argc, jsval *arglist) JS_GetPendingException(cx, &rval); } else { - JS_GetProperty(cx, js_scope, "exit_code", &rval); + jsval exit_code = JSVAL_VOID; + if(JS_GetProperty(cx, js_scope, "exit_code", &exit_code) && exit_code != JSVAL_VOID) + rval = exit_code; } JS_SET_RVAL(cx, arglist, rval); JS_ClearPendingException(cx); @@ -935,7 +937,7 @@ void DLLCALL js_PrepareToExecute(JSContext *cx, JSObject *obj, const char *filen JS_DefineProperty(cx, js, "scope", OBJECT_TO_JSVAL(scope) ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); } - JS_DefineProperty(cx, scope, "exit_code", JSVAL_NULL + JS_DefineProperty(cx, scope, "exit_code", JSVAL_VOID ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_PERMANENT); #if defined(_MSC_VER) _set_invalid_parameter_handler(msvc_invalid_parameter_handler); diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c index 7ae57cf6f12c0dc8209bfa8c04bf4b26df6b9fe5..6c42f16a12d5940e3edd8a3b7bdb99cdcd40bde6 100644 --- a/src/sbbs3/jsexec.c +++ b/src/sbbs3/jsexec.c @@ -1391,7 +1391,7 @@ int main(int argc, char **argv, char** env) fprintf(errfp,"!ERROR changing directory to: %s\n", scfg.ctrl_dir); fprintf(statfp,"\nLoading configuration files from %s\n",scfg.ctrl_dir); - if(!load_cfg(&scfg,text,TRUE,error)) { + if(!load_cfg(&scfg,text,TRUE,error, sizeof(error))) { fprintf(errfp,"!ERROR loading configuration files: %s\n",error); return(do_bail(1)); } diff --git a/src/sbbs3/load_cfg.c b/src/sbbs3/load_cfg.c index d9e10f09f10427ec8f01465a9d676a09d85294b3..147d66bbd403c7485ab6d24535903dc63238aa77 100644 --- a/src/sbbs3/load_cfg.c +++ b/src/sbbs3/load_cfg.c @@ -40,7 +40,7 @@ char * readtext(long *line, FILE *stream, long dflt); /****************************************************************************/ /* Initializes system and node configuration information and data variables */ /****************************************************************************/ -BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error) +BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error, size_t maxerrlen) { int i; #ifdef SBBS @@ -50,7 +50,7 @@ BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error) #endif if(cfg->size!=sizeof(scfg_t)) { - sprintf(error,"cfg->size (%"PRIu32") != sizeof(scfg_t) (%" XP_PRIsize_t "d)" + safe_snprintf(error, maxerrlen,"cfg->size (%"PRIu32") != sizeof(scfg_t) (%" XP_PRIsize_t "d)" ,cfg->size,sizeof(scfg_t)); return(FALSE); } @@ -64,7 +64,7 @@ BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error) cfg->node_num=1; backslash(cfg->ctrl_dir); - if(read_main_cfg(cfg, error)==FALSE) + if(read_main_cfg(cfg, error, maxerrlen)==FALSE) return(FALSE); if(prep) @@ -73,17 +73,17 @@ BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error) SAFECOPY(cfg->node_dir,cfg->node_path[cfg->node_num-1]); prep_dir(cfg->ctrl_dir, cfg->node_dir, sizeof(cfg->node_dir)); - if(read_node_cfg(cfg, error)==FALSE) + if(read_node_cfg(cfg, error, maxerrlen)==FALSE) return(FALSE); - if(read_msgs_cfg(cfg, error)==FALSE) + if(read_msgs_cfg(cfg, error, maxerrlen)==FALSE) return(FALSE); - if(read_file_cfg(cfg, error)==FALSE) + if(read_file_cfg(cfg, error, maxerrlen)==FALSE) return(FALSE); - if(read_xtrn_cfg(cfg, error)==FALSE) + if(read_xtrn_cfg(cfg, error, maxerrlen)==FALSE) return(FALSE); - if(read_chat_cfg(cfg, error)==FALSE) + if(read_chat_cfg(cfg, error, maxerrlen)==FALSE) return(FALSE); - if(read_attr_cfg(cfg, error)==FALSE) + if(read_attr_cfg(cfg, error, maxerrlen)==FALSE) return(FALSE); #ifdef SBBS @@ -94,7 +94,7 @@ BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error) SAFEPRINTF(str,"%stext.dat",cfg->ctrl_dir); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { - sprintf(error,"%d opening %s",errno,str); + safe_snprintf(error, maxerrlen,"%d opening %s",errno,str); return(FALSE); } for(i=0;i<TOTAL_TEXT;i++) @@ -105,7 +105,7 @@ BOOL DLLCALL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error) fclose(instream); if(i<TOTAL_TEXT) { - sprintf(error,"line %d: Less than TOTAL_TEXT (%u) strings defined in %s." + safe_snprintf(error, maxerrlen,"line %d: Less than TOTAL_TEXT (%u) strings defined in %s." ,i ,TOTAL_TEXT,str); return(FALSE); @@ -353,7 +353,7 @@ int md(const char* inpath) /****************************************************************************/ /* Reads in ATTR.CFG and initializes the associated variables */ /****************************************************************************/ -BOOL read_attr_cfg(scfg_t* cfg, char* error) +BOOL read_attr_cfg(scfg_t* cfg, char* error, size_t maxerrlen) { uint* clr; char str[256]; @@ -362,12 +362,12 @@ BOOL read_attr_cfg(scfg_t* cfg, char* error) SAFEPRINTF(str,"%sattr.cfg",cfg->ctrl_dir); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { - sprintf(error,"%d opening %s",errno,str); + safe_snprintf(error, maxerrlen,"%d opening %s",errno,str); return(FALSE); } FREE_AND_NULL(cfg->color); if((cfg->color=malloc(MIN_COLORS * sizeof(uint)))==NULL) { - sprintf(error,"Error allocating memory (%u bytes) for colors" + safe_snprintf(error, maxerrlen,"Error allocating memory (%u bytes) for colors" ,MIN_COLORS); fclose(instream); return(FALSE); diff --git a/src/sbbs3/load_cfg.h b/src/sbbs3/load_cfg.h index 7f36380c650ace0ca3f631ddb7da4603f03670fc..fc0e5c468326b50a1dac896197003044996b591c 100644 --- a/src/sbbs3/load_cfg.h +++ b/src/sbbs3/load_cfg.h @@ -29,7 +29,7 @@ extern "C" { #endif -DLLEXPORT BOOL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error); +DLLEXPORT BOOL load_cfg(scfg_t* cfg, char* text[], BOOL prep, char* error, size_t); DLLEXPORT void free_cfg(scfg_t* cfg); DLLEXPORT void free_text(char* text[]); DLLEXPORT ushort sys_timezone(scfg_t* cfg); @@ -40,4 +40,4 @@ DLLEXPORT int md(const char *path); #ifdef __cplusplus } #endif -#endif /* Don't add anything after this line */ \ No newline at end of file +#endif /* Don't add anything after this line */ diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 627932d9341164775370bd6bc2ab60dffbabe74c..00b9683cab38fe904cfb1b60aab93850256e097d 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -6145,7 +6145,7 @@ void DLLCALL mail_server(void* arg) lprintf(LOG_INFO,"Loading configuration files from %s", scfg.ctrl_dir); scfg.size=sizeof(scfg); SAFECOPY(error,UNKNOWN_LOAD_ERROR); - if(!load_cfg(&scfg, text, TRUE, error)) { + if(!load_cfg(&scfg, text, TRUE, error, sizeof(error))) { lprintf(LOG_CRIT,"!ERROR %s",error); lprintf(LOG_CRIT,"!Failed to load configuration files"); cleanup(1); diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index ae9bf8761c66ad890fb971bd34fd49cb7e49496b..81f25742c1465177ade4a95c10e46388e6f2713d 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -5131,7 +5131,7 @@ void DLLCALL bbs_thread(void* arg) scfg.size=sizeof(scfg); scfg.node_num=startup->first_node; SAFECOPY(logstr,UNKNOWN_LOAD_ERROR); - if(!load_cfg(&scfg, text, TRUE, logstr)) { + if(!load_cfg(&scfg, text, TRUE, logstr, sizeof(logstr))) { lprintf(LOG_CRIT,"!ERROR %s",logstr); lprintf(LOG_CRIT,"!FAILED to load configuration files"); cleanup(1); @@ -5744,10 +5744,10 @@ NO_SSH: SAFECOPY(cfg->ctrl_dir, startup->ctrl_dir); lprintf(LOG_INFO,"Node %d Loading configuration files from %s", cfg->node_num, cfg->ctrl_dir); SAFECOPY(logstr,UNKNOWN_LOAD_ERROR); - if(!load_cfg(cfg, node_text[i - 1], TRUE, logstr)) { + if(!load_cfg(cfg, node_text[i - 1], TRUE, logstr, sizeof(logstr))) { lprintf(LOG_WARNING, "Node %d LOAD ERROR: %s, falling back to Node %d", cfg->node_num, logstr, first_node); cfg->node_num = first_node; - if(!load_cfg(cfg, node_text[i - 1], TRUE, logstr)) { + if(!load_cfg(cfg, node_text[i - 1], TRUE, logstr, sizeof(logstr))) { lprintf(LOG_CRIT,"!ERROR %s",logstr); lprintf(LOG_CRIT,"!FAILED to load configuration files"); sbbs->bprintf("\r\nFAILED: %s", logstr); diff --git a/src/sbbs3/makeuser.c b/src/sbbs3/makeuser.c index 14274aaf288a3fc3537c34fc1b8c102a44de6ea8..a7f5943f6f064637bd51fd90a91045aa211b3aa2 100644 --- a/src/sbbs3/makeuser.c +++ b/src/sbbs3/makeuser.c @@ -103,7 +103,7 @@ int main(int argc, char **argv) fprintf(stderr,"!ERROR changing directory to: %s", scfg.ctrl_dir); printf("\nLoading configuration files from %s\n",scfg.ctrl_dir); - if(!load_cfg(&scfg,NULL,TRUE,error)) { + if(!load_cfg(&scfg,NULL,TRUE,error, sizeof(error))) { fprintf(stderr,"!ERROR loading configuration files: %s\n",error); exit(1); } diff --git a/src/sbbs3/msg_id.c b/src/sbbs3/msg_id.c index 6dc987f255c29ee227a9cb647f54a1d810de63d7..cfde9524672d0bb773c08062bb02b84db23c189a 100644 --- a/src/sbbs3/msg_id.c +++ b/src/sbbs3/msg_id.c @@ -167,8 +167,7 @@ BOOL DLLCALL add_msg_ids(scfg_t* cfg, smb_t* smb, smbmsg_t* msg, smbmsg_t* remsg if(msg->ftn_msgid == NULL) { if(smb->subnum == INVALID_SUB && msg->to_net.type == NET_FIDO) { safe_snprintf(msg_id, sizeof(msg_id) - ,"%lu@%s %08lx" - ,msg_number(msg) + ,"%s %08lx" ,smb_faddrtoa(&cfg->faddr[nearest_sysfaddr(cfg, msg->to_net.addr)], NULL) ,msgid_serialno(msg) ); diff --git a/src/sbbs3/qwknodes.c b/src/sbbs3/qwknodes.c index 1532403201e3112133d26f73e03cdd813f88f912..4ffd07055c84697227691f75a3f32a54e0effc9f 100644 --- a/src/sbbs3/qwknodes.c +++ b/src/sbbs3/qwknodes.c @@ -244,7 +244,7 @@ int main(int argc, char **argv) cfg.size=sizeof(cfg); SAFECOPY(cfg.ctrl_dir, get_ctrl_dir(/* warn: */TRUE)); - if(!load_cfg(&cfg, NULL, TRUE, str)) { + if(!load_cfg(&cfg, NULL, TRUE, str, sizeof(str))) { printf("\7\n%s\n",str); } diff --git a/src/sbbs3/sbbs_status.c b/src/sbbs3/sbbs_status.c index 80cf1caf20699950c1f98002799fae708f17acc7..c433d4b2775b32f4bd21f4d06756cda66d3d17dd 100644 --- a/src/sbbs3/sbbs_status.c +++ b/src/sbbs3/sbbs_status.c @@ -496,7 +496,7 @@ void status_thread(void *arg) lprintf(LOG_INFO,"Loading configuration files from %s", scfg.ctrl_dir); scfg.size=sizeof(scfg); SAFECOPY(error,UNKNOWN_LOAD_ERROR); - if(!load_cfg(&scfg, NULL, TRUE, error)) { + if(!load_cfg(&scfg, NULL, TRUE, error, sizeof(error))) { lprintf(LOG_CRIT,"!ERROR %s",error); lprintf(LOG_CRIT,"!Failed to load configuration files"); return; diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c index 4741e715a84c466a3654e1788a5e9657bf801950..ff7c3d2d966642b5736f1108deaaa78e49146f69 100644 --- a/src/sbbs3/sbbscon.c +++ b/src/sbbs3/sbbscon.c @@ -1914,7 +1914,7 @@ int main(int argc, char** argv) scfg.size=sizeof(scfg); SAFECOPY(error,UNKNOWN_LOAD_ERROR); lprintf(LOG_INFO,"Loading configuration files from %s", scfg.ctrl_dir); - if(!load_cfg(&scfg, NULL /* text.dat */, TRUE /* prep */, error)) { + if(!load_cfg(&scfg, NULL /* text.dat */, TRUE /* prep */, error, sizeof(error))) { lprintf(LOG_ERR,"!ERROR Loading Configuration Files: %s", error); return(-1); } diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c index 54ae34ef61ea21c363464ffa9b4b34ba2006944b..7a6c8327e8a8c73cd86b9d1423c0b3bb401b6e67 100644 --- a/src/sbbs3/sbbsecho.c +++ b/src/sbbs3/sbbsecho.c @@ -6259,7 +6259,7 @@ int main(int argc, char **argv) printf("\nLoading configuration files from %s\n", scfg.ctrl_dir); scfg.size=sizeof(scfg); SAFECOPY(str,UNKNOWN_LOAD_ERROR); - if(!load_cfg(&scfg, NULL, true, str)) { + if(!load_cfg(&scfg, NULL, true, str, sizeof(str))) { fprintf(stderr,"!ERROR %s\n",str); fprintf(stderr,"!Failed to load configuration files\n"); bail(1); diff --git a/src/sbbs3/scfg/scfg.c b/src/sbbs3/scfg/scfg.c index 54f7f126d73501a3a6f7dd7aacceb4302bf142a1..768b030b797c221f470ea4e627dfe4c7e2ff2335 100644 --- a/src/sbbs3/scfg/scfg.c +++ b/src/sbbs3/scfg/scfg.c @@ -348,13 +348,13 @@ int main(int argc, char **argv) } printf("Reading main.cnf ... "); - if(!read_main_cfg(&cfg,error)) { + if(!read_main_cfg(&cfg,error,sizeof(error))) { printf("ERROR: %s",error); return EXIT_FAILURE; } printf("\n"); printf("Reading msgs.cnf ... "); - if(!read_msgs_cfg(&cfg,error)) { + if(!read_msgs_cfg(&cfg,error,sizeof(error))) { printf("ERROR: %s",error); return EXIT_FAILURE; } @@ -434,7 +434,7 @@ int main(int argc, char **argv) SAFEPRINTF(str,"%smain.cnf",cfg.ctrl_dir); if(!fexist(str)) { - sprintf(errormsg,"Main configuration file (%s) missing!",str); + SAFEPRINTF(errormsg, "Main configuration file (%s) missing!",str); uifc.msg(errormsg); } @@ -475,8 +475,8 @@ int main(int argc, char **argv) switch(uifc.list(WIN_ORG|WIN_MID|WIN_ESC|WIN_ACT,0,0,30,&main_dflt,0 ,"Configure",mopt)) { case 0: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } @@ -484,13 +484,13 @@ int main(int argc, char **argv) free_main_cfg(&cfg); break; case 1: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } - if(!load_xtrn_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_xtrn_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } @@ -499,13 +499,13 @@ int main(int argc, char **argv) free_main_cfg(&cfg); break; case 2: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } - if(!load_msgs_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_msgs_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } @@ -514,13 +514,13 @@ int main(int argc, char **argv) free_main_cfg(&cfg); break; case 3: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } - if(!load_file_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_file_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } @@ -529,13 +529,13 @@ int main(int argc, char **argv) free_main_cfg(&cfg); break; case 4: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } - if(!load_file_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_file_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } @@ -544,8 +544,8 @@ int main(int argc, char **argv) free_main_cfg(&cfg); break; case 5: - if(!load_chat_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_chat_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg,"ERROR: %s",error); uifc.msg(errormsg); break; } @@ -590,13 +590,13 @@ int main(int argc, char **argv) free_chat_cfg(&cfg); break; case 6: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg, "ERROR: %s",error); uifc.msg(errormsg); break; } - if(!load_msgs_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_msgs_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg, "ERROR: %s",error); uifc.msg(errormsg); break; } @@ -605,13 +605,13 @@ int main(int argc, char **argv) free_main_cfg(&cfg); break; case 7: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg, "ERROR: %s",error); uifc.msg(errormsg); break; } - if(!load_msgs_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_msgs_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg, "ERROR: %s",error); uifc.msg(errormsg); break; } @@ -620,8 +620,8 @@ int main(int argc, char **argv) free_main_cfg(&cfg); break; case 8: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg, "ERROR: %s",error); uifc.msg(errormsg); break; } @@ -629,13 +629,13 @@ int main(int argc, char **argv) free_main_cfg(&cfg); break; case 9: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg, "ERROR: %s",error); uifc.msg(errormsg); break; } - if(!load_xtrn_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_xtrn_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg, "ERROR: %s",error); uifc.msg(errormsg); break; } @@ -644,13 +644,13 @@ int main(int argc, char **argv) free_main_cfg(&cfg); break; case 10: - if(!load_main_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_main_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg, "ERROR: %s",error); uifc.msg(errormsg); break; } - if(!load_file_cfg(&cfg,error)) { - sprintf(errormsg,"ERROR: %s",error); + if(!load_file_cfg(&cfg, error, sizeof(error))) { + SAFEPRINTF(errormsg, "ERROR: %s",error); uifc.msg(errormsg); break; } @@ -677,50 +677,50 @@ int main(int argc, char **argv) } } -BOOL load_main_cfg(scfg_t* cfg, char *error) +BOOL load_main_cfg(scfg_t* cfg, char *error, size_t maxerrlen) { uifc.pop("Reading main.cnf ..."); - BOOL result = read_main_cfg(cfg, error); + BOOL result = read_main_cfg(cfg, error, maxerrlen); uifc.pop(NULL); return result; } -BOOL load_node_cfg(scfg_t* cfg, char *error) +BOOL load_node_cfg(scfg_t* cfg, char *error, size_t maxerrlen) { uifc.pop("Reading node.cnf ..."); - BOOL result = read_node_cfg(cfg, error); + BOOL result = read_node_cfg(cfg, error, maxerrlen); uifc.pop(NULL); return result; } -BOOL load_msgs_cfg(scfg_t* cfg, char *error) +BOOL load_msgs_cfg(scfg_t* cfg, char *error, size_t maxerrlen) { uifc.pop("Reading msgs.cnf ..."); - BOOL result = read_msgs_cfg(cfg, error); + BOOL result = read_msgs_cfg(cfg, error, maxerrlen); uifc.pop(NULL); return result; } -BOOL load_file_cfg(scfg_t* cfg, char *error) +BOOL load_file_cfg(scfg_t* cfg, char *error, size_t maxerrlen) { uifc.pop("Reading file.cnf ..."); - BOOL result = read_file_cfg(cfg, error); + BOOL result = read_file_cfg(cfg, error, maxerrlen); uifc.pop(NULL); return result; } -BOOL load_chat_cfg(scfg_t* cfg, char *error) +BOOL load_chat_cfg(scfg_t* cfg, char *error, size_t maxerrlen) { uifc.pop("Reading chat.cnf ..."); - BOOL result = read_chat_cfg(cfg, error); + BOOL result = read_chat_cfg(cfg, error, maxerrlen); uifc.pop(NULL); return result; } -BOOL load_xtrn_cfg(scfg_t* cfg, char *error) +BOOL load_xtrn_cfg(scfg_t* cfg, char *error, size_t maxerrlen) { uifc.pop("Reading xtrn.cnf ..."); - BOOL result = read_xtrn_cfg(cfg, error); + BOOL result = read_xtrn_cfg(cfg, error, maxerrlen); uifc.pop(NULL); return result; } @@ -2193,11 +2193,11 @@ void bail(int code) getchar(); } else if(forcesave) { - load_main_cfg(&cfg,error); - load_msgs_cfg(&cfg,error); - load_file_cfg(&cfg,error); - load_chat_cfg(&cfg,error); - load_xtrn_cfg(&cfg,error); + load_main_cfg(&cfg, error, sizeof(error)); + load_msgs_cfg(&cfg, error, sizeof(error)); + load_file_cfg(&cfg, error, sizeof(error)); + load_chat_cfg(&cfg, error, sizeof(error)); + load_xtrn_cfg(&cfg, error, sizeof(error)); cfg.new_install=new_install; save_main_cfg(&cfg,backup_level); save_msgs_cfg(&cfg,backup_level); diff --git a/src/sbbs3/scfg/scfg.h b/src/sbbs3/scfg/scfg.h index f050dc05420e4baf46f24f42443abc4fca09d031..f2e04f2b10954bcc58ca252689fff836f1bb745d 100644 --- a/src/sbbs3/scfg/scfg.h +++ b/src/sbbs3/scfg/scfg.h @@ -153,12 +153,12 @@ void sort_subs(int grpnum); void sort_dirs(int libnum); unsigned subs_in_group(unsigned grpnum); char random_code_char(void); -BOOL load_main_cfg(scfg_t*, char*); -BOOL load_node_cfg(scfg_t*, char*); -BOOL load_msgs_cfg(scfg_t*, char*); -BOOL load_file_cfg(scfg_t*, char*); -BOOL load_chat_cfg(scfg_t*, char*); -BOOL load_xtrn_cfg(scfg_t*, char*); +BOOL load_main_cfg(scfg_t*, char*, size_t); +BOOL load_node_cfg(scfg_t*, char*, size_t); +BOOL load_msgs_cfg(scfg_t*, char*, size_t); +BOOL load_file_cfg(scfg_t*, char*, size_t); +BOOL load_chat_cfg(scfg_t*, char*, size_t); +BOOL load_xtrn_cfg(scfg_t*, char*, size_t); BOOL save_main_cfg(scfg_t*, int); BOOL save_node_cfg(scfg_t*, int); BOOL save_msgs_cfg(scfg_t*, int); diff --git a/src/sbbs3/scfg/scfgnode.c b/src/sbbs3/scfg/scfgnode.c index d4fe0fd22a2ef6c3805d27f5854da01ee04e1125..3903fbabb677a4d1d1f65e48937bf48055d3cec5 100644 --- a/src/sbbs3/scfg/scfgnode.c +++ b/src/sbbs3/scfg/scfgnode.c @@ -100,7 +100,7 @@ void node_menu() if(msk == MSK_INS) { SAFECOPY(cfg.node_dir,cfg.node_path[cfg.sys_nodes-1]); i=cfg.sys_nodes+1; - load_node_cfg(&cfg,error); + load_node_cfg(&cfg,error, sizeof(error)); if(i == 1) { SAFEPRINTF(str,"../node%d/",i); } else { @@ -135,7 +135,7 @@ void node_menu() free_node_cfg(&cfg); i&=MSK_OFF; SAFECOPY(cfg.node_dir,cfg.node_path[i]); - load_node_cfg(&cfg,error); + load_node_cfg(&cfg,error, sizeof(error)); savnode=1; continue; } @@ -155,7 +155,7 @@ void node_menu() SAFECOPY(cfg.node_dir,cfg.node_path[i]); prep_dir(cfg.ctrl_dir, cfg.node_dir, sizeof(cfg.node_dir)); - load_node_cfg(&cfg,error); + load_node_cfg(&cfg,error, sizeof(error)); if (cfg.node_num != i + 1) { /* Node number isn't right? */ cfg.node_num = i + 1; /* so fix it */ save_node_cfg(&cfg, backup_level); /* and write it back */ diff --git a/src/sbbs3/scfglib.h b/src/sbbs3/scfglib.h index 34dac1d7f154733790dc4932ae9ea909db96c7d9..3353552d37264571cf8a84bd8ee7c139ed997b63 100644 --- a/src/sbbs3/scfglib.h +++ b/src/sbbs3/scfglib.h @@ -1,7 +1,5 @@ /* Synchronet configuration library routine prototypes */ -/* $Id: scfglib.h,v 1.25 2020/05/14 07:50:00 rswindell Exp $ */ - /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * @@ -15,21 +13,9 @@ * See the GNU General Public License for more details: gpl.txt or * * http://www.fsf.org/copyleft/gpl.html * * * - * Anonymous FTP access to the most recent released source is available at * - * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * - * * - * Anonymous CVS access to the development source and modification history * - * is available at cvs.synchro.net:/cvsroot/sbbs, example: * - * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login * - * (just hit return, no password is necessary) * - * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src * - * * * For Synchronet coding style and modification guidelines, see * * http://www.synchro.net/source.html * * * - * You are encouraged to submit any modifications (preferably in Unix diff * - * format) via e-mail to mods@synchro.net * - * * * Note: If this box doesn't appear square, then you need to fix your tabs. * ****************************************************************************/ @@ -51,16 +37,16 @@ extern "C" { #endif char* get_alloc(long *offset, char *outstr, int maxlen, FILE *instream); -BOOL allocerr(FILE*, char* error, long offset, char *fname, uint size); +BOOL allocerr(FILE*, char* error, size_t maxerrlen, long offset, const char *fname, size_t size); char* readline(long *offset, char *str, int maxlen, FILE *stream); -BOOL read_node_cfg(scfg_t* cfg, char* error); -BOOL read_main_cfg(scfg_t* cfg, char* error); -BOOL read_xtrn_cfg(scfg_t* cfg, char* error); -BOOL read_file_cfg(scfg_t* cfg, char* error); -BOOL read_msgs_cfg(scfg_t* cfg, char* error); -BOOL read_chat_cfg(scfg_t* cfg, char* error); -BOOL read_attr_cfg(scfg_t* cfg, char* error); +BOOL read_node_cfg(scfg_t* cfg, char* error, size_t); +BOOL read_main_cfg(scfg_t* cfg, char* error, size_t); +BOOL read_xtrn_cfg(scfg_t* cfg, char* error, size_t); +BOOL read_file_cfg(scfg_t* cfg, char* error, size_t); +BOOL read_msgs_cfg(scfg_t* cfg, char* error, size_t); +BOOL read_chat_cfg(scfg_t* cfg, char* error, size_t); +BOOL read_attr_cfg(scfg_t* cfg, char* error, size_t); char* prep_path(char* path); void make_data_dirs(scfg_t* cfg); diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c index 6fc8fbdc76cbd988bbc1e4fa1a56cbfcc934b4aa..966dbf90871b044b62a4f6cf17b6b8853d760bff 100644 --- a/src/sbbs3/scfglib1.c +++ b/src/sbbs3/scfglib1.c @@ -24,10 +24,10 @@ #include "nopen.h" #include "ars_defs.h" -BOOL allocerr(FILE* fp, char* error, long offset, char *fname, uint size) +BOOL allocerr(FILE* fp, char* error, size_t maxerrlen, long offset, const char *fname, size_t size) { - sprintf(error,"offset %ld in %s, allocating %u bytes of memory" - ,offset,fname,size); + safe_snprintf(error, maxerrlen, "offset %ld in %s, allocating %u bytes of memory" + ,offset,fname, (uint)size); fclose(fp); return(FALSE); } @@ -35,23 +35,23 @@ BOOL allocerr(FILE* fp, char* error, long offset, char *fname, uint size) /****************************************************************************/ /* Reads in NODE.CNF and initializes the associated variables */ /****************************************************************************/ -BOOL read_node_cfg(scfg_t* cfg, char* error) +BOOL read_node_cfg(scfg_t* cfg, char* error, size_t maxerrlen) { - char c,str[MAX_PATH+1],fname[13]; + char c,str[MAX_PATH+1]; int i; long offset=0; FILE *instream; - SAFECOPY(fname,"node.cnf"); - sprintf(str,"%s%s",cfg->node_dir,fname); + const char* fname = "node.cnf"; + SAFEPRINTF2(str,"%s%s",cfg->node_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { - sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); + safe_snprintf(error, maxerrlen, "%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } get_int(cfg->node_num,instream); if(!cfg->node_num) { - sprintf(error,"offset %ld in %s, Node number must be non-zero" + safe_snprintf(error, maxerrlen,"offset %ld in %s, Node number must be non-zero" ,offset,fname); fclose(instream); return(FALSE); @@ -115,18 +115,18 @@ BOOL read_node_cfg(scfg_t* cfg, char* error) /****************************************************************************/ /* Reads in MAIN.CNF and initializes the associated variables */ /****************************************************************************/ -BOOL read_main_cfg(scfg_t* cfg, char* error) +BOOL read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen) { - char str[MAX_PATH+1],fname[13],c; + char str[MAX_PATH+1],c; short i,j; int16_t n; long offset=0; FILE *instream; - SAFECOPY(fname,"main.cnf"); + const char* fname = "main.cnf"; SAFEPRINTF2(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { - sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); + safe_snprintf(error, maxerrlen,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } @@ -142,11 +142,11 @@ BOOL read_main_cfg(scfg_t* cfg, char* error) #if 0 /* removed Jan-10-2003: cfg->node_num may be old or uninitialized */ if(!cfg->sys_nodes || cfg->sys_nodes<cfg->node_num || cfg->sys_nodes>MAX_NODES) { if(!cfg->sys_nodes) - sprintf(error,"Total nodes on system must be non-zero."); + safe_snprintf(error, maxerrlen,"Total nodes on system must be non-zero."); else if(cfg->sys_nodes>MAX_NODES) - sprintf(error,"Total nodes exceeds %u.",MAX_NODES); + safe_snprintf(error, maxerrlen,"Total nodes exceeds %u.",MAX_NODES); else - sprintf(error,"Total nodes (%u) < node number in NODE.CNF (%u)" + safe_snprintf(error, maxerrlen,"Total nodes (%u) < node number in NODE.CNF (%u)" ,cfg->sys_nodes,cfg->node_num); fclose(instream); return(FALSE); @@ -334,7 +334,7 @@ BOOL read_main_cfg(scfg_t* cfg, char* error) get_int(n,instream); } if(i!=100) { - sprintf(error,"Insufficient User Level Information: " + safe_snprintf(error, maxerrlen,"Insufficient User Level Information: " "%d user levels read, 100 needed.",i); fclose(instream); return(FALSE); @@ -343,7 +343,7 @@ BOOL read_main_cfg(scfg_t* cfg, char* error) get_int(cfg->total_shells,instream); #ifdef SBBS if(!cfg->total_shells) { - sprintf(error,"At least one command shell must be configured."); + safe_snprintf(error, maxerrlen,"At least one command shell must be configured."); fclose(instream); return(FALSE); } @@ -351,14 +351,14 @@ BOOL read_main_cfg(scfg_t* cfg, char* error) if(cfg->total_shells) { if((cfg->shell=(shell_t **)malloc(sizeof(shell_t *)*cfg->total_shells))==NULL) - return allocerr(instream,error,offset,fname,sizeof(shell_t *)*cfg->total_shells); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(shell_t *)*cfg->total_shells); } else cfg->shell=NULL; for(i=0;i<cfg->total_shells;i++) { if(feof(instream)) break; if((cfg->shell[i]=(shell_t *)malloc(sizeof(shell_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(shell_t)); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(shell_t)); memset(cfg->shell[i],0,sizeof(shell_t)); get_str(cfg->shell[i]->name,instream); @@ -381,18 +381,18 @@ BOOL read_main_cfg(scfg_t* cfg, char* error) /****************************************************************************/ /* Reads in MSGS.CNF and initializes the associated variables */ /****************************************************************************/ -BOOL read_msgs_cfg(scfg_t* cfg, char* error) +BOOL read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen) { - char str[MAX_PATH+1],fname[13],c; + char str[MAX_PATH+1],c; short i,j; int16_t n,k; long offset=0; FILE *instream; - SAFECOPY(fname,"msgs.cnf"); - sprintf(str,"%s%s",cfg->ctrl_dir,fname); + const char* fname = "msgs.cnf"; + SAFEPRINTF2(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { - sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); + safe_snprintf(error, maxerrlen,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } @@ -425,7 +425,7 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error) if(cfg->total_grps) { if((cfg->grp=(grp_t **)malloc(sizeof(grp_t *)*cfg->total_grps))==NULL) - return allocerr(instream,error,offset,fname,sizeof(grp_t *)*cfg->total_grps); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(grp_t *)*cfg->total_grps); } else cfg->grp=NULL; @@ -433,7 +433,7 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error) if(feof(instream)) break; if((cfg->grp[i]=(grp_t *)malloc(sizeof(grp_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(grp_t)); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(grp_t)); memset(cfg->grp[i],0,sizeof(grp_t)); get_str(cfg->grp[i]->lname,instream); @@ -459,14 +459,14 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error) if(cfg->total_subs) { if((cfg->sub=(sub_t **)malloc(sizeof(sub_t *)*cfg->total_subs))==NULL) - return allocerr(instream,error,offset,fname,sizeof(sub_t *)*cfg->total_subs); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(sub_t *)*cfg->total_subs); } else cfg->sub=NULL; for(i=0;i<cfg->total_subs;i++) { if(feof(instream)) break; if((cfg->sub[i]=(sub_t *)malloc(sizeof(sub_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(sub_t)); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(sub_t)); memset(cfg->sub[i],0,sizeof(sub_t)); cfg->sub[i]->subnum = i; @@ -480,7 +480,7 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error) #ifdef SBBS if(cfg->sub[i]->grp >= cfg->total_grps) { - sprintf(error,"offset %ld in %s: invalid group number (%u) for sub-board: %s" + safe_snprintf(error, maxerrlen,"offset %ld in %s: invalid group number (%u) for sub-board: %s" ,offset,fname ,cfg->sub[i]->grp ,cfg->sub[i]->code_suffix); @@ -522,7 +522,7 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error) #ifdef SBBS for(j=0;j<i;j++) if(cfg->sub[i]->ptridx==cfg->sub[j]->ptridx) { - sprintf(error,"offset %ld in %s: Duplicate pointer index for subs %s and %s" + safe_snprintf(error, maxerrlen,"offset %ld in %s: Duplicate pointer index for subs %s and %s" ,offset,fname ,cfg->sub[i]->code_suffix,cfg->sub[j]->code_suffix); fclose(instream); @@ -550,7 +550,7 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error) if(cfg->total_faddrs) { if((cfg->faddr=(faddr_t *)malloc(sizeof(faddr_t)*cfg->total_faddrs))==NULL) - return allocerr(instream,error,offset,fname,sizeof(faddr_t)*cfg->total_faddrs); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(faddr_t)*cfg->total_faddrs); } else cfg->faddr=NULL; @@ -579,14 +579,14 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error) if(cfg->total_qhubs) { if((cfg->qhub=(qhub_t **)malloc(sizeof(qhub_t *)*cfg->total_qhubs))==NULL) - return allocerr(instream,error,offset,fname,sizeof(qhub_t*)*cfg->total_qhubs); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(qhub_t*)*cfg->total_qhubs); } else cfg->qhub=NULL; for(i=0;i<cfg->total_qhubs;i++) { if(feof(instream)) break; if((cfg->qhub[i]=(qhub_t *)malloc(sizeof(qhub_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(qhub_t)); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(qhub_t)); memset(cfg->qhub[i],0,sizeof(qhub_t)); get_str(cfg->qhub[i]->id,instream); @@ -601,11 +601,11 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error) if(k) { if((cfg->qhub[i]->sub=(sub_t**)malloc(sizeof(sub_t*)*k))==NULL) - return allocerr(instream,error,offset,fname,sizeof(ulong)*k); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(ulong)*k); if((cfg->qhub[i]->conf=(ushort *)malloc(sizeof(ushort)*k))==NULL) - return allocerr(instream,error,offset,fname,sizeof(ushort)*k); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(ushort)*k); if((cfg->qhub[i]->mode=(char *)malloc(sizeof(char)*k))==NULL) - return allocerr(instream,error,offset,fname,sizeof(uchar)*k); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(uchar)*k); } for(j=0;j<k;j++) { @@ -645,14 +645,14 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error) if(cfg->total_phubs) { if((cfg->phub=(phub_t **)malloc(sizeof(phub_t *)*cfg->total_phubs))==NULL) - return allocerr(instream,error,offset,fname,sizeof(phub_t*)*cfg->total_phubs); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(phub_t*)*cfg->total_phubs); } else cfg->phub=NULL; for(i=0;i<cfg->total_phubs;i++) { if(feof(instream)) break; if((cfg->phub[i]=(phub_t *)malloc(sizeof(phub_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(phub_t)); + return allocerr(instream, error, maxerrlen, offset,fname,sizeof(phub_t)); memset(cfg->phub[i],0,sizeof(phub_t)); get_str(cfg->phub[i]->name,instream); diff --git a/src/sbbs3/scfglib2.c b/src/sbbs3/scfglib2.c index f714bc7cd1d768bc8fc073928bde81385a5b1d39..adb5387dadc5f904729b8789c37edb2d684f7f4c 100644 --- a/src/sbbs3/scfglib2.c +++ b/src/sbbs3/scfglib2.c @@ -26,19 +26,19 @@ /****************************************************************************/ /* Reads in FILE.CNF and initializes the associated variables */ /****************************************************************************/ -BOOL read_file_cfg(scfg_t* cfg, char* error) +BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) { - char str[MAX_PATH+1],fname[13],c,cmd[LEN_CMD+1]; + char str[MAX_PATH+1],c,cmd[LEN_CMD+1]; short i,j; int16_t n; long offset=0; int32_t t; FILE *instream; - strcpy(fname,"file.cnf"); - sprintf(str,"%s%s",cfg->ctrl_dir,fname); + const char* fname = "file.cnf"; + SAFEPRINTF2(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { - sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); + safe_snprintf(error, maxerrlen,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } @@ -69,7 +69,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->total_fextrs) { if((cfg->fextr=(fextr_t **)malloc(sizeof(fextr_t *)*cfg->total_fextrs))==NULL) - return allocerr(instream,error,offset,fname,sizeof(fextr_t*)*cfg->total_fextrs); + return allocerr(instream, error, maxerrlen, offset, fname, sizeof(fextr_t*)*cfg->total_fextrs); } else cfg->fextr=NULL; @@ -77,7 +77,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(feof(instream)) break; if((cfg->fextr[i]=(fextr_t *)malloc(sizeof(fextr_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(fextr_t)); + return allocerr(instream, error, maxerrlen, offset, fname, sizeof(fextr_t)); memset(cfg->fextr[i],0,sizeof(fextr_t)); get_str(cfg->fextr[i]->ext,instream); get_str(cfg->fextr[i]->cmd,instream); @@ -97,7 +97,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->total_fcomps) { if((cfg->fcomp=(fcomp_t **)malloc(sizeof(fcomp_t *)*cfg->total_fcomps))==NULL) - return allocerr(instream,error,offset,fname,sizeof(fcomp_t*)*cfg->total_fcomps); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(fcomp_t*)*cfg->total_fcomps); } else cfg->fcomp=NULL; @@ -105,7 +105,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(feof(instream)) break; if((cfg->fcomp[i]=(fcomp_t *)malloc(sizeof(fcomp_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(fcomp_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(fcomp_t)); memset(cfg->fcomp[i],0,sizeof(fcomp_t)); get_str(cfg->fcomp[i]->ext,instream); get_str(cfg->fcomp[i]->cmd,instream); @@ -125,14 +125,14 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->total_fviews) { if((cfg->fview=(fview_t **)malloc(sizeof(fview_t *)*cfg->total_fviews))==NULL) - return allocerr(instream,error,offset,fname,sizeof(fview_t*)*cfg->total_fviews); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(fview_t*)*cfg->total_fviews); } else cfg->fview=NULL; for(i=0; i<cfg->total_fviews; i++) { if(feof(instream)) break; if((cfg->fview[i]=(fview_t *)malloc(sizeof(fview_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(fview_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(fview_t)); memset(cfg->fview[i],0,sizeof(fview_t)); get_str(cfg->fview[i]->ext,instream); get_str(cfg->fview[i]->cmd,instream); @@ -152,14 +152,14 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->total_ftests) { if((cfg->ftest=(ftest_t **)malloc(sizeof(ftest_t *)*cfg->total_ftests))==NULL) - return allocerr(instream,error,offset,fname,sizeof(ftest_t*)*cfg->total_ftests); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(ftest_t*)*cfg->total_ftests); } else cfg->ftest=NULL; for(i=0; i<cfg->total_ftests; i++) { if(feof(instream)) break; if((cfg->ftest[i]=(ftest_t *)malloc(sizeof(ftest_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(ftest_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(ftest_t)); memset(cfg->ftest[i],0,sizeof(ftest_t)); get_str(cfg->ftest[i]->ext,instream); get_str(cfg->ftest[i]->cmd,instream); @@ -181,14 +181,14 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->total_dlevents) { if((cfg->dlevent=(dlevent_t **)malloc(sizeof(dlevent_t *)*cfg->total_dlevents)) ==NULL) - return allocerr(instream,error,offset,fname,sizeof(dlevent_t*)*cfg->total_dlevents); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(dlevent_t*)*cfg->total_dlevents); } else cfg->dlevent=NULL; for(i=0; i<cfg->total_dlevents; i++) { if(feof(instream)) break; if((cfg->dlevent[i]=(dlevent_t *)malloc(sizeof(dlevent_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(dlevent_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(dlevent_t)); memset(cfg->dlevent[i],0,sizeof(dlevent_t)); get_str(cfg->dlevent[i]->ext,instream); get_str(cfg->dlevent[i]->cmd,instream); @@ -210,14 +210,14 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->total_prots) { if((cfg->prot=(prot_t **)malloc(sizeof(prot_t *)*cfg->total_prots))==NULL) - return allocerr(instream,error,offset,fname,sizeof(prot_t*)*cfg->total_prots); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(prot_t*)*cfg->total_prots); } else cfg->prot=NULL; for(i=0;i<cfg->total_prots;i++) { if(feof(instream)) break; if((cfg->prot[i]=(prot_t *)malloc(sizeof(prot_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(prot_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(prot_t)); memset(cfg->prot[i],0,sizeof(prot_t)); get_int(cfg->prot[i]->mnemonic,instream); @@ -245,7 +245,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->altpaths) { if((cfg->altpath=(char **)malloc(sizeof(char *)*cfg->altpaths))==NULL) - return allocerr(instream,error,offset,fname,sizeof(char *)*cfg->altpaths); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(char *)*cfg->altpaths); } else cfg->altpath=NULL; @@ -257,7 +257,7 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) backslash(str); j=LEN_DIR+1; if((cfg->altpath[i]=(char *)malloc(j))==NULL) - return allocerr(instream,error,offset,fname,j); + return allocerr(instream, error, maxerrlen,offset,fname,j); memset(cfg->altpath[i],0,j); strcpy(cfg->altpath[i],str); for(j=0;j<8;j++) @@ -274,14 +274,14 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->total_libs) { if((cfg->lib=(lib_t **)malloc(sizeof(lib_t *)*cfg->total_libs))==NULL) - return allocerr(instream,error,offset,fname,sizeof(lib_t *)*cfg->total_libs); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(lib_t *)*cfg->total_libs); } else cfg->lib=NULL; for(i=0;i<cfg->total_libs;i++) { if(feof(instream)) break; if((cfg->lib[i]=(lib_t *)malloc(sizeof(lib_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(lib_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(lib_t)); memset(cfg->lib[i],0,sizeof(lib_t)); cfg->lib[i]->offline_dir=INVALID_DIR; @@ -317,14 +317,14 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->total_dirs) { if((cfg->dir=(dir_t **)malloc(sizeof(dir_t *)*(cfg->total_dirs+1)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(dir_t *)*(cfg->total_dirs+1)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(dir_t *)*(cfg->total_dirs+1)); } else cfg->dir=NULL; for(i=0;i<cfg->total_dirs;i++) { if(feof(instream)) break; if((cfg->dir[i]=(dir_t *)malloc(sizeof(dir_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(dir_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(dir_t)); memset(cfg->dir[i],0,sizeof(dir_t)); cfg->dir[i]->dirnum = i; @@ -389,14 +389,14 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) if(cfg->total_txtsecs) { if((cfg->txtsec=(txtsec_t **)malloc(sizeof(txtsec_t *)*cfg->total_txtsecs))==NULL) - return allocerr(instream,error,offset,fname,sizeof(txtsec_t *)*cfg->total_txtsecs); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(txtsec_t *)*cfg->total_txtsecs); } else cfg->txtsec=NULL; for(i=0;i<cfg->total_txtsecs;i++) { if(feof(instream)) break; if((cfg->txtsec[i]=(txtsec_t *)malloc(sizeof(txtsec_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(txtsec_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(txtsec_t)); memset(cfg->txtsec[i],0,sizeof(txtsec_t)); get_str(cfg->txtsec[i]->name,instream); @@ -416,18 +416,18 @@ BOOL read_file_cfg(scfg_t* cfg, char* error) /****************************************************************************/ /* Reads in XTRN.CNF and initializes the associated variables */ /****************************************************************************/ -BOOL read_xtrn_cfg(scfg_t* cfg, char* error) +BOOL read_xtrn_cfg(scfg_t* cfg, char* error, size_t maxerrlen) { - char str[MAX_PATH+1],fname[13],c; + char str[MAX_PATH+1],c; short i,j; int16_t n; long offset=0; FILE *instream; - strcpy(fname,"xtrn.cnf"); - sprintf(str,"%s%s",cfg->ctrl_dir,fname); + const char* fname = "xtrn.cnf"; + SAFEPRINTF2(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { - sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); + safe_snprintf(error, maxerrlen,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } @@ -439,14 +439,14 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error) if(cfg->total_swaps) { if((cfg->swap=(swap_t **)malloc(sizeof(swap_t *)*cfg->total_swaps))==NULL) - return allocerr(instream,error,offset,fname,sizeof(swap_t *)*cfg->total_swaps); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(swap_t *)*cfg->total_swaps); } else cfg->swap=NULL; for(i=0;i<cfg->total_swaps;i++) { if(feof(instream)) break; if((cfg->swap[i]=(swap_t *)malloc(sizeof(swap_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(swap_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(swap_t)); get_str(cfg->swap[i]->cmd,instream); } cfg->total_swaps=i; @@ -459,14 +459,14 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error) if(cfg->total_xedits) { if((cfg->xedit=(xedit_t **)malloc(sizeof(xedit_t *)*cfg->total_xedits))==NULL) - return allocerr(instream,error,offset,fname,sizeof(xedit_t *)*cfg->total_xedits); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(xedit_t *)*cfg->total_xedits); } else cfg->xedit=NULL; for(i=0;i<cfg->total_xedits;i++) { if(feof(instream)) break; if((cfg->xedit[i]=(xedit_t *)malloc(sizeof(xedit_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(xedit_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(xedit_t)); memset(cfg->xedit[i],0,sizeof(xedit_t)); get_str(cfg->xedit[i]->name,instream); @@ -499,14 +499,14 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error) if(cfg->total_xtrnsecs) { if((cfg->xtrnsec=(xtrnsec_t **)malloc(sizeof(xtrnsec_t *)*cfg->total_xtrnsecs)) ==NULL) - return allocerr(instream,error,offset,fname,sizeof(xtrnsec_t *)*cfg->total_xtrnsecs); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(xtrnsec_t *)*cfg->total_xtrnsecs); } else cfg->xtrnsec=NULL; for(i=0;i<cfg->total_xtrnsecs;i++) { if(feof(instream)) break; if((cfg->xtrnsec[i]=(xtrnsec_t *)malloc(sizeof(xtrnsec_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(xtrnsec_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(xtrnsec_t)); memset(cfg->xtrnsec[i],0,sizeof(xtrnsec_t)); get_str(cfg->xtrnsec[i]->name,instream); @@ -528,14 +528,14 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error) if(cfg->total_xtrns) { if((cfg->xtrn=(xtrn_t **)malloc(sizeof(xtrn_t *)*cfg->total_xtrns))==NULL) - return allocerr(instream,error,offset,fname,sizeof(xtrn_t *)*cfg->total_xtrns); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(xtrn_t *)*cfg->total_xtrns); } else cfg->xtrn=NULL; for(i=0;i<cfg->total_xtrns;i++) { if(feof(instream)) break; if((cfg->xtrn[i]=(xtrn_t *)malloc(sizeof(xtrn_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(xtrn_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(xtrn_t)); memset(cfg->xtrn[i],0,sizeof(xtrn_t)); get_int(cfg->xtrn[i]->sec,instream); @@ -569,14 +569,14 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error) if(cfg->total_events) { if((cfg->event=(event_t **)malloc(sizeof(event_t *)*cfg->total_events))==NULL) - return allocerr(instream,error,offset,fname,sizeof(event_t *)*cfg->total_events); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(event_t *)*cfg->total_events); } else cfg->event=NULL; for(i=0;i<cfg->total_events;i++) { if(feof(instream)) break; if((cfg->event[i]=(event_t *)malloc(sizeof(event_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(event_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(event_t)); memset(cfg->event[i],0,sizeof(event_t)); get_str(cfg->event[i]->code,instream); @@ -610,14 +610,14 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error) if(cfg->total_natvpgms) { if((cfg->natvpgm=(natvpgm_t **)malloc(sizeof(natvpgm_t *)*cfg->total_natvpgms))==NULL) - return allocerr(instream,error,offset,fname,sizeof(natvpgm_t *)*cfg->total_natvpgms); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(natvpgm_t *)*cfg->total_natvpgms); } else cfg->natvpgm=NULL; for(i=0;i<cfg->total_natvpgms;i++) { if(feof(instream)) break; if((cfg->natvpgm[i]=(natvpgm_t *)malloc(sizeof(natvpgm_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(natvpgm_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(natvpgm_t)); get_str(cfg->natvpgm[i]->name,instream); cfg->natvpgm[i]->misc=0; } @@ -635,14 +635,14 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error) if(cfg->total_hotkeys) { if((cfg->hotkey=(hotkey_t **)malloc(sizeof(hotkey_t *)*cfg->total_hotkeys))==NULL) - return allocerr(instream,error,offset,fname,sizeof(hotkey_t *)*cfg->total_hotkeys); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(hotkey_t *)*cfg->total_hotkeys); } else cfg->hotkey=NULL; for(i=0;i<cfg->total_hotkeys;i++) { if(feof(instream)) break; if((cfg->hotkey[i]=(hotkey_t *)malloc(sizeof(hotkey_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(hotkey_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(hotkey_t)); memset(cfg->hotkey[i],0,sizeof(hotkey_t)); get_int(cfg->hotkey[i]->key,instream); @@ -665,18 +665,18 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error) /****************************************************************************/ /* Reads in CHAT.CNF and initializes the associated variables */ /****************************************************************************/ -BOOL read_chat_cfg(scfg_t* cfg, char* error) +BOOL read_chat_cfg(scfg_t* cfg, char* error, size_t maxerrlen) { - char str[MAX_PATH+1],fname[13]; + char str[MAX_PATH+1]; short i,j; int16_t n; long offset=0; FILE *instream; - strcpy(fname,"chat.cnf"); - sprintf(str,"%s%s",cfg->ctrl_dir,fname); + const char* fname = "chat.cnf"; + SAFEPRINTF2(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { - sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); + safe_snprintf(error, maxerrlen,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } @@ -688,14 +688,14 @@ BOOL read_chat_cfg(scfg_t* cfg, char* error) if(cfg->total_gurus) { if((cfg->guru=(guru_t **)malloc(sizeof(guru_t *)*cfg->total_gurus))==NULL) - return allocerr(instream,error,offset,fname,sizeof(guru_t *)*cfg->total_gurus); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(guru_t *)*cfg->total_gurus); } else cfg->guru=NULL; for(i=0;i<cfg->total_gurus;i++) { if(feof(instream)) break; if((cfg->guru[i]=(guru_t *)malloc(sizeof(guru_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(guru_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(guru_t)); memset(cfg->guru[i],0,sizeof(guru_t)); get_str(cfg->guru[i]->name,instream); @@ -718,14 +718,14 @@ BOOL read_chat_cfg(scfg_t* cfg, char* error) if(cfg->total_actsets) { if((cfg->actset=(actset_t **)malloc(sizeof(actset_t *)*cfg->total_actsets))==NULL) - return allocerr(instream,error,offset,fname,sizeof(actset_t *)*cfg->total_actsets); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(actset_t *)*cfg->total_actsets); } else cfg->actset=NULL; for(i=0;i<cfg->total_actsets;i++) { if(feof(instream)) break; if((cfg->actset[i]=(actset_t *)malloc(sizeof(actset_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(actset_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(actset_t)); get_str(cfg->actset[i]->name,instream); } cfg->total_actsets=i; @@ -740,14 +740,14 @@ BOOL read_chat_cfg(scfg_t* cfg, char* error) if(cfg->total_chatacts) { if((cfg->chatact=(chatact_t **)malloc(sizeof(chatact_t *)*cfg->total_chatacts)) ==NULL) - return allocerr(instream,error,offset,fname,sizeof(chatact_t *)*cfg->total_chatacts); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(chatact_t *)*cfg->total_chatacts); } else cfg->chatact=NULL; for(i=0;i<cfg->total_chatacts;i++) { if(feof(instream)) break; if((cfg->chatact[i]=(chatact_t *)malloc(sizeof(chatact_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(chatact_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(chatact_t)); memset(cfg->chatact[i],0,sizeof(chatact_t)); get_int(cfg->chatact[i]->actset,instream); @@ -768,14 +768,14 @@ BOOL read_chat_cfg(scfg_t* cfg, char* error) if(cfg->total_chans) { if((cfg->chan=(chan_t **)malloc(sizeof(chan_t *)*cfg->total_chans))==NULL) - return allocerr(instream,error,offset,fname,sizeof(chan_t *)*cfg->total_chans); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(chan_t *)*cfg->total_chans); } else cfg->chan=NULL; for(i=0;i<cfg->total_chans;i++) { if(feof(instream)) break; if((cfg->chan[i]=(chan_t *)malloc(sizeof(chan_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(chan_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(chan_t)); memset(cfg->chan[i],0,sizeof(chan_t)); get_int(cfg->chan[i]->actset,instream); @@ -803,14 +803,14 @@ BOOL read_chat_cfg(scfg_t* cfg, char* error) if(cfg->total_pages) { if((cfg->page=(page_t **)malloc(sizeof(page_t *)*cfg->total_pages))==NULL) - return allocerr(instream,error,offset,fname,sizeof(page_t *)*cfg->total_pages); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(page_t *)*cfg->total_pages); } else cfg->page=NULL; for(i=0;i<cfg->total_pages;i++) { if(feof(instream)) break; if((cfg->page[i]=(page_t *)malloc(sizeof(page_t)))==NULL) - return allocerr(instream,error,offset,fname,sizeof(page_t)); + return allocerr(instream, error, maxerrlen,offset,fname,sizeof(page_t)); memset(cfg->page[i],0,sizeof(page_t)); get_str(cfg->page[i]->cmd,instream); diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 8f99438eb9c8af4c5ca6317735d03f011908bfd4..af6a86fccbf846620083a379103e33992769784c 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -1805,7 +1805,7 @@ void DLLCALL services_thread(void* arg) lprintf(LOG_INFO,"Loading configuration files from %s", scfg.ctrl_dir); scfg.size=sizeof(scfg); SAFECOPY(error,UNKNOWN_LOAD_ERROR); - if(!load_cfg(&scfg, text, TRUE, error)) { + if(!load_cfg(&scfg, text, TRUE, error, sizeof(error))) { lprintf(LOG_CRIT,"!ERROR %s",error); lprintf(LOG_CRIT,"!Failed to load configuration files"); cleanup(1); diff --git a/src/sbbs3/smbactiv.c b/src/sbbs3/smbactiv.c index 055fc32d2cc13c02a4965db4268c0bf8c8b7139a..8954266f4b70ca18e6eae183f492a1c153f657ef 100644 --- a/src/sbbs3/smbactiv.c +++ b/src/sbbs3/smbactiv.c @@ -109,7 +109,7 @@ int main(int argc, char **argv) cfg.size=sizeof(cfg); SAFECOPY(cfg.ctrl_dir,p); - if(!load_cfg(&cfg,NULL,TRUE,str)) { + if(!load_cfg(&cfg,NULL,TRUE,str, sizeof(str))) { fprintf(stderr,"!ERROR loading configuration files: %s\n",str); return(1); } diff --git a/src/sbbs3/uedit/uedit.c b/src/sbbs3/uedit/uedit.c index 6cf2fa35422d6c3efe35c202588414d1d6dfe13d..e7b4c8eadcae988950e34f0f96ba15de7601e245 100644 --- a/src/sbbs3/uedit/uedit.c +++ b/src/sbbs3/uedit/uedit.c @@ -1945,7 +1945,7 @@ int main(int argc, char** argv) { memset(&cfg,0,sizeof(cfg)); cfg.size=sizeof(cfg); SAFECOPY(cfg.ctrl_dir,bbs_startup.ctrl_dir); - if(!load_cfg(&cfg, NULL, TRUE, str)) { + if(!load_cfg(&cfg, NULL, TRUE, str, sizeof(str))) { printf("ERROR! %s\n",str); exit(1); } diff --git a/src/sbbs3/umonitor/umonitor.c b/src/sbbs3/umonitor/umonitor.c index 917e31b88d6d6925d30474b062aac2da646094ff..190f4d66e243a0c077dce872a552a59e5fd670e6 100644 --- a/src/sbbs3/umonitor/umonitor.c +++ b/src/sbbs3/umonitor/umonitor.c @@ -892,7 +892,7 @@ int main(int argc, char** argv) { memset(&cfg,0,sizeof(cfg)); cfg.size=sizeof(cfg); SAFECOPY(cfg.ctrl_dir,bbs_startup.ctrl_dir); - if(!load_cfg(&cfg, NULL, TRUE, str)) { + if(!load_cfg(&cfg, NULL, TRUE, str, sizeof(str))) { printf("ERROR! %s\n",str); exit(1); } diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index f34f9879d9d1eb5b0d589d54b387032d3eceb53e..200f070763962730d4e09ff8f115a003984abbaa 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -7005,7 +7005,7 @@ void DLLCALL web_server(void* arg) lprintf(LOG_INFO,"Loading configuration files from %s", scfg.ctrl_dir); scfg.size=sizeof(scfg); SAFECOPY(logstr,UNKNOWN_LOAD_ERROR); - if(!load_cfg(&scfg, text, TRUE, logstr)) { + if(!load_cfg(&scfg, text, TRUE, logstr, sizeof(logstr))) { lprintf(LOG_CRIT,"!ERROR %s",logstr); lprintf(LOG_CRIT,"!FAILED to load configuration files"); cleanup(1); diff --git a/src/xpdev/genwrap.h b/src/xpdev/genwrap.h index 787514c0c1af9a2c42fb50917e98f2562df9857d..1b643f7d075c211f4f2efc5f9e55fc8449fd18c7 100644 --- a/src/xpdev/genwrap.h +++ b/src/xpdev/genwrap.h @@ -272,11 +272,7 @@ DLLEXPORT char* DLLCALL truncsp_lines(char* str); /* Truncate new-line chars off end of string */ DLLEXPORT char* DLLCALL truncnl(char* str); -#if defined(__unix__) - #define STRERROR(x) strerror(x) -#else - #define STRERROR(x) truncsp(strerror(x)) -#endif +#define STRERROR(x) strerror(x) /* Re-entrant version of strerror() */ DLLEXPORT char* DLLCALL safe_strerror(int errnum, char* buf, size_t buflen);