summaryrefslogtreecommitdiff
path: root/src/reply-password
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-10-18 13:40:39 +0200
committerLennart Poettering <lennart@poettering.net>2018-10-18 13:40:39 +0200
commit1fd2786161feba4276a81c3468cfbfb118f56517 (patch)
tree69ab16aeeccf1f59e5e167119d0c0b4cba6177a1 /src/reply-password
parenta889e206a7434afe28039a1698e5ecf6a3fb7a9b (diff)
downloadsystemd-1fd2786161feba4276a81c3468cfbfb118f56517.tar.gz
reply-password: fgets() excorcism
Diffstat (limited to 'src/reply-password')
-rw-r--r--src/reply-password/reply-password.c37
1 files changed, 29 insertions, 8 deletions
diff --git a/src/reply-password/reply-password.c b/src/reply-password/reply-password.c
index 84176184af..5794dfd535 100644
--- a/src/reply-password/reply-password.c
+++ b/src/reply-password/reply-password.c
@@ -6,7 +6,10 @@
#include <sys/socket.h>
#include <sys/un.h>
+#include "alloc-util.h"
+#include "def.h"
#include "fd-util.h"
+#include "fileio.h"
#include "log.h"
#include "macro.h"
#include "socket-util.h"
@@ -32,8 +35,8 @@ static int send_on_socket(int fd, const char *socket_name, const void *packet, s
}
int main(int argc, char *argv[]) {
+ _cleanup_free_ char *packet = NULL;
_cleanup_close_ int fd = -1;
- char packet[LINE_MAX];
size_t length;
int r;
@@ -47,18 +50,36 @@ int main(int argc, char *argv[]) {
}
if (streq(argv[1], "1")) {
+ _cleanup_string_free_erase_ char *line = NULL;
- packet[0] = '+';
- if (!fgets(packet+1, sizeof(packet)-1, stdin)) {
- r = log_error_errno(errno, "Failed to read password: %m");
+ r = read_line(stdin, LONG_LINE_MAX, &line);
+ if (r < 0) {
+ log_error_errno(r, "Failed to read password: %m");
+ goto finish;
+ }
+ if (r == 0) {
+ log_error("Got EOF while reading password.");
+ r = -EIO;
+ goto finish;
+ }
+
+ packet = strjoin("+", line);
+ if (!packet) {
+ r = log_oom();
goto finish;
}
- truncate_nl(packet+1);
- length = 1 + strlen(packet+1) + 1;
+ length = 1 + strlen(line) + 1;
+
} else if (streq(argv[1], "0")) {
- packet[0] = '-';
+ packet = strdup("-");
+ if (!packet) {
+ r = log_oom();
+ goto finish;
+ }
+
length = 1;
+
} else {
log_error("Invalid first argument %s", argv[1]);
r = -EINVAL;
@@ -74,7 +95,7 @@ int main(int argc, char *argv[]) {
r = send_on_socket(fd, argv[2], packet, length);
finish:
- explicit_bzero(packet, sizeof(packet));
+ explicit_bzero(packet, length);
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}