summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2014-09-02 08:35:02 -0700
committerBen Pfaff <blp@nicira.com>2014-09-02 09:08:13 -0700
commit3ab8c8e51a5542a744b9fa8dc235a5bc6d9bad1a (patch)
tree4f183e6120940b116aeebfe71417cdec45f4113a
parent7f03ee0889a2072a56be647179508c3d7df89652 (diff)
downloadopenvswitch-3ab8c8e51a5542a744b9fa8dc235a5bc6d9bad1a.tar.gz
ovs-vsctl: Correctly exit on errors for non-map types in "remove" command.
Reported-by: Thomas Graf <tgraf@noironetworks.com> Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Thomas Graf <tgraf@noironetworks.com>
-rw-r--r--tests/ovs-vsctl.at3
-rw-r--r--utilities/ovs-vsctl.c14
2 files changed, 12 insertions, 5 deletions
diff --git a/tests/ovs-vsctl.at b/tests/ovs-vsctl.at
index 6b35dd3ef..1cbb230c3 100644
--- a/tests/ovs-vsctl.at
+++ b/tests/ovs-vsctl.at
@@ -761,6 +761,9 @@ AT_CHECK([RUN_OVS_VSCTL([set port br1 name br2])],
AT_CHECK([RUN_OVS_VSCTL([remove b br1 name br1])],
[1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
], [OVS_VSCTL_CLEANUP])
+AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
+ [1], [], [ovs-vsctl: "true" is not a valid integer
+], [OVS_VSCTL_CLEANUP])
AT_CHECK([RUN_OVS_VSCTL([clear b br1 name])],
[1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
], [OVS_VSCTL_CLEANUP])
diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c
index 74482ed11..f53bd6532 100644
--- a/utilities/ovs-vsctl.c
+++ b/utilities/ovs-vsctl.c
@@ -3310,11 +3310,15 @@ cmd_remove(struct vsctl_context *ctx)
rm_type.n_max = UINT_MAX;
error = ovsdb_datum_from_string(&rm, &rm_type,
ctx->argv[i], ctx->symtab);
- if (error && ovsdb_type_is_map(&rm_type)) {
- free(error);
- rm_type.value.type = OVSDB_TYPE_VOID;
- die_if_error(ovsdb_datum_from_string(&rm, &rm_type,
- ctx->argv[i], ctx->symtab));
+ if (error) {
+ if (ovsdb_type_is_map(&rm_type)) {
+ rm_type.value.type = OVSDB_TYPE_VOID;
+ free(error);
+ die_if_error(ovsdb_datum_from_string(
+ &rm, &rm_type, ctx->argv[i], ctx->symtab));
+ } else {
+ vsctl_fatal("%s", error);
+ }
}
ovsdb_datum_subtract(&old, type, &rm, &rm_type);
ovsdb_datum_destroy(&rm, &rm_type);