Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=fvbe.git;a=commitdiff;h=c512760674e8add8a1b44b43425d80a578c340d0

commit c512760674e8add8a1b44b43425d80a578c340d0
Author: James Buren <[email protected]>
Date:   Fri Apr 5 09:54:04 2013 -0500

add ishostname function for validating hostname strings

diff --git a/src/local.h b/src/local.h
index 6e41b5a..7615333 100644
--- a/src/local.h
+++ b/src/local.h
@@ -127,6 +127,7 @@ struct tool
};

extern int charpp_qsort(const void *A,const void *B);
+extern bool ishostname(const char *name);
extern void account_free(struct account *account);
extern int get_number_padding(int n);
extern bool find_unused_raid_device(struct raid **raids,char *s,size_t n);
diff --git a/src/utility.c b/src/utility.c
index e5fc3d7..f06c2e6 100644
--- a/src/utility.c
+++ b/src/utility.c
@@ -33,6 +33,111 @@ extern int charpp_qsort(const void *A,const void *B)
return strcmp(a,b);
}

+extern bool ishostname(const char *name)
+{
+  size_t i = 0;
+  size_t j = 0;
+  size_t digits = 0;
+  bool badhyphen = false;
+  bool badchar = false;
+
+  if(name == 0)
+  {
+    errno = EINVAL;
+    error(strerror(errno));
+    return false;
+  }
+
+  j = strlen(name);
+
+  if(j == 0 || j > HOST_NAME_MAX)
+    return false;
+
+  for( ; i < j ; ++i )
+  {
+    switch(name[i])
+    {
+      case '0':
+      case '1':
+      case '2':
+      case '3':
+      case '4':
+      case '5':
+      case '6':
+      case '7':
+      case '8':
+      case '9':
+        ++digits;
+        break;
+
+      case '-':
+        if(i == 0 || i == j - 1)
+          badhyphen = true;
+        break;
+
+      case 'a':
+      case 'b':
+      case 'c':
+      case 'd':
+      case 'e':
+      case 'f':
+      case 'g':
+      case 'h':
+      case 'i':
+      case 'j':
+      case 'k':
+      case 'l':
+      case 'm':
+      case 'n':
+      case 'o':
+      case 'p':
+      case 'q':
+      case 'r':
+      case 's':
+      case 't':
+      case 'u':
+      case 'v':
+      case 'w':
+      case 'x':
+      case 'y':
+      case 'z':
+      case 'A':
+      case 'B':
+      case 'C':
+      case 'D':
+      case 'E':
+      case 'F':
+      case 'G':
+      case 'H':
+      case 'I':
+      case 'J':
+      case 'K':
+      case 'L':
+      case 'M':
+      case 'N':
+      case 'O':
+      case 'P':
+      case 'Q':
+      case 'R':
+      case 'S':
+      case 'T':
+      case 'U':
+      case 'V':
+      case 'W':
+      case 'X':
+      case 'Y':
+      case 'Z':
+        break;
+
+      default:
+        badchar = true;
+        break;
+    }
+  }
+
+  return (digits != j && !badhyphen && !badchar);
+}
+
extern void account_free(struct account *account)
{
if(account == 0)
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to