[fix] misc bugs in m_ssl (incorrect table and certificate name) + restart instead of reload if necessary in src/reload-certs
This commit is contained in:
		
							parent
							
								
									649b2c55d6
								
							
						
					
					
						commit
						5489387103
					
				| 
						 | 
					@ -179,21 +179,27 @@ class m_ssl {
 | 
				
			||||||
     * try to minimize zero-file-size risk or timing attack
 | 
					     * try to minimize zero-file-size risk or timing attack
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private function copycert($target,$id) {
 | 
					    private function copycert($target,$id) {
 | 
				
			||||||
        global $db;
 | 
					        global $db,$msg;
 | 
				
			||||||
        $db->query("SELECT * FROM certificate WHERE id=?",array($id));
 | 
					        $msg->raise("INFO","ssl",_("Copying system certificate $id on $target"));
 | 
				
			||||||
 | 
					        $db->query("SELECT * FROM certificates WHERE id=?",array($id));
 | 
				
			||||||
        if (!$db->next_record()) return false;
 | 
					        if (!$db->next_record()) return false;
 | 
				
			||||||
        if (!file_put_contents("/etc/ssl/certs/".$target.".crt.tmp",trim($db->Record["sslcrt"])."\n".trim($db->Record["sslchain"])))
 | 
					        if (!file_put_contents("/etc/ssl/certs/".$target.".pem.tmp",trim($db->Record["sslcrt"])."\n".trim($db->Record["sslchain"]))) {
 | 
				
			||||||
 | 
					            $msg->raise("ERROR","ssl",_("Can't put file into /etc/ssl/certs/".$target.".pem.tmp, failing properly"));            
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        chown("/etc/ssl/certs/".$target.".crt.tmp","root");
 | 
					        }
 | 
				
			||||||
        chgrp("/etc/ssl/certs/".$target.".crt.tmp","ssl-cert");
 | 
					        chown("/etc/ssl/certs/".$target.".pem.tmp","root");
 | 
				
			||||||
        chmod("/etc/ssl/certs/".$target.".crt.tmp",0755);
 | 
					        chgrp("/etc/ssl/certs/".$target.".pem.tmp","ssl-cert");
 | 
				
			||||||
        if (!file_put_contents("/etc/ssl/private/".$target.".key.tmp",$db->Record["sslkey"])) 
 | 
					        chmod("/etc/ssl/certs/".$target.".pem.tmp",0755);
 | 
				
			||||||
 | 
					        if (!file_put_contents("/etc/ssl/private/".$target.".key.tmp",$db->Record["sslkey"])) {
 | 
				
			||||||
 | 
					            $msg->raise("ERROR","ssl",_("Can't put file into /etc/ssl/private/".$target.".key.tmp, failing properly"));
 | 
				
			||||||
 | 
					            @unlink("/etc/ssl/certs/".$target.".pem.tmp");
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        chown("/etc/ssl/private/".$target.".key.tmp","root");
 | 
					        chown("/etc/ssl/private/".$target.".key.tmp","root");
 | 
				
			||||||
        chgrp("/etc/ssl/private/".$target.".key.tmp","ssl-cert");
 | 
					        chgrp("/etc/ssl/private/".$target.".key.tmp","ssl-cert");
 | 
				
			||||||
        chmod("/etc/ssl/private/".$target.".key.tmp",0750);
 | 
					        chmod("/etc/ssl/private/".$target.".key.tmp",0750);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        rename("/etc/ssl/certs/".$target.".crt.tmp","/etc/ssl/certs/".$target.".crt");
 | 
					        rename("/etc/ssl/certs/".$target.".pem.tmp","/etc/ssl/certs/".$target.".pem");
 | 
				
			||||||
        rename("/etc/ssl/private/".$target.".key.tmp","/etc/ssl/private/".$target.".key");
 | 
					        rename("/etc/ssl/private/".$target.".key.tmp","/etc/ssl/private/".$target.".key");
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -232,7 +238,7 @@ INSTR(CONCAT(sd.sub,IF(sd.sub!='','.',''),sd.domaine),'.')+1))=?
 | 
				
			||||||
                continue; // this certificate is used (even though it's expired :/ ) 
 | 
					                continue; // this certificate is used (even though it's expired :/ ) 
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            $CRTDIR = self::KEY_REPOSITORY . "/" . floor($db->Record["id"]/1000);
 | 
					            $CRTDIR = self::KEY_REPOSITORY . "/" . floor($db->Record["id"]/1000);
 | 
				
			||||||
            @unlink($CRTDIR."/".$db->Record["id"].".crt");
 | 
					            @unlink($CRTDIR."/".$db->Record["id"].".pem");
 | 
				
			||||||
            @unlink($CRTDIR."/".$db->Record["id"].".key");
 | 
					            @unlink($CRTDIR."/".$db->Record["id"].".key");
 | 
				
			||||||
            @unlink($CRTDIR."/".$db->Record["id"].".chain");
 | 
					            @unlink($CRTDIR."/".$db->Record["id"].".chain");
 | 
				
			||||||
            $d=opendir($CRTDIR);
 | 
					            $d=opendir($CRTDIR);
 | 
				
			||||||
| 
						 | 
					@ -634,15 +640,15 @@ SELECT ?,?,?, FROM_UNIXTIME(?), FROM_UNIXTIME(?), ?, ?, sslcsr FROM certificate
 | 
				
			||||||
        chmod($CRTDIR,0750);
 | 
					        chmod($CRTDIR,0750);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (
 | 
					        if (
 | 
				
			||||||
            !file_exists($CRTDIR . "/" . $cert["id"].".crt") ||
 | 
					            !file_exists($CRTDIR . "/" . $cert["id"].".pem") ||
 | 
				
			||||||
            !file_exists($CRTDIR . "/" . $cert["id"].".key")) {
 | 
					            !file_exists($CRTDIR . "/" . $cert["id"].".key")) {
 | 
				
			||||||
            // write the files (first time we use a certificate)
 | 
					            // write the files (first time we use a certificate)
 | 
				
			||||||
            file_put_contents($CRTDIR . "/" . $cert["id"].".crt", $cert["sslcrt"]);
 | 
					            file_put_contents($CRTDIR . "/" . $cert["id"].".pem", $cert["sslcrt"]);
 | 
				
			||||||
            file_put_contents($CRTDIR . "/" . $cert["id"].".key", $cert["sslkey"]);
 | 
					            file_put_contents($CRTDIR . "/" . $cert["id"].".key", $cert["sslkey"]);
 | 
				
			||||||
            // set the proper rights on those files :
 | 
					            // set the proper rights on those files :
 | 
				
			||||||
            chown($CRTDIR . "/" . $cert["id"].".crt","root");
 | 
					            chown($CRTDIR . "/" . $cert["id"].".pem","root");
 | 
				
			||||||
            chgrp($CRTDIR . "/" . $cert["id"].".crt","ssl-cert");
 | 
					            chgrp($CRTDIR . "/" . $cert["id"].".pem","ssl-cert");
 | 
				
			||||||
            chmod($CRTDIR . "/" . $cert["id"].".crt",0640);
 | 
					            chmod($CRTDIR . "/" . $cert["id"].".pem",0640);
 | 
				
			||||||
            chown($CRTDIR . "/" . $cert["id"].".key","root");
 | 
					            chown($CRTDIR . "/" . $cert["id"].".key","root");
 | 
				
			||||||
            chgrp($CRTDIR . "/" . $cert["id"].".key","ssl-cert");
 | 
					            chgrp($CRTDIR . "/" . $cert["id"].".key","ssl-cert");
 | 
				
			||||||
            chmod($CRTDIR . "/" . $cert["id"].".key",0640);
 | 
					            chmod($CRTDIR . "/" . $cert["id"].".key",0640);
 | 
				
			||||||
| 
						 | 
					@ -656,7 +662,7 @@ SELECT ?,?,?, FROM_UNIXTIME(?), FROM_UNIXTIME(?), ?, ?, sslcsr FROM certificate
 | 
				
			||||||
        // we have the files, let's fill the output array :
 | 
					        // we have the files, let's fill the output array :
 | 
				
			||||||
        $output=array(
 | 
					        $output=array(
 | 
				
			||||||
            "id" => $cert["id"],
 | 
					            "id" => $cert["id"],
 | 
				
			||||||
            "crt" => $CRTDIR . "/" . $cert["id"].".crt",
 | 
					            "crt" => $CRTDIR . "/" . $cert["id"].".pem",
 | 
				
			||||||
            "key" => $CRTDIR . "/" . $cert["id"].".key",
 | 
					            "key" => $CRTDIR . "/" . $cert["id"].".key",
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        if (file_exists($CRTDIR . "/" . $cert["id"].".chain")) {
 | 
					        if (file_exists($CRTDIR . "/" . $cert["id"].".chain")) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,8 +30,15 @@ $ssl->cron_new_certs();
 | 
				
			||||||
$services=array("postfix","dovecot","proftpd","apache2");
 | 
					$services=array("postfix","dovecot","proftpd","apache2");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
foreach($services as $service) {
 | 
					foreach($services as $service) {
 | 
				
			||||||
    echo "Reloading $service\n";
 | 
					    passthru("service $service status",&$ret);
 | 
				
			||||||
    passthru("service $service reload");
 | 
					    if ($ret!=0) {
 | 
				
			||||||
    echo "Done...\n";
 | 
					        echo "$service not running, restarting\n";
 | 
				
			||||||
 | 
					        passthru("service $service restart");
 | 
				
			||||||
 | 
					        echo "Done...\n";
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        echo "$service running, reloading\n";
 | 
				
			||||||
 | 
					        passthru("service $service reload");
 | 
				
			||||||
 | 
					        echo "Done...\n";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue