--- sbbs/src/sbbs3/js_file_area.c 2018/04/24 16:41:23 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 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;