Summary | cannot add ACLs to kolab's default tasklist "Aufgaben" (German) |
Queue | Kolab |
Type | Bug |
State | Resolved |
Priority | 2. Medium |
Owners | wrobel (at) horde (dot) org |
Requester | m.gabriel (at) das-netzwerkteam (dot) de |
Created | 12/25/2007 (6402 days ago) |
Due | |
Updated | 04/25/2008 (6280 days ago) |
Assigned | 04/25/2008 (6280 days ago) |
Resolved | 04/25/2008 (6280 days ago) |
Github Issue Link | |
Github Pull Request | |
Milestone | |
Patch | No |
State ⇒ Resolved
problem persists.
the location of the error does indicate that your Share/kolab.php
file does not seem to match Horde CVS. Are there any additional
patches applied? If you use the current Share/kolab.php from
FRAMEWORK_3 you should have the getACL call on line 1236.
and: yes, indeed, i have the distlist patch in the Share/kolab.php.
the corresponding location is line 1236 in vanilla FRAMEWORK_3.
mike
State ⇒ Feedback
the location of the error does indicate that your Share/kolab.php file
does not seem to match Horde CVS. Are there any additional patches
applied? If you use the current Share/kolab.php from FRAMEWORK_3 you
should have the getACL call on line 1236.
If you deactivate share caching, does the problem persist?
here is a var_dump of the object that causes the error (_imap points
to NULL!?!?)... is the ImapFolder_Permission constructor call faulty?
object(ImapFolder_Permission)#23 (7) { ["_folder"]=> string(23)
"INBOX/Aufgaben (AIKIDO)" ["_imap"]=> &NULL ["data"]=> array(1) {
["users"]=> array(2) { ["m.gabriel@das-netzwerkteam.de"]=> int(30)
["c.music@das-netzwerkteam.de"]=> int(6) } } ["_owner"]=> string(29)
"m.gabriel@das-netzwerkteam.de" ["datatree"]=> NULL ["name"]=> NULL
["order"]=> NULL }
Fatal error: Call to a member function getACL() on a non-object in
/usr/local/share/_horde-versions_/horde3-kolab-cvs/horde/lib/Horde/Share/kolab.php on line
1452
best,
mike
<quote>
Fatal error: Call to a member function getACL() on a non-object in
/usr/local/share/_horde-versions_/horde3-kolab-cvs/horde/lib/Horde/Share/kolab.php on line
1451
</quote>
report I assume it is the same kind of problems since the arrays were
messed up in the Kolab driver. Closing for now, please reopen if the
problem persists.
tested it...
mike
State ⇒ Resolved
report I assume it is the same kind of problems since the arrays were
messed up in the Kolab driver. Closing for now, please reopen if the
problem persists.
State ⇒ Assigned
that it is installed, there is no change...
suhosin is gone from the phpinfo page, re-tested, and still have the
issue?
compiled you need a different PHP build.
suhosin is comiled into php5, but you can only configure it, when the
suhosin.so extension is loaded...
the bug occured already without php5-suhosin extension installed. now
that it is installed, there is no change...
hmmm...
compiled you need a different PHP build.
broken PHP behavior we've seen.
suhosin diabled (i.e. compile from source)? could not find any hints
to that with google search...
during a single page request. It helps prevent duplicate fetching of a
single share during one page load.
Can you try turning off suhosin? It's been the weak link in a lot of
broken PHP behavior we've seen.
i have replaced the original method in lib/Horde/Share.php:
function &getShareById($cid)
{
if (!isset($this->_shareMap[$cid])) {
$share = &$this->_getShareById($cid);
if (is_a($share, 'PEAR_Error')) {
return $share;
}
$share->setShareOb($this);
$name = $share->getName();
$this->_cache[$name] = &$share;
$this->_shareMap[$cid] = $name;
}
return $this->_cache[$this->_shareMap[$cid]];
}
by my own debug version (what it does: do not use _cache, but update _cache):
function &getShareById($cid)
{
$share = &$this->_getShareById($cid);
if (is_a($share, 'PEAR_Error')) {
return $share;
}
$share->setShareOb($this);
$name = $share->getName();
$this->_cache[$name] = &$share;
$this->_shareMap[$cid] = $name;
return $share
}
this debug method raises the same error...
BUT!!! if i comment out one line in my this debug method, it suddenly
works (although on the first spot this does not make sense...):
function &getShareById($cid)
{
$share = &$this->_getShareById($cid);
if (is_a($share, 'PEAR_Error')) {
return $share;
}
$share->setShareOb($this);
$name = $share->getName();
$this->_cache[$name] = &$share;
/*
* $this->_shareMap[$cid] = $name;
*/
return $share
}
and the return value of the original getShareById() method is exactly
what is stored in $this->_shareMap[$cid] ("INBOX/Aufgaben",
"INBOX/Aufgaben (PRIVAT)", etc. i.e. the corresponding share name).
is it possible that $this->_cache[$name] and $this->_shareMap[$cid]
refer to the same data structure????
weird things going on in php...
BTW: where is the _shareMap stored? datatree, php session, filesystem?
hope this helps...
mike
when it's assigned there
both with and without the reference?
my debug prints and var_dumps?
mike
horde-webmail-1.1rc1 returns a string: "INBOX/Aufgaben" (which is the
kolab user default task folder in Germain).
State ⇒ Feedback
certainly is not the fix; we need to find out why doing that fixes
things in your case. What PHP version are you using? What is $share
when it's assigned there, and then later on the error, what is it both
with and without the reference?
Priority ⇒ 2. Medium
State ⇒ Unconfirmed
New Attachment: share.patch
Queue ⇒ Kolab
Type ⇒ Bug
Summary ⇒ cannot add ACLs to kolab's default tasklist "Aufgaben" (German)
i cannot add ACLs to kolab's default tasklist "Aufgaben" (German), the
php error says:
Fatal error: Call to a member function get() on a non-object in
/usr/local/share/_horde-versions_/horde-webmail-1.1-rc1-netzwerkteam/services/shares/edit.php on line
67
i have tracked the issue down to lib/Horde/Share.php and with kolab my
fix now works fine, not sure about other backends...
diff -ur horde-webmail-1.1-rc1/lib/Horde/Share.php
horde-webmail-1.1-rc1-netzwerkteam/lib/Horde/Share.php
--- horde-webmail-1.1-rc1/lib/Horde/Share.php 2007-11-29
12:32:53.000000000 +0000
+++ horde-webmail-1.1-rc1-netzwerkteam/lib/Horde/Share.php
2007-12-25 23:57:02.000000000 +0000
@@ -212,7 +212,7 @@
}
$share->setShareOb($this);
$name = $share->getName();
- $this->_cache[$name] = &$share;
+ $this->_cache[$name] = $share;
$this->_shareMap[$cid] = $name;
}