version 1.48, 2005/03/26 15:52:03
|
version 1.58, 2006/11/10 18:14:57
|
|
|
//%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 |
|
|
// | // |
//============================================================================== | //============================================================================== |
// | // |
// Author: Mike Brasher (mbrasher@bmc.com) |
|
// |
|
// Modified By: Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) |
|
// Carol Ann Krug Graves, Hewlett-Packard Company |
|
// (carolann_graves@hp.com) |
|
// Dave Sudlik, IBM (dsudlik@us.ibm.com) |
|
// |
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
|
|
#include "CIMObjectPath.h" | #include "CIMObjectPath.h" |
#include "Indentor.h" | #include "Indentor.h" |
#include "CIMName.h" | #include "CIMName.h" |
#include "Destroyer.h" |
|
#include "XmlWriter.h" | #include "XmlWriter.h" |
#include "XmlReader.h" | #include "XmlReader.h" |
#include "ArrayInternal.h" | #include "ArrayInternal.h" |
|
|
_rep = new CIMKeyBindingRep(*x._rep); | _rep = new CIMKeyBindingRep(*x._rep); |
} | } |
| |
CIMKeyBinding::CIMKeyBinding(const CIMName& name, const String& value, Type type) |
CIMKeyBinding::CIMKeyBinding( |
|
const CIMName& name, |
|
const String& value, |
|
Type type) |
{ | { |
_rep = new CIMKeyBindingRep(name, value, type); | _rep = new CIMKeyBindingRep(name, value, type); |
} | } |
|
|
// case CIMTYPE_REAL32: | // case CIMTYPE_REAL32: |
// case CIMTYPE_REAL64: | // case CIMTYPE_REAL64: |
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
|
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
// From PEP 194: EmbeddedObjects cannot be keys. | // From PEP 194: EmbeddedObjects cannot be keys. |
throw TypeMismatchException(); | throw TypeMismatchException(); |
break; | break; |
|
|
// case CIMTYPE_REAL32: | // case CIMTYPE_REAL32: |
// case CIMTYPE_REAL64: | // case CIMTYPE_REAL64: |
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
|
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
// From PEP 194: EmbeddedObjects cannot be keys. | // From PEP 194: EmbeddedObjects cannot be keys. |
return false; | return false; |
break; | break; |
|
|
catch (Exception&) | catch (Exception&) |
{ | { |
// If CIMObjectPath parsing fails, just compare strings | // If CIMObjectPath parsing fails, just compare strings |
return (String::equal(x.getValue(), y.getValue())); |
return String::equal(x.getValue(), y.getValue()); |
} | } |
break; | break; |
case CIMKeyBinding::BOOLEAN: | case CIMKeyBinding::BOOLEAN: |
// Case-insensitive comparison is sufficient for booleans | // Case-insensitive comparison is sufficient for booleans |
return (String::equalNoCase(x.getValue(), y.getValue())); |
return String::equalNoCase(x.getValue(), y.getValue()); |
break; | break; |
case CIMKeyBinding::NUMERIC: | case CIMKeyBinding::NUMERIC: |
// Note: This comparison assumes XML syntax for integers | // Note: This comparison assumes XML syntax for integers |
|
|
} | } |
// Note: Keys may not be real values, so don't try comparing as reals | // Note: Keys may not be real values, so don't try comparing as reals |
// We couldn't parse the numbers, so just compare the strings | // We couldn't parse the numbers, so just compare the strings |
return (String::equal(x.getValue(), y.getValue())); |
return String::equal(x.getValue(), y.getValue()); |
break; | break; |
default: // CIMKeyBinding::STRING | default: // CIMKeyBinding::STRING |
return (String::equal(x.getValue(), y.getValue())); |
return String::equal(x.getValue(), y.getValue()); |
break; | break; |
} | } |
| |
|
|
| |
Boolean isValid = false; | Boolean isValid = false; |
| |
if (hostname[0].isDigit()) |
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 (!hostname[i].isDigit()) |
if (!(isascii(hostname[i]) && isdigit(hostname[i]))) |
{ | { |
isValid = false; | isValid = false; |
break; | break; |
} | } |
| |
while (hostname[i].isDigit()) // 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++; |
|
|
| |
// Check for the case where it's a valid host name that happens | // Check for the case where it's a valid host name that happens |
// to have 4 (or more) leading all-numeric host segments. | // to have 4 (or more) leading all-numeric host segments. |
if ((octet == 4) && (hostname[i] != ':') && hostname[i] != char(0)) |
if ((octet == 4) && (hostname[i] != ':') && |
|
hostname[i] != char(0)) |
{ | { |
isValid = false; | isValid = false; |
break; | break; |
|
|
expectHostSegment = false; | expectHostSegment = false; |
hostSegmentIsNumeric = true; // assume all-numeric host segment | hostSegmentIsNumeric = true; // assume all-numeric host segment |
| |
if (!hostname[i].isAlnum()) |
if (!(isascii(hostname[i]) && |
|
(isalnum(hostname[i]) || (hostname[i] == '_')))) |
{ | { |
return false; | return false; |
} | } |
| |
while (hostname[i].isAlnum() || (hostname[i] == '-')) |
while (isascii(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].isAlpha() || (hostname[i] == '-')) { |
if (isalpha(hostname[i]) || (hostname[i] == '-') || |
|
(hostname[i] == '_')) |
|
{ |
hostSegmentIsNumeric = false; | hostSegmentIsNumeric = false; |
} | } |
i++; | i++; |
|
|
} | } |
// If the last Host Segment is all numeric, then return false. | // If the last Host Segment is all numeric, then return false. |
// RFC 1123 says "highest-level component label will be alphabetic". | // RFC 1123 says "highest-level component label will be alphabetic". |
if (hostSegmentIsNumeric) { |
if (hostSegmentIsNumeric) |
|
{ |
return false; | return false; |
} | } |
} | } |
|
|
| |
if (hostname[i] == ':') | if (hostname[i] == ':') |
{ | { |
if (!hostname[++i].isDigit()) |
i++; |
|
if (!(isascii(hostname[i]) && isdigit(hostname[i]))) |
{ | { |
return false; | return false; |
} | } |
|
i++; |
| |
while (hostname[++i].isDigit()); |
while (isascii(hostname[i]) && isdigit(hostname[i])) |
|
{ |
|
i++; |
|
} |
} | } |
| |
return (hostname[i] == char(0)); | return (hostname[i] == char(0)); |
|
|
isComma = true; | isComma = true; |
} | } |
| |
|
if (*p == '-') |
|
{ |
Sint64 x; | Sint64 x; |
|
|
if (!XmlReader::stringToSignedInteger(p, x)) | if (!XmlReader::stringToSignedInteger(p, x)) |
throw MalformedObjectNameException(objectName); | throw MalformedObjectNameException(objectName); |
|
} |
|
else |
|
{ |
|
Uint64 x; |
|
if (!XmlReader::stringToUnsignedInteger(p, x)) |
|
throw MalformedObjectNameException(objectName); |
|
} |
| |
valueString.assign(p, n); | valueString.assign(p, n); |
| |
|
|
| |
CIMKeyBinding::Type type = keyBindings[i].getType(); | CIMKeyBinding::Type type = keyBindings[i].getType(); |
| |
if (type == CIMKeyBinding::STRING || type == CIMKeyBinding::REFERENCE) |
if (type == CIMKeyBinding::STRING || |
|
type == CIMKeyBinding::REFERENCE) |
objectName.append('"'); | objectName.append('"'); |
| |
objectName.append(value); | objectName.append(value); |
| |
if (type == CIMKeyBinding::STRING || type == CIMKeyBinding::REFERENCE) |
if (type == CIMKeyBinding::STRING || |
|
type == CIMKeyBinding::REFERENCE) |
objectName.append('"'); | objectName.append('"'); |
| |
if (i + 1 != n) | if (i + 1 != n) |