--- sbbs/src/sbbs3/js_xtrn_area.c 2018/04/24 16:41:23 1.1.1.1 +++ sbbs/src/sbbs3/js_xtrn_area.c 2018/04/24 16:43:46 1.1.1.2 @@ -2,13 +2,13 @@ /* Synchronet JavaScript "External Program Area" Object */ -/* $Id: js_xtrn_area.c,v 1.1.1.1 2018/04/24 16:41:23 root Exp $ */ +/* $Id: js_xtrn_area.c,v 1.1.1.2 2018/04/24 16:43:46 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 2009 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 * @@ -48,6 +48,7 @@ static char* xtrn_sec_prop_desc[] = { ,"external program section internal code" ,"external program section name" ,"external program section access requirements" + ,"user has sufficient access to enter this section (introduced in v3.15)" ,NULL }; @@ -72,6 +73,7 @@ static char* xtrn_prog_prop_desc[] = { ,"maximum time allowed in program" ,"execution cost (credits to run this program)" /* Insert here */ + ,"user has sufficient access to see this program" ,"user has sufficient access to run this program" ,NULL }; @@ -181,7 +183,7 @@ BOOL DLLCALL js_CreateXtrnProgProperties JSObject* DLLCALL js_CreateXtrnAreaObject(JSContext* cx, JSObject* parent, scfg_t* cfg - ,user_t* user) + ,user_t* user, client_t* client) { JSObject* areaobj; JSObject* allsec; @@ -244,7 +246,7 @@ JSObject* DLLCALL js_CreateXtrnAreaObjec return(NULL); sec_index=-1; - if(user==NULL || chk_ar(cfg,cfg->xtrnsec[l]->ar,user)) { + if(user==NULL || chk_ar(cfg,cfg->xtrnsec[l]->ar,user,client)) { if(!JS_GetArrayLength(cx, sec_list, &sec_index)) return(NULL); @@ -285,6 +287,13 @@ JSObject* DLLCALL js_CreateXtrnAreaObjec if(!JS_SetProperty(cx, secobj, "ars", &val)) return(NULL); + if(user==NULL || chk_ar(cfg,cfg->xtrnsec[l]->ar,user,client)) + val=JSVAL_TRUE; + else + val=JSVAL_FALSE; + if(!JS_SetProperty(cx, secobj, "can_access", &val)) + return(NULL); + /* prog_list[] */ if((prog_list=JS_NewArrayObject(cx, 0, NULL))==NULL) return(NULL); @@ -305,7 +314,7 @@ JSObject* DLLCALL js_CreateXtrnAreaObjec return(NULL); prog_index=-1; - if((user==NULL || chk_ar(cfg,cfg->xtrn[d]->ar,user)) + if((user==NULL || chk_ar(cfg,cfg->xtrn[d]->ar,user,client)) && !(cfg->xtrn[d]->event && cfg->xtrn[d]->misc&EVENTONLY)) { if(!JS_GetArrayLength(cx, prog_list, &prog_index)) @@ -344,7 +353,14 @@ JSObject* DLLCALL js_CreateXtrnAreaObjec if(!js_CreateXtrnProgProperties(cx, progobj, cfg->xtrn[d])) return(NULL); - if(user==NULL || chk_ar(cfg,cfg->xtrn[d]->run_ar,user)) + if(user==NULL || chk_ar(cfg,cfg->xtrn[d]->ar,user,client)) + val=JSVAL_TRUE; + else + val=JSVAL_FALSE; + if(!JS_SetProperty(cx, progobj, "can_access", &val)) + return(NULL); + + if(user==NULL || chk_ar(cfg,cfg->xtrn[d]->run_ar,user,client)) val=JSVAL_TRUE; else val=JSVAL_FALSE; @@ -420,6 +436,10 @@ JSObject* DLLCALL js_CreateXtrnAreaObjec ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY)) return(NULL); + if(!JS_DefineProperty(cx, eventobj, "months", INT_TO_JSVAL(cfg->event[l]->months) + ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY)) + return(NULL); + if(!JS_DefineProperty(cx, eventobj, "last_run", INT_TO_JSVAL(cfg->event[l]->last) ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY)) return(NULL); @@ -448,7 +468,7 @@ JSObject* DLLCALL js_CreateXtrnAreaObjec for(l=0;ltotal_xedits;l++) { - if(user!=NULL && !chk_ar(cfg,cfg->xedit[l]->ar,user)) + if(user!=NULL && !chk_ar(cfg,cfg->xedit[l]->ar,user,client)) continue; if((xeditobj=JS_NewObject(cx, NULL, NULL, NULL))==NULL)