summaryrefslogtreecommitdiff
path: root/sftp-server.c
diff options
context:
space:
mode:
authorderaadt@openbsd.org <deraadt@openbsd.org>2019-06-28 13:35:04 +0000
committerDamien Miller <djm@mindrot.org>2019-07-05 11:10:39 +1000
commit4d28fa78abce2890e136281950633fae2066cc29 (patch)
tree33226ec64ced661bb7e40005e30744b68fa59a80 /sftp-server.c
parente8c974043c1648eab0ad67a7ba6a3e444fe79d2d (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.c24
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) {