diff --git a/src/sbbs3/ctrl/ConfigWizardUnit.cpp b/src/sbbs3/ctrl/ConfigWizardUnit.cpp index c8ba1b5d6b9de71b64f9dfe4a2f45fd8299ab9ae..32667eaecdf39e4e6f40ea852ffab419bab9823c 100644 --- a/src/sbbs3/ctrl/ConfigWizardUnit.cpp +++ b/src/sbbs3/ctrl/ConfigWizardUnit.cpp @@ -262,6 +262,7 @@ void __fastcall TConfigWizard::FormShow(TObject *Sender) DateUsRadioButton->Checked=true; WizNotebook->PageIndex=0; + ProgressBar->Position=0; ProgressBar->Max=WizNotebook->Pages->Count-1; IllegalCharsLabel->Caption="Illegal characters: '" ILLEGAL_QWKID_CHARS "'"; @@ -323,14 +324,12 @@ void __fastcall TConfigWizard::NextButtonClick(TObject *Sender) scfg.sys_misc|=SM_SYSVDELM; scfg.sys_misc&=~SM_USRVDELM; } - scfg.new_install=FALSE; if(!save_cfg(&scfg,0)) { Application->MessageBox("Error saving configuration" ,"ERROR",MB_OK|MB_ICONEXCLAMATION); } else refresh_cfg(&scfg); - Close(); return; } diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp index a7aeeb6526abcfd4ce73528ada09046789d30873..8ee17f4972ace071f04c9c9cf3b222905950dc20 100644 --- a/src/sbbs3/ctrl/MainFormUnit.cpp +++ b/src/sbbs3/ctrl/MainFormUnit.cpp @@ -1682,9 +1682,15 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) int WebFormPage=PAGE_LOWERRIGHT; int ServicesFormPage=PAGE_LOWERRIGHT; - AnsiString Str; + StartupTimer->Enabled = false; + if(Initialized) { // second time (fresh install) + delete StartupTimer; + BBSConfigWizardMenuItemClick(Sender); + DisplayMainPanels(Sender); + return; + } - delete StartupTimer; + AnsiString Str; // Read Registry keys TRegistry* Registry=new TRegistry; @@ -1916,263 +1922,27 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) else FtpLogFile=true; - FILE* fp; - if((!Registry->ValueExists("SysAutoStart") - || (Registry->ValueExists("Imported") && Registry->ReadBool("Imported"))) - && ini_file[0]) { - if((fp=fopen(ini_file,"r"))==NULL) { - char err[MAX_PATH*2]; - sprintf(err,"Error %d opening initialization file: %s",errno,ini_file); - Application->MessageBox(err,"ERROR",MB_OK|MB_ICONEXCLAMATION); - Application->Terminate(); - return; - } - sbbs_read_ini(fp, MainForm->ini_file - ,&global - ,&SysAutoStart ,&bbs_startup - ,&FtpAutoStart ,&ftp_startup - ,&WebAutoStart ,&web_startup - ,&MailAutoStart ,&mail_startup - ,&ServicesAutoStart ,&services_startup - ); - StatusBar->Panels->Items[STATUSBAR_LAST_PANEL]->Text="Read " + AnsiString(ini_file); - fclose(fp); - - } else { /* Legacy (v3.10-3.11) */ - - if(Registry->ValueExists("SysAutoStart")) - SysAutoStart=Registry->ReadInteger("SysAutoStart"); - else - SysAutoStart=true; - - if(Registry->ValueExists("MailAutoStart")) - MailAutoStart=Registry->ReadInteger("MailAutoStart"); - else - MailAutoStart=true; - - if(Registry->ValueExists("FtpAutoStart")) - FtpAutoStart=Registry->ReadInteger("FtpAutoStart"); - else - FtpAutoStart=true; - - if(Registry->ValueExists("WebAutoStart")) - WebAutoStart=Registry->ReadInteger("WebAutoStart"); - else - WebAutoStart=true; - - if(Registry->ValueExists("ServicesAutoStart")) - ServicesAutoStart=Registry->ReadInteger("ServicesAutoStart"); - else - ServicesAutoStart=true; - - if(Registry->ValueExists("Hostname")) - SAFECOPY(global.host_name,Registry->ReadString("Hostname").c_str()); - if(Registry->ValueExists("CtrlDirectory")) - SAFECOPY(global.ctrl_dir,Registry->ReadString("CtrlDirectory").c_str()); - if(Registry->ValueExists("TempDirectory")) - SAFECOPY(global.temp_dir,Registry->ReadString("TempDirectory").c_str()); - - if(Registry->ValueExists("SemFileCheckFrequency")) - global.sem_chk_freq=Registry->ReadInteger("SemFileCheckFrequency"); - - /* JavaScript Operating Parameters */ - if(Registry->ValueExists("JS_MaxBytes")) - global.js.max_bytes=Registry->ReadInteger("JS_MaxBytes"); - if(global.js.max_bytes==0) - global.js.max_bytes=JAVASCRIPT_MAX_BYTES; - if(Registry->ValueExists("JS_ContextStack")) - global.js.cx_stack=Registry->ReadInteger("JS_ContextStack"); - if(global.js.cx_stack==0) - global.js.cx_stack=JAVASCRIPT_CONTEXT_STACK; - if(Registry->ValueExists("JS_GcInterval")) - global.js.gc_interval=Registry->ReadInteger("JS_GcInterval"); - if(Registry->ValueExists("JS_YieldInterval")) - global.js.yield_interval=Registry->ReadInteger("JS_YieldInterval"); - -/* - if(Registry->ValueExists("TelnetInterface")) - bbs_startup.telnet_interface=Registry->ReadInteger("TelnetInterface"); - if(Registry->ValueExists("RLoginInterface")) - bbs_startup.rlogin_interface=Registry->ReadInteger("RLoginInterface"); -*/ - - if(Registry->ValueExists("TelnetPort")) - bbs_startup.telnet_port=Registry->ReadInteger("TelnetPort"); - if(Registry->ValueExists("RLoginPort")) - bbs_startup.rlogin_port=Registry->ReadInteger("RLoginPort"); - - if(Registry->ValueExists("FirstNode")) - bbs_startup.first_node=Registry->ReadInteger("FirstNode"); - - if(Registry->ValueExists("LastNode")) - bbs_startup.last_node=Registry->ReadInteger("LastNode"); - - if(Registry->ValueExists("OutbufHighwaterMark")) - bbs_startup.outbuf_highwater_mark=Registry->ReadInteger("OutbufHighwaterMark"); - else - bbs_startup.outbuf_highwater_mark=1024; - if(Registry->ValueExists("OutbufDrainTimeout")) - bbs_startup.outbuf_drain_timeout=Registry->ReadInteger("OutbufDrainTimeout"); - else - bbs_startup.outbuf_drain_timeout=10; - - if(Registry->ValueExists("AnswerSound")) - SAFECOPY(bbs_startup.answer_sound - ,Registry->ReadString("AnswerSound").c_str()); - - if(Registry->ValueExists("HangupSound")) - SAFECOPY(bbs_startup.hangup_sound - ,Registry->ReadString("HangupSound").c_str()); - - if(Registry->ValueExists("StartupOptions")) - bbs_startup.options=Registry->ReadInteger("StartupOptions"); - - if(Registry->ValueExists("MailMaxClients")) - mail_startup.max_clients=Registry->ReadInteger("MailMaxClients"); - - if(Registry->ValueExists("MailMaxInactivity")) - mail_startup.max_inactivity=Registry->ReadInteger("MailMaxInactivity"); - -/* - if(Registry->ValueExists("MailInterface")) - mail_startup.interface_addr=Registry->ReadInteger("MailInterface"); -*/ - - if(Registry->ValueExists("MailMaxDeliveryAttempts")) - mail_startup.max_delivery_attempts - =Registry->ReadInteger("MailMaxDeliveryAttempts"); - - if(Registry->ValueExists("MailRescanFrequency")) - mail_startup.rescan_frequency - =Registry->ReadInteger("MailRescanFrequency"); - - if(Registry->ValueExists("MailLinesPerYield")) - mail_startup.lines_per_yield - =Registry->ReadInteger("MailLinesPerYield"); - - if(Registry->ValueExists("MailMaxRecipients")) - mail_startup.max_recipients - =Registry->ReadInteger("MailMaxRecipients"); - - if(Registry->ValueExists("MailMaxMsgSize")) - mail_startup.max_msg_size - =Registry->ReadInteger("MailMaxMsgSize"); - - if(Registry->ValueExists("MailSMTPPort")) - mail_startup.smtp_port=Registry->ReadInteger("MailSMTPPort"); - - if(Registry->ValueExists("MailPOP3Port")) - mail_startup.pop3_port=Registry->ReadInteger("MailPOP3Port"); - - if(Registry->ValueExists("MailRelayServer")) - SAFECOPY(mail_startup.relay_server - ,Registry->ReadString("MailRelayServer").c_str()); - - if(Registry->ValueExists("MailRelayPort")) - mail_startup.relay_port=Registry->ReadInteger("MailRelayPort"); - - if(Registry->ValueExists("MailDefaultUser")) - SAFECOPY(mail_startup.default_user - ,Registry->ReadString("MailDefaultUser").c_str()); - - if(Registry->ValueExists("MailDNSBlacklistSubject")) - SAFECOPY(mail_startup.dnsbl_tag - ,Registry->ReadString("MailDNSBlacklistSubject").c_str()); - else - SAFECOPY(mail_startup.dnsbl_tag,"SPAM"); - - if(Registry->ValueExists("MailDNSBlacklistHeader")) - SAFECOPY(mail_startup.dnsbl_hdr - ,Registry->ReadString("MailDNSBlacklistHeader").c_str()); - else - SAFECOPY(mail_startup.dnsbl_hdr,"X-DNSBL"); - - if(Registry->ValueExists("MailDNSServer")) - SAFECOPY(mail_startup.dns_server - ,Registry->ReadString("MailDNSServer").c_str()); - - if(Registry->ValueExists("MailInboundSound")) - SAFECOPY(mail_startup.inbound_sound - ,Registry->ReadString("MailInboundSound").c_str()); - - if(Registry->ValueExists("MailOutboundSound")) - SAFECOPY(mail_startup.outbound_sound - ,Registry->ReadString("MailOutboundSound").c_str()); - - if(Registry->ValueExists("MailPOP3Sound")) - SAFECOPY(mail_startup.pop3_sound - ,Registry->ReadString("MailPOP3Sound").c_str()); - - if(Registry->ValueExists("MailOptions")) - mail_startup.options=Registry->ReadInteger("MailOptions"); - - if(Registry->ValueExists("FtpMaxClients")) - ftp_startup.max_clients=Registry->ReadInteger("FtpMaxClients"); - - if(Registry->ValueExists("FtpMaxInactivity")) - ftp_startup.max_inactivity=Registry->ReadInteger("FtpMaxInactivity"); - - if(Registry->ValueExists("FtpQwkTimeout")) - ftp_startup.qwk_timeout=Registry->ReadInteger("FtpQwkTimeout"); - -/* - if(Registry->ValueExists("FtpInterface")) - ftp_startup.interface_addr=Registry->ReadInteger("FtpInterface"); -*/ - - if(Registry->ValueExists("FtpPort")) - ftp_startup.port=Registry->ReadInteger("FtpPort"); - - if(Registry->ValueExists("FtpAnswerSound")) - SAFECOPY(ftp_startup.answer_sound - ,Registry->ReadString("FtpAnswerSound").c_str()); - - if(Registry->ValueExists("FtpHangupSound")) - SAFECOPY(ftp_startup.hangup_sound - ,Registry->ReadString("FtpHangupSound").c_str()); - - if(Registry->ValueExists("FtpHackAttemptSound")) - SAFECOPY(ftp_startup.hack_sound - ,Registry->ReadString("FtpHackAttemptSound").c_str()); - - if(Registry->ValueExists("FtpIndexFileName")) - SAFECOPY(ftp_startup.index_file_name - ,Registry->ReadString("FtpIndexFileName").c_str()); - - if(Registry->ValueExists("FtpHtmlIndexFile")) - SAFECOPY(ftp_startup.html_index_file - ,Registry->ReadString("FtpHtmlIndexFile").c_str()); - - if(Registry->ValueExists("FtpHtmlIndexScript")) - SAFECOPY(ftp_startup.html_index_script - ,Registry->ReadString("FtpHtmlIndexScript").c_str()); - - if(Registry->ValueExists("FtpOptions")) - ftp_startup.options=Registry->ReadInteger("FtpOptions"); - -/* - if(Registry->ValueExists("ServicesInterface")) - services_startup.interface_addr - =Registry->ReadInteger("ServicesInterface"); -*/ - - if(Registry->ValueExists("ServicesAnswerSound")) - SAFECOPY(services_startup.answer_sound - ,Registry->ReadString("ServicesAnswerSound").c_str()); - - if(Registry->ValueExists("ServicesHangupSound")) - SAFECOPY(services_startup.hangup_sound - ,Registry->ReadString("ServicesHangupSound").c_str()); - - if(Registry->ValueExists("ServicesOptions")) - services_startup.options=Registry->ReadInteger("ServicesOptions"); + Registry->CloseKey(); + delete Registry; - if(SaveIniSettings(Sender)) - Registry->WriteBool("Imported",true); /* Use the .ini file for these settings from now on */ + FILE* fp; + if((fp=fopen(ini_file,"r"))==NULL) { + char err[MAX_PATH*2]; + sprintf(err,"Error %d opening initialization file: %s",errno,ini_file); + Application->MessageBox(err,"ERROR",MB_OK|MB_ICONEXCLAMATION); + Application->Terminate(); + return; } - - Registry->CloseKey(); - delete Registry; + sbbs_read_ini(fp, MainForm->ini_file + ,&global + ,&SysAutoStart ,&bbs_startup + ,&FtpAutoStart ,&ftp_startup + ,&WebAutoStart ,&web_startup + ,&MailAutoStart ,&mail_startup + ,&ServicesAutoStart ,&services_startup + ); + StatusBar->Panels->Items[STATUSBAR_LAST_PANEL]->Text="Read " + AnsiString(ini_file); + fclose(fp); AnsiString CtrlDirectory = AnsiString(global.ctrl_dir); if(!FileExists(CtrlDirectory+"MAIN.CNF")) { @@ -2203,32 +1973,6 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) } StatusBar->Panels->Items[STATUSBAR_LAST_PANEL]->Text="Configuration loaded"; - recycle_semfiles=semfile_list_init(cfg.ctrl_dir,"recycle","ctrl"); - semfile_list_add(&recycle_semfiles,ini_file); - semfile_list_check(&initialized,recycle_semfiles); - - shutdown_semfiles=semfile_list_init(cfg.ctrl_dir,"shutdown","ctrl"); - semfile_list_check(&initialized,shutdown_semfiles); - - if(cfg.new_install) { - Application->BringToFront(); - for(int i=0;i<10;i++) { - Application->ProcessMessages(); - Sleep(300); // Let 'em see the logo for a bit - } - BBSConfigWizardMenuItemClick(Sender); - } - - if(bbs_startup.options&BBS_OPT_MUTE) - SoundToggle->Checked=false; - else - SoundToggle->Checked=true; - - if(sysop_available(&cfg)) - ChatToggle->Checked=true; - else - ChatToggle->Checked=false; - if(!NodeFormFloating) NodeForm->ManualDock(PageControl(NodeFormPage),NULL,alClient); if(!ClientFormFloating) @@ -2248,6 +1992,35 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) if(!WebFormFloating) WebForm->ManualDock(PageControl(WebFormPage),NULL,alClient); + recycle_semfiles=semfile_list_init(cfg.ctrl_dir,"recycle","ctrl"); + semfile_list_add(&recycle_semfiles,ini_file); + semfile_list_check(&initialized,recycle_semfiles); + + shutdown_semfiles=semfile_list_init(cfg.ctrl_dir,"shutdown","ctrl"); + semfile_list_check(&initialized,shutdown_semfiles); + + if(cfg.new_install) { + Application->BringToFront(); + StartupTimer->Interval = 2500; // Let 'em see the logo for a bit + StartupTimer->Enabled = true; + } else { + DisplayMainPanels(Sender); + } + Initialized=true; +} + +void __fastcall TMainForm::DisplayMainPanels(TObject* Sender) +{ + if(bbs_startup.options&BBS_OPT_MUTE) + SoundToggle->Checked=false; + else + SoundToggle->Checked=true; + + if(sysop_available(&cfg)) + ChatToggle->Checked=true; + else + ChatToggle->Checked=false; + NodeForm->Show(); ClientForm->Show(); StatsForm->Show(); @@ -2263,8 +2036,8 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) LowerLeftPageControl->Visible=true; LowerRightPageControl->Visible=true; HorizontalSplitter->Visible=true; - BottomPanel->Visible=true; - TopPanel->Visible=true; + BottomPanel->Visible=true; + TopPanel->Visible=true; // Work-around for CB5 PageControl anomaly int i; @@ -2317,12 +2090,11 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) ServiceStatusTimer->Enabled=true; SetControls(); - - if(!Application->Active) /* Starting up minimized? */ - FormMinimize(Sender); /* Put icon in systray */ - Initialized=true; + if(!Application->Active) /* Starting up minimized? */ + FormMinimize(Sender); /* Put icon in systray */ } + //--------------------------------------------------------------------------- void __fastcall TMainForm::SaveRegistrySettings(TObject* Sender) { @@ -3320,17 +3092,17 @@ void __fastcall TMainForm::RestoreTrayMenuItemClick(TObject *Sender) //--------------------------------------------------------------------------- void __fastcall TMainForm::BBSConfigWizardMenuItemClick(TObject *Sender) { - static TConfigWizard* ConfigWizard; + TConfigWizard* ConfigWizard; static inside; if(inside) return; inside=true; - if(ConfigWizard == NULL) - Application->CreateForm(__classid(TConfigWizard), &ConfigWizard); + Application->CreateForm(__classid(TConfigWizard), &ConfigWizard); if(ConfigWizard->ShowModal()==mrOk) { SaveSettings(Sender); // ReloadConfigExecute(Sender); /* unnecessary since refresh_cfg() is already called */ } + delete ConfigWizard; inside=false; } diff --git a/src/sbbs3/ctrl/MainFormUnit.h b/src/sbbs3/ctrl/MainFormUnit.h index 564ec7bec628c2701e70ad173b4226f95dc37d5e..0c1463ede76cf3584b50ddd6d3a1c15b94bc062e 100644 --- a/src/sbbs3/ctrl/MainFormUnit.h +++ b/src/sbbs3/ctrl/MainFormUnit.h @@ -492,6 +492,7 @@ public: // User declarations TPageControl* __fastcall PageControl(int num); int __fastcall PageNum(TPageControl* obj); void __fastcall FormMinimize(TObject *Sender); + void __fastcall DisplayMainPanels(TObject *Sender); TColor __fastcall ReadColor(TRegistry*, AnsiString); void __fastcall WriteColor(TRegistry*, AnsiString, TColor); void __fastcall ReadFont(AnsiString, TFont*); diff --git a/src/sbbs3/email.cpp b/src/sbbs3/email.cpp index 09de214750c9e95e21111a9bd6a2db764e573d0d..164468676d8ccceea110d89da3b52cb46f8a4db8 100644 --- a/src/sbbs3/email.cpp +++ b/src/sbbs3/email.cpp @@ -91,11 +91,15 @@ bool sbbs_t::email(int usernumber, const char *top, const char *subj, long mode, bputs(text[UnknownUser]); return(false); } - if((l&NETMAIL) && (cfg.sys_misc&SM_FWDTONET) && !(mode & WM_NOFWD)) { + if((l&NETMAIL) && (cfg.sys_misc&SM_FWDTONET) && !(mode & WM_NOFWD) && !(useron.rest&FLAG('M'))) { getuserrec(&cfg,usernumber,U_NETMAIL,LEN_NETMAIL,str); - bprintf(text[UserNetMail],str); - if((mode & WM_FORCEFWD) || text[ForwardMailQ][0]==0 || yesno(text[ForwardMailQ])) /* Forward to netmail address */ - return(netmail(str, subj, mode, resmb, remsg)); + if(is_supported_netmail_addr(&cfg, str)) { + bprintf(text[UserNetMail],str); + if((mode & WM_FORCEFWD) || yesno(text[ForwardMailQ])) /* Forward to netmail address */ + return(netmail(str, subj, mode, resmb, remsg)); + } else { + bprintf(text[InvalidNetMailAddr], str); + } } if(sys_status&SS_ABORT) { bputs(text[Aborted]); diff --git a/src/sbbs3/netmail.cpp b/src/sbbs3/netmail.cpp index 80e947617161a08bd493613799274885c2592458..bffbe9aad854af9ee3cc231eedf9f9e1c8f0fd05 100644 --- a/src/sbbs3/netmail.cpp +++ b/src/sbbs3/netmail.cpp @@ -1428,3 +1428,23 @@ bool sbbs_t::qnetmail(const char *into, const char *subj, long mode, smb_t* resm logline("EN",str); return(true); } + +extern "C" BOOL is_supported_netmail_addr(scfg_t* cfg, const char* addr) +{ + switch (smb_netaddr_type(addr)) { + case NET_FIDO: + return INT_TO_BOOL(cfg->total_faddrs && (cfg->netmail_misc&NMAIL_ALLOW)); + case NET_INTERNET: + return INT_TO_BOOL(cfg->inetmail_misc&NMAIL_ALLOW); + case NET_QWK: + { + char fulladdr[256] = ""; + const char* p = strchr(addr, '@'); + if(p == NULL) + return FALSE; + qwk_route(cfg, p + 1, fulladdr, sizeof(fulladdr)-1); + return fulladdr[0] != 0; + } + } + return FALSE; +} diff --git a/src/sbbs3/newuser.cpp b/src/sbbs3/newuser.cpp index 0576109e0a6e04c2da53f9dfcebf7c85cb6a9a3f..da773b4116cdb985993ccb86c2acb0a75faed934 100644 --- a/src/sbbs3/newuser.cpp +++ b/src/sbbs3/newuser.cpp @@ -152,7 +152,26 @@ BOOL sbbs_t::newuser() } else useron.misc&=~AUTOTERM; - if(!(useron.misc&AUTOTERM)) { + while(text[HitYourBackspaceKey][0] && !(useron.misc&(PETSCII|SWAP_DELETE)) && online) { + bputs(text[HitYourBackspaceKey]); + uchar key = getkey(K_NONE); + bprintf(text[CharacterReceivedFmt], key, key); + if(key == '\b') + break; + if(key == DEL) { + if(text[SwapDeleteKeyQ][0] == 0 || yesno(text[SwapDeleteKeyQ])) + useron.misc |= SWAP_DELETE; + } + else if(key == PETSCII_DELETE) + useron.misc |= (PETSCII|COLOR); + else { + bprintf(text[InvalidBackspaceKeyFmt], key, key); + if(text[ContinueQ][0] && !yesno(text[ContinueQ])) + return FALSE; + } + } + + if(!(useron.misc&(AUTOTERM|PETSCII))) { if(text[AnsiTerminalQ][0] && yesno(text[AnsiTerminalQ])) useron.misc|=ANSI; else @@ -173,25 +192,6 @@ BOOL sbbs_t::newuser() else useron.rows = TERM_ROWS_DEFAULT; - while(text[HitYourBackspaceKey][0] && !(useron.misc&(PETSCII|SWAP_DELETE)) && online) { - bputs(text[HitYourBackspaceKey]); - uchar key = getkey(K_NONE); - bprintf(text[CharacterReceivedFmt], key, key); - if(key == '\b') - break; - if(key == DEL) { - if(text[SwapDeleteKeyQ][0] == 0 || yesno(text[SwapDeleteKeyQ])) - useron.misc |= SWAP_DELETE; - } - else if(key == PETSCII_DELETE) - useron.misc |= (AUTOTERM|PETSCII|COLOR); - else { - bprintf(text[InvalidBackspaceKeyFmt], key, key); - if(text[ContinueQ][0] && !yesno(text[ContinueQ])) - return FALSE; - } - } - if(useron.misc&PETSCII) { autoterm |= PETSCII; outcom(PETSCII_UPPERLOWER); @@ -328,10 +328,10 @@ BOOL sbbs_t::newuser() && !trashcan(useron.netmail,"email")) break; } - if(useron.netmail[0] && cfg.sys_misc&SM_FWDTONET && text[ForwardMailQ][0] && yesno(text[ForwardMailQ])) + useron.misc&=~NETMAIL; + if((cfg.sys_misc&SM_FWDTONET) && is_supported_netmail_addr(&cfg, useron.netmail) && yesno(text[ForwardMailQ])) useron.misc|=NETMAIL; - else - useron.misc&=~NETMAIL; + if(text[UserInfoCorrectQ][0]==0 || yesno(text[UserInfoCorrectQ])) break; } diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index dd2b758a1047cba22299030d2732da5070a1796f..b4bf668eea866857092cdb727788f3a626111e28 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -1294,6 +1294,9 @@ extern "C" { /* qwk.cpp */ DLLEXPORT int qwk_route(scfg_t*, const char *inaddr, char *fulladdr, size_t maxlen); + /* netmail.cpp */ + DLLEXPORT BOOL is_supported_netmail_addr(scfg_t*, const char* addr); + /* con_out.cpp */ unsigned char cp437_to_petscii(unsigned char); diff --git a/src/sbbs3/useredit.cpp b/src/sbbs3/useredit.cpp index 787a2953c0c1fd046c61d15d0e48614cb0b964d4..74857c00035230591b3f8a591032200f250432ed 100644 --- a/src/sbbs3/useredit.cpp +++ b/src/sbbs3/useredit.cpp @@ -1082,11 +1082,9 @@ void sbbs_t::maindflts(user_t* user) if(sys_status&SS_ABORT) break; putuserrec(&cfg,user->number,U_NETMAIL,LEN_NETMAIL,user->netmail); - if(user->netmail[0] == 0 || noyes(text[ForwardMailQ])) - user->misc&=~NETMAIL; - else { - user->misc|=NETMAIL; - } + user->misc &= ~NETMAIL; + if(is_supported_netmail_addr(&cfg, user->netmail) && !noyes(text[ForwardMailQ])) + user->misc |= NETMAIL; putuserrec(&cfg,user->number,U_MISC,8,ultoa(user->misc,str,16)); break; case 'C': diff --git a/text/sbbs.msg b/text/sbbs.msg index 7dd0d8e3ca1e28d98421cd74aa375cb0c1e2c8cc..711e55aefaa75c680e04d43c4199285a714fc5ae 100644 --- a/text/sbbs.msg +++ b/text/sbbs.msg @@ -10,7 +10,7 @@ w Synchronet BBS for @PLATFORM@ - Version @FULL_VER@ w @COPYRIGHT@ - http://www.synchro.net gh -32-bit Multi-threaded Bulletin Board System Software for the Internet Age +Native Multi-threaded Bulletin Board System Software for the Internet Age ng Integrated TCP/IP Servers: hong Telnet/RLogin/SSH hong SMTP/POP3 (inbound and outbound e-mail) @@ -19,7 +19,7 @@ Integrated TCP/IP Servers: hong Telnet/RLogin/SSH hong Web (HTTP with server-side JavaScript and CGI) hong Finger, Gopher, and IRC h -Native versions for Win32 and Unix (e.g. Linux, FreeBSD, and OpenBSD) platforms +Native versions for Win32 and Unix-like (e.g. Linux and FreeBSD) platforms n@CLS@----------------------------------------------------------------------------- hRemembering these keys will help you enjoy your cSynchronetw Telnet experience: n-----------------------------------------------------------------------------