summaryrefslogtreecommitdiffstats
path: root/lib/optname.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/optname.c')
-rw-r--r--lib/optname.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/optname.c b/lib/optname.c
new file mode 100644
index 0000000..33e5f17
--- /dev/null
+++ b/lib/optname.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2000-2001 by Darren Reed.
+ *
+ * See the IPFILTER.LICENCE file for details on licencing.
+ *
+ * $Id: optname.c,v 1.3.4.1 2006/06/16 17:21:07 darrenr Exp $
+ */
+
+#include "ipf.h"
+
+
+u_32_t optname(cp, sp, linenum)
+char ***cp;
+u_short *sp;
+int linenum;
+{
+ struct ipopt_names *io, *so;
+ u_long msk = 0;
+ u_short smsk = 0;
+ char *s;
+ int sec = 0;
+
+ for (s = strtok(**cp, ","); s; s = strtok(NULL, ",")) {
+ for (io = ionames; io->on_name; io++)
+ if (!strcasecmp(s, io->on_name)) {
+ msk |= io->on_bit;
+ break;
+ }
+ if (!io->on_name) {
+ fprintf(stderr, "%d: unknown IP option name %s\n",
+ linenum, s);
+ return 0;
+ }
+ if (!strcasecmp(s, "sec-class"))
+ sec = 1;
+ }
+
+ if (sec && !*(*cp + 1)) {
+ fprintf(stderr, "%d: missing security level after sec-class\n",
+ linenum);
+ return 0;
+ }
+
+ if (sec) {
+ (*cp)++;
+ for (s = strtok(**cp, ","); s; s = strtok(NULL, ",")) {
+ for (so = secclass; so->on_name; so++)
+ if (!strcasecmp(s, so->on_name)) {
+ smsk |= so->on_bit;
+ break;
+ }
+ if (!so->on_name) {
+ fprintf(stderr,
+ "%d: no such security level: %s\n",
+ linenum, s);
+ return 0;
+ }
+ }
+ if (smsk)
+ *sp = smsk;
+ }
+ return msk;
+}
OpenPOWER on IntegriCloud