diff --git a/src/sbbs3/exec.cpp b/src/sbbs3/exec.cpp index b3437f1b8dbe0c67bec4d3514fefc883805da307..73ea614a84e24d591c4797accdcd0a7d7d48c9f1 100644 --- a/src/sbbs3/exec.cpp +++ b/src/sbbs3/exec.cpp @@ -1,4 +1,5 @@ /* exec.cpp */ +// vi: tabstop=4 /* Synchronet command shell/module interpretter */ diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index 371ac82f9c0ad9b67ca0eb1c2b8d0f2643aa244b..1e395c4dde35fdf850070bbb24a92b942c3fa0cb 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -2839,7 +2839,7 @@ void event_thread(void* arg) sbbs->putnodedat(i,&node); if(sbbs->cfg.node_daily[0]) { sbbs->cfg.node_num=i; - strcpy(sbbs->cfg.node_dir, sbbs->cfg.node_path[i-1]); + SAFECOPY(sbbs->cfg.node_dir, sbbs->cfg.node_path[i-1]); sbbs->lprintf(LOG_INFO,"Running node %d daily event",i); sbbs->online=ON_LOCAL; @@ -2861,14 +2861,14 @@ void event_thread(void* arg) /* QWK Networking Call-out semaphores */ for(i=0;i<sbbs->cfg.total_qhubs;i++) { - if(sbbs->cfg.qhub[i]->node<first_node - || sbbs->cfg.qhub[i]->node>last_node) + if(sbbs->cfg.qhub[i]->node != NODE_ANY + && (sbbs->cfg.qhub[i]->node<first_node || sbbs->cfg.qhub[i]->node>last_node)) continue; if(sbbs->cfg.qhub[i]->last==-1) // already signaled continue; SAFEPRINTF2(str,"%sqnet/%s.now",sbbs->cfg.data_dir,sbbs->cfg.qhub[i]->id); if(fexistcase(str)) { - strcpy(str,sbbs->cfg.qhub[i]->id); + SAFECOPY(str,sbbs->cfg.qhub[i]->id); eprintf(LOG_INFO,"Semaphore signaled for QWK Network Hub: %s",strupr(str)); sbbs->cfg.qhub[i]->last=-1; } @@ -2876,8 +2876,8 @@ void event_thread(void* arg) /* Timed Event semaphores */ for(i=0;i<sbbs->cfg.total_events;i++) { - if((sbbs->cfg.event[i]->node<first_node - || sbbs->cfg.event[i]->node>last_node) + if(sbbs->cfg.event[i]->node != NODE_ANY + && (sbbs->cfg.event[i]->node<first_node || sbbs->cfg.event[i]->node>last_node) && !(sbbs->cfg.event[i]->misc&EVENT_EXCL)) continue; // ignore non-exclusive events for other instances if(sbbs->cfg.event[i]->misc&EVENT_DISABLED) @@ -2886,7 +2886,7 @@ void event_thread(void* arg) continue; SAFEPRINTF2(str,"%s%s.now",sbbs->cfg.data_dir,sbbs->cfg.event[i]->code); if(fexistcase(str)) { - strcpy(str,sbbs->cfg.event[i]->code); + SAFECOPY(str,sbbs->cfg.event[i]->code); eprintf(LOG_INFO,"Semaphore signaled for Timed Event: %s",strupr(str)); sbbs->cfg.event[i]->last=-1; } @@ -2896,8 +2896,8 @@ void event_thread(void* arg) /* QWK Networking Call-out Events */ sbbs->event_code = "QNET"; for(i=0;i<sbbs->cfg.total_qhubs && !sbbs->terminated;i++) { - if(sbbs->cfg.qhub[i]->node<first_node || - sbbs->cfg.qhub[i]->node>last_node) + if(sbbs->cfg.qhub[i]->node != NODE_ANY + && (sbbs->cfg.qhub[i]->node<first_node || sbbs->cfg.qhub[i]->node>last_node)) continue; if(check_semaphores) { @@ -2992,10 +2992,13 @@ void event_thread(void* arg) close(file); if(sbbs->cfg.qhub[i]->call[0]) { - sbbs->cfg.node_num=sbbs->cfg.qhub[i]->node; + if(sbbs->cfg.qhub[i]->node == NODE_ANY) + sbbs->cfg.node_num = startup->first_node; + else + sbbs->cfg.node_num=sbbs->cfg.qhub[i]->node; if(sbbs->cfg.node_num<1) sbbs->cfg.node_num=1; - strcpy(sbbs->cfg.node_dir, sbbs->cfg.node_path[sbbs->cfg.node_num-1]); + SAFECOPY(sbbs->cfg.node_dir, sbbs->cfg.node_path[sbbs->cfg.node_num-1]); eprintf(LOG_INFO,"QWK Network call-out: %s",sbbs->cfg.qhub[i]->id); sbbs->online=ON_LOCAL; sbbs->console|=CON_L_ECHO; @@ -3013,8 +3016,8 @@ void event_thread(void* arg) /* PostLink Networking Call-out Events */ sbbs->event_code = "PostLink"; for(i=0;i<sbbs->cfg.total_phubs && !sbbs->terminated;i++) { - if(sbbs->cfg.phub[i]->node<first_node - || sbbs->cfg.phub[i]->node>last_node) + if(sbbs->cfg.phub[i]->node != NODE_ANY + && (sbbs->cfg.phub[i]->node<first_node || sbbs->cfg.phub[i]->node>last_node)) continue; /* PostLink call out based on time */ tmptime=sbbs->cfg.phub[i]->last; @@ -3039,10 +3042,13 @@ void event_thread(void* arg) close(file); if(sbbs->cfg.phub[i]->call[0]) { - sbbs->cfg.node_num=sbbs->cfg.phub[i]->node; + if(sbbs->cfg.phub[i]->node == NODE_ANY) + sbbs->cfg.node_num = startup->first_node; + else + sbbs->cfg.node_num=sbbs->cfg.phub[i]->node; if(sbbs->cfg.node_num<1) sbbs->cfg.node_num=1; - strcpy(sbbs->cfg.node_dir, sbbs->cfg.node_path[sbbs->cfg.node_num-1]); + SAFECOPY(sbbs->cfg.node_dir, sbbs->cfg.node_path[sbbs->cfg.node_num-1]); eprintf(LOG_INFO,"PostLink Network call-out: %s",sbbs->cfg.phub[i]->name); sbbs->online=ON_LOCAL; sbbs->console|=CON_L_ECHO; @@ -3057,15 +3063,15 @@ void event_thread(void* arg) /* Timed Events */ for(i=0;i<sbbs->cfg.total_events && !sbbs->terminated;i++) { - if(!sbbs->cfg.event[i]->node - || sbbs->cfg.event[i]->node>sbbs->cfg.sys_nodes) + if(sbbs->cfg.event[i]->node != NODE_ANY + && (!sbbs->cfg.event[i]->node || sbbs->cfg.event[i]->node>sbbs->cfg.sys_nodes)) continue; // ignore events for invalid nodes if(sbbs->cfg.event[i]->misc&EVENT_DISABLED) continue; - if((sbbs->cfg.event[i]->node<first_node - || sbbs->cfg.event[i]->node>last_node) + if(sbbs->cfg.event[i]->node != NODE_ANY + && (sbbs->cfg.event[i]->node<first_node || sbbs->cfg.event[i]->node>last_node) && !(sbbs->cfg.event[i]->misc&EVENT_EXCL)) continue; // ignore non-exclusive events for other instances @@ -3088,7 +3094,7 @@ void event_thread(void* arg) && (sbbs->cfg.event[i]->months==0 || sbbs->cfg.event[i]->months&(1<<now_tm.tm_mon)))) { - if(sbbs->cfg.event[i]->misc&EVENT_EXCL) { /* exclusive event */ + if(sbbs->cfg.event[i]->node != NODE_ANY && (sbbs->cfg.event[i]->misc&EVENT_EXCL)) { /* exclusive event */ if(sbbs->cfg.event[i]->node<first_node || sbbs->cfg.event[i]->node>last_node) { @@ -3191,8 +3197,8 @@ void event_thread(void* arg) continue; } #endif - if(sbbs->cfg.event[i]->node<first_node - || sbbs->cfg.event[i]->node>last_node) { + if(sbbs->cfg.event[i]->node != NODE_ANY + && (sbbs->cfg.event[i]->node<first_node || sbbs->cfg.event[i]->node>last_node)) { sbbs->lprintf(LOG_NOTICE,"Changing node status for nodes %d through %d to WFC" ,first_node,last_node); sbbs->cfg.event[i]->last=(time32_t)now; @@ -3205,17 +3211,20 @@ void event_thread(void* arg) } } else { - sbbs->cfg.node_num=sbbs->cfg.event[i]->node; + if(sbbs->cfg.event[i]->node == NODE_ANY) + sbbs->cfg.node_num = startup->first_node; + else + sbbs->cfg.node_num=sbbs->cfg.event[i]->node; if(sbbs->cfg.node_num<1) sbbs->cfg.node_num=1; - strcpy(sbbs->cfg.node_dir, sbbs->cfg.node_path[sbbs->cfg.node_num-1]); + SAFECOPY(sbbs->cfg.node_dir, sbbs->cfg.node_path[sbbs->cfg.node_num-1]); SAFEPRINTF2(str,"%s%s.now",sbbs->cfg.data_dir,sbbs->cfg.event[i]->code); if(fexistcase(str)) { if(remove(str)) sbbs->errormsg(WHERE, ERR_REMOVE, str, 0); } - if(sbbs->cfg.event[i]->misc&EVENT_EXCL) { + if(sbbs->cfg.event[i]->node != NODE_ANY && (sbbs->cfg.event[i]->misc&EVENT_EXCL)) { sbbs->getnodedat(sbbs->cfg.event[i]->node,&node,1); node.status=NODE_EVENT_RUNNING; sbbs->putnodedat(sbbs->cfg.event[i]->node,&node); @@ -3304,7 +3313,7 @@ sbbs_t::sbbs_t(ushort node_num, union xp_sockaddr *addr, size_t addr_len, const cfg.node_num = node_num; // Restore the node_num passed to the constructor if(node_num>0) { - strcpy(cfg.node_dir, cfg.node_path[node_num-1]); + SAFECOPY(cfg.node_dir, cfg.node_path[node_num-1]); prep_dir(cfg.node_dir, cfg.temp_dir, sizeof(cfg.temp_dir)); SAFEPRINTF2(syspage_semfile, "%ssyspage.%u", cfg.ctrl_dir, node_num); remove(syspage_semfile); diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 4b1d595095e482a3fadbde366756c43e9ad6e869..d8f766fce1c11f5a953dcfc3b6c16f6e5a7bf3ee 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -385,6 +385,8 @@ typedef enum { /* Values for xtrn_t.event */ #define EVENT_INIT (1<<2) /* Always run event after init */ #define EVENT_DISABLED (1<<3) /* Disabled */ +#define NODE_ANY 0 /* special qhub/event_t.node value */ + /* Bits in xtrn_t.misc */ #define MULTIUSER (1<<0) /* allow multi simultaneous users */ #define XTRN_ANSI (1<<1) /* LEGACY (not used) */ diff --git a/src/sbbs3/scfg/scfgnet.c b/src/sbbs3/scfg/scfgnet.c index 12ce53243a3b0edd5fefb50ed8825c74239b3d48..2ad2ada3d9eab06d1db79a6cb2b7ae1b8e81750a 100644 --- a/src/sbbs3/scfg/scfgnet.c +++ b/src/sbbs3/scfg/scfgnet.c @@ -1,4 +1,5 @@ /* $Id$ */ +// vi: tabstop=4 /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * @@ -253,7 +254,7 @@ void net_cfg() SAFECOPY(cfg.qhub[i]->pack,"%@zip -jD %f %s"); SAFECOPY(cfg.qhub[i]->unpack,"%@unzip -Coj %f %s -d %g"); SAFECOPY(cfg.qhub[i]->call,"*qnet-ftp %s hub.address YOURPASS"); - cfg.qhub[i]->node=1; + cfg.qhub[i]->node = NODE_ANY; cfg.qhub[i]->days=(uchar)0xff; /* all days */ uifc.changes=1; continue; @@ -805,7 +806,11 @@ void qhub_edit(int num) sprintf(opt[i++],"%-27.27s%.40s","Pack Command Line",cfg.qhub[num]->pack); sprintf(opt[i++],"%-27.27s%.40s","Unpack Command Line",cfg.qhub[num]->unpack); sprintf(opt[i++],"%-27.27s%.40s","Call-out Command Line",cfg.qhub[num]->call); - sprintf(opt[i++],"%-27.27s%u","Call-out Node",cfg.qhub[num]->node); + if(cfg.qhub[num]->node == NODE_ANY) + SAFECOPY(str, "Any"); + else + SAFEPRINTF(str, "%u", cfg.qhub[num]->node); + sprintf(opt[i++],"%-27.27s%s","Call-out Node", str); sprintf(opt[i++],"%-27.27s%s","Call-out Days",daystr(cfg.qhub[num]->days)); if(cfg.qhub[num]->freq) { sprintf(str,"%u times a day",1440/cfg.qhub[num]->freq); @@ -915,16 +920,23 @@ void qhub_edit(int num) ,cfg.qhub[num]->call,sizeof(cfg.qhub[num]->call)-1,K_EDIT); break; case 4: - sprintf(str,"%u",cfg.qhub[num]->node); + if(cfg.qhub[num]->node == NODE_ANY) + SAFECOPY(str, "Any"); + else + SAFEPRINTF(str, "%u", cfg.qhub[num]->node); uifc.helpbuf= "`Node to Perform Call-out:`\n" "\n" "This is the number of the node to perform the call-out for this QWK\n" "network hub.\n" ; - uifc.input(WIN_MID|WIN_SAV,0,0 - ,"Node to Perform Call-out",str,3,K_EDIT|K_NUMBER); - cfg.qhub[num]->node=atoi(str); + if(uifc.input(WIN_MID|WIN_SAV,0,0 + ,"Node to Perform Call-out",str,3,K_EDIT) > 0) { + if(isdigit(*str)) + cfg.qhub[num]->node=atoi(str); + else + cfg.qhub[num]->node = NODE_ANY; + } break; case 5: j=0; diff --git a/src/sbbs3/scfg/scfgxtrn.c b/src/sbbs3/scfg/scfgxtrn.c index 5ecd89555aa2b17e96992429c094a16436715cd2..43cb565671a107773124fdeadffc38e5ed0e5747 100644 --- a/src/sbbs3/scfg/scfgxtrn.c +++ b/src/sbbs3/scfg/scfgxtrn.c @@ -1,4 +1,5 @@ /* $Id$ */ +// vi: tabstop=4 /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * @@ -49,7 +50,7 @@ static bool new_timed_event(unsigned new_event_num) return false; } memset(new_event, 0, sizeof(*new_event)); - new_event->node = 1; + new_event->node = NODE_ANY; new_event->days = (uchar)0xff; event_t** new_event_list = realloc(cfg.event, sizeof(event_t *)*(cfg.total_events + 1)); @@ -483,7 +484,11 @@ void tevents_cfg() sprintf(opt[k++],"%-32.32s%.40s","Command Line",cfg.event[i]->cmd); sprintf(opt[k++],"%-32.32s%s","Enabled" ,cfg.event[i]->misc&EVENT_DISABLED ? "No":"Yes"); - sprintf(opt[k++],"%-32.32s%u","Execution Node",cfg.event[i]->node); + if(cfg.event[i]->node == NODE_ANY) + SAFECOPY(str, "Any"); + else + SAFEPRINTF(str, "%u", cfg.event[i]->node); + sprintf(opt[k++],"%-32.32s%s","Execution Node", str); sprintf(opt[k++],"%-32.32s%s","Execution Months" ,monthstr(cfg.event[i]->months)); sprintf(opt[k++],"%-32.32s%s","Execution Days of Month" @@ -590,10 +595,17 @@ void tevents_cfg() "\n" "This is the node number to execute the timed event.\n" ; - sprintf(str,"%u",cfg.event[i]->node); - uifc.input(WIN_MID|WIN_SAV,0,0,"Node Number" - ,str,3,K_EDIT|K_NUMBER); - cfg.event[i]->node=atoi(str); + if(cfg.event[i]->node == NODE_ANY) + SAFECOPY(str, "Any"); + else + SAFEPRINTF(str, "%u", cfg.event[i]->node); + if(uifc.input(WIN_MID|WIN_SAV,0,0,"Node Number" + ,str,3,K_EDIT) > 0) { + if(isdigit(*str)) + cfg.event[i]->node=atoi(str); + else + cfg.event[i]->node = NODE_ANY; + } break; case 5: uifc.helpbuf= diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h index a621866b10954afea7916934b69ce7100514c11a..4f6934a638dad6ecf3e21ebba9890bd11d4aebbd 100644 --- a/src/sbbs3/scfgdefs.h +++ b/src/sbbs3/scfgdefs.h @@ -1,4 +1,5 @@ /* Synchronet configuration structure (scfg_t) definition */ +// vi: tabstop=4 /* $Id$ */