From 40752f29a960d2dfad2a665b14f233187b9f5dd2 Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Sat, 17 Apr 2021 15:13:03 -0700
Subject: [PATCH] Allow an alternate "services.ini" filename to be specified in
 sbbs.ini

Set sbbs.ini [services] iniFileName to something other than services.ini to override the default filename. The automatic/optional hostname decoration of the filename is still supported.

Addresses request #238.
---
 src/sbbs3/sbbs_ini.c |  7 +++++++
 src/sbbs3/services.c |  2 +-
 src/sbbs3/services.h | 19 ++-----------------
 3 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c
index ab3d89f460..d8fa6cdece 100644
--- a/src/sbbs3/sbbs_ini.c
+++ b/src/sbbs3/sbbs_ini.c
@@ -60,6 +60,7 @@ static const char*	strJavaScriptYieldInterval	="JavaScriptYieldInterval";
 static const char*	strJavaScriptLoadPath		="JavaScriptLoadPath";
 static const char*	strJavaScriptOptions		="JavaScriptOptions";
 static const char*	strSemFileCheckFrequency	="SemFileCheckFrequency";
+static const char*	strIniFileName				="iniFileName";
 
 #define DEFAULT_LOG_LEVEL				LOG_DEBUG
 #define DEFAULT_BIND_RETRY_COUNT		2
@@ -603,6 +604,9 @@ void sbbs_read_ini(
 		SAFECOPY(services->temp_dir
 			,iniGetString(list,section,strTempDirectory,global->temp_dir,value));
 
+		SAFECOPY(services->services_ini
+			,iniGetString(list, section, strIniFileName, "servicse.ini", value));
+
 		SAFECOPY(services->answer_sound
 			,iniGetString(list,section,strAnswerSound,nulstr,value));
 		SAFECOPY(services->hangup_sound
@@ -1141,6 +1145,9 @@ BOOL sbbs_write_ini(
 		if(!iniSetString(lp,section,strHangupSound,services->hangup_sound,&style))
 			break;
 
+		if(!iniSetString(lp, section, strIniFileName, services->services_ini, &style))
+			break;
+
 		if(!iniSetBitField(lp,section,strOptions,service_options,services->options,&style))
 			break;
 
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 385552c401..9b27f70719 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -1907,7 +1907,7 @@ void services_thread(void* arg)
 		if(uptime==0)
 			uptime=time(NULL);	/* this must be done *after* setting the timezone */
 
-		iniFileName(services_ini,sizeof(services_ini),scfg.ctrl_dir,"services.ini");
+		iniFileName(services_ini,sizeof(services_ini),scfg.ctrl_dir, startup->services_ini);
 
 		if((service=read_services_ini(services_ini, service, &services))==NULL) {
 			cleanup(1);
diff --git a/src/sbbs3/services.h b/src/sbbs3/services.h
index c3aa20ec61..c26b0607fe 100644
--- a/src/sbbs3/services.h
+++ b/src/sbbs3/services.h
@@ -1,7 +1,3 @@
-/* Synchronet main/telnet server thread startup structure */
-
-/* $Id: services.h,v 1.45 2019/03/22 21:28:27 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 +11,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.	*
  ****************************************************************************/
 
@@ -68,7 +52,8 @@ typedef struct {
 	char    temp_dir[128];
 	char	answer_sound[128];
 	char	hangup_sound[128];
-	char	ini_fname[128];
+	char	ini_fname[128];		// sbbs.ini path/filename
+	char	services_ini[128];	// services.ini filename
 
 	/* Misc */
     char	host_name[128];
-- 
GitLab