version 1.51, 2005/05/20 08:58:48
|
version 1.54, 2006/01/30 16:16:47
|
|
|
//%2005//////////////////////////////////////////////////////////////////////// |
//%2006//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development | // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. | // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
|
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. | // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; | // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
// EMC Corporation; VERITAS Software Corporation; The Open Group. | // EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; Symantec Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
| |
Boolean isValid = false; | Boolean isValid = false; |
| |
if (isdigit(hostname[0])) |
if (isascii(hostname[0]) && isdigit(hostname[0])) |
{ | { |
//-------------------------------------------------------------- | //-------------------------------------------------------------- |
// Attempt to validate an IP address, but keep in mind that it | // Attempt to validate an IP address, but keep in mind that it |
|
|
// If a non-digit is encountered in the input parameter, | // If a non-digit is encountered in the input parameter, |
// then break from here and attempt to validate as host name. | // then break from here and attempt to validate as host name. |
//---------------------------------------------------------- | //---------------------------------------------------------- |
if (!isdigit(hostname[i])) |
if (!(isascii(hostname[i]) && isdigit(hostname[i]))) |
{ | { |
isValid = false; | isValid = false; |
break; | break; |
} | } |
| |
while (isdigit(hostname[i])) // skip over digits |
// skip over digits |
|
while (isascii(hostname[i]) && isdigit(hostname[i])) |
{ | { |
octetValue = octetValue*10 + (hostname[i] - '0'); | octetValue = octetValue*10 + (hostname[i] - '0'); |
i++; | i++; |
|
|
expectHostSegment = false; | expectHostSegment = false; |
hostSegmentIsNumeric = true; // assume all-numeric host segment | hostSegmentIsNumeric = true; // assume all-numeric host segment |
| |
if (!isalnum(hostname[i])) |
if (!(isascii(hostname[i]) && |
|
(isalnum(hostname[i]) || (hostname[i] == '_')))) |
{ | { |
return false; | return false; |
} | } |
| |
while (isalnum(hostname[i]) || (hostname[i] == '-') || |
while (isascii(hostname[i]) && |
(hostname[i] == '_')) |
(isalnum(hostname[i]) || (hostname[i] == '-') || |
|
(hostname[i] == '_'))) |
{ | { |
// If a non-digit is encountered, set "all-numeric" | // If a non-digit is encountered, set "all-numeric" |
// flag to false | // flag to false |
|
|
| |
if (hostname[i] == ':') | if (hostname[i] == ':') |
{ | { |
if (!isdigit(hostname[++i])) |
i++; |
|
if (!(isascii(hostname[i]) && isdigit(hostname[i]))) |
{ | { |
return false; | return false; |
} | } |
|
i++; |
| |
while (isdigit(hostname[++i])); |
while (isascii(hostname[i]) && isdigit(hostname[i])) |
|
{ |
|
i++; |
|
} |
} | } |
| |
return (hostname[i] == char(0)); | return (hostname[i] == char(0)); |