fixed format string argument error, resulting in crash
authorMartin Willi <martin@strongswan.org>
Tue, 3 Mar 2009 14:56:17 +0000 (14:56 -0000)
committerMartin Willi <martin@strongswan.org>
Tue, 3 Mar 2009 14:56:17 +0000 (14:56 -0000)
fixed memleak if pool not found

src/charon/config/attributes/attribute_manager.c
src/charon/plugins/sql/sql_attribute.c

index b919c42..a069c95 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "attribute_manager.h"
 
+#include <daemon.h>
 #include <utils/linked_list.h>
 #include <utils/mutex.h>
 
@@ -53,7 +54,7 @@ static host_t* acquire_address(private_attribute_manager_t *this,
        enumerator_t *enumerator;
        attribute_provider_t *current;
        host_t *host = NULL;
-
+       
        this->lock->read_lock(this->lock);
        enumerator = this->providers->create_enumerator(this->providers);
        while (enumerator->enumerate(enumerator, &current))
@@ -67,6 +68,10 @@ static host_t* acquire_address(private_attribute_manager_t *this,
        enumerator->destroy(enumerator);
        this->lock->unlock(this->lock);
        
+       if (!host)
+       {
+               DBG1(DBG_CFG, "acquiring address from pool '%s' failed", pool);
+       }
        return host;
 }
 
@@ -78,18 +83,25 @@ static void release_address(private_attribute_manager_t *this,
 {
        enumerator_t *enumerator;
        attribute_provider_t *current;
-
+       bool found = FALSE;
+       
        this->lock->read_lock(this->lock);
        enumerator = this->providers->create_enumerator(this->providers);
        while (enumerator->enumerate(enumerator, &current))
        {
                if (current->release_address(current, pool, address, id))
                {
+                       found = TRUE;
                        break;
                }
        }
        enumerator->destroy(enumerator);
        this->lock->unlock(this->lock);
+       
+       if (!found)
+       {
+               DBG1(DBG_CFG, "releasing address to pool '%s' failed", pool);
+       }
 }
 
 /**
index cd6f7c0..826aa83 100644 (file)
@@ -89,7 +89,7 @@ static u_int get_pool(private_sql_attribute_t *this, char *name, u_int *timeout)
                e->destroy(e);
                return pool;
        }
-       DBG1(DBG_CFG, "ip pool '%s' not found");
+       DESTROY_IF(e);
        return 0;
 }