--- sbbs/src/sbbs3/ntsvcs.c 2018/04/24 16:41:23 1.1 +++ sbbs/src/sbbs3/ntsvcs.c 2018/04/24 16:43:16 1.1.1.2 @@ -2,13 +2,13 @@ /* Synchronet BBS as a set of Windows NT Services */ -/* $Id: ntsvcs.c,v 1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: ntsvcs.c,v 1.1.1.2 2018/04/24 16:43:16 root Exp $ */ /**************************************************************************** * @format.tab-size 4 (Plain Text/Source Code File Header) * * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * * * - * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html * + * Copyright 2011 Rob Swindell - http://www.synchro.net/copyright.html * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License * @@ -70,6 +70,7 @@ ftp_startup_t ftp_startup; mail_startup_t mail_startup; services_startup_t services_startup; web_startup_t web_startup; +link_list_t login_attempt_list; typedef struct { char* name; @@ -92,7 +93,7 @@ typedef struct { sbbs_ntsvc_t bbs ={ NTSVC_NAME_BBS, - "Synchronet Telnet/RLogin/SSH Server", + "Synchronet Terminal Server", "Provides support for Telnet, RLogin, and SSH clients and executes timed events. " \ "This service provides the critical functions of your Synchronet BBS.", &bbs_startup, @@ -274,12 +275,13 @@ static WORD event_type(int level) /**************************************/ /* Common Service Log Ouptut Function */ /**************************************/ -static int svc_lputs(void* p, int level, char* str) +static int svc_lputs(void* p, int level, const char* str) { char debug[1024]; char fname[256]; DWORD len; DWORD wr; + log_msg_t msg; sbbs_ntsvc_t* svc = (sbbs_ntsvc_t*)p; /* Debug Logging */ @@ -291,6 +293,9 @@ static int svc_lputs(void* p, int level, return(0); len = strlen(str); + SAFECOPY(msg.buf, str); + msg.level = level; + GetLocalTime(&msg.time); /* Mailslot Logging (for sbbsctrl) */ if(svc->log_handle != INVALID_HANDLE_VALUE /* Invalid log handle? */ @@ -313,7 +318,8 @@ static int svc_lputs(void* p, int level, ); } if(svc->log_handle != INVALID_HANDLE_VALUE) { - if(!WriteFile(svc->log_handle,str,len,&wr,NULL) || wr!=len) { + len=sizeof(msg); + if(!WriteFile(svc->log_handle,&msg,len,&wr,NULL) || wr!=len) { /* This most likely indicates the server closed the mailslot */ sprintf(debug,"!ERROR %d writing %u bytes to %s pipe (wr=%d)" ,GetLastError(),len,svc->name,wr); @@ -346,15 +352,6 @@ static int svc_lputs(void* p, int level, return(0); } -/****************************************************************************/ -/* Event thread local/log print routine */ -/****************************************************************************/ -static int event_lputs(int level, char *str) -{ - svc_lputs(&event,level,str); - return(0); -} - /************************************/ /* Shared Service Callback Routines */ /************************************/ @@ -1204,6 +1201,8 @@ int main(int argc, char** argv) printf("\nSynchronet NT Services Version %s%c %s\n\n" ,VERSION,REVISION,COPYRIGHT_NOTICE); + loginAttemptListInit(&login_attempt_list); + ctrl_dir=getenv("SBBSCTRL"); /* read from environment variable */ if(ctrl_dir==NULL || ctrl_dir[0]==0) { ctrl_dir="\\sbbs\\ctrl"; /* Not set? Use default */ @@ -1218,11 +1217,13 @@ int main(int argc, char** argv) bbs_startup.size=sizeof(bbs_startup); bbs_startup.cbdata=&bbs; bbs_startup.lputs=svc_lputs; - bbs_startup.event_lputs=event_lputs; + bbs_startup.event_cbdata=&event; + bbs_startup.event_lputs=svc_lputs; bbs_startup.started=svc_started; bbs_startup.recycle=svc_recycle; bbs_startup.terminated=svc_terminated; bbs_startup.clients=svc_clients; + bbs_startup.login_attempt_list=&login_attempt_list; strcpy(bbs_startup.ctrl_dir,ctrl_dir); /* Initialize FTP startup structure */ @@ -1234,6 +1235,7 @@ int main(int argc, char** argv) ftp_startup.recycle=svc_recycle; ftp_startup.terminated=svc_terminated; ftp_startup.clients=svc_clients; + ftp_startup.login_attempt_list=&login_attempt_list; strcpy(ftp_startup.ctrl_dir,ctrl_dir); /* Initialize Web Server startup structure */ @@ -1256,6 +1258,7 @@ int main(int argc, char** argv) mail_startup.recycle=svc_recycle; mail_startup.terminated=svc_terminated; mail_startup.clients=svc_clients; + mail_startup.login_attempt_list=&login_attempt_list; strcpy(mail_startup.ctrl_dir,ctrl_dir); /* Initialize Services startup structure */ @@ -1267,6 +1270,7 @@ int main(int argc, char** argv) services_startup.recycle=svc_recycle; services_startup.terminated=svc_terminated; services_startup.clients=svc_clients; + services_startup.login_attempt_list=&login_attempt_list; strcpy(services_startup.ctrl_dir,ctrl_dir); /* Read .ini file here */ @@ -1355,7 +1359,7 @@ int main(int argc, char** argv) printf("\nAvailable Commands:\n\n"); printf("%-20s %s\n","list","to list services"); printf("%-20s %s\n","install","to install services"); - printf("%-20s %s\n","remove","to remove serivces"); + printf("%-20s %s\n","remove","to remove services"); printf("%-20s %s\n","disable","to disable services"); printf("%-20s %s\n","enable","to re-enable disabled services"); printf("%-20s %s\n","start","to start services");