]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
Tries to load libxt_*.so at first.
authorYasuyuki KOZAKAI <yasuyuki@netfilter.org>
Sat, 4 Aug 2007 05:22:17 +0000 (05:22 +0000)
committerYasuyuki KOZAKAI <yasuyuki@netfilter.org>
Sat, 4 Aug 2007 05:22:17 +0000 (05:22 +0000)
If failed, it tries libip[6]t_*.so.

extensions/Makefile
xtables.c

index 49e95caa678a05e2e2e71880da539ab24eb2e2e7..36c9b4424817b3c6a1cd713cc2e82f42609d8796 100644 (file)
@@ -56,14 +56,12 @@ SHARED_LIBS+=$(foreach T,$(PF_EXT_SLIB),extensions/libipt_$(T).so)
 SHARED_SE_LIBS+=$(foreach T,$(PF_EXT_SE_SLIB),extensions/libipt_$(T).so)
 EXTRA_INSTALLS+=$(foreach T, $(PF_EXT_SLIB), $(DEST_IPT_LIBDIR)/libipt_$(T).so)
 EXTRA_INSTALLS+=$(foreach T, $(PF_EXT_SE_SLIB), $(DEST_IPT_LIBDIR)/libipt_$(T).so)
-EXTRA_INSTALLS+=$(foreach T, $(PFX_EXT_SLIB), $(DEST_IPT_LIBDIR)/libipt_$(T).so)
 
 ifeq ($(DO_IPV6), 1)
 SHARED_LIBS+=$(foreach T,$(PF6_EXT_SLIB),extensions/libip6t_$(T).so)
 SHARED_SE_LIBS+=$(foreach T,$(PF6_EXT_SE_SLIB),extensions/libip6t_$(T).so)
 EXTRA_INSTALLS+=$(foreach T, $(PF6_EXT_SLIB), $(DEST_IPT_LIBDIR)/libip6t_$(T).so)
 EXTRA_INSTALLS+=$(foreach T, $(PF6_EXT_SE_SLIB), $(DEST_IPT_LIBDIR)/libip6t_$(T).so)
-EXTRA_INSTALLS+=$(foreach T, $(PFX_EXT_SLIB), $(DEST_IPT_LIBDIR)/libip6t_$(T).so)
 endif
 
 SHARED_LIBS+=$(foreach T,$(PFX_EXT_SLIB),extensions/libxt_$(T).so)
@@ -192,16 +190,6 @@ extensions/libip6t_matches.man: $(patsubst %, extensions/libip6t_%.man, $(PF6_EX
            done ;\
                fi >>extensions/libip6t_matches.man
 
-PF_XTLIBS=$(foreach T, $(PFX_EXT_SLIB), $(DEST_IPT_LIBDIR)/libipt_$(T).so)
-$(PF_XTLIBS): $(DEST_IPT_LIBDIR)/libipt_%.so : $(DEST_IPT_LIBDIR)/libxt_%.so
-       @[ -d $(DEST_IPT_LIBDIR)/ ] || mkdir -p $(DEST_IPT_LIBDIR)/
-       ln -sf $< $@
-
-PF6_XTLIBS=$(foreach T, $(PFX_EXT_SLIB), $(DEST_IPT_LIBDIR)/libip6t_$(T).so)
-$(PF6_XTLIBS): $(DEST_IPT_LIBDIR)/libip6t_%.so : $(DEST_IPT_LIBDIR)/libxt_%.so
-       @[ -d $(DEST_IPT_LIBDIR)/ ] || mkdir -p $(DEST_IPT_LIBDIR)/
-       ln -sf $< $@
-
 $(DEST_IPT_LIBDIR)/libipt_%.so: extensions/libipt_%.so
        @[ -d $(DEST_IPT_LIBDIR)/ ] || mkdir -p $(DEST_IPT_LIBDIR)/
        cp $< $@
index baee48343774b13e5d5383fd6f5014453d41c688..58b4e81b45a11387d8b56c6fc903360258831c60 100644 (file)
--- a/xtables.c
+++ b/xtables.c
@@ -292,18 +292,21 @@ struct xtables_match *find_match(const char *name, enum xt_tryload tryload,
        if (!ptr && tryload != DONT_LOAD && tryload != DURING_LOAD) {
                char path[strlen(lib_dir) + sizeof("/.so")
                          + strlen(afinfo.libprefix) + strlen(name)];
-               sprintf(path, "%s/%s%s.so", lib_dir, afinfo.libprefix,
-                       name);
-               if (dlopen(path, RTLD_NOW)) {
+
+               sprintf(path, "%s/libxt_%s.so", lib_dir, name);
+               if (dlopen(path, RTLD_NOW) != NULL)
                        /* Found library.  If it didn't register itself,
                           maybe they specified target as match. */
                        ptr = find_match(name, DONT_LOAD, NULL);
 
-                       if (!ptr)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Couldn't load match `%s'\n",
-                                          name);
-               } else if (tryload == LOAD_MUST_SUCCEED)
+               if (ptr == NULL) {
+                       sprintf(path, "%s/%s%s.so", lib_dir, afinfo.libprefix,
+                               name);
+                       if (dlopen(path, RTLD_NOW) != NULL)
+                               ptr = find_match(name, DONT_LOAD, NULL);
+               }
+
+               if (ptr == NULL && tryload == LOAD_MUST_SUCCEED)
                        exit_error(PARAMETER_PROBLEM,
                                   "Couldn't load match `%s':%s\n",
                                   name, dlerror());
@@ -362,16 +365,20 @@ struct xtables_target *find_target(const char *name, enum xt_tryload tryload)
        if (!ptr && tryload != DONT_LOAD && tryload != DURING_LOAD) {
                char path[strlen(lib_dir) + sizeof("/.so")
                          + strlen(afinfo.libprefix) + strlen(name)];
-               sprintf(path, "%s/%s%s.so", lib_dir, afinfo.libprefix, name);
-               if (dlopen(path, RTLD_NOW)) {
+
+               sprintf(path, "%s/libxt_%s.so", lib_dir, name);
+               if (dlopen(path, RTLD_NOW) != NULL)
                        /* Found library.  If it didn't register itself,
                           maybe they specified match as a target. */
                        ptr = find_target(name, DONT_LOAD);
-                       if (!ptr)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Couldn't load target `%s'\n",
-                                          name);
-               } else if (tryload == LOAD_MUST_SUCCEED)
+
+               if (ptr == NULL) {
+                       sprintf(path, "%s/%s%s.so", lib_dir, afinfo.libprefix,
+                               name);
+                       if (dlopen(path, RTLD_NOW) != NULL)
+                               ptr = find_target(name, DONT_LOAD);
+               }
+               if (ptr == NULL && tryload == LOAD_MUST_SUCCEED)
                        exit_error(PARAMETER_PROBLEM,
                                   "Couldn't load target `%s':%s\n",
                                   name, dlerror());