aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/plugins')
-rw-r--r--src/charon/plugins/stroke/stroke_attribute.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/charon/plugins/stroke/stroke_attribute.c b/src/charon/plugins/stroke/stroke_attribute.c
index 666d948d6..7996fb349 100644
--- a/src/charon/plugins/stroke/stroke_attribute.c
+++ b/src/charon/plugins/stroke/stroke_attribute.c
@@ -194,7 +194,7 @@ static host_t* acquire_address(private_stroke_attribute_t *this,
auth_info_t *auth, host_t *requested)
{
pool_t *pool;
- uintptr_t offset;
+ uintptr_t offset = 0;
enumerator_t *enumerator;
identification_t *old_id;
@@ -202,6 +202,13 @@ static host_t* acquire_address(private_stroke_attribute_t *this,
pool = find_pool(this, name);
while (pool)
{
+ /* handle %config case by mirroring requested address */
+ if (pool->size == 0)
+ {
+ this->mutex->unlock(this->mutex);
+ return requested->clone(requested);
+ }
+
/* check for a valid offline lease, refresh */
offset = (uintptr_t)pool->offline->remove(pool->offline, id);
if (offset)
@@ -291,7 +298,7 @@ static bool release_address(private_stroke_attribute_t *this,
id = pool->ids->get(pool->ids, id);
if (id)
{
- DBG1(DBG_CFG, "lease %H of %D gone offline", address, id);
+ DBG1(DBG_CFG, "lease %H to %D went offline", address, id);
pool->offline->put(pool->offline, id, (void*)offset);
}
}