summaryrefslogtreecommitdiff
path: root/login.php
blob: 100b8f0d9ddac6ebc3b6548b2ab1afb205ef3986 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Login processing to PgpoolAdmin
 *
 * PHP versions 4 and 5
 *
 * LICENSE: Permission to use, copy, modify, and distribute this software and
 * its documentation for any purpose and without fee is hereby
 * granted, provided that the above copyright notice appear in all
 * copies and that both that copyright notice and this permission
 * notice appear in supporting documentation, and that the name of the
 * author not be used in advertising or publicity pertaining to
 * distribution of the software without specific, written prior
 * permission. The author makes no representations about the
 * suitability of this software for any purpose.  It is provided "as
 * is" without express or implied warranty.
 *
 * @author     Ryuma Ando <[email protected]>
 * @copyright  2003-2018 PgPool Global Development Group
 * @version    CVS: $Id$
 */

require_once('common.php');
require_once('command.php');

/* --------------------------------------------------------------------- */
/* login.php                                                             */
/* --------------------------------------------------------------------- */

// Check loginstatus
$success = FALSE;
if (isset($_SESSION[SESSION_LOGIN_USER])) {
    $success = TRUE;
}

// Do login
if ($success == FALSE) {
    if (isset($_POST['username']) && $_POST['username'] != '') {
        $username = trim($_POST['username']);
    } else {
        $tpl->display('login.tpl');
        exit();
    }

    if (isset($_POST['password']) && $_POST['password'] != '') {
        $password = trim($_POST['password']);
    } else {
        $tpl->display('login.tpl');
        exit();
    }

    $md5username = md5($username);
    $md5password = md5($password);

    if (!file_exists(_PGPOOL2_PASSWORD_FILE)) {
        $errorCode = 'e7001';
        $tpl->assign('errorCode', $errorCode);
        $tpl->display('error.tpl');
        exit();
    }

    // Check each rows in pcp.conf to search
    $fp = fopen(_PGPOOL2_PASSWORD_FILE, 'r');
    $input = "{$md5username}:{$md5password}";

    if ($fp != NULL) {
        while (!feof($fp)) {
            
            $line = trim(fgets($fp));
            $line_arr = explode(':', $line);

            // Ignore empty lines and comment lines
            if (count($line_arr) != 2 || $line_arr[0] == '' || $line_arr[1] == '' || 
                strpos($line, '#') === 0) {
                continue;
            }

            $expected_username = md5($line_arr[0]);
            $expected_password = $line_arr[1];
            $expected = "{$expected_username}:{$expected_password}";

            if (hash_equals($expected, $input)) {
                $_SESSION[SESSION_LOGIN_USER]          = $username;
                $_SESSION[SESSION_LOGIN_USER_PASSWORD] = $password;
                $success = TRUE;
                break;
            }
        }
    }
    fclose($fp);

    // If login falied, show login page again.
    if (!$success) {
        $tpl->display('login.tpl');
        exit();
    }
}

// If user has already logined, show status page.
header("Location: status.php");
exit();