Catch a few more cases of unchecked k5_mutex_lock calls
authorKen Raeburn <raeburn@mit.edu>
Tue, 22 Jul 2008 19:34:24 +0000 (19:34 +0000)
committerKen Raeburn <raeburn@mit.edu>
Tue, 22 Jul 2008 19:34:24 +0000 (19:34 +0000)
ticket: 5962

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20567 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/keytab/kt_file.c
src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap_conn.c
src/plugins/kdb/ldap/libkdb_ldap/ldap_handle.c
src/util/support/errors.c

index 1baa80096cc1019e55c38f827f46758627a65e23..8137cf9917c65c9a1afd1b7d0553dd8b5ffbbd9a 100644 (file)
@@ -537,7 +537,9 @@ krb5_ktfile_end_get(krb5_context context, krb5_keytab id, krb5_kt_cursor *cursor
     krb5_error_code kerror;
 
     krb5_xfree(*cursor);
-    KTLOCK(id);
+    kerror = KTLOCK(id);
+    if (kerror)
+       return kerror;
     KTITERS(id)--;
     if (KTFILEP(id) != NULL && KTITERS(id) == 0)
        kerror = krb5_ktfileint_close(context, id);
index 8494681a1054defac34c5cd05a85a5e8f4e6c464..08311e89ba67f61ec472a4b03c457dc9894ef67c 100644 (file)
@@ -203,7 +203,9 @@ krb5_ldap_db_init(krb5_context context, krb5_ldap_context *ldap_context)
     ldap_set_option(NULL, LDAP_X_OPT_CONNECT_TIMEOUT, &local_timelimit);
 #endif
 
-    HNDL_LOCK(ldap_context);
+    st = HNDL_LOCK(ldap_context);
+    if (st)
+       return st;
     while (ldap_context->server_info_list[cnt] != NULL) {
        krb5_ldap_server_info *server_info=NULL;
 
index 6f8e73d0e20062ee34721dbba40b8defa22fd136..dac02498de969bae9f9eebcb6f0a6175ef0212ac 100644 (file)
@@ -223,7 +223,9 @@ krb5_ldap_request_handle_from_pool(ldap_context, ldap_server_handle)
 
     *ldap_server_handle = NULL;
 
-    HNDL_LOCK(ldap_context);
+    st = HNDL_LOCK(ldap_context);
+    if (st)
+       return st;
     if (((*ldap_server_handle)=krb5_get_ldap_handle(ldap_context)) == NULL)
        (*ldap_server_handle)=krb5_retry_get_ldap_handle(ldap_context, &st);
     HNDL_UNLOCK(ldap_context);
@@ -242,7 +244,9 @@ krb5_ldap_request_next_handle_from_pool(ldap_context, ldap_server_handle)
 {
     krb5_error_code            st=0;
 
-    HNDL_LOCK(ldap_context);
+    st = HNDL_LOCK(ldap_context);
+    if (st)
+       return st;
     (*ldap_server_handle)->server_info->server_status = OFF;
     time(&(*ldap_server_handle)->server_info->downtime);
     krb5_put_ldap_handle(*ldap_server_handle);
@@ -263,11 +267,11 @@ krb5_ldap_put_handle_to_pool(ldap_context, ldap_server_handle)
     krb5_ldap_context          *ldap_context;
     krb5_ldap_server_handle    *ldap_server_handle;
 {
-
     if (ldap_server_handle != NULL) {
-       HNDL_LOCK(ldap_context);
-       krb5_put_ldap_handle(ldap_server_handle);
-       HNDL_UNLOCK(ldap_context);
+       if (HNDL_LOCK(ldap_context) == 0) {
+           krb5_put_ldap_handle(ldap_server_handle);
+           HNDL_UNLOCK(ldap_context);
+       }
     }
     return;
 }
index 36ea11c3ad849278e84ecb406b91285131dcd36f..d1aa485c5a99c2b89903a87b254907f17b4c213f 100644 (file)
@@ -85,9 +85,11 @@ krb5int_get_error (struct errinfo *ep, long code)
        ep->msg = NULL;
        return ep->scratch_buf;
     }
-    lock();
+    if (lock())
+       goto no_fptr;
     if (fptr == NULL) {
        unlock();
+    no_fptr:
 #ifdef HAVE_STRERROR_R
        if (strerror_r (code, ep->scratch_buf, sizeof(ep->scratch_buf)) == 0) {
            char *p = strdup(ep->scratch_buf);
@@ -157,7 +159,8 @@ void
 krb5int_set_error_info_callout_fn (const char *(KRB5_CALLCONV *f)(long))
 {
     initialize();
-    lock();
-    fptr = f;
-    unlock();
+    if (lock() == 0) {
+       fptr = f;
+       unlock();
+    }
 }