1505d05c7Sgtb /*
2505d05c7Sgtb  * lib/krb5/keytab/ktfns.c
3505d05c7Sgtb  *
4505d05c7Sgtb  * Copyright 2001 by the Massachusetts Institute of Technology.
5505d05c7Sgtb  * All Rights Reserved.
6505d05c7Sgtb  *
7505d05c7Sgtb  * Export of this software from the United States of America may
8505d05c7Sgtb  *   require a specific license from the United States Government.
9505d05c7Sgtb  *   It is the responsibility of any person or organization contemplating
10505d05c7Sgtb  *   export to obtain such a license before exporting.
11*55fea89dSDan Cross  *
12505d05c7Sgtb  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
13505d05c7Sgtb  * distribute this software and its documentation for any purpose and
14505d05c7Sgtb  * without fee is hereby granted, provided that the above copyright
15505d05c7Sgtb  * notice appear in all copies and that both that copyright notice and
16505d05c7Sgtb  * this permission notice appear in supporting documentation, and that
17505d05c7Sgtb  * the name of M.I.T. not be used in advertising or publicity pertaining
18505d05c7Sgtb  * to distribution of the software without specific, written prior
19505d05c7Sgtb  * permission.  Furthermore if you modify this software you must label
20505d05c7Sgtb  * your software as modified software and not distribute it in such a
21505d05c7Sgtb  * fashion that it might be confused with the original M.I.T. software.
22505d05c7Sgtb  * M.I.T. makes no representations about the suitability of
23505d05c7Sgtb  * this software for any purpose.  It is provided "as is" without express
24505d05c7Sgtb  * or implied warranty.
25505d05c7Sgtb  */
26505d05c7Sgtb 
27505d05c7Sgtb /*
28505d05c7Sgtb  * Dispatch methods for keytab code.
29505d05c7Sgtb  */
30505d05c7Sgtb 
31505d05c7Sgtb #include "k5-int.h"
32505d05c7Sgtb 
33505d05c7Sgtb char * KRB5_CALLCONV
krb5_kt_get_type(krb5_context context,krb5_keytab keytab)34505d05c7Sgtb krb5_kt_get_type (krb5_context context, krb5_keytab keytab)
35505d05c7Sgtb {
36505d05c7Sgtb     return keytab->ops->prefix;
37505d05c7Sgtb }
38505d05c7Sgtb 
39505d05c7Sgtb krb5_error_code KRB5_CALLCONV
krb5_kt_get_name(krb5_context context,krb5_keytab keytab,char * name,unsigned int namelen)40505d05c7Sgtb krb5_kt_get_name(krb5_context context, krb5_keytab keytab, char *name,
41505d05c7Sgtb 		 unsigned int namelen)
42505d05c7Sgtb {
43505d05c7Sgtb     return krb5_x((keytab)->ops->get_name,(context, keytab,name,namelen));
44505d05c7Sgtb }
45505d05c7Sgtb 
46505d05c7Sgtb krb5_error_code KRB5_CALLCONV
krb5_kt_close(krb5_context context,krb5_keytab keytab)47505d05c7Sgtb krb5_kt_close(krb5_context context, krb5_keytab keytab)
48505d05c7Sgtb {
49505d05c7Sgtb     return krb5_x((keytab)->ops->close,(context, keytab));
50505d05c7Sgtb }
51505d05c7Sgtb 
52505d05c7Sgtb krb5_error_code KRB5_CALLCONV
krb5_kt_get_entry(krb5_context context,krb5_keytab keytab,krb5_const_principal principal,krb5_kvno vno,krb5_enctype enctype,krb5_keytab_entry * entry)53505d05c7Sgtb krb5_kt_get_entry(krb5_context context, krb5_keytab keytab,
54505d05c7Sgtb 		  krb5_const_principal principal, krb5_kvno vno,
55505d05c7Sgtb 		  krb5_enctype enctype, krb5_keytab_entry *entry)
56505d05c7Sgtb {
57159d09a2SMark Phalan     krb5_error_code err;
58159d09a2SMark Phalan     krb5_principal_data princ_data;
59159d09a2SMark Phalan 
60159d09a2SMark Phalan     if (krb5_is_referral_realm(&principal->realm)) {
61159d09a2SMark Phalan 	char *realm;
62159d09a2SMark Phalan 	princ_data = *principal;
63159d09a2SMark Phalan 	principal = &princ_data;
64159d09a2SMark Phalan 	err = krb5_get_default_realm(context, &realm);
65159d09a2SMark Phalan 	if (err)
66159d09a2SMark Phalan 	    return err;
67159d09a2SMark Phalan 	princ_data.realm.data = realm;
68159d09a2SMark Phalan 	princ_data.realm.length = strlen(realm);
69159d09a2SMark Phalan     }
70159d09a2SMark Phalan     err = krb5_x((keytab)->ops->get,(context, keytab, principal, vno, enctype,
71159d09a2SMark Phalan 				     entry));
72159d09a2SMark Phalan     if (principal == &princ_data)
73159d09a2SMark Phalan 	krb5_free_default_realm(context, princ_data.realm.data);
74159d09a2SMark Phalan     return err;
75505d05c7Sgtb }
76505d05c7Sgtb 
77505d05c7Sgtb krb5_error_code KRB5_CALLCONV
krb5_kt_start_seq_get(krb5_context context,krb5_keytab keytab,krb5_kt_cursor * cursor)78505d05c7Sgtb krb5_kt_start_seq_get(krb5_context context, krb5_keytab keytab,
79505d05c7Sgtb 		      krb5_kt_cursor *cursor)
80505d05c7Sgtb {
81505d05c7Sgtb     return krb5_x((keytab)->ops->start_seq_get,(context, keytab, cursor));
82505d05c7Sgtb }
83505d05c7Sgtb 
84505d05c7Sgtb krb5_error_code KRB5_CALLCONV
krb5_kt_next_entry(krb5_context context,krb5_keytab keytab,krb5_keytab_entry * entry,krb5_kt_cursor * cursor)85505d05c7Sgtb krb5_kt_next_entry(krb5_context context, krb5_keytab keytab,
86505d05c7Sgtb 		   krb5_keytab_entry *entry, krb5_kt_cursor *cursor)
87505d05c7Sgtb {
88505d05c7Sgtb     return krb5_x((keytab)->ops->get_next,(context, keytab, entry, cursor));
89505d05c7Sgtb }
90505d05c7Sgtb 
91505d05c7Sgtb krb5_error_code KRB5_CALLCONV
krb5_kt_end_seq_get(krb5_context context,krb5_keytab keytab,krb5_kt_cursor * cursor)92505d05c7Sgtb krb5_kt_end_seq_get(krb5_context context, krb5_keytab keytab,
93505d05c7Sgtb 		    krb5_kt_cursor *cursor)
94505d05c7Sgtb {
95505d05c7Sgtb     return krb5_x((keytab)->ops->end_get,(context, keytab, cursor));
96505d05c7Sgtb }
97