Skip to content

Commit d285231

Browse files
committed
updated ddns resolver to accept any domain/subdomain instead of domains/subdomains prefixed with ddns, update resolution to return ipv4 addresses
1 parent cae8ba9 commit d285231

File tree

6 files changed

+9
-18
lines changed

6 files changed

+9
-18
lines changed

backend/internal/nginx.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ const internalNginx = {
143143
if (typeof host.access_list !== 'undefined' && host.access_list && typeof host.access_list.clients !== 'undefined' && host.access_list.clients) {
144144
for (const client of host.access_list.clients) {
145145
const address = client.address;
146-
if (ddnsResolver.requiresResolution(address)) {
146+
if (ddnsResolver.ddnsRegex.test(address)) {
147147
const p = ddnsResolver.resolveAddress(address)
148148
.then((resolvedIP) => {
149149
Object.defineProperty(client, 'resolvedAddress', {value: resolvedIP});

backend/lib/ddns_resolver/ddns_resolver.js

+4-13
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,8 @@ const logger = require('../../logger').ddns;
33
const utils = require('../utils');
44

55
const ddnsResolver = {
6-
/**
7-
* Checks whether the address requires resolution (i.e. starts with ddns:)
8-
* @param {String} address
9-
* @returns {boolean}
10-
*/
11-
requiresResolution: (address) => {
12-
if (typeof address !== 'undefined' && address && address.toLowerCase().startsWith('ddns:')) {
13-
return true;
14-
}
15-
return false;
16-
},
6+
/** Pattern to match any valid domain/subdomain */
7+
ddnsRegex: /'^((?!-)[A-Za-z\d-]{1,63}(?<!-)\.)+[A-Za-z]{2,6}$'/,
178

189
/**
1910
* Resolves the given address to its IP
@@ -35,7 +26,7 @@ const ddnsResolver = {
3526
ddnsResolver._cache.delete(address);
3627
// Reach here only if cache value doesn't exist or needs to be updated
3728
let host = address.toLowerCase();
38-
if (host.startsWith('ddns:')) {
29+
if (ddnsRegex.test(host)) {
3930
host = host.substring(5);
4031
}
4132
return ddnsResolver._queryHost(host)
@@ -64,7 +55,7 @@ const ddnsResolver = {
6455
* @returns {Promise}
6556
*/
6657
_queryHost: (host) => {
67-
return utils.execSafe('getent', ['hosts', host])
58+
return utils.execSafe('getent', ['ahostsv4', 'hosts', host])
6859
.then((result) => {
6960
if (result.length < 8) {
7061
logger.error(`IP lookup for ${host} returned invalid output: ${result}`);

backend/lib/ddns_resolver/ddns_updater.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ const ddnsUpdater = {
6363
continue;
6464
}
6565
for (const client of row.clients) {
66-
if (!ddnsResolver.requiresResolution(client.address)) {
66+
if (!ddnsResolver.ddnsRegex.test(client.address)) {
6767
continue;
6868
}
6969
if (!usedAddresses.has(client.address)) {

backend/schema/components/access-list-object.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
},
4141
{
4242
"type": "string",
43-
"pattern": "^ddns:[\\w\\.-]+$"
43+
"pattern": "^((?!-)[A-Za-z\\d-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$"
4444
}
4545
]
4646
},

backend/schema/paths/nginx/access-lists/listID/put.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
},
7777
{
7878
"type": "string",
79-
"pattern": "^ddns:[\\w\\.-]+$"
79+
"pattern": "^((?!-)[A-Za-z\\d-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$"
8080
}
8181
]
8282
},

backend/schema/paths/nginx/access-lists/post.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
},
6666
{
6767
"type": "string",
68-
"pattern": "^ddns:[\\w\\.-]+$"
68+
"pattern": "^((?!-)[A-Za-z\\d-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$"
6969
}
7070
]
7171
},

0 commit comments

Comments
 (0)