LCOV - code coverage report
Current view: top level - third_party/heimdal/lib/gssapi/mech - gss_buffer_set.c (source / functions) Hit Total Coverage
Test: coverage report for master 2f515e9b Lines: 42 49 85.7 %
Date: 2024-04-21 15:09:00 Functions: 3 3 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2004, PADL Software Pty Ltd.
       3             :  * All rights reserved.
       4             :  *
       5             :  * Redistribution and use in source and binary forms, with or without
       6             :  * modification, are permitted provided that the following conditions
       7             :  * are met:
       8             :  *
       9             :  * 1. Redistributions of source code must retain the above copyright
      10             :  *    notice, this list of conditions and the following disclaimer.
      11             :  *
      12             :  * 2. Redistributions in binary form must reproduce the above copyright
      13             :  *    notice, this list of conditions and the following disclaimer in the
      14             :  *    documentation and/or other materials provided with the distribution.
      15             :  *
      16             :  * 3. Neither the name of PADL Software nor the names of its contributors
      17             :  *    may be used to endorse or promote products derived from this software
      18             :  *    without specific prior written permission.
      19             :  *
      20             :  * THIS SOFTWARE IS PROVIDED BY PADL SOFTWARE AND CONTRIBUTORS ``AS IS'' AND
      21             :  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      22             :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      23             :  * ARE DISCLAIMED.  IN NO EVENT SHALL PADL SOFTWARE OR CONTRIBUTORS BE LIABLE
      24             :  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      25             :  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      26             :  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      27             :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      28             :  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      29             :  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      30             :  * SUCH DAMAGE.
      31             :  */
      32             : 
      33             : #include "mech_locl.h"
      34             : 
      35             : GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
      36      260208 : gss_create_empty_buffer_set
      37             :            (OM_uint32 * minor_status,
      38             :             gss_buffer_set_t *buffer_set)
      39             : {
      40        4369 :     gss_buffer_set_t set;
      41             : 
      42      260208 :     set = (gss_buffer_set_desc *) malloc(sizeof(*set));
      43      260208 :     if (set == GSS_C_NO_BUFFER_SET) {
      44           0 :         *minor_status = ENOMEM;
      45           0 :         return GSS_S_FAILURE;
      46             :     }
      47             : 
      48      260208 :     set->count = 0;
      49      260208 :     set->elements = NULL;
      50             : 
      51      260208 :     *buffer_set = set;
      52             : 
      53      260208 :     *minor_status = 0;
      54      260208 :     return GSS_S_COMPLETE;
      55             : }
      56             : 
      57             : GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
      58      260208 : gss_add_buffer_set_member
      59             :            (OM_uint32 * minor_status,
      60             :             const gss_buffer_t member_buffer,
      61             :             gss_buffer_set_t *buffer_set)
      62             : {
      63        4369 :     gss_buffer_set_t set;
      64        4369 :     gss_buffer_t p;
      65        4369 :     OM_uint32 ret;
      66             : 
      67      260208 :     if (*buffer_set == GSS_C_NO_BUFFER_SET) {
      68      260208 :         ret = gss_create_empty_buffer_set(minor_status,
      69             :                                           buffer_set);
      70      260208 :         if (ret) {
      71           0 :             return ret;
      72             :         }
      73             :     }
      74             : 
      75      260208 :     set = *buffer_set;
      76      260208 :     set->elements = realloc(set->elements,
      77      260208 :                             (set->count + 1) * sizeof(set->elements[0]));
      78      260208 :     if (set->elements == NULL) {
      79           0 :         *minor_status = ENOMEM;
      80           0 :         return GSS_S_FAILURE;
      81             :     }
      82             : 
      83      260208 :     p = &set->elements[set->count];
      84             : 
      85      260208 :     p->value = malloc(member_buffer->length);
      86      260208 :     if (p->value == NULL) {
      87           0 :         *minor_status = ENOMEM;
      88           0 :         return GSS_S_FAILURE;
      89             :     }
      90      260208 :     memcpy(p->value, member_buffer->value, member_buffer->length);
      91      260208 :     p->length = member_buffer->length;
      92             : 
      93      260208 :     set->count++;
      94             : 
      95      260208 :     *minor_status = 0;
      96      260208 :     return GSS_S_COMPLETE;
      97             : }
      98             : 
      99             : GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
     100      332074 : gss_release_buffer_set(OM_uint32 * minor_status,
     101             :                        gss_buffer_set_t *buffer_set)
     102             : {
     103        5250 :     size_t i;
     104        5250 :     OM_uint32 minor;
     105             : 
     106      332074 :     *minor_status = 0;
     107             : 
     108      332074 :     if (*buffer_set == GSS_C_NO_BUFFER_SET)
     109       70985 :         return GSS_S_COMPLETE;
     110             : 
     111      447916 :     for (i = 0; i < (*buffer_set)->count; i++)
     112      187708 :         gss_release_buffer(&minor, &((*buffer_set)->elements[i]));
     113             : 
     114      260208 :     free((*buffer_set)->elements);
     115             : 
     116      260208 :     (*buffer_set)->elements = NULL;
     117      260208 :     (*buffer_set)->count = 0;
     118             : 
     119      260208 :     free(*buffer_set);
     120      260208 :     *buffer_set = GSS_C_NO_BUFFER_SET;
     121             : 
     122      260208 :     return GSS_S_COMPLETE;
     123             : }
     124             : 

Generated by: LCOV version 1.14