]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
libxtables: prefix/order - program_name
authorJan Engelhardt <jengelh@medozas.de>
Tue, 27 Jan 2009 19:56:23 +0000 (20:56 +0100)
committerJan Engelhardt <jengelh@medozas.de>
Fri, 30 Jan 2009 02:27:42 +0000 (03:27 +0100)
Split XTABLES_VERSION into xtables and iptables, and encode the
xtables soversion into the extensions instead. This makes it possible
to upgrade iptables without having to recompile 3rd-party extensions
(if the libxtables version matches, of course).

Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
13 files changed:
.gitignore
Makefile.am
configure.ac
include/xtables.h.in
include/xtables/internal.h.in [moved from include/xtables/internal.h with 82% similarity]
ip6tables-restore.c
ip6tables-save.c
ip6tables-standalone.c
iptables-restore.c
iptables-save.c
iptables-standalone.c
iptables-xml.c
xtables.c

index 741f9729c92a1928c7c032d685a15cdf4ae02ad4..116de2c347ba68c5618d69c47bc7e5fd85d9d67f 100644 (file)
@@ -18,6 +18,7 @@ Makefile.in
 /extensions/targets?.man
 
 /include/xtables.h
+/include/xtables/internal.h
 
 /aclocal.m4
 /autom4te*.cache
index 83ab3bba4769a6c83b3bae3410397571ddc45f98..0ffb978509c6591d600370f7e8a265137974cf6b 100644 (file)
@@ -14,7 +14,7 @@ libiptc_libiptc_a_SOURCES = libiptc/libip4tc.c libiptc/libip6tc.c
 
 lib_LTLIBRARIES       = libxtables.la
 libxtables_la_SOURCES = xtables.c
-libxtables_la_LDFLAGS = -version-info 1:0:0
+libxtables_la_LDFLAGS = -version-info ${libxtables_vcurrent}:0:${libxtables_vage}
 
 # iptables, dynamic
 iptables_SOURCES          = iptables-standalone.c iptables.c
index 8c9c30de0b1fac60db1ed1c65880a526d84a4767..bb32130c791163040c73169b5673facdd1511312 100644 (file)
@@ -1,11 +1,10 @@
-define([_XTABLES_VERSION_MAJOR], 1)
-define([_XTABLES_VERSION_MINOR], 4)
-define([_XTABLES_VERSION_PATCH], 3)
-define([_XTABLES_VERSION_EXTRA], -rc1)
 
-define([_XTABLES_VERSION],_XTABLES_VERSION_MAJOR._XTABLES_VERSION_MINOR._XTABLES_VERSION_PATCH[]_XTABLES_VERSION_EXTRA)
+AC_INIT([iptables], [1.4.3-rc1])
+
+# See libtool.info "Libtool's versioning system"
+libxtables_vcurrent=1
+libxtables_vage=0
 
-AC_INIT([iptables], _XTABLES_VERSION)
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIR([m4])
 AC_PROG_INSTALL
@@ -74,16 +73,11 @@ AC_SUBST([kbuilddir])
 AC_SUBST([ksourcedir])
 AC_SUBST([xtlibdir])
 AC_SUBST([pkgconfigdir])
-
-XTABLES_VERSION_MAJOR=_XTABLES_VERSION_MAJOR
-XTABLES_VERSION_MINOR=_XTABLES_VERSION_MINOR
-XTABLES_VERSION_PATCH=_XTABLES_VERSION_PATCH
-XTABLES_VERSION_EXTRA=_XTABLES_VERSION_EXTRA
-AC_SUBST([XTABLES_VERSION_MAJOR])
-AC_SUBST([XTABLES_VERSION_MINOR])
-AC_SUBST([XTABLES_VERSION_PATCH])
-AC_SUBST([XTABLES_VERSION_EXTRA])
+AC_SUBST([libxtables_vcurrent])
+AC_SUBST([libxtables_vage])
+libxtables_vmajor=$(($libxtables_vcurrent - $libxtables_vage));
+AC_SUBST([libxtables_vmajor])
 
 AC_CONFIG_FILES([Makefile extensions/GNUmakefile libipq/Makefile
-       include/xtables.h xtables.pc])
+       include/xtables.h include/xtables/internal.h xtables.pc])
 AC_OUTPUT
