sql plugin supports a list of pools to fall back, specified by e.g. rightsourceip=%pool1,pool2
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user