Home | History | Annotate | Line # | Download | only in krb5
      1 /*	$NetBSD: appdefault.c,v 1.2 2017/01/28 21:31:49 christos Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 2000 - 2001 Kungliga Tekniska Hgskolan
      5  * (Royal Institute of Technology, Stockholm, Sweden).
      6  * 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 the
     17  *    documentation and/or other materials provided with the distribution.
     18  *
     19  * 3. Neither the name of the Institute nor the names of its contributors
     20  *    may be used to endorse or promote products derived from this software
     21  *    without specific prior written permission.
     22  *
     23  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
     24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
     27  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     29  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     32  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     33  * SUCH DAMAGE.
     34  */
     35 
     36 #include "krb5_locl.h"
     37 
     38 KRB5_LIB_FUNCTION void KRB5_LIB_CALL
     39 krb5_appdefault_boolean(krb5_context context, const char *appname,
     40 			krb5_const_realm realm, const char *option,
     41 			krb5_boolean def_val, krb5_boolean *ret_val)
     42 {
     43 
     44     if(appname == NULL)
     45 	appname = getprogname();
     46 
     47     def_val = krb5_config_get_bool_default(context, NULL, def_val,
     48 					   "libdefaults", option, NULL);
     49     if(realm != NULL)
     50 	def_val = krb5_config_get_bool_default(context, NULL, def_val,
     51 					       "realms", realm, option, NULL);
     52 
     53     def_val = krb5_config_get_bool_default(context, NULL, def_val,
     54 					   "appdefaults",
     55 					   option,
     56 					   NULL);
     57     if(realm != NULL)
     58 	def_val = krb5_config_get_bool_default(context, NULL, def_val,
     59 					       "appdefaults",
     60 					       realm,
     61 					       option,
     62 					       NULL);
     63     if(appname != NULL) {
     64 	def_val = krb5_config_get_bool_default(context, NULL, def_val,
     65 					       "appdefaults",
     66 					       appname,
     67 					       option,
     68 					       NULL);
     69 	if(realm != NULL)
     70 	    def_val = krb5_config_get_bool_default(context, NULL, def_val,
     71 						   "appdefaults",
     72 						   appname,
     73 						   realm,
     74 						   option,
     75 						   NULL);
     76     }
     77     *ret_val = def_val;
     78 }
     79 
     80 KRB5_LIB_FUNCTION void KRB5_LIB_CALL
     81 krb5_appdefault_string(krb5_context context, const char *appname,
     82 		       krb5_const_realm realm, const char *option,
     83 		       const char *def_val, char **ret_val)
     84 {
     85     if(appname == NULL)
     86 	appname = getprogname();
     87 
     88     def_val = krb5_config_get_string_default(context, NULL, def_val,
     89 					     "libdefaults", option, NULL);
     90     if(realm != NULL)
     91 	def_val = krb5_config_get_string_default(context, NULL, def_val,
     92 						 "realms", realm, option, NULL);
     93 
     94     def_val = krb5_config_get_string_default(context, NULL, def_val,
     95 					     "appdefaults",
     96 					     option,
     97 					     NULL);
     98     if(realm != NULL)
     99 	def_val = krb5_config_get_string_default(context, NULL, def_val,
    100 						 "appdefaults",
    101 						 realm,
    102 						 option,
    103 						 NULL);
    104     if(appname != NULL) {
    105 	def_val = krb5_config_get_string_default(context, NULL, def_val,
    106 						 "appdefaults",
    107 						 appname,
    108 						 option,
    109 						 NULL);
    110 	if(realm != NULL)
    111 	    def_val = krb5_config_get_string_default(context, NULL, def_val,
    112 						     "appdefaults",
    113 						     appname,
    114 						     realm,
    115 						     option,
    116 						     NULL);
    117     }
    118     if(def_val != NULL)
    119 	*ret_val = strdup(def_val);
    120     else
    121 	*ret_val = NULL;
    122 }
    123 
    124 KRB5_LIB_FUNCTION void KRB5_LIB_CALL
    125 krb5_appdefault_time(krb5_context context, const char *appname,
    126 		     krb5_const_realm realm, const char *option,
    127 		     time_t def_val, time_t *ret_val)
    128 {
    129     krb5_deltat t;
    130     char *val;
    131 
    132     krb5_appdefault_string(context, appname, realm, option, NULL, &val);
    133     if (val == NULL) {
    134 	*ret_val = def_val;
    135 	return;
    136     }
    137     if (krb5_string_to_deltat(val, &t))
    138 	*ret_val = def_val;
    139     else
    140 	*ret_val = t;
    141     free(val);
    142 }
    143