index f372d3344a78f814701d5811009cacbc76a9a05e..e1f9c926a68c7c7e35a0ea12e7be099f86d8dd6f 100644 (file)
@@ -1,6 +1,11 @@
 #ifndef _XTABLES_H
 #define _XTABLES_H
 
+/*
+ * Changing any structs/functions may incur a needed change
+ * in libxtables_vcurrent/vage too.
+ */
+
 #include <sys/socket.h> /* PF_* */
 #include <sys/types.h>
 #include <stdbool.h>
 #define IPPROTO_UDPLITE        136
 #endif
 
-#define XTABLES_VERSION "@PACKAGE_VERSION@"
-#define XTABLES_VERSION_CODE (0x10000 * @XTABLES_VERSION_MAJOR@ + 0x100 * @XTABLES_VERSION_MINOR@ + @XTABLES_VERSION_PATCH@)
-
-#define XTABLES_API_VERSION(x,y,z)    (0x10000*(x) + 0x100*(y) + z)
+#define XTABLES_VERSION "libxtables.so.@libxtables_vmajor@"
+#define XTABLES_VERSION_CODE @libxtables_vmajor@
 
 struct in_addr;
 
@@ -155,6 +158,7 @@ enum xtables_tryload {
        XTF_LOAD_MUST_SUCCEED,
 };
 
+extern const char *xtables_program_name;
 extern const char *xtables_modprobe_program;
 extern struct xtables_match *xtables_matches;
 extern struct xtables_target *xtables_targets;
@@ -202,7 +206,6 @@ int check_inverse(const char option[], int *invert, int *my_optind, int argc);
 void exit_error(enum exittype, const char *, ...)__attribute__((noreturn,
                                                          format(printf,2,3)));
 extern void param_act(unsigned int, const char *, ...);
-extern const char *program_name, *program_version;
 
 extern const char *ipaddr_to_numeric(const struct in_addr *);
 extern const char *ipaddr_to_anyname(const struct in_addr *);
similarity index 82%
rename from include/xtables/internal.h
rename to include/xtables/internal.h.in
index 21c4401f2febbfd6ea1b935cbe5c8d3a49fa7fea..21438290e63054117f590e2dda4ab771f4d069e1 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _XTABLES_INTERNAL_H
 #define _XTABLES_INTERNAL_H 1
 
+#define IPTABLES_VERSION "@PACKAGE_VERSION@"
+
 #ifndef XT_LIB_DIR
 #      define XT_LIB_DIR "/usr/local/lib/iptables"
 #endif
@@ -29,6 +31,11 @@ struct afinfo {
 /* This is decleared in ip[6]tables.c */
 extern struct afinfo afinfo;
 
+/**
+ * Program's own name and version.
+ */
+extern const char *program_name, *program_version;
+
 extern void _init(void);
 
 #endif /* _XTABLES_INTERNAL_H */
index 6be1a36c8ac7b6cd641f0137c36cf455ad56307f..beb640b2b1fea3ae605e30cc00d4f1401567fd79 100644 (file)
@@ -127,9 +127,10 @@ int main(int argc, char *argv[])
        int in_table = 0, testing = 0;
 
        program_name = "ip6tables-restore";
-       program_version = XTABLES_VERSION;
+       program_version = IPTABLES_VERSION;
        line = 0;
 
+       xtables_program_name = program_name;
        xtables_init();
 #ifdef NO_SHARED_LIBS
        init_extensions();
@@ -151,7 +152,7 @@ int main(int argc, char *argv[])
                                break;
                        case 'h':
                                print_usage("ip6tables-restore",
-                                           XTABLES_VERSION);
+                                           IPTABLES_VERSION);
                                break;
                        case 'n':
                                noflush = 1;
