[sork] Passwd 4 hook problem

Jan Schneider jan at horde.org
Thu Nov 24 10:45:02 UTC 2011


AGAIN: Don't top-post!

Zitat von "Kinglok, Fong" <busywater at gmail.com>:

> On Thu, Nov 24, 2011 at 1:45 AM, Jan Schneider <jan at horde.org> wrote:
>
>> DON'T TOP-POST.
>>
>>
>> Zitat von "Kinglok, Fong" <busywater at gmail.com>:
>>
>>  On Sun, Nov 20, 2011 at 10:10 PM, Ralf Lang <lang at b1-systems.de> wrote:
>>>
>>>  **
>>>>
>>>>
>>>> Am Samstag, 19. November 2011, 19:20:23 schrieb Kinglok, Fong:
>>>>
>>>> > I am using horde 4.0.11, IMP 5.0.14. Horde authentication is done by
>>>> SQL.
>>>>
>>>> > I also make use of horde username hook. IMP login is done by
>>>> configuring
>>>>
>>>> > the backends.php.
>>>>
>>>> >
>>>>
>>>> > I would like to use Passwd to update both passwords of horde and email
>>>>
>>>> > backend (running vpopmail). Therefore, horde (user) and vpopmail (
>>>>
>>>> > user at example.com) have to be updated in the same time. It seems me
>>>> that
>>>>
>>>> > hook of Passwd must be used.
>>>>
>>>> >
>>>>
>>>> > My method is to strip the domain from $userid in function username and
>>>> then
>>>>
>>>> > add the domain back if the backend is 'expect'.
>>>>
>>>> >
>>>>
>>>> > However, the screen just turn white whenever I try to reset a user's
>>>>
>>>> > password. After some investigation, I believe the problem is from the
>>>>
>>>> > statement: foreach ($driver->_params['drivers'] as $backend =>
>>>>
>>>> > $config) {
>>>>
>>>> >
>>>>
>>>> > Any comment?
>>>>
>>>> >
>>>>
>>>> > Kinglok, Fong
>>>>
>>>> >
>>>>
>>>> > */var/www/html/webmail/passwd/**hook.php*
>>>>
>>>> > ==============================**===
>>>>
>>>> > class Passwd_Hooks
>>>>
>>>> > {
>>>>
>>>> > /**
>>>>
>>>> > * Username hook.
>>>>
>>>> > *
>>>>
>>>> > * @param string $userid The username.
>>>>
>>>> > * @param TODO $driver TODO
>>>>
>>>> > *
>>>>
>>>> > * @return string TODO
>>>>
>>>> > */
>>>>
>>>> > public function username($userid, $driver)
>>>>
>>>> > {
>>>>
>>>> > * $userid = substr($userid,0,strpos($**userid,"@"));
>>>>
>>>> > *
>>>>
>>>> > if ($driver instanceof Passwd_Driver_Expect) {
>>>>
>>>> > return $userid . '@example.com';
>>>>
>>>> > }
>>>>
>>>> >
>>>>
>>>> > if ($driver instanceof Passwd_Driver_Composite) {
>>>>
>>>> > foreach ($driver->_params['drivers'] as $backend => $config) {
>>>>
>>>> > if ($backend == 'expect') {
>>>>
>>>> >
>>>>
>>>> > $driver->_params['drivers']['**expect']['params']['be_**username'] =
>>>> $userid
>>>> .
>>>>
>>>> > '@example.com';
>>>>
>>>> > break;
>>>>
>>>> > }
>>>>
>>>> > }
>>>>
>>>> > }
>>>>
>>>> > return $userid;
>>>>
>>>> > }
>>>>
>>>> > }
>>>>
>>>> > ==============================**===============
>>>>
>>>> >
>>>>
>>>> > */var/www/html/webmail/passwd/**backends.php*
>>>>
>>>> > ========================
>>>>
>>>> > <?php
>>>>
>>>> > $backends['composite'] = array(
>>>>
>>>> > 'name' => 'All Services',
>>>>
>>>> > 'preferred' => '',
>>>>
>>>> > 'password policy' => array(
>>>>
>>>> > 'minLength' => 3,
>>>>
>>>> > 'maxLength' => 20,
>>>>
>>>> > //'minClasses' => 2,
>>>>
>>>> > ),
>>>>
>>>> > 'driver' => 'composite',
>>>>
>>>> > 'params' => array(
>>>>
>>>> > 'drivers' => array(
>>>>
>>>> > 'sql' => array(
>>>>
>>>> > 'name' => 'Horde Authentication',
>>>>
>>>> > 'driver' => 'Sql',
>>>>
>>>> > 'required' => true,
>>>>
>>>> > 'params' => array(
>>>>
>>>> > 'phptype' => 'mysql',
>>>>
>>>> > 'hostspec' => 'localhost',
>>>>
>>>> > 'username' => 'hordeuser',
>>>>
>>>> > 'password' => 'XXXXXXXXXXX',
>>>>
>>>> > 'encryption' => 'plain',
>>>>
>>>> > 'database' => 'horde4',
>>>>
>>>> > 'table' => 'horde_users',
>>>>
>>>> > 'user_col' => 'user_uid',
>>>>
>>>> > 'pass_col' => 'user_pass',
>>>>
>>>> > 'show_encryption' => false
>>>>
>>>> > // 'query_lookup' => '',
>>>>
>>>> > // 'query_modify' => '',
>>>>
>>>> > ),
>>>>
>>>> > ),
>>>>
>>>> > 'expect' => array(
>>>>
>>>> > 'name' => 'Webmail Password',
>>>>
>>>> > 'preferred' => '',
>>>>
>>>> > 'driver' => 'expect',
>>>>
>>>> > 'required' => true,
>>>>
>>>> > 'params' => array(
>>>>
>>>> > 'program' => '/usr/bin/expect',
>>>>
>>>> > 'script' => dirname(__FILE__) .
>>>>
>>>> > '/../scripts/vpopmail_cdb_**expect',
>>>>
>>>> > 'be_username' => '',
>>>>
>>>> > ),
>>>>
>>>> > ),
>>>>
>>>> > }
>>>>
>>>> > }
>>>>
>>>> > }
>>>>
>>>>
>>>> Youse the composite backend.
>>>>
>>>>  Hi,
>>>
>>> Following the advice to setup php error logging, I caught the following
>>> log
>>> when changing password:
>>> Nov 22 20:44:05 mail apache2: PHP Fatal error:  Cannot access protected
>>> property Passwd_Driver_Composite::$_**params in
>>> /var/www/html/horde4/passwd/**config/hooks.php on line 36
>>> Nov 22 20:44:05 mail apache2: PHP Fatal error:  Cannot access protected
>>> property Passwd_Driver_Composite::$_**params in
>>> /var/www/html/horde4/passwd/**config/hooks.php on line 36
>>> Nov 22 20:44:05 mail apache2: PHP Fatal error:  Cannot access protected
>>> property Passwd_Driver_Composite::$_**params in
>>> /var/www/html/horde4/passwd/**config/hooks.php on line 36
>>>
>>> Should I file a bug?
>>>
>>
>> No, because it isn't a bug. You are trying to access a protected property
>> in the hook. The bug is in your code.
>>
> I am sorry to cause you trouble, I did not mean to abuse the bug report
> system.  As I am not a programmer, I know too little on coding.
>
> What I did is to follow the example show in
> /var/www/html/horde4/passwd/config/hook.php.dist and modify to suit my
> need.  Would you like to show how I can return user at example instead of user
> in using expect inside the composite driver?
>
> I believe, many users, like me, love using horde as to change password for
> multiple systems, including email, wifi-authentication, samba and horde
> itself.

And yet again: I already said that this should work out of the box if  
configuring a composite driver. If it doesn't, then *this* is a bug  
that should be reported, but not any errors that you introduce yourself.



More information about the sork mailing list