| | |
| | | } |
| | | /* dir for dkim-keys writeable? */ |
| | | $mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail'); |
| | | if (isset($mail_config['dkim_path']) && (!empty($mail_config['dkim_path'])) && isset($data['new']['dkim_private']) && !empty($data['new']['dkim_private'])) { |
| | | |
| | | if ( isset($mail_config['dkim_path']) && |
| | | !empty($mail_config['dkim_path']) && |
| | | isset($data['new']['dkim_private']) && |
| | | !empty($data['new']['dkim_private']) && |
| | | $mail_config['dkim_path'] != '/' |
| | | ) { |
| | | if (!is_dir($mail_config['dkim_path'])) { |
| | | $app->log('DKIM Path '.$mail_config['dkim_path'].' not found - (re)created.', LOGLEVEL_DEBUG); |
| | | $amavis_user=exec('grep -o "^amavis:\|^vscan:" /etc/passwd'); |
| | | if($app->system->is_user('amavis')) { |
| | | $amavis_user='amavis'; |
| | | } elseif ($app->system->is_user('vscan')) { |
| | | $amavis_user='vscan'; |
| | | } |
| | | else { |
| | | $amavis_user=''; |
| | | } |
| | | if(!empty($amavis_user)) { |
| | | $amavis_user=rtrim($amavis_user, ":"); |
| | | mkdir($mail_config['dkim_path'], 0750, true); |
| | | exec('chown '.$amavis_user.' /var/lib/amavis/dkim'); |
| | | unset $amavis_user; |
| | | exec('chown '.$amavis_user.' '.escapeshellarg($mail_config['dkim_path'])); |
| | | unset($amavis_user); |
| | | } else { |
| | | mkdir($mail_config['dkim_path'], 0755, true); |
| | | $app->log('No user amavis or vscan found - using root for '.$mail_config['dkim_path'] |
| | | , LOGLEVEL_WARNING); |
| | | } |
| | | } |
| | | |
| | |
| | | $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); |
| | | exec('cat '.escapeshellarg($key_file.'.private').'|openssl rsa -pubout 2> /dev/null', $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_DEBUG); |
| | | } else { |
| | | $app->log('Unable to save DKIM Privte-key to '.$key_file.'.private', LOGLEVEL_ERROR); |
| | | } |
| | | return $success; |
| | | } |