Skip to content

Commit 73a86ee

Browse files
authored
Fix incorrect error translation in SFTP (#14)
1 parent 5791985 commit 73a86ee

1 file changed

Lines changed: 35 additions & 2 deletions

File tree

src/fs/fs_sftp.cpp

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,39 @@ namespace sw::fs {
2929

3030
namespace {
3131

32+
int ssh2_translate_addrinfo_error(int error) {
33+
switch (error) {
34+
case 0:
35+
return 0;
36+
default:
37+
return EIO;
38+
case EAI_SYSTEM:
39+
return errno ? errno : EIO;
40+
case EAI_AGAIN:
41+
return EAGAIN;
42+
case EAI_BADFLAGS:
43+
return EINVAL;
44+
case EAI_FAIL:
45+
return EHOSTUNREACH;
46+
case EAI_FAMILY:
47+
return EAFNOSUPPORT;
48+
case EAI_MEMORY:
49+
return ENOMEM;
50+
case EAI_NONAME:
51+
return ENOENT;
52+
case EAI_SERVICE:
53+
return EPROTONOSUPPORT;
54+
case EAI_SOCKTYPE:
55+
return ENOTSUP;
56+
case EAI_BADHINTS:
57+
return EINVAL;
58+
case EAI_PROTOCOL:
59+
return EPROTONOSUPPORT;
60+
case EAI_OVERFLOW:
61+
return ENAMETOOLONG;
62+
}
63+
}
64+
3265
int ssh2_translate_error(int error, LIBSSH2_SFTP *sftp_session) {
3366
switch (error) {
3467
case LIBSSH2_ERROR_NONE:
@@ -205,8 +238,8 @@ int SftpFs::connect(std::string_view host, std::uint16_t port, std::string_view
205238
struct addrinfo *ai = nullptr;
206239
SW_SCOPEGUARD([&ai] { ::freeaddrinfo(ai); });
207240

208-
if (auto rc = ::getaddrinfo(host.data(), nullptr, nullptr, &ai))
209-
return rc;
241+
if (auto rc = ::getaddrinfo(host.data(), nullptr, nullptr, &ai); rc)
242+
return ssh2_translate_addrinfo_error(rc);
210243

211244
this->sock = ::socket(AF_INET, SOCK_STREAM, 0);
212245
if (this->sock < 0)

0 commit comments

Comments
 (0)