diff options
Diffstat (limited to 'libs/libipt_CRYPT.c')
-rw-r--r-- | libs/libipt_CRYPT.c | 114 |
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); +} |