iptables-standalone.c revision f643eb37e49a212d40eb060bcdfafbc366c0d616
1/* 2 * Author: Paul.Russell@rustcorp.com.au and mneuling@radlogic.com.au 3 * 4 * Based on the ipchains code by Paul Russell and Michael Neuling 5 * 6 * (C) 2000-2002 by the netfilter coreteam <coreteam@netfilter.org>: 7 * Paul 'Rusty' Russell <rusty@rustcorp.com.au> 8 * Marc Boucher <marc+nf@mbsi.ca> 9 * James Morris <jmorris@intercode.com.au> 10 * Harald Welte <laforge@gnumonks.org> 11 * Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> 12 * 13 * iptables -- IP firewall administration for kernels with 14 * firewall table (aimed for the 2.3 kernels) 15 * 16 * See the accompanying manual page iptables(8) for information 17 * about proper usage of this program. 18 * 19 * This program is free software; you can redistribute it and/or modify 20 * it under the terms of the GNU General Public License as published by 21 * the Free Software Foundation; either version 2 of the License, or 22 * (at your option) any later version. 23 * 24 * This program is distributed in the hope that it will be useful, 25 * but WITHOUT ANY WARRANTY; without even the implied warranty of 26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 27 * GNU General Public License for more details. 28 * 29 * You should have received a copy of the GNU General Public License 30 * along with this program; if not, write to the Free Software 31 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 32 */ 33 34#include <stdio.h> 35#include <stdlib.h> 36#include <errno.h> 37#include <string.h> 38#include <iptables.h> 39#include "iptables-multi.h" 40 41int 42iptables_main(int argc, char *argv[]) 43{ 44 int ret; 45 char *table = "filter"; 46 struct iptc_handle *handle = NULL; 47 48 iptables_globals.program_name = "iptables"; 49 ret = xtables_init_all(&iptables_globals, NFPROTO_IPV4); 50 if (ret < 0) { 51 fprintf(stderr, "%s/%s Failed to initialize xtables\n", 52 iptables_globals.program_name, 53 iptables_globals.program_version); 54 exit(1); 55 } 56#if defined(ALL_INCLUSIVE) || defined(NO_SHARED_LIBS) 57 init_extensions(); 58 init_extensions4(); 59#endif 60 61 ret = do_command4(argc, argv, &table, &handle); 62 if (ret) { 63 ret = iptc_commit(handle); 64 iptc_free(handle); 65 } 66 67 if (!ret) { 68 if (errno == EINVAL) { 69 fprintf(stderr, "iptables: %s. " 70 "Run `dmesg' for more information.\n", 71 iptc_strerror(errno)); 72 } else { 73 fprintf(stderr, "iptables: %s.\n", 74 iptc_strerror(errno)); 75 } 76 if (errno == EAGAIN) { 77 exit(RESOURCE_PROBLEM); 78 } 79 } 80 81 exit(!ret); 82} 83