172445Sassar/*
2233294Sstas * Copyright (c) 2000 - 2001 Kungliga Tekniska H��gskolan
3233294Sstas * (Royal Institute of Technology, Stockholm, Sweden).
4233294Sstas * All rights reserved.
572445Sassar *
6233294Sstas * Redistribution and use in source and binary forms, with or without
7233294Sstas * modification, are permitted provided that the following conditions
8233294Sstas * are met:
972445Sassar *
10233294Sstas * 1. Redistributions of source code must retain the above copyright
11233294Sstas *    notice, this list of conditions and the following disclaimer.
1272445Sassar *
13233294Sstas * 2. Redistributions in binary form must reproduce the above copyright
14233294Sstas *    notice, this list of conditions and the following disclaimer in the
15233294Sstas *    documentation and/or other materials provided with the distribution.
1672445Sassar *
17233294Sstas * 3. Neither the name of the Institute nor the names of its contributors
18233294Sstas *    may be used to endorse or promote products derived from this software
19233294Sstas *    without specific prior written permission.
2072445Sassar *
21233294Sstas * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22233294Sstas * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23233294Sstas * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24233294Sstas * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25233294Sstas * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26233294Sstas * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27233294Sstas * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28233294Sstas * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29233294Sstas * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30233294Sstas * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31233294Sstas * SUCH DAMAGE.
3272445Sassar */
3372445Sassar
3472445Sassar#include "krb5_locl.h"
3572445Sassar
36233294SstasKRB5_LIB_FUNCTION void KRB5_LIB_CALL
37233294Sstaskrb5_appdefault_boolean(krb5_context context, const char *appname,
3890926Snectar			krb5_const_realm realm, const char *option,
3972445Sassar			krb5_boolean def_val, krb5_boolean *ret_val)
4072445Sassar{
41233294Sstas
4272445Sassar    if(appname == NULL)
4378527Sassar	appname = getprogname();
4490926Snectar
45233294Sstas    def_val = krb5_config_get_bool_default(context, NULL, def_val,
4690926Snectar					   "libdefaults", option, NULL);
4790926Snectar    if(realm != NULL)
48233294Sstas	def_val = krb5_config_get_bool_default(context, NULL, def_val,
4990926Snectar					       "realms", realm, option, NULL);
50233294Sstas
51233294Sstas    def_val = krb5_config_get_bool_default(context, NULL, def_val,
52233294Sstas					   "appdefaults",
53233294Sstas					   option,
5472445Sassar					   NULL);
5572445Sassar    if(realm != NULL)
5672445Sassar	def_val = krb5_config_get_bool_default(context, NULL, def_val,
57233294Sstas					       "appdefaults",
58233294Sstas					       realm,
59233294Sstas					       option,
6072445Sassar					       NULL);
6172445Sassar    if(appname != NULL) {
62233294Sstas	def_val = krb5_config_get_bool_default(context, NULL, def_val,
63233294Sstas					       "appdefaults",
64233294Sstas					       appname,
65233294Sstas					       option,
6672445Sassar					       NULL);
6772445Sassar	if(realm != NULL)
6872445Sassar	    def_val = krb5_config_get_bool_default(context, NULL, def_val,
69233294Sstas						   "appdefaults",
70233294Sstas						   appname,
71233294Sstas						   realm,
72233294Sstas						   option,
7372445Sassar						   NULL);
7472445Sassar    }
7572445Sassar    *ret_val = def_val;
7672445Sassar}
7772445Sassar
78233294SstasKRB5_LIB_FUNCTION void KRB5_LIB_CALL
79233294Sstaskrb5_appdefault_string(krb5_context context, const char *appname,
8090926Snectar		       krb5_const_realm realm, const char *option,
8172445Sassar		       const char *def_val, char **ret_val)
8272445Sassar{
8372445Sassar    if(appname == NULL)
8478527Sassar	appname = getprogname();
8590926Snectar
86233294Sstas    def_val = krb5_config_get_string_default(context, NULL, def_val,
8790926Snectar					     "libdefaults", option, NULL);
8890926Snectar    if(realm != NULL)
89233294Sstas	def_val = krb5_config_get_string_default(context, NULL, def_val,
9090926Snectar						 "realms", realm, option, NULL);
9190926Snectar
92233294Sstas    def_val = krb5_config_get_string_default(context, NULL, def_val,
93233294Sstas					     "appdefaults",
94233294Sstas					     option,
9572445Sassar					     NULL);
9672445Sassar    if(realm != NULL)
9772445Sassar	def_val = krb5_config_get_string_default(context, NULL, def_val,
98233294Sstas						 "appdefaults",
99233294Sstas						 realm,
100233294Sstas						 option,
10172445Sassar						 NULL);
10272445Sassar    if(appname != NULL) {
103233294Sstas	def_val = krb5_config_get_string_default(context, NULL, def_val,
104233294Sstas						 "appdefaults",
105233294Sstas						 appname,
106233294Sstas						 option,
10772445Sassar						 NULL);
10872445Sassar	if(realm != NULL)
10972445Sassar	    def_val = krb5_config_get_string_default(context, NULL, def_val,
110233294Sstas						     "appdefaults",
111233294Sstas						     appname,
112233294Sstas						     realm,
113233294Sstas						     option,
11472445Sassar						     NULL);
11572445Sassar    }
11672445Sassar    if(def_val != NULL)
11772445Sassar	*ret_val = strdup(def_val);
11872445Sassar    else
11972445Sassar	*ret_val = NULL;
12072445Sassar}
12172445Sassar
122233294SstasKRB5_LIB_FUNCTION void KRB5_LIB_CALL
12372445Sassarkrb5_appdefault_time(krb5_context context, const char *appname,
12490926Snectar		     krb5_const_realm realm, const char *option,
12572445Sassar		     time_t def_val, time_t *ret_val)
12672445Sassar{
127178825Sdfr    krb5_deltat t;
12872445Sassar    char *val;
129178825Sdfr
130178825Sdfr    krb5_appdefault_string(context, appname, realm, option, NULL, &val);
131178825Sdfr    if (val == NULL) {
132178825Sdfr	*ret_val = def_val;
133178825Sdfr	return;
134178825Sdfr    }
135178825Sdfr    if (krb5_string_to_deltat(val, &t))
136178825Sdfr	*ret_val = def_val;
137178825Sdfr    else
138178825Sdfr	*ret_val = t;
13972445Sassar    free(val);
14072445Sassar}
141