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
