#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"
}
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;
}
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;
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;
}