diff options
author | Michael Tänzer <neo@nhng.de> | 2011-07-27 01:03:24 +0200 |
---|---|---|
committer | Michael Tänzer <neo@nhng.de> | 2011-07-27 01:03:24 +0200 |
commit | b2c1b55f1be7930dadcdb656e929b9e9e0b54aa2 (patch) | |
tree | 76b1d1ee6cb0c84945085b521dc18147725ebcdf | |
parent | b5ee07271aea9e0722a7ed58e52f80b495d190d0 (diff) | |
download | cacert-devel-b2c1b55f1be7930dadcdb656e929b9e9e0b54aa2.tar.gz cacert-devel-b2c1b55f1be7930dadcdb656e929b9e9e0b54aa2.tar.xz cacert-devel-b2c1b55f1be7930dadcdb656e929b9e9e0b54aa2.zip |
bug 841: extract the whole cert-login into a function
Signed-off-by: Michael Tänzer <neo@nhng.de>
-rw-r--r-- | includes/lib/general.php | 25 | ||||
-rw-r--r-- | includes/loggedin.php | 10 | ||||
-rw-r--r-- | www/index.php | 18 |
3 files changed, 35 insertions, 18 deletions
diff --git a/includes/lib/general.php b/includes/lib/general.php index 5a84303..7353d11 100644 --- a/includes/lib/general.php +++ b/includes/lib/general.php @@ -16,15 +16,32 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -function rootcertid($CertIssuerCN) +/** + * Checks if the user may log in and retrieve the user id + * + * Usually called with $_SERVER['SSL_CLIENT_M_SERIAL'] and + * $_SERVER['SSL_CLIENT_I_DN_CN'] + * + * @param $serial string + * usually $_SERVER['SSL_CLIENT_M_SERIAL'] + * @param $issuer_cn string + * usually $_SERVER['SSL_CLIENT_I_DN_CN'] + * @return int + * the user id, -1 in case of error + */ +function get_user_id_from_cert($serial, $issuer_cn) { - $query = "select * from `root_certs` where `Cert_Text`='".$CertIssuerCN."'"; + $query = "select `id` from `emailcerts` where + `serial`='".mysql_escape_string($serial)."' and + `rootcert`= (select `id` from `root_certs` where + `Cert_Text`='".mysql_escape_string($issuer_cn)."') and + `revoked`=0 and disablelogin=0 and + UNIX_TIMESTAMP(`expire`) - UNIX_TIMESTAMP() > 0"; $res = mysql_query($query); if(mysql_num_rows($res) > 0) { $row = mysql_fetch_assoc($res); - $rootcertid = intval($row['id']); - return $rootcertid; + return intval($row['id']); } return -1; diff --git a/includes/loggedin.php b/includes/loggedin.php index 2cbc121..4a3b89e 100644 --- a/includes/loggedin.php +++ b/includes/loggedin.php @@ -49,11 +49,12 @@ `revoked`=0 and disablelogin=0 and UNIX_TIMESTAMP(`expire`) - UNIX_TIMESTAMP() > 0"; $res = mysql_query($query); + + $user_id = get_user_id_from_cert($_SERVER['SSL_CLIENT_M_SERIAL'], + $_SERVER['SSL_CLIENT_I_DN_CN']); - if(mysql_num_rows($res) > 0) + if($user_id >= 0) { - $row = mysql_fetch_assoc($res); - $_SESSION['profile']['loggedin'] = 0; $_SESSION['profile'] = ""; foreach($_SESSION as $key) @@ -66,7 +67,8 @@ session_unregister($key); } - $_SESSION['profile'] = mysql_fetch_assoc(mysql_query("select * from `users` where `id`='".$row['memid']."'")); + $_SESSION['profile'] = mysql_fetch_assoc(mysql_query( + "select * from `users` where `id`='".$user_id."'")); if($_SESSION['profile']['locked'] == 0) $_SESSION['profile']['loggedin'] = 1; else diff --git a/www/index.php b/www/index.php index ddfa610..109689a 100644 --- a/www/index.php +++ b/www/index.php @@ -149,17 +149,15 @@ if($id == 4 && $_SERVER['HTTP_HOST'] == $_SESSION['_config']['securehostname']) { include_once("../includes/lib/general.php"); - /* identify unique certs serial number related to root or subroot */ - $query = "select * from `emailcerts` where - `serial`='".$_SERVER['SSL_CLIENT_M_SERIAL']."' and - `rootcert`='".rootcertid($_SERVER['SSL_CLIENT_I_DN_CN'])."' and - `revoked`=0 and disablelogin=0 and - UNIX_TIMESTAMP(`expire`) - UNIX_TIMESTAMP() > 0"; - $res = mysql_query($query); - if(mysql_num_rows($res) > 0) + $user_id = get_user_id_from_cert($_SERVER['SSL_CLIENT_M_SERIAL'], + $_SERVER['SSL_CLIENT_I_DN_CN']); + + if($user_id >= 0) { - $row = mysql_fetch_assoc($res); - $_SESSION['profile'] = mysql_fetch_assoc(mysql_query("select * from `users` where `id`='$row[memid]' and `deleted`=0 and `locked`=0")); + $_SESSION['profile'] = mysql_fetch_assoc(mysql_query( + "select * from `users` where + `id`='$user_id' and `deleted`=0 and `locked`=0")); + if($_SESSION['profile']['id'] != 0) { $_SESSION['profile']['loggedin'] = 1; |