chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
conf-parser: warn when we open configuration files with weird access bits
[elogind.git]
/
src
/
shared
/
net-util.c
diff --git
a/src/shared/net-util.c
b/src/shared/net-util.c
index 85278e5de618d2efc9de816b07a4d571288783ab..ba21ae437f3da968aae980c584a32c07a0ffca1c 100644
(file)
--- a/
src/shared/net-util.c
+++ b/
src/shared/net-util.c
@@
-49,7
+49,7
@@
bool net_match_config(const struct ether_addr *match_mac,
if (match_driver && !streq_ptr(match_driver, dev_driver))
return 0;
if (match_driver && !streq_ptr(match_driver, dev_driver))
return 0;
- if (match_type && !streq_ptr(match_type, dev_type)
&& !(streq(match_type, "ethernet") && !dev_type)
)
+ if (match_type && !streq_ptr(match_type, dev_type))
return 0;
if (match_name && !streq_ptr(match_name, dev_name))
return 0;
if (match_name && !streq_ptr(match_name, dev_name))
@@
-58,6
+58,12
@@
bool net_match_config(const struct ether_addr *match_mac,
return 1;
}
return 1;
}
+unsigned net_netmask_to_prefixlen(const struct in_addr *addr) {
+ assert(addr);
+
+ return 32 - u32ctz(be32toh(addr->s_addr));
+}
+
int config_parse_ifname(const char *unit,
const char *filename,
unsigned line,
int config_parse_ifname(const char *unit,
const char *filename,
unsigned line,
@@
-192,16
+198,24
@@
int net_parse_inaddr(const char *address, unsigned char *family, void *dst) {
/* IPv4 */
r = inet_pton(AF_INET, address, dst);
/* IPv4 */
r = inet_pton(AF_INET, address, dst);
- if (r > 0)
- *family = AF_INET; /* successfully parsed IPv4 address */
- else if (r < 0)
+ if (r > 0) {
+ /* succsefully parsed IPv4 address */
+ if (*family == AF_UNSPEC)
+ *family = AF_INET;
+ else if (*family != AF_INET)
+ return -EINVAL;
+ } else if (r < 0)
return -errno;
else {
/* not an IPv4 address, so let's try IPv6 */
r = inet_pton(AF_INET6, address, dst);
return -errno;
else {
/* not an IPv4 address, so let's try IPv6 */
r = inet_pton(AF_INET6, address, dst);
- if (r > 0)
- *family = AF_INET6; /* successfully parsed IPv6 address */
- else if (r < 0)
+ if (r > 0) {
+ /* successfully parsed IPv6 address */
+ if (*family == AF_UNSPEC)
+ *family = AF_INET6;
+ else if (*family != AF_INET6)
+ return -EINVAL;
+ } else if (r < 0)
return -errno;
else
return -EINVAL;
return -errno;
else
return -EINVAL;