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); }
/** * 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'])); }