2 * Copyright (c) 1990,1991 Regents of The University of Michigan.
5 * Permission to use, copy, modify, and distribute this software and
6 * its documentation for any purpose and without fee is hereby granted,
7 * provided that the above copyright notice appears in all copies and
8 * that both that copyright notice and this permission notice appear
9 * in supporting documentation, and that the name of The University
10 * of Michigan not be used in advertising or publicity pertaining to
11 * distribution of the software without specific, written prior
12 * permission. This software is supplied as is without expressed or
13 * implied warranties of any kind.
15 * Research Systems Unix Group
16 * The University of Michigan
18 * 535 W. William Street
21 * netatalk@itd.umich.edu
28 #include <stdio.h> /* to pick up NULL */
29 #include <sys/stat.h> /* works around a bug */
32 #include <atalk/afp.h>
33 #include <atalk/uam.h>
37 /* grab the FP functions */
43 #include "directory.h"
48 static int afp_null(obj, ibuf, ibuflen, rbuf, rbuflen )
51 int ibuflen, *rbuflen;
53 syslog( LOG_INFO, "afp_null handle %d", *ibuf );
55 return( AFPERR_NOOP );
59 * Routines marked "NULL" are not AFP functions.
60 * Routines marked "afp_null" are AFP functions
61 * which are not yet implemented. A fine line...
63 int (*preauth_switch[])() = {
64 NULL, NULL, NULL, NULL,
65 NULL, NULL, NULL, NULL, /* 0 - 7 */
66 NULL, NULL, NULL, NULL,
67 NULL, NULL, NULL, NULL, /* 8 - 15 */
68 NULL, NULL, afp_login, afp_logincont,
69 afp_logout, NULL, NULL, NULL, /* 16 - 23 */
70 NULL, NULL, NULL, NULL,
71 NULL, NULL, NULL, NULL, /* 24 - 31 */
72 NULL, NULL, NULL, NULL,
73 NULL, NULL, NULL, NULL, /* 32 - 39 */
74 NULL, NULL, NULL, NULL,
75 NULL, NULL, NULL, NULL, /* 40 - 47 */
76 NULL, NULL, NULL, NULL,
77 NULL, NULL, NULL, NULL, /* 48 - 55 */
78 NULL, NULL, NULL, NULL,
79 NULL, NULL, NULL, NULL, /* 56 - 63 */
80 NULL, NULL, NULL, NULL,
81 NULL, NULL, NULL, NULL, /* 64 - 71 */
82 NULL, NULL, NULL, NULL,
83 NULL, NULL, NULL, NULL, /* 72 - 79 */
84 NULL, NULL, NULL, NULL,
85 NULL, NULL, NULL, NULL, /* 80 - 87 */
86 NULL, NULL, NULL, NULL,
87 NULL, NULL, NULL, NULL, /* 88 - 95 */
88 NULL, NULL, NULL, NULL,
89 NULL, NULL, NULL, NULL, /* 96 - 103 */
90 NULL, NULL, NULL, NULL,
91 NULL, NULL, NULL, NULL, /* 104 - 111 */
92 NULL, NULL, NULL, NULL,
93 NULL, NULL, NULL, NULL, /* 112 - 119 */
94 NULL, NULL, NULL, NULL,
95 NULL, NULL, NULL, NULL, /* 120 - 127 */
96 NULL, NULL, NULL, NULL,
97 NULL, NULL, NULL, NULL, /* 128 - 135 */
98 NULL, NULL, NULL, NULL,
99 NULL, NULL, NULL, NULL, /* 136 - 143 */
100 NULL, NULL, NULL, NULL,
101 NULL, NULL, NULL, NULL, /* 144 - 151 */
102 NULL, NULL, NULL, NULL,
103 NULL, NULL, NULL, NULL, /* 152 - 159 */
104 NULL, NULL, NULL, NULL,
105 NULL, NULL, NULL, NULL, /* 160 - 167 */
106 NULL, NULL, NULL, NULL,
107 NULL, NULL, NULL, NULL, /* 168 - 175 */
108 NULL, NULL, NULL, NULL,
109 NULL, NULL, NULL, NULL, /* 176 - 183 */
110 NULL, NULL, NULL, NULL,
111 NULL, NULL, NULL, NULL, /* 184 - 191 */
112 NULL, NULL, NULL, NULL,
113 NULL, NULL, NULL, NULL, /* 192 - 199 */
114 NULL, NULL, NULL, NULL,
115 NULL, NULL, NULL, NULL, /* 200 - 207 */
116 NULL, NULL, NULL, NULL,
117 NULL, NULL, NULL, NULL, /* 208 - 215 */
118 NULL, NULL, NULL, NULL,
119 NULL, NULL, NULL, NULL, /* 216 - 223 */
120 NULL, NULL, NULL, NULL,
121 NULL, NULL, NULL, NULL, /* 224 - 231 */
122 NULL, NULL, NULL, NULL,
123 NULL, NULL, NULL, NULL, /* 232 - 239 */
124 NULL, NULL, NULL, NULL,
125 NULL, NULL, NULL, NULL, /* 240 - 247 */
126 NULL, NULL, NULL, NULL,
127 NULL, NULL, NULL, NULL, /* 248 - 255 */
130 int (**afp_switch)() = preauth_switch;
132 int (*postauth_switch[])() = {
133 NULL, afp_bytelock, afp_closevol, afp_closedir,
134 afp_closefork, afp_copyfile, afp_createdir, afp_createfile, /* 0 - 7 */
135 afp_delete, afp_enumerate, afp_flush, afp_flushfork,
136 afp_null, afp_null, afp_getforkparams, afp_getsrvrinfo, /* 8 - 15 */
137 afp_getsrvrparms, afp_getvolparams, afp_login, afp_logincont,
138 afp_logout, afp_mapid, afp_mapname, afp_moveandrename, /* 16 - 23 */
139 afp_openvol, afp_opendir, afp_openfork, afp_read,
140 afp_rename, afp_setdirparams, afp_setfilparams, afp_setforkparams,
142 afp_setvolparams, afp_write, afp_getfildirparams, afp_setfildirparams,
143 afp_changepw, afp_getuserinfo, afp_getsrvrmesg, afp_createid, /* 32 - 39 */
144 afp_deleteid, afp_resolveid, afp_exchangefiles, afp_null /*afp_catsearch*/,
145 afp_null, afp_null, afp_null, afp_null, /* 40 - 47 */
146 afp_opendt, afp_closedt, afp_null, afp_geticon,
147 afp_geticoninfo, afp_addappl, afp_rmvappl, afp_getappl, /* 48 - 55 */
148 afp_addcomment, afp_rmvcomment, afp_getcomment, NULL,
149 NULL, NULL, NULL, NULL, /* 56 - 63 */
150 NULL, NULL, NULL, NULL,
151 NULL, NULL, NULL, NULL, /* 64 - 71 */
152 NULL, NULL, NULL, NULL,
153 NULL, NULL, NULL, NULL, /* 72 - 79 */
154 NULL, NULL, NULL, NULL,
155 NULL, NULL, NULL, NULL, /* 80 - 87 */
156 NULL, NULL, NULL, NULL,
157 NULL, NULL, NULL, NULL, /* 88 - 95 */
158 NULL, NULL, NULL, NULL,
159 afp_getdiracl, afp_setdiracl, afp_afschangepw, NULL, /* 96 - 103 */
160 NULL, NULL, NULL, NULL,
161 NULL, NULL, NULL, NULL, /* 104 - 111 */
162 NULL, NULL, NULL, NULL,
163 NULL, NULL, NULL, NULL, /* 112 - 119 */
164 NULL, NULL, NULL, NULL,
165 NULL, NULL, NULL, NULL, /* 120 - 127 */
166 NULL, NULL, NULL, NULL,
167 NULL, NULL, NULL, NULL, /* 128 - 135 */
168 NULL, NULL, NULL, NULL,
169 NULL, NULL, NULL, NULL, /* 136 - 143 */
170 NULL, NULL, NULL, NULL,
171 NULL, NULL, NULL, NULL, /* 144 - 151 */
172 NULL, NULL, NULL, NULL,
173 NULL, NULL, NULL, NULL, /* 152 - 159 */
174 NULL, NULL, NULL, NULL,
175 NULL, NULL, NULL, NULL, /* 160 - 167 */
176 NULL, NULL, NULL, NULL,
177 NULL, NULL, NULL, NULL, /* 168 - 175 */
178 NULL, NULL, NULL, NULL,
179 NULL, NULL, NULL, NULL, /* 176 - 183 */
180 NULL, NULL, NULL, NULL,
181 NULL, NULL, NULL, NULL, /* 184 - 191 */
182 afp_addicon, NULL, NULL, NULL,
183 NULL, NULL, NULL, NULL, /* 192 - 199 */
184 NULL, NULL, NULL, NULL,
185 NULL, NULL, NULL, NULL, /* 200 - 207 */
186 NULL, NULL, NULL, NULL,
187 NULL, NULL, NULL, NULL, /* 208 - 215 */
188 NULL, NULL, NULL, NULL,
189 NULL, NULL, NULL, NULL, /* 216 - 223 */
190 NULL, NULL, NULL, NULL,
191 NULL, NULL, NULL, NULL, /* 224 - 231 */
192 NULL, NULL, NULL, NULL,
193 NULL, NULL, NULL, NULL, /* 232 - 239 */
194 NULL, NULL, NULL, NULL,
195 NULL, NULL, NULL, NULL, /* 240 - 247 */
196 NULL, NULL, NULL, NULL,
197 NULL, NULL, NULL, NULL, /* 248 - 255 */
201 /* add a new function if it's specified. return the old function in
202 * "old" if there's a pointer there. */
203 int uam_afpserver_action(const int id, const int which,
204 int (**new)(), int (**old)())
207 case UAM_AFPSERVER_PREAUTH:
209 *old = preauth_switch[id];
211 preauth_switch[id] = *new;
213 case UAM_AFPSERVER_POSTAUTH:
215 *old = postauth_switch[id];
217 postauth_switch[id] = *new;
220 syslog(LOG_DEBUG, "uam_afpserver_action: unknown switch %d[%d]",