88 const char *myname =
"valid_hostname";
100 msg_warn(
"%s: empty hostname", myname);
107 for (cp = name; (ch = *(
unsigned char *) cp) != 0; cp++) {
108 if (
ISALNUM(ch) || ch ==
'_') {
109 if (label_length == 0)
114 msg_warn(
"%s: hostname label too long: %.100s", myname, name);
119 }
else if (ch ==
'.') {
120 if (label_length == 0 || cp[1] == 0) {
122 msg_warn(
"%s: misplaced delimiter: %.100s", myname, name);
126 }
else if (ch ==
'-') {
129 if (label_length == 1 || cp[1] == 0 || cp[1] ==
'.') {
131 msg_warn(
"%s: misplaced hyphen: %.100s", myname, name);
135 #ifdef SLOPPY_VALID_HOSTNAME
143 msg_warn(
"%s: invalid character %d(decimal): %.100s",
149 if (non_numeric == 0) {
151 msg_warn(
"%s: numeric hostname: %.100s", myname, name);
152 #ifndef SLOPPY_VALID_HOSTNAME
158 msg_warn(
"%s: bad length %d for %.100s...",
159 myname, (
int) (cp - name), name);
169 const char *myname =
"valid_hostaddr";
176 msg_warn(
"%s: empty address", myname);
183 if (strchr(addr,
':') != 0)
194 const char *myname =
"valid_ipv4_hostaddr";
200 #define BYTES_NEEDED 4
208 for (cp = addr; (ch = *(
unsigned const char *) cp) != 0; cp++) {
216 byte_val += ch -
'0';
217 if (byte_val > 255) {
219 msg_warn(
"%s: invalid octet value: %.100s", myname, addr);
222 }
else if (ch ==
'.') {
223 if (in_byte == 0 || cp[1] == 0) {
225 msg_warn(
"%s: misplaced dot: %.100s", myname, addr);
229 if (byte_count == 1 && byte_val == 0 && addr[strspn(addr,
"0.")]) {
231 msg_warn(
"%s: bad initial octet value: %.100s", myname, addr);
237 msg_warn(
"%s: invalid character %d(decimal): %.100s",
245 msg_warn(
"%s: invalid octet count: %.100s", myname, addr);
255 const char *myname =
"valid_ipv6_hostaddr";
258 unsigned char *cp = (
unsigned char *) addr;
280 msg_warn(
"%s: too few `:' in IPv6 address: %.100s",
283 }
else if (len == 0 && null_field != field - 1) {
285 msg_warn(
"%s: bad null last field in IPv6 address: %.100s",
292 if (field < 2 || field > 6) {
294 msg_warn(
"%s: malformed IPv4-in-IPv6 address: %.100s",
302 if (field == 0 && len == 0 &&
ISALNUM(cp[1])) {
304 msg_warn(
"%s: bad null first field in IPv6 address: %.100s",
311 msg_warn(
"%s: too many `:' in IPv6 address: %.100s",
318 if (null_field > 0) {
320 msg_warn(
"%s: too many `::' in IPv6 address: %.100s",
329 len = strspn((
char *) cp,
"0123456789abcdefABCDEF");
332 msg_warn(
"%s: malformed IPv6 address: %.100s",
338 msg_warn(
"%s: invalid character %d(decimal) in IPv6 address: %.100s",
352 const char *myname =
"valid_hostport";
355 if (str[0] ==
'0' && str[1] != 0) {
357 msg_warn(
"%s: leading zero in port number: %.100s", myname, str);
362 msg_warn(
"%s: non-numeric port number: %.100s", myname, str);
365 if (strlen(str) > strlen(
"65535")
366 || (port = atoi(str)) > 65535 || port < 0) {
368 msg_warn(
"%s: out-of-range port number: %.100s", myname, str);
387 int main(
int unused_argc,
char **argv)
int valid_hostaddr(const char *addr, int gripe)
#define vstring_fgets_nonl(s, p)
int valid_ipv6_hostaddr(const char *addr, int gripe)
#define VALID_HOSTNAME_LEN
int main(int argc, char **argv)
int valid_hostport(const char *str, int gripe)
int alldig(const char *string)
int valid_ipv4_hostaddr(const char *addr, int gripe)
int valid_hostname(const char *name, int gripe)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
void msg_vstream_init(const char *name, VSTREAM *vp)
void msg_info(const char *fmt,...)