diff options
author | Alex Wang <ee07b291@gmail.com> | 2015-08-21 15:20:24 -0700 |
---|---|---|
committer | Alex Wang <ee07b291@gmail.com> | 2015-08-29 00:48:21 +0000 |
commit | 14dd55a3e3496057e7a7e0281a782b180714348d (patch) | |
tree | d637f289aa0470e306a974a419708ad87b07c46b | |
parent | e83c93573b10bdc0dbadda02ca1ae873757c8903 (diff) |
bridge: Relax the whitelist format for punix path.
This commit relaxes the whitelist format for punix path of
service controller. Instead of only allowing
punix:<ovs_rundir>/<bridge_name>.controller, the new format
allows any suffix, like punix:<ovs_rundir>/<bridge_name>.*.
(except one containing '/').
Signed-off-by: Alex Wang <ee07b291@gmail.com>
Acked-by: Ben Pfaff <blp@nicira.com>
-rw-r--r-- | tests/ovs-vswitchd.at | 14 | ||||
-rw-r--r-- | vswitchd/bridge.c | 12 |
2 files changed, 21 insertions, 5 deletions
diff --git a/tests/ovs-vswitchd.at b/tests/ovs-vswitchd.at index 3b7c51653..912354f6c 100644 --- a/tests/ovs-vswitchd.at +++ b/tests/ovs-vswitchd.at @@ -153,3 +153,17 @@ AT_CHECK([sed -n " ]) AT_CLEANUP + +dnl ---------------------------------------------------------------------- +AT_SETUP([ovs-vswitchd -- set service controller]) +AT_SKIP_IF([test "$IS_WIN32" = "yes"]) +OVS_VSWITCHD_START + +AT_CHECK([ovs-vsctl set-controller br0 punix:$(pwd)/br0.void]) +OVS_WAIT_UNTIL([test -e br0.void]) + +AT_CHECK([ovs-vsctl set-controller br0 punix:$(pwd)/br0.void/../overwrite.file]) +OVS_WAIT_UNTIL([test -n "`grep ERR ovs-vswitchd.log | grep overwrite.file`"]) + +OVS_VSWITCHD_STOP(["/Not adding Unix domain socket controller/d"]) +AT_CLEANUP diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 19ec857e4..232a33432 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -3561,18 +3561,20 @@ bridge_configure_remotes(struct bridge *br, continue; } } else { - whitelist = xasprintf("punix:%s/%s.controller", + whitelist = xasprintf("punix:%s/%s.", ovs_rundir(), br->name); - if (!equal_pathnames(c->target, whitelist, SIZE_MAX)) { + if (!equal_pathnames(c->target, whitelist, strlen(whitelist)) + || strchr(c->target + strlen(whitelist), '/')) { /* Prevent remote ovsdb-server users from accessing * arbitrary Unix domain sockets and overwriting arbitrary * local files. */ VLOG_ERR_RL(&rl, "bridge %s: Not adding Unix domain socket " "controller \"%s\" due to possibility of " "overwriting local files. Instead, specify " - "whitelisted \"%s\" or connect to " - "\"unix:%s/%s.mgmt\" (which is always " - "available without special configuration).", + "path in whitelisted format \"%s*\" or " + "connect to \"unix:%s/%s.mgmt\" (which is " + "always available without special " + "configuration).", br->name, c->target, whitelist, ovs_rundir(), br->name); free(whitelist); |