Add des3 string-to-key. Add ktype argument to krb5_string_to_key().
[heimdal.git] / kdc / config.c
blobe924119a055a94ed3d0ba48ac78efb9be2e356f9
1 /*
2 * Copyright (c) 1997 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed by Kungliga Tekniska
20 * Högskolan and its contributors.
22 * 4. Neither the name of the Institute nor the names of its contributors
23 * may be used to endorse or promote products derived from this software
24 * without specific prior written permission.
26 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
39 #include "kdc_locl.h"
40 #include <getarg.h>
41 #include <parse_units.h>
43 RCSID("$Id$");
45 static char *config_file;
46 int require_preauth = -1;
47 char *keyfile;
48 static char *max_request_str;
49 size_t max_request;
50 time_t kdc_warn_pwexpire;
51 char *database;
52 char *port_str;
53 int enable_http = -1;
55 #ifdef KRB4
56 char *v4_realm;
57 #endif
59 static int help_flag;
60 static int version_flag;
62 static struct getargs args[] = {
64 "config-file", 'c', arg_string, &config_file,
65 "location of config file", "file"
68 "require-preauth", 'p', arg_negative_flag, &require_preauth,
69 "don't require pa-data in as-reqs"
72 "key-file", 'k', arg_string, &keyfile,
73 "location of master key file", "file"
76 "max-request", 0, arg_string, &max_request,
77 "max size for a kdc-request", "size"
80 "database", 'd', arg_string, &database,
81 "location of database", "database"
83 { "enable-http", 'H', arg_flag, &enable_http, "turn on HTTP support" },
84 #ifdef KRB4
86 "v4-realm", 'r', arg_string, &v4_realm,
87 "realm to serve v4-requests for"
89 #endif
90 { "ports", 'P', arg_string, &port_str,
91 "ports to listen to"
93 { "help", 'h', arg_flag, &help_flag },
94 { "version", 'v', arg_flag, &version_flag }
97 static int num_args = sizeof(args) / sizeof(args[0]);
99 struct units byte_units[] = {
100 { "megabyte", 1024 * 1024 },
101 { "mbyte", 1024 * 1024 },
102 { "kilobyte", 1024 },
103 { "kbyte", 1024 },
104 { "byte", 1 },
105 { NULL, 0 }
108 static void
109 usage(int ret)
111 arg_printusage (args, num_args, "");
112 exit (ret);
115 void
116 configure(int argc, char **argv)
118 krb5_config_section *cf = NULL;
119 int optind = 0;
120 int e;
121 const char *p;
123 while((e = getarg(args, num_args, argc, argv, &optind)))
124 warnx("error at argument `%s'", argv[optind]);
126 if(help_flag)
127 usage (0);
129 if (version_flag)
130 krb5_errx(context, 0, "%s", heimdal_version);
132 argc -= optind;
133 argv += optind;
135 if (argc != 0)
136 usage(1);
138 if(config_file == NULL)
139 config_file = HDB_DB_DIR "/kdc.conf";
141 if(krb5_config_parse_file(config_file, &cf))
142 goto end;
144 if(keyfile == NULL){
145 p = krb5_config_get_string (cf,
146 "kdc",
147 "key-file",
148 NULL);
149 if(p)
150 keyfile = strdup(p);
153 if(database == NULL){
154 p = krb5_config_get_string (cf, "kdc", "database", NULL);
155 if(p) database = strdup(p);
158 if(max_request_str){
159 max_request = parse_units(max_request_str, byte_units, NULL);
162 if(max_request == 0){
163 p = krb5_config_get_string (cf,
164 "kdc",
165 "max-request",
166 NULL);
167 if(p)
168 max_request = parse_units(max_request_str, byte_units, NULL);
171 if(require_preauth == -1)
172 require_preauth = krb5_config_get_bool(cf, "kdc",
173 "require-preauth", NULL);
175 if(port_str == NULL){
176 p = krb5_config_get_string(cf, "kdc", "ports", NULL);
177 port_str = (char*)p;
179 if(enable_http == -1)
180 enable_http = krb5_config_get_bool(cf, "kdc", "enable-http", NULL);
181 #ifdef KRB4
182 if(v4_realm == NULL){
183 p = krb5_config_get_string (cf,
184 "kdc",
185 "v4-realm",
186 NULL);
187 if(p)
188 v4_realm = strdup(p);
190 #endif
192 kdc_warn_pwexpire = krb5_config_get_time (cf,
193 "kdc",
194 "kdc_warn_pwexpire",
195 NULL);
196 end:
197 kdc_openlog(cf);
198 if(cf)
199 krb5_config_file_free (cf);
200 if(max_request == 0)
201 max_request = 64 * 1024;
202 if(require_preauth == -1)
203 require_preauth = 1;
204 if (port_str == NULL)
205 port_str = "+";
206 #ifdef KRB4
207 if(v4_realm == NULL){
208 v4_realm = malloc(40); /* REALM_SZ */
209 krb_get_lrealm(v4_realm, 1);
211 #endif