diff options
author | Ben Pfaff <blp@nicira.com> | 2014-09-02 08:35:02 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2014-09-02 09:08:13 -0700 |
commit | 3ab8c8e51a5542a744b9fa8dc235a5bc6d9bad1a (patch) | |
tree | 4f183e6120940b116aeebfe71417cdec45f4113a | |
parent | 7f03ee0889a2072a56be647179508c3d7df89652 (diff) | |
download | openvswitch-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.at | 3 | ||||
-rw-r--r-- | utilities/ovs-vsctl.c | 14 |
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); |