Blame SOURCES/mod_revocator-segfault-fix.patch

e7e179
diff -rupN mod_revocator-1.0.3.patched/Makefile.am mod_revocator-1.0.3.segfault/Makefile.am
e7e179
--- mod_revocator-1.0.3.patched/Makefile.am	2010-04-13 07:11:09.000000000 -0700
e7e179
+++ mod_revocator-1.0.3.segfault/Makefile.am	2011-10-11 09:41:23.000000000 -0700
e7e179
@@ -10,7 +10,7 @@ libmodrev_la_SOURCES = mod_rev.c
e7e179
 libmodrev_la_LDFLAGS = -module -avoid-version
e7e179
 
e7e179
 INCLUDES = -I@apache_inc@ @nspr_inc@ @nss_inc@ @apr_inc@ -Imozilla/security/nss/lib/base @ldapsdk_inc@ -Imozilla/security/nss/lib/ckfw
e7e179
-LIBS = @ldapsdk_lib@ @nspr_lib@ @nss_lib@ @ldapsdk_libs_ssl@ -lssl3 -lsmime3 -lnss3 -lnssb @ldapsdk_libs@ -lplc4 -lplds4 -lnspr4 -lpthread -ldl
e7e179
+LIBS = @ldapsdk_lib@ @nspr_lib@ @nss_lib@ @ldapsdk_libs_ssl@ -lssl3 -lsmime3 -lnss3 -lnssutil3 -lnssb @ldapsdk_libs@ -lplc4 -lplds4 -lnspr4 -lpthread -ldl
e7e179
 DEFS = -D__REVOCATION_IMPLEMENTATION__=1 @extra_cppflags@
e7e179
 
e7e179
 # Remove nsprstub.o from libnssckfw.a so we can use our own stub, then
e7e179
diff -rupN mod_revocator-1.0.3.patched/crlhelper.cpp mod_revocator-1.0.3.segfault/crlhelper.cpp
e7e179
--- mod_revocator-1.0.3.patched/crlhelper.cpp	2011-10-11 09:18:33.000000000 -0700
e7e179
+++ mod_revocator-1.0.3.segfault/crlhelper.cpp	2011-10-11 09:35:53.000000000 -0700
e7e179
@@ -229,7 +229,7 @@ int main(int argc, char ** argv)
e7e179
             }
e7e179
             if (NULL == data) {
e7e179
                 data = fetch_url(url, 30, lastfetchtime, &len, &errnum);
e7e179
-                if (expired)
e7e179
+                if (expired) {
e7e179
                     if (errnum == CL_NOUPDATE_AVAILABLE) {
e7e179
                         node->fetchtime = PR_Now();
e7e179
                         data = node->data;
e7e179
@@ -243,6 +243,7 @@ int main(int argc, char ** argv)
e7e179
                             urlcache = node->next;
e7e179
                         }
e7e179
                         freeNode(node);
e7e179
+                    }
e7e179
                 }
e7e179
                 if (data) {
e7e179
                     node = (Node *)malloc(sizeof(Node));
e7e179
@@ -262,10 +263,11 @@ int main(int argc, char ** argv)
e7e179
                     data = node->data;
e7e179
                     node->fetchtime = PR_Now();
e7e179
                     node->errnum = errnum;
e7e179
-                    if (urlcache)
e7e179
+                    if (urlcache) {
e7e179
                         node->next = urlcache;
e7e179
-                    else
e7e179
+                    } else {
e7e179
                         node->next = NULL;
e7e179
+                    }
e7e179
                     urlcache = node;
e7e179
                 }
e7e179
             }
e7e179
diff -rupN mod_revocator-1.0.3.patched/mod_rev.c mod_revocator-1.0.3.segfault/mod_rev.c
e7e179
--- mod_revocator-1.0.3.patched/mod_rev.c	2011-10-11 09:18:33.000000000 -0700
e7e179
+++ mod_revocator-1.0.3.segfault/mod_rev.c	2011-10-11 11:15:37.000000000 -0700
e7e179
@@ -501,6 +501,23 @@ InitRevocation(apr_pool_t *p, server_rec
e7e179
         apr_os_file_get(&infd, sc->proc.out);
e7e179
         PR_snprintf(configstring, CONFIGLEN, "library=%s name=revocation parameters=\"%s %ld %d %d\"", revocation_library, sc->crlfile ? sc->crlfile : "", sc->semid, infd, outfd);
e7e179
 
e7e179
+        /* Since NSS now separates some functionality into 'libnssutil3.so',
e7e179
+         * to prevent a segmentation violation from occurring, it is now
e7e179
+         * necessary to insure that all executables and libraries are
e7e179
+         * linked against this library, and that the SECOID_Init() function
e7e179
+         * is called prior to calling the SECMOD_LoadUserModule() function.
e7e179
+         */
e7e179
+        if (SECOID_Init() != SECSuccess) {
e7e179
+            free(configstring);
e7e179
+            apr_dso_unload(dlh);
e7e179
+            ap_log_error(APLOG_MARK, APLOG_ERR, 0, base_server,
e7e179
+                 "Unable to initialize SECOID, NSS error %d. %s", PR_GetError(), critical ? "" : "CRL retrieval will be disabled.");
e7e179
+            if (critical) {
e7e179
+                kill_apache();
e7e179
+            }
e7e179
+            return APR_EGENERAL;
e7e179
+        }
e7e179
+
e7e179
         mod = SECMOD_LoadUserModule(configstring, NULL, PR_FALSE);
e7e179
         if (!mod || !mod->loaded)
e7e179
         {