91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
<?php
 | 
						|
/*
 | 
						|
  Copyright (C) 2013-2015 Grégory Soutadé
 | 
						|
  
 | 
						|
  This file is part of gPass.
 | 
						|
  
 | 
						|
  gPass 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, either version 3 of the License, or
 | 
						|
  (at your option) any later version.
 | 
						|
  
 | 
						|
  gPass 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 gPass.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
*/
 | 
						|
 | 
						|
include("conf.php");
 | 
						|
 | 
						|
function load_database()
 | 
						|
{
 | 
						|
    global $REQUESTS_MIN_DELAY;
 | 
						|
 | 
						|
    try {
 | 
						|
        $db = new SQLite3("./gpass.bdd", SQLITE3_OPEN_READWRITE);
 | 
						|
    }
 | 
						|
    catch(Exception $e)
 | 
						|
    {
 | 
						|
        die("<b>Unable to load database for user $user !</b><br/>");
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    list($usec, $sec) = explode(" ", microtime());
 | 
						|
    $usec = $usec + $sec*1000;
 | 
						|
 | 
						|
    try {
 | 
						|
        $last_time = $db->querySingle("SELECT last_access_time FROM conf");
 | 
						|
        if ($last_time <= $usec &&
 | 
						|
        ($usec - $last_time) < $REQUESTS_MIN_DELAY)
 | 
						|
        {
 | 
						|
            // Brute force ??
 | 
						|
            $db->close();
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
        $db->query("UPDATE conf SET last_access_time=$usec");
 | 
						|
        $db->close();
 | 
						|
        $db = new SQLite3("./gpass.bdd", SQLITE3_OPEN_READONLY);
 | 
						|
    }
 | 
						|
    catch(Exception $e)
 | 
						|
    {
 | 
						|
        $db->close();
 | 
						|
        die("<b>Unable to load database for user $user !</b><br/>");
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    return $db;
 | 
						|
}
 | 
						|
 | 
						|
$PROTOCOL_VERSION = 4;
 | 
						|
 | 
						|
$db = load_database();
 | 
						|
 | 
						|
$res = "";
 | 
						|
 | 
						|
$statement = $db->prepare("SELECT password FROM gpass WHERE login=:login");
 | 
						|
 | 
						|
echo "protocol=gpass-$PROTOCOL_VERSION\n";
 | 
						|
if ($PBKDF2_LEVEL != 1000)
 | 
						|
    echo "pbkdf2_level=$PBKDF2_LEVEL\n";
 | 
						|
 | 
						|
for ($i=0; $i<$MAX_PASSWORDS_PER_REQUEST && isset($_POST["k$i"]); $i++)
 | 
						|
{
 | 
						|
    $statement->bindValue(":login", addslashes($_POST["k$i"]));
 | 
						|
    $result = $statement->execute();
 | 
						|
    $row = $result->fetchArray(SQLITE3_ASSOC);
 | 
						|
    $result->finalize();
 | 
						|
    if (isset($row["password"]))
 | 
						|
    {
 | 
						|
        echo "pass=" . $row["password"] . "\n";
 | 
						|
        break;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
$statement->close();
 | 
						|
 | 
						|
echo "<end>";
 | 
						|
 | 
						|
?> |