mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-24 06:03:52 +03:00
vshCmddefCheckInternals: Sanitize command alias validation
We don't need to validate the real command twice, but it's better to check that the real command name exists and it's not an alias to prevent loops. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
1726c572a2
commit
7f72ed0707
18
tools/vsh.c
18
tools/vsh.c
@ -269,11 +269,27 @@ vshCmddefCheckInternals(vshControl *ctl,
|
||||
|
||||
/* in order to perform the validation resolve the alias first */
|
||||
if (cmd->flags & VSH_CMD_FLAG_ALIAS) {
|
||||
const vshCmdDef *alias;
|
||||
|
||||
if (!cmd->alias) {
|
||||
vshError(ctl, _("command '%s' has inconsistent alias"), cmd->name);
|
||||
return -1;
|
||||
}
|
||||
cmd = vshCmddefSearch(cmd->alias);
|
||||
|
||||
if (!(alias = vshCmddefSearch(cmd->alias))) {
|
||||
vshError(ctl, _("command alias '%s' is pointing to a non-existant command '%s'"),
|
||||
cmd->name, cmd->alias);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (alias->flags & VSH_CMD_FLAG_ALIAS) {
|
||||
vshError(ctl, _("command alias '%s' is pointing to another command alias '%s'"),
|
||||
cmd->name, cmd->alias);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* we don't need to continue as the real command will be checked separately */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Each command has to provide a non-empty help string. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user