summaryrefslogtreecommitdiff
path: root/src/pool
diff options
context:
space:
mode:
authorYves-Alexis Perez <corsac@corsac.net>2017-11-21 10:22:31 +0100
committerYves-Alexis Perez <corsac@corsac.net>2017-11-21 10:22:31 +0100
commite1d78dc2faaa06e7c3f71ef674a71e4de2f0758e (patch)
treeae0c8b5f4cd8289d0797882ea18969f33ea59a1e /src/pool
parent11d6b62db969bdd808d0f56706cb18f113927a31 (diff)
downloadvyos-strongswan-e1d78dc2faaa06e7c3f71ef674a71e4de2f0758e.tar.gz
vyos-strongswan-e1d78dc2faaa06e7c3f71ef674a71e4de2f0758e.zip
New upstream version 5.6.1
Diffstat (limited to 'src/pool')
-rw-r--r--src/pool/Makefile.in2
-rw-r--r--src/pool/pool.c38
-rw-r--r--src/pool/pool_usage.c8
3 files changed, 33 insertions, 15 deletions
diff --git a/src/pool/Makefile.in b/src/pool/Makefile.in
index 1da001d09..e6815434f 100644
--- a/src/pool/Makefile.in
+++ b/src/pool/Makefile.in
@@ -247,9 +247,11 @@ ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FUZZING_LDFLAGS = @FUZZING_LDFLAGS@
GEM = @GEM@
GENHTML = @GENHTML@
GPERF = @GPERF@
+GPERF_LEN_TYPE = @GPERF_LEN_TYPE@
GPRBUILD = @GPRBUILD@
GREP = @GREP@
INSTALL = @INSTALL@
diff --git a/src/pool/pool.c b/src/pool/pool.c
index cd9fb6293..b755365ec 100644
--- a/src/pool/pool.c
+++ b/src/pool/pool.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011-2016 Tobias Brunner
+ * Copyright (C) 2011-2017 Tobias Brunner
* Copyright (C) 2008 Martin Willi
* HSR Hochschule fuer Technik Rapperswil
*
@@ -56,28 +56,30 @@ static void do_args(int argc, char *argv[]);
/**
* Create or replace a pool by name
*/
-static u_int create_pool(char *name, chunk_t start, chunk_t end, int timeout)
+static u_int create_pool(char *name, chunk_t start, chunk_t end, u_int timeout)
{
enumerator_t *e;
int pool;
+ bool exists;
e = db->query(db, "SELECT id FROM pools WHERE name = ?",
DB_TEXT, name, DB_UINT);
- if (e && e->enumerate(e, &pool))
+ exists = e && e->enumerate(e, &pool);
+ DESTROY_IF(e);
+
+ if (exists)
{
- if (replace_pool == FALSE)
+ if (!replace_pool)
{
fprintf(stderr, "pool '%s' exists.\n", name);
- e->destroy(e);
exit(EXIT_FAILURE);
}
del(name);
}
- DESTROY_IF(e);
if (db->execute(db, &pool,
"INSERT INTO pools (name, start, end, timeout) VALUES (?, ?, ?, ?)",
DB_TEXT, name, DB_BLOB, start, DB_BLOB, end,
- DB_INT, timeout*3600) != 1)
+ DB_UINT, timeout) != 1)
{
fprintf(stderr, "creating pool failed.\n");
exit(EXIT_FAILURE);
@@ -258,7 +260,18 @@ static void status(void)
}
if (timeout)
{
- printf("%7dh ", timeout/3600);
+ if (timeout >= 60 * 300)
+ {
+ printf("%7dh ", timeout/3600);
+ }
+ else if (timeout >= 300)
+ {
+ printf("%7dm ", timeout/60);
+ }
+ else
+ {
+ printf("%7ds ", timeout);
+ }
}
else
{
@@ -318,7 +331,7 @@ next_pool:
/**
* ipsec pool --add - add a new pool
*/
-static void add(char *name, host_t *start, host_t *end, int timeout)
+static void add(char *name, host_t *start, host_t *end, u_int timeout)
{
chunk_t start_addr, end_addr, cur_addr;
u_int id, count;
@@ -407,7 +420,7 @@ static bool add_address(u_int pool_id, char *address_str, int *family)
return TRUE;
}
-static void add_addresses(char *pool, char *path, int timeout)
+static void add_addresses(char *pool, char *path, u_int timeout)
{
u_int pool_id, count = 0;
int family = AF_UNSPEC;
@@ -941,7 +954,7 @@ static void do_args(int argc, char *argv[])
char *name = "", *value = "", *filter = "";
char *pool = NULL, *identity = NULL, *addresses = NULL;
value_type_t value_type = VALUE_NONE;
- int timeout = 0;
+ time_t timeout = 0;
bool utc = FALSE, hexout = FALSE;
enum {
@@ -1088,8 +1101,7 @@ static void do_args(int argc, char *argv[])
}
continue;
case 't':
- timeout = atoi(optarg);
- if (timeout == 0 && strcmp(optarg, "0") != 0)
+ if (!timespan_from_string(optarg, "h", &timeout))
{
fprintf(stderr, "invalid timeout '%s'.\n", optarg);
usage();
diff --git a/src/pool/pool_usage.c b/src/pool/pool_usage.c
index 7622cfa86..94cc041b5 100644
--- a/src/pool/pool_usage.c
+++ b/src/pool/pool_usage.c
@@ -44,7 +44,9 @@ Usage:\n\
name: Name of the pool, as used in ipsec.conf rightsourceip=%%name\n\
start: Start address of the pool\n\
end: End address of the pool\n\
- timeout: Lease time in hours, 0 for static leases\n\
+ timeout: Lease time in hours (use 'd', 'm', or 's' to alternatively\n\
+ configure the time in days, minutes or seconds, respectively),\n\
+ 0 for static leases\n\
\n\
ipsec pool --add <name> --addresses <file> [--timeout <timeout>]\n\
ipsec pool --replace <name> --addresses <file> [--timeout <timeout>]\n\
@@ -57,7 +59,9 @@ Usage:\n\
are read from STDIN. Reading addresses stops at the end of file\n\
or an empty line. Pools created with this command can not be\n\
resized.\n\
- timeout: Lease time in hours, 0 for static leases\n\
+ timeout: Lease time in hours (use 'd', 'm', or 's' to alternatively\n\
+ configure the time in days, minutes or seconds, respectively),\n\
+ 0 for static leases\n\
\n\
ipsec pool --addattr <type> [--pool <name> [--identity <id>]]\n\
--addr|--mask|--server|--subnet|--string|--hex <value>\n\