--- sbbs/src/sbbs3/js_file_area.c 2018/04/24 16:41:23 1.1.1.1
+++ sbbs/src/sbbs3/js_file_area.c 2018/04/24 16:43:41 1.1.1.2
@@ -2,13 +2,13 @@
/* Synchronet JavaScript "File Area" Object */
-/* $Id: js_file_area.c,v 1.1.1.1 2018/04/24 16:41:23 root Exp $ */
+/* $Id: js_file_area.c,v 1.1.1.2 2018/04/24 16:43:41 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 *
@@ -42,7 +42,7 @@
#ifdef BUILD_JSDOCS
static char* file_area_prop_desc[] = {
- "minimum amount of available disk space (in bytes) required for user uploads to be allowed"
+ "minimum amount of available disk space (in kilobytes) required for user uploads to be allowed"
,"file area settings (bitfield) - see FM_* in sbbsdefs.js for details"
,NULL
};
@@ -98,7 +98,7 @@ static char* dir_prop_desc[] = {
JSObject* DLLCALL js_CreateFileAreaObject(JSContext* cx, JSObject* parent, scfg_t* cfg
- ,user_t* user, char* html_index_file)
+ ,user_t* user, client_t* client, char* html_index_file)
{
char vpath[MAX_PATH+1];
JSObject* areaobj;
@@ -113,6 +113,7 @@ JSObject* DLLCALL js_CreateFileAreaObjec
jsuint lib_index;
jsuint dir_index;
uint l,d;
+ BOOL is_op;
/* Return existing object if it's already been created */
if(JS_GetProperty(cx,parent,"file_area",&val) && val!=JSVAL_VOID)
@@ -172,7 +173,7 @@ JSObject* DLLCALL js_CreateFileAreaObjec
val=OBJECT_TO_JSVAL(libobj);
lib_index=-1;
- if(user==NULL || chk_ar(cfg,cfg->lib[l]->ar,user)) {
+ if(user==NULL || chk_ar(cfg,cfg->lib[l]->ar,user,client)) {
if(!JS_GetArrayLength(cx, lib_list, &lib_index))
return(NULL);
@@ -240,7 +241,7 @@ JSObject* DLLCALL js_CreateFileAreaObjec
val=OBJECT_TO_JSVAL(dirobj);
dir_index=-1;
- if(user==NULL || chk_ar(cfg,cfg->dir[d]->ar,user)) {
+ if(user==NULL || chk_ar(cfg,cfg->dir[d]->ar,user,client)) {
if(!JS_GetArrayLength(cx, dir_list, &dir_index))
return(NULL);
@@ -407,8 +408,16 @@ JSObject* DLLCALL js_CreateFileAreaObjec
if(!JS_SetProperty(cx, dirobj, "link", &val))
return(NULL);
+ if(user!=NULL
+ && (user->level>=SYSOP_LEVEL
+ || (cfg->dir[d]->op_ar[0]!=0
+ && chk_ar(cfg,cfg->dir[d]->op_ar,user,client))))
+ is_op=TRUE;
+ else
+ is_op=FALSE;
+
if(user==NULL
- || (chk_ar(cfg,cfg->dir[d]->ul_ar,user) && !(user->rest&FLAG('U'))))
+ || ((is_op || user->exempt&FLAG('U') || chk_ar(cfg,cfg->dir[d]->ul_ar,user,client)) && !(user->rest&FLAG('U'))))
val=JSVAL_TRUE;
else
val=JSVAL_FALSE;
@@ -416,24 +425,21 @@ JSObject* DLLCALL js_CreateFileAreaObjec
return(NULL);
if(user==NULL
- || (chk_ar(cfg,cfg->dir[d]->dl_ar,user) && !(user->rest&FLAG('D'))))
+ || (chk_ar(cfg,cfg->dir[d]->dl_ar,user,client) && !(user->rest&FLAG('D'))))
val=JSVAL_TRUE;
else
val=JSVAL_FALSE;
if(!JS_SetProperty(cx, dirobj, "can_download", &val))
return(NULL);
- if(is_download_free(cfg,d,user))
+ if(is_download_free(cfg,d,user,client))
val=JSVAL_TRUE;
else
val=JSVAL_FALSE;
if(!JS_SetProperty(cx, dirobj, "is_exempt", &val))
return(NULL);
- if(user!=NULL
- && (user->level>=SYSOP_LEVEL
- || (cfg->dir[d]->op_ar[0]!=0
- && chk_ar(cfg,cfg->dir[d]->op_ar,user))))
+ if(is_op)
val=JSVAL_TRUE;
else
val=JSVAL_FALSE;