ipsec pool error return status

Fix the error return status of the ipsec pool command. Also make --del for
attributes succeed if no --server option was given.

Signed-off-by: Heiko Hund <hhund@astaro.com>
This commit is contained in:
Heiko Hund 2010-03-16 21:11:51 +01:00 committed by Martin Willi
parent ef9f69a2b9
commit a90ed06f8a
1 changed files with 51 additions and 49 deletions

View File

@ -63,7 +63,7 @@ static u_int create_pool(char *name, chunk_t start, chunk_t end, int timeout)
{
fprintf(stderr, "pool '%s' exists.\n", name);
e->destroy(e);
exit(-1);
exit(EXIT_FAILURE);
}
del(name);
}
@ -74,7 +74,7 @@ static u_int create_pool(char *name, chunk_t start, chunk_t end, int timeout)
DB_INT, timeout*3600) != 1)
{
fprintf(stderr, "creating pool failed.\n");
exit(-1);
exit(EXIT_FAILURE);
}
return pool;
@ -187,7 +187,6 @@ Usage:\n\
Delete lease history of a pool:\n\
name: Name of the pool to purge\n\
\n");
exit(0);
}
/**
@ -386,7 +385,6 @@ static void status(void)
{
printf("no pools found.\n");
}
exit(0);
}
/**
@ -406,7 +404,7 @@ static void add(char *name, host_t *start, host_t *end, int timeout)
memcmp(start_addr.ptr, end_addr.ptr, start_addr.len) > 0)
{
fprintf(stderr, "invalid start/end pair specified.\n");
exit(-1);
exit(EXIT_FAILURE);
}
id = create_pool(name, start_addr, end_addr, timeout);
printf("allocating %d addresses... ", count);
@ -432,8 +430,6 @@ static void add(char *name, host_t *start, host_t *end, int timeout)
db->execute(db, NULL, "END TRANSACTION");
}
printf("done.\n", count);
exit(0);
}
static bool add_address(u_int pool_id, char *address_str, int *family)
@ -540,7 +536,7 @@ static void add_addresses(char *pool, char *path, int timeout)
}
if (add_address(pool_id, address_str, &family) == FALSE)
{
exit(-1);
exit(EXIT_FAILURE);
}
++count;
}
@ -556,7 +552,6 @@ static void add_addresses(char *pool, char *path, int timeout)
}
printf("%d addresses done.\n", count);
exit(0);
}
/**
@ -574,10 +569,9 @@ static void add_attr(char *name, host_t *server)
DB_INT, type, DB_BLOB, value) != 1)
{
fprintf(stderr, "adding %s server %H failed.\n", name, server);
exit(-1);
exit(EXIT_FAILURE);
}
printf("added %s server %H\n", name, server);
exit(0);
}
/**
@ -594,7 +588,7 @@ static void del(char *name)
if (!query)
{
fprintf(stderr, "deleting pool failed.\n");
exit(-1);
exit(EXIT_FAILURE);
}
while (query->enumerate(query, &id))
{
@ -609,16 +603,15 @@ static void del(char *name)
{
fprintf(stderr, "deleting pool failed.\n");
query->destroy(query);
exit(-1);
exit(EXIT_FAILURE);
}
}
query->destroy(query);
if (!found)
{
fprintf(stderr, "pool '%s' not found.\n", name);
exit(-1);
exit(EXIT_FAILURE);
}
exit(0);
}
/**
@ -666,7 +659,7 @@ static void del_attr(char *name, host_t *server)
if (!query)
{
fprintf(stderr, "deleting %s servers failed.\n", name);
exit(-1);
exit(EXIT_FAILURE);
}
while (query->enumerate(query, &id, &type, &value))
@ -685,19 +678,22 @@ static void del_attr(char *name, host_t *server)
fprintf(stderr, "deleting %s server %H failed\n", name, host);
query->destroy(query);
DESTROY_IF(host);
exit(-1);
exit(EXIT_FAILURE);
}
printf("deleted %s server %H\n", name, host);
DESTROY_IF(host);
}
query->destroy(query);
if (!found)
if (!found && server)
{
printf("no matching %s servers found\n", name);
exit(-1);
printf("%s server %H not found\n", name, server);
exit(EXIT_FAILURE);
}
else if (!found)
{
printf("no %s servers found\n", name);
}
exit(0);
}
/**
@ -706,7 +702,7 @@ static void del_attr(char *name, host_t *server)
DB_INT, type, DB_BLOB, value) != 1)
{
fprintf(stderr, "deleting %s server %H failed\n", name, server);
exit(-1);
exit(EXIT_FAILURE);
}
printf("deleted %s server %H\n", name, server);
if (db->execute(db, NULL,
@ -714,7 +710,7 @@ static void del_attr(char *name, host_t *server)
DB_INT, type, DB_BLOB, value) != 1)
{
fprintf(stderr, "deleting %s server %H failed\n", name, server);
exit(-1);
exit(EXIT_FAILURE);
}
printf("deleted %s server %H\n", name, server);
@ -734,14 +730,14 @@ static void resize(char *name, host_t *end)
{
DESTROY_IF(query);
fprintf(stderr, "resizing pool failed.\n");
exit(-1);
exit(EXIT_FAILURE);
}
if (old_addr.len != new_addr.len ||
memcmp(new_addr.ptr, old_addr.ptr, old_addr.len) < 0)
{
fprintf(stderr, "shrinking of pools not supported.\n");
query->destroy(query);
exit(-1);
exit(EXIT_FAILURE);
}
cur_addr = chunk_clonea(old_addr);
count = get_pool_size(old_addr, new_addr) - 1;
@ -753,7 +749,7 @@ static void resize(char *name, host_t *end)
{
fprintf(stderr, "pool is not resizable.\n");
old_end->destroy(old_end);
exit(-1);
exit(EXIT_FAILURE);
}
DESTROY_IF(old_end);
@ -762,7 +758,7 @@ static void resize(char *name, host_t *end)
DB_BLOB, new_addr, DB_TEXT, name) <= 0)
{
fprintf(stderr, "pool '%s' not found.\n", name);
exit(-1);
exit(EXIT_FAILURE);
}
printf("allocating %d new addresses... ", count);
@ -785,7 +781,6 @@ static void resize(char *name, host_t *end)
}
printf("done.\n", count);
exit(0);
}
/**
@ -851,7 +846,7 @@ static enumerator_t *create_lease_query(char *filter)
if (!addr)
{
fprintf(stderr, "invalid 'addr' in filter string.\n");
exit(-1);
exit(EXIT_FAILURE);
}
break;
case FIL_TSTAMP:
@ -882,13 +877,13 @@ static enumerator_t *create_lease_query(char *filter)
else
{
fprintf(stderr, "invalid 'state' in filter string.\n");
exit(-1);
exit(EXIT_FAILURE);
}
}
break;
default:
fprintf(stderr, "invalid filter string.\n");
exit(-1);
exit(EXIT_FAILURE);
break;
}
}
@ -957,7 +952,7 @@ static void leases(char *filter, bool utc)
if (!query)
{
fprintf(stderr, "querying leases failed.\n");
exit(-1);
exit(EXIT_FAILURE);
}
while (query->enumerate(query, &name, &address_chunk, &identity_type,
&identity_chunk, &db_acquired, &db_released, &db_timeout))
@ -1017,9 +1012,8 @@ static void leases(char *filter, bool utc)
if (!found)
{
fprintf(stderr, "no matching leases found.\n");
exit(-1);
exit(EXIT_FAILURE);
}
exit(0);
}
/**
@ -1037,10 +1031,9 @@ static void purge(char *name)
if (purged < 0)
{
fprintf(stderr, "purging pool '%s' failed.\n", name);
exit(-1);
exit(EXIT_FAILURE);
}
fprintf(stderr, "purged %d leases in pool '%s'.\n", purged, name);
exit(0);
}
/**
@ -1060,6 +1053,7 @@ int main(int argc, char *argv[])
int timeout = 0;
bool utc = FALSE;
enum {
OP_UNDEF,
OP_USAGE,
OP_STATUS,
OP_ADD,
@ -1069,7 +1063,7 @@ int main(int argc, char *argv[])
OP_RESIZE,
OP_LEASES,
OP_PURGE
} operation = OP_USAGE;
} operation = OP_UNDEF;
atexit(library_deinit);
@ -1135,6 +1129,7 @@ int main(int argc, char *argv[])
case EOF:
break;
case 'h':
operation = OP_USAGE;
break;
case 'w':
operation = OP_STATUS;
@ -1151,8 +1146,8 @@ int main(int argc, char *argv[])
if (replace_pool && operation == OP_ADD_ATTR)
{
fprintf(stderr, "invalid pool name: '%s'.\n", optarg);
operation = OP_USAGE;
break;
usage();
exit(EXIT_FAILURE);
}
continue;
case 'd':
@ -1175,8 +1170,8 @@ int main(int argc, char *argv[])
if (start == NULL)
{
fprintf(stderr, "invalid start address: '%s'.\n", optarg);
operation = OP_USAGE;
break;
usage();
exit(EXIT_FAILURE);
}
continue;
case 'e':
@ -1184,8 +1179,8 @@ int main(int argc, char *argv[])
if (end == NULL)
{
fprintf(stderr, "invalid end address: '%s'.\n", optarg);
operation = OP_USAGE;
break;
usage();
exit(EXIT_FAILURE);
}
continue;
case 't':
@ -1193,8 +1188,8 @@ int main(int argc, char *argv[])
if (timeout == 0 && strcmp(optarg, "0") != 0)
{
fprintf(stderr, "invalid timeout '%s'.\n", optarg);
operation = OP_USAGE;
break;
usage();
exit(EXIT_FAILURE);
}
continue;
case 'f':
@ -1208,12 +1203,13 @@ int main(int argc, char *argv[])
if (server == NULL)
{
fprintf(stderr, "invalid server address: '%s'.\n", optarg);
operation = OP_USAGE;
break;
usage();
exit(EXIT_FAILURE);
}
continue;
default:
operation = OP_USAGE;
usage();
exit(EXIT_FAILURE);
break;
}
break;
@ -1240,6 +1236,7 @@ int main(int argc, char *argv[])
{
fprintf(stderr, "missing arguments.\n");
usage();
exit(EXIT_FAILURE);
}
break;
case OP_ADD_ATTR:
@ -1247,6 +1244,7 @@ int main(int argc, char *argv[])
{
fprintf(stderr, "missing arguments.\n");
usage();
exit(EXIT_FAILURE);
}
add_attr(name, server);
break;
@ -1261,6 +1259,7 @@ int main(int argc, char *argv[])
{
fprintf(stderr, "missing arguments.\n");
usage();
exit(EXIT_FAILURE);
}
resize(name, end);
break;
@ -1270,7 +1269,10 @@ int main(int argc, char *argv[])
case OP_PURGE:
purge(name);
break;
default:
usage();
exit(EXIT_FAILURE);
}
exit(0);
exit(EXIT_SUCCESS);
}