]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/options.c
ITS#8648 check result of ldap_int_initialize in ldap_{get,set}_option
[openldap] / libraries / libldap / options.c
index 3997c6d57e68b654d4454d2078a607eca03e2c2e..1705bd9fc7e213709f6d727915b04de19cf6fd66 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2013 The OpenLDAP Foundation.
+ * Copyright 1998-2017 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -106,6 +106,8 @@ ldap_get_option(
 
        if( lo->ldo_valid != LDAP_INITIALIZED ) {
                ldap_int_initialize(lo, NULL);
+               if ( lo->ldo_valid != LDAP_INITIALIZED )
+                       return LDAP_LOCAL_ERROR;
        }
 
        if(ld != NULL) {
@@ -371,7 +373,9 @@ ldap_get_option(
                        /* bad param */
                        break;
                } 
+               LDAP_MUTEX_LOCK( &ld->ld_ldcmutex );
                * (int *) outvalue = ld->ld_ldcrefcnt;
+               LDAP_MUTEX_UNLOCK( &ld->ld_ldcmutex );
                rc = LDAP_OPT_SUCCESS;
                break;
 
@@ -444,6 +448,8 @@ ldap_set_option(
 
        if( lo->ldo_valid != LDAP_INITIALIZED ) {
                ldap_int_initialize(lo, dbglvl);
+               if ( lo->ldo_valid != LDAP_INITIALIZED )
+                       return LDAP_LOCAL_ERROR;
        }
 
        if(ld != NULL) {