From 482cb705825f3e89c62a2087e98d43ef732c1417 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sun, 21 Jul 2002 12:51:19 +0000
Subject: [PATCH] New module that reads-from (and eventually will write-to) an
 sbbs.ini file.

---
 src/sbbs3/sbbs_ini.c | 243 +++++++++++++++++++++++++++++++++++++++++++
 src/sbbs3/sbbs_ini.h |  32 ++++++
 2 files changed, 275 insertions(+)
 create mode 100644 src/sbbs3/sbbs_ini.c
 create mode 100644 src/sbbs3/sbbs_ini.h

diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c
new file mode 100644
index 0000000000..3332c54d38
--- /dev/null
+++ b/src/sbbs3/sbbs_ini.c
@@ -0,0 +1,243 @@
+/* sbbs_ini.c */
+
+#include "sbbs_ini.h"
+
+static const char*	nulstr="";
+
+static ini_bitdesc_t bbs_options[] = {
+
+	{ BBS_OPT_KEEP_ALIVE			,"KEEP_ALIVE"			},
+	{ BBS_OPT_XTRN_MINIMIZED		,"XTRN_MINIMIZED"		},
+	{ BBS_OPT_AUTO_LOGON			,"AUTO_LOGON"			},
+	{ BBS_OPT_DEBUG_TELNET			,"DEBUG_TELNET"			},
+	{ BBS_OPT_SYSOP_AVAILABLE		,"SYSOP_AVAILABLE"		},
+	{ BBS_OPT_ALLOW_RLOGIN			,"ALLOW_RLOGIN"			},
+	{ BBS_OPT_USE_2ND_RLOGIN		,"USE_2ND_RLOGIN"		},
+	{ BBS_OPT_NO_QWK_EVENTS			,"NO_QWK_EVENTS"		},
+	{ BBS_OPT_NO_HOST_LOOKUP		,"NO_HOST_LOOKUP"		},
+	{ BBS_OPT_GET_IDENT				,"GET_IDENT"			},
+	{ BBS_OPT_NO_JAVASCRIPT			,"NO_JAVASCRIPT"		},
+	{ BBS_OPT_LOCAL_TIMEZONE		,"LOCAL_TIMEZONE"		},
+	{ BBS_OPT_MUTE					,"MUTE"					},
+	/* terminator */										
+	{ -1							,NULL					}
+};
+
+static ini_bitdesc_t ftp_options[] = {
+
+	{ FTP_OPT_DEBUG_RX				,"DEBUG_RX"				},
+	{ FTP_OPT_DEBUG_DATA			,"DEBUG_DATA"			},	
+	{ FTP_OPT_INDEX_FILE			,"INDEX_FILE"			},
+	{ FTP_OPT_DEBUG_TX				,"DEBUG_TX"				},
+	{ FTP_OPT_ALLOW_QWK				,"ALLOW_QWK"			},
+	{ FTP_OPT_NO_LOCAL_FSYS			,"LOCAL_FSYS"			},
+	{ FTP_OPT_DIR_FILES				,"DIR_FILES"			},
+	{ FTP_OPT_KEEP_TEMP_FILES		,"KEEP_TEMP_FILES"		},
+	{ FTP_OPT_HTML_INDEX_FILE		,"HTML_INDEX_FILE"		},
+	{ FTP_OPT_NO_HOST_LOOKUP		,"NO_HOST_LOOKUP"		},
+	{ FTP_OPT_NO_JAVASCRIPT			,"NO_JAVASCRIPT"		},
+	{ FTP_OPT_LOCAL_TIMEZONE		,"LOCAL_TIMEZONE"		},
+	{ FTP_OPT_MUTE					,"MUTE"					},
+	/* terminator */										
+	{ -1							,NULL					}
+};
+
+static ini_bitdesc_t mail_options[] = {
+
+	{ MAIL_OPT_DEBUG_RX_HEADER		,"DEBUG_RX_HEADER"		},
+	{ MAIL_OPT_DEBUG_RX_BODY		,"DEBUG_RX_BODY"		},	
+	{ MAIL_OPT_ALLOW_POP3			,"ALLOW_POP3"			},
+	{ MAIL_OPT_DEBUG_TX				,"DEBUG_TX"				},
+	{ MAIL_OPT_DEBUG_RX_RSP			,"DEBUG_RX_RSP"			},
+	{ MAIL_OPT_RELAY_TX				,"RELAY_TX"				},
+	{ MAIL_OPT_DEBUG_POP3			,"DEBUG_POP3"			},
+	{ MAIL_OPT_ALLOW_RX_BY_NUMBER	,"ALLOW_RX_BY_NUMBER"	},
+	{ MAIL_OPT_NO_HOST_LOOKUP		,"NO_HOST_LOOKUP"		},
+	{ MAIL_OPT_USE_TCP_DNS			,"USE_TCP_DNS"			},
+	{ MAIL_OPT_NO_SENDMAIL			,"NO_SENDMAIL"			},
+	{ MAIL_OPT_ALLOW_RELAY			,"ALLOW_RELAY"			},
+	{ MAIL_OPT_DNSBL_REFUSE			,"DNSBL_REFUSE"			},
+	{ MAIL_OPT_DNSBL_IGNORE			,"DNSBL_IGNORE"			},
+	{ MAIL_OPT_DNSBL_BADUSER		,"DNSBL_BADUSER"		},
+	{ MAIL_OPT_LOCAL_TIMEZONE		,"LOCAL_TIMEZONE"		},
+	{ MAIL_OPT_MUTE					,"MUTE"					},
+	/* terminator */
+	{ -1							,NULL					}
+};
+
+static ini_bitdesc_t service_options[] = {
+
+	{ BBS_OPT_NO_HOST_LOOKUP		,"NO_HOST_LOOKUP"		},
+	{ BBS_OPT_GET_IDENT				,"GET_IDENT"			},
+	{ BBS_OPT_MUTE					,"MUTE"					},
+	/* terminator */				
+	{ -1							,NULL					}
+};
+
+
+void sbbs_read_ini(
+	 FILE*					fp
+	,BOOL*					run_bbs
+	,bbs_startup_t*			bbs
+	,BOOL*					run_ftp
+	,ftp_startup_t*			ftp
+	,BOOL*					run_mail		
+	,mail_startup_t*		mail
+	,BOOL*					run_services
+	,services_startup_t*	services
+	)
+{
+	const char*	section;
+	char*		ctrl_dir;
+	char*		host_name;
+
+	section = "Global";
+
+	ctrl_dir=iniReadString(fp,section,"CtrlDirectory",nulstr);
+	if(*ctrl_dir) {
+		SAFECOPY(bbs->ctrl_dir,ctrl_dir);
+		SAFECOPY(ftp->ctrl_dir,ctrl_dir);
+		SAFECOPY(mail->ctrl_dir,ctrl_dir);
+		SAFECOPY(services->ctrl_dir,ctrl_dir);
+	}
+
+	host_name=iniReadString(fp,section,"HostName",nulstr);
+	if(*host_name) {
+		SAFECOPY(bbs->host_name,host_name);
+		SAFECOPY(ftp->host_name,host_name);
+		SAFECOPY(mail->host_name,host_name);
+		SAFECOPY(services->host_name,host_name);
+	}
+																		
+	/***********************************************************************/
+	section = "BBS";
+
+	*run_bbs
+		=iniReadBool(fp,section,"AutoStart",TRUE);
+
+	bbs->telnet_interface
+		=iniReadIpAddress(fp,section,"TelnetInterface",0);
+	bbs->telnet_port
+		=iniReadShortInt(fp,section,"TelnetPort",bbs->telnet_port);
+
+	bbs->rlogin_interface
+		=iniReadIpAddress(fp,section,"RLoginInterface",0);
+	bbs->rlogin_port
+		=iniReadShortInt(fp,section,"RloginPort",bbs->rlogin_port);
+
+	bbs->first_node
+		=iniReadShortInt(fp,section,"FirstNode",bbs->first_node);
+	bbs->last_node
+		=iniReadShortInt(fp,section,"FirstNode",bbs->last_node);
+
+	bbs->xtrn_polls_before_yield
+		=iniReadInteger(fp,section,"ExternalYield",bbs->xtrn_polls_before_yield);
+	bbs->js_max_bytes
+		=iniReadInteger(fp,section,"JS_MaxBytes",0);
+
+	SAFECOPY(bbs->answer_sound
+		,iniReadString(fp,section,"AnswerSound",nulstr));
+	SAFECOPY(bbs->hangup_sound
+		,iniReadString(fp,section,"HangupSound",nulstr));
+
+	bbs->options
+		=iniReadBitField(fp,section,"Options",bbs_options,bbs->options);
+
+	/***********************************************************************/
+	section = "FTP";
+
+	*run_ftp
+		=iniReadBool(fp,section,"AutoStart",TRUE);
+
+	ftp->interface_addr
+		=iniReadIpAddress(fp,section,"Interface",0);
+	ftp->port
+		=iniReadShortInt(fp,section,"Port",ftp->port);
+	ftp->max_clients
+		=iniReadShortInt(fp,section,"MaxClient",ftp->max_clients);
+	ftp->max_inactivity
+		=iniReadShortInt(fp,section,"MaxClient",ftp->max_inactivity);
+	ftp->qwk_timeout
+		=iniReadShortInt(fp,section,"QwkTimeout",ftp->qwk_timeout);
+
+	SAFECOPY(ftp->index_file_name
+		,iniReadString(fp,section,"IndexFileName","00index"));
+	SAFECOPY(ftp->html_index_file
+		,iniReadString(fp,section,"HtmlIndexFile","00index.html"));
+	SAFECOPY(ftp->html_index_script
+		,iniReadString(fp,section,"HtmlIndexScript","ftp-html.js"));
+
+	SAFECOPY(ftp->answer_sound
+		,iniReadString(fp,section,"AnswerSound",nulstr));
+	SAFECOPY(ftp->hangup_sound
+		,iniReadString(fp,section,"HangupSound",nulstr));
+	SAFECOPY(ftp->hack_sound
+		,iniReadString(fp,section,"HackAttemptSound",nulstr));
+
+	ftp->options
+		=iniReadBitField(fp,section,"Options",ftp_options,ftp->options);
+
+	/***********************************************************************/
+	section = "Mail";
+
+	*run_mail
+		=iniReadBool(fp,section,"AutoStart",TRUE);
+
+	mail->interface_addr
+		=iniReadIpAddress(fp,section,"Interface",0);
+	mail->smtp_port
+		=iniReadShortInt(fp,section,"SMTPPort",mail->smtp_port);
+	mail->pop3_port
+		=iniReadShortInt(fp,section,"POP3Port",mail->pop3_port);
+	mail->relay_port
+		=iniReadShortInt(fp,section,"RelayPort",mail->relay_port);
+	mail->max_clients
+		=iniReadShortInt(fp,section,"MaxClient",mail->max_clients);
+	mail->max_inactivity
+		=iniReadShortInt(fp,section,"MaxClient",mail->max_inactivity);
+	mail->max_delivery_attempts
+		=iniReadShortInt(fp,section,"MaxDeliveryAttempts",mail->max_delivery_attempts);
+	mail->rescan_frequency
+		=iniReadShortInt(fp,section,"RescanFrequency",mail->rescan_frequency);
+
+	SAFECOPY(mail->relay_server
+		,iniReadString(fp,section,"RelayServer",mail->relay_server));
+	SAFECOPY(mail->dns_server
+		,iniReadString(fp,section,"DNSServer",mail->dns_server));
+
+	SAFECOPY(mail->default_user
+		,iniReadString(fp,section,"DefaultUser",mail->dns_server));
+
+	SAFECOPY(mail->dnsbl_hdr
+		,iniReadString(fp,section,"DNSBlacklistHeader",mail->dnsbl_hdr));
+	SAFECOPY(mail->dnsbl_tag
+		,iniReadString(fp,section,"DNSBlacklistSubject",mail->dnsbl_tag));
+
+	SAFECOPY(mail->pop3_sound
+		,iniReadString(fp,section,"POP3Sound",nulstr));
+	SAFECOPY(mail->inbound_sound
+		,iniReadString(fp,section,"InboundSound",nulstr));
+	SAFECOPY(mail->outbound_sound
+		,iniReadString(fp,section,"OutboundSound",nulstr));
+
+	mail->options
+		=iniReadBitField(fp,section,"Options",mail_options,mail->options);
+
+	/***********************************************************************/
+	section = "Services";
+
+	*run_services
+		=iniReadBool(fp,section,"AutoStart",TRUE);
+
+	services->interface_addr
+		=iniReadIpAddress(fp,section,"Interface",0);
+
+	SAFECOPY(services->answer_sound
+		,iniReadString(fp,section,"AnswerSound",nulstr));
+	SAFECOPY(services->hangup_sound
+		,iniReadString(fp,section,"HangupSound",nulstr));
+
+	services->options
+		=iniReadBitField(fp,section,"Options",service_options,services->options);
+
+}
diff --git a/src/sbbs3/sbbs_ini.h b/src/sbbs3/sbbs_ini.h
new file mode 100644
index 0000000000..d1e195d20e
--- /dev/null
+++ b/src/sbbs3/sbbs_ini.h
@@ -0,0 +1,32 @@
+/* sbbs_ini.h */
+
+#ifndef _SBBS_INI_H
+#define _SBBS_INI_H
+
+#include "startup.h"	/* bbs_startup_t */
+#include "ftpsrvr.h"	/* ftp_startup_t */
+#include "mailsrvr.h"	/* mail_startup_t */
+#include "services.h"	/* services_startup_t */
+#include "ini_file.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+void sbbs_read_ini(
+	 FILE*					fp
+	,BOOL*					run_bbs
+	,bbs_startup_t*			bbs_startup
+	,BOOL*					run_ftp
+	,ftp_startup_t*			ftp_startup
+	,BOOL*					run_mail		
+	,mail_startup_t*		mail_startup
+	,BOOL*					run_services
+	,services_startup_t*	services_startup
+	);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif	/* Don't add anything after this line */
-- 
GitLab