2 * Copyright (c) 1999-2005 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
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. Neither the name of KTH nor the names of its contributors may be
18 * used to endorse or promote products derived from this software without
19 * specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
38 This is the present contents of a dump line. This might change at
39 any time. Fields are separated by white space.
48 salt (- means use normal salt)
49 creation date and principal
50 modification date and principal
51 principal valid from date (not used)
52 principal valid end date (not used)
53 principal key expires (not used)
60 static krb5_error_code
61 append_string(krb5_context context
, krb5_storage
*sp
, const char *fmt
, ...)
68 rc
= vasprintf(&s
, fmt
, ap
);
71 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
74 ret
= krb5_storage_write(sp
, s
, strlen(s
));
79 static krb5_error_code
80 append_hex(krb5_context context
, krb5_storage
*sp
, krb5_data
*data
)
87 for(i
= 0; i
< data
->length
; i
++)
88 if(!isalnum((unsigned char)p
[i
]) && p
[i
] != '.'){
93 return append_string(context
, sp
, "\"%.*s\"",
94 data
->length
, data
->data
);
95 hex_encode(data
->data
, data
->length
, &p
);
96 append_string(context
, sp
, "%s", p
);
104 static char buf
[128];
105 strftime(buf
, sizeof(buf
), "%Y%m%d%H%M%S", gmtime(&t
));
109 static krb5_error_code
110 append_event(krb5_context context
, krb5_storage
*sp
, Event
*ev
)
115 return append_string(context
, sp
, "- ");
116 if (ev
->principal
!= NULL
) {
117 ret
= krb5_unparse_name(context
, ev
->principal
, &pr
);
121 ret
= append_string(context
, sp
, "%s:%s ",
122 time2str(ev
->time
), pr
? pr
: "UNKNOWN");
127 static krb5_error_code
128 entry2string_int (krb5_context context
, krb5_storage
*sp
, hdb_entry
*ent
)
135 ret
= krb5_unparse_name(context
, ent
->principal
, &p
);
138 append_string(context
, sp
, "%s ", p
);
141 append_string(context
, sp
, "%d", ent
->kvno
);
143 for(i
= 0; i
< ent
->keys
.len
; i
++){
144 /* --- mkvno, keytype */
145 if(ent
->keys
.val
[i
].mkvno
)
146 append_string(context
, sp
, ":%d:%d:",
147 *ent
->keys
.val
[i
].mkvno
,
148 ent
->keys
.val
[i
].key
.keytype
);
150 append_string(context
, sp
, "::%d:",
151 ent
->keys
.val
[i
].key
.keytype
);
153 append_hex(context
, sp
, &ent
->keys
.val
[i
].key
.keyvalue
);
154 append_string(context
, sp
, ":");
156 if(ent
->keys
.val
[i
].salt
){
157 append_string(context
, sp
, "%u/", ent
->keys
.val
[i
].salt
->type
);
158 append_hex(context
, sp
, &ent
->keys
.val
[i
].salt
->salt
);
160 append_string(context
, sp
, "-");
162 append_string(context
, sp
, " ");
164 append_event(context
, sp
, &ent
->created_by
);
165 /* --- modified by */
166 append_event(context
, sp
, ent
->modified_by
);
168 /* --- valid start */
170 append_string(context
, sp
, "%s ", time2str(*ent
->valid_start
));
172 append_string(context
, sp
, "- ");
176 append_string(context
, sp
, "%s ", time2str(*ent
->valid_end
));
178 append_string(context
, sp
, "- ");
180 /* --- password ends */
182 append_string(context
, sp
, "%s ", time2str(*ent
->pw_end
));
184 append_string(context
, sp
, "- ");
188 append_string(context
, sp
, "%d ", *ent
->max_life
);
190 append_string(context
, sp
, "- ");
192 /* --- max renewable life */
194 append_string(context
, sp
, "%d ", *ent
->max_renew
);
196 append_string(context
, sp
, "- ");
199 append_string(context
, sp
, "%d ", HDBFlags2int(ent
->flags
));
201 /* --- generation number */
202 if(ent
->generation
) {
203 append_string(context
, sp
, "%s:%d:%d ", time2str(ent
->generation
->time
),
204 ent
->generation
->usec
,
205 ent
->generation
->gen
);
207 append_string(context
, sp
, "- ");
210 if(ent
->extensions
&& ent
->extensions
->len
> 0) {
211 for(i
= 0; i
< ent
->extensions
->len
; i
++) {
215 ASN1_MALLOC_ENCODE(HDB_extension
, d
, size
,
216 &ent
->extensions
->val
[i
], &sz
, ret
);
218 krb5_clear_error_message(context
);
222 krb5_abortx(context
, "internal asn.1 encoder error");
224 if (hex_encode(d
, size
, &p
) < 0) {
226 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
231 append_string(context
, sp
, "%s%s", p
,
232 ent
->extensions
->len
- 1 != i
? ":" : "");
236 append_string(context
, sp
, "-");
242 hdb_entry2string (krb5_context context
, hdb_entry
*ent
, char **str
)
248 sp
= krb5_storage_emem();
250 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
254 ret
= entry2string_int(context
, sp
, ent
);
256 krb5_storage_free(sp
);
260 krb5_storage_write(sp
, "\0", 1);
261 krb5_storage_to_data(sp
, &data
);
262 krb5_storage_free(sp
);
267 /* print a hdb_entry to (FILE*)data; suitable for hdb_foreach */
270 hdb_print_entry(krb5_context context
, HDB
*db
, hdb_entry_ex
*entry
, void *data
)
278 sp
= krb5_storage_from_fd(fileno(f
));
280 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
284 ret
= entry2string_int(context
, sp
, &entry
->entry
);
286 krb5_storage_free(sp
);
290 krb5_storage_write(sp
, "\n", 1);
291 krb5_storage_free(sp
);