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
, ...)
67 vasprintf(&s
, fmt
, ap
);
70 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
73 ret
= krb5_storage_write(sp
, s
, strlen(s
));
78 static krb5_error_code
79 append_hex(krb5_context context
, krb5_storage
*sp
, krb5_data
*data
)
86 for(i
= 0; i
< data
->length
; i
++)
87 if(!isalnum((unsigned char)p
[i
]) && p
[i
] != '.'){
92 return append_string(context
, sp
, "\"%.*s\"",
93 data
->length
, data
->data
);
94 hex_encode(data
->data
, data
->length
, &p
);
95 append_string(context
, sp
, "%s", p
);
103 static char buf
[128];
104 strftime(buf
, sizeof(buf
), "%Y%m%d%H%M%S", gmtime(&t
));
108 static krb5_error_code
109 append_event(krb5_context context
, krb5_storage
*sp
, Event
*ev
)
114 return append_string(context
, sp
, "- ");
115 if (ev
->principal
!= NULL
) {
116 ret
= krb5_unparse_name(context
, ev
->principal
, &pr
);
120 ret
= append_string(context
, sp
, "%s:%s ",
121 time2str(ev
->time
), pr
? pr
: "UNKNOWN");
126 static krb5_error_code
127 entry2string_int (krb5_context context
, krb5_storage
*sp
, hdb_entry
*ent
)
134 ret
= krb5_unparse_name(context
, ent
->principal
, &p
);
137 append_string(context
, sp
, "%s ", p
);
140 append_string(context
, sp
, "%d", ent
->kvno
);
142 for(i
= 0; i
< ent
->keys
.len
; i
++){
143 /* --- mkvno, keytype */
144 if(ent
->keys
.val
[i
].mkvno
)
145 append_string(context
, sp
, ":%d:%d:",
146 *ent
->keys
.val
[i
].mkvno
,
147 ent
->keys
.val
[i
].key
.keytype
);
149 append_string(context
, sp
, "::%d:",
150 ent
->keys
.val
[i
].key
.keytype
);
152 append_hex(context
, sp
, &ent
->keys
.val
[i
].key
.keyvalue
);
153 append_string(context
, sp
, ":");
155 if(ent
->keys
.val
[i
].salt
){
156 append_string(context
, sp
, "%u/", ent
->keys
.val
[i
].salt
->type
);
157 append_hex(context
, sp
, &ent
->keys
.val
[i
].salt
->salt
);
159 append_string(context
, sp
, "-");
161 append_string(context
, sp
, " ");
163 append_event(context
, sp
, &ent
->created_by
);
164 /* --- modified by */
165 append_event(context
, sp
, ent
->modified_by
);
167 /* --- valid start */
169 append_string(context
, sp
, "%s ", time2str(*ent
->valid_start
));
171 append_string(context
, sp
, "- ");
175 append_string(context
, sp
, "%s ", time2str(*ent
->valid_end
));
177 append_string(context
, sp
, "- ");
179 /* --- password ends */
181 append_string(context
, sp
, "%s ", time2str(*ent
->pw_end
));
183 append_string(context
, sp
, "- ");
187 append_string(context
, sp
, "%d ", *ent
->max_life
);
189 append_string(context
, sp
, "- ");
191 /* --- max renewable life */
193 append_string(context
, sp
, "%d ", *ent
->max_renew
);
195 append_string(context
, sp
, "- ");
198 append_string(context
, sp
, "%d ", HDBFlags2int(ent
->flags
));
200 /* --- generation number */
201 if(ent
->generation
) {
202 append_string(context
, sp
, "%s:%d:%d ", time2str(ent
->generation
->time
),
203 ent
->generation
->usec
,
204 ent
->generation
->gen
);
206 append_string(context
, sp
, "- ");
209 if(ent
->extensions
&& ent
->extensions
->len
> 0) {
210 for(i
= 0; i
< ent
->extensions
->len
; i
++) {
214 ASN1_MALLOC_ENCODE(HDB_extension
, d
, size
,
215 &ent
->extensions
->val
[i
], &sz
, ret
);
217 krb5_clear_error_message(context
);
221 krb5_abortx(context
, "internal asn.1 encoder error");
223 if (hex_encode(d
, size
, &p
) < 0) {
225 krb5_set_error_message(context
, ENOMEM
, "malloc: out of memory");
230 append_string(context
, sp
, "%s%s", p
,
231 ent
->extensions
->len
- 1 != i
? ":" : "");
235 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
);