1 /*-
2 * Copyright (c) 2008 Apple Inc.
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 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
21 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
25 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
26 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 *
29 * P4: //depot/projects/trustedbsd/openbsm/libbsm/bsm_domain.c#3
30 */
31
32 #include <sys/cdefs.h>
33 __FBSDID("$FreeBSD: releng/9.1/sys/security/audit/audit_bsm_domain.c 191270 2009-04-19 14:53:17Z rwatson $");
34
35 #include <sys/param.h>
36 #include <sys/socket.h>
37
38 #include <security/audit/audit.h>
39
40 #include <bsm/audit_domain.h>
41 #include <bsm/audit_record.h>
42
43 struct bsm_domain {
44 u_short bd_bsm_domain;
45 int bd_local_domain;
46 };
47
48 #define PF_NO_LOCAL_MAPPING -600
49
50 static const struct bsm_domain bsm_domains[] = {
51 { BSM_PF_UNSPEC, PF_UNSPEC },
52 { BSM_PF_LOCAL, PF_LOCAL },
53 { BSM_PF_INET, PF_INET },
54 { BSM_PF_IMPLINK,
55 #ifdef PF_IMPLINK
56 PF_IMPLINK
57 #else
58 PF_NO_LOCAL_MAPPING
59 #endif
60 },
61 { BSM_PF_PUP,
62 #ifdef PF_PUP
63 PF_PUP
64 #else
65 PF_NO_LOCAL_MAPPING
66 #endif
67 },
68 { BSM_PF_CHAOS,
69 #ifdef PF_CHAOS
70 PF_CHAOS
71 #else
72 PF_NO_LOCAL_MAPPING
73 #endif
74 },
75 { BSM_PF_NS,
76 #ifdef PF_NS
77 PF_NS
78 #else
79 PF_NO_LOCAL_MAPPING
80 #endif
81 },
82 { BSM_PF_NBS,
83 #ifdef PF_NBS
84 PF_NBS
85 #else
86 PF_NO_LOCAL_MAPPING
87 #endif
88 },
89 { BSM_PF_ECMA,
90 #ifdef PF_ECMA
91 PF_ECMA
92 #else
93 PF_NO_LOCAL_MAPPING
94 #endif
95 },
96 { BSM_PF_DATAKIT,
97 #ifdef PF_DATAKIT
98 PF_DATAKIT
99 #else
100 PF_NO_LOCAL_MAPPING
101 #endif
102 },
103 { BSM_PF_CCITT,
104 #ifdef PF_CCITT
105 PF_CCITT
106 #else
107 PF_NO_LOCAL_MAPPING
108 #endif
109 },
110 { BSM_PF_SNA, PF_SNA },
111 { BSM_PF_DECnet, PF_DECnet },
112 { BSM_PF_DLI,
113 #ifdef PF_DLI
114 PF_DLI
115 #else
116 PF_NO_LOCAL_MAPPING
117 #endif
118 },
119 { BSM_PF_LAT,
120 #ifdef PF_LAT
121 PF_LAT
122 #else
123 PF_NO_LOCAL_MAPPING
124 #endif
125 },
126 { BSM_PF_HYLINK,
127 #ifdef PF_HYLINK
128 PF_HYLINK
129 #else
130 PF_NO_LOCAL_MAPPING
131 #endif
132 },
133 { BSM_PF_APPLETALK, PF_APPLETALK },
134 { BSM_PF_NIT,
135 #ifdef PF_NIT
136 PF_NIT
137 #else
138 PF_NO_LOCAL_MAPPING
139 #endif
140 },
141 { BSM_PF_802,
142 #ifdef PF_802
143 PF_802
144 #else
145 PF_NO_LOCAL_MAPPING
146 #endif
147 },
148 { BSM_PF_OSI,
149 #ifdef PF_OSI
150 PF_OSI
151 #else
152 PF_NO_LOCAL_MAPPING
153 #endif
154 },
155 { BSM_PF_X25,
156 #ifdef PF_X25
157 PF_X25
158 #else
159 PF_NO_LOCAL_MAPPING
160 #endif
161 },
162 { BSM_PF_OSINET,
163 #ifdef PF_OSINET
164 PF_OSINET
165 #else
166 PF_NO_LOCAL_MAPPING
167 #endif
168 },
169 { BSM_PF_GOSIP,
170 #ifdef PF_GOSIP
171 PF_GOSIP
172 #else
173 PF_NO_LOCAL_MAPPING
174 #endif
175 },
176 { BSM_PF_IPX, PF_IPX },
177 { BSM_PF_ROUTE, PF_ROUTE },
178 { BSM_PF_LINK,
179 #ifdef PF_LINK
180 PF_LINK
181 #else
182 PF_NO_LOCAL_MAPPING
183 #endif
184 },
185 { BSM_PF_INET6, PF_INET6 },
186 { BSM_PF_KEY, PF_KEY },
187 { BSM_PF_NCA,
188 #ifdef PF_NCA
189 PF_NCA
190 #else
191 PF_NO_LOCAL_MAPPING
192 #endif
193 },
194 { BSM_PF_POLICY,
195 #ifdef PF_POLICY
196 PF_POLICY
197 #else
198 PF_NO_LOCAL_MAPPING
199 #endif
200 },
201 { BSM_PF_INET_OFFLOAD,
202 #ifdef PF_INET_OFFLOAD
203 PF_INET_OFFLOAD
204 #else
205 PF_NO_LOCAL_MAPPING
206 #endif
207 },
208 { BSM_PF_NETBIOS,
209 #ifdef PF_NETBIOS
210 PF_NETBIOS
211 #else
212 PF_NO_LOCAL_MAPPING
213 #endif
214 },
215 { BSM_PF_ISO,
216 #ifdef PF_ISO
217 PF_ISO
218 #else
219 PF_NO_LOCAL_MAPPING
220 #endif
221 },
222 { BSM_PF_XTP,
223 #ifdef PF_XTP
224 PF_XTP
225 #else
226 PF_NO_LOCAL_MAPPING
227 #endif
228 },
229 { BSM_PF_COIP,
230 #ifdef PF_COIP
231 PF_COIP
232 #else
233 PF_NO_LOCAL_MAPPING
234 #endif
235 },
236 { BSM_PF_CNT,
237 #ifdef PF_CNT
238 PF_CNT
239 #else
240 PF_NO_LOCAL_MAPPING
241 #endif
242 },
243 { BSM_PF_RTIP,
244 #ifdef PF_RTIP
245 PF_RTIP
246 #else
247 PF_NO_LOCAL_MAPPING
248 #endif
249 },
250 { BSM_PF_SIP,
251 #ifdef PF_SIP
252 PF_SIP
253 #else
254 PF_NO_LOCAL_MAPPING
255 #endif
256 },
257 { BSM_PF_PIP,
258 #ifdef PF_PIP
259 PF_PIP
260 #else
261 PF_NO_LOCAL_MAPPING
262 #endif
263 },
264 { BSM_PF_ISDN,
265 #ifdef PF_ISDN
266 PF_ISDN
267 #else
268 PF_NO_LOCAL_MAPPING
269 #endif
270 },
271 { BSM_PF_E164,
272 #ifdef PF_E164
273 PF_E164
274 #else
275 PF_NO_LOCAL_MAPPING
276 #endif
277 },
278 { BSM_PF_NATM,
279 #ifdef PF_NATM
280 PF_NATM
281 #else
282 PF_NO_LOCAL_MAPPING
283 #endif
284 },
285 { BSM_PF_ATM,
286 #ifdef PF_ATM
287 PF_ATM
288 #else
289 PF_NO_LOCAL_MAPPING
290 #endif
291 },
292 { BSM_PF_NETGRAPH,
293 #ifdef PF_NETGRAPH
294 PF_NETGRAPH
295 #else
296 PF_NO_LOCAL_MAPPING
297 #endif
298 },
299 { BSM_PF_SLOW,
300 #ifdef PF_SLOW
301 PF_SLOW
302 #else
303 PF_NO_LOCAL_MAPPING
304 #endif
305 },
306 { BSM_PF_SCLUSTER,
307 #ifdef PF_SCLUSTER
308 PF_SCLUSTER
309 #else
310 PF_NO_LOCAL_MAPPING
311 #endif
312 },
313 { BSM_PF_ARP,
314 #ifdef PF_ARP
315 PF_ARP
316 #else
317 PF_NO_LOCAL_MAPPING
318 #endif
319 },
320 { BSM_PF_BLUETOOTH,
321 #ifdef PF_BLUETOOTH
322 PF_BLUETOOTH
323 #else
324 PF_NO_LOCAL_MAPPING
325 #endif
326 },
327 { BSM_PF_AX25,
328 #ifdef PF_AX25
329 PF_AX25
330 #else
331 PF_NO_LOCAL_MAPPING
332 #endif
333 },
334 { BSM_PF_ROSE,
335 #ifdef PF_ROSE
336 PF_ROSE
337 #else
338 PF_NO_LOCAL_MAPPING
339 #endif
340 },
341 { BSM_PF_NETBEUI,
342 #ifdef PF_NETBEUI
343 PF_NETBEUI
344 #else
345 PF_NO_LOCAL_MAPPING
346 #endif
347 },
348 { BSM_PF_SECURITY,
349 #ifdef PF_SECURITY
350 PF_SECURITY
351 #else
352 PF_NO_LOCAL_MAPPING
353 #endif
354 },
355 { BSM_PF_PACKET,
356 #ifdef PF_PACKET
357 PF_PACKET
358 #else
359 PF_NO_LOCAL_MAPPING
360 #endif
361 },
362 { BSM_PF_ASH,
363 #ifdef PF_ASH
364 PF_ASH
365 #else
366 PF_NO_LOCAL_MAPPING
367 #endif
368 },
369 { BSM_PF_ECONET,
370 #ifdef PF_ECONET
371 PF_ECONET
372 #else
373 PF_NO_LOCAL_MAPPING
374 #endif
375 },
376 { BSM_PF_ATMSVC,
377 #ifdef PF_ATMSVC
378 PF_ATMSVC
379 #else
380 PF_NO_LOCAL_MAPPING
381 #endif
382 },
383 { BSM_PF_IRDA,
384 #ifdef PF_IRDA
385 PF_IRDA
386 #else
387 PF_NO_LOCAL_MAPPING
388 #endif
389 },
390 { BSM_PF_PPPOX,
391 #ifdef PF_PPPOX
392 PF_PPPOX
393 #else
394 PF_NO_LOCAL_MAPPING
395 #endif
396 },
397 { BSM_PF_WANPIPE,
398 #ifdef PF_WANPIPE
399 PF_WANPIPE
400 #else
401 PF_NO_LOCAL_MAPPING
402 #endif
403 },
404 { BSM_PF_LLC,
405 #ifdef PF_LLC
406 PF_LLC
407 #else
408 PF_NO_LOCAL_MAPPING
409 #endif
410 },
411 { BSM_PF_CAN,
412 #ifdef PF_CAN
413 PF_CAN
414 #else
415 PF_NO_LOCAL_MAPPING
416 #endif
417 },
418 { BSM_PF_TIPC,
419 #ifdef PF_TIPC
420 PF_TIPC
421 #else
422 PF_NO_LOCAL_MAPPING
423 #endif
424 },
425 { BSM_PF_IUCV,
426 #ifdef PF_IUCV
427 PF_IUCV
428 #else
429 PF_NO_LOCAL_MAPPING
430 #endif
431 },
432 { BSM_PF_RXRPC,
433 #ifdef PF_RXRPC
434 PF_RXRPC
435 #else
436 PF_NO_LOCAL_MAPPING
437 #endif
438 },
439 { BSM_PF_PHONET,
440 #ifdef PF_PHONET
441 PF_PHONET
442 #else
443 PF_NO_LOCAL_MAPPING
444 #endif
445 },
446 };
447 static const int bsm_domains_count = sizeof(bsm_domains) /
448 sizeof(bsm_domains[0]);
449
450 static const struct bsm_domain *
451 bsm_lookup_local_domain(int local_domain)
452 {
453 int i;
454
455 for (i = 0; i < bsm_domains_count; i++) {
456 if (bsm_domains[i].bd_local_domain == local_domain)
457 return (&bsm_domains[i]);
458 }
459 return (NULL);
460 }
461
462 u_short
463 au_domain_to_bsm(int local_domain)
464 {
465 const struct bsm_domain *bstp;
466
467 bstp = bsm_lookup_local_domain(local_domain);
468 if (bstp == NULL)
469 return (BSM_PF_UNKNOWN);
470 return (bstp->bd_bsm_domain);
471 }
472
473 static const struct bsm_domain *
474 bsm_lookup_bsm_domain(u_short bsm_domain)
475 {
476 int i;
477
478 for (i = 0; i < bsm_domains_count; i++) {
479 if (bsm_domains[i].bd_bsm_domain == bsm_domain)
480 return (&bsm_domains[i]);
481 }
482 return (NULL);
483 }
484
485 int
486 au_bsm_to_domain(u_short bsm_domain, int *local_domainp)
487 {
488 const struct bsm_domain *bstp;
489
490 bstp = bsm_lookup_bsm_domain(bsm_domain);
491 if (bstp == NULL || bstp->bd_local_domain)
492 return (-1);
493 *local_domainp = bstp->bd_local_domain;
494 return (0);
495 }
Cache object: 64432795334768102d9ca9d1201b166b
|