summaryrefslogtreecommitdiffstats
path: root/libs/libipt_CRYPT.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/libipt_CRYPT.c')
-rw-r--r--libs/libipt_CRYPT.c114
1 files changed, 114 insertions, 0 deletions
diff --git a/libs/libipt_CRYPT.c b/libs/libipt_CRYPT.c
new file mode 100644
index 0000000..7e171f3
--- /dev/null
+++ b/libs/libipt_CRYPT.c
@@ -0,0 +1,114 @@
+/* $Id: newmail.c 31 2003-10-22 22:59:07Z lennart $ */
+
+/***
+ This file is part of seppl
+
+ seppl is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ seppl is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with seppl; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+***/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <getopt.h>
+
+#include <iptables.h>
+#include <linux/netfilter_ipv4/ip_tables.h>
+
+#include "ipt_CRYPT.h"
+
+
+/* Function which prints out usage message. */
+static void help(void) {
+ printf("CRYPT options:\n"
+ " --algorithm algo Select algorithm\n"
+ " --key key Select key\n");
+}
+
+static struct option opts[] = {
+ { "algorithm", 1, 0, 'a' },
+ { "key", 1, 0, 'k' },
+ { 0 }
+};
+
+static void init(struct ipt_entry_target *t, unsigned int *nfcache) {
+ struct ipt_crypt_info *crypt = (struct ipt_crypt_info *) t->data;
+
+ memset(crypt, 0, sizeof(struct ipt_crypt_info));
+ strncpy(crypt->name, "def", 7);
+
+ *nfcache |= NFC_UNKNOWN;
+}
+
+static int parse(int c, char **argv, int invert, unsigned int *flags, const struct ipt_entry *entry, struct ipt_entry_target **target) {
+ struct ipt_crypt_info *crypt = (struct ipt_crypt_info *)(*target)->data;
+
+ switch(c) {
+ case 'a':
+ crypt->algorithm = atoi(optarg);
+ return 1;
+
+ case 'k':
+ strncpy(crypt->name, optarg, 7);
+ return 1;
+
+ }
+
+ return 0;
+}
+
+static void final_check(unsigned int flags) {
+}
+
+static void print(const struct ipt_ip *ip, const struct ipt_entry_target *target, int numeric) {
+ const struct ipt_crypt_info *crypt = (const struct ipt_crypt_info *)target->data;
+ char txt[8];
+
+ strncpy(txt, crypt->name, 7);
+ txt[7] = 0;
+
+ printf("key: %s algo: %i\n", txt, crypt->algorithm);
+}
+
+static void save(const struct ipt_ip *ip, const struct ipt_entry_target *target) {
+ const struct ipt_crypt_info *crypt = (const struct ipt_crypt_info *)target->data;
+ char txt[8];
+
+ strncpy(txt, crypt->name, 7);
+ txt[7] = 0;
+
+ printf("--algorithm %i ", crypt->algorithm);
+ printf("--key '%s'", txt);
+
+}
+
+static struct iptables_target crypt = {
+ NULL,
+ "CRYPT",
+ "1.2.8",
+ IPT_ALIGN(sizeof(struct ipt_crypt_info)),
+ IPT_ALIGN(sizeof(struct ipt_crypt_info)),
+ &help,
+ &init,
+ &parse,
+ &final_check,
+ &print,
+ &save,
+ opts
+};
+
+void _init(void) {
+ register_target(&crypt);
+}