Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/heimdal/kdc/set_dbinfo.c
34860 views
1
/*
2
* Copyright (c) 1997-2007 Kungliga Tekniska Högskolan
3
* (Royal Institute of Technology, Stockholm, Sweden).
4
* All rights reserved.
5
*
6
* Portions Copyright (c) 2009 Apple Inc. 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 "kdc_locl.h"
37
38
static krb5_error_code
39
add_db(krb5_context context, struct krb5_kdc_configuration *c,
40
const char *conf, const char *master_key)
41
{
42
krb5_error_code ret;
43
void *ptr;
44
45
ptr = realloc(c->db, (c->num_db + 1) * sizeof(*c->db));
46
if (ptr == NULL) {
47
krb5_set_error_message(context, ENOMEM, "malloc: out of memory");
48
return ENOMEM;
49
}
50
c->db = ptr;
51
52
ret = hdb_create(context, &c->db[c->num_db], conf);
53
if(ret)
54
return ret;
55
56
c->num_db++;
57
58
if (master_key) {
59
ret = hdb_set_master_keyfile(context, c->db[c->num_db - 1], master_key);
60
if (ret)
61
return ret;
62
}
63
64
return 0;
65
}
66
67
krb5_error_code
68
krb5_kdc_set_dbinfo(krb5_context context, struct krb5_kdc_configuration *c)
69
{
70
struct hdb_dbinfo *info, *d;
71
krb5_error_code ret;
72
int i;
73
74
/* fetch the databases */
75
ret = hdb_get_dbinfo(context, &info);
76
if (ret)
77
return ret;
78
79
d = NULL;
80
while ((d = hdb_dbinfo_get_next(info, d)) != NULL) {
81
82
ret = add_db(context, c,
83
hdb_dbinfo_get_dbname(context, d),
84
hdb_dbinfo_get_mkey_file(context, d));
85
if (ret)
86
goto out;
87
88
kdc_log(context, c, 0, "label: %s",
89
hdb_dbinfo_get_label(context, d));
90
kdc_log(context, c, 0, "\tdbname: %s",
91
hdb_dbinfo_get_dbname(context, d));
92
kdc_log(context, c, 0, "\tmkey_file: %s",
93
hdb_dbinfo_get_mkey_file(context, d));
94
kdc_log(context, c, 0, "\tacl_file: %s",
95
hdb_dbinfo_get_acl_file(context, d));
96
}
97
hdb_free_dbinfo(context, &info);
98
99
return 0;
100
out:
101
for (i = 0; i < c->num_db; i++)
102
if (c->db[i] && c->db[i]->hdb_destroy)
103
(*c->db[i]->hdb_destroy)(context, c->db[i]);
104
c->num_db = 0;
105
free(c->db);
106
c->db = NULL;
107
108
hdb_free_dbinfo(context, &info);
109
110
return ret;
111
}
112
113
114
115