Example #1
0
function _get_kostenstellen_lvm($user)
{
    $kostenstelle_prop = 'lvmkostenstelle';
    $ldap = gs_ldap_connect();
    //if (gs_get_conf('GS_LVM_USER_6_DIGIT_INT')) {
    // this check is not really needed as this is a custom function anyway
    $user = preg_replace('/^0+/', '', $user);
    # without leading "0" in their LDAP
    //}
    $u = gs_ldap_get_first($ldap, GS_LDAP_SEARCHBASE, '(' . GS_LDAP_PROP_USER . '=' . $user . ')', array($kostenstelle_prop));
    if (isGsError($u)) {
        return false;
    }
    if (!is_array($u)) {
        echo "Failed to get (" . GS_LDAP_PROP_USER . "=" . $user . ") from LDAP server.\n";
        return false;
    }
    $kostenstelle_prop = strToLower($kostenstelle_prop);
    if (!is_array($u[$kostenstelle_prop])) {
        return array();
    }
    return $u[$kostenstelle_prop];
}
function gs_user_external_number_del($user, $number)
{
    if (!preg_match('/^[a-z0-9\\-_.]+$/', $user)) {
        return new GsError('User must be alphanumeric.');
    }
    if (!preg_match('/^[\\d]+$/', $number)) {
        return new GsError('Number must be numeric.');
    }
    # connect to db
    #
    $db = gs_db_master_connect();
    if (!$db) {
        return new GsError('Could not connect to database.');
    }
    # get user_id
    #
    $user_id = $db->executeGetOne('SELECT `id` FROM `users` WHERE `user`=\'' . $db->escape($user) . '\'');
    if ($user_id < 1) {
        return new GsError('Unknown user.');
    }
    switch (GS_EXTERNAL_NUMBERS_BACKEND) {
        case 'ldap':
            $ldap = gs_ldap_connect();
            if (!$ldap) {
                return new GsError('Could not connect to LDAP server.');
            }
            # check if number exists (to return proper err msg)
            #
            /*
            $numbers = gs_user_external_numbers_get( $user );
            if (isGsError($numbers))
            	return new GsError( $numbers->getMsg() );
            if (! is_array($numbers))
            	return new GsError( 'Failed to get numbers from LDAP' );
            if (! in_array($number, $numbers, true))
            	return new GsError( 'No such number.' );
            */
            # find ldap user name
            #
            if (GS_LDAP_PROP_UID === GS_LDAP_PROP_USER) {
                $ldap_uid = $user;
                if (gs_get_conf('GS_LVM_USER_6_DIGIT_INT')) {
                    $user = preg_replace('/^0+/', '', $user);
                    # if the usernames in your LDAP are integers without
                    # a leading "0"
                }
            } else {
                if (gs_get_conf('GS_LVM_USER_6_DIGIT_INT')) {
                    $user = preg_replace('/^0+/', '', $user);
                    # if the usernames in your LDAP are integers without
                    # a leading "0"
                }
                $userArr = gs_ldap_get_first($ldap, GS_LDAP_SEARCHBASE, GS_LDAP_PROP_USER . '=' . $user, array(GS_LDAP_PROP_UID));
                if (isGsError($userArr)) {
                    return new GsError($userArr->getMsg());
                }
                if (!is_array($userArr)) {
                    return new GsError('Could not find user by "' . GS_LDAP_PROP_USER . '=' . $user . '" in search base "' . GS_LDAP_SEARCHBASE . '" in LDAP.');
                }
                $ldap_uid = @$userArr[strToLower(GS_LDAP_PROP_UID)][0];
                if (strLen($ldap_uid) < 1) {
                    return new GsError('Could not find user by "' . GS_LDAP_PROP_USER . '=' . $user . '" in search base "' . GS_LDAP_SEARCHBASE . '" in LDAP.');
                }
            }
            $dn = GS_LDAP_PROP_UID . '=' . $ldap_uid . ',' . GS_LDAP_SEARCHBASE;
            # delete number
            #
            $ok = @ldap_mod_del($ldap, $dn, array(GS_EXTERNAL_NUMBERS_LDAP_PROP => $number));
            if (!$ok) {
                if (@ldap_errNo($ldap) == 16) {
                    // err #16 is: "No such attribute"
                    return new GsError('No such number.');
                }
                return new GsError('Failed to delete number for LDAP user "' . $dn . '". - ' . gs_get_ldap_error($ldap));
            }
            break;
        case 'db':
        default:
            # check if number exists (to return proper err msg)
            #
            $num = (int) $db->executeGetOne('SELECT COUNT(*) FROM `users_external_numbers` WHERE `user_id`=' . $user_id . ' AND `number`=\'' . $db->escape($number) . '\'');
            if ($num < 1) {
                return new GsError('No such number.');
            }
            # delete number
            #
            $ok = $db->execute('DELETE FROM `users_external_numbers` WHERE `user_id`=' . $user_id . ' AND `number`=\'' . $db->escape($number) . '\'');
            if (!$ok) {
                return new GsError('Failed to delete external number.');
            }
            break;
    }
    return true;
}
function gs_user_external_numbers_get($user)
{
    if (!preg_match('/^[a-z0-9\\-_.]+$/', $user)) {
        return new GsError('User must be alphanumeric.');
    }
    # connect to db
    #
    $db = gs_db_master_connect();
    if (!$db) {
        return new GsError('Could not connect to database.');
    }
    # get user_id
    #
    $user_id = $db->executeGetOne('SELECT `id` FROM `users` WHERE `user`=\'' . $db->escape($user) . '\'');
    if ($user_id < 1) {
        return new GsError('Unknown user.');
    }
    # get external numbers
    #
    switch (GS_EXTERNAL_NUMBERS_BACKEND) {
        case 'ldap':
            //ldapsearch -x -D 'cn=root,dc=example,dc=com' -w secret -b 'ou=People,dc=example,dc=com' '(uid=demo2)' telephoneNumber
            $ldap = gs_ldap_connect();
            if (!$ldap) {
                return new GsError('Could not connect to LDAP server.');
            }
            $ldap_user = $user;
            if (gs_get_conf('GS_LVM_USER_6_DIGIT_INT')) {
                $ldap_user = preg_replace('/^0+/', '', $ldap_user);
                # if the usernames in your LDAP are integers without a
                # leading "0"
            }
            $userArr = gs_ldap_get_first($ldap, GS_LDAP_SEARCHBASE, GS_LDAP_PROP_USER . '=' . $ldap_user, array(GS_EXTERNAL_NUMBERS_LDAP_PROP));
            if (isGsError($userArr)) {
                return new GsError($userArr->getMsg());
            }
            if (!is_array($userArr)) {
                //return new GsError( 'User "'. GS_LDAP_PROP_USER .'='. $user .','. GS_LDAP_SEARCHBASE .'" not in LDAP.' );
                $numbers = array();
            } else {
                foreach ($userArr as $key => $arr) {
                    if (strCaseCmp($key, GS_EXTERNAL_NUMBERS_LDAP_PROP) == 0) {
                        $numbers = $arr;
                        sort($numbers);
                        break;
                    }
                }
            }
            gs_ldap_disconnect($ldap);
            break;
        case 'db':
        default:
            $rs = $db->execute('SELECT `number` FROM `users_external_numbers` WHERE `user_id`=' . $user_id . ' ORDER BY `number`');
            if (!$rs) {
                return new GsError('Failed to get external numbers.');
            }
            $numbers = array();
            while ($r = $rs->fetchRow()) {
                $numbers[] = $r['number'];
            }
            break;
    }
    return $numbers;
}
function gs_user_external_number_add($user, $number)
{
    if (!preg_match('/^[a-z0-9\\-_.]+$/', $user)) {
        return new GsError('User must be alphanumeric.');
    }
    if (!preg_match('/^[\\d]+$/', $number)) {
        return new GsError('Number must be numeric.');
    }
    # connect to db
    #
    $db = gs_db_master_connect();
    if (!$db) {
        return new GsError('Could not connect to database.');
    }
    # get user_id
    #
    $user_id = $db->executeGetOne('SELECT `id` FROM `users` WHERE `user`=\'' . $db->escape($user) . '\'');
    if ($user_id < 1) {
        return new GsError('Unknown user.');
    }
    # add number
    #
    switch (GS_EXTERNAL_NUMBERS_BACKEND) {
        case 'ldap':
            $ldap = gs_ldap_connect();
            if (!$ldap) {
                return new GsError('Could not connect to LDAP server.');
            }
            # find ldap user name
            #
            if (GS_LDAP_PROP_UID === GS_LDAP_PROP_USER) {
                $ldap_uid = $user;
                if (gs_get_conf('GS_LVM_USER_6_DIGIT_INT')) {
                    $user = preg_replace('/^0+/', '', $user);
                    # if the usernames in your LDAP are integers without
                    # a leading "0"
                }
            } else {
                if (gs_get_conf('GS_LVM_USER_6_DIGIT_INT')) {
                    $user = preg_replace('/^0+/', '', $user);
                    # if the usernames in your LDAP are integers without
                    # a leading "0"
                }
                $userArr = gs_ldap_get_first($ldap, GS_LDAP_SEARCHBASE, GS_LDAP_PROP_USER . '=' . $user, array(GS_LDAP_PROP_UID));
                if (isGsError($userArr)) {
                    return new GsError($userArr->getMsg());
                }
                if (!is_array($userArr)) {
                    return new GsError('Could not find user by "' . GS_LDAP_PROP_USER . '=' . $user . '" in search base "' . GS_LDAP_SEARCHBASE . '" in LDAP.');
                }
                $ldap_uid = @$userArr[strToLower(GS_LDAP_PROP_UID)][0];
                if (strLen($ldap_uid) < 1) {
                    return new GsError('Could not find user by "' . GS_LDAP_PROP_USER . '=' . $user . '" in search base "' . GS_LDAP_SEARCHBASE . '" in LDAP.');
                }
            }
            $dn = GS_LDAP_PROP_UID . '=' . $ldap_uid . ',' . GS_LDAP_SEARCHBASE;
            $ok = @ldap_mod_add($ldap, $dn, array(GS_EXTERNAL_NUMBERS_LDAP_PROP => $number));
            if (!$ok && @ldap_errNo($ldap) != 20) {
                // err #20 is: "Type or value exists"
                return new GsError('Failed to add number to LDAP user "' . $dn . '". - ' . gs_get_ldap_error($ldap));
                return false;
            }
            break;
        case 'db':
        default:
            $ok = $db->execute('REPLACE INTO `users_external_numbers` (`user_id`, `number`) VALUES (' . $user_id . ', \'' . $db->escape($number) . '\')');
            if (!$ok) {
                return new GsError('Failed to add external number.');
            }
            break;
    }
    return true;
}
Example #5
0
function _gs_legacy_user_map_lvm($user)
{
    global $dispatcher_errors_html;
    if (!$user) {
        return false;
    }
    if (GS_LDAP_PROP_UID === GS_LDAP_PROP_USER) {
        return $user;
    }
    $ldap = gs_ldap_connect();
    $u = gs_ldap_get_first($ldap, GS_LDAP_SEARCHBASE, '(' . GS_LDAP_PROP_UID . '=' . $user . ')', array(GS_LDAP_PROP_USER));
    if (isGsError($u)) {
        //echo $u->$msg;
        $dispatcher_errors_html[] = sPrintF(htmlEnt(__('Failed to get user "%s" from LDAP server.')), $user);
        return false;
    }
    if (!is_array($u)) {
        $dispatcher_errors_html[] = sPrintF(htmlEnt(__('User "%s" not found in LDAP database.')), $user);
        return false;
    }
    $lc_GS_LDAP_PROP_USER = strToLower(GS_LDAP_PROP_USER);
    if (!isset($u[$lc_GS_LDAP_PROP_USER])) {
        return false;
    }
    if (!isset($u[$lc_GS_LDAP_PROP_USER][0])) {
        return false;
    }
    $ret = $u[$lc_GS_LDAP_PROP_USER][0];
    //if (gs_get_conf('GS_LVM_USER_6_DIGIT_INT')) {
    // this check is not really needed as this is a custom function anyway
    $ret = str_pad($ret, 6, '0', STR_PAD_LEFT);
    //}
    return $ret;
}