From d932435e188a97d4b1ff0d4606a3420218f2d8c2 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 2 Jul 2008 08:31:48 +0000 Subject: sql plugin supports a list of pools to fall back, specified by e.g. rightsourceip=%pool1,pool2 --- src/charon/plugins/sql/sql_attribute.c | 39 +++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 10 deletions(-) (limited to 'src/charon/plugins/sql/sql_attribute.c') diff --git a/src/charon/plugins/sql/sql_attribute.c b/src/charon/plugins/sql/sql_attribute.c index 15a886971..847042792 100644 --- a/src/charon/plugins/sql/sql_attribute.c +++ b/src/charon/plugins/sql/sql_attribute.c @@ -226,13 +226,24 @@ static host_t* acquire_address(private_sql_attribute_t *this, char *name, identification_t *id, auth_info_t *auth, host_t *requested) { - host_t *ip; + enumerator_t *enumerator; + host_t *ip = NULL; - ip = get_lease(this, name, id); - if (!ip) + enumerator = enumerator_create_token(name, ",", " "); + while (enumerator->enumerate(enumerator, &name)) { + ip = get_lease(this, name, id); + if (ip) + { + break; + } ip = create_lease(this, name, id); + if (ip) + { + break; + } } + enumerator->destroy(enumerator); return ip; } @@ -242,15 +253,23 @@ static host_t* acquire_address(private_sql_attribute_t *this, static bool release_address(private_sql_attribute_t *this, char *name, host_t *address) { - if (this->db->execute(this->db, NULL, - "UPDATE leases SET released = ? WHERE " - "pool IN (SELECT id FROM pools WHERE name = ?) AND " - "address = ? AND released IS NULL", - DB_UINT, time(NULL), - DB_TEXT, name, DB_BLOB, address->get_address(address)) > 0) + enumerator_t *enumerator; + + enumerator = enumerator_create_token(name, ",", " "); + while (enumerator->enumerate(enumerator, &name)) { - return TRUE; + if (this->db->execute(this->db, NULL, + "UPDATE leases SET released = ? WHERE " + "pool IN (SELECT id FROM pools WHERE name = ?) AND " + "address = ? AND released IS NULL", + DB_UINT, time(NULL), + DB_TEXT, name, DB_BLOB, address->get_address(address)) > 0) + { + enumerator->destroy(enumerator); + return TRUE; + } } + enumerator->destroy(enumerator); return FALSE; } -- cgit v1.2.3