index 1b9d00aec3f306fe3d2286362878e38d78d54915..86ec6b2648ea08f5e32442963c76599a7670a828 100644 (file)
@@ -76,7 +76,7 @@ static int do_output(const char *tablename)
                time_t now = time(NULL);
 
                printf("# Generated by ip6tables-save v%s on %s",
-                      XTABLES_VERSION, ctime(&now));
+                      IPTABLES_VERSION, ctime(&now));
                printf("*%s\n", tablename);
 
                /* Dump out chain names first,
@@ -137,8 +137,9 @@ int main(int argc, char *argv[])
        int c;
 
        program_name = "ip6tables-save";
-       program_version = XTABLES_VERSION;
+       program_version = IPTABLES_VERSION;
 
+       xtables_program_name = program_name;
        xtables_init();
 #ifdef NO_SHARED_LIBS
        init_extensions();
index 95435576c2dd4c9c5bfcd542cf87210b31ef7c76..3ab114eac2f2fdf33ff546605639f972be34225c 100644 (file)
@@ -50,8 +50,9 @@ main(int argc, char *argv[])
        struct ip6tc_handle *handle = NULL;
 
        program_name = "ip6tables";
-       program_version = XTABLES_VERSION;
+       program_version = IPTABLES_VERSION;
 
+       xtables_program_name = program_name;
        xtables_init();
 #ifdef NO_SHARED_LIBS
        init_extensions();
index d982fca156b0db1b5ee88130d5070ea9c640bfdd..56812ee9d211d7d73e8b9f245eb97d9c96ca2031 100644 (file)
@@ -129,9 +129,10 @@ main(int argc, char *argv[])
        const char *tablename = NULL;
 
        program_name = "iptables-restore";
-       program_version = XTABLES_VERSION;
+       program_version = IPTABLES_VERSION;
        line = 0;
 
+       xtables_program_name = program_name;
        xtables_init();
 #ifdef NO_SHARED_LIBS
        init_extensions();
@@ -153,7 +154,7 @@ main(int argc, char *argv[])
                                break;
                        case 'h':
                                print_usage("iptables-restore",
-                                           XTABLES_VERSION);
+                                           IPTABLES_VERSION);
                                break;
                        case 'n':
                                noflush = 1;
index e615de990d2b5773c7f36e37fe9e8fc5d179cccf..d08ec4b295826dfe5a950f6d048299fe44d027ca 100644 (file)
@@ -74,7 +74,7 @@ static int do_output(const char *tablename)
                time_t now = time(NULL);
 
                printf("# Generated by iptables-save v%s on %s",
-                      XTABLES_VERSION, ctime(&now));
+                      IPTABLES_VERSION, ctime(&now));
                printf("*%s\n", tablename);
 
                /* Dump out chain names first,
@@ -137,8 +137,9 @@ main(int argc, char *argv[])
        int c;
 
        program_name = "iptables-save";
-       program_version = XTABLES_VERSION;
+       program_version = IPTABLES_VERSION;
 
+       xtables_program_name = program_name;
        xtables_init();
 #ifdef NO_SHARED_LIBS
        init_extensions();
index c06b28623f02156ce7b92779cdd3f465ced7e054..9190873218a4999bcd824126f879755f38bdb9ec 100644 (file)
@@ -51,8 +51,9 @@ main(int argc, char *argv[])
        struct iptc_handle *handle = NULL;
 
        program_name = "iptables";
-       program_version = XTABLES_VERSION;
+       program_version = IPTABLES_VERSION;
 
+       xtables_program_name = program_name;
        xtables_init();
 #ifdef NO_SHARED_LIBS
        init_extensions();
index 6481b8e0d8b6d29cd0e48d9899dae94acbb51f24..a3f6987236003fc3b53cd8670f864fd1c298cf42 100644 (file)
@@ -643,7 +643,7 @@ main(int argc, char *argv[])
        FILE *in;
 
        program_name = "iptables-xml";
-       program_version = XTABLES_VERSION;
+       program_version = IPTABLES_VERSION;
        line = 0;
 
        while ((c = getopt_long(argc, argv, "cvh", options, NULL)) != -1) {
@@ -656,7 +656,7 @@ main(int argc, char *argv[])
                        verbose = 1;
                        break;
                case 'h':
-                       print_usage("iptables-xml", XTABLES_VERSION);
+                       print_usage("iptables-xml", IPTABLES_VERSION);
                        break;
                }
        }
index 9e57679475e288edb52aff1663cbd08c179ba6b6..642c04bb1bc209f8ed89a66eeb0ce7ee7595121e 100644 (file)
--- a/xtables.c
+++ b/xtables.c
 #define PROC_SYS_MODPROBE "/proc/sys/kernel/modprobe"
 #endif
 
+/**
+ * Program will set this to its own name.
+ */
+const char *xtables_program_name;
+
 /* Search path for Xtables .so files */
 static const char *xtables_libdir;
 
