-
Notifications
You must be signed in to change notification settings - Fork 912
Commit
The hostname part of a DNS FQDN can allow for additional characters other than specified in `man 7 hostname`. This extends is_dnsaddr and the test issue #5657. Also fixes a typo in a comment. Changelog-Fixed: wireaddr: #5657 allow '_' underscore in hostname part of DNS FQDN
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -375,18 +375,24 @@ bool is_wildcardaddr(const char *arg) | |
return streq(arg, ""); | ||
} | ||
|
||
/* Rules: | ||
/* The rules to check for DNS FQDNs, see `man 7 hostname` | ||
* | ||
* - not longer than 255 | ||
* - segments are separated with . dot | ||
* - segments do not start or end with - hyphen | ||
* - segments must be longer thant zero | ||
* - lowercase a-z and digits 0-9 and - hyphen | ||
* - segments must be longer than zero | ||
* - allow lowercase a-z and digits 0-9 and - hyphen | ||
* - additionall we allow for an '_' underscore in the hostname part. | ||
* | ||
* See issue #5657 | ||
* https://github.com/ElementsProject/lightning/issues/5657 | ||
* https://en.wikipedia.org/wiki/Hostname | ||
*/ | ||
bool is_dnsaddr(const char *arg) | ||
{ | ||
size_t i, arglen; | ||
int lastdot; | ||
int numdot; | ||
|
||
if (is_ipaddr(arg) || is_toraddr(arg) || is_wildcardaddr(arg)) | ||
return false; | ||
|
@@ -396,8 +402,10 @@ bool is_dnsaddr(const char *arg) | |
if (arglen > 255) | ||
return false; | ||
lastdot = -1; | ||
numdot = 0; | ||
for (i = 0; i < arglen; i++) { | ||
if (arg[i] == '.') { | ||
numdot++; | ||
/* segment must be longer than zero */ | ||
if (i - lastdot == 1) | ||
return false; | ||
|
@@ -416,6 +424,9 @@ bool is_dnsaddr(const char *arg) | |
continue; | ||
if (arg[i] == '-') | ||
continue; | ||
/* allow for _ underscores in the first hostname part */ | ||
if (arg[i] == '_' && numdot == 0) | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
m-schmoock
Author
Collaborator
|
||
continue; | ||
return false; | ||
} | ||
return true; | ||
|
@m-schmoock: Underscores can appear anywhere in a DNS name, not just in the first label (what you're calling a segment). While it's true that you cannot register a domain name containing an underscore, you can still have a FQDN like
one_two.three_four.five_six
that's resolvable via some alternative name server ecosystem apart from the default global root name servers.Is there any good reason you're being so restrictive? You should follow the robustness principle and be maximally forgiving in what you'll accept. If the adminstrator tells you to advertise
abc@xyz_123-.9
as a DNS name, you should obey. Warn if you think they're wrong, but don't refuse. You don't know better than the admin.