/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2014, Tomasz Sowa * All rights reserved. * */ #include "mkdir.h" #include "functions.h" #include "core/plugin.h" namespace Winix { namespace Fun { Mkdir::Mkdir() { fun.url = L"mkdir"; } bool Mkdir::HasAccess(const Item & item) { // you can create a directory only in a directory if( item.type != Item::dir ) return false; if( cur->session->puser && cur->session->puser->super_user ) // super user can use mkdir everywhere return true; if( !system->HasWriteAccess(item) ) return false; if( !system->mounts.pmount->IsPar(system->mounts.MountParMkdirOn()) ) return true; if( system->mounts.pmount->IsArg(system->mounts.MountParMkdirOn(), cur->request->dir_tab.size()) ) return true; return false; } bool Mkdir::HasAccess() { if( cur->request->is_item || !HasAccess(*cur->request->dir_tab.back()) ) return false; return true; } void Mkdir::PostFunMkdir(bool add_to_dir_tab, int privileges) { functions->ReadItem(cur->request->item, Item::dir); functions->SetUser(cur->request->item); cur->request->item.privileges = privileges; Item * pdir; cur->request->status = system->dirs.AddDirectory(cur->request->item, add_to_dir_tab, &pdir); if( cur->request->status == WINIX_ERR_OK ) { if( pdir ) plugin.Call(WINIX_DIR_ADDED, pdir); system->RedirectTo(cur->request->item); } else { log << log1 << "Content: PostFunMkdir: Error: " << cur->request->status << logend; } } void Mkdir::MakePost() { PostFunMkdir(false, system->NewDirPrivileges()); } } // namespace } // namespace Winix