--- 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)