1 /*        $NetBSD: ipoptsec.c,v 1.2 2012/07/22 14:27:36 darrenr Exp $ */
2 
3 /*
4  * Copyright (C) 2012 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * Id: ipoptsec.c,v 1.1.1.2 2012/07/22 13:44:39 darrenr Exp $
9  */
10 
11 #include "ipf.h"
12 
13 
14 struct    ipopt_names         secclass[] = {
15           { IPSO_CLASS_RES4,  0x01,     0, "reserv-4" },
16           { IPSO_CLASS_TOPS,  0x02,     0, "topsecret" },
17           { IPSO_CLASS_SECR,  0x04,     0, "secret" },
18           { IPSO_CLASS_RES3,  0x08,     0, "reserv-3" },
19           { IPSO_CLASS_CONF,  0x10,     0, "confid" },
20           { IPSO_CLASS_UNCL,  0x20,     0, "unclass" },
21           { IPSO_CLASS_RES2,  0x40,     0, "reserv-2" },
22           { IPSO_CLASS_RES1,  0x80,     0, "reserv-1" },
23           { 0, 0, 0, NULL }   /* must be last */
24 };
25 
26 
seclevel(slevel)27 u_char seclevel(slevel)
28           char *slevel;
29 {
30           struct ipopt_names *so;
31 
32           if (slevel == NULL || *slevel == '\0')
33                     return 0;
34 
35           for (so = secclass; so->on_name; so++)
36                     if (!strcasecmp(slevel, so->on_name))
37                               break;
38 
39           if (!so->on_name) {
40                     fprintf(stderr, "no such security level: '%s'\n", slevel);
41                     return 0;
42           }
43           return (u_char)so->on_value;
44 }
45 
46 
secbit(class)47 u_char secbit(class)
48           int class;
49 {
50           struct ipopt_names *so;
51 
52           for (so = secclass; so->on_name; so++)
53                     if (so->on_value == class)
54                               break;
55 
56           if (!so->on_name) {
57                     fprintf(stderr, "no such security class: %d.\n", class);
58                     return 0;
59           }
60           return (u_char)so->on_bit;
61 }
62