1d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* v3_sxnet.c */ 2d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 3d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * project 1999. 4d9e397b599b13d642138480a28c14db7a136bf0Adam Langley */ 5d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* ==================================================================== 6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Copyright (c) 1999 The OpenSSL Project. All rights reserved. 7d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 8d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Redistribution and use in source and binary forms, with or without 9d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * modification, are permitted provided that the following conditions 10d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * are met: 11d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 12d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 1. Redistributions of source code must retain the above copyright 13d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * notice, this list of conditions and the following disclaimer. 14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 2. Redistributions in binary form must reproduce the above copyright 16d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * notice, this list of conditions and the following disclaimer in 17d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * the documentation and/or other materials provided with the 18d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * distribution. 19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 3. All advertising materials mentioning features or use of this 21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * software must display the following acknowledgment: 22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * "This product includes software developed by the OpenSSL Project 23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 24d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * endorse or promote products derived from this software without 27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * prior written permission. For written permission, please contact 28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * licensing@OpenSSL.org. 29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 5. Products derived from this software may not be called "OpenSSL" 31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * nor may "OpenSSL" appear in their names without prior written 32d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * permission of the OpenSSL Project. 33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 6. Redistributions of any form whatsoever must retain the following 35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * acknowledgment: 36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * "This product includes software developed by the OpenSSL Project 37d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * OF THE POSSIBILITY OF SUCH DAMAGE. 51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * ==================================================================== 52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 53d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * This product includes cryptographic software written by Eric Young 54d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * (eay@cryptsoft.com). This product includes software written by Tim 55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Hudson (tjh@cryptsoft.com). 56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * 57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley */ 58d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <stdio.h> 60d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <string.h> 61d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 62d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/asn1.h> 63d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/asn1t.h> 64d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/conf.h> 65d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/err.h> 66d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/mem.h> 67d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/obj.h> 68d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#include <openssl/x509v3.h> 69d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 70d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 71d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Support for Thawte strong extranet extension */ 72d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 73d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#define SXNET_TEST 74d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 75d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystatic int sxnet_i2r(X509V3_EXT_METHOD *method, SXNET *sx, BIO *out, int indent); 76d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef SXNET_TEST 77d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystatic SXNET * sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, 78d9e397b599b13d642138480a28c14db7a136bf0Adam Langley STACK_OF(CONF_VALUE) *nval); 79d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif 80d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyconst X509V3_EXT_METHOD v3_sxnet = { 81d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyNID_sxnet, X509V3_EXT_MULTILINE, ASN1_ITEM_ref(SXNET), 82d9e397b599b13d642138480a28c14db7a136bf0Adam Langley0,0,0,0, 83d9e397b599b13d642138480a28c14db7a136bf0Adam Langley0,0, 84d9e397b599b13d642138480a28c14db7a136bf0Adam Langley0, 85d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef SXNET_TEST 86d9e397b599b13d642138480a28c14db7a136bf0Adam Langley(X509V3_EXT_V2I)sxnet_v2i, 87d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#else 88d9e397b599b13d642138480a28c14db7a136bf0Adam Langley0, 89d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif 90d9e397b599b13d642138480a28c14db7a136bf0Adam Langley(X509V3_EXT_I2R)sxnet_i2r, 91d9e397b599b13d642138480a28c14db7a136bf0Adam Langley0, 92d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyNULL 93d9e397b599b13d642138480a28c14db7a136bf0Adam Langley}; 94d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 95d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyASN1_SEQUENCE(SXNETID) = { 96d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_SIMPLE(SXNETID, zone, ASN1_INTEGER), 97d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_SIMPLE(SXNETID, user, ASN1_OCTET_STRING) 98d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} ASN1_SEQUENCE_END(SXNETID) 99d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 100d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyIMPLEMENT_ASN1_FUNCTIONS(SXNETID) 101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 102d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyASN1_SEQUENCE(SXNET) = { 103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_SIMPLE(SXNET, version, ASN1_INTEGER), 104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_SEQUENCE_OF(SXNET, ids, SXNETID) 105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} ASN1_SEQUENCE_END(SXNET) 106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 107d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyIMPLEMENT_ASN1_FUNCTIONS(SXNET) 108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 109d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystatic int sxnet_i2r(X509V3_EXT_METHOD *method, SXNET *sx, BIO *out, 110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley int indent) 111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley{ 112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley long v; 113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley char *tmp; 114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley SXNETID *id; 115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley size_t i; 116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley v = ASN1_INTEGER_get(sx->version); 117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley BIO_printf(out, "%*sVersion: %ld (0x%lX)", indent, "", v + 1, v); 118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley for(i = 0; i < sk_SXNETID_num(sx->ids); i++) { 119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley id = sk_SXNETID_value(sx->ids, i); 120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley tmp = i2s_ASN1_INTEGER(NULL, id->zone); 121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley BIO_printf(out, "\n%*sZone: %s, User: ", indent, "", tmp); 122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley OPENSSL_free(tmp); 123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley M_ASN1_OCTET_STRING_print(out, id->user); 124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 1; 126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} 127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef SXNET_TEST 129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* NBB: this is used for testing only. It should *not* be used for anything 131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * else because it will just take static IDs from the configuration file and 132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * they should really be separate values for each user. 133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley */ 134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 136d9e397b599b13d642138480a28c14db7a136bf0Adam Langleystatic SXNET * sxnet_v2i(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, 137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley STACK_OF(CONF_VALUE) *nval) 138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley{ 139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley CONF_VALUE *cnf; 140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley SXNET *sx = NULL; 141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley size_t i; 142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley for(i = 0; i < sk_CONF_VALUE_num(nval); i++) { 143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley cnf = sk_CONF_VALUE_value(nval, i); 144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!SXNET_add_id_asc(&sx, cnf->name, cnf->value, -1)) 145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return NULL; 146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return sx; 148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} 149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif 152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Strong Extranet utility functions */ 154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Add an id given the zone as an ASCII number */ 156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 157d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyint SXNET_add_id_asc(SXNET **psx, char *zone, char *user, 158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley int userlen) 159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley{ 160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_INTEGER *izone = NULL; 161d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!(izone = s2i_ASN1_INTEGER(NULL, zone))) { 162b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root OPENSSL_PUT_ERROR(X509V3, X509V3_R_ERROR_CONVERTING_ZONE); 163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 0; 164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return SXNET_add_id_INTEGER(psx, izone, user, userlen); 166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} 167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 168d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Add an id given the zone as an unsigned long */ 169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 170d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyint SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, 171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley int userlen) 172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley{ 173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_INTEGER *izone = NULL; 174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) { 175b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE); 176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley M_ASN1_INTEGER_free(izone); 177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 0; 178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return SXNET_add_id_INTEGER(psx, izone, user, userlen); 180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} 182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley/* Add an id given the zone as an ASN1_INTEGER. 184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * Note this version uses the passed integer and doesn't make a copy so don't 185d9e397b599b13d642138480a28c14db7a136bf0Adam Langley * free it up afterwards. 186d9e397b599b13d642138480a28c14db7a136bf0Adam Langley */ 187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 188d9e397b599b13d642138480a28c14db7a136bf0Adam Langleyint SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *zone, char *user, 189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley int userlen) 190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley{ 191d9e397b599b13d642138480a28c14db7a136bf0Adam Langley SXNET *sx = NULL; 192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley SXNETID *id = NULL; 193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!psx || !zone || !user) { 194b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root OPENSSL_PUT_ERROR(X509V3, X509V3_R_INVALID_NULL_ARGUMENT); 195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 0; 196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(userlen == -1) userlen = strlen(user); 198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(userlen > 64) { 199b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root OPENSSL_PUT_ERROR(X509V3, X509V3_R_USER_TOO_LONG); 200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 0; 201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!*psx) { 203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!(sx = SXNET_new())) goto err; 204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!ASN1_INTEGER_set(sx->version, 0)) goto err; 205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *psx = sx; 206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } else sx = *psx; 207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(SXNET_get_id_INTEGER(sx, zone)) { 208b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root OPENSSL_PUT_ERROR(X509V3, X509V3_R_DUPLICATE_ZONE_ID); 209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 0; 210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!(id = SXNETID_new())) goto err; 213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(userlen == -1) userlen = strlen(user); 214d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!M_ASN1_OCTET_STRING_set(id->user, user, userlen)) goto err; 216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!sk_SXNETID_push(sx->ids, id)) goto err; 217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley id->zone = zone; 218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 1; 219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley err: 221b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE); 222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley SXNETID_free(id); 223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley SXNET_free(sx); 224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley *psx = NULL; 225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return 0; 226d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} 227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 228d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone) 229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley{ 230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_INTEGER *izone = NULL; 231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_OCTET_STRING *oct; 232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!(izone = s2i_ASN1_INTEGER(NULL, zone))) { 233b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root OPENSSL_PUT_ERROR(X509V3, X509V3_R_ERROR_CONVERTING_ZONE); 234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return NULL; 235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley oct = SXNET_get_id_INTEGER(sx, izone); 237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley M_ASN1_INTEGER_free(izone); 238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return oct; 239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} 240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 241d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone) 242d9e397b599b13d642138480a28c14db7a136bf0Adam Langley{ 243d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_INTEGER *izone = NULL; 244d9e397b599b13d642138480a28c14db7a136bf0Adam Langley ASN1_OCTET_STRING *oct; 245d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!(izone = M_ASN1_INTEGER_new()) || !ASN1_INTEGER_set(izone, lzone)) { 246b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE); 247d9e397b599b13d642138480a28c14db7a136bf0Adam Langley M_ASN1_INTEGER_free(izone); 248d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return NULL; 249d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 250d9e397b599b13d642138480a28c14db7a136bf0Adam Langley oct = SXNET_get_id_INTEGER(sx, izone); 251d9e397b599b13d642138480a28c14db7a136bf0Adam Langley M_ASN1_INTEGER_free(izone); 252d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return oct; 253d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} 254d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 255d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone) 256d9e397b599b13d642138480a28c14db7a136bf0Adam Langley{ 257d9e397b599b13d642138480a28c14db7a136bf0Adam Langley SXNETID *id; 258d9e397b599b13d642138480a28c14db7a136bf0Adam Langley size_t i; 259d9e397b599b13d642138480a28c14db7a136bf0Adam Langley for(i = 0; i < sk_SXNETID_num(sx->ids); i++) { 260d9e397b599b13d642138480a28c14db7a136bf0Adam Langley id = sk_SXNETID_value(sx->ids, i); 261d9e397b599b13d642138480a28c14db7a136bf0Adam Langley if(!M_ASN1_INTEGER_cmp(id->zone, zone)) return id->user; 262d9e397b599b13d642138480a28c14db7a136bf0Adam Langley } 263d9e397b599b13d642138480a28c14db7a136bf0Adam Langley return NULL; 264d9e397b599b13d642138480a28c14db7a136bf0Adam Langley} 265d9e397b599b13d642138480a28c14db7a136bf0Adam Langley 266d9e397b599b13d642138480a28c14db7a136bf0Adam LangleyIMPLEMENT_ASN1_SET_OF(SXNETID) 267