Matúš Honěk 9e4e33d
NSS: re-register NSS_Shutdown callback
Matúš Honěk 9e4e33d
Matúš Honěk 9e4e33d
Original upstream comment:
Matúš Honěk 9e4e33d
"""
Matúš Honěk 9e4e33d
When there's a persistent daemon for auth and it sets LDAP_OPT_X_TLS_NEWCTX, it
Matúš Honěk 9e4e33d
fails to auth at third login.
Matúš Honěk 9e4e33d
Matúš Honěk 9e4e33d
1. everything is good and destroyed after use but
Matúš Honěk 9e4e33d
tlsm_register_shutdown_callonce.initialized=1.
Matúš Honěk 9e4e33d
2. still good but because tlsm_register_shutdown_callonce.initialized==1, it
Matúš Honěk 9e4e33d
fails to register shutdown function.
Matúš Honěk 9e4e33d
   so pem_module is not destroyed at the end.
Matúš Honěk 9e4e33d
3. pem_module is not NULL so it's not initialized again and not added to modules
Matúš Honěk 9e4e33d
list. And Login fails.
Matúš Honěk 9e4e33d
"""
Matúš Honěk 9e4e33d
Matúš Honěk 9e4e33d
Sent-By: soohoon.lee@f5.com
Matúš Honěk 9e4e33d
Original-Name: soohoon-lee-160823.patch
Matúš Honěk 9e4e33d
Upstream-ITS: 8484
Matúš Honěk 9e4e33d
Matúš Honěk 9e4e33d
diff --git a/libraries/libldap/tls_m.c b/libraries/libldap/tls_m.c
Matúš Honěk 9e4e33d
index cdf7f8e..cf05914 100644
Matúš Honěk 9e4e33d
--- a/libraries/libldap/tls_m.c
Matúš Honěk 9e4e33d
+++ b/libraries/libldap/tls_m.c
Matúš Honěk 9e4e33d
@@ -1145,6 +1145,8 @@ tlsm_auth_cert_handler(void *arg, PRFileDesc *fd,
Matúš Honěk 9e4e33d
 	return ret;
Matúš Honěk 9e4e33d
 }
Matúš Honěk 9e4e33d
 
Matúš Honěk 9e4e33d
+static PRCallOnceType tlsm_register_shutdown_callonce = {0,0};
Matúš Honěk 9e4e33d
+
Matúš Honěk 9e4e33d
 static SECStatus
Matúš Honěk 9e4e33d
 tlsm_nss_shutdown_cb( void *appData, void *nssData )
Matúš Honěk 9e4e33d
 {
Matúš Honěk 9e4e33d
@@ -1157,10 +1159,15 @@ tlsm_nss_shutdown_cb( void *appData, void *nssData )
Matúš Honěk 9e4e33d
 		SECMOD_DestroyModule( pem_module );
Matúš Honěk 9e4e33d
 		pem_module = NULL;
Matúš Honěk 9e4e33d
 	}
Matúš Honěk 9e4e33d
+
Matúš Honěk 9e4e33d
+	/* init callonce so it can be armed again for cases like persistent daemon with LDAP_OPT_X_TLS_NEWCTX */
Matúš Honěk 9e4e33d
+	tlsm_register_shutdown_callonce.initialized = 0;
Matúš Honěk 9e4e33d
+	tlsm_register_shutdown_callonce.inProgress = 0;
Matúš Honěk 9e4e33d
+	tlsm_register_shutdown_callonce.status = 0;
Matúš Honěk 9e4e33d
+
Matúš Honěk 9e4e33d
 	return rc;
Matúš Honěk 9e4e33d
 }
Matúš Honěk 9e4e33d
 
Matúš Honěk 9e4e33d
-static PRCallOnceType tlsm_register_shutdown_callonce = {0,0};
Matúš Honěk 9e4e33d
 static PRStatus PR_CALLBACK
Matúš Honěk 9e4e33d
 tlsm_register_nss_shutdown_cb( void )
Matúš Honěk 9e4e33d
 {