2003-12-20 21:42:52 +00:00
< ? php
/*
$Id $
This code is part of LDAP Account Manager ( http :// www . sourceforge . net / projects / lam )
2006-03-03 17:30:35 +00:00
Copyright ( C ) 2003 - 2006 Tilo Lutz
2003-12-20 21:42:52 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
2005-07-21 10:33:02 +00:00
/**
* Manages Samba 2 accounts for users and hosts .
*
* @ package modules
*
* @ author Tilo Lutz
* @ author Roland Gruber
* @ author Michael Duergner
*/
/**
* Manages the object class " sambaAccount " for users and hosts.
*
* @ package modules
*/
2004-06-08 18:54:37 +00:00
class sambaAccount extends baseModule {
2004-07-03 16:12:51 +00:00
/**
* Creates a new sambaAccount object .
2004-07-05 19:41:53 +00:00
*
* @ param string $scope account type ( user , group , host )
2004-07-03 16:12:51 +00:00
*/
function sambaAccount ( $scope ) {
2004-11-17 19:14:26 +00:00
// List of well known rids
$this -> rids = array (
2006-10-22 07:45:58 +00:00
_ ( 'Domain admins' ) => 512 , _ ( 'Domain users' ) => 513 ,
_ ( 'Domain guests' ) => 514 , _ ( 'Domain computers' ) => 515 ,
_ ( 'Domain controllers' ) => 516 , _ ( 'Domain certificate admins' ) => 517 ,
_ ( 'Domain schema admins' ) => 518 , _ ( 'Domain enterprise admins' ) => 519 ,
_ ( 'Domain policy admins' ) => 520 );
2004-07-03 16:12:51 +00:00
// call parent constructor
parent :: baseModule ( $scope );
}
2004-09-26 13:48:52 +00:00
/** this functin fills the error message array with messages
**/
function load_Messages () {
// error messages for input checks
$this -> messages [ 'homePath' ][ 0 ] = array ( 'ERROR' , _ ( 'Home path' ), _ ( 'Home path is invalid.' ));
2005-06-18 16:12:01 +00:00
$this -> messages [ 'homePath' ][ 1 ] = array ( 'INFO' , _ ( 'Home path' ), _ ( 'Inserted user or group name in home path.' ));
$this -> messages [ 'homePath' ][ 2 ] = array ( 'INFO' , _ ( 'Account %s:' ) . ' sambaAccount_homePath' , _ ( 'Inserted user or group name in home path.' ));
2004-09-26 13:48:52 +00:00
$this -> messages [ 'profilePath' ][ 0 ] = array ( 'ERROR' , _ ( 'Profile path' ), _ ( 'Profile path is invalid!' ));
2005-06-18 16:12:01 +00:00
$this -> messages [ 'profilePath' ][ 1 ] = array ( 'INFO' , _ ( 'Profile path' ), _ ( 'Inserted user or group name in profile path.' ));
$this -> messages [ 'profilePath' ][ 2 ] = array ( 'INFO' , _ ( 'Account %s:' ) . ' sambaAccount_profilePath' , _ ( 'Inserted user or group name in profile path.' ));
2004-11-20 12:44:09 +00:00
$this -> messages [ 'logonScript' ][ 0 ] = array ( 'ERROR' , _ ( 'Logon script' ), _ ( 'Logon script is invalid!' ));
2005-06-18 16:12:01 +00:00
$this -> messages [ 'logonScript' ][ 1 ] = array ( 'INFO' , _ ( 'Logon script' ), _ ( 'Inserted user or group name in logon script.' ));
2004-11-20 12:44:09 +00:00
$this -> messages [ 'logonScript' ][ 2 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_logonScript' , _ ( 'Logon script is invalid!' ));
2004-09-26 13:48:52 +00:00
$this -> messages [ 'workstations' ][ 0 ] = array ( 'ERROR' , _ ( 'Samba workstations' ), _ ( 'Please enter a comma separated list of host names!' ));
2004-11-20 12:44:09 +00:00
$this -> messages [ 'workstations' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_workstations' , _ ( 'Please enter a comma separated list of host names!' ));
2004-09-26 13:48:52 +00:00
$this -> messages [ 'domain' ][ 0 ] = array ( 'ERROR' , _ ( 'Domain name' ), _ ( 'Domain name contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and -.' ));
2004-11-20 12:44:09 +00:00
$this -> messages [ 'domain' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_domain' , _ ( 'Domain name contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and -.' ));
2004-09-26 13:48:52 +00:00
$this -> messages [ 'lmPassword' ][ 0 ] = array ( 'ERROR' , _ ( 'Password' ), _ ( 'Please enter the same password in both password-fields.' ));
2007-05-03 19:28:12 +00:00
$this -> messages [ 'lmPassword' ][ 1 ] = array ( 'ERROR' , _ ( 'Password' ), _ ( 'Password contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and #*,.;:_-+!%&/|?{[()]}=@$ !' ));
$this -> messages [ 'lmPassword' ][ 2 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_password' , _ ( 'Password contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and #*,.;:_-+!%&/|?{[()]}=@$ !' ));
2004-11-20 12:44:09 +00:00
$this -> messages [ 'displayName' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_displayName' , _ ( 'Please enter a valid display name!' ));
2005-09-13 07:55:03 +00:00
$this -> messages [ 'displayName' ][ 1 ] = array ( 'ERROR' , _ ( 'Display name' ), _ ( 'Please enter a valid display name!' ));
2004-11-20 12:44:09 +00:00
$this -> messages [ 'pwdUnix' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_pwdUnix' , _ ( 'This value can only be \"true\" or \"false\"!' ));
$this -> messages [ 'noPassword' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_noPassword' , _ ( 'This value can only be \"true\" or \"false\"!' ));
$this -> messages [ 'noExpire' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_noExpire' , _ ( 'This value can only be \"true\" or \"false\"!' ));
$this -> messages [ 'deactivated' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_deactivated' , _ ( 'This value can only be \"true\" or \"false\"!' ));
$this -> messages [ 'pwdCanChange' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_pwdCanChange' , _ ( 'Please enter a valid date in format DD-MM-YYYY.' ));
$this -> messages [ 'pwdMustChange' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_pwdMustChange' , _ ( 'Please enter a valid date in format DD-MM-YYYY.' ));
$this -> messages [ 'homeDrive' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_homeDrive' , _ ( 'Please enter a valid drive letter.' ));
$this -> messages [ 'group' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_group' , _ ( 'Please enter a valid group RID.' ));
$this -> messages [ 'specialUser' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' sambaAccount_specialUser' , _ ( 'Please enter a valid special user name.' ));
2006-08-14 17:24:27 +00:00
2004-09-26 13:48:52 +00:00
}
2004-06-08 18:54:37 +00:00
/**
* Returns meta data that is interpreted by parent class
*
* @ return array array with meta data
*/
function get_metaData () {
$return = array ();
2004-06-13 19:58:58 +00:00
// manages user and host accounts
$return [ " account_types " ] = array ( " user " , " host " );
2004-06-08 18:54:37 +00:00
if ( $this -> get_scope () == " host " ) {
2004-06-11 15:44:49 +00:00
// LDAP filter
$return [ " ldap_filter " ] = array ( 'and' => '(uid=*$)' , 'or' => " (objectClass=posixAccount) " );
2004-06-08 18:54:37 +00:00
}
2004-06-14 16:05:36 +00:00
// alias name
$return [ " alias " ] = _ ( 'Samba 2' );
2004-06-20 17:32:02 +00:00
// module dependencies
$return [ 'dependencies' ] = array ( 'depends' => array ( 'posixAccount' ), 'conflicts' => array ());
2006-04-05 15:48:27 +00:00
// managed object classes
$return [ 'objectClasses' ] = array ( 'sambaAccount' );
2006-05-13 08:55:31 +00:00
// managed attributes
$return [ 'attributes' ] = array ( 'rid' , 'lmPassword' , 'ntPassword' , 'pwdLastSet' , 'logonTime' , 'logoffTime' ,
'kickoffTime' , 'pwdCanChange' , 'pwdMustChange' , 'acctFlags' , 'displayName' , 'smbHome' , 'homeDrive' ,
'scriptPath' , 'profilePath' , 'userWorkstations' , 'primaryGroupID' , 'domain' );
2006-04-29 09:58:17 +00:00
// PHP extensions
2006-06-29 19:43:58 +00:00
$return [ 'extensions' ] = array ( 'mhash' , 'iconv' );
2004-07-03 16:12:51 +00:00
// profile options
if ( $this -> get_scope () == 'user' ) {
// set Unix password for Samba
$return [ 'profile_options' ][] = array (
2004-11-17 19:14:26 +00:00
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Use Unix password' ) . ': ' ),
2004-07-03 16:12:51 +00:00
1 => array ( 'kind' => 'input' , 'name' => 'sambaAccount_useunixpwd' , 'type' => 'checkbox' , 'checked' => true ),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'pwdUnix' )
2004-07-03 16:12:51 +00:00
);
// set no password
$return [ 'profile_options' ][] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Use no password' ) . ': ' ),
1 => array ( 'kind' => 'input' , 'name' => 'sambaAccount_acctFlagsN' , 'type' => 'checkbox' , 'checked' => false ),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'noPassword' )
2004-07-03 16:12:51 +00:00
);
// password expiry
$return [ 'profile_options' ][] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Password does not expire' ) . ': ' ),
1 => array ( 'kind' => 'input' , 'name' => 'sambaAccount_acctFlagsX' , 'type' => 'checkbox' , 'checked' => true ),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'noExpire' )
2004-07-03 16:12:51 +00:00
);
// account deactivation
$return [ 'profile_options' ][] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Account is deactivated' ) . ': ' ),
1 => array ( 'kind' => 'input' , 'name' => 'sambaAccount_acctFlagsD' , 'type' => 'checkbox' , 'checked' => false ),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'deactivated' )
2004-07-03 16:12:51 +00:00
);
// drive letter
$drives = array ();
for ( $i = 90 ; $i > 67 ; $i -- ) $drives [] = chr ( $i ) . ':' ;
$return [ 'profile_options' ][] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Home drive' ) . ': ' ),
1 => array ( 'kind' => 'select' , 'name' => 'sambaAccount_homeDrive' , 'options' => $drives , 'options_selected' => array ( 'Z:' )),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'homeDrive' )
2004-07-03 16:12:51 +00:00
);
// path to home directory
$return [ 'profile_options' ][] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Home path' ) . ': ' ),
2004-07-05 19:41:53 +00:00
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'sambaAccount_smbhome' , 'size' => '20' , 'maxlength' => '255' , 'value' => '' ),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'homePath' )
2004-07-03 16:12:51 +00:00
);
// path to profile
$return [ 'profile_options' ][] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Profile path' ) . ': ' ),
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'sambaAccount_profilePath' , 'size' => '20' , 'maxlength' => '255' , 'value' => '' ),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'profilePath' )
2004-07-03 16:12:51 +00:00
);
// logon script
$return [ 'profile_options' ][] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Logon script' ) . ': ' ),
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'sambaAccount_scriptPath' , 'size' => '20' , 'maxlength' => '255' , 'value' => '' ),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'scriptPath' )
2004-07-03 16:12:51 +00:00
);
// allowed workstations
$return [ 'profile_options' ][] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Samba workstations' ) . ': ' ),
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'sambaAccount_userWorkstations' , 'value' => '' ),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'workstations' )
2004-07-03 16:12:51 +00:00
);
}
// Samba domain
$return [ 'profile_options' ][] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Domain' ) . ': ' ),
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'sambaAccount_domain' , 'size' => '20' , 'maxlength' => '255' , 'value' => '' ),
2004-11-17 19:14:26 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'domain' )
2004-07-03 16:12:51 +00:00
);
// profile checks
2004-09-26 15:55:29 +00:00
$return [ 'profile_checks' ][ 'sambaAccount_smbhome' ] = array ( 'type' => 'ext_preg' , 'regex' => 'UNC' ,
2004-09-26 13:48:52 +00:00
'error_message' => $this -> messages [ 'homePath' ][ 0 ]);
2004-09-26 15:55:29 +00:00
$return [ 'profile_checks' ][ 'sambaAccount_profilePath' ] = array ( 'type' => 'ext_preg' , 'regex' => 'UNC' ,
2004-09-26 13:48:52 +00:00
'error_message' => $this -> messages [ 'profilePath' ][ 0 ]);
2005-01-22 10:50:10 +00:00
$return [ 'profile_checks' ][ 'sambaAccount_scriptPath' ] = array ( 'type' => 'ext_preg' , 'regex' => 'logonscript' ,
2004-09-26 13:48:52 +00:00
'error_message' => $this -> messages [ 'logonScript' ][ 0 ]);
2004-09-26 15:55:29 +00:00
$return [ 'profile_checks' ][ 'sambaAccount_userWorkstations' ] = array ( 'type' => 'ext_preg' , 'regex' => 'unixhost' ,
2004-09-26 13:48:52 +00:00
'error_message' => $this -> messages [ 'workstations' ][ 0 ]);
2004-09-26 15:55:29 +00:00
$return [ 'profile_checks' ][ 'sambaAccount_domain' ] = array ( 'type' => 'ext_preg' , 'regex' => 'domainname' ,
2004-09-26 13:48:52 +00:00
'error_message' => $this -> messages [ 'domain' ][ 0 ]);
2005-01-22 10:50:10 +00:00
// profile mappings
$return [ 'profile_mappings' ] = array (
'sambaAccount_homeDrive' => 'homeDrive' ,
'sambaAccount_smbhome' => 'smbHome' ,
'sambaAccount_profilePath' => 'profilePath' ,
'sambaAccount_scriptPath' => 'scriptPath' ,
'sambaAccount_userWorkstations' => 'userWorkstations' ,
'sambaAccount_domain' => 'domain'
);
2004-08-17 15:16:17 +00:00
// available PDF fields
2004-10-30 16:46:06 +00:00
$return [ 'PDF_fields' ] = array (
'displayName' ,
'smbHome' ,
'homeDrive' ,
'scriptPath' ,
'profilePath' ,
'userWorkstations' ,
'domain' ,
'description'
);
2004-11-17 19:14:26 +00:00
// upload dependencies
$return [ 'upload_preDepends' ] = array ( 'posixAccount' , 'inetOrgPerson' );
// upload options
if ( $this -> get_scope () == " user " ) {
$return [ 'upload_columns' ] = array (
array (
'name' => 'sambaAccount_displayName' ,
'description' => _ ( 'Display name' ),
'help' => 'displayName' ,
'example' => _ ( 'Steve Miller' )
),
array (
'name' => 'sambaAccount_password' ,
'description' => _ ( 'Password' ),
'help' => 'password' ,
'example' => _ ( 'secret' )
),
array (
'name' => 'sambaAccount_pwdUnix' ,
'description' => _ ( 'Use Unix password' ),
'help' => 'pwdUnixUpload' ,
'default' => 'true' ,
'values' => 'true, false' ,
'example' => 'true'
),
array (
'name' => 'sambaAccount_noPassword' ,
'description' => _ ( 'Use no password' ),
'help' => 'noPasswordUpload' ,
'default' => 'false' ,
'values' => 'true, false' ,
'example' => 'false'
),
array (
'name' => 'sambaAccount_noExpire' ,
'description' => _ ( 'Password does not expire' ),
'help' => 'noExpireUpload' ,
'default' => 'true' ,
'values' => 'true, false' ,
'example' => 'true'
),
array (
'name' => 'sambaAccount_deactivated' ,
'description' => _ ( 'Account is deactivated' ),
'help' => 'deactivatedUpload' ,
'default' => 'false' ,
'values' => 'true, false' ,
'example' => 'false'
),
array (
'name' => 'sambaAccount_pwdCanChange' ,
'description' => _ ( 'User can change password' ),
'help' => 'pwdCanChange' ,
'default' => '31-12-2030' ,
'example' => '15-11-2006'
),
array (
'name' => 'sambaAccount_pwdMustChange' ,
'description' => _ ( 'User must change password' ),
'help' => 'pwdMustChange' ,
'default' => '31-12-2030' ,
'example' => '15-10-2006'
),
array (
'name' => 'sambaAccount_homeDrive' ,
'description' => _ ( 'Home drive' ),
'help' => 'homeDrive' ,
'example' => 'k:'
),
array (
'name' => 'sambaAccount_homePath' ,
'description' => _ ( 'Home path' ),
'help' => 'homePath' ,
2004-11-28 15:56:59 +00:00
'example' => _ ( '\\\\server\\homes\\smiller' )
2004-11-17 19:14:26 +00:00
),
array (
'name' => 'sambaAccount_profilePath' ,
'description' => _ ( 'Profile path' ),
'help' => 'profilePath' ,
2004-11-28 15:56:59 +00:00
'example' => _ ( '\\\\server\\profiles\\smiller' )
2004-11-17 19:14:26 +00:00
),
array (
2004-11-20 12:44:09 +00:00
'name' => 'sambaAccount_logonScript' ,
'description' => _ ( 'Logon script' ),
2004-11-17 19:14:26 +00:00
'help' => 'scriptPath' ,
'example' => 'logon.bat'
),
array (
'name' => 'sambaAccount_workstations' ,
'description' => _ ( 'Samba workstations' ),
2004-11-20 12:44:09 +00:00
'help' => 'workstations' ,
2004-11-17 19:14:26 +00:00
'example' => 'PC01,PC02,PC03'
),
array (
'name' => 'sambaAccount_group' ,
'description' => _ ( 'Windows group' ),
'help' => 'groupUpload' ,
2004-11-20 12:44:09 +00:00
'example' => '1235' ,
'default' => '<gidNumber>*2 + 1001'
2004-11-17 19:14:26 +00:00
),
array (
'name' => 'sambaAccount_specialUser' ,
'description' => _ ( 'Special user' ),
'help' => 'specialUser' ,
2006-10-22 07:53:33 +00:00
'example' => _ ( 'Domain admins' ),
2004-11-17 19:14:26 +00:00
'values' => implode ( " , " , array_keys ( $this -> rids ))
),
array (
'name' => 'sambaAccount_domain' ,
'description' => _ ( 'Domain' ),
'help' => 'domain' ,
'example' => _ ( 'mydomain' )
)
);
}
elseif ( $this -> get_scope () == " host " ) {
$return [ 'upload_columns' ] = array (
array (
'name' => 'sambaAccount_domain' ,
'description' => _ ( 'Domain' ),
'help' => 'domain' ,
'example' => _ ( 'mydomain' )
)
);
}
// help Entries
$return [ 'help' ] = array (
" displayName " => array (
" ext " => " FALSE " , " Headline " => _ ( " Display name " ),
" Text " => _ ( " This is the account's full name on Windows systems. " )),
" password " => array (
" ext " => " FALSE " , " Headline " => _ ( " Samba password " ),
" Text " => _ ( " This is the account's Windows password. " )),
2005-09-03 10:59:50 +00:00
" resetPassword " => array (
" ext " => " FALSE " , " Headline " => _ ( " Reset password " ),
" Text " => _ ( " This will reset the host's password to a default value. " )),
2004-11-17 19:14:26 +00:00
" pwdUnix " => array (
" ext " => " FALSE " , " Headline " => _ ( " Use Unix password " ),
" Text " => _ ( " If checked Unix password will also be used as Samba password. " )),
" pwdUnixUpload " => array (
" ext " => " FALSE " , " Headline " => _ ( " Use Unix password " ),
2004-11-28 19:45:10 +00:00
" Text " => _ ( " If set to \" true \" Unix password will also be used as Samba password. " )),
2004-11-17 19:14:26 +00:00
" noPassword " => array (
" ext " => " FALSE " , " Headline " => _ ( " Use no password " ),
" Text " => _ ( " If checked no password will be used. " )),
" noPasswordUpload " => array (
" ext " => " FALSE " , " Headline " => _ ( " Use no password " ),
" Text " => _ ( " If set to \" true \" no password will be used. " )),
" noExpire " => array (
" ext " => " FALSE " , " Headline " => _ ( " Password does not expire " ),
" Text " => _ ( " If checked password does not expire. (Setting X-Flag) " )),
" noExpireUpload " => array (
" ext " => " FALSE " , " Headline " => _ ( " Password does not expire " ),
" Text " => _ ( " If set to \" true \" password does not expire. (Setting X-Flag) " )),
" deactivated " => array (
" ext " => " FALSE " , " Headline " => _ ( " Account is deactivated " ),
" Text " => _ ( " If checked account will be deactivated. (Setting D-Flag) " )),
" deactivatedUpload " => array (
" ext " => " FALSE " , " Headline " => _ ( " Account is deactivated " ),
" Text " => _ ( " If set to \" true \" account will be deactivated. (Setting D-Flag) " )),
" pwdCanChange " => array (
" ext " => " FALSE " , " Headline " => _ ( " User can change password " ),
" Text " => _ ( " Date after the user is able to change his password. Format: DD-MM-YYYY " )),
" pwdMustChange " => array ( " ext " => " FALSE " , " Headline " => _ ( " User must change password " ),
" Text " => _ ( " Date after the user must change his password. Format: DD-MM-YYYY " )),
" homeDrive " => array (
" ext " => " FALSE " , " Headline " => _ ( " Home drive " ),
" Text " => _ ( " Drive letter assigned on windows workstations as homedirectory. " )),
" homePath " => array (
" ext " => " FALSE " , " Headline " => _ ( " Home path " ),
2005-06-18 16:12:01 +00:00
" Text " => _ ( 'UNC-path (\\\\server\\share) of homedirectory. $user and $group are replaced with user and group name.' ) . ' ' . _ ( " Can be left empty. " )),
2004-11-17 19:14:26 +00:00
" profilePath " => array (
" ext " => " FALSE " , " Headline " => _ ( " Profile path " ),
2005-06-18 16:12:01 +00:00
" Text " => _ ( 'Path of the user profile. Can be a local absolute path or a UNC-path (\\\\server\\share). $user and $group are replaced with user and group name.' ) . ' ' . _ ( " Can be left empty. " )),
2004-11-17 19:14:26 +00:00
" scriptPath " => array (
2004-11-20 12:44:09 +00:00
" ext " => " FALSE " , " Headline " => _ ( " Logon script " ),
2005-07-29 12:09:31 +00:00
" Text " => _ ( 'File name and path relative to the netlogon-share which should be executed on logon. $user and $group are replaced with user and group name.' ) . ' ' . _ ( " Can be left empty. " )),
2005-09-03 10:59:50 +00:00
" userWorkstations " => array (
" ext " => " FALSE " , " Headline " => _ ( " Samba workstations " ),
" Text " => _ ( " List of Samba workstations the user is allowed to login. Empty means every workstation. " )),
2004-11-17 19:14:26 +00:00
" workstations " => array (
" ext " => " FALSE " , " Headline " => _ ( " Samba workstations " ),
" Text " => _ ( " Comma separated list of Samba workstations the user is allowed to login. Empty means every workstation. " ) . ' ' . _ ( " Can be left empty. " )),
" group " => array (
" ext " => " FALSE " , " Headline " => _ ( " Windows group name " ),
" Text " => _ ( " If you want to use a well known RID you can selcet a well known group. " )),
" groupUpload " => array (
" ext " => " FALSE " , " Headline " => _ ( " Windows group RID " ),
" Text " => _ ( " This is the RID of the user's primary Windows group. " )),
" specialUser " => array (
" ext " => " FALSE " , " Headline " => _ ( " Special user " ),
" Text " => _ ( " If you want to create domain administrators or other special users use this option. " )),
" domain " => array (
" ext " => " FALSE " , " Headline " => _ ( " Domain " ),
" Text " => _ ( " Windows domain name of account. " ) . ' ' . _ ( " Can be left empty. " ))
);
2004-06-08 18:54:37 +00:00
return $return ;
}
2005-02-16 21:00:19 +00:00
/**
* Initializes the module after it became part of an accountContainer
*
* @ param string $base the name of the accountContainer object ( $_SESSION [ $base ])
*/
2004-06-08 18:54:37 +00:00
function init ( $base ) {
2004-09-01 20:53:06 +00:00
// call parent init
parent :: init ( $base );
2006-09-03 12:41:22 +00:00
$this -> useunixpwd = true ;
2005-01-22 10:50:10 +00:00
$this -> noexpire = true ;
$this -> nopwd = false ;
$this -> deactivated = false ;
2003-12-20 21:42:52 +00:00
}
// Variables
2006-09-03 12:41:22 +00:00
/** use Unix password as samba password? */
2003-12-20 21:42:52 +00:00
var $useunixpwd ;
2005-01-22 10:50:10 +00:00
/** use no password? */
var $nopwd ;
/** password does not expire? */
var $noexpire ;
/** account deactivated? */
var $deactivated ;
2006-08-14 17:24:27 +00:00
2005-01-22 10:50:10 +00:00
/** Array of well known rids */
2003-12-20 21:42:52 +00:00
var $rids ;
2003-12-30 15:36:30 +00:00
function module_ready () {
2007-10-10 19:04:39 +00:00
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
if ( $attrs [ 'gidNumber' ][ 0 ] == '' ) return false ;
if ( $attrs [ 'uidNumber' ][ 0 ] == '' ) return false ;
2003-12-30 15:36:30 +00:00
return true ;
2005-09-19 18:43:10 +00:00
}
2003-12-30 15:36:30 +00:00
2005-05-10 15:34:43 +00:00
/**
* This functions returns true if all needed settings are done
*
* @ return boolean true if ready to save account
2004-02-09 18:11:01 +00:00
*/
function module_complete () {
if ( ! $this -> module_ready ()) return false ;
if ( $this -> attributes [ 'rid' ][ 0 ] == '' ) return false ;
return true ;
2006-08-14 17:24:27 +00:00
}
2004-02-09 18:11:01 +00:00
2003-12-30 15:36:30 +00:00
/* This function loads all attributes into the object
* $attr is an array as it ' s retured from ldap_get_attributes
*/
function load_attributes ( $attr ) {
2005-04-16 13:41:17 +00:00
parent :: load_attributes ( $attr );
2005-09-17 08:54:40 +00:00
if ( is_string ( $this -> attributes [ 'acctFlags' ][ 0 ])) {
if ( strpos ( $this -> attributes [ 'acctFlags' ][ 0 ], " D " )) $this -> deactivated = true ;
else $this -> deactivated = false ;
if ( strpos ( $this -> attributes [ 'acctFlags' ][ 0 ], " N " )) $this -> nopwd = true ;
else $this -> nopwd = false ;
if ( strpos ( $this -> attributes [ 'acctFlags' ][ 0 ], " X " )) $this -> noexpire = true ;
else $this -> noexpire = false ;
}
2006-05-13 08:55:31 +00:00
}
2003-12-30 15:36:30 +00:00
/* This function returns an array with 3 entries :
* array ( DN1 ( 'add' => array ( $attr ), 'remove' => array ( $attr ), 'modify' => array ( $attr )), DN2 .... )
* DN is the DN to change . It may be possible to change several DNs ,
* e . g . create a new user and add him to some groups via attribute memberUid
* add are attributes which have to be added to ldap entry
* remove are attributes which have to be removed from ldap entry
* modify are attributes which have to been modified in ldap entry
*/
function save_attributes () {
/* Create sambaSID . Can ' t create it while loading attributes because
* it ' s psssible uidNumber has changed
*/
$special = false ;
2005-05-10 15:02:58 +00:00
if ( $this -> attributes [ 'rid' ][ 0 ] < 1000 ) $special = true ;
2007-10-10 19:04:39 +00:00
if ( ! $special ) {
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
$this -> attributes [ 'rid' ][ 0 ] = $attrs [ 'uidNumber' ][ 0 ] * 2 + 1000 ;
}
2005-05-10 15:02:58 +00:00
$rids = array_values ( $this -> rids );
2003-12-30 15:36:30 +00:00
$wrid = false ;
2005-05-10 15:02:58 +00:00
for ( $i = 0 ; $i < count ( $rids ); $i ++ ) {
if ( $this -> attributes [ 'primaryGroupID' ][ 0 ] == $rids [ $i ]) {
2003-12-30 15:36:30 +00:00
$wrid = true ;
2005-05-10 15:02:58 +00:00
break ;
}
}
2007-10-10 19:04:39 +00:00
if ( ! $wrid ) {
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
$this -> attributes [ 'primaryGroupID' ][ 0 ] = ( $attrs [ 'gidNumber' ][ 0 ] * 2 ) + 1001 ;
}
2007-10-03 18:02:10 +00:00
$return = $this -> getAccountContainer () -> save_module_attributes ( $this -> attributes , $this -> orig );
2003-12-30 15:36:30 +00:00
return $return ;
}
2005-09-07 12:58:34 +00:00
/**
* Processes user input of the primary module page .
* It checks if all input values are correct and updates the associated LDAP attributes .
*
* @ return array list of info / error messages
2003-12-20 21:42:52 +00:00
*/
2006-08-14 17:24:27 +00:00
function process_attributes () {
2006-05-17 17:45:52 +00:00
$errors = array ();
2006-08-14 17:24:27 +00:00
$this -> attributes [ 'domain' ][ 0 ] = $_POST [ 'domain' ];
2003-12-21 14:52:23 +00:00
// Start character
$flag = " [ " ;
2006-08-14 17:24:27 +00:00
if ( $_POST [ 'acctFlagsD' ]) {
2005-01-22 10:50:10 +00:00
$flag .= " D " ;
$this -> deactivated = true ;
}
else {
$this -> deactivated = false ;
}
2006-08-14 17:24:27 +00:00
if ( $_POST [ 'acctFlagsX' ]) {
2005-01-22 10:50:10 +00:00
$flag .= " X " ;
$this -> noexpire = true ;
}
else {
$this -> noexpire = false ;
}
2006-08-14 17:24:27 +00:00
if ( $_POST [ 'acctFlagsN' ]) {
2005-01-22 10:50:10 +00:00
$flag .= " N " ;
$this -> nopwd = true ;
}
else {
$this -> nopwd = false ;
}
2006-08-14 17:24:27 +00:00
if ( $_POST [ 'acctFlagsS' ]) $flag .= " S " ;
if ( $_POST [ 'acctFlagsH' ]) $flag .= " H " ;
if ( $_POST [ 'acctFlagsW' ]) $flag .= " W " ;
if ( $_POST [ 'acctFlagsU' ]) $flag .= " U " ;
2003-12-21 14:52:23 +00:00
// Expand string to fixed length
$flag = str_pad ( $flag , 12 );
// End character
$flag = $flag . " ] " ;
$this -> attributes [ 'acctFlags' ][ 0 ] = $flag ;
2005-09-13 07:55:03 +00:00
// display name
2006-08-14 17:24:27 +00:00
$this -> attributes [ 'displayName' ][ 0 ] = $_POST [ 'displayName' ];
2005-09-13 07:55:03 +00:00
if ( ! ( $this -> attributes [ 'displayName' ][ 0 ] == '' ) && ! ( get_preg ( $this -> attributes [ 'displayName' ][ 0 ], 'realname' ))) {
2006-08-16 17:42:35 +00:00
$errors [] = $this -> messages [ 'displayName' ][ 1 ];
2005-09-13 07:55:03 +00:00
}
// host attributes
2007-10-04 16:45:05 +00:00
if ( $this -> get_scope () == 'host' ) {
2006-10-22 07:53:33 +00:00
$this -> attributes [ 'primaryGroupID' ][ 0 ] = $this -> rids [ _ ( 'Domain computers' )];
2006-08-14 17:24:27 +00:00
if ( $_POST [ 'ResetSambaPassword' ] || ( ! $this -> attributes [ 'lmPassword' ][ 0 ])) {
2007-10-10 19:04:39 +00:00
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
$hostname = $attrs [ 'uid' ][ 0 ];
2005-06-26 07:53:48 +00:00
$hostname = substr ( $hostname , 0 , strlen ( $hostname ) - 1 );
$this -> attributes [ 'lmPassword' ][ 0 ] = lmPassword ( $hostname );
$this -> attributes [ 'ntPassword' ][ 0 ] = ntPassword ( $hostname );
2005-05-10 15:34:43 +00:00
$this -> attributes [ 'pwdLastSet' ][ 0 ] = time ();
2003-12-21 14:52:23 +00:00
}
}
2005-06-26 07:53:48 +00:00
// check values for user account
2007-10-04 16:45:05 +00:00
if ( $this -> get_scope () == 'user' ) {
2006-08-14 17:24:27 +00:00
$this -> attributes [ 'pwdCanChange' ][ 0 ] = mktime ( intval ( $_POST [ 'pwdCanChange_h' ]), intval ( $_POST [ 'pwdCanChange_m' ]),
intval ( $_POST [ 'pwdCanChange_s' ]), intval ( $_POST [ 'pwdCanChange_mon' ]), intval ( $_POST [ 'pwdCanChange_day' ]),
intval ( $_POST [ 'pwdCanChange_yea' ]));
$this -> attributes [ 'pwdMustChange' ][ 0 ] = mktime ( intval ( $_POST [ 'pwdMustChange_h' ]), intval ( $_POST [ 'pwdMustChange_m' ]),
intval ( $_POST [ 'pwdMustChange_s' ]), intval ( $_POST [ 'pwdMustChange_mon' ]), intval ( $_POST [ 'pwdMustChange_day' ]),
intval ( $_POST [ 'pwdMustChange_yea' ]));
$this -> attributes [ 'smbHome' ][ 0 ] = $_POST [ 'smbHome' ];
$this -> attributes [ 'homeDrive' ][ 0 ] = $_POST [ 'homeDrive' ];
$this -> attributes [ 'scriptPath' ][ 0 ] = $_POST [ 'scriptPath' ];
$this -> attributes [ 'profilePath' ][ 0 ] = $_POST [ 'profilePath' ];
2004-10-16 19:51:36 +00:00
$rids = array_keys ( $this -> rids );
$wrid = false ;
for ( $i = 0 ; $i < count ( $rids ); $i ++ ) {
2006-08-14 17:24:27 +00:00
if ( $_POST [ 'primaryGroupID' ] == $rids [ $i ]) {
2004-10-16 19:51:36 +00:00
$wrid = true ;
$this -> attributes [ 'primaryGroupID' ][ 0 ] = $this -> rids [ $rids [ $i ]];
2005-05-10 15:02:58 +00:00
break ;
2004-10-16 19:51:36 +00:00
}
2005-05-10 15:02:58 +00:00
}
2007-10-10 19:04:39 +00:00
if ( ! $wrid ) {
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
$this -> attributes [ 'primaryGroupID' ][ 0 ] = ( $attrs [ 'gidNumber' ][ 0 ] * 2 ) + 1001 ;
}
2006-08-14 17:24:27 +00:00
if ( $_POST [ 'useunixpwd' ]) $this -> useunixpwd = true ;
2004-10-16 19:51:36 +00:00
else $this -> useunixpwd = false ;
2006-08-14 17:24:27 +00:00
if ( $_POST [ 'useunixpwd' ]) {
2005-05-10 15:34:43 +00:00
$this -> useunixpwd = true ;
2007-10-04 16:45:05 +00:00
$this -> attributes [ 'lmPassword' ][ 0 ] = lmPassword ( $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> clearTextPassword );
$this -> attributes [ 'ntPassword' ][ 0 ] = ntPassword ( $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> clearTextPassword );
2005-05-10 15:34:43 +00:00
$this -> attributes [ 'pwdLastSet' ][ 0 ] = time ();
}
else $this -> useunixpwd = false ;
2006-08-14 17:24:27 +00:00
if ( ! $this -> useunixpwd && isset ( $_POST [ 'lmPassword' ]) && ( $_POST [ 'lmPassword' ] != '' )) {
if ( $_POST [ 'lmPassword' ] != $_POST [ 'lmPassword2' ]) {
2006-08-16 17:42:35 +00:00
$errors [] = $this -> messages [ 'lmPassword' ][ 0 ];
2006-08-14 17:24:27 +00:00
unset ( $_POST [ 'lmPassword2' ]);
2005-05-10 15:34:43 +00:00
}
2004-10-16 19:51:36 +00:00
else {
2006-08-16 17:42:35 +00:00
if ( ! get_preg ( $_POST [ 'lmPassword' ], 'password' )) $errors [] = $this -> messages [ 'lmPassword' ][ 1 ];
2005-05-10 15:34:43 +00:00
else {
2006-08-14 17:24:27 +00:00
$this -> attributes [ 'lmPassword' ][ 0 ] = lmPassword ( $_POST [ 'lmPassword' ]);
$this -> attributes [ 'ntPassword' ][ 0 ] = ntPassword ( $_POST [ 'lmPassword' ]);
2005-05-10 15:34:43 +00:00
$this -> attributes [ 'pwdLastSet' ][ 0 ] = time ();
2004-01-27 19:07:31 +00:00
}
2005-05-10 15:34:43 +00:00
}
2004-10-16 19:51:36 +00:00
}
2005-05-10 15:02:58 +00:00
// rid
$specialNames = array_keys ( $this -> rids );
2006-08-14 17:24:27 +00:00
if ( in_array ( $_POST [ 'rid' ], $specialNames )) {
$this -> attributes [ 'rid' ][ 0 ] = $this -> rids [ $_POST [ 'rid' ]];
2005-05-10 15:02:58 +00:00
}
else {
2007-10-10 19:04:39 +00:00
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
$this -> attributes [ 'rid' ][ 0 ] = $attrs [ 'uidNumber' ][ 0 ] * 2 + 1000 ;
2005-05-10 15:02:58 +00:00
}
2007-10-10 19:04:39 +00:00
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
$this -> attributes [ 'smbHome' ][ 0 ] = str_replace ( '$user' , $attrs [ 'uid' ][ 0 ], $this -> attributes [ 'smbHome' ][ 0 ]);
$this -> attributes [ 'smbHome' ][ 0 ] = str_replace ( '$group' , $_SESSION [ 'cache' ] -> getgrnam ( $attrs [ 'gidNumber' ][ 0 ]), $this -> attributes [ 'smbHome' ][ 0 ]);
2006-08-16 17:42:35 +00:00
if ( $this -> attributes [ 'smbHome' ][ 0 ] != $_POST [ 'smbHome' ]) $errors [] = $this -> messages [ 'homePath' ][ 1 ];
2007-10-10 19:04:39 +00:00
$this -> attributes [ 'scriptPath' ][ 0 ] = str_replace ( '$user' , $attrs [ 'uid' ][ 0 ], $this -> attributes [ 'scriptPath' ][ 0 ]);
$this -> attributes [ 'scriptPath' ][ 0 ] = str_replace ( '$group' , $_SESSION [ 'cache' ] -> getgrnam ( $attrs [ 'gidNumber' ][ 0 ]), $this -> attributes [ 'scriptPath' ][ 0 ]);
2006-08-16 17:42:35 +00:00
if ( $this -> attributes [ 'scriptPath' ][ 0 ] != $_POST [ 'scriptPath' ]) $errors [] = $this -> messages [ 'logonScript' ][ 1 ];
2007-10-10 19:04:39 +00:00
$this -> attributes [ 'profilePath' ][ 0 ] = str_replace ( '$user' , $attrs [ 'uid' ][ 0 ], $this -> attributes [ 'profilePath' ][ 0 ]);
$this -> attributes [ 'profilePath' ][ 0 ] = str_replace ( '$group' , $_SESSION [ 'cache' ] -> getgrnam ( $attrs [ 'gidNumber' ][ 0 ]), $this -> attributes [ 'profilePath' ][ 0 ]);
2006-08-16 17:42:35 +00:00
if ( $this -> attributes [ 'profiletPath' ][ 0 ] != $_POST [ 'profilePath' ]) $errors [] = $this -> messages [ 'profilePath' ][ 1 ];
2004-10-16 19:51:36 +00:00
if ( ( ! $this -> attributes [ 'smbHome' ][ 0 ] == '' ) && ( ! get_preg ( $this -> attributes [ 'smbHome' ][ 0 ], 'UNC' )))
2006-08-16 17:42:35 +00:00
$errors [] = $this -> messages [ 'homePath' ][ 0 ];
2004-10-16 19:51:36 +00:00
if ( ( ! $this -> attributes [ 'scriptPath' ][ 0 ] == '' ) && ( ! get_preg ( $this -> attributes [ 'scriptPath' ][ 0 ], 'logonscript' )))
2006-08-16 17:42:35 +00:00
$errors [] = $this -> messages [ 'logonScript' ][ 0 ];
2004-10-16 19:51:36 +00:00
if ( ( ! $this -> attributes [ 'profilePath' ][ 0 ] == '' ) && ( ! get_preg ( $this -> attributes [ 'profilePath' ][ 0 ], 'UNC' )))
2006-08-16 17:42:35 +00:00
$errors [] = $this -> messages [ 'profilePath' ][ 0 ];
2007-10-10 19:04:39 +00:00
}
2005-06-26 07:53:48 +00:00
// check values for host account
2004-10-16 19:51:36 +00:00
else {
2007-10-10 19:04:39 +00:00
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
2005-06-26 07:53:48 +00:00
if ( ! $this -> attributes [ 'rid' ][ 0 ]) {
2007-10-10 19:04:39 +00:00
$this -> attributes [ 'rid' ][ 0 ] = ( $attrs [ 'uidNumber' ][ 0 ] * 2 ) + 1000 ;
2003-12-20 21:42:52 +00:00
}
2005-06-26 07:53:48 +00:00
if ( ! $this -> attributes [ 'primaryGroupID' ][ 0 ]) {
2007-10-10 19:04:39 +00:00
$this -> attributes [ 'primaryGroupID' ][ 0 ] = ( $attrs [ 'gidNumber' ][ 0 ] * 2 ) + 1001 ;
2005-06-26 07:53:48 +00:00
}
}
2003-12-20 21:42:52 +00:00
2004-09-26 13:48:52 +00:00
if (( ! $this -> attributes [ 'domain' ][ 0 ] == '' ) && ! get_preg ( $this -> attributes [ 'domain' ][ 0 ], 'domainname' ))
2006-08-16 17:42:35 +00:00
$errors [] = $this -> messages [ 'domain' ][ 0 ];
2003-12-20 21:42:52 +00:00
2006-05-17 17:45:52 +00:00
return $errors ;
2005-09-07 12:58:34 +00:00
}
2003-12-20 21:42:52 +00:00
2005-09-07 12:58:34 +00:00
/**
* Processes user input of the workstation selection page .
* It checks if all input values are correct and updates the associated LDAP attributes .
*
* @ return array list of info / error messages
2003-12-20 21:42:52 +00:00
*/
2006-08-14 17:24:27 +00:00
function process_userWorkstations () {
2003-12-20 21:42:52 +00:00
// Load attributes
2007-10-04 16:45:05 +00:00
if ( $this -> get_scope () == 'user' ) {
2006-08-14 17:24:27 +00:00
if ( isset ( $_POST [ 'availableUserWorkstations' ]) && isset ( $_POST [ 'userWorkstations_add' ])) { // Add workstations to list
2005-09-01 15:20:15 +00:00
$temp = str_replace ( ' ' , '' , $this -> attributes [ 'userWorkstations' ][ 0 ]);
$workstations = explode ( ',' , $temp );
for ( $i = 0 ; $i < count ( $workstations ); $i ++ ) {
if ( $workstations [ $i ] == '' ) unset ( $workstations [ $i ]);
}
$workstations = array_values ( $workstations );
// Add new // Add workstations
2006-08-14 17:24:27 +00:00
$workstations = array_merge ( $workstations , $_POST [ 'availableUserWorkstations' ]);
2005-09-01 15:20:15 +00:00
// remove doubles
$workstations = array_flip ( $workstations );
array_unique ( $workstations );
$workstations = array_flip ( $workstations );
// sort workstations
sort ( $workstations );
// Recreate workstation string
$this -> attributes [ 'userWorkstations' ][ 0 ] = $workstations [ 0 ];
for ( $i = 1 ; $i < count ( $workstations ); $i ++ ) {
$this -> attributes [ 'userWorkstations' ][ 0 ] = $this -> attributes [ 'userWorkstations' ][ 0 ] . " , " . $workstations [ $i ];
}
}
2006-08-14 17:24:27 +00:00
elseif ( isset ( $_POST [ 'userWorkstations' ]) && isset ( $_POST [ 'userWorkstations_remove' ])) { // remove // Add workstations from list
2005-09-01 15:20:15 +00:00
// Put all workstations in array
$temp = str_replace ( ' ' , '' , $this -> attributes [ 'userWorkstations' ][ 0 ]);
$workstations = explode ( ',' , $temp );
for ( $i = 0 ; $i < count ( $workstations ); $i ++ ) {
if ( $workstations [ $i ] == '' ) unset ( $workstations [ $i ]);
}
$workstations = array_values ( $workstations );
// Remove unwanted workstations from array
2006-08-14 17:24:27 +00:00
$workstations = array_delete ( $_POST [ 'userWorkstations' ], $workstations );
2005-09-01 15:20:15 +00:00
// Recreate workstation string
$this -> attributes [ 'userWorkstations' ][ 0 ] = $workstations [ 0 ];
for ( $i = 1 ; $i < count ( $workstations ); $i ++ ) {
$this -> attributes [ 'userWorkstations' ][ 0 ] = $this -> attributes [ 'userWorkstations' ][ 0 ] . " , " . $workstations [ $i ];
}
2004-01-27 19:07:31 +00:00
}
2003-12-20 21:42:52 +00:00
}
2006-08-16 17:42:35 +00:00
return array ();
2005-09-01 15:20:15 +00:00
}
2003-12-20 21:42:52 +00:00
/* This function will create the html - page
* to show a page with all attributes .
* It will output a complete html - table
*/
2006-08-14 17:24:27 +00:00
function display_html_attributes () {
2005-09-13 07:55:03 +00:00
$return [] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Display name' )),
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'displayName' , 'size' => '20' , 'value' => $this -> attributes [ 'displayName' ][ 0 ]),
2 => array ( 'kind' => 'help' , 'value' => 'displayName' ));
// user attributes
2007-10-04 16:45:05 +00:00
if ( $this -> get_scope () == 'user' ) {
2006-02-11 13:19:27 +00:00
if ( isset ( $this -> attributes [ 'pwdCanChange' ][ 0 ])) $canchangedate = getdate ( intval ( $this -> attributes [ 'pwdCanChange' ][ 0 ]));
else $canchangedate = getdate ( 0 );
if ( isset ( $this -> attributes [ 'pwdMustChange' ][ 0 ])) $mustchangedate = getdate ( intval ( $this -> attributes [ 'pwdMustChange' ][ 0 ]));
else $mustchangedate = getdate ( 0 );
2004-01-27 19:07:31 +00:00
$return [] = array ( 0 => array ( 'kind' => 'input' , 'name' => 'pwdCanChange_h' , 'type' => 'hidden' , 'value' => $canchangedate [ 'hours' ]),
1 => array ( 'kind' => 'input' , 'name' => 'pwdCanChange_m' , 'type' => 'hidden' , 'value' => $canchangedate [ 'minutes' ]),
2 => array ( 'kind' => 'input' , 'name' => 'pwdCanChange_s' , 'type' => 'hidden' , 'value' => $canchangedate [ 'seconds' ]),
3 => array ( 'kind' => 'input' , 'name' => 'pwdMustChange_h' , 'type' => 'hidden' , 'value' => $mustchangedate [ 'hours' ]),
4 => array ( 'kind' => 'input' , 'name' => 'pwdMustChange_m' , 'type' => 'hidden' , 'value' => $mustchangedate [ 'minutes' ]),
5 => array ( 'kind' => 'input' , 'name' => 'pwdMustChange_s' , 'type' => 'hidden' , 'value' => $mustchangedate [ 'seconds' ]),
6 => array ( 'kind' => 'input' , 'name' => 'acctFlagsU' , 'type' => 'hidden' , 'value' => 'true' ));
2005-05-10 15:34:43 +00:00
$return [] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Samba password' ) ),
1 => array ( 'kind' => 'input' , 'name' => 'lmPassword' , 'type' => 'password' , 'size' => '20' , 'maxlength' => '255' , 'value' => '' ));
$return [] = array (
0 => array ( 'kind' => 'text' , 'text' => _ ( 'Repeat password' ) ),
1 => array ( 'kind' => 'input' , 'name' => 'lmPassword2' , 'type' => 'password' , 'size' => '20' , 'maxlength' => '255' , 'value' => '' ),
2005-09-03 10:59:50 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'password' ));
2007-10-04 16:45:05 +00:00
if ( isset ( $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> clearTextPassword )) {
2006-09-03 12:41:22 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Use Unix password' ) ),
2004-10-12 13:34:00 +00:00
1 => array ( 'kind' => 'input' , 'name' => 'useunixpwd' , 'type' => 'checkbox' , 'checked' => $this -> useunixpwd , 'value' => true ),
2005-09-03 10:59:50 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'pwdUnix' ));
2003-12-21 14:52:23 +00:00
}
2004-01-27 19:07:31 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Use no password' ) ),
2005-01-22 10:50:10 +00:00
1 => array ( 'kind' => 'input' , 'name' => 'acctFlagsN' , 'type' => 'checkbox' , 'checked' => $this -> nopwd ),
2005-09-03 10:59:50 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'noPassword' ));
2004-01-27 19:07:31 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Password does not expire' ) ),
2005-01-22 10:50:10 +00:00
1 => array ( 'kind' => 'input' , 'name' => 'acctFlagsX' , 'type' => 'checkbox' , 'checked' => $this -> noexpire ),
2005-09-03 10:59:50 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'noExpire' ));
2004-01-27 19:07:31 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Account is deactivated' ) ),
2005-01-22 10:50:10 +00:00
1 => array ( 'kind' => 'input' , 'name' => 'acctFlagsD' , 'type' => 'checkbox' , 'checked' => $this -> deactivated ),
2005-09-03 10:59:50 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'deactivated' ));
2004-01-27 19:07:31 +00:00
for ( $i = 1 ; $i <= 31 ; $i ++ ) $mday [] = $i ;
for ( $i = 1 ; $i <= 12 ; $i ++ ) $mon [] = $i ;
for ( $i = 2003 ; $i <= 2030 ; $i ++ ) $year [] = $i ;
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'User can change password' ) ),
1 => array ( 'kind' => 'table' , 'value' => array ( 0 => array ( 0 => array ( 'kind' => 'select' , 'name' => 'pwdCanChange_day' ,
'options' => $mday , 'options_selectd' => $canchangedate [ 'mday' ]),
1 => array ( 'kind' => 'select' , 'name' => 'pwdCanChange_mon' ,
'options' => $mon , 'options_selectd' => $canchangedate [ 'mon' ]),
2 => array ( 'kind' => 'select' , 'name' => 'pwdCanChange_yes' ,
'options' => $year , 'options_selectd' => $canchangedate [ 'year' ])))),
2 => array ( 'kind' => 'help' , 'value' => 'pwdCanChange' ));
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'User must change password' ) ),
1 => array ( 'kind' => 'table' , 'value' => array ( 0 => array ( 0 => array ( 'kind' => 'select' , 'name' => 'pwdMustChange_day' ,
'options' => $mday , 'options_selectd' => $mustchangedate [ 'mday' ]),
1 => array ( 'kind' => 'select' , 'name' => 'pwdMustChange_mon' ,
'options' => $mon , 'options_selectd' => $mustchangedate [ 'mon' ]),
2 => array ( 'kind' => 'select' , 'name' => 'pwdMustChange_yes' ,
'options' => $year , 'options_selectd' => $mustchangedate [ 'year' ])))),
2 => array ( 'kind' => 'help' , 'value' => 'pwdMustChange' ));
for ( $i = 90 ; $i > 67 ; $i -- ) $drives [] = chr ( $i ) . ':' ;
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Home drive' ) ),
1 => array ( 'kind' => 'select' , 'name' => 'homeDrive' , 'options' => $drives , 'options_selected' => array ( $this -> attributes [ 'homeDrive' ][ 0 ])),
2 => array ( 'kind' => 'help' , 'value' => 'homeDrive' ));
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Home path' ) ),
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'smbHome' , 'size' => '20' , 'maxlength' => '255' , 'value' => $this -> attributes [ 'smbHome' ][ 0 ]),
2005-09-03 10:59:50 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'homePath' ));
2004-01-27 19:07:31 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Profile path' ) ),
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'profilePath' , 'size' => '20' , 'maxlength' => '255' , 'value' => $this -> attributes [ 'profilePath' ][ 0 ]),
2 => array ( 'kind' => 'help' , 'value' => 'profilePath' ));
2004-11-20 12:44:09 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Logon script' ) ),
2004-01-27 19:07:31 +00:00
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'scriptPath' , 'size' => '20' , 'maxlength' => '255' , 'value' => $this -> attributes [ 'scriptPath' ][ 0 ]),
2 => array ( 'kind' => 'help' , 'value' => 'scriptPath' ));
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Samba workstations' ) ),
2005-09-01 15:20:15 +00:00
1 => array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'form_subpage_sambaAccount_userWorkstations_open' , 'value' => _ ( 'Edit workstations' )),
2004-01-27 19:07:31 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'userWorkstations' ));
2004-10-16 19:51:36 +00:00
$names = array_keys ( $this -> rids );
2005-05-10 15:02:58 +00:00
$options = array ();
$selected = array ();
$wrid = false ;
2004-10-16 19:51:36 +00:00
for ( $i = 0 ; $i < count ( $names ); $i ++ ) {
2005-05-10 15:02:58 +00:00
if ( $this -> attributes [ 'primaryGroupID' ][ 0 ] == $this -> rids [ $names [ $i ]]) {
2004-10-16 19:51:36 +00:00
$selected [] = $names [ $i ];
2003-12-21 14:52:23 +00:00
$wrid = true ;
2004-10-16 19:51:36 +00:00
}
2005-05-10 15:02:58 +00:00
else $options [] = $names [ $i ];
}
2007-10-10 19:04:39 +00:00
if ( $wrid ) {
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
$options [] = $_SESSION [ 'cache' ] -> getgrnam ( $attrs [ 'gidNumber' ][ 0 ]);
}
else {
$attrs = $this -> getAccountContainer () -> getAccountModule ( 'posixAccount' ) -> getAttributes ();
$selected [] = $_SESSION [ 'cache' ] -> getgrnam ( $attrs [ 'gidNumber' ][ 0 ]);
}
2004-10-16 19:51:36 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Windows group' ) ),
1 => array ( 'kind' => 'select' , 'name' => 'primaryGroupID' , 'options' => $options , 'options_selected' => $selected ),
2005-09-03 10:59:50 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'group' ));
2005-05-10 15:02:58 +00:00
$options = array ();
$selected = array ();
$wrid = false ;
for ( $i = 0 ; $i < count ( $names ); $i ++ ) {
if ( $this -> attributes [ 'rid' ][ 0 ] == $this -> rids [ $names [ $i ]]) {
$selected [] = $names [ $i ];
$wrid = true ;
2004-01-27 19:07:31 +00:00
}
2005-05-10 15:02:58 +00:00
else $options [] = $names [ $i ];
}
2004-11-10 15:12:45 +00:00
if ( $wrid ) $options [] = " - " ;
2005-05-10 15:02:58 +00:00
else $selected [] = " - " ;
2004-10-16 19:51:36 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Special user' ) ),
1 => array ( 'kind' => 'select' , 'name' => 'rid' , 'options' => $options , 'options_selected' => $selected ),
2005-09-03 10:59:50 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'specialUser' ));
2005-09-01 15:20:15 +00:00
}
2004-10-16 19:51:36 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Domain' ) ),
1 => array ( 'kind' => 'input' , 'type' => 'text' , 'name' => 'domain' , 'size' => '20' , 'maxlength' => '255' , 'value' => $this -> attributes [ 'domain' ][ 0 ]),
2 => array ( 'kind' => 'help' , 'value' => 'domain' ));
2007-10-04 16:45:05 +00:00
if ( $this -> get_scope () == 'host' ) {
2004-01-27 19:07:31 +00:00
$return [] = array ( 0 => array ( 'kind' => 'input' , 'name' => 'acctFlagsW' , 'type' => 'hidden' , 'value' => 'true' ));
2004-10-16 19:51:36 +00:00
$return [] = array ( 0 => array ( 'kind' => 'text' , 'text' => _ ( 'Reset password' ) ),
2006-03-04 10:49:55 +00:00
1 => array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'ResetSambaPassword' , 'value' => _ ( 'Reset' )),
2005-09-03 10:59:50 +00:00
2 => array ( 'kind' => 'help' , 'value' => 'resetPassword' ));
2003-12-30 15:36:30 +00:00
}
2005-09-01 15:20:15 +00:00
return $return ;
}
2003-12-30 15:36:30 +00:00
2003-12-20 21:42:52 +00:00
/* This function will create the html - page
* to show a page with all attributes .
* It will output a complete html - table
*/
2006-08-14 17:24:27 +00:00
function display_html_userWorkstations () {
2007-10-04 16:45:05 +00:00
if ( $this -> get_scope () == 'user' ) {
2004-01-27 19:07:31 +00:00
// Get list of all hosts.
2004-09-14 11:53:33 +00:00
$result = $_SESSION [ 'cache' ] -> get_cache ( 'uid' , 'sambaAccount' , 'host' );
2004-01-27 19:07:31 +00:00
if ( is_array ( $result )) {
foreach ( $result as $host ) $availableUserWorkstations [] = str_replace ( " $ " , '' , $host [ 0 ]);
sort ( $availableUserWorkstations , SORT_STRING );
$result = str_replace ( ' ' , '' , $this -> attributes [ 'userWorkstations' ][ 0 ]);
$userWorkstations = explode ( ',' , $result );
$availableUserWorkstations = array_delete ( $userWorkstations , $availableUserWorkstations );
2005-09-01 15:20:15 +00:00
}
2004-01-27 19:07:31 +00:00
$return [] = array ( 0 => array ( 'kind' => 'fieldset' , 'legend' => _ ( " Allowed workstations " ), 'value' =>
array ( 0 => array ( 0 => array ( 'kind' => 'fieldset' , 'td' => array ( 'valign' => 'top' ), 'legend' => _ ( " Allowed workstations " ), 'value' =>
2005-09-01 15:20:15 +00:00
array ( 0 => array ( 0 => array ( 'kind' => 'select' , 'name' => 'userWorkstations' , 'size' => '15' , 'multiple' => true , 'options' => $userWorkstations )))),
2004-01-27 19:07:31 +00:00
1 => array ( 'kind' => 'table' , 'value' => array ( 0 => array ( 0 => array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'userWorkstations_add' ,
'value' => '<=' )), 1 => array ( 0 => array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'userWorkstations_remove' , 'value' => '=>' )),
2 => array ( 0 => array ( 'kind' => 'help' , 'value' => 'userWorkstations' )))),
2 => array ( 'kind' => 'fieldset' , 'td' => array ( 'valign' => 'top' ), 'legend' => _ ( " Available workstations " ), 'value' =>
2005-09-01 15:20:15 +00:00
array ( 0 => array ( 0 => array ( 'kind' => 'select' , 'name' => 'availableUserWorkstations' , 'size' => '15' , 'multiple' => true , 'options' => $availableUserWorkstations ))))
2004-01-27 19:07:31 +00:00
))));
2005-09-01 15:20:15 +00:00
$return [] = array (
0 => array ( 'kind' => 'input' , 'type' => 'submit' , 'name' => 'form_subpage_sambaAccount_attributes_back' , 'value' => _ ( 'Back' )),
1 => array ( 'kind' => 'text' ),
2 => array ( 'kind' => 'text' ));
2003-12-20 21:42:52 +00:00
}
2005-09-01 15:20:15 +00:00
return $return ;
}
2006-08-14 17:24:27 +00:00
2005-10-09 18:05:32 +00:00
/**
* Returns the PDF entries for this module .
2006-08-14 17:24:27 +00:00
*
2005-10-09 18:05:32 +00:00
* @ return array list of possible PDF entries
*/
function get_pdfEntries () {
2007-02-13 17:51:09 +00:00
return array ( 'sambaAccount_displayName' => array ( '<block><key>' . _ ( 'Display name' ) . '</key><value>' . $this -> attributes [ 'displayName' ][ 0 ] . '</value></block>' ),
2004-05-29 19:20:28 +00:00
'sambaAccount_smbHome' => array ( '<block><key>' . _ ( 'Home path' ) . '</key><value>' . $this -> attributes [ 'smbHome' ][ 0 ] . '</value></block>' ),
'sambaAccount_homeDrive' => array ( '<block><key>' . _ ( 'Home drive' ) . '</key><value>' . $this -> attributes [ 'homePath' ][ 0 ] . '</value></block>' ),
'sambaAccount_scriptPath' => array ( '<block><key>' . _ ( 'Logon script' ) . '</key><value>' . $this -> attributes [ 'scriptPath' ][ 0 ] . '</value></block>' ),
'sambaAccount_profilePath' => array ( '<block><key>' . _ ( 'Profile path' ) . '</key><value>' . $this -> attributes [ 'profilePath' ][ 0 ] . '</value></block>' ),
'sambaAccount_userWorkstations' => array ( '<block><key>' . _ ( 'Samba workstations' ) . '</key><value>' . $this -> attributes [ 'userWorkstations' ][ 0 ] . '</value></block>' ),
'sambaAccount_domain' => array ( '<block><key>' . _ ( 'Domain' ) . '</key><value>' . $this -> attributes [ 'domain' ][ 0 ] . '</value></block>' ),
'sambaAccount_description' => array ( '<block><key>' . _ ( 'Description' ) . '</key><value>' . $this -> attributes [ 'description' ][ 0 ] . '</value></block>' ));
2004-05-24 21:39:57 +00:00
}
2004-03-14 17:33:05 +00:00
2004-11-20 12:44:09 +00:00
/**
* In this function the LDAP account is built up .
*
* @ param array $rawAccounts list of hash arrays ( name => value ) from user input
* @ param array $partialAccounts list of hash arrays ( name => value ) which are later added to LDAP
* @ param array $ids list of IDs for column position ( e . g . " posixAccount_uid " => 5 )
* @ return array list of error messages if any
*/
function build_uploadAccounts ( $rawAccounts , $ids , & $partialAccounts ) {
2006-05-17 17:45:52 +00:00
$errors = array ();
2004-11-20 12:44:09 +00:00
if ( $this -> get_scope () == 'user' ) {
for ( $i = 0 ; $i < sizeof ( $rawAccounts ); $i ++ ) {
if ( ! in_array ( " sambaAccount " , $partialAccounts [ $i ][ 'objectClass' ])) $partialAccounts [ $i ][ 'objectClass' ][] = " sambaAccount " ;
// displayName
2004-11-28 15:56:59 +00:00
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_displayName' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_displayName' ]], 'realname' )) {
$partialAccounts [ $i ][ 'displayName' ] = $rawAccounts [ $i ][ $ids [ 'sambaAccount_displayName' ]];
}
else {
$errMsg = $this -> messages [ 'displayName' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-28 15:56:59 +00:00
}
2004-11-20 12:44:09 +00:00
}
// password
if ( ! get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_password' ]], 'password' )) {
$errMsg = $this -> messages [ 'lmPassword' ][ 2 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
// use Unix password
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_pwdUnix' ]] == " " ) { // default: use Unix
2005-10-04 15:17:24 +00:00
$partialAccounts [ $i ][ 'lmPassword' ] = lmPassword ( $rawAccounts [ $i ][ $ids [ 'posixAccount_password' ]]);
$partialAccounts [ $i ][ 'ntPassword' ] = ntPassword ( $rawAccounts [ $i ][ $ids [ 'posixAccount_password' ]]);
2004-11-20 12:44:09 +00:00
}
elseif ( in_array ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_pwdUnix' ]], array ( 'true' , 'false' ))) {
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_pwdUnix' ]] == 'true' ) { // use Unix
2005-10-04 15:17:24 +00:00
$partialAccounts [ $i ][ 'lmPassword' ] = lmPassword ( $rawAccounts [ $i ][ $ids [ 'posixAccount_password' ]]);
$partialAccounts [ $i ][ 'ntPassword' ] = ntPassword ( $rawAccounts [ $i ][ $ids [ 'posixAccount_password' ]]);
2004-11-20 12:44:09 +00:00
}
else { // use given password
$partialAccounts [ $i ][ 'lmPassword' ] = lmPassword ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_password' ]]);
$partialAccounts [ $i ][ 'ntPassword' ] = ntPassword ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_password' ]]);
}
}
else {
$errMsg = $this -> messages [ 'pwdUnix' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
// use no password
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_noPassword' ]] != " " ) {
if ( in_array ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_noPassword' ]], array ( 'true' , 'false' ))) {
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_noPassword' ]] == 'true' ) {
$partialAccounts [ $i ][ 'lmPassword' ] = 'NO PASSWORD*****' ;
$partialAccounts [ $i ][ 'ntPassword' ] = 'NO PASSWORD*****' ;
}
}
else {
$errMsg = $this -> messages [ 'noPassword' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// account flags
$flag_expire = false ;
$flag_deactivated = false ;
// password does not expire
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_noExpire' ]] != " " ) {
if ( in_array ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_noExpire' ]], array ( 'true' , 'false' ))) {
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_noExpire' ]] == 'false' ) {
$flag_expire = true ;
}
}
else {
$errMsg = $this -> messages [ 'noExpire' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// account is deactivated
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_deactivated' ]] != " " ) {
if ( in_array ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_deactivated' ]], array ( 'true' , 'false' ))) {
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_deactivated' ]] == 'true' ) {
$flag_deactivated = true ;
}
}
else {
$errMsg = $this -> messages [ 'deactivated' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// set flags
$flags = " [ " ;
if ( $flag_deactivated ) $flags = $flags . " D " ;
if ( ! $flag_expire ) $flags = $flags . " X " ;
$flags = $flags . " U " ;
// Expand string to fixed length
$flags = str_pad ( $flags , 12 );
// End character
$flags = $flags . " ] " ;
$partialAccounts [ $i ][ 'acctFlags' ] = $flags ;
// passsword can be changed
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_pwdCanChange' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_pwdCanChange' ]], 'date' )) {
$parts = explode ( " - " , $rawAccounts [ $i ][ $ids [ 'sambaAccount_pwdCanChange' ]]);
2006-02-23 08:22:22 +00:00
$time = mktime ( 0 , 0 , 0 , intval ( $parts [ 1 ]), intval ( $parts [ 0 ]), intval ( $parts [ 2 ]));
2004-11-20 12:44:09 +00:00
$partialAccounts [ $i ][ 'pwdCanChange' ] = $time ;
}
else {
$errMsg = $this -> messages [ 'pwdCanChange' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// passsword must be changed
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_pwdMustChange' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_pwdMustChange' ]], 'date' )) {
$parts = explode ( " - " , $rawAccounts [ $i ][ $ids [ 'sambaAccount_pwdMustChange' ]]);
2006-02-23 08:22:22 +00:00
$time = mktime ( 0 , 0 , 0 , intval ( $parts [ 1 ]), intval ( $parts [ 0 ]), intval ( $parts [ 2 ]));
2004-11-20 12:44:09 +00:00
$partialAccounts [ $i ][ 'pwdMustChange' ] = $time ;
}
else {
$errMsg = $this -> messages [ 'pwdMustChange' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// home drive
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_homeDrive' ]] != " " ) {
if ( eregi ( " [d-z]: " , $rawAccounts [ $i ][ $ids [ 'sambaAccount_homeDrive' ]])) {
$partialAccounts [ $i ][ 'homeDrive' ] = $rawAccounts [ $i ][ $ids [ 'sambaAccount_homeDrive' ]];
}
else {
$errMsg = $this -> messages [ 'homeDrive' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// home path
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_homePath' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_homePath' ]], 'UNC' )) {
$partialAccounts [ $i ][ 'smbHome' ] = $rawAccounts [ $i ][ $ids [ 'sambaAccount_homePath' ]];
}
else {
2004-11-28 15:56:59 +00:00
$errMsg = $this -> messages [ 'homePath' ][ 2 ];
2004-11-20 12:44:09 +00:00
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// profile path
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_profilePath' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_profilePath' ]], 'UNC' )) {
$partialAccounts [ $i ][ 'profilePath' ] = $rawAccounts [ $i ][ $ids [ 'sambaAccount_profilePath' ]];
}
else {
2004-11-28 15:56:59 +00:00
$errMsg = $this -> messages [ 'profilePath' ][ 2 ];
2004-11-20 12:44:09 +00:00
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// logon script
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_logonScript' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_logonScript' ]], 'logonscript' )) {
$partialAccounts [ $i ][ 'scriptPath' ] = $rawAccounts [ $i ][ $ids [ 'sambaAccount_logonScript' ]];
}
else {
$errMsg = $this -> messages [ 'logonScript' ][ 2 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// workstations
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_workstations' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_workstations' ]], 'workstations' )) {
$partialAccounts [ $i ][ 'userWorkstations' ] = $rawAccounts [ $i ][ $ids [ 'sambaAccount_workstations' ]];
}
else {
$errMsg = $this -> messages [ 'workstations' ][ 1 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// group
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_group' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_group' ]], 'digit' )) {
$partialAccounts [ $i ][ 'primaryGroupID' ] = $rawAccounts [ $i ][ $ids [ 'sambaAccount_group' ]];
}
else {
$errMsg = $this -> messages [ 'group' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
else {
// default GID*2 + 1001
$partialAccounts [ $i ][ 'primaryGroupID' ] = $partialAccounts [ $i ][ 'gidNumber' ] * 2 + 1001 ;
}
// domain
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_domain' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_domain' ]], 'domainname' )) {
$partialAccounts [ $i ][ 'domain' ] = $rawAccounts [ $i ][ $ids [ 'sambaAccount_domain' ]];
}
else {
$errMsg = $this -> messages [ 'domain' ][ 1 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
// special user
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_specialUser' ]] != " " ) {
if ( in_array ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_specialUser' ]], array_keys ( $this -> rids ))) {
$partialAccounts [ $i ][ 'rid' ] = $this -> rids [ $rawAccounts [ $i ][ $ids [ 'sambaAccount_specialUser' ]]];
}
else {
$errMsg = $this -> messages [ 'specialUser' ][ 0 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-11-20 12:44:09 +00:00
}
}
else {
// default RID uid*2 + 1000
$partialAccounts [ $i ][ 'rid' ] = $partialAccounts [ $i ][ 'uidNumber' ] * 2 + 1000 ;
}
}
}
2004-12-09 21:40:39 +00:00
else { // hosts
for ( $i = 0 ; $i < sizeof ( $rawAccounts ); $i ++ ) {
if ( ! in_array ( " sambaAccount " , $partialAccounts [ $i ][ 'objectClass' ])) $partialAccounts [ $i ][ 'objectClass' ][] = " sambaAccount " ;
// domain
if ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_domain' ]] != " " ) {
if ( get_preg ( $rawAccounts [ $i ][ $ids [ 'sambaAccount_domain' ]], 'domainname' )) {
$partialAccounts [ $i ][ 'domain' ] = $rawAccounts [ $i ][ $ids [ 'sambaAccount_domain' ]];
}
else {
$errMsg = $this -> messages [ 'domain' ][ 1 ];
array_push ( $errMsg , array ( $i ));
2006-05-17 17:45:52 +00:00
$errors [] = $errMsg ;
2004-12-09 21:40:39 +00:00
}
}
2004-12-09 22:11:23 +00:00
// RID (RID uid*2 + 1000)
$partialAccounts [ $i ][ 'rid' ] = $partialAccounts [ $i ][ 'uidNumber' ] * 2 + 1000 ;
2004-12-09 21:40:39 +00:00
// passwords ( = host name)
$partialAccounts [ $i ][ 'lmPassword' ] = lmPassword ( substr ( $partialAccounts [ $i ][ 'uid' ], 0 , sizeof ( $partialAccounts [ $i ][ 'uid' ]) - 1 ));
$partialAccounts [ $i ][ 'ntPassword' ] = ntPassword ( substr ( $partialAccounts [ $i ][ 'uid' ], 0 , sizeof ( $partialAccounts [ $i ][ 'uid' ]) - 1 ));
// flags
$partialAccounts [ $i ][ 'acctFlags' ] = " [W ] " ;
}
}
2006-05-17 17:45:52 +00:00
return $errors ;
2004-11-20 12:44:09 +00:00
}
2005-01-22 10:50:10 +00:00
/**
* Loads the values of an account profile into internal variables .
*
* @ param array $profile hash array with profile values ( identifier => value )
*/
function load_profile ( $profile ) {
// profile mappings in meta data
parent :: load_profile ( $profile );
// special profile options
// use Unix password
if ( $profile [ 'sambaAccount_useunixpwd' ][ 0 ] == " true " ) {
$this -> useunixpwd = true ;
}
elseif ( $profile [ 'sambaAccount_useunixpwd' ][ 0 ] == " false " ) {
$this -> useunixpwd = false ;
}
// use no password
if ( $profile [ 'sambaAccount_acctFlagsN' ][ 0 ] == " true " ) {
$this -> nopwd = true ;
}
elseif ( $profile [ 'sambaAccount_acctFlagsN' ][ 0 ] == " false " ) {
$this -> nopwd = false ;
}
// password expiration
if ( $profile [ 'sambaAccount_acctFlagsX' ][ 0 ] == " true " ) {
$this -> noexpire = true ;
}
elseif ( $profile [ 'sambaAccount_acctFlagsX' ][ 0 ] == " false " ) {
$this -> noexpire = false ;
}
// use no password
if ( $profile [ 'sambaAccount_acctFlagsD' ][ 0 ] == " true " ) {
$this -> deactivated = true ;
}
elseif ( $profile [ 'sambaAccount_acctFlagsD' ][ 0 ] == " false " ) {
$this -> deactivated = false ;
}
}
2006-08-14 17:24:27 +00:00
2004-03-09 12:03:39 +00:00
}
2003-12-20 21:42:52 +00:00
?>