| | |
| | | <?php
|
| | |
|
| | | /*
|
| | | Copyright (c) 2007 - 2013, Till Brehm, projektfarm Gmbh
|
| | | Copyright (c) 2013, Florian Schaal, info@schaal-24.de
|
| | | All rights reserved.
|
| | | <?php |
| | | |
| | | /* |
| | | Copyright (c) 2007 - 2013, Till Brehm, projektfarm Gmbh |
| | | Copyright (c) 2013, Florian Schaal, info@schaal-24.de |
| | | All rights reserved. |
| | | |
| | | Redistribution and use in source and binary forms, with or without modification, |
| | | are permitted provided that the following conditions are met: |
| | |
| | | /* |
| | | Register for the events |
| | | */ |
| | | $app->plugins->registerEvent('mail_domain_delete',$this->plugin_name,'domain_dkim_delete');
|
| | | $app->plugins->registerEvent('mail_domain_insert',$this->plugin_name,'domain_dkim_insert');
|
| | | $app->plugins->registerEvent('mail_domain_update',$this->plugin_name,'domain_dkim_update');
|
| | | }
|
| | |
|
| | | /*
|
| | | $app->plugins->registerEvent('mail_domain_delete',$this->plugin_name,'domain_dkim_delete'); |
| | | $app->plugins->registerEvent('mail_domain_insert',$this->plugin_name,'domain_dkim_insert'); |
| | | $app->plugins->registerEvent('mail_domain_update',$this->plugin_name,'domain_dkim_update'); |
| | | } |
| | | |
| | | /* |
| | | This function gets the amavisd-config file |
| | | */ |
| | | function get_amavis_config() {
|
| | | $pos_config=array(
|
| | | '/etc/amavisd.conf',
|
| | | '/etc/amavisd.conf/50-user',
|
| | | '/etc/amavis/conf.d/50-user'
|
| | | );
|
| | | $amavis_configfile='';
|
| | | foreach($pos_config as $conf) {
|
| | | function get_amavis_config() { |
| | | $pos_config=array( |
| | | '/etc/amavisd.conf', |
| | | '/etc/amavisd.conf/50-user', |
| | | '/etc/amavis/conf.d/50-user' |
| | | ); |
| | | $amavis_configfile=''; |
| | | foreach($pos_config as $conf) { |
| | | if (is_file($conf)) { |
| | | $amavis_configfile=$conf; |
| | | break; |
| | |
| | | $check=false; |
| | | } |
| | | } else { |
| | | $app->log('Unable to write DKIM settings; Check your config!',LOGLEVEL_ERROR);
|
| | | $check=false;
|
| | | }
|
| | | return $check;
|
| | | }
|
| | | |
| | | $app->log('Unable to write DKIM settings; Check your config!',LOGLEVEL_ERROR); |
| | | $check=false; |
| | | } |
| | | return $check; |
| | | } |
| | | |
| | | /* |
| | | This function restarts amavis |
| | | */ |
| | | function restart_amavis() { |
| | | global $app,$conf;
|
| | | $initfile=$conf['init_scripts'].'/amavis';
|
| | | $app->log('Restarting amavis.',LOGLEVEL_DEBUG);
|
| | | exec(escapeshellarg($conf['init_scripts']).escapeshellarg('/amavis').' restart',$output);
|
| | | foreach($output as $logline) $app->log($logline,LOGLEVEL_DEBUG);
|
| | | }
|
| | |
|
| | | /*
|
| | | This function writes the keyfiles (public and private)
|
| | | */
|
| | | function write_dkim_key($key_file,$key_value,$key_domain) {
|
| | | global $app,$mailconfig;
|
| | | global $app,$conf; |
| | | $initfile=$conf['init_scripts'].'/amavis'; |
| | | $app->log('Reloading amavis.',LOGLEVEL_DEBUG); |
| | | exec(escapeshellarg($conf['init_scripts']).escapeshellarg('/amavis').' reload',$output); |
| | | foreach($output as $logline) $app->log($logline,LOGLEVEL_DEBUG); |
| | | } |
| | | |
| | | /* |
| | | This function writes the keyfiles (public and private) |
| | | */ |
| | | function write_dkim_key($key_file,$key_value,$key_domain) { |
| | | global $app,$mailconfig; |
| | | $success=false; |
| | | if (!file_put_contents($key_file.'.private',$key_value) === false) { |
| | | $app->log('Saved DKIM Private-key to '.$key_file.'.private',LOGLEVEL_DEBUG);
|
| | | $success=true;
|
| | | /* now we get the DKIM Public-key */
|
| | | exec('cat '.escapeshellarg($key_file.'.private').'|openssl rsa -pubout',$pubkey,$result);
|
| | | $public_key='';
|
| | | foreach($pubkey as $values) $public_key=$public_key.$values."\n";
|
| | | /* save the DKIM Public-key in dkim-dir */
|
| | | if (!file_put_contents($key_file.'.public',$public_key) === false) |
| | | $app->log('Saved DKIM Public to '.$key_domain.'.',LOGLEVEL_DEBUG);
|
| | | else $app->log('Unable to save DKIM Public to '.$key_domain.'.',LOGLEVEL_WARNING);
|
| | | } |
| | | return $success;
|
| | | }
|
| | | $app->log('Saved DKIM Private-key to '.$key_file.'.private',LOGLEVEL_DEBUG); |
| | | $success=true; |
| | | /* now we get the DKIM Public-key */ |
| | | exec('cat '.escapeshellarg($key_file.'.private').'|openssl rsa -pubout',$pubkey,$result); |
| | | $public_key=''; |
| | | foreach($pubkey as $values) $public_key=$public_key.$values."\n"; |
| | | /* save the DKIM Public-key in dkim-dir */ |
| | | if (!file_put_contents($key_file.'.public',$public_key) === false) |
| | | $app->log('Saved DKIM Public to '.$key_domain.'.',LOGLEVEL_DEBUG); |
| | | else $app->log('Unable to save DKIM Public to '.$key_domain.'.',LOGLEVEL_WARNING); |
| | | } |
| | | return $success; |
| | | } |
| | | |
| | | /* |
| | | This function removes the keyfiles |
| | | */ |
| | | function remove_dkim_key($key_file,$key_domain) {
|
| | | global $app;
|
| | | if (file_exists($key_file.'.private')) {
|
| | | exec('rm -f '.escapeshellarg($key_file.'.private'));
|
| | | $app->log('Deleted the DKIM Private-key for '.$key_domain.'.',LOGLEVEL_DEBUG);
|
| | | } else $app->log('Unable to delete the DKIM Private-key for '.$key_domain.' (not found).',LOGLEVEL_DEBUG);
|
| | | if (file_exists($key_file.'.public')) {
|
| | | exec('rm -f '.escapeshellarg($key_file.'.public'));
|
| | | $app->log('Deleted the DKIM Public-key for '.$key_domain.'.',LOGLEVEL_DEBUG);
|
| | | } else $app->log('Unable to delete the DKIM Public-key for '.$key_domain.' (not found).',LOGLEVEL_DEBUG);
|
| | | }
|
| | | function remove_dkim_key($key_file,$key_domain) { |
| | | global $app; |
| | | if (file_exists($key_file.'.private')) { |
| | | exec('rm -f '.escapeshellarg($key_file.'.private')); |
| | | $app->log('Deleted the DKIM Private-key for '.$key_domain.'.',LOGLEVEL_DEBUG); |
| | | } else $app->log('Unable to delete the DKIM Private-key for '.$key_domain.' (not found).',LOGLEVEL_DEBUG); |
| | | if (file_exists($key_file.'.public')) { |
| | | exec('rm -f '.escapeshellarg($key_file.'.public')); |
| | | $app->log('Deleted the DKIM Public-key for '.$key_domain.'.',LOGLEVEL_DEBUG); |
| | | } else $app->log('Unable to delete the DKIM Public-key for '.$key_domain.' (not found).',LOGLEVEL_DEBUG); |
| | | } |
| | | |
| | | /* |
| | | This function adds the entry to the amavisd-config |
| | |
| | | $mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail'); |
| | | if ( substr($mail_config['dkim_path'],strlen($mail_config['dkim_path'])-1) == '/' ) |
| | | $mail_config['dkim_path'] = substr($mail_config['dkim_path'],0,strlen($mail_config['dkim_path'])-1); |
| | | if ($this->write_dkim_key($mail_config['dkim_path']."/".$data['new']['domain'],$data['new']['dkim_private'],$data['new']['domain'])) {
|
| | | $this->add_to_amavis($data['new']['domain']);
|
| | | } else {
|
| | | $app->log('Error saving the DKIM Private-key for '.$data['new']['domain'].' - DKIM is not enabled for the domain.',LOGLEVEL_ERROR);
|
| | | }
|
| | | }
|
| | |
|
| | | if ($this->write_dkim_key($mail_config['dkim_path']."/".$data['new']['domain'],$data['new']['dkim_private'],$data['new']['domain'])) { |
| | | $this->add_to_amavis($data['new']['domain']); |
| | | } else { |
| | | $app->log('Error saving the DKIM Private-key for '.$data['new']['domain'].' - DKIM is not enabled for the domain.',LOGLEVEL_ERROR); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | This function controlls the removement of keyfiles (public and private) |
| | | and the entry in the amavisd-config |
| | |
| | | function domain_dkim_delete($event_name,$data) { |
| | | if (isset($data['old']['dkim']) && $data['old']['dkim'] == 'y') $this->remove_dkim($data['old']); |
| | | } |
| | |
|
| | | function domain_dkim_insert($event_name,$data) {
|
| | | if (isset($data['new']['dkim']) && $data['new']['dkim']=='y' && $this->check_system($data)) {
|
| | | $this->add_dkim($data);
|
| | | }
|
| | | }
|
| | | |
| | | function domain_dkim_insert($event_name,$data) { |
| | | if (isset($data['new']['dkim']) && $data['new']['dkim']=='y' && $this->check_system($data)) { |
| | | $this->add_dkim($data); |
| | | } |
| | | } |
| | | |
| | | function domain_dkim_update($event_name,$data) { |
| | | global $app; |