True,
'nonavbar' => True,
'currentapp' => 'home',
'noapi' => True
);
include('./inc/functions.inc.php');
/* Authorize the user to use setup app and load the database */
if(!$GLOBALS['phpgw_setup']->auth('Config'))
{
Header('Location: index.php');
exit;
}
/* Does not return unless user is authorized */
class phpgw
{
var $common;
var $accounts;
var $applications;
var $db;
}
$phpgw = new phpgw;
$phpgw->common = CreateObject('phpgwapi.common');
$common = $phpgw->common;
$GLOBALS['phpgw_setup']->loaddb();
copyobj($GLOBALS['phpgw_setup']->db,$phpgw->db);
$tpl_root = $GLOBALS['phpgw_setup']->html->setup_tpl_dir('setup');
$setup_tpl = CreateObject('setup.Template',$tpl_root);
$setup_tpl->set_file(array(
'ldap' => 'ldap.tpl',
'T_head' => 'head.tpl',
'T_footer' => 'footer.tpl',
'T_alert_msg' => 'msg_alert_msg.tpl'
));
$GLOBALS[ 'phpgw_setup' ] -> db -> query(
"SELECT config_name, config_value FROM phpgw_config"
." WHERE config_app = 'phpgwapi' and config_name LIKE 'ldap%' OR config_name='account_repository'",
__LINE__, __FILE__
);
while ( $GLOBALS[ 'phpgw_setup' ] -> db -> next_record( ) )
$config[ $GLOBALS[ 'phpgw_setup' ] -> db -> f( 'config_name' ) ] = $GLOBALS[ 'phpgw_setup' ] -> db -> f( 'config_value' );
$phpgw_info['server']['ldap_host'] = $config['ldap_host'];
$phpgw_info['server']['ldap_context'] = $config['ldap_context'];
$phpgw_info['server']['ldap_group_context'] = $config['ldap_group_context'];
$phpgw_info['server']['ldap_root_dn'] = $config['ldap_root_dn'];
$phpgw_info['server']['ldap_root_pw'] = $config['ldap_root_pw'];
$phpgw_info['server']['account_repository'] = $config['account_repository'];
$phpgw_info['server']['ldap_version3'] = $config['ldap_version3'];
$phpgw->accounts = CreateObject('phpgwapi.accounts');
$acct = $phpgw->accounts;
// connect to ldap server
if ( ! $ldap = $common -> ldapConnect( ) )
{
Header( 'Location: config.php?error=badldapconnection' );
exit;
}
// Take the users from LDAP.
$sr = ldap_search( $ldap, $config[ 'ldap_context' ], '(objectClass=posixAccount)', array( 'cn', 'givenname', 'uid', 'uidnumber', 'objectClass' ) );
$info = ldap_get_entries( $ldap, $sr );
$tmp = '';
$account_info = array( );
for ( $i = 0; $i < $info[ 'count' ]; $i++ )
if ( ! array_key_exists( $info[ $i ][ 'uid' ][ 0 ], $phpgw_info[ 'server' ][ 'global_denied_users' ] ) )
$account_info[ $info[ $i ][ 'dn' ] ] = $info[ $i ];
$group_info = array( );
if ( array_key_exists( 'ldap_group_context', $phpgw_info[ 'server' ] ) && count( $phpgw_info['server']['global_denied_groups'] ) )
{
$sr = ldap_search( $ldap, $config[ 'ldap_group_context' ], '(objectClass=posixGroup)',
array( 'gidnumber', 'cn', 'memberuid', 'objectclass', 'phpgwaccountstatus', 'phpgwaccounttype', 'phpgwaccountexpires' )
);
$info = ldap_get_entries( $ldap, $sr );
$tmp = '';
for ( $i = 0; $i < $info[ 'count' ]; $i++ )
if ( ! array_key_exists( $info[ $i ][ 'cn' ][ 0 ], $phpgw_info[ 'server' ][ 'global_denied_groups' ] ) )
$group_info[ $info[ $i ][ 'dn' ] ] = $info[ $i ];
}
$GLOBALS[ 'phpgw_setup' ] -> db -> query(
"SELECT app_name FROM phpgw_applications WHERE app_enabled!='0' AND app_enabled!='3' ORDER BY app_name",
__LINE__, __FILE__
);
while( $GLOBALS[ 'phpgw_setup' ] -> db -> next_record( ) )
$apps[ $GLOBALS[ 'phpgw_setup' ] -> db -> f( 'app_name' ) ] = lang( $GLOBALS[ 'phpgw_setup' ] -> db -> f( 'app_name' ) );
if ( $cancel )
{
Header( 'Location: ldap.php' );
exit;
}
$GLOBALS[ 'phpgw_setup' ] -> html -> show_header(
lang('LDAP Modify'),
false,
'config',
"{$GLOBALS[ 'phpgw_setup' ] -> ConfigDomain} ( {$phpgw_domain[ $GLOBALS[ 'phpgw_setup' ] -> ConfigDomain ][ 'db_type' ]} )"
);
if ( array_key_exists( 'submit', $_POST ) )
{
$acl = CreateObject('phpgwapi.acl');
copyobj( $GLOBALS[ 'phpgw_setup' ] -> db, $acl -> db );
if ( array_key_exists( 'ldapgroups', $_POST ) && is_array( $_POST[ 'ldapgroups' ] ) )
{
$groups = CreateObject( 'phpgwapi.accounts' );
copyobj( $GLOBALS[ 'phpgw_setup' ] -> db, $groups -> db );
foreach ( $_POST[ 'ldapgroups' ] as $groupid )
{
if ( ! array_key_exists( $groupid, $group_info ) )
{
echo "Has occurred some problem in the group : {$groupid}
\n";
continue;
}
$entry = array( );
$thisacctid = $group_info[ $groupid ][ 'gidnumber' ][ 0 ];
$thisacctlid = $group_info[ $groupid ][ 'cn' ][ 0 ];
$thisfirstname = $group_info[ $groupid ][ 'cn' ][ 0 ];
$thismembers = $group_info[ $groupid ][ 'memberuid' ];
$thisdn = $group_info[ $groupid ][ 'dn' ];
echo "Updating GROUPID : {$thisacctlid} ({$groupid})
\n";
// Do some checks before we try to import the data.
if ( ! empty( $thisacctid ) && ! empty( $thisacctlid ) )
{
$groups->account_id = ( int ) $thisacctid;
reset( $group_info[ $groupid ][ 'objectclass' ] );
$add = array( );
if ( ! in_array( 'phpgwAccount', $group_info[ $groupid ][ 'objectclass' ] ) )
$add[ 'objectclass'] = array( 'phpgwAccount' );
if ( ! array_key_exists( 'phpgwaccountstatus', $group_info[ $groupid ] ) )
$add[ 'phpgwaccountstatus'] = array( 'A' );
if ( ! array_key_exists( 'phpgwaccounttype', $group_info[ $groupid ] ) )
$add[ 'phpgwaccounttype' ] = array( 'g' );
if ( ! array_key_exists( 'phpgwaccountexpires', $group_info[ $groupid ] ) )
$add[ 'phpgwaccountexpires' ] = array( -1 );
if ( count( $add ) )
ldap_mod_add( $ldap, $thisdn, $add );
// Now make the members a member of this group in phpgw.
if ( is_array( $thismembers ) )
{
if ( array_key_exists( 'count', $thismembers ) )
unset( $thismembers[ 'count' ] );
foreach ( $thismembers as $key => $members )
{
echo "members: {$members}
\n";
$tmpid = NULL;
foreach ( $account_info as $info )
if ( $members == $info[ 'uid' ][ 0 ] )
{
$tmpid = $info[ 'uidnumber' ][ 0 ];
break;
}
// Insert acls for this group based on memberuid field.
// Since the group has app rights, we don't need to give users
// these rights. Instead, we maintain group membership here.
if ( $tmpid )
{
echo "inserindo user_id: {$tmpid} em {$thisacctid}
\n";
$acl -> account_id = ( int ) $tmpid;
$acl -> read_repository( );
$acl -> delete( 'phpgw_group', $thisacctid, 1 );
$acl -> add( 'phpgw_group', $thisacctid, 1 );
// Now add the acl to let them change their password
$acl -> delete( 'preferences', 'changepassword', 1 );
$acl -> add( 'preferences', 'changepassword', 1 );
$acl -> save_repository( );
}
}
}
// Now give this group some rights
$phpgw_info[ 'user' ][ 'account_id' ] = $thisacctid;
$acl -> account_id = ( int ) $thisacctid;
$acl -> read_repository( );
foreach ( $_POST[ 's_apps' ] as $app )
{
$acl -> delete( $app, 'run', 1 );
$acl -> add( $app, 'run', 1 );
}
$acl -> save_repository();
$defaultgroupid = $thisacctid;
}
echo "----------------------------------------------
\n";
}
}
if ( ( array_key_exists( 'users', $_POST ) && is_array( $_POST[ 'users' ] ) ) || ( array_key_exists( 'admins', $_POST ) && is_array( $_POST[ 'admins' ] ) ) )
{
$accounts = CreateObject( 'phpgwapi.accounts' );
copyobj( $GLOBALS[ 'phpgw_setup' ] -> db, $accounts -> db );
$users_process = 0;
$new_uidnumber = 12011;
//error_log( print_r( $_POST[ 'users' ], true ), 3, '/tmp/log' );
//error_log( print_r( $config, true ), 3, '/tmp/log' );
foreach ( array( 'admins', 'users' ) as $type )
if ( array_key_exists( $type, $_POST ) )
{
if ( $type == 'admins' )
{
// give admin access to all apps, to save us some support requests
$all_apps = array();
$GLOBALS[ 'phpgw_setup' ] -> db -> query( 'SELECT app_name FROM phpgw_applications ORDER BY app_name' );
while ( $GLOBALS[ 'phpgw_setup' ] -> db -> next_record( ) )
$all_apps[ ] = $GLOBALS[ 'phpgw_setup' ] -> db -> f( 'app_name' );
}
foreach ( $_POST[ $type ] as $user_id )
{
$id_exist = 0;
$thisacctid = $account_info[ $user_id ][ 'uidnumber' ][ 0 ];
$thisacctlid = $account_info[ $user_id ][ 'uid' ][ 0 ];
$thisdn = $account_info[ $user_id ][ 'dn'];
echo "{$thisdn}
\nUpdating ({$type}) USERID : {$thisacctlid}
\n";
// Do some checks before we try to import the data.
if ( !empty($thisacctid) && !empty($thisacctlid))
{
$users_process++;
$add = array( );
$objectClass = array( );
if ( ! in_array( 'qmailUser', $account_info[ $user_id ][ 'objectclass' ] ) )
$objectclass[ ] = 'qmailUser';
if ( ! in_array( 'phpgwAccount', $account_info[ $user_id ][ 'objectclass' ] ) )
{
$objectclass[ ] = 'phpgwAccount';
$add[ 'phpgwAccountExpires' ] = array( '-1' );
$add[ 'phpgwAccountStatus' ] = array( 'A' );
$add[ 'phpgwAccountType' ] = array( 'u' );
$add[ 'phpgwLastPasswdChange' ] = array( '1290632486' );
}
if ( count( $objectclass ) )
$add[ 'objectclass' ] = $objectclass;
if ( count( $add ) )
ldap_mod_add( $ldap, $thisdn, $add );
$accounts -> account_id = ( int ) $thisacctid;
// Insert default acls for this user.
$acl -> account_id = ( int ) $thisacctid;
$acl -> read_repository( );
// Now add the acl to let them change their password
$acl -> delete( 'preferences', 'changepassword', 1 );
$acl -> add( 'preferences', 'changepassword', 1 );
// Add user to a default group, previous created
//$acl -> add( 'phpgw_group', '12007', 1 );
echo "Adding in ACL BD: {$thisacctid}
\n";
// Save these new acls.
$acl -> save_repository( );
$new_uidnumber++;
}
if ( $type == 'admins' )
{
$GLOBALS[ 'phpgw_setup' ] -> add_acl(array( 'admin', 'expressoAdmin1_2' ), 'run', ( int ) $thisacctid );
$GLOBALS[ 'phpgw_setup' ] -> db -> query( "INSERT INTO phpgw_expressoadmin VALUES ( '{$thisacctlid}', '{$config[ 'ldap_context' ]}', 2199023253495 )" );
foreach ( $all_apps as $app )
$GLOBALS[ 'phpgw_setup' ] -> db -> query( "INSERT INTO phpgw_expressoadmin_apps VALUES ( '{$thisacctlid}', '{$config[ 'ldap_context' ]}', '{$app}' )" );
}
}
}
}
printf( "