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