c6cc0b
diff -up nss/lib/pk11wrap/pk11pars.c.check_policy_file nss/lib/pk11wrap/pk11pars.c
c6cc0b
--- nss/lib/pk11wrap/pk11pars.c.check_policy_file	2017-02-28 10:49:53.811343156 +0100
c6cc0b
+++ nss/lib/pk11wrap/pk11pars.c	2017-02-28 10:59:41.178647490 +0100
c6cc0b
@@ -109,6 +109,7 @@ secmod_NewModule(void)
c6cc0b
                                                  *other flags are set */
c6cc0b
 #define SECMOD_FLAG_MODULE_DB_SKIP_FIRST 0x02
c6cc0b
 #define SECMOD_FLAG_MODULE_DB_DEFAULT_MODDB 0x04
c6cc0b
+#define SECMOD_FLAG_MODULE_DB_POLICY_ONLY 0x08
c6cc0b
 
c6cc0b
 /* private flags for internal (field in SECMODModule). */
c6cc0b
 /* The meaing of these flags is as follows:
c6cc0b
@@ -704,6 +705,9 @@ SECMOD_CreateModuleEx(const char *librar
c6cc0b
         if (NSSUTIL_ArgHasFlag("flags", "defaultModDB", nssc)) {
c6cc0b
             flags |= SECMOD_FLAG_MODULE_DB_DEFAULT_MODDB;
c6cc0b
         }
c6cc0b
+	if (NSSUTIL_ArgHasFlag("flags", "policyOnly", nssc)) {
c6cc0b
+	    flags |= SECMOD_FLAG_MODULE_DB_POLICY_ONLY;
c6cc0b
+	}
c6cc0b
         /* additional moduleDB flags could be added here in the future */
c6cc0b
         mod->isModuleDB = (PRBool)flags;
c6cc0b
     }
c6cc0b
@@ -744,6 +748,14 @@ SECMOD_GetDefaultModDBFlag(SECMODModule
c6cc0b
 }
c6cc0b
 
c6cc0b
 PRBool
c6cc0b
+secmod_PolicyOnly(SECMODModule *mod)
c6cc0b
+{
c6cc0b
+   char flags = (char) mod->isModuleDB;
c6cc0b
+
c6cc0b
+   return (flags & SECMOD_FLAG_MODULE_DB_POLICY_ONLY) ? PR_TRUE : PR_FALSE;
c6cc0b
+}
c6cc0b
+
c6cc0b
+PRBool
c6cc0b
 secmod_IsInternalKeySlot(SECMODModule *mod)
c6cc0b
 {
c6cc0b
     char flags = (char)mod->internal;
c6cc0b
@@ -1661,6 +1673,12 @@ SECMOD_LoadModule(char *modulespec, SECM
c6cc0b
     if (!module) {
c6cc0b
         goto loser;
c6cc0b
     }
c6cc0b
+
c6cc0b
+    /* a policy only stanza doesn't actually get 'loaded'. policy has already
c6cc0b
+     * been parsed as a side effect of the CreateModuleEx call */
c6cc0b
+    if (secmod_PolicyOnly(module)) {
c6cc0b
+	return module;
c6cc0b
+    }
c6cc0b
     if (parent) {
c6cc0b
         module->parent = SECMOD_ReferenceModule(parent);
c6cc0b
         if (module->internal && secmod_IsInternalKeySlot(parent)) {