From: Ben Pfaff Date: Tue, 2 Sep 2014 15:35:02 +0000 (-0700) Subject: ovs-vsctl: Correctly exit on errors for non-map types in "remove" command. X-Git-Tag: v2.3.1~45 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=89b92e474e72b70ef237ed160d50fa74847aa402 ovs-vsctl: Correctly exit on errors for non-map types in "remove" command. Reported-by: Thomas Graf Signed-off-by: Ben Pfaff Acked-by: Thomas Graf --- diff --git a/tests/ovs-vsctl.at b/tests/ovs-vsctl.at index 440bf1ae9..95f60964b 100644 --- a/tests/ovs-vsctl.at +++ b/tests/ovs-vsctl.at @@ -838,6 +838,9 @@ AT_CHECK([RUN_OVS_VSCTL([set port br1 name br2])], AT_CHECK([RUN_OVS_VSCTL([remove bridge 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 bridge 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 4fcee77ae..f83715813 100644 --- a/utilities/ovs-vsctl.c +++ b/utilities/ovs-vsctl.c @@ -3528,11 +3528,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);