Home | History | Annotate | Line # | Download | only in librewrite
params.c revision 1.1.1.7
      1  1.1.1.6  christos /*	$NetBSD: params.c,v 1.1.1.7 2019/08/08 13:31:14 christos Exp $	*/
      2  1.1.1.2     lukem 
      3  1.1.1.4      tron /* $OpenLDAP$ */
      4      1.1     lukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
      5      1.1     lukem  *
      6  1.1.1.7  christos  * Copyright 2000-2019 The OpenLDAP Foundation.
      7      1.1     lukem  * All rights reserved.
      8      1.1     lukem  *
      9      1.1     lukem  * Redistribution and use in source and binary forms, with or without
     10      1.1     lukem  * modification, are permitted only as authorized by the OpenLDAP
     11      1.1     lukem  * Public License.
     12      1.1     lukem  *
     13      1.1     lukem  * A copy of this license is available in the file LICENSE in the
     14      1.1     lukem  * top-level directory of the distribution or, alternatively, at
     15      1.1     lukem  * <http://www.OpenLDAP.org/license.html>.
     16      1.1     lukem  */
     17      1.1     lukem /* ACKNOWLEDGEMENT:
     18      1.1     lukem  * This work was initially developed by Pierangelo Masarati for
     19      1.1     lukem  * inclusion in OpenLDAP Software.
     20      1.1     lukem  */
     21      1.1     lukem 
     22      1.1     lukem #include <portable.h>
     23      1.1     lukem 
     24      1.1     lukem #include "rewrite-int.h"
     25      1.1     lukem 
     26      1.1     lukem /*
     27      1.1     lukem  * Defines and inits a variable with global scope
     28      1.1     lukem  */
     29      1.1     lukem int
     30      1.1     lukem rewrite_param_set(
     31      1.1     lukem 		struct rewrite_info *info,
     32      1.1     lukem 		const char *name,
     33      1.1     lukem 		const char *value
     34      1.1     lukem )
     35      1.1     lukem {
     36      1.1     lukem 	struct rewrite_var *var;
     37  1.1.1.2     lukem 	int rc = REWRITE_SUCCESS;
     38      1.1     lukem 
     39      1.1     lukem 	assert( info != NULL );
     40      1.1     lukem 	assert( name != NULL );
     41      1.1     lukem 	assert( value != NULL );
     42      1.1     lukem 
     43      1.1     lukem #ifdef USE_REWRITE_LDAP_PVT_THREADS
     44      1.1     lukem 	ldap_pvt_thread_rdwr_wlock( &info->li_params_mutex );
     45      1.1     lukem #endif /* USE_REWRITE_LDAP_PVT_THREADS */
     46      1.1     lukem 
     47      1.1     lukem 	var = rewrite_var_find( info->li_params, name );
     48      1.1     lukem 	if ( var != NULL ) {
     49      1.1     lukem 		assert( var->lv_value.bv_val != NULL );
     50      1.1     lukem 		free( var->lv_value.bv_val );
     51      1.1     lukem 		var->lv_value.bv_val = strdup( value );
     52      1.1     lukem 		var->lv_value.bv_len = strlen( value );
     53  1.1.1.2     lukem 
     54      1.1     lukem 	} else {
     55      1.1     lukem 		var = rewrite_var_insert( &info->li_params, name, value );
     56  1.1.1.2     lukem 	}
     57  1.1.1.2     lukem 
     58  1.1.1.2     lukem 	if ( var == NULL || var->lv_value.bv_val == NULL ) {
     59  1.1.1.2     lukem 		rc = REWRITE_ERR;
     60      1.1     lukem 	}
     61      1.1     lukem 
     62      1.1     lukem #ifdef USE_REWRITE_LDAP_PVT_THREADS
     63      1.1     lukem 	ldap_pvt_thread_rdwr_wunlock( &info->li_params_mutex );
     64      1.1     lukem #endif /* USE_REWRITE_LDAP_PVT_THREADS */
     65      1.1     lukem 
     66  1.1.1.2     lukem 	return rc;
     67      1.1     lukem }
     68      1.1     lukem 
     69      1.1     lukem /*
     70      1.1     lukem  * Gets a var with global scope
     71      1.1     lukem  */
     72      1.1     lukem int
     73      1.1     lukem rewrite_param_get(
     74      1.1     lukem 		struct rewrite_info *info,
     75      1.1     lukem 		const char *name,
     76      1.1     lukem 		struct berval *value
     77      1.1     lukem )
     78      1.1     lukem {
     79      1.1     lukem 	struct rewrite_var *var;
     80  1.1.1.2     lukem 	int rc = REWRITE_SUCCESS;
     81      1.1     lukem 
     82      1.1     lukem 	assert( info != NULL );
     83      1.1     lukem 	assert( name != NULL );
     84      1.1     lukem 	assert( value != NULL );
     85      1.1     lukem 
     86      1.1     lukem 	value->bv_val = NULL;
     87      1.1     lukem 	value->bv_len = 0;
     88      1.1     lukem 
     89      1.1     lukem #ifdef USE_REWRITE_LDAP_PVT_THREADS
     90      1.1     lukem 	ldap_pvt_thread_rdwr_rlock( &info->li_params_mutex );
     91      1.1     lukem #endif /* USE_REWRITE_LDAP_PVT_THREADS */
     92      1.1     lukem 
     93      1.1     lukem 	var = rewrite_var_find( info->li_params, name );
     94  1.1.1.2     lukem 	if ( var != NULL ) {
     95      1.1     lukem 		value->bv_val = strdup( var->lv_value.bv_val );
     96      1.1     lukem 		value->bv_len = var->lv_value.bv_len;
     97      1.1     lukem 	}
     98  1.1.1.2     lukem 
     99  1.1.1.2     lukem 	if ( var == NULL || value->bv_val == NULL ) {
    100  1.1.1.2     lukem 		rc = REWRITE_ERR;
    101  1.1.1.2     lukem 	}
    102      1.1     lukem 
    103      1.1     lukem #ifdef USE_REWRITE_LDAP_PVT_THREADS
    104  1.1.1.2     lukem 	ldap_pvt_thread_rdwr_runlock( &info->li_params_mutex );
    105      1.1     lukem #endif /* USE_REWRITE_LDAP_PVT_THREADS */
    106  1.1.1.2     lukem 
    107      1.1     lukem 	return REWRITE_SUCCESS;
    108      1.1     lukem }
    109      1.1     lukem 
    110      1.1     lukem static void
    111      1.1     lukem rewrite_param_free(
    112      1.1     lukem 		void *tmp
    113      1.1     lukem )
    114      1.1     lukem {
    115      1.1     lukem 	struct rewrite_var *var = ( struct rewrite_var * )tmp;
    116      1.1     lukem 	assert( var != NULL );
    117      1.1     lukem 
    118      1.1     lukem 	assert( var->lv_name != NULL );
    119      1.1     lukem 	assert( var->lv_value.bv_val != NULL );
    120      1.1     lukem 
    121      1.1     lukem 	free( var->lv_name );
    122      1.1     lukem 	free( var->lv_value.bv_val );
    123      1.1     lukem 	free( var );
    124      1.1     lukem }
    125      1.1     lukem 
    126      1.1     lukem /*
    127      1.1     lukem  * Destroys the parameter tree
    128      1.1     lukem  */
    129      1.1     lukem int
    130      1.1     lukem rewrite_param_destroy(
    131      1.1     lukem 		struct rewrite_info *info
    132      1.1     lukem )
    133      1.1     lukem {
    134      1.1     lukem 	int count;
    135      1.1     lukem 
    136      1.1     lukem 	assert( info != NULL );
    137      1.1     lukem 
    138      1.1     lukem #ifdef USE_REWRITE_LDAP_PVT_THREADS
    139      1.1     lukem 	ldap_pvt_thread_rdwr_wlock( &info->li_params_mutex );
    140      1.1     lukem #endif /* USE_REWRITE_LDAP_PVT_THREADS */
    141      1.1     lukem 
    142      1.1     lukem 	count = avl_free( info->li_params, rewrite_param_free );
    143      1.1     lukem 	info->li_params = NULL;
    144      1.1     lukem 
    145      1.1     lukem #ifdef USE_REWRITE_LDAP_PVT_THREADS
    146      1.1     lukem 	ldap_pvt_thread_rdwr_wunlock( &info->li_params_mutex );
    147      1.1     lukem #endif /* USE_REWRITE_LDAP_PVT_THREADS */
    148      1.1     lukem 
    149      1.1     lukem 	return REWRITE_SUCCESS;
    150      1.1     lukem }
    151      1.1     lukem 
    152