ipsec pool --statusattr [--hexout] outputs attribute values in correct format if known
This commit is contained in:
@@ -946,7 +946,7 @@ static void do_args(int argc, char *argv[])
|
|||||||
char *name = "", *value = "", *filter = "", *addresses = NULL;
|
char *name = "", *value = "", *filter = "", *addresses = NULL;
|
||||||
value_type_t value_type = VALUE_NONE;
|
value_type_t value_type = VALUE_NONE;
|
||||||
int timeout = 0;
|
int timeout = 0;
|
||||||
bool utc = FALSE;
|
bool utc = FALSE, hexout = FALSE;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
OP_UNDEF,
|
OP_UNDEF,
|
||||||
@@ -993,10 +993,13 @@ static void do_args(int argc, char *argv[])
|
|||||||
{ "addresses", required_argument, NULL, 'y' },
|
{ "addresses", required_argument, NULL, 'y' },
|
||||||
{ "timeout", required_argument, NULL, 't' },
|
{ "timeout", required_argument, NULL, 't' },
|
||||||
{ "filter", required_argument, NULL, 'f' },
|
{ "filter", required_argument, NULL, 'f' },
|
||||||
|
{ "addr", required_argument, NULL, 'v' },
|
||||||
|
{ "mask", required_argument, NULL, 'v' },
|
||||||
{ "server", required_argument, NULL, 'v' },
|
{ "server", required_argument, NULL, 'v' },
|
||||||
{ "subnet", required_argument, NULL, 'n' },
|
{ "subnet", required_argument, NULL, 'n' },
|
||||||
{ "string", required_argument, NULL, 'g' },
|
{ "string", required_argument, NULL, 'g' },
|
||||||
{ "hex", required_argument, NULL, 'x' },
|
{ "hex", required_argument, NULL, 'x' },
|
||||||
|
{ "hexout", no_argument, NULL, '5' },
|
||||||
{ 0,0,0,0 }
|
{ 0,0,0,0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1116,6 +1119,9 @@ static void do_args(int argc, char *argv[])
|
|||||||
value_type = VALUE_HEX;
|
value_type = VALUE_HEX;
|
||||||
value = optarg;
|
value = optarg;
|
||||||
continue;
|
continue;
|
||||||
|
case '5':
|
||||||
|
hexout = TRUE;
|
||||||
|
continue;
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@@ -1133,7 +1139,7 @@ static void do_args(int argc, char *argv[])
|
|||||||
status();
|
status();
|
||||||
break;
|
break;
|
||||||
case OP_STATUS_ATTR:
|
case OP_STATUS_ATTR:
|
||||||
status_attr();
|
status_attr(hexout);
|
||||||
break;
|
break;
|
||||||
case OP_ADD:
|
case OP_ADD:
|
||||||
if (addresses != NULL)
|
if (addresses != NULL)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ extern database_t *db;
|
|||||||
ENUM(value_type_names, VALUE_HEX, VALUE_SUBNET,
|
ENUM(value_type_names, VALUE_HEX, VALUE_SUBNET,
|
||||||
"hex",
|
"hex",
|
||||||
"string",
|
"string",
|
||||||
"server",
|
"addr",
|
||||||
"subnet"
|
"subnet"
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -46,32 +46,36 @@ struct attr_info_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const attr_info_t attr_info[] = {
|
static const attr_info_t attr_info[] = {
|
||||||
{ "internal_ip4_dns", VALUE_ADDR, INTERNAL_IP4_DNS, 0 },
|
{ "internal_ip4_dns", VALUE_ADDR, INTERNAL_IP4_DNS, 0 },
|
||||||
{ "internal_ip6_dns", VALUE_ADDR, INTERNAL_IP6_DNS, 0 },
|
{ "internal_ip6_dns", VALUE_ADDR, INTERNAL_IP6_DNS, 0 },
|
||||||
{ "dns", VALUE_ADDR, INTERNAL_IP4_DNS,
|
{ "dns", VALUE_ADDR, INTERNAL_IP4_DNS,
|
||||||
INTERNAL_IP6_DNS },
|
INTERNAL_IP6_DNS },
|
||||||
{ "internal_ip4_nbns", VALUE_ADDR, INTERNAL_IP4_NBNS, 0 },
|
{ "internal_ip4_netmask", VALUE_ADDR, INTERNAL_IP4_NETMASK, 0 },
|
||||||
{ "internal_ip6_nbns", VALUE_ADDR, INTERNAL_IP6_NBNS, 0 },
|
{ "internal_ip6_netmask", VALUE_ADDR, INTERNAL_IP6_NETMASK, 0 },
|
||||||
{ "nbns", VALUE_ADDR, INTERNAL_IP4_NBNS,
|
{ "netmask", VALUE_ADDR, INTERNAL_IP4_NETMASK,
|
||||||
INTERNAL_IP6_NBNS },
|
INTERNAL_IP6_NETMASK },
|
||||||
{ "wins", VALUE_ADDR, INTERNAL_IP4_NBNS,
|
{ "internal_ip4_nbns", VALUE_ADDR, INTERNAL_IP4_NBNS, 0 },
|
||||||
INTERNAL_IP6_NBNS },
|
{ "internal_ip6_nbns", VALUE_ADDR, INTERNAL_IP6_NBNS, 0 },
|
||||||
{ "internal_ip4_dhcp", VALUE_ADDR, INTERNAL_IP4_DHCP, 0 },
|
{ "nbns", VALUE_ADDR, INTERNAL_IP4_NBNS,
|
||||||
{ "internal_ip6_dhcp", VALUE_ADDR, INTERNAL_IP6_DHCP, 0 },
|
INTERNAL_IP6_NBNS },
|
||||||
{ "dhcp", VALUE_ADDR, INTERNAL_IP4_DHCP,
|
{ "wins", VALUE_ADDR, INTERNAL_IP4_NBNS,
|
||||||
INTERNAL_IP6_DHCP },
|
INTERNAL_IP6_NBNS },
|
||||||
{ "internal_ip4_server", VALUE_ADDR, INTERNAL_IP4_SERVER, 0 },
|
{ "internal_ip4_dhcp", VALUE_ADDR, INTERNAL_IP4_DHCP, 0 },
|
||||||
{ "internal_ip6_server", VALUE_ADDR, INTERNAL_IP6_SERVER, 0 },
|
{ "internal_ip6_dhcp", VALUE_ADDR, INTERNAL_IP6_DHCP, 0 },
|
||||||
{ "server", VALUE_ADDR, INTERNAL_IP4_SERVER,
|
{ "dhcp", VALUE_ADDR, INTERNAL_IP4_DHCP,
|
||||||
INTERNAL_IP6_SERVER },
|
INTERNAL_IP6_DHCP },
|
||||||
{ "application_version", VALUE_STRING, APPLICATION_VERSION, 0 },
|
{ "internal_ip4_server", VALUE_ADDR, INTERNAL_IP4_SERVER, 0 },
|
||||||
{ "version", VALUE_STRING, APPLICATION_VERSION, 0 },
|
{ "internal_ip6_server", VALUE_ADDR, INTERNAL_IP6_SERVER, 0 },
|
||||||
{ "unity_banner", VALUE_STRING, UNITY_BANNER, 0 },
|
{ "server", VALUE_ADDR, INTERNAL_IP4_SERVER,
|
||||||
{ "banner", VALUE_STRING, UNITY_BANNER, 0 },
|
INTERNAL_IP6_SERVER },
|
||||||
{ "unity_def_domain", VALUE_STRING, UNITY_DEF_DOMAIN, 0 },
|
{ "application_version", VALUE_STRING, APPLICATION_VERSION, 0 },
|
||||||
{ "unity_splitdns_name", VALUE_STRING, UNITY_SPLITDNS_NAME, 0 },
|
{ "version", VALUE_STRING, APPLICATION_VERSION, 0 },
|
||||||
{ "unity_split_include", VALUE_SUBNET, UNITY_SPLIT_INCLUDE, 0 },
|
{ "unity_banner", VALUE_STRING, UNITY_BANNER, 0 },
|
||||||
{ "unity_local_lan", VALUE_SUBNET, UNITY_LOCAL_LAN, 0 },
|
{ "banner", VALUE_STRING, UNITY_BANNER, 0 },
|
||||||
|
{ "unity_def_domain", VALUE_STRING, UNITY_DEF_DOMAIN, 0 },
|
||||||
|
{ "unity_splitdns_name", VALUE_STRING, UNITY_SPLITDNS_NAME, 0 },
|
||||||
|
{ "unity_split_include", VALUE_SUBNET, UNITY_SPLIT_INCLUDE, 0 },
|
||||||
|
{ "unity_local_lan", VALUE_SUBNET, UNITY_LOCAL_LAN, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -453,13 +457,16 @@ void del_attr(char *name, char *value, value_type_t value_type)
|
|||||||
/**
|
/**
|
||||||
* ipsec pool --statusattr - show all attribute entries
|
* ipsec pool --statusattr - show all attribute entries
|
||||||
*/
|
*/
|
||||||
void status_attr(void)
|
void status_attr(bool hexout)
|
||||||
{
|
{
|
||||||
configuration_attribute_type_t type;
|
configuration_attribute_type_t type;
|
||||||
chunk_t value;
|
value_type_t value_type;
|
||||||
|
chunk_t value, addr_chunk, mask_chunk;
|
||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
|
host_t *addr, *mask;
|
||||||
char type_name[30];
|
char type_name[30];
|
||||||
bool first = TRUE;
|
bool first = TRUE;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* enumerate over all attributes */
|
/* enumerate over all attributes */
|
||||||
enumerator = db->query(db, "SELECT type, value FROM attributes ORDER BY type",
|
enumerator = db->query(db, "SELECT type, value FROM attributes ORDER BY type",
|
||||||
@@ -470,7 +477,7 @@ void status_attr(void)
|
|||||||
{
|
{
|
||||||
if (first)
|
if (first)
|
||||||
{
|
{
|
||||||
printf(" type description value\n");
|
printf(" type description value\n");
|
||||||
first = FALSE;
|
first = FALSE;
|
||||||
}
|
}
|
||||||
snprintf(type_name, sizeof(type_name), "%N",
|
snprintf(type_name, sizeof(type_name), "%N",
|
||||||
@@ -479,7 +486,63 @@ void status_attr(void)
|
|||||||
{
|
{
|
||||||
type_name[0] = '\0';
|
type_name[0] = '\0';
|
||||||
}
|
}
|
||||||
printf("%5d %-20s %#B\n",type, type_name, &value);
|
printf("%5d %-20s ",type, type_name);
|
||||||
|
|
||||||
|
value_type = VALUE_HEX;
|
||||||
|
if (!hexout)
|
||||||
|
{
|
||||||
|
for (i = 0; i < countof(attr_info); i++)
|
||||||
|
{
|
||||||
|
if (type == attr_info[i].type)
|
||||||
|
{
|
||||||
|
value_type = attr_info[i].value_type;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (value_type)
|
||||||
|
{
|
||||||
|
case VALUE_ADDR:
|
||||||
|
addr = host_create_from_chunk(AF_UNSPEC, value, 0);
|
||||||
|
if (addr)
|
||||||
|
{
|
||||||
|
printf(" %H\n", addr);
|
||||||
|
addr->destroy(addr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* value cannot be represented as an IP address */
|
||||||
|
printf(" %#B\n", &value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case VALUE_SUBNET:
|
||||||
|
if (value.len % UNITY_NETWORK_LEN == 0)
|
||||||
|
{
|
||||||
|
for (i = 0; i < value.len / UNITY_NETWORK_LEN; i++)
|
||||||
|
{
|
||||||
|
addr_chunk = chunk_create(value.ptr + i*UNITY_NETWORK_LEN, 4);
|
||||||
|
addr = host_create_from_chunk(AF_INET, addr_chunk, 0);
|
||||||
|
mask_chunk = chunk_create(addr_chunk.ptr + 4, 4);
|
||||||
|
mask = host_create_from_chunk(AF_INET, mask_chunk, 0);
|
||||||
|
printf("%s%H/%H", (i > 0) ? "," : " ", addr, mask);
|
||||||
|
addr->destroy(addr);
|
||||||
|
mask->destroy(mask);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* value cannot be represented as a list of subnets */
|
||||||
|
printf(" %#B\n", &value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case VALUE_STRING:
|
||||||
|
printf("\"%.*s\"\n", value.len, value.ptr);
|
||||||
|
break;
|
||||||
|
case VALUE_HEX:
|
||||||
|
default:
|
||||||
|
printf(" %#B\n", &value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
enumerator->destroy(enumerator);
|
enumerator->destroy(enumerator);
|
||||||
}
|
}
|
||||||
@@ -500,7 +563,7 @@ void show_attr(void)
|
|||||||
snprintf(value_name, sizeof(value_name), "%N",
|
snprintf(value_name, sizeof(value_name), "%N",
|
||||||
value_type_names, attr_info[i].value_type);
|
value_type_names, attr_info[i].value_type);
|
||||||
|
|
||||||
printf("%-19s --%-6s (%N",
|
printf("%-20s --%-6s (%N",
|
||||||
attr_info[i].keyword, value_name,
|
attr_info[i].keyword, value_name,
|
||||||
configuration_attribute_type_names, attr_info[i].type);
|
configuration_attribute_type_names, attr_info[i].type);
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ void del_attr(char *name, char *value, value_type_t value_type);
|
|||||||
/**
|
/**
|
||||||
* ipsec pool --statusattr - show all attribute entries
|
* ipsec pool --statusattr - show all attribute entries
|
||||||
*/
|
*/
|
||||||
void status_attr(void);
|
void status_attr(bool hexout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ipsec pool --showattr - show all supported attribute keywords
|
* ipsec pool --showattr - show all supported attribute keywords
|
||||||
|
|||||||
@@ -29,8 +29,11 @@ Usage:\n\
|
|||||||
ipsec pool --status\n\
|
ipsec pool --status\n\
|
||||||
Show a list of installed pools with statistics plus nameserver info.\n\
|
Show a list of installed pools with statistics plus nameserver info.\n\
|
||||||
\n\
|
\n\
|
||||||
ipsec pool --statusattr\n\
|
ipsec pool --statusattr [--hexout]\n\
|
||||||
Show a list of all attributes stored in the database.\n\
|
Show a list of all attributes stored in the database with the values\n\
|
||||||
|
converted to the correct format if the type is known by --showattr or\n\
|
||||||
|
in hex format otherwise.\n\
|
||||||
|
hexout: Output all values in hex format\n\
|
||||||
\n\
|
\n\
|
||||||
ipsec pool --showattr\n\
|
ipsec pool --showattr\n\
|
||||||
Show a keyword list of the major attribute types.\n\
|
Show a keyword list of the major attribute types.\n\
|
||||||
@@ -56,10 +59,12 @@ Usage:\n\
|
|||||||
resized.\n\
|
resized.\n\
|
||||||
timeout: Lease time in hours, 0 for static leases\n\
|
timeout: Lease time in hours, 0 for static leases\n\
|
||||||
\n\
|
\n\
|
||||||
ipsec pool --addattr <type> --server|--subnet|--string|--hex <value>\n\
|
ipsec pool --addattr <type> --addr|--mask|--server|--subnet|--string|--hex <value>\n\
|
||||||
Add a new attribute to the database.\n\
|
Add a new attribute to the database.\n\
|
||||||
type: a keyword from --showattr or a number from the range 1..32767\n\
|
type: a keyword from --showattr or a number from the range 1..32767\n\
|
||||||
server: IPv4 or IPv6 address of a server\n\
|
addr: IPv4 or IPv6 address\n\
|
||||||
|
mask: IPv4 or IPv6 netmask (synonym for --addr)\n\
|
||||||
|
server: IPv4 or IPv6 address of a server (synonym for --addr)\n\
|
||||||
subnet: IPv4 subnet[s] given by network/mask[,network/mask,...]\n\
|
subnet: IPv4 subnet[s] given by network/mask[,network/mask,...]\n\
|
||||||
string: value of a string-type attribute\n\
|
string: value of a string-type attribute\n\
|
||||||
hex: hex value of any attribute\n\
|
hex: hex value of any attribute\n\
|
||||||
@@ -68,10 +73,12 @@ Usage:\n\
|
|||||||
Delete a pool from the database.\n\
|
Delete a pool from the database.\n\
|
||||||
name: Name of the pool to delete\n\
|
name: Name of the pool to delete\n\
|
||||||
\n\
|
\n\
|
||||||
ipsec pool --delattr <type> [--server|--subnet|--string|--hex <value>]\n\
|
ipsec pool --delattr <type> [--addr|--mask|--server|--subnet|--string|--hex <value>]\n\
|
||||||
Delete a specific or all attributes of a given type from the database.\n\
|
Delete a specific or all attributes of a given type from the database.\n\
|
||||||
type: a keyword from --showattr or a number from the range 1..32767\n\
|
type: a keyword from --showattr or a number from the range 1..32767\n\
|
||||||
server: IPv4 or IPv6 address of a server\n\
|
addr: IPv4 or IPv6 address\n\
|
||||||
|
mask: IPv4 or IPv6 netmask (synonym for --addr)\n\
|
||||||
|
server: IPv4 or IPv6 address of a server (synonym for --addr)\n\
|
||||||
subnet: IPv4 subnet[s] given by network/mask[,network/mask,...]\n\
|
subnet: IPv4 subnet[s] given by network/mask[,network/mask,...]\n\
|
||||||
string: value of a string-type attribute\n\
|
string: value of a string-type attribute\n\
|
||||||
hex: hex value of any attribute\n\
|
hex: hex value of any attribute\n\
|
||||||
|
|||||||
Reference in New Issue
Block a user