fix dkim: Shouldn’t be different for domain and subdomain (causes issue while sending mail)

This commit is contained in:
Usman Nasir
2020-05-19 13:29:39 +05:00
parent 4d92f10b30
commit 860fff09a3
3 changed files with 97 additions and 30 deletions

View File

@@ -652,6 +652,12 @@ class MailServerManager:
return ACLManager.loadError()
try:
import tldextract
extractDomain = tldextract.extract(domainName)
domainName = extractDomain.domain + '.' + extractDomain.suffix
path = "/etc/opendkim/keys/" + domainName + "/default.txt"
command = "sudo cat " + path
output = ProcessUtilities.outputExecutioner(command, 'opendkim')

View File

@@ -121,7 +121,6 @@ class DNS:
subDomain = extractDomain.subdomain
if len(subDomain) == 0:
if Domains.objects.filter(name=topLevelDomain).count() == 0:
try:
pdns = PDNSStatus.objects.get(pk=1)
@@ -440,12 +439,66 @@ class DNS:
DNS.createDNSRecord(zone, actualSubDomain, "A", ipAddress, 0, 3600)
## Mail Record
DNS.createDNSRecord(zone, 'mail.' + actualSubDomain, "A", ipAddress, 0, 3600)
# CNAME Records.
cNameValue = "www." + actualSubDomain
DNS.createDNSRecord(zone, cNameValue, "CNAME", actualSubDomain, 0, 3600)
## MX Records
mxValue = "mail." + actualSubDomain
record = Records(domainOwner=zone,
domain_id=zone.id,
name=actualSubDomain,
type="MX",
content=mxValue,
ttl=3600,
prio="10",
disabled=0,
auth=1)
record.save()
## TXT Records
record = Records(domainOwner=zone,
domain_id=zone.id,
name=actualSubDomain,
type="TXT",
content="v=spf1 a mx ip4:" + ipAddress + " ~all",
ttl=3600,
prio=0,
disabled=0,
auth=1)
record.save()
record = Records(domainOwner=zone,
domain_id=zone.id,
name="_dmarc." + actualSubDomain,
type="TXT",
content="v=DMARC1; p=none",
ttl=3600,
prio=0,
disabled=0,
auth=1)
record.save()
record = Records(domainOwner=zone,
domain_id=zone.id,
name="_domainkey." + actualSubDomain,
type="TXT",
content="t=y; o=~;",
ttl=3600,
prio=0,
disabled=0,
auth=1)
record.save()
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
command = 'sudo systemctl restart pdns'
ProcessUtilities.executioner(command)
@@ -465,6 +518,7 @@ class DNS:
extractDomain = tldextract.extract(domain)
topLevelDomain = extractDomain.domain + '.' + extractDomain.suffix
subDomain = extractDomain.subdomain
zone = Domains.objects.get(name=topLevelDomain)
@@ -487,9 +541,18 @@ class DNS:
auth=1)
record.save()
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
command = ' systemctl restart pdns'
ProcessUtilities.executioner(command)
if len(subDomain) > 0:
if Records.objects.filter(domainOwner=zone, name="default._domainkey." + domain).count() == 0:
record = Records(domainOwner=zone,
domain_id=zone.id,
name="default._domainkey." + domain,
type="TXT",
content=output[leftIndex:rightIndex],
ttl=3600,
prio=0,
disabled=0,
auth=1)
record.save()
if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
command = ' systemctl restart pdns'

View File

@@ -214,13 +214,11 @@ class mailUtilities:
import tldextract
#extractDomain = tldextract.extract(virtualHostName)
#virtualHostName = extractDomain.domain + '.' + extractDomain.suffix
if os.path.exists("/etc/opendkim/keys/" + virtualHostName + "/default.txt"):
return 1, "None"
actualDomain = virtualHostName
extractDomain = tldextract.extract(virtualHostName)
virtualHostName = extractDomain.domain + '.' + extractDomain.suffix
if not os.path.exists("/etc/opendkim/keys/" + virtualHostName + "/default.txt"):
path = '/etc/opendkim/keys/%s' % (virtualHostName)
command = 'mkdir %s' % (path)
ProcessUtilities.normalExecutioner(command)
@@ -248,7 +246,7 @@ class mailUtilities:
keyTable = "/etc/opendkim/KeyTable"
configToWrite = "default._domainkey." + virtualHostName + " " + virtualHostName + ":default:/etc/opendkim/keys/" + virtualHostName + "/default.private\n"
configToWrite = "default._domainkey." + actualDomain + " " + actualDomain + ":default:/etc/opendkim/keys/" + virtualHostName + "/default.private\n"
writeToFile = open(keyTable, 'a')
writeToFile.write(configToWrite)
@@ -257,7 +255,7 @@ class mailUtilities:
## Edit signing table
signingTable = "/etc/opendkim/SigningTable"
configToWrite = "*@" + virtualHostName + " default._domainkey." + virtualHostName + "\n"
configToWrite = "*@" + actualDomain + " default._domainkey." + actualDomain + "\n"
writeToFile = open(signingTable, 'a')
writeToFile.write(configToWrite)
@@ -266,7 +264,7 @@ class mailUtilities:
## Trusted hosts
trustedHosts = "/etc/opendkim/TrustedHosts"
configToWrite = virtualHostName + "\n"
configToWrite = actualDomain + "\n"
writeToFile = open(trustedHosts, 'a')
writeToFile.write(configToWrite)