fixed configuration attribute type determination

This commit is contained in:
Andreas Steffen
2010-06-02 11:52:17 +02:00
parent 2f57e6da0e
commit c77f4b305e
+15 -22
View File
@@ -46,14 +46,14 @@ 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_ip6_dns", VALUE_ADDR, INTERNAL_IP6_DNS, 0 },
{ "dns", VALUE_ADDR, INTERNAL_IP4_DNS,
INTERNAL_IP6_DNS },
{ "internal_ip4_netmask", VALUE_ADDR, INTERNAL_IP4_NETMASK, 0 }, { "internal_ip4_netmask", VALUE_ADDR, INTERNAL_IP4_NETMASK, 0 },
{ "internal_ip6_netmask", VALUE_ADDR, INTERNAL_IP6_NETMASK, 0 }, { "internal_ip6_netmask", VALUE_ADDR, INTERNAL_IP6_NETMASK, 0 },
{ "netmask", VALUE_ADDR, INTERNAL_IP4_NETMASK, { "netmask", VALUE_ADDR, INTERNAL_IP4_NETMASK,
INTERNAL_IP6_NETMASK }, INTERNAL_IP6_NETMASK },
{ "internal_ip4_dns", VALUE_ADDR, INTERNAL_IP4_DNS, 0 },
{ "internal_ip6_dns", VALUE_ADDR, INTERNAL_IP6_DNS, 0 },
{ "dns", VALUE_ADDR, INTERNAL_IP4_DNS,
INTERNAL_IP6_DNS },
{ "internal_ip4_nbns", VALUE_ADDR, INTERNAL_IP4_NBNS, 0 }, { "internal_ip4_nbns", VALUE_ADDR, INTERNAL_IP4_NBNS, 0 },
{ "internal_ip6_nbns", VALUE_ADDR, INTERNAL_IP6_NBNS, 0 }, { "internal_ip6_nbns", VALUE_ADDR, INTERNAL_IP6_NBNS, 0 },
{ "nbns", VALUE_ADDR, INTERNAL_IP4_NBNS, { "nbns", VALUE_ADDR, INTERNAL_IP4_NBNS,
@@ -172,13 +172,15 @@ static bool parse_attributes(char *name, char *value, value_type_t *value_type,
{ {
if (strcaseeq(name, attr_info[i].keyword)) if (strcaseeq(name, attr_info[i].keyword))
{ {
*type = attr_info[i].type;
*type_ip6 = attr_info[i].type_ip6;
if (*value_type == VALUE_NONE) if (*value_type == VALUE_NONE)
{ {
*value_type = attr_info[i].value_type; *value_type = attr_info[i].value_type;
*type = attr_info[i].type;
*type_ip6 = attr_info[i].type_ip6;
return TRUE; return TRUE;
} }
if (*value_type != attr_info[i].value_type && if (*value_type != attr_info[i].value_type &&
*value_type != VALUE_HEX) *value_type != VALUE_HEX)
{ {
@@ -206,27 +208,24 @@ static bool parse_attributes(char *name, char *value, value_type_t *value_type,
free(blob->ptr); free(blob->ptr);
return FALSE; return FALSE;
} }
if (*value_type == VALUE_ADDR) if (*value_type == VALUE_ADDR)
{ {
*type = (addr->get_family(addr) == AF_INET) ? *type = (addr->get_family(addr) == AF_INET) ?
attr_info[i].type : attr_info[i].type_ip6; attr_info[i].type : attr_info[i].type_ip6;
addr->destroy(addr); addr->destroy(addr);
} }
if (*value_type == VALUE_HEX) else if (*value_type == VALUE_HEX)
{ {
*value_type = attr_info[i].value_type; *value_type = attr_info[i].value_type;
if (*value_type == VALUE_ADDR) if (*value_type == VALUE_ADDR)
{ {
if (blob->len == 4) if (blob->len == 16)
{
*type = attr_info[i].type;
}
else if (blob->len == 16)
{ {
*type = attr_info[i].type_ip6; *type = attr_info[i].type_ip6;
} }
else else if (blob->len != 4)
{ {
fprintf(stderr, "the %s attribute requires " fprintf(stderr, "the %s attribute requires "
"a valid IP address.\n", name); "a valid IP address.\n", name);
@@ -234,14 +233,6 @@ static bool parse_attributes(char *name, char *value, value_type_t *value_type,
return FALSE; return FALSE;
} }
} }
else
{
*type = attr_info[i].type;
}
}
else
{
*type = attr_info[i].type;
} }
return TRUE; return TRUE;
} }
@@ -291,6 +282,7 @@ void add_attr(char *name, char *value, value_type_t value_type)
{ {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
success = db->execute(db, NULL, success = db->execute(db, NULL,
"INSERT INTO attributes (type, value) VALUES (?, ?)", "INSERT INTO attributes (type, value) VALUES (?, ?)",
DB_INT, type, DB_BLOB, blob) == 1; DB_INT, type, DB_BLOB, blob) == 1;
@@ -324,6 +316,7 @@ void del_attr(char *name, char *value, value_type_t value_type)
{ {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (blob.len > 0) if (blob.len > 0)
{ {
query = db->query(db, query = db->query(db,
@@ -442,7 +435,7 @@ void del_attr(char *name, char *value, value_type_t value_type)
} }
else else
{ {
fprintf(stderr, "the %s attribute (%N) with value '%*.s' " fprintf(stderr, "the %s attribute (%N) with value '%.*s' "
"was not found.\n", name, "was not found.\n", name,
configuration_attribute_type_names, type, configuration_attribute_type_names, type,
blob.len, blob.ptr); blob.len, blob.ptr);