bug 841: not only check for serial number but for serial number and issuer
authorMichael Tänzer <neo@nhng.de>
Tue, 5 Jul 2011 23:01:24 +0000 (01:01 +0200)
committerMichael Tänzer <neo@nhng.de>
Tue, 5 Jul 2011 23:01:24 +0000 (01:01 +0200)
in combination when checking login

Fix provided by Uli60

Signed-off-by: Michael Tänzer <neo@nhng.de>
includes/lib/general.php [new file with mode: 0644]
includes/loggedin.php
www/index.php

diff --git a/includes/lib/general.php b/includes/lib/general.php
new file mode 100644 (file)
index 0000000..5a84303
--- /dev/null
@@ -0,0 +1,33 @@
+<? /*
+    LibreSSL - CAcert web application
+    Copyright (C) 2004-2011  CAcert Inc.
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; version 2 of the License.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+function rootcertid($CertIssuerCN)
+{
+       $query = "select * from `root_certs` where `Cert_Text`='".$CertIssuerCN."'";
+       $res = mysql_query($query);
+       if(mysql_num_rows($res) > 0)
+       {
+               $row = mysql_fetch_assoc($res);
+               $rootcertid = intval($row['id']);
+               return $rootcertid;
+       }
+       
+       return -1;
+}
+
+?>
index 355527f..2cbc121 100644 (file)
@@ -16,6 +16,7 @@
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
+       include_once("../includes/lib/general.php");
 
        if($_SERVER['HTTP_HOST'] == $_SESSION['_config']['securehostname'] && $_SESSION['profile']['id'] > 0 && $_SESSION['profile']['loggedin'] != 0)
        {
   
        if($_SERVER['HTTP_HOST'] == $_SESSION['_config']['securehostname'] && ($_SESSION['profile']['id'] == 0 || $_SESSION['profile']['loggedin'] == 0))
        {
-               $query = "select * from `emailcerts` where `serial`='${_SERVER['SSL_CLIENT_M_SERIAL']}' and `revoked`=0 and disablelogin=0 and
+               /* 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);
 
index fb215c6..ddfa610 100644 (file)
 
        if($id == 4 && $_SERVER['HTTP_HOST'] == $_SESSION['_config']['securehostname'])
        {
-               $query = "select * from `emailcerts` where `serial`='$_SERVER[SSL_CLIENT_M_SERIAL]' and `revoked`=0 and disablelogin=0 and
+               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)