On 6/14/19 4:34 PM, Max Reitz wrote:
> On 14.06.19 16:29, Pino Toscano wrote:
>> On Thursday, 13 June 2019 21:31:40 CEST Max Reitz wrote:
>>> On 13.06.19 15:20, Pino Toscano wrote:
[...]
>>>> - case LIBSSH2_KNOWNHOST_CHECK_NOTFOUND:
>>>> + case SSH_KNOWN_HOSTS_OTHER:
>>>> ret = -EINVAL;
>>>> - session_error_setg(errp, s, "no host key was found in
>>>> known_hosts");
>>>> + error_setg(errp,
>>>> + "host key for this server not found, another type
>>>> exists");
>>>> goto out;
>>>> - case LIBSSH2_KNOWNHOST_CHECK_FAILURE:
>>>> + case SSH_KNOWN_HOSTS_UNKNOWN:
>>>> ret = -EINVAL;
>>>> - session_error_setg(errp, s,
>>>> - "failure matching the host key with known_hosts");
>>>> + error_setg(errp, "no host key was found in known_hosts");
>>>> + goto out;
>>>> + case SSH_KNOWN_HOSTS_NOT_FOUND:
>>>> + ret = -ENOENT;
>>>> + error_setg(errp, "known_hosts file not found");
>>>> + goto out;
>>>> + case SSH_KNOWN_HOSTS_ERROR:
>>>> + ret = -EINVAL;
>>>> + error_setg(errp, "error while checking the host");
>>>> goto out;
>>>> default:
>>>> ret = -EINVAL;
>>>> - session_error_setg(errp, s, "unknown error matching the host key"
>>>> - " with known_hosts (%d)", r);
>>>> + error_setg(errp, "error while checking for known server");
>>>> goto out;
>>>> }
>>>> +#else /* !HAVE_LIBSSH_0_8 */
>>>> + int state;
>>>> +
>>>> + state = ssh_is_server_known(s->session);
>>>> + trace_ssh_server_status(state);
>>>> +
>>>> + switch (state) {
>>>> + case SSH_SERVER_KNOWN_OK:
>>>> + /* OK */
>>>> + trace_ssh_check_host_key_knownhosts();
>>>> + break;
>>>> + case SSH_SERVER_KNOWN_CHANGED:
>>>> + ret = -EINVAL;
>>>> + error_setg(errp, "host key does not match the one in
>>>> known_hosts");
>>>> + goto out;
>>>> + case SSH_SERVER_FOUND_OTHER:
>>>> + ret = -EINVAL;
>>>> + error_setg(errp,
>>>> + "host key for this server not found, another type
>>>> exists");
>>>> + goto out;
>>>> + case SSH_SERVER_FILE_NOT_FOUND:
>>>> + ret = -ENOENT;
>>>> + error_setg(errp, "known_hosts file not found");
>>>> + goto out;
>>>> + case SSH_SERVER_NOT_KNOWN:
>>>> + ret = -EINVAL;
>>>> + error_setg(errp, "no host key was found in known_hosts");
>>>> + goto out;
>>>> + case SSH_SERVER_ERROR:
>>>> + ret = -EINVAL;
>>>> + error_setg(errp, "server error");
>>>> + goto out;
>>>
>>> No default here?
>>
>> This switch is for libssh < 0.8.0, so enumerating all the possible
>> values of the enum of the old API is enough.
>
> state is an integer. I feel very uneasy about not having a default
> clause for a plain integer, especially if it is supplied by an external
> library.Agreed. What's odd is I tested it on Ubuntu Xenial which is 0.6.3 and no got no cpp warning. I wonder if it is using a backported patch adding ssh_session_is_known_server(), like 0.7.1 on Ubuntu Bionic. Anyway, better add a default.
signature.asc
Description: OpenPGP digital signature
