Beispiel #1
0
function login($user, $pass)
{
    global $session;
    if (!valid_passwd($pass) || valid_user($user, $pass, $privilege)) {
        $session['user'] = $user;
        $session['privilege'] = $privilege;
        echo "&end";
    } else {
        echo "&notfound";
    }
}
Beispiel #2
0
/**
 * Attempt to login and generate a session
 *
 * @return array Session ID for user, error message if applicable
 */
function try_login()
{
    $login_error = "";
    $new_sid = "";
    $userID = null;
    if (!isset($_REQUEST['user']) && !isset($_REQUEST['passwd'])) {
        return array('SID' => '', 'error' => null);
    }
    if (is_ipbanned()) {
        $login_error = __('The login form is currently disabled ' . 'for your IP address, probably due ' . 'to sustained spam attacks. Sorry for the ' . 'inconvenience.');
        return array('SID' => '', 'error' => $login_error);
    }
    $dbh = DB::connect();
    $userID = uid_from_loginname($_REQUEST['user']);
    if (user_suspended($userID)) {
        $login_error = __('Account suspended');
        return array('SID' => '', 'error' => $login_error);
    } elseif (passwd_is_empty($userID)) {
        $login_error = __('Your password has been reset. ' . 'If you just created a new account, please ' . 'use the link from the confirmation email ' . 'to set an initial password. Otherwise, ' . 'please request a reset key on the %s' . 'Password Reset%s page.', '<a href="' . htmlspecialchars(get_uri('/passreset')) . '">', '</a>');
        return array('SID' => '', 'error' => $login_error);
    } elseif (!valid_passwd($userID, $_REQUEST['passwd'])) {
        $login_error = __("Bad username or password.");
        return array('SID' => '', 'error' => $login_error);
    }
    $logged_in = 0;
    $num_tries = 0;
    /* Generate a session ID and store it. */
    while (!$logged_in && $num_tries < 5) {
        $session_limit = config_get_int('options', 'max_sessions_per_user');
        if ($session_limit) {
            /*
             * Delete all user sessions except the
             * last ($session_limit - 1).
             */
            $q = "DELETE s.* FROM Sessions s ";
            $q .= "LEFT JOIN (SELECT SessionID FROM Sessions ";
            $q .= "WHERE UsersId = " . $userID . " ";
            $q .= "ORDER BY LastUpdateTS DESC ";
            $q .= "LIMIT " . ($session_limit - 1) . ") q ";
            $q .= "ON s.SessionID = q.SessionID ";
            $q .= "WHERE s.UsersId = " . $userID . " ";
            $q .= "AND q.SessionID IS NULL;";
            $dbh->query($q);
        }
        $new_sid = new_sid();
        $q = "INSERT INTO Sessions (UsersID, SessionID, LastUpdateTS)" . " VALUES (" . $userID . ", '" . $new_sid . "', UNIX_TIMESTAMP())";
        $result = $dbh->exec($q);
        /* Query will fail if $new_sid is not unique. */
        if ($result) {
            $logged_in = 1;
            break;
        }
        $num_tries++;
    }
    if (!$logged_in) {
        $login_error = __('An error occurred trying to generate a user session.');
        return array('SID' => $new_sid, 'error' => $login_error);
    }
    $q = "UPDATE Users SET LastLogin = UNIX_TIMESTAMP(), ";
    $q .= "LastLoginIPAddress = " . $dbh->quote(ip2long($_SERVER['REMOTE_ADDR'])) . " ";
    $q .= "WHERE ID = '{$userID}'";
    $dbh->exec($q);
    /* Set the SID cookie. */
    if (isset($_POST['remember_me']) && $_POST['remember_me'] == "on") {
        /* Set cookies for 30 days. */
        $timeout = config_get_int('options', 'persistent_cookie_timeout');
        $cookie_time = time() + $timeout;
        /* Set session for 30 days. */
        $q = "UPDATE Sessions SET LastUpdateTS = {$cookie_time} ";
        $q .= "WHERE SessionID = '{$new_sid}'";
        $dbh->exec($q);
    } else {
        $cookie_time = 0;
    }
    setcookie("AURSID", $new_sid, $cookie_time, "/", null, !empty($_SERVER['HTTPS']), true);
    $referer = in_request('referer');
    if (strpos($referer, aur_location()) !== 0) {
        $referer = '/';
    }
    header("Location: " . get_uri($referer));
    $login_error = "";
}