No empty .Rs/.Re
[netbsd-mini2440.git] / crypto / dist / heimdal / lib / krb5 / krb5_keytab.3
blob8c0807846234601caaa1abfe144c75286f0ede64
1 .\" Copyright (c) 2001 - 2005 Kungliga Tekniska Högskolan
2 .\" (Royal Institute of Technology, Stockholm, Sweden).
3 .\" All rights reserved.
4 .\"
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
7 .\" are met:
8 .\"
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions and the following disclaimer.
11 .\"
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\"    notice, this list of conditions and the following disclaimer in the
14 .\"    documentation and/or other materials provided with the distribution.
15 .\"
16 .\" 3. Neither the name of the Institute nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\" $Heimdal: krb5_keytab.3 22071 2007-11-14 20:04:50Z lha $
33 .\" $NetBSD: krb5_keytab.3,v 1.9 2008/03/22 08:37:14 mlelstv Exp $
34 .\"
35 .Dd August 12, 2005
36 .Dt KRB5_KEYTAB 3
37 .Os
38 .Sh NAME
39 .Nm krb5_kt_ops ,
40 .Nm krb5_keytab_entry ,
41 .Nm krb5_kt_cursor ,
42 .Nm krb5_kt_add_entry ,
43 .Nm krb5_kt_close ,
44 .Nm krb5_kt_compare ,
45 .Nm krb5_kt_copy_entry_contents ,
46 .Nm krb5_kt_default ,
47 .Nm krb5_kt_default_modify_name ,
48 .Nm krb5_kt_default_name ,
49 .Nm krb5_kt_end_seq_get ,
50 .Nm krb5_kt_free_entry ,
51 .Nm krb5_kt_get_entry ,
52 .Nm krb5_kt_get_name ,
53 .Nm krb5_kt_get_type ,
54 .Nm krb5_kt_next_entry ,
55 .Nm krb5_kt_read_service_key ,
56 .Nm krb5_kt_register ,
57 .Nm krb5_kt_remove_entry ,
58 .Nm krb5_kt_resolve ,
59 .Nm krb5_kt_start_seq_get
60 .Nd manage keytab (key storage) files
61 .Sh LIBRARY
62 Kerberos 5 Library (libkrb5, -lkrb5)
63 .Sh SYNOPSIS
64 .In krb5/krb5.h
65 .Pp
66 .Ft krb5_error_code
67 .Fo krb5_kt_add_entry
68 .Fa "krb5_context context"
69 .Fa "krb5_keytab id"
70 .Fa "krb5_keytab_entry *entry"
71 .Fc
72 .Ft krb5_error_code
73 .Fo krb5_kt_close
74 .Fa "krb5_context context"
75 .Fa "krb5_keytab id"
76 .Fc
77 .Ft krb5_boolean
78 .Fo krb5_kt_compare
79 .Fa "krb5_context context"
80 .Fa "krb5_keytab_entry *entry"
81 .Fa "krb5_const_principal principal"
82 .Fa "krb5_kvno vno"
83 .Fa "krb5_enctype enctype"
84 .Fc
85 .Ft krb5_error_code
86 .Fo krb5_kt_copy_entry_contents
87 .Fa "krb5_context context"
88 .Fa "const krb5_keytab_entry *in"
89 .Fa "krb5_keytab_entry *out"
90 .Fc
91 .Ft krb5_error_code
92 .Fo krb5_kt_default
93 .Fa "krb5_context context"
94 .Fa "krb5_keytab *id"
95 .Fc
96 .Ft krb5_error_code
97 .Fo krb5_kt_default_modify_name
98 .Fa "krb5_context context"
99 .Fa "char *name"
100 .Fa "size_t namesize"
102 .Ft krb5_error_code
103 .Fo krb5_kt_default_name
104 .Fa "krb5_context context"
105 .Fa "char *name"
106 .Fa "size_t namesize"
108 .Ft krb5_error_code
109 .Fo krb5_kt_end_seq_get
110 .Fa "krb5_context context"
111 .Fa "krb5_keytab id"
112 .Fa "krb5_kt_cursor *cursor"
114 .Ft krb5_error_code
115 .Fo krb5_kt_free_entry
116 .Fa "krb5_context context"
117 .Fa "krb5_keytab_entry *entry"
119 .Ft krb5_error_code
120 .Fo krb5_kt_get_entry
121 .Fa "krb5_context context"
122 .Fa "krb5_keytab id"
123 .Fa "krb5_const_principal principal"
124 .Fa "krb5_kvno kvno"
125 .Fa "krb5_enctype enctype"
126 .Fa "krb5_keytab_entry *entry"
128 .Ft krb5_error_code
129 .Fo krb5_kt_get_name
130 .Fa "krb5_context context"
131 .Fa "krb5_keytab keytab"
132 .Fa "char *name"
133 .Fa "size_t namesize"
135 .Ft krb5_error_code
136 .Fo krb5_kt_get_type
137 .Fa "krb5_context context"
138 .Fa "krb5_keytab keytab"
139 .Fa "char *prefix"
140 .Fa "size_t prefixsize"
142 .Ft krb5_error_code
143 .Fo krb5_kt_next_entry
144 .Fa "krb5_context context"
145 .Fa "krb5_keytab id"
146 .Fa "krb5_keytab_entry *entry"
147 .Fa "krb5_kt_cursor *cursor"
149 .Ft krb5_error_code
150 .Fo krb5_kt_read_service_key
151 .Fa "krb5_context context"
152 .Fa "krb5_pointer keyprocarg"
153 .Fa "krb5_principal principal"
154 .Fa "krb5_kvno vno"
155 .Fa "krb5_enctype enctype"
156 .Fa "krb5_keyblock **key"
158 .Ft krb5_error_code
159 .Fo krb5_kt_register
160 .Fa "krb5_context context"
161 .Fa "const krb5_kt_ops *ops"
163 .Ft krb5_error_code
164 .Fo krb5_kt_remove_entry
165 .Fa "krb5_context context"
166 .Fa "krb5_keytab id"
167 .Fa "krb5_keytab_entry *entry"
169 .Ft krb5_error_code
170 .Fo krb5_kt_resolve
171 .Fa "krb5_context context"
172 .Fa "const char *name"
173 .Fa "krb5_keytab *id"
175 .Ft krb5_error_code
176 .Fo krb5_kt_start_seq_get
177 .Fa "krb5_context context"
178 .Fa "krb5_keytab id"
179 .Fa "krb5_kt_cursor *cursor"
181 .Sh DESCRIPTION
182 A keytab name is on the form
183 .Li type:residual .
185 .Li residual
186 part is specific to each keytab-type.
188 When a keytab-name is resolved, the type is matched with an internal
189 list of keytab types. If there is no matching keytab type,
190 the default keytab is used. The current default type is
191 .Nm file .
192 The default value can be changed in the configuration file
193 .Pa /etc/krb5.conf
194 by setting the variable
195 .Li [defaults]default_keytab_name .
197 The keytab types that are implemented in Heimdal
198 are:
199 .Bl -tag -width Ds
200 .It Nm file
201 store the keytab in a file, the type's name is
202 .Li FILE .
203 The residual part is a filename.
204 For compatibility with other Kerberos implemtation
205 .Li WRFILE
207 .Li JAVA14
208 is also accepted.
209 .Li WRFILE
210 has the same format as
211 .Li FILE .
212 .Li JAVA14
213 have a format that is compatible with older versions of MIT kerberos
214 and SUN's Java based installation.  They store a truncted kvno, so
215 when the knvo excess 255, they are truncted in this format.
216 .It Nm keyfile
217 store the keytab in a
218 .Li AFS
219 keyfile (usually
220 .Pa /usr/afs/etc/KeyFile ) ,
221 the type's name is
222 .Li AFSKEYFILE .
223 The residual part is a filename.
224 .It Nm krb4
225 the keytab is a Kerberos 4
226 .Pa srvtab
227 that is on-the-fly converted to a keytab. The type's name is
228 .Li krb4 .
229 The residual part is a filename.
230 .It Nm memory
231 The keytab is stored in a memory segment. This allows sensitive and/or
232 temporary data not to be stored on disk. The type's name is
233 .Li MEMORY .
234 Each
235 .Li MEMORY
236 keytab is referenced counted by and opened by the residual name, so two
237 handles can point to the same memory area.
238 When the last user closes the entry, it disappears.
241 .Nm krb5_keytab_entry
242 holds all data for an entry in a keytab file, like principal name,
243 key-type, key, key-version number, etc.
244 .Nm krb5_kt_cursor
245 holds the current position that is used when iterating through a
246 keytab entry with
247 .Fn krb5_kt_start_seq_get ,
248 .Fn krb5_kt_next_entry ,
250 .Fn krb5_kt_end_seq_get .
252 .Nm krb5_kt_ops
253 contains the different operations that can be done to a keytab. This
254 structure is normally only used when doing a new keytab-type
255 implementation.
257 .Fn krb5_kt_resolve
258 is the equivalent of an
259 .Xr open 2
260 on keytab. Resolve the keytab name in
261 .Fa name
262 into a keytab in
263 .Fa id .
264 Returns 0 or an error. The opposite of
265 .Fn krb5_kt_resolve
267 .Fn krb5_kt_close .
269 .Fn krb5_kt_close
270 frees all resources allocated to the keytab, even on failure.
271 Returns 0 or an error.
273 .Fn krb5_kt_default
274 sets the argument
275 .Fa id
276 to the default keytab.
277 Returns 0 or an error.
279 .Fn krb5_kt_default_modify_name
280 copies the name of the default modify keytab into
281 .Fa name .
282 Return 0 or KRB5_CONFIG_NOTENUFSPACE if
283 .Fa namesize
284 is too short.
286 .Fn krb5_kt_default_name
287 copies the name of the default keytab into
288 .Fa name .
289 Return 0 or KRB5_CONFIG_NOTENUFSPACE if
290 .Fa namesize
291 is too short.
293 .Fn krb5_kt_add_entry
294 adds a new
295 .Fa entry
296 to the keytab
297 .Fa id .
298 .Li KRB5_KT_NOWRITE
299 is returned if the keytab is a readonly keytab.
301 .Fn krb5_kt_compare
302 compares the passed in
303 .Fa entry
304 against
305 .Fa principal ,
306 .Fa vno ,
308 .Fa enctype .
309 Any of
310 .Fa principal ,
311 .Fa vno
313 .Fa enctype
314 might be 0 which acts as a wildcard. Return TRUE if they compare the
315 same, FALSE otherwise.
317 .Fn krb5_kt_copy_entry_contents
318 copies the contents of
319 .Fa in
320 into
321 .Fa out .
322 Returns 0 or an error.
324 .Fn krb5_kt_get_name
325 retrieves the name of the keytab
326 .Fa keytab
327 into
328 .Fa name ,
329 .Fa namesize .
330 Returns 0 or an error.
332 .Fn krb5_kt_get_type
333 retrieves the type of the keytab
334 .Fa keytab
335 and store the prefix/name for type of the keytab into
336 .Fa prefix ,
337 .Fa prefixsize .
338 The prefix will have the maximum length of
339 .Dv KRB5_KT_PREFIX_MAX_LEN
340 (including terminating
341 .Dv NUL ) .
342 Returns 0 or an error.
344 .Fn krb5_kt_free_entry
345 frees the contents of
346 .Fa entry .
348 .Fn krb5_kt_start_seq_get
349 sets
350 .Fa cursor
351 to point at the beginning of
352 .Fa id .
353 Returns 0 or an error.
355 .Fn krb5_kt_next_entry
356 gets the next entry from
357 .Fa id
358 pointed to by
359 .Fa cursor
360 and advance the
361 .Fa cursor .
362 On success the returne entry must be freed with
363 .Fn krb5_kt_free_entry .
364 Returns 0 or an error.
366 .Fn krb5_kt_end_seq_get
367 releases all resources associated with
368 .Fa cursor .
370 .Fn krb5_kt_get_entry
371 retrieves the keytab entry for
372 .Fa principal ,
373 .Fa kvno ,
374 .Fa enctype
375 into
376 .Fa entry
377 from the keytab
378 .Fa id .
379 When comparing an entry in the keytab to determine a match, the
380 function
381 .Fn krb5_kt_compare
382 is used, so the wildcard rules applies to the argument of
383 .Fn krb5_kt_get_entry
384 too.
385 On success the returne entry must be freed with
386 .Fn krb5_kt_free_entry .
387 Returns 0 or an error.
389 .Fn krb5_kt_read_service_key
390 reads the key identified by
391 .Fa ( principal ,
392 .Fa vno ,
393 .Fa enctype )
394 from the keytab in
395 .Fa keyprocarg
396 (the system default keytab if 
397 .Dv NULL
398 is used) into
399 .Fa *key .
400 .Fa keyprocarg
401 is the same argument as to
402 .Fa name
403 argument to
404 .Fn krb5_kt_resolve .
405 Internal
406 .Fn krb5_kt_compare
407 will be used, so the same wildcard rules applies
409 .Fn krb5_kt_read_service_key .
410 On success the returned key must be freed with
411 .Fa krb5_free_keyblock .
412 Returns 0 or an error.
414 .Fn krb5_kt_remove_entry
415 removes the entry
416 .Fa entry
417 from the keytab
418 .Fa id .
419 When comparing an entry in the keytab to determine a match, the
420 function
421 .Fn krb5_kt_compare
422 is use, so the wildcard rules applies to the argument of
423 .Fn krb5_kt_remove_entry .
424 Returns 0, 
425 .Dv KRB5_KT_NOTFOUND
426 if not entry matched or another error.
428 .Fn krb5_kt_register
429 registers a new keytab type
430 .Fa ops .
431 Returns 0 or an error.
432 .Sh EXAMPLES
433 This is a minimalistic version of
434 .Nm ktutil .
436 .Bd -literal
438 main (int argc, char **argv)
440     krb5_context context;
441     krb5_keytab keytab;
442     krb5_kt_cursor cursor;
443     krb5_keytab_entry entry;
444     krb5_error_code ret;
445     char *principal;
447     if (krb5_init_context (&context) != 0)
448         errx(1, "krb5_context");
450     ret = krb5_kt_default (context, &keytab);
451     if (ret)
452         krb5_err(context, 1, ret, "krb5_kt_default");
454     ret = krb5_kt_start_seq_get(context, keytab, &cursor);
455     if (ret)
456         krb5_err(context, 1, ret, "krb5_kt_start_seq_get");
457     while((ret = krb5_kt_next_entry(context, keytab, &entry, &cursor)) == 0){
458         krb5_unparse_name_short(context, entry.principal, &principal);
459         printf("principal: %s\\n", principal);
460         free(principal);
461         krb5_kt_free_entry(context, &entry);
462     }
463     ret = krb5_kt_end_seq_get(context, keytab, &cursor);
464     if (ret)
465         krb5_err(context, 1, ret, "krb5_kt_end_seq_get");
466     ret = krb5_kt_close(context, keytab);
467     if (ret)
468         krb5_err(context, 1, ret, "krb5_kt_close");
469     krb5_free_context(context);
470     return 0;
473 .Sh COMPATIBILITY
474 Heimdal stored the ticket flags in machine bit-field order before
475 Heimdal 0.7.  The behavior is possible to change in with the option
476 .Li [libdefaults]fcc-mit-ticketflags .
477 Heimdal 0.7 also code to detech that ticket flags was in the wrong
478 order and correct them.  This matters when doing delegation in GSS-API
479 because the client code looks at the flag to determin if it is possible
480 to do delegation if the user requested it.
481 .Sh SEE ALSO
482 .Xr krb5.conf 5 ,
483 .Xr kerberos 8