]> andersk Git - moira.git/commitdiff
modularize and add better rfc-1035 checking for hostnames, since we now allow
authorkcr <kcr>
Sun, 1 Nov 1998 23:30:17 +0000 (23:30 +0000)
committerkcr <kcr>
Sun, 1 Nov 1998 23:30:17 +0000 (23:30 +0000)
them to be longer than an a single part of a dns name is allowed to be.

server/mr_server.h
server/qsetup.pc

index 903ff091a3b30714f91058790d9e9effb55327a8..ca1c5a2b56d7d5449511e87efe374a644afd8649 100644 (file)
@@ -229,6 +229,7 @@ int setup_dqot(struct query *q, char *argv[], client *cl);
 int setup_dsnt(struct query *q, char *argv[], client *cl);
 int setup_ahst(struct query *q, char *argv[], client *cl);
 int setup_ahal(struct query *q, char *argv[], client *cl);
+int hostname_check(char *name);
 
 /* prototypes from qsupport.pc */
 int set_pobox(struct query *q, char *argv[], client *cl);
index 7601bc6e802eb25e3d19e8d3edab3a6149db5720..49b811e2498f22357056de3441fbfc71e1856f22 100644 (file)
@@ -853,22 +853,9 @@ int setup_ahst(struct query *q, char **argv, client *cl)
   else
     row = 0;
 
-  /* sanity check name: must start with a letter, contain only
-   * letters, numerals, and hyphen, and not end with a hyphen.
-   */
   if (row == 0 || strcasecmp(argv[1], oldname))
     {
-      char *p = argv[row];
-
-      if (!isalpha(*p))
-       return MR_BAD_CHAR;
-      for (; *p; p++)
-       {
-         if ((!isalnum(*p) && *p != '-' && *p != '.') ||
-             (*p == '-' && p[1] == '.'))
-           return MR_BAD_CHAR;
-       }
-      if (*(p - 1) == '-')
+      if (!hostname_check(argv[row]))
        return MR_BAD_CHAR;
     }
 
@@ -1088,16 +1075,8 @@ int setup_ahal(struct query *q, char **argv, client *cl)
   EXEC SQL END DECLARE SECTION;
   char *p;
 
-  p = name = argv[0];
-  if (!isalpha(*p))
-    return MR_BAD_CHAR;
-  for (; *p; p++)
-    {
-      if ((!isalnum(*p) && *p != '-' && *p != '.') ||
-         (*p == '-' && p[1] == '.'))
-       return MR_BAD_CHAR;
-    }
-  if (*(p - 1) == '-')
+  name = argv[0];
+  if (!hostname_check(argv[0]))
     return MR_BAD_CHAR;
 
   EXEC SQL SELECT count(mach_id) INTO :cnt FROM machine WHERE
@@ -1109,3 +1088,38 @@ int setup_ahal(struct query *q, char **argv, client *cl)
 
   return MR_SUCCESS;
 }
+
+/* hostname_check()
+ * validate the rfc1035-ness of a hostname
+ */
+
+int hostname_check(char *name)
+{
+  char *p;
+  int count;
+
+  /* sanity check name: must start with a letter, contain only
+   * letters, numerals, and hyphen, and not end with a hyphen.
+   * also make sure no label (the thing the .s seperate) is longer
+   * than 63 characters.
+   */
+
+  p = name;
+  if (!isalpha(*p))
+    return 0;
+  count = 0;
+  for (; *p; p++)
+    {
+      count++;
+      if ((!isalnum(*p) && *p != '-' && *p != '.') ||
+         (*p == '-' && p[1] == '.'))
+       return 0;
+      if (*p == '.')
+       count = 0;
+      if (count == 64)
+       return 0;
+    }
+  if (*(p - 1) == '-')
+    return 0;
+  return 1;
+}
This page took 0.042931 seconds and 5 git commands to generate.