summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2016-12-03 09:34:45 -0800
committerJohn Crispin <john@phrozen.org>2016-12-11 09:15:27 +0100
commit26c98ec94d7aa6d5d3fe6c3fccc78b26a2bf11d4 (patch)
tree888f790c11b9d1ac13483534ca1f38e2f12f4ced
parentf4089654a399fbea6b8fd25844fbb43d259e0332 (diff)
downloadrpcd-26c98ec94d7aa6d5d3fe6c3fccc78b26a2bf11d4.tar.gz
sys: Check return values of chdir and write
Fixes the following warnings: rpcd/sys.c: In function 'rpc_cgi_password_set': rpcd/sys.c:116:8: error: ignoring return value of 'chdir', declared with attribute warn_unused_result [-Werror=unused-result] chdir("/"); ^ rpcd/sys.c:125:8: error: ignoring return value of 'write', declared with attribute warn_unused_result [-Werror=unused-result] write(fds[1], blobmsg_data(tb[RPC_P_PASSWORD]), ^ rpcd/sys.c:127:8: error: ignoring return value of 'write', declared with attribute warn_unused_result [-Werror=unused-result] write(fds[1], "\n", 1); ^ rpcd/sys.c:131:8: error: ignoring return value of 'write', declared with attribute warn_unused_result [-Werror=unused-result] write(fds[1], blobmsg_data(tb[RPC_P_PASSWORD]), ^ rpcd/sys.c:133:8: error: ignoring return value of 'write', declared with attribute warn_unused_result [-Werror=unused-result] write(fds[1], "\n", 1); ^ cc1: all warnings being treated as errors Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
-rw-r--r--sys.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/sys.c b/sys.c
index b90aa6b..3691dfb 100644
--- a/sys.c
+++ b/sys.c
@@ -76,6 +76,8 @@ rpc_cgi_password_set(struct ubus_context *ctx, struct ubus_object *obj,
int fd, fds[2];
struct stat s;
struct blob_attr *tb[__RPC_P_MAX];
+ ssize_t n;
+ int ret;
blobmsg_parse(rpc_password_policy, __RPC_P_MAX, tb,
blob_data(msg), blob_len(msg));
@@ -113,7 +115,9 @@ rpc_cgi_password_set(struct ubus_context *ctx, struct ubus_object *obj,
close(fd);
}
- chdir("/");
+ ret = chdir("/");
+ if (ret < 0)
+ return rpc_errno_status();
if (execl("/usr/bin/passwd", "/usr/bin/passwd",
blobmsg_data(tb[RPC_P_USER]), NULL))
@@ -122,15 +126,24 @@ rpc_cgi_password_set(struct ubus_context *ctx, struct ubus_object *obj,
default:
close(fds[0]);
- write(fds[1], blobmsg_data(tb[RPC_P_PASSWORD]),
+ n = write(fds[1], blobmsg_data(tb[RPC_P_PASSWORD]),
blobmsg_data_len(tb[RPC_P_PASSWORD]) - 1);
- write(fds[1], "\n", 1);
+ if (n < 0)
+ return rpc_errno_status();
+
+ n = write(fds[1], "\n", 1);
+ if (n < 0)
+ return rpc_errno_status();
usleep(100 * 1000);
- write(fds[1], blobmsg_data(tb[RPC_P_PASSWORD]),
+ n = write(fds[1], blobmsg_data(tb[RPC_P_PASSWORD]),
blobmsg_data_len(tb[RPC_P_PASSWORD]) - 1);
- write(fds[1], "\n", 1);
+ if (n < 0)
+ return rpc_errno_status();
+ n = write(fds[1], "\n", 1);
+ if (n < 0)
+ return rpc_errno_status();
close(fds[1]);