iadd function to check server/hostname - gopher-validator - Simple gopher menu validator. Err bitreich.org 70 hgit clone git://bitreich.org/gopher-validator git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gopher-validator URL:git://bitreich.org/gopher-validator git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gopher-validator bitreich.org 70 1Log /scm/gopher-validator/log.gph bitreich.org 70 1Files /scm/gopher-validator/files.gph bitreich.org 70 1Refs /scm/gopher-validator/refs.gph bitreich.org 70 1Tags /scm/gopher-validator/tag bitreich.org 70 1README /scm/gopher-validator/file/README.gph bitreich.org 70 1LICENSE /scm/gopher-validator/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit e4a622665300d0c8c5ce1a4fa6608f6733f3c191 /scm/gopher-validator/commit/e4a622665300d0c8c5ce1a4fa6608f6733f3c191.gph bitreich.org 70 1parent 5ca656215b1e77b7fef4dcf37cd6e429146b9426 /scm/gopher-validator/commit/5ca656215b1e77b7fef4dcf37cd6e429146b9426.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sat, 10 Aug 2019 20:27:37 +0200 Err bitreich.org 70 i Err bitreich.org 70 iadd function to check server/hostname Err bitreich.org 70 i Err bitreich.org 70 ithis check is incomplete, but should cover some cases Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M gopher-validator.c | 38 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 38 insertions(+), 0 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/gopher-validator.c b/gopher-validator.c /scm/gopher-validator/file/gopher-validator.c.gph bitreich.org 70 i@@ -130,6 +130,41 @@ warning(const char *fmt, ...) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i int Err bitreich.org 70 i+isvalidserver(const char *s) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ int colons; Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* IPv6 */ Err bitreich.org 70 i+ if (*s == '[') { Err bitreich.org 70 i+ colons = 0; Err bitreich.org 70 i+ s++; Err bitreich.org 70 i+ for (; *s; s++) { Err bitreich.org 70 i+ if (*s == ':') Err bitreich.org 70 i+ colons++; Err bitreich.org 70 i+ else if (*s == ']') Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ else if (isxdigit((unsigned char)*s)) Err bitreich.org 70 i+ ; Err bitreich.org 70 i+ else Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ if (colons < 2 || *s != ']') Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ if (!*s) Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ for (; *s; s++) { Err bitreich.org 70 i+ if (!isalpha((unsigned char)*s) && Err bitreich.org 70 i+ !isdigit((unsigned char)*s) && Err bitreich.org 70 i+ *s != '-' && *s != '.') Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ return 1; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i edial(const char *host, const char *port) Err bitreich.org 70 i { Err bitreich.org 70 i struct addrinfo hints, *res, *res0; Err bitreich.org 70 i@@ -312,6 +347,9 @@ checkdir(FILE *fp) Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+ if (!isvalidserver(v.server)) Err bitreich.org 70 i+ error("%zu: invalid server: %s\n", linenr, v.server); Err bitreich.org 70 i+ Err bitreich.org 70 i /* check port, must be numeric and in range, port 0 is allowed: Err bitreich.org 70 i "Appendix: Err bitreich.org 70 i Note: Port corresponds the the TCP Port Number, its value should Err bitreich.org 70 .