aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/charon/plugins/sql/pool.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/charon/plugins/sql/pool.c b/src/charon/plugins/sql/pool.c
index c3d202a22..b3ad72ab2 100644
--- a/src/charon/plugins/sql/pool.c
+++ b/src/charon/plugins/sql/pool.c
@@ -87,9 +87,8 @@ Usage:\n\
name: Name of the pool to resize\n\
end: New end address for the pool\n\
\n\
- ipsec pool --leases <name> [--filter <filter>] [--utc]\n\
+ ipsec pool --leases [--filter <filter>] [--utc]\n\
Show lease information using filters:\n\
- name: Name of the pool to show leases from\n\
filter: Filter string containing comma separated key=value filters,\n\
e.g. id=alice@strongswan.org,addr=1.1.1.1\n\
pool: name of the pool\n\
@@ -128,8 +127,8 @@ static void status(void)
{
if (!found)
{
- printf("%8s %15s %15s %8s %6s %11s %11s\n",
- "name", "start", "end", "timeout", "size", "online", "leases");
+ printf("%8s %15s %15s %8s %6s %11s %11s\n", "name", "start",
+ "end", "timeout", "size", "online", "usage");
found = TRUE;
}
@@ -157,11 +156,12 @@ static void status(void)
}
printf("%5d (%2d%%) ", online, online*100/size);
/* get number of online or valid lieases */
- lease = db->query(db, "SELECT COUNT(*) FROM addresses JOIN pools "
- "ON addresses.pool = pools.id "
- "WHERE pools.id = ? "
- "AND (released = 0 OR released > ? - timeout) ",
- DB_UINT, id, DB_UINT, time(NULL), DB_UINT);
+ lease = db->query(db, "SELECT COUNT(*) FROM addresses "
+ "WHERE addresses.pool = ? "
+ "AND ((? AND acquired != 0) "
+ " OR released = 0 OR released > ?) ",
+ DB_UINT, id, DB_UINT, !timeout,
+ DB_UINT, time(NULL) - timeout, DB_UINT);
if (lease)
{
lease->enumerate(lease, &used);
@@ -232,15 +232,18 @@ static void add(char *name, host_t *start, host_t *end, int timeout)
{ /* run population in a transaction for sqlite */
db->execute(db, NULL, "BEGIN TRANSACTION");
}
- do
+ while (TRUE)
{
db->execute(db, NULL,
"INSERT INTO addresses (pool, address, identity, acquired, released) "
"VALUES (?, ?, ?, ?, ?)",
DB_UINT, id, DB_BLOB, cur_addr, DB_UINT, 0, DB_UINT, 0, DB_UINT, 1);
+ if (chunk_equals(cur_addr, end_addr))
+ {
+ break;
+ }
increment_chunk(cur_addr);
}
- while (!chunk_equals(cur_addr, end_addr));
if (db->get_driver(db) == DB_SQLITE)
{
db->execute(db, NULL, "END TRANSACTION");