diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp
index 6a97ffe4811b8a4f248c501188670412aea4d6fb..a86df3a1775b2a4f849223abbeec0da0a7726780 100644
--- a/src/sbbs3/xtrn.cpp
+++ b/src/sbbs3/xtrn.cpp
@@ -1128,22 +1128,22 @@ int sbbs_t::external(const char* cmdline, int mode, const char* startup_dir)
 	truncstr(str," ");
     SAFECOPY(fname,getfname(str));
 
-	sprintf(fullpath,"%s%s",startup_dir,fname);
+	snprintf(fullpath, sizeof fullpath, "%s%s",startup_dir,fname);
 	if(startup_dir!=NULL && cmdline[0]!='/' && cmdline[0]!='.' && fexist(fullpath))
-		sprintf(fullcmdline,"%s%s",startup_dir,cmdline);
+		snprintf(fullcmdline, sizeof fullcmdline, "%s%s",startup_dir,cmdline);
 	else
 		SAFECOPY(fullcmdline,cmdline);
 
  	if(native) { // Native (not MS-DOS) external
 
 		// Current environment passed to child process
-		sprintf(dszlog,"%sPROTOCOL.LOG",cfg.node_dir);
+		snprintf(dszlog, sizeof dszlog, "%sPROTOCOL.LOG",cfg.node_dir);
 		setenv("DSZLOG",dszlog,1); 		/* Makes the DSZ LOG active */
 		setenv("SBBSNODE",cfg.node_dir,1);
 		setenv("SBBSCTRL",cfg.ctrl_dir,1);
 		setenv("SBBSDATA",cfg.data_dir,1);
 		setenv("SBBSEXEC",cfg.exec_dir,1);
-		sprintf(str,"%u",cfg.node_num);
+		snprintf(str, sizeof str, "%u",cfg.node_num);
 		setenv("SBBSNNUM",str,1);
 
 		/* date/time env vars */
@@ -1151,13 +1151,13 @@ int sbbs_t::external(const char* cmdline, int mode, const char* startup_dir)
 		struct	tm tm;
 		if(localtime_r(&now, &tm) == NULL)
 			memset(&tm, 0, sizeof(tm));
-		sprintf(str," %02u", tm.tm_mday);
+		snprintf(str, sizeof str, " %02u", tm.tm_mday);
 		setenv("DAY", str, /* overwrite */TRUE);
 		setenv("WEEKDAY", wday[tm.tm_wday], /* overwrite */TRUE);
 		setenv("MONTHNAME", mon[tm.tm_mon], /* overwrite */TRUE);
-		sprintf(str, "%02u", tm.tm_mon + 1);
+		snprintf(str, sizeof str, "%02u", tm.tm_mon + 1);
 		setenv("MONTH", str, /* overwrite */TRUE);
-		sprintf(str,"%u", 1900 + tm.tm_year);
+		snprintf(str, sizeof str, "%u", 1900 + tm.tm_year);
 		if(setenv("YEAR", str, /* overwrite */TRUE) != 0)
 			errormsg(WHERE,ERR_WRITE,"environment",0);
 
@@ -1177,7 +1177,7 @@ int sbbs_t::external(const char* cmdline, int mode, const char* startup_dir)
 
 		FILE * doscmdrc;
 
-		sprintf(str,"%s.doscmdrc",cfg.node_dir);
+		snprintf(str, sizeof str, "%s.doscmdrc",cfg.node_dir);
 		if((doscmdrc=fopen(str,"w+"))==NULL)  {
 			errormsg(WHERE,ERR_CREATE,str,0);
 			return(-1);
@@ -1209,7 +1209,7 @@ int sbbs_t::external(const char* cmdline, int mode, const char* startup_dir)
 
 		fclose(doscmdrc);
 		SAFECOPY(str,fullcmdline);
-		sprintf(fullcmdline,"%s -F %s",startup->dosemu_path,str);
+		snprintf(fullcmdline, sizeof fullcmdline, "%s -F %s",startup->dosemu_path,str);
 
 #elif defined(__linux__)
 
@@ -1464,7 +1464,7 @@ int sbbs_t::external(const char* cmdline, int mode, const char* startup_dir)
 
 		/* Attempt to keep dosemu from prompting for a disclaimer. */
 
-		sprintf(str, "%s/.dosemu", cfg.ctrl_dir);
+		snprintf(str, sizeof str, "%s/.dosemu", cfg.ctrl_dir);
 		if (!isdir(str)) {
 			if(mkdir(str, 0755) != 0) {
 				errormsg(WHERE,ERR_MKDIR, str, 0755);
@@ -2065,7 +2065,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
                     strncat(cmd,ultoa(cfg.com_base,str,16), avail);
                     break;
                 case 'V':   /* Synchronet Version */
-                    sprintf(str,"%s%c",VERSION,REVISION);
+                    snprintf(str, sizeof str, "%s%c",VERSION,REVISION);
 					strncat(cmd,str, avail);
                     break;
                 case 'W':   /* Columns (width) */
@@ -2112,11 +2112,11 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
                     break;
 
                 case '#':   /* Node number (same as SBBSNNUM environment var) */
-                    sprintf(str,"%d",cfg.node_num);
+                    snprintf(str, sizeof str, "%d",cfg.node_num);
                     strncat(cmd,str, avail);
                     break;
                 case '*':
-                    sprintf(str,"%03d",cfg.node_num);
+                    snprintf(str, sizeof str, "%03d",cfg.node_num);
                     strncat(cmd,str, avail);
                     break;
                 case '$':   /* Credits */
@@ -2147,7 +2147,7 @@ char* sbbs_t::cmdstr(const char *instr, const char *fpath, const char *fspec, ch
 					break;
                 default:    /* unknown specification */
                     if(IS_DIGIT(instr[i])) {
-                        sprintf(str,"%0*d",instr[i]&0xf,useron.number);
+                        snprintf(str, sizeof str, "%0*d",instr[i]&0xf,useron.number);
                         strncat(cmd,str, avail); }
                     break; }
             j=strlen(cmd); }