diff --git a/ctrl/services.ini b/ctrl/services.ini index 75b9ddca43e276f717b55d3a0172b5bbfddd79f4..7a55ffd408feb037ef52b288f83a8f706dcc7133 100644 --- a/ctrl/services.ini +++ b/ctrl/services.ini @@ -22,6 +22,7 @@ ListenBacklog=5 ; Interface (default: network interface IP address specified in sbbs.ini [services]) ; Host (default: unspecified) - only run on the specified hostname ; NotHost (default: unspecified) - do not run on the specified hostname +; LoginRequirements (default: none) - access requirements (ARS) for logging-into this service ; Advanced JavaScript execution keys: ; JavaScriptMaxBytes diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 968899b1cf93a1bb08b2848064b9f5de8d3b8ca7..2cff60677b6aa859af3784094ba2c5b26fdc8c26 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -78,6 +78,7 @@ typedef struct { struct in6_addr outgoing6; char protocol[34]; char cmd[128]; + char login_ars[LEN_ARSTR + 1]; uint max_clients; uint32_t options; int listen_backlog; @@ -449,6 +450,13 @@ js_login(JSContext *cx, uintN argc, jsval *arglist) JS_RESUMEREQUEST(cx, rc); return(JS_TRUE); } + if(!chk_ars(&scfg, client->service->login_ars, &client->user, client->client)) { + lprintf(LOG_NOTICE,"%04d %s <%s> !Insufficient service access: %s" + ,client->socket, client->service->protocol, client->user.alias, client->service->login_ars); + badlogin(client->socket, user, NULL, client->client, &client->addr); + JS_RESUMEREQUEST(cx, rc); + return(JS_TRUE); + } JS_RESUMEREQUEST(cx, rc); @@ -1628,6 +1636,7 @@ static service_t* read_services_ini(const char* services_ini, service_t* service char cmd[INI_MAX_VALUE_LEN]; char host[INI_MAX_VALUE_LEN]; char prot[INI_MAX_VALUE_LEN]; + char value[INI_MAX_VALUE_LEN]; char portstr[INI_MAX_VALUE_LEN]; char** sec_list; str_list_t list; @@ -1675,6 +1684,8 @@ static service_t* read_services_ini(const char* services_ini, service_t* service serv.log_level=iniGetLogLevel(list,sec_list[i],"LogLevel",log_level); serv.lowest_log_level=iniGetLogLevel(list,sec_list[i],"LowestLogLevel",0); SAFECOPY(serv.cmd,iniGetString(list,sec_list[i],"Command","",cmd)); + SAFECOPY(serv.login_ars + ,iniGetString(list, sec_list[i], "LoginRequirements", "", value)); p=iniGetString(list,sec_list[i],"Port",serv.protocol,portstr); if(IS_DIGIT(*p))