X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_CopyPasteHandler.inc;h=1d6a1f04ac07b87f3308f9074ec63a0eea69e489;hb=0a6e4edb849c77f68b4276cc7961367de2ce299d;hp=669eecbdb97a36aa9082aa00bea1da511a8e7ed0;hpb=c002fa50ab9e19fae8cfe07c63c636440910d2ef;p=gosa.git diff --git a/include/class_CopyPasteHandler.inc b/include/class_CopyPasteHandler.inc index 669eecbdb..1d6a1f04a 100644 --- a/include/class_CopyPasteHandler.inc +++ b/include/class_CopyPasteHandler.inc @@ -18,9 +18,9 @@ class CopyPasteHandler { /* Create CP handler */ - function CopyPasteHandler($config) + function CopyPasteHandler(&$config) { - $this->config = $config; + $this->config = &$config; $this->current= NULL; $this->queue = array(); $this->setvar_array = array(); @@ -35,7 +35,7 @@ class CopyPasteHandler { * array['tab_class'] - Tab object that should be used to initialize the new object * array['tab_object'] - Tab object name used to initialize correct object Type like USERTABS */ - function add_to_queue($dn,$action,$tab_class,$tab_object) + function add_to_queue($dn,$action,$tab_class,$tab_object,$tab_acl_category) { if(!class_exists($tab_class)){ trigger_error(sprintf("Specified class object '%s' does not exists.",$tab_class)); @@ -59,6 +59,7 @@ class CopyPasteHandler { $tmp['dn'] = $dn; $tmp['tab_class'] = $tab_class; $tmp['tab_object']= $tab_object; + $tmp['tab_acl_category']= $tab_acl_category; $this->queue[] = $tmp; } } @@ -79,6 +80,19 @@ class CopyPasteHandler { unset($this->queue[$key]); } + /* Create patch if it doesn't exists */ + if(!is_dir(LDAP_DUMP_PATH)){ + @mkdir(LDAP_DUMP_PATH); + } + + /* check if we are able to create a new file the given directory */ + if(!is_writeable(LDAP_DUMP_PATH)){ + print_red(sprintf(_("Could not cleanup copy & paste queue. We are not allowed to save ldap dump to '%s', please check permissions."),LDAP_DUMP_PATH)); + new log("copy","all/all","copy & paste, event queue.",array(), + sprintf("Could not cleanup copy & paste queue. We are not allowed to save ldap dump to '%s', please check permissions.",LDAP_DUMP_PATH)); + return(FALSE); + } + /* Remove entries from hdd that are older than24 hours */ $fp = opendir(LDAP_DUMP_PATH); while($file = readdir($fp)){ @@ -168,11 +182,12 @@ class CopyPasteHandler { $entry = $this->queue[$key]; $tab_c = $entry['tab_class']; $tab_o = $entry['tab_object']; + $tab_a = $entry['tab_acl_category']; if($entry['method'] == "copy"){ - $entry['object'] = new $tab_c($this->config,$this->config->data['TABS'][$tab_o],"new"); + $entry['object'] = new $tab_c($this->config,$this->config->data['TABS'][$tab_o],"new",$tab_a); }else{ - $entry['object'] = new $tab_c($this->config,$this->config->data['TABS'][$tab_o],$entry['dn']); + $entry['object'] = new $tab_c($this->config,$this->config->data['TABS'][$tab_o],$entry['dn'],$tab_a); } $entry['source_data'] = $this->load_attributes_from_hdd($entry['file_name']); @@ -226,6 +241,7 @@ class CopyPasteHandler { Create unique names, ids, or what ever */ function execute() { + $ui = get_userinfo(); $type = $this->current['method']; if($type == "cut"){ if(isset($_POST['PerformCopyPaste'])){ @@ -234,7 +250,12 @@ class CopyPasteHandler { $this->_update_vars(); $msgs = $this->check(); - if(count ($msgs) ){ + $acl = $ui->get_category_permissions($this->current['dn'], $this->current['tab_acl_category']); + + /* Check permissions */ + if(!preg_match("/((c|w)|(w|c))/",$acl)){ + print_red(sprintf(_("You are not allowed to cut and paste the following object '%s'."),$this->current['dn'])); + }elseif(count ($msgs) ){ foreach( $msgs as $msg){ print_red($msg); } @@ -269,7 +290,13 @@ class CopyPasteHandler { if(isset($_POST['PerformCopyPaste'])){ $this->_update_vars(); $msgs = $this->check(); - if(count ($msgs) ){ + + $acl = $ui->get_category_permissions($this->current['dn'], $this->current['tab_acl_category']); + + /* Check permissions */ + if(!preg_match("/((c|w)|(w|c))/",$acl)){ + print_red(sprintf(_("You are not allowed to copy and paste the following object '%s'."),$this->current['dn'])); + }elseif(count ($msgs) ){ foreach( $msgs as $msg){ print_red($msg); }