Create dirs if required when persisting Jakarta Auth provider config

Unlikely to be required when running in Tomcat. Is required when running
the TCK since the persistence mechanism is used outside of Tomcat and
the dirs don.t exist.
diff --git a/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties b/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties
index 1930492..7a3b0ec 100644
--- a/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties
+++ b/java/org/apache/catalina/authenticator/jaspic/LocalStrings.properties
@@ -29,6 +29,7 @@
 
 persistentProviderRegistrations.deleteFail=The temporary file [{0}] cannot be deleted
 persistentProviderRegistrations.existsDeleteFail=The temporary file [{0}] already exists and cannot be deleted
+persistentProviderRegistrations.mkdirsFail=The directory for the persistent provider registrations [{0}] cannot be created
 persistentProviderRegistrations.moveFail=Failed to move [{0}] to [{1}]
 persistentProviderRegistrations.xmlFeatureEncoding=Exception configuring JASPIC to permit java encoding names in XML configuration files. Only IANA encoding names will be supported.
 
diff --git a/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java b/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
index 4084578..2766807 100644
--- a/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
+++ b/java/org/apache/catalina/authenticator/jaspic/PersistentProviderRegistrations.java
@@ -94,6 +94,7 @@
     static void writeProviders(Providers providers, File configFile) {
         File configFileOld = new File(configFile.getAbsolutePath() + ".old");
         File configFileNew = new File(configFile.getAbsolutePath() + ".new");
+        File configParent = configFileNew.getParentFile();
 
         // Remove left over temporary files if present
         if (configFileOld.exists()) {
@@ -108,6 +109,12 @@
                         configFileNew.getAbsolutePath()));
             }
         }
+        if (!configParent.exists()) {
+            if (!configParent.mkdirs()) {
+                throw new SecurityException(sm.getString("persistentProviderRegistrations.mkdirsFail",
+                        configParent.getAbsolutePath()));
+            }
+        }
 
         // Write out the providers to the temporary new file
         try (OutputStream fos = new FileOutputStream(configFileNew);