X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=json_gssapi%2Fsrc%2Fdatamodel%2FGSSOID.cpp;h=ff4f3e3c7aff22bb634872a286171a16e77be517;hb=95edc34cfd372556b91a45e3ba252f8d6f25a491;hp=7e53fd2627b9b31661fb0b85c82fde4c5a412cc3;hpb=6047c63abe1c15c59940a558f926a61377c6d735;p=gssweb.git diff --git a/json_gssapi/src/datamodel/GSSOID.cpp b/json_gssapi/src/datamodel/GSSOID.cpp index 7e53fd2..ff4f3e3 100644 --- a/json_gssapi/src/datamodel/GSSOID.cpp +++ b/json_gssapi/src/datamodel/GSSOID.cpp @@ -1,10 +1,39 @@ /* - * Copyright (c) 2014 - * - * For license details, see the LICENSE file in the root of this project. - * + * Copyright (c) 2014, 2015 JANET(UK) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of JANET(UK) nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * */ +#include + #include "GSSOID.h" #include "../GSSException.h" @@ -124,3 +153,43 @@ bool GSSOID::setValue ( gss_OID gssOID ) this->gssInternal = true; return true; } + +bool GSSOID::matchesBaseOID ( const gss_OID_desc &base_oid ) +{ + /* Variables */ + unsigned char *elements = reinterpret_cast (oid->elements); + + /* Error checking */ + /* Setup */ + /* Main processing */ + // We can't match the prefex if we're not longer than the prefix. + if (oid->length <= base_oid.length) + return(false); + + // Match the prefix itself. + if (memcmp(oid->elements, base_oid.elements, base_oid.length) != 0) + return(false); + + // Constrain the suffix to a single OID segment. + // The break between segments is signified whenever an octet has 0 in + // its high-order bit. Check that no octet between the prefix and the + // last octet has 0 in its high-order bit + for (size_t i = base_oid.length; + oid->length - 1 > i; + i++) + { + if( !(elements[i] & 0x80) ) + return(false); + } + + // Add a sanity check that the last octet has 0 in its high-order bit. + if( elements[oid->length - 1] & 0x80 ) + return(false); + + /* Cleanup */ + // No memory allocated, just typecast - nothing to clean up + + /* Return */ + return(true); +} +