@@ -529,23 +534,25 @@ void xtables_register_match(struct xtables_match *me)
 {
        struct xtables_match **i, *old;
 
-       if (strcmp(me->version, program_version) != 0) {
-               fprintf(stderr, "%s: match `%s' v%s (I'm v%s).\n",
-                       program_name, me->name, me->version, program_version);
+       if (strcmp(me->version, XTABLES_VERSION) != 0) {
+               fprintf(stderr, "%s: match \"%s\" has version \"%s\", "
+                       "but \"%s\" is required.\n",
+                       xtables_program_name, me->name,
+                       me->version, XTABLES_VERSION);
                exit(1);
        }
 
        /* Revision field stole a char from name. */
        if (strlen(me->name) >= XT_FUNCTION_MAXNAMELEN-1) {
                fprintf(stderr, "%s: target `%s' has invalid name\n",
-                       program_name, me->name);
+                       xtables_program_name, me->name);
                exit(1);
        }
 
        if (me->family >= NPROTO) {
                fprintf(stderr,
                        "%s: BUG: match %s has invalid protocol family\n",
-                       program_name, me->name);
+                       xtables_program_name, me->name);
                exit(1);
        }
 
@@ -559,7 +566,7 @@ void xtables_register_match(struct xtables_match *me)
                    old->family == me->family) {
                        fprintf(stderr,
                                "%s: match `%s' already registered.\n",
-                               program_name, me->name);
+                               xtables_program_name, me->name);
                        exit(1);
                }
 
@@ -583,7 +590,7 @@ void xtables_register_match(struct xtables_match *me)
 
        if (me->size != XT_ALIGN(me->size)) {
                fprintf(stderr, "%s: match `%s' has invalid size %u.\n",
-                       program_name, me->name, (unsigned int)me->size);
+                       xtables_program_name, me->name, (unsigned int)me->size);
                exit(1);
        }
 
@@ -600,23 +607,25 @@ void xtables_register_target(struct xtables_target *me)
 {
        struct xtables_target *old;
 
-       if (strcmp(me->version, program_version) != 0) {
-               fprintf(stderr, "%s: target `%s' v%s (I'm v%s).\n",
-                       program_name, me->name, me->version, program_version);
+       if (strcmp(me->version, XTABLES_VERSION) != 0) {
+               fprintf(stderr, "%s: target \"%s\" has version \"%s\", "
+                       "but \"%s\" is required.\n",
+                       xtables_program_name, me->name,
+                       me->version, XTABLES_VERSION);
                exit(1);
        }
 
        /* Revision field stole a char from name. */
        if (strlen(me->name) >= XT_FUNCTION_MAXNAMELEN-1) {
                fprintf(stderr, "%s: target `%s' has invalid name\n",
-                       program_name, me->name);
+                       xtables_program_name, me->name);
                exit(1);
        }
 
        if (me->family >= NPROTO) {
                fprintf(stderr,
                        "%s: BUG: target %s has invalid protocol family\n",
-                       program_name, me->name);
+                       xtables_program_name, me->name);
                exit(1);
        }
 
@@ -632,7 +641,7 @@ void xtables_register_target(struct xtables_target *me)
                    old->family == me->family) {
                        fprintf(stderr,
                                "%s: target `%s' already registered.\n",
-                               program_name, me->name);
+                               xtables_program_name, me->name);
                        exit(1);
                }
 
@@ -656,7 +665,7 @@ void xtables_register_target(struct xtables_target *me)
 
        if (me->size != XT_ALIGN(me->size)) {
                fprintf(stderr, "%s: target `%s' has invalid size %u.\n",
-                       program_name, me->name, (unsigned int)me->size);
+                       xtables_program_name, me->name, (unsigned int)me->size);
                exit(1);
        }