diff options
author | deraadt@openbsd.org <deraadt@openbsd.org> | 2019-06-28 13:35:04 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2019-07-05 11:10:39 +1000 |
commit | 4d28fa78abce2890e136281950633fae2066cc29 (patch) | |
tree | 33226ec64ced661bb7e40005e30744b68fa59a80 /sftp-server.c | |
parent | e8c974043c1648eab0ad67a7ba6a3e444fe79d2d (diff) |
upstream: When system calls indicate an error they return -1, not
some arbitrary value < 0. errno is only updated in this case. Change all
(most?) callers of syscalls to follow this better, and let's see if this
strictness helps us in the future.
OpenBSD-Commit-ID: 48081f00db7518e3b712a49dca06efc2a5428075
Diffstat (limited to 'sftp-server.c')
-rw-r--r-- | sftp-server.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/sftp-server.c b/sftp-server.c index ee6013e3f..e7dd33b2f 100644 --- a/sftp-server.c +++ b/sftp-server.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: sftp-server.c,v 1.115 2019/06/06 05:13:13 otto Exp $ */ | 1 | /* $OpenBSD: sftp-server.c,v 1.116 2019/06/28 13:35:04 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. | 3 | * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. |
4 | * | 4 | * |
@@ -701,7 +701,7 @@ process_open(u_int32_t id) | |||
701 | status = SSH2_FX_PERMISSION_DENIED; | 701 | status = SSH2_FX_PERMISSION_DENIED; |
702 | } else { | 702 | } else { |
703 | fd = open(name, flags, mode); | 703 | fd = open(name, flags, mode); |
704 | if (fd < 0) { | 704 | if (fd == -1) { |
705 | status = errno_to_portable(errno); | 705 | status = errno_to_portable(errno); |
706 | } else { | 706 | } else { |
707 | handle = handle_new(HANDLE_FILE, name, fd, flags, NULL); | 707 | handle = handle_new(HANDLE_FILE, name, fd, flags, NULL); |
@@ -754,12 +754,12 @@ process_read(u_int32_t id) | |||
754 | } | 754 | } |
755 | fd = handle_to_fd(handle); | 755 | fd = handle_to_fd(handle); |
756 | if (fd >= 0) { | 756 | if (fd >= 0) { |
757 | if (lseek(fd, off, SEEK_SET) < 0) { | 757 | if (lseek(fd, off, SEEK_SET) == -1) { |
758 | error("process_read: seek failed"); | 758 | error("process_read: seek failed"); |
759 | status = errno_to_portable(errno); | 759 | status = errno_to_portable(errno); |
760 | } else { | 760 | } else { |
761 | ret = read(fd, buf, len); | 761 | ret = read(fd, buf, len); |
762 | if (ret < 0) { | 762 | if (ret == -1) { |
763 | status = errno_to_portable(errno); | 763 | status = errno_to_portable(errno); |
764 | } else if (ret == 0) { | 764 | } else if (ret == 0) { |
765 | status = SSH2_FX_EOF; | 765 | status = SSH2_FX_EOF; |
@@ -795,13 +795,13 @@ process_write(u_int32_t id) | |||
795 | status = SSH2_FX_FAILURE; | 795 | status = SSH2_FX_FAILURE; |
796 | else { | 796 | else { |
797 | if (!(handle_to_flags(handle) & O_APPEND) && | 797 | if (!(handle_to_flags(handle) & O_APPEND) && |
798 | lseek(fd, off, SEEK_SET) < 0) { | 798 | lseek(fd, off, SEEK_SET) == -1) { |
799 | status = errno_to_portable(errno); | 799 | status = errno_to_portable(errno); |
800 | error("process_write: seek failed"); | 800 | error("process_write: seek failed"); |
801 | } else { | 801 | } else { |
802 | /* XXX ATOMICIO ? */ | 802 | /* XXX ATOMICIO ? */ |
803 | ret = write(fd, data, len); | 803 | ret = write(fd, data, len); |
804 | if (ret < 0) { | 804 | if (ret == -1) { |
805 | error("process_write: write failed"); | 805 | error("process_write: write failed"); |
806 | status = errno_to_portable(errno); | 806 | status = errno_to_portable(errno); |
807 | } else if ((size_t)ret == len) { | 807 | } else if ((size_t)ret == len) { |
@@ -831,7 +831,7 @@ process_do_stat(u_int32_t id, int do_lstat) | |||
831 | debug3("request %u: %sstat", id, do_lstat ? "l" : ""); | 831 | debug3("request %u: %sstat", id, do_lstat ? "l" : ""); |
832 | verbose("%sstat name \"%s\"", do_lstat ? "l" : "", name); | 832 | verbose("%sstat name \"%s\"", do_lstat ? "l" : "", name); |
833 | r = do_lstat ? lstat(name, &st) : stat(name, &st); | 833 | r = do_lstat ? lstat(name, &st) : stat(name, &st); |
834 | if (r < 0) { | 834 | if (r == -1) { |
835 | status = errno_to_portable(errno); | 835 | status = errno_to_portable(errno); |
836 | } else { | 836 | } else { |
837 | stat_to_attrib(&st, &a); | 837 | stat_to_attrib(&st, &a); |
@@ -869,7 +869,7 @@ process_fstat(u_int32_t id) | |||
869 | fd = handle_to_fd(handle); | 869 | fd = handle_to_fd(handle); |
870 | if (fd >= 0) { | 870 | if (fd >= 0) { |
871 | r = fstat(fd, &st); | 871 | r = fstat(fd, &st); |
872 | if (r < 0) { | 872 | if (r == -1) { |
873 | status = errno_to_portable(errno); | 873 | status = errno_to_portable(errno); |
874 | } else { | 874 | } else { |
875 | stat_to_attrib(&st, &a); | 875 | stat_to_attrib(&st, &a); |
@@ -1079,7 +1079,7 @@ process_readdir(u_int32_t id) | |||
1079 | /* XXX OVERFLOW ? */ | 1079 | /* XXX OVERFLOW ? */ |
1080 | snprintf(pathname, sizeof pathname, "%s%s%s", path, | 1080 | snprintf(pathname, sizeof pathname, "%s%s%s", path, |
1081 | strcmp(path, "/") ? "/" : "", dp->d_name); | 1081 | strcmp(path, "/") ? "/" : "", dp->d_name); |
1082 | if (lstat(pathname, &st) < 0) | 1082 | if (lstat(pathname, &st) == -1) |
1083 | continue; | 1083 | continue; |
1084 | stat_to_attrib(&st, &(stats[count].attrib)); | 1084 | stat_to_attrib(&st, &(stats[count].attrib)); |
1085 | stats[count].name = xstrdup(dp->d_name); | 1085 | stats[count].name = xstrdup(dp->d_name); |
@@ -1726,7 +1726,7 @@ sftp_server_main(int argc, char **argv, struct passwd *user_pw) | |||
1726 | if (olen > 0) | 1726 | if (olen > 0) |
1727 | FD_SET(out, wset); | 1727 | FD_SET(out, wset); |
1728 | 1728 | ||
1729 | if (select(max+1, rset, wset, NULL, NULL) < 0) { | 1729 | if (select(max+1, rset, wset, NULL, NULL) == -1) { |
1730 | if (errno == EINTR) | 1730 | if (errno == EINTR) |
1731 | continue; | 1731 | continue; |
1732 | error("select: %s", strerror(errno)); | 1732 | error("select: %s", strerror(errno)); |
@@ -1739,7 +1739,7 @@ sftp_server_main(int argc, char **argv, struct passwd *user_pw) | |||
1739 | if (len == 0) { | 1739 | if (len == 0) { |
1740 | debug("read eof"); | 1740 | debug("read eof"); |
1741 | sftp_server_cleanup_exit(0); | 1741 | sftp_server_cleanup_exit(0); |
1742 | } else if (len < 0) { | 1742 | } else if (len == -1) { |
1743 | error("read: %s", strerror(errno)); | 1743 | error("read: %s", strerror(errno)); |
1744 | sftp_server_cleanup_exit(1); | 1744 | sftp_server_cleanup_exit(1); |
1745 | } else if ((r = sshbuf_put(iqueue, buf, len)) != 0) { | 1745 | } else if ((r = sshbuf_put(iqueue, buf, len)) != 0) { |
@@ -1750,7 +1750,7 @@ sftp_server_main(int argc, char **argv, struct passwd *user_pw) | |||
1750 | /* send oqueue to stdout */ | 1750 | /* send oqueue to stdout */ |
1751 | if (FD_ISSET(out, wset)) { | 1751 | if (FD_ISSET(out, wset)) { |
1752 | len = write(out, sshbuf_ptr(oqueue), olen); | 1752 | len = write(out, sshbuf_ptr(oqueue), olen); |
1753 | if (len < 0) { | 1753 | if (len == -1) { |
1754 | error("write: %s", strerror(errno)); | 1754 | error("write: %s", strerror(errno)); |
1755 | sftp_server_cleanup_exit(1); | 1755 | sftp_server_cleanup_exit(1); |
1756 | } else if ((r = sshbuf_consume(oqueue, len)) != 0) { | 1756 | } else if ((r = sshbuf_consume(oqueue, len)) != 0) { |