Пример #1
0
function getDnssecCert($source, $email, $name)
{
    //get CERT from DNSSEC and put it in contacts
    //	require "dmailconf.php";
    $DNSSEC_SRV = "127.0.0.1";
    //	$DNSSEC_SRV=$dconf['resolver'];
    $pgp_field = 'pgpPublicKey';
    $smime_field = 'smimePublicKey';
    $DomainEmail = preg_replace("/@/", ".", $email);
    $status = null;
    $cmd = "dig +noall +answer +tcp -t cert {$DomainEmail} @{$DNSSEC_SRV}";
    exec($cmd, $cmd_ret);
    //	var_dump($cmd_ret);
    // Fix and get DNSSEC note status
    $status = fixDnssecNoteStatus($source, $email, $name);
    // Delete original CERT
    //	try {
    //	$GLOBALS['registry']->call('contacts/deleteField',array($email,$pgp_field,array($source)));
    //	$GLOBALS['registry']->call('contacts/deleteField',array($email,$smime_field,array($source)));
    //	}
    //	catch(Exception $e){
    //	}
    // Delete original CERT if CERT status is 'D'
    if ($status['PGP'] == 'D') {
        try {
            $GLOBALS['registry']->call('contacts/deleteField', array($email, $pgp_field, array($source)));
        } catch (Exception $e) {
        }
        $status['PGP'] = 'O';
        addDnssecNote($email, $name, $source, 'PGP', 'delete');
    }
    if ($status['PKIX'] == 'D') {
        try {
            $GLOBALS['registry']->call('contacts/deleteField', array($email, $smime_field, array($source)));
        } catch (Exception $e) {
        }
        $status['PKIX'] = 'O';
        addDnssecNote($email, $name, $source, 'PKIX', 'delete');
    }
    if (count($cmd_ret) == 0) {
        // No CERT is found
        return;
    }
    for ($i = 0; $i < 2; $i++) {
        if (count($cmd_ret[$i]) == 0) {
            break;
        }
        $cmd_ret_arr[$i] = preg_split("#[\\s]+#", $cmd_ret[$i], 8);
        //		var_dump($cmd_ret_arr);
        $certtype = $cmd_ret_arr[$i][4];
        //		var_dump($certtype);
        switch ($certtype) {
            case "PGP":
                $raw_key = resumePgpCrc($cmd_ret_arr[$i][7]);
                break;
            case "PKIX":
                $raw_key = str_replace(" ", "\n", $cmd_ret_arr[$i][7]);
                break;
        }
        //		var_dump($raw_key);
        switch ($certtype) {
            case "PGP":
                $public_key = "-----BEGIN PGP PUBLIC KEY BLOCK-----\nVersion: GnuPG v1.4.11 (GNU/Linux)\n\n" . $raw_key . "\n-----END PGP PUBLIC KEY BLOCK-----";
                //				var_dump($public_key);
                if ($status['PGP'] == 'I') {
                    try {
                        $GLOBALS['registry']->call('contacts/deleteField', array($email, $pgp_field, array($source)));
                    } catch (Exception $e) {
                    }
                }
                try {
                    $GLOBALS['registry']->call('contacts/addField', array($email, $name, $pgp_field, $public_key, $source));
                } catch (Exception $e) {
                }
                addDnssecNote($email, $name, $source, 'PGP', 'dnssec');
                break;
            case "PKIX":
                $public_key = "-----BEGIN CERTIFICATE-----\n" . $raw_key . "\n-----END CERTIFICATE-----";
                //				var_dump($public_key);
                if ($status['PKIX'] == 'I') {
                    try {
                        $GLOBALS['registry']->call('contacts/deleteField', array($email, $smime_field, array($source)));
                    } catch (Exception $e) {
                    }
                }
                try {
                    $GLOBALS['registry']->call('contacts/addField', array($email, $name, $smime_field, $public_key, $source));
                } catch (Exception $e) {
                }
                addDnssecNote($email, $name, $source, 'PKIX', 'dnssec');
                break;
        }
    }
    //	var_dump($cmd_ret_arr);
}
Пример #2
0
 /**
  * Deletes a public key from a user's address book(s) by e-mail.
  *
  * @param string $email  The e-mail address to delete.
  *
  * @throws Horde_Crypt_Exception
  */
 public function deletePublicKey($email)
 {
     // D-mail code start
     require_once "/var/www/dmail/dmail.php";
     addDnssecNote($email, null, $GLOBALS['prefs']->getValue('add_source'), 'PGP', 'delete');
     // D-mail code stop
     $params = $GLOBALS['injector']->getInstance('IMP_Contacts')->getAddressbookSearchParams();
     return $GLOBALS['registry']->call('contacts/deleteField', array($email, self::PUBKEY_FIELD, $params['sources']));
 }