LCOV - code coverage report
Current view: top level - asn1 - asn_mstbl.c (source / functions) Hit Total Coverage
Test: lcov_coverage_final.info Lines: 3 52 5.8 %
Date: 2014-08-02 Functions: 1 4 25.0 %
Branches: 0 42 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* asn_mstbl.c */
       2                 :            : /* Written by Stephen Henson (steve@openssl.org) for the OpenSSL
       3                 :            :  * project 2012.
       4                 :            :  */
       5                 :            : /* ====================================================================
       6                 :            :  * Copyright (c) 2012 The OpenSSL Project.  All rights reserved.
       7                 :            :  *
       8                 :            :  * Redistribution and use in source and binary forms, with or without
       9                 :            :  * modification, are permitted provided that the following conditions
      10                 :            :  * are met:
      11                 :            :  *
      12                 :            :  * 1. Redistributions of source code must retain the above copyright
      13                 :            :  *    notice, this list of conditions and the following disclaimer. 
      14                 :            :  *
      15                 :            :  * 2. Redistributions in binary form must reproduce the above copyright
      16                 :            :  *    notice, this list of conditions and the following disclaimer in
      17                 :            :  *    the documentation and/or other materials provided with the
      18                 :            :  *    distribution.
      19                 :            :  *
      20                 :            :  * 3. All advertising materials mentioning features or use of this
      21                 :            :  *    software must display the following acknowledgment:
      22                 :            :  *    "This product includes software developed by the OpenSSL Project
      23                 :            :  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
      24                 :            :  *
      25                 :            :  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
      26                 :            :  *    endorse or promote products derived from this software without
      27                 :            :  *    prior written permission. For written permission, please contact
      28                 :            :  *    licensing@OpenSSL.org.
      29                 :            :  *
      30                 :            :  * 5. Products derived from this software may not be called "OpenSSL"
      31                 :            :  *    nor may "OpenSSL" appear in their names without prior written
      32                 :            :  *    permission of the OpenSSL Project.
      33                 :            :  *
      34                 :            :  * 6. Redistributions of any form whatsoever must retain the following
      35                 :            :  *    acknowledgment:
      36                 :            :  *    "This product includes software developed by the OpenSSL Project
      37                 :            :  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
      38                 :            :  *
      39                 :            :  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
      40                 :            :  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      41                 :            :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
      42                 :            :  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
      43                 :            :  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
      44                 :            :  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
      45                 :            :  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
      46                 :            :  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      47                 :            :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
      48                 :            :  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
      49                 :            :  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
      50                 :            :  * OF THE POSSIBILITY OF SUCH DAMAGE.
      51                 :            :  * ====================================================================
      52                 :            :  *
      53                 :            :  */
      54                 :            : 
      55                 :            : #include <stdio.h>
      56                 :            : #include <ctype.h>
      57                 :            : #include <openssl/crypto.h>
      58                 :            : #include "cryptlib.h"
      59                 :            : #include <openssl/conf.h>
      60                 :            : #include <openssl/x509v3.h>
      61                 :            : 
      62                 :            : /* Multi string module: add table enstries from a given section */
      63                 :            : 
      64                 :            : static int do_tcreate(char *value, char *name);
      65                 :            : 
      66                 :          0 : static int stbl_module_init(CONF_IMODULE *md, const CONF *cnf)
      67                 :            :         {
      68                 :            :         int i;
      69                 :            :         const char *stbl_section;
      70                 :            :         STACK_OF(CONF_VALUE) *sktmp;
      71                 :            :         CONF_VALUE *mval;
      72                 :          0 :         stbl_section = CONF_imodule_get_value(md);
      73         [ #  # ]:          0 :         if(!(sktmp = NCONF_get_section(cnf, stbl_section)))
      74                 :            :                 {
      75                 :          0 :                 ASN1err(ASN1_F_STBL_MODULE_INIT, ASN1_R_ERROR_LOADING_SECTION);
      76                 :          0 :                 return 0;
      77                 :            :                 }
      78         [ #  # ]:          0 :         for(i = 0; i < sk_CONF_VALUE_num(sktmp); i++)
      79                 :            :                 {
      80                 :          0 :                 mval = sk_CONF_VALUE_value(sktmp, i);
      81         [ #  # ]:          0 :                 if(!do_tcreate(mval->value, mval->name))
      82                 :            :                         {
      83                 :          0 :                         ASN1err(ASN1_F_STBL_MODULE_INIT, ASN1_R_INVALID_VALUE);
      84                 :          0 :                         return 0;
      85                 :            :                         }
      86                 :            :                 }
      87                 :            :         return 1;
      88                 :            :         }
      89                 :            : 
      90                 :          0 : static void stbl_module_finish(CONF_IMODULE *md)
      91                 :            :         {
      92                 :          0 :         ASN1_STRING_TABLE_cleanup();
      93                 :          0 :         }
      94                 :            : 
      95                 :        663 : void ASN1_add_stable_module(void)
      96                 :            :         {
      97                 :        663 :         CONF_module_add("stbl_section", stbl_module_init, stbl_module_finish);
      98                 :        663 :         }
      99                 :            : 
     100                 :            : /* Create an table entry based on a name value pair.
     101                 :            :  * format is oid_name = n1:v1, n2:v2,...
     102                 :            :  * where name is "min", "max", "mask" or "flags".
     103                 :            :  */
     104                 :            : 
     105                 :            : 
     106                 :          0 : static int do_tcreate(char *value, char *name)
     107                 :            :         {
     108                 :            :         char *eptr;
     109                 :          0 :         int nid, i, rv = 0;
     110                 :          0 :         long tbl_min = -1, tbl_max = -1;
     111                 :          0 :         unsigned long tbl_mask = 0, tbl_flags = 0;
     112                 :          0 :         STACK_OF(CONF_VALUE) *lst = NULL;
     113                 :          0 :         CONF_VALUE *cnf = NULL;
     114                 :          0 :         nid = OBJ_sn2nid(name);
     115         [ #  # ]:          0 :         if (nid == NID_undef)
     116                 :          0 :                 nid = OBJ_ln2nid(name);
     117         [ #  # ]:          0 :         if (nid == NID_undef)
     118                 :            :                 goto err;
     119                 :          0 :         lst = X509V3_parse_list(value);
     120         [ #  # ]:          0 :         if (!lst)
     121                 :            :                 goto err;
     122         [ #  # ]:          0 :         for (i = 0; i < sk_CONF_VALUE_num(lst); i++)
     123                 :            :                 {
     124                 :          0 :                 cnf = sk_CONF_VALUE_value(lst, i);
     125         [ #  # ]:          0 :                 if (!strcmp(cnf->name, "min"))
     126                 :            :                         {
     127                 :          0 :                         tbl_min = strtoul(cnf->value, &eptr, 0);
     128         [ #  # ]:          0 :                         if (*eptr)
     129                 :            :                                 goto err;
     130                 :            :                         }
     131         [ #  # ]:          0 :                 else if (!strcmp(cnf->name, "max"))
     132                 :            :                         {
     133                 :          0 :                         tbl_max = strtoul(cnf->value, &eptr, 0);
     134         [ #  # ]:          0 :                         if (*eptr)
     135                 :            :                                 goto err;
     136                 :            :                         }
     137         [ #  # ]:          0 :                 else if (!strcmp(cnf->name, "mask"))
     138                 :            :                         {
     139 [ #  # ][ #  # ]:          0 :                         if (!ASN1_str2mask(cnf->value, &tbl_mask) || !tbl_mask)
     140                 :            :                                 goto err;
     141                 :            :                         }
     142         [ #  # ]:          0 :                 else if (!strcmp(cnf->name, "flags"))
     143                 :            :                         {
     144         [ #  # ]:          0 :                         if (!strcmp(cnf->value, "nomask"))
     145                 :            :                                 tbl_flags = STABLE_NO_MASK;
     146         [ #  # ]:          0 :                         else if (!strcmp(cnf->value, "none"))
     147                 :            :                                 tbl_flags = STABLE_FLAGS_CLEAR;
     148                 :            :                         else
     149                 :            :                                 goto err;       
     150                 :            :                         }
     151                 :            :                 else
     152                 :            :                         goto err;
     153                 :            :                 }
     154                 :            :         rv = 1;
     155                 :            :         err:
     156         [ #  # ]:          0 :         if (rv == 0)
     157                 :            :                 {
     158                 :          0 :                 ASN1err(ASN1_F_DO_TCREATE, ASN1_R_INVALID_STRING_TABLE_VALUE);
     159         [ #  # ]:          0 :                 if (cnf)
     160                 :          0 :                         ERR_add_error_data(4, "field=", cnf->name,
     161                 :            :                                                 ", value=", cnf->value);
     162                 :            :                 else
     163                 :          0 :                         ERR_add_error_data(4, "name=", name,
     164                 :            :                                                 ", value=", value);
     165                 :            :                 }
     166                 :            :         else
     167                 :            :                 {
     168                 :          0 :                 rv = ASN1_STRING_TABLE_add(nid, tbl_min, tbl_max,
     169                 :            :                                                         tbl_mask, tbl_flags);
     170         [ #  # ]:          0 :                 if (!rv)
     171                 :          0 :                         ASN1err(ASN1_F_DO_TCREATE, ERR_R_MALLOC_FAILURE);
     172                 :            :                 }
     173         [ #  # ]:          0 :         if (lst)
     174                 :          0 :                 sk_CONF_VALUE_pop_free(lst, X509V3_conf_free);
     175                 :          0 :         return rv;
     176                 :            :         }
     177                 :            :                 
     178                 :            : 

Generated by: LCOV version 1.9