pmcf 1.35.2 → 1.35.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/pmcf-named-defs +28 -20
- package/package.json +1 -1
- package/src/owner.mjs +6 -1
- package/types/owner.d.mts +1 -0
package/bin/pmcf-named-defs
CHANGED
|
@@ -19,6 +19,10 @@ console.log("depends", "mf-named");
|
|
|
19
19
|
console.log("replaces", "mf-named-zones");
|
|
20
20
|
console.log("description", `named defintions for ${owner.name}`);
|
|
21
21
|
|
|
22
|
+
function fullName(name) {
|
|
23
|
+
return name.endsWith(".") ? name : name + ".";
|
|
24
|
+
}
|
|
25
|
+
|
|
22
26
|
async function generateNamedDefs(owner, targetDir) {
|
|
23
27
|
const dns = owner.dns;
|
|
24
28
|
const ttl = dns.recordTTL;
|
|
@@ -33,20 +37,24 @@ async function generateNamedDefs(owner, targetDir) {
|
|
|
33
37
|
|
|
34
38
|
let maxKeyLength;
|
|
35
39
|
|
|
36
|
-
const createRecord = (key, type,
|
|
40
|
+
const createRecord = (key, type, ...values) => {
|
|
41
|
+
values = values.map(v =>
|
|
42
|
+
typeof v === "number" ? String(v).padStart(3) : v
|
|
43
|
+
);
|
|
44
|
+
|
|
37
45
|
return {
|
|
38
46
|
key,
|
|
39
47
|
toString: () =>
|
|
40
48
|
`${key.padEnd(maxKeyLength, " ")} ${ttl} IN ${type.padEnd(
|
|
41
49
|
5,
|
|
42
50
|
" "
|
|
43
|
-
)} ${
|
|
51
|
+
)} ${values.join(" ")}`
|
|
44
52
|
};
|
|
45
53
|
};
|
|
46
54
|
|
|
47
55
|
for await (const mail of owner.services({ type: "smtp" })) {
|
|
48
56
|
records.add(
|
|
49
|
-
createRecord("@", "MX",
|
|
57
|
+
createRecord("@", "MX", mail.priority, fullName(mail.owner.domainName))
|
|
50
58
|
);
|
|
51
59
|
}
|
|
52
60
|
|
|
@@ -55,10 +63,12 @@ async function generateNamedDefs(owner, targetDir) {
|
|
|
55
63
|
const SOARecord = createRecord(
|
|
56
64
|
"@",
|
|
57
65
|
"SOA",
|
|
58
|
-
|
|
66
|
+
fullName(nameserver?.domainName),
|
|
67
|
+
fullName(rname),
|
|
68
|
+
`(${updates})`
|
|
59
69
|
);
|
|
60
70
|
|
|
61
|
-
const NSRecord = createRecord("@", "NS",
|
|
71
|
+
const NSRecord = createRecord("@", "NS", fullName(nameserver?.ipAddress));
|
|
62
72
|
|
|
63
73
|
const catalogZone = {
|
|
64
74
|
id: `catalog.${domain}`,
|
|
@@ -66,7 +76,7 @@ async function generateNamedDefs(owner, targetDir) {
|
|
|
66
76
|
records: new Set([
|
|
67
77
|
SOARecord,
|
|
68
78
|
NSRecord,
|
|
69
|
-
createRecord(`version.${domain}
|
|
79
|
+
createRecord(fullName(`version.${domain}`), "TXT", '"2"')
|
|
70
80
|
])
|
|
71
81
|
};
|
|
72
82
|
|
|
@@ -78,7 +88,7 @@ async function generateNamedDefs(owner, targetDir) {
|
|
|
78
88
|
zones.push(zone);
|
|
79
89
|
|
|
80
90
|
for (const subnet of owner.subnets()) {
|
|
81
|
-
if (subnet.prefix) {
|
|
91
|
+
if (!subnet.isLinkLocal && subnet.prefix) {
|
|
82
92
|
const reverseArpa = reverseArpaAddress(subnet.prefix);
|
|
83
93
|
const reverseZone = {
|
|
84
94
|
id: reverseArpa,
|
|
@@ -101,30 +111,28 @@ async function generateNamedDefs(owner, targetDir) {
|
|
|
101
111
|
if (!hosts.has(host)) {
|
|
102
112
|
zone.records.add(
|
|
103
113
|
createRecord(
|
|
104
|
-
host.domainName
|
|
105
|
-
isIPv4Address(address) ? "A
|
|
114
|
+
fullName(host.domainName),
|
|
115
|
+
isIPv4Address(address) ? "A" : "AAAA",
|
|
106
116
|
normalizeIPAddress(address)
|
|
107
117
|
)
|
|
108
118
|
);
|
|
109
119
|
hosts.add(host);
|
|
110
120
|
for (const service of host.services()) {
|
|
111
|
-
//console.log(service.name);
|
|
112
121
|
if (service.master && service.alias) {
|
|
113
122
|
zone.records.add(
|
|
114
|
-
createRecord(service.alias, "CNAME",
|
|
123
|
+
createRecord(service.alias, "CNAME", fullName(host.domainName))
|
|
115
124
|
);
|
|
116
125
|
}
|
|
117
126
|
|
|
118
127
|
if (dns.hasSVRRecords && service.srvPrefix) {
|
|
119
128
|
zone.records.add(
|
|
120
129
|
createRecord(
|
|
121
|
-
`${service.srvPrefix}.${host.domainName}
|
|
130
|
+
fullName(`${service.srvPrefix}.${host.domainName}`),
|
|
122
131
|
"SRV",
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}.`
|
|
132
|
+
service.priority,
|
|
133
|
+
service.weight,
|
|
134
|
+
service.port,
|
|
135
|
+
fullName(host.domainName)
|
|
128
136
|
)
|
|
129
137
|
);
|
|
130
138
|
}
|
|
@@ -133,12 +141,12 @@ async function generateNamedDefs(owner, targetDir) {
|
|
|
133
141
|
|
|
134
142
|
const reverseZone = networkInterface.network.subnet?.reverseZone;
|
|
135
143
|
|
|
136
|
-
if (reverseZone
|
|
144
|
+
if (reverseZone) {
|
|
137
145
|
reverseZone.records.add(
|
|
138
146
|
createRecord(
|
|
139
|
-
reverseArpaAddress(address)
|
|
147
|
+
fullName(reverseArpaAddress(address)),
|
|
140
148
|
"PTR",
|
|
141
|
-
|
|
149
|
+
fullName(networkInterface.host.domainName)
|
|
142
150
|
)
|
|
143
151
|
);
|
|
144
152
|
}
|
package/package.json
CHANGED
package/src/owner.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { asArray, normalizeCIDR } from "./utils.mjs";
|
|
1
|
+
import { asArray, normalizeCIDR, isLinkLocal } from "./utils.mjs";
|
|
2
2
|
import { Base } from "./base.mjs";
|
|
3
3
|
import { DNSService } from "./dns.mjs";
|
|
4
4
|
|
|
@@ -368,6 +368,11 @@ export class Subnet extends Base {
|
|
|
368
368
|
return address.startsWith(this.prefix);
|
|
369
369
|
}
|
|
370
370
|
|
|
371
|
+
get isLinkLocal()
|
|
372
|
+
{
|
|
373
|
+
return isLinkLocal(this.address);
|
|
374
|
+
}
|
|
375
|
+
|
|
371
376
|
get prefix() {
|
|
372
377
|
const [prefix] = this.name.split("/");
|
|
373
378
|
return prefix;
|
package/types/owner.d.mts
CHANGED