Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F3768457
D833.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D833.diff
View Options
diff --git a/roles/mailserver/dkim/files/bin/get-dkim-dns-entries b/roles/mailserver/dkim/files/bin/get-dkim-dns-entries
new file mode 100755
--- /dev/null
+++ b/roles/mailserver/dkim/files/bin/get-dkim-dns-entries
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Parses arguments
+if [ $# -eq 0 ]
+then
+ echo "Usage: `basename $0` <domain>"
+ exit 1
+fi
+
+DOMAIN=$1
+DIR=/etc/opendkim/keys/$DOMAIN
+
+if [ ! -d "$DIR" ]
+then
+ echo "Directory not found: $DIR"
+ exit 2
+fi
+
+for f in $DIR/*.txt
+do
+ get-dkim-dns-entry $f
+done
diff --git a/roles/mailserver/dkim/files/bin/get-dkim-dns-entry b/roles/mailserver/dkim/files/bin/get-dkim-dns-entry
new file mode 120000
--- /dev/null
+++ b/roles/mailserver/dkim/files/bin/get-dkim-dns-entry
@@ -0,0 +1 @@
+get-dkim-dns-entry.php
\ No newline at end of file
diff --git a/roles/mailserver/dkim/files/bin/get-dkim-dns-entry.php b/roles/mailserver/dkim/files/bin/get-dkim-dns-entry.php
new file mode 100755
--- /dev/null
+++ b/roles/mailserver/dkim/files/bin/get-dkim-dns-entry.php
@@ -0,0 +1,57 @@
+#!/usr/bin/env php
+<?php
+
+///
+/// Parse arguments
+///
+
+if ($argc < 2) {
+ fwrite(STDERR, "Usage: $argv[0] $file\n");
+ exit(1);
+}
+
+$file = $argv[1];
+
+if (!file_exists($file)) {
+ fwrite(STDERR, "File not found: $file\n");
+ exit(2);
+}
+
+///
+/// Reads file
+///
+
+function to_one_line ($string) {
+ return str_replace(["\r", "\n"], "", trim($string));
+}
+
+function to_one_line_from_bind ($string) {
+ $toReturn = "";
+ foreach (explode('"', $string) as $fragment) {
+ if (trim($fragment) !== "") {
+ $toReturn .= $fragment;
+ }
+ }
+ return $toReturn;
+}
+
+function get_dns_record ($content) {
+ $record = to_one_line($content);
+ if (!preg_match("/(.*)\._domainkey/", $record, $matches)) {
+ throw new Exception("Can't parse file.");
+ }
+ $subdomain = $matches[0];
+
+ if (!preg_match("/\s+IN\s+TXT\s+\((.*)\)/", $record, $matches)) {
+ throw new Exception("Can't parse file.");
+ }
+ $value = to_one_line_from_bind($matches[1]);
+
+ return "$subdomain TXT $value";
+}
+
+try {
+ echo get_dns_record(file_get_contents($file)), "\n";
+} catch (Exception $ex) {
+ fwrite(STDERR, $ex->getMessage());
+}
diff --git a/roles/mailserver/dkim/files/bin/get-dkim-key-table b/roles/mailserver/dkim/files/bin/get-dkim-key-table
new file mode 100755
--- /dev/null
+++ b/roles/mailserver/dkim/files/bin/get-dkim-key-table
@@ -0,0 +1,11 @@
+#!/bin/sh
+for d in /etc/opendkim/keys/*
+do
+ DOMAIN=`basename $d`
+
+ for f in $d/*.private
+ do
+ SELECTOR=`basename $f .private`
+ echo "$SELECTOR._domainkey.$DOMAIN $DOMAIN:$SELECTOR:$f"
+ done
+done
diff --git a/roles/mailserver/dkim/files/bin/get-dkim-signing-table b/roles/mailserver/dkim/files/bin/get-dkim-signing-table
new file mode 100755
--- /dev/null
+++ b/roles/mailserver/dkim/files/bin/get-dkim-signing-table
@@ -0,0 +1,11 @@
+#!/bin/sh
+for d in /etc/opendkim/keys/*
+do
+ DOMAIN=`basename $d`
+
+ for f in $d/*.private
+ do
+ SELECTOR=`basename $f .private`
+ echo "$DOMAIN $SELECTOR._domainkey.$DOMAIN"
+ done
+done
diff --git a/roles/mailserver/dkim/files/etc/Makefile b/roles/mailserver/dkim/files/etc/Makefile
new file mode 100644
--- /dev/null
+++ b/roles/mailserver/dkim/files/etc/Makefile
@@ -0,0 +1,12 @@
+RM=rm -f
+
+all: KeyTable SigningTable
+
+clean:
+ ${RM} KeyTable SigningTable
+
+KeyTable:
+ get-dkim-key-table > KeyTable
+
+SigningTable:
+ get-dkim-signing-table > SigningTable
diff --git a/roles/mailserver/dkim/files/etc/TrustedHosts b/roles/mailserver/dkim/files/etc/TrustedHosts
new file mode 100644
--- /dev/null
+++ b/roles/mailserver/dkim/files/etc/TrustedHosts
@@ -0,0 +1,5 @@
+127.0.0.1
+localhost
+10.0.3.8
+dwellers.nasqueron.org
+mail.nasqueron.org
diff --git a/roles/mailserver/dkim/init.sls b/roles/mailserver/dkim/init.sls
new file mode 100644
--- /dev/null
+++ b/roles/mailserver/dkim/init.sls
@@ -0,0 +1,55 @@
+# -------------------------------------------------------------
+# Salt — OpenDKIM configuration
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Project: Nasqueron
+# Created: 2017-01-14
+# License: Trivial work, not eligible to copyright
+# -------------------------------------------------------------
+
+# -------------------------------------------------------------
+# OpenDKIM configuration files
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+opendkim_config_files:
+ file.recurse:
+ {% if grains['os'] == 'FreeBSD' %}
+ - name: /usr/local/etc/opendkim
+ {% else %}
+ - name: /etc/opendkim
+ {% endif %}
+ - source: salt://roles/mailserver/dkim/files/etc
+ - include_empty: True
+ - clean: False
+ - dir_mode: 711
+ - file_mode: 644
+
+opendkim_keys_directory:
+ file.directory:
+ {% if grains['os'] == 'FreeBSD' %}
+ - name: /usr/local/etc/opendkim/keys
+ {% else %}
+ - name: /etc/opendkim/keys
+ {% endif %}
+ - dir_mode: 711
+ - user: opendkim
+ - group: opendkim
+
+# -------------------------------------------------------------
+# OpenDKIM binaries
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+opendkim_software:
+ pkg:
+ - installed
+ - pkgs:
+ - opendkim
+ {% if grains['os'] == 'Debian' or grains['os'] == 'Ubuntu' %}
+ - opendkim-tools
+ {% endif %}
+
+opendkim_extra_utilities:
+ file.recurse:
+ - name: /usr/local/bin
+ - source: salt://roles/mailserver/dkim/files/bin
+ - dir_mode: 755
+ - file_mode: 755
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Nov 24, 08:05 (10 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2256663
Default Alt Text
D833.diff (5 KB)
Attached To
Mode
D833: Deploy OpenDKIM on mail server
Attached
Detach File
Event Timeline
Log In to Comment