1 /* $NetBSD: print.c,v 1.1.1.2 2014/04/24 12:45:28 pettai Exp $ */
4 * Copyright (c) 1999-2005 Kungliga Tekniska Högskolan
5 * (Royal Institute of Technology, Stockholm, Sweden).
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
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.
19 * 3. Neither the name of KTH nor the names of its contributors may be
20 * used to endorse or promote products derived from this software without
21 * specific prior written permission.
23 * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
24 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
40 This is the present contents of a dump line. This might change at
41 any time. Fields are separated by white space.
50 salt (- means use normal salt)
51 creation date and principal
52 modification date and principal
53 principal valid from date (not used)
54 principal valid end date (not used)
55 principal key expires (not used)
62 static krb5_error_code
63 append_string(krb5_context context
, krb5_storage
*sp
, const char *fmt
, ...)
69 vasprintf(&s
, fmt
, ap
);
72 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
75 ret
= krb5_storage_write(sp
, s
, strlen(s
));
80 static krb5_error_code
81 append_hex(krb5_context context
, krb5_storage
*sp
, krb5_data
*data
)
88 for(i
= 0; i
< data
->length
; i
++)
89 if(!isalnum((unsigned char)p
[i
]) && p
[i
] != '.'){
94 return append_string(context
, sp
, "\"%.*s\"",
95 data
->length
, data
->data
);
96 hex_encode(data
->data
, data
->length
, &p
);
97 append_string(context
, sp
, "%s", p
);
105 static char buf
[128];
106 strftime(buf
, sizeof(buf
), "%Y%m%d%H%M%S", gmtime(&t
));
110 static krb5_error_code
111 append_event(krb5_context context
, krb5_storage
*sp
, Event
*ev
)
116 return append_string(context
, sp
, "- ");
117 if (ev
->principal
!= NULL
) {
118 ret
= krb5_unparse_name(context
, ev
->principal
, &pr
);
122 ret
= append_string(context
, sp
, "%s:%s ",
123 time2str(ev
->time
), pr
? pr
: "UNKNOWN");
128 static krb5_error_code
129 entry2string_int (krb5_context context
, krb5_storage
*sp
, hdb_entry
*ent
)
136 ret
= krb5_unparse_name(context
, ent
->principal
, &p
);
139 append_string(context
, sp
, "%s ", p
);
142 append_string(context
, sp
, "%d", ent
->kvno
);
144 for(i
= 0; i
< ent
->keys
.len
; i
++){
145 /* --- mkvno, keytype */
146 if(ent
->keys
.val
[i
].mkvno
)
147 append_string(context
, sp
, ":%d:%d:",
148 *ent
->keys
.val
[i
].mkvno
,
149 ent
->keys
.val
[i
].key
.keytype
);
151 append_string(context
, sp
, "::%d:",
152 ent
->keys
.val
[i
].key
.keytype
);
154 append_hex(context
, sp
, &ent
->keys
.val
[i
].key
.keyvalue
);
155 append_string(context
, sp
, ":");
157 if(ent
->keys
.val
[i
].salt
){
158 append_string(context
, sp
, "%u/", ent
->keys
.val
[i
].salt
->type
);
159 append_hex(context
, sp
, &ent
->keys
.val
[i
].salt
->salt
);
161 append_string(context
, sp
, "-");
163 append_string(context
, sp
, " ");
165 append_event(context
, sp
, &ent
->created_by
);
166 /* --- modified by */
167 append_event(context
, sp
, ent
->modified_by
);
169 /* --- valid start */
171 append_string(context
, sp
, "%s ", time2str(*ent
->valid_start
));
173 append_string(context
, sp
, "- ");
177 append_string(context
, sp
, "%s ", time2str(*ent
->valid_end
));
179 append_string(context
, sp
, "- ");
181 /* --- password ends */
183 append_string(context
, sp
, "%s ", time2str(*ent
->pw_end
));
185 append_string(context
, sp
, "- ");
189 append_string(context
, sp
, "%d ", *ent
->max_life
);
191 append_string(context
, sp
, "- ");
193 /* --- max renewable life */
195 append_string(context
, sp
, "%d ", *ent
->max_renew
);
197 append_string(context
, sp
, "- ");
200 append_string(context
, sp
, "%d ", HDBFlags2int(ent
->flags
));
202 /* --- generation number */
203 if(ent
->generation
) {
204 append_string(context
, sp
, "%s:%d:%d ", time2str(ent
->generation
->time
),
205 ent
->generation
->usec
,
206 ent
->generation
->gen
);
208 append_string(context
, sp
, "- ");
211 if(ent
->extensions
&& ent
->extensions
->len
> 0) {
212 for(i
= 0; i
< ent
->extensions
->len
; i
++) {
216 ASN1_MALLOC_ENCODE(HDB_extension
, d
, size
,
217 &ent
->extensions
->val
[i
], &sz
, ret
);
219 krb5_clear_error_message(context
);
223 krb5_abortx(context
, "internal asn.1 encoder error");
225 if (hex_encode(d
, size
, &p
) < 0) {
227 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
232 append_string(context
, sp
, "%s%s", p
,
233 ent
->extensions
->len
- 1 != i
? ":" : "");
237 append_string(context
, sp
, "-");
244 hdb_entry2string (krb5_context context
, hdb_entry
*ent
, char **str
)
250 sp
= krb5_storage_emem();
252 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
256 ret
= entry2string_int(context
, sp
, ent
);
258 krb5_storage_free(sp
);
262 krb5_storage_write(sp
, "\0", 1);
263 krb5_storage_to_data(sp
, &data
);
264 krb5_storage_free(sp
);
269 /* print a hdb_entry to (FILE*)data; suitable for hdb_foreach */
272 hdb_print_entry(krb5_context context
, HDB
*db
, hdb_entry_ex
*entry
, void *data
)
280 sp
= krb5_storage_from_fd(fileno(f
));
282 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
286 ret
= entry2string_int(context
, sp
, &entry
->entry
);
288 krb5_storage_free(sp
);
292 krb5_storage_write(sp
, "\n", 1);
293 krb5_storage_free(sp
);