]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-osi-audit-locking-fix-20060201
authorTom Keiser <tkeiser@gmail.com>
Mon, 13 Feb 2006 17:57:26 +0000 (17:57 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Mon, 13 Feb 2006 17:57:26 +0000 (17:57 +0000)
FIXES 25955

fix aix builds

(cherry picked from commit 73f52f37e4c1be81fad5122787382a480c220af5)

src/audit/audit.c
src/bozo/bosserver.c
src/budb/server.c
src/kauth/kaserver.c
src/ptserver/ptserver.c
src/viced/viced.c
src/vlserver/vlserver.c
src/volser/volmain.c

index aeea18567ffefa5e6d211aabc3c6ffb35ec1a6a7..bc3dca5b25696338978794f2a10091bd7855b7ea 100644 (file)
@@ -257,15 +257,25 @@ printbuf(FILE *out, int rec, char *audEvent, afs_int32 errCode, va_list vaList)
        fprintf(out, "\n");
 }
 
-static struct Lock audlock;
-static afs_int32   lock_init = 0;
+#ifdef AFS_PTHREAD_ENV
+static pthread_mutex_t audit_lock;
+static volatile afs_int32   audit_lock_initialized = 0;
+static pthread_once_t audit_lock_once = PTHREAD_ONCE_INIT;
+
+static void
+osi_audit_init_lock(void)
+{
+    pthread_mutex_init(&audit_lock, NULL);
+    audit_lock_initialized = 1;
+}
+#endif
+
 void
 osi_audit_init(void)
 {
 #ifdef AFS_PTHREAD_ENV
-    if ( !lock_init ) {
-       Lock_Init(&audlock);
-       lock_init = 1;
+    if (!audit_lock_initialized) {
+       pthread_once(&audit_lock_once, osi_audit_init_lock);
     }
 #endif /* AFS_PTHREAD_ENV */
 }
@@ -287,11 +297,10 @@ osi_audit(char *audEvent, /* Event name (15 chars or less) */
     va_list vaList;
 
 #ifdef AFS_PTHREAD_ENV
-    /* This is not thread safe.   Lock initialization should 
-     * be done in a server initialization phase
-     */
-    if ( !lock_init )
-       osi_audit_init();
+    /* i'm pretty sure all the server apps now call osi_audit_init(),
+     * but to be extra careful we'll leave this assert in here for a 
+     * while to make sure */
+    assert(audit_lock_initialized);
 #endif /* AFS_PTHREAD_ENV */
 
     if ((osi_audit_all < 0) || (osi_echo_trail < 0))
@@ -324,7 +333,7 @@ osi_audit(char *audEvent,   /* Event name (15 chars or less) */
     }
 
 #ifdef AFS_PTHREAD_ENV
-    ObtainWriteLock(&audlock);
+    pthread_mutex_lock(&audit_lock);
 #endif
 #ifdef AFS_AIX32_ENV
     bufferPtr = BUFFER;
@@ -361,7 +370,7 @@ osi_audit(char *audEvent,   /* Event name (15 chars or less) */
     }
 #endif
 #ifdef AFS_PTHREAD_ENV
-    ReleaseWriteLock(&audlock);
+    pthread_mutex_unlock(&audit_lock);
 #endif
 
     return 0;
index 6162dbb9fea34f3555ee155227629fee41b614bc..bf39de5a2233cd1495c2f10f9b1a4e506d98a4df 100644 (file)
@@ -743,6 +743,7 @@ main(int argc, char **argv, char **envp)
     sigaction(SIGSEGV, &nsa, NULL);
     sigaction(SIGABRT, &nsa, NULL);
 #endif
+    osi_audit_init();
 #ifdef BOS_RESTRICTED_MODE
     signal(SIGFPE, bozo_insecureme);
 #endif
index 6dddc8ac14c63647f9cff58cef9678fe6c6a23f5..3f0ebc97416257293592c74e20952e51865953cc 100644 (file)
@@ -395,6 +395,7 @@ main(argc, argv)
     sigaction(SIGSEGV, &nsa, NULL);
     sigaction(SIGABRT, &nsa, NULL);
 #endif
+    osi_audit_init();
     osi_audit(BUDB_StartEvent, 0, AUD_END);
 
     initialize_BUDB_error_table();
index e350d4fc68037d11b63e7b777a55525e12bdc4df..c1ea8a5c7c605a8e4b31cc4c2898b3b6724c9974 100644 (file)
@@ -198,6 +198,8 @@ main(argc, argv)
     sigaction(SIGABRT, &nsa, NULL);
     sigaction(SIGSEGV, &nsa, NULL);
 #endif
+    osi_audit_init();
+
     if (argc == 0) {
       usage:
        printf("Usage: kaserver [-noAuth] [-fastKeys] [-database <dbpath>] "
index 69418a754a81a1e3c5ed7c14da0a1e5bc75d67b2..9567dbda5f23619e45c383b0dd4e950a470d6f3f 100644 (file)
@@ -243,6 +243,7 @@ main(int argc, char **argv)
     sigaction(SIGABRT, &nsa, NULL);
     sigaction(SIGSEGV, &nsa, NULL);
 #endif
+    osi_audit_init();
     osi_audit(PTS_StartEvent, 0, AUD_END);
 
     /* Initialize dirpaths */
index ec9bddbc235583469a9a44e233b85026edddad1d..207c2928a997840745d29af6f9171d6435d14e26 100644 (file)
@@ -1628,6 +1628,7 @@ main(int argc, char *argv[])
     sigaction(SIGABRT, &nsa, NULL);
     sigaction(SIGSEGV, &nsa, NULL);
 #endif
+    osi_audit_init();
 
     /* Initialize dirpaths */
     if (!(initAFSDirPath() & AFSDIR_SERVER_PATHS_OK)) {
index 9d1a9f18070085c45fd5d2c73ee9144ffbfb5dc3..d2f47114101d5d266be7896d438c6dda71aa6202 100644 (file)
@@ -160,6 +160,8 @@ main(argc, argv)
     sigaction(SIGABRT, &nsa, NULL);
     sigaction(SIGSEGV, &nsa, NULL);
 #endif
+    osi_audit_init();
+
     /* Parse command line */
     for (index = 1; index < argc; index++) {
        if (strcmp(argv[index], "-noauth") == 0) {
index ceada2c3fd11acbba5316b3dcf36960108de03d6..63eeae624a3630ac2f4afd9a13d3fe719b6e2d33 100644 (file)
@@ -259,6 +259,7 @@ main(int argc, char **argv)
     sigaction(SIGABRT, &nsa, NULL);
     sigaction(SIGSEGV, &nsa, NULL);
 #endif
+    osi_audit_init();
     osi_audit(VS_StartEvent, 0, AUD_END);
 
     /* Initialize dirpaths */