]> arthur.barton.de Git - netatalk.git/blob - etc/afpd/switch.c
854510b0c9ad0b1e01b6388d7f57fabc20c5b0a2
[netatalk.git] / etc / afpd / switch.c
1 /*
2  * Copyright (c) 1990,1991 Regents of The University of Michigan.
3  * All Rights Reserved.
4  *
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.
14  *
15  *      Research Systems Unix Group
16  *      The University of Michigan
17  *      c/o Mike Clark
18  *      535 W. William Street
19  *      Ann Arbor, Michigan
20  *      +1-313-763-0525
21  *      netatalk@itd.umich.edu
22  */
23
24 #include <stdio.h>  /* to pick up NULL */
25 #include <sys/stat.h> /* works around a bug */
26 #include <syslog.h>
27
28 #include <atalk/afp.h>
29 #include <atalk/uam.h>
30
31 #include "globals.h"
32
33 /* grab the FP functions */
34 #include "auth.h" 
35 #include "desktop.h"
36 #include "switch.h"
37 #include "fork.h"
38 #include "file.h"
39 #include "directory.h"
40 #include "filedir.h"
41 #include "status.h"
42 #include "misc.h"
43
44 static int afp_null(obj, ibuf, ibuflen, rbuf, rbuflen )
45     AFPObj      *obj;
46     char        *ibuf, *rbuf;
47     int         ibuflen, *rbuflen;
48 {
49     syslog( LOG_INFO, "afp_null handle %d", *ibuf );
50     *rbuflen = 0;
51     return( AFPERR_NOOP );
52 }
53
54 /*
55  * Routines marked "NULL" are not AFP functions.
56  * Routines marked "afp_null" are AFP functions
57  * which are not yet implemented. A fine line...
58  */
59 int     (*preauth_switch[])() = {
60     NULL, NULL, NULL, NULL,
61     NULL, NULL, NULL, NULL,                                     /*   0 -   7 */
62     NULL, NULL, NULL, NULL,
63     NULL, NULL, NULL, NULL,                                     /*   8 -  15 */
64     NULL, NULL, afp_login, afp_logincont,
65     afp_logout, NULL, NULL, NULL,                               /*  16 -  23 */
66     NULL, NULL, NULL, NULL,
67     NULL, NULL, NULL, NULL,                                     /*  24 -  31 */
68     NULL, NULL, NULL, NULL,
69     NULL, NULL, NULL, NULL,                             /*  32 -  39 */
70     NULL, NULL, NULL, NULL,
71     NULL, NULL, NULL, NULL,                                     /*  40 -  47 */
72     NULL, NULL, NULL, NULL,
73     NULL, NULL, NULL, NULL,                                     /*  48 -  55 */
74     NULL, NULL, NULL, NULL,
75     NULL, NULL, NULL, NULL,                                     /*  56 -  63 */
76     NULL, NULL, NULL, NULL,
77     NULL, NULL, NULL, NULL,                                     /*  64 -  71 */
78     NULL, NULL, NULL, NULL,
79     NULL, NULL, NULL, NULL,                                     /*  72 -  79 */
80     NULL, NULL, NULL, NULL,
81     NULL, NULL, NULL, NULL,                                     /*  80 -  87 */
82     NULL, NULL, NULL, NULL,
83     NULL, NULL, NULL, NULL,                                     /*  88 -  95 */
84     NULL, NULL, NULL, NULL,
85     NULL, NULL, NULL, NULL,                                     /*  96 - 103 */
86     NULL, NULL, NULL, NULL,
87     NULL, NULL, NULL, NULL,                                     /* 104 - 111 */
88     NULL, NULL, NULL, NULL,
89     NULL, NULL, NULL, NULL,                                     /* 112 - 119 */
90     NULL, NULL, NULL, NULL,
91     NULL, NULL, NULL, NULL,                                     /* 120 - 127 */
92     NULL, NULL, NULL, NULL,
93     NULL, NULL, NULL, NULL,                                     /* 128 - 135 */
94     NULL, NULL, NULL, NULL,
95     NULL, NULL, NULL, NULL,                                     /* 136 - 143 */
96     NULL, NULL, NULL, NULL,
97     NULL, NULL, NULL, NULL,                                     /* 144 - 151 */
98     NULL, NULL, NULL, NULL,
99     NULL, NULL, NULL, NULL,                                     /* 152 - 159 */
100     NULL, NULL, NULL, NULL,
101     NULL, NULL, NULL, NULL,                                     /* 160 - 167 */
102     NULL, NULL, NULL, NULL,
103     NULL, NULL, NULL, NULL,                                     /* 168 - 175 */
104     NULL, NULL, NULL, NULL,
105     NULL, NULL, NULL, NULL,                                     /* 176 - 183 */
106     NULL, NULL, NULL, NULL,
107     NULL, NULL, NULL, NULL,                                     /* 184 - 191 */
108     NULL, NULL, NULL, NULL,
109     NULL, NULL, NULL, NULL,                                     /* 192 - 199 */
110     NULL, NULL, NULL, NULL,
111     NULL, NULL, NULL, NULL,                                     /* 200 - 207 */
112     NULL, NULL, NULL, NULL,
113     NULL, NULL, NULL, NULL,                                     /* 208 - 215 */
114     NULL, NULL, NULL, NULL,
115     NULL, NULL, NULL, NULL,                                     /* 216 - 223 */
116     NULL, NULL, NULL, NULL,
117     NULL, NULL, NULL, NULL,                                     /* 224 - 231 */
118     NULL, NULL, NULL, NULL,
119     NULL, NULL, NULL, NULL,                                     /* 232 - 239 */
120     NULL, NULL, NULL, NULL,
121     NULL, NULL, NULL, NULL,                                     /* 240 - 247 */
122     NULL, NULL, NULL, NULL,
123     NULL, NULL, NULL, NULL,                                     /* 248 - 255 */
124 };
125
126 int     (**afp_switch)() = preauth_switch;
127
128 int     (*postauth_switch[])() = {
129     NULL, afp_bytelock, afp_closevol, afp_closedir,
130     afp_closefork, afp_copyfile, afp_createdir, afp_createfile, /*   0 -   7 */
131     afp_delete, afp_enumerate, afp_flush, afp_flushfork,
132     afp_null, afp_null, afp_getforkparams, afp_getsrvrinfo,     /*   8 -  15 */
133     afp_getsrvrparms, afp_getvolparams, afp_login, afp_logincont,
134     afp_logout, afp_mapid, afp_mapname, afp_moveandrename,      /*  16 -  23 */
135     afp_openvol, afp_opendir, afp_openfork, afp_read,
136     afp_rename, afp_setdirparams, afp_setfilparams, afp_setforkparams,
137                                                                 /*  24 -  31 */
138     afp_setvolparams, afp_write, afp_getfildirparams, afp_setfildirparams,
139     afp_changepw, afp_getuserinfo, afp_getsrvrmesg, afp_createid, /*  32 -  39 */
140     afp_deleteid, afp_resolveid, afp_exchangefiles, afp_null /*afp_catsearch*/,
141     afp_null, afp_null, afp_null, afp_null,                     /*  40 -  47 */
142     afp_opendt, afp_closedt, afp_null, afp_geticon,
143     afp_geticoninfo, afp_addappl, afp_rmvappl, afp_getappl,     /*  48 -  55 */
144     afp_addcomment, afp_rmvcomment, afp_getcomment, NULL,
145     NULL, NULL, NULL, NULL,                                     /*  56 -  63 */
146     NULL, NULL, NULL, NULL,
147     NULL, NULL, NULL, NULL,                                     /*  64 -  71 */
148     NULL, NULL, NULL, NULL,
149     NULL, NULL, NULL, NULL,                                     /*  72 -  79 */
150     NULL, NULL, NULL, NULL,
151     NULL, NULL, NULL, NULL,                                     /*  80 -  87 */
152     NULL, NULL, NULL, NULL,
153     NULL, NULL, NULL, NULL,                                     /*  88 -  95 */
154     NULL, NULL, NULL, NULL,
155     afp_getdiracl, afp_setdiracl, afp_afschangepw, NULL,        /*  96 - 103 */
156     NULL, NULL, NULL, NULL,
157     NULL, NULL, NULL, NULL,                                     /* 104 - 111 */
158     NULL, NULL, NULL, NULL,
159     NULL, NULL, NULL, NULL,                                     /* 112 - 119 */
160     NULL, NULL, NULL, NULL,
161     NULL, NULL, NULL, NULL,                                     /* 120 - 127 */
162     NULL, NULL, NULL, NULL,
163     NULL, NULL, NULL, NULL,                                     /* 128 - 135 */
164     NULL, NULL, NULL, NULL,
165     NULL, NULL, NULL, NULL,                                     /* 136 - 143 */
166     NULL, NULL, NULL, NULL,
167     NULL, NULL, NULL, NULL,                                     /* 144 - 151 */
168     NULL, NULL, NULL, NULL,
169     NULL, NULL, NULL, NULL,                                     /* 152 - 159 */
170     NULL, NULL, NULL, NULL,
171     NULL, NULL, NULL, NULL,                                     /* 160 - 167 */
172     NULL, NULL, NULL, NULL,
173     NULL, NULL, NULL, NULL,                                     /* 168 - 175 */
174     NULL, NULL, NULL, NULL,
175     NULL, NULL, NULL, NULL,                                     /* 176 - 183 */
176     NULL, NULL, NULL, NULL,
177     NULL, NULL, NULL, NULL,                                     /* 184 - 191 */
178     afp_addicon, NULL, NULL, NULL,
179     NULL, NULL, NULL, NULL,                                     /* 192 - 199 */
180     NULL, NULL, NULL, NULL,
181     NULL, NULL, NULL, NULL,                                     /* 200 - 207 */
182     NULL, NULL, NULL, NULL,
183     NULL, NULL, NULL, NULL,                                     /* 208 - 215 */
184     NULL, NULL, NULL, NULL,
185     NULL, NULL, NULL, NULL,                                     /* 216 - 223 */
186     NULL, NULL, NULL, NULL,
187     NULL, NULL, NULL, NULL,                                     /* 224 - 231 */
188     NULL, NULL, NULL, NULL,
189     NULL, NULL, NULL, NULL,                                     /* 232 - 239 */
190     NULL, NULL, NULL, NULL,
191     NULL, NULL, NULL, NULL,                                     /* 240 - 247 */
192     NULL, NULL, NULL, NULL,
193     NULL, NULL, NULL, NULL,                                     /* 248 - 255 */
194 };
195
196
197 /* add a new function if it's specified. return the old function in
198  * "old" if there's a pointer there. */
199 int uam_afpserver_action(const int id, const int which,
200                         int (**new)(), int (**old)())
201 {
202   switch (which) {
203   case UAM_AFPSERVER_PREAUTH:
204     if (old)
205       *old = preauth_switch[id];
206     if (new)
207       preauth_switch[id] = *new;
208     break;
209   case UAM_AFPSERVER_POSTAUTH:
210     if (old)
211       *old = postauth_switch[id];
212     if (new)
213       postauth_switch[id] = *new;
214     break;
215   default:
216     syslog(LOG_DEBUG, "uam_afpserver_action: unknown switch %d[%d]", 
217            which, id);
218     return -1;
219   }
220
221   return 0;
222 }