sql plugin supports a list of pools to fall back, specified by e.g. rightsourceip=%pool1,pool2

This commit is contained in:
Martin Willi
2008-07-02 08:31:48 +00:00
parent 11e855179e
commit d932435e18
+29 -10
View File
@@ -226,13 +226,24 @@ static host_t* acquire_address(private_sql_attribute_t *this,
char *name, identification_t *id, char *name, identification_t *id,
auth_info_t *auth, host_t *requested) auth_info_t *auth, host_t *requested)
{ {
host_t *ip; enumerator_t *enumerator;
host_t *ip = NULL;
ip = get_lease(this, name, id); enumerator = enumerator_create_token(name, ",", " ");
if (!ip) while (enumerator->enumerate(enumerator, &name))
{ {
ip = get_lease(this, name, id);
if (ip)
{
break;
}
ip = create_lease(this, name, id); ip = create_lease(this, name, id);
if (ip)
{
break;
}
} }
enumerator->destroy(enumerator);
return ip; 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, static bool release_address(private_sql_attribute_t *this,
char *name, host_t *address) char *name, host_t *address)
{ {
if (this->db->execute(this->db, NULL, enumerator_t *enumerator;
"UPDATE leases SET released = ? WHERE "
"pool IN (SELECT id FROM pools WHERE name = ?) AND " enumerator = enumerator_create_token(name, ",", " ");
"address = ? AND released IS NULL", while (enumerator->enumerate(enumerator, &name))
DB_UINT, time(NULL),
DB_TEXT, name, DB_BLOB, address->get_address(address)) > 0)
{ {
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; return FALSE;
} }