1/*	$NetBSD$	*/
2
3/*
4 * Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska H��gskolan
5 * (Royal Institute of Technology, Stockholm, Sweden).
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 *
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.
18 *
19 * 3. Neither the name of the Institute nor the names of its contributors
20 *    may be used to endorse or promote products derived from this software
21 *    without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36/* Id */
37
38#ifndef __KAFS_LOCL_H__
39#define __KAFS_LOCL_H__
40
41#ifdef HAVE_CONFIG_H
42#include <config.h>
43#endif
44
45#include <stdio.h>
46#include <stdlib.h>
47#include <string.h>
48#include <signal.h>
49#include <setjmp.h>
50#include <errno.h>
51
52#ifdef HAVE_SYS_TYPES_H
53#include <sys/types.h>
54#endif
55#ifdef HAVE_UNISTD_H
56#include <unistd.h>
57#endif
58#if defined(HAVE_SYS_IOCTL_H) && SunOS != 40
59#include <sys/ioctl.h>
60#endif
61#ifdef HAVE_SYS_FILIO_H
62#include <sys/filio.h>
63#endif
64#ifdef HAVE_SYS_SYSCTL_H
65#include <sys/sysctl.h>
66#endif
67
68#ifdef HAVE_SYS_SYSCALL_H
69#include <sys/syscall.h>
70#endif
71#ifdef HAVE_SYS_SOCKET_H
72#include <sys/socket.h>
73#endif
74#ifdef HAVE_NETINET_IN_H
75#include <netinet/in.h>
76#endif
77#ifdef HAVE_NETINET_IN6_H
78#include <netinet/in6.h>
79#endif
80#ifdef HAVE_NETINET6_IN6_H
81#include <netinet6/in6.h>
82#endif
83
84#ifdef HAVE_NETDB_H
85#include <netdb.h>
86#endif
87
88#ifdef HAVE_ARPA_NAMESER_H
89#include <arpa/nameser.h>
90#endif
91#ifdef HAVE_RESOLV_H
92#include <resolv.h>
93#endif
94#include <krb5/roken.h>
95
96#ifdef KRB5
97#include <krb5/krb5.h>
98#endif
99#ifdef KRB5
100#include "crypto-headers.h"
101#include <krb5/krb5-v4compat.h>
102typedef struct credentials CREDENTIALS;
103#endif /* KRB5 */
104#include <krb5/kafs.h>
105
106#include <krb5/resolve.h>
107
108#include "afssysdefs.h"
109
110struct kafs_data;
111struct kafs_token;
112typedef int (*afslog_uid_func_t)(struct kafs_data *,
113				 const char *,
114				 const char *,
115				 uid_t,
116				 const char *);
117
118typedef int (*get_cred_func_t)(struct kafs_data*, const char*, const char*,
119			       const char*, uid_t, struct kafs_token *);
120
121typedef char* (*get_realm_func_t)(struct kafs_data*, const char*);
122
123struct kafs_data {
124    const char *name;
125    afslog_uid_func_t afslog_uid;
126    get_cred_func_t get_cred;
127    get_realm_func_t get_realm;
128    const char *(*get_error)(struct kafs_data *, int);
129    void (*free_error)(struct kafs_data *, const char *);
130    void *data;
131};
132
133struct kafs_token {
134    struct ClearToken ct;
135    void *ticket;
136    size_t ticket_len;
137};
138
139void _kafs_foldup(char *, const char *);
140
141int _kafs_afslog_all_local_cells(struct kafs_data*, uid_t, const char*);
142
143int _kafs_get_cred(struct kafs_data*, const char*, const char*, const char *,
144		   uid_t, struct kafs_token *);
145
146int
147_kafs_realm_of_cell(struct kafs_data *, const char *, char **);
148
149int
150_kafs_v4_to_kt(CREDENTIALS *, uid_t, struct kafs_token *);
151
152void
153_kafs_fixup_viceid(struct ClearToken *, uid_t);
154
155#ifdef _AIX
156int aix_pioctl(char*, int, struct ViceIoctl*, int);
157int aix_setpag(void);
158#endif
159
160#endif /* __KAFS_LOCL_H__ */
161