summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-04-13 21:26:30 +0200
committerLennart Poettering <lennart@poettering.net>2011-04-13 21:26:30 +0200
commitd55f4f3f92f56f76bdd06192d6a2ef3ee9fe4772 (patch)
tree683467af7c400cb0397edab27643ce79695898a5
parent8254a475893e746eb667c0666a69a871d7fc4732 (diff)
ask-password: always send final NUL char
-rw-r--r--src/reply-password.c2
-rw-r--r--src/tty-ask-password-agent.c18
2 files changed, 9 insertions, 11 deletions
diff --git a/src/reply-password.c b/src/reply-password.c
index 575a437645..bd55e65f3c 100644
--- a/src/reply-password.c
+++ b/src/reply-password.c
@@ -82,7 +82,7 @@ int main(int argc, char *argv[]) {
}
truncate_nl(packet+1);
- length = strlen(packet+1) + 1;
+ length = 1 + strlen(packet+1) + 1;
} else if (streq(argv[1], "0")) {
packet[0] = '-';
length = 1;
diff --git a/src/tty-ask-password-agent.c b/src/tty-ask-password-agent.c
index dcf4b332b3..a414cba374 100644
--- a/src/tty-ask-password-agent.c
+++ b/src/tty-ask-password-agent.c
@@ -369,10 +369,15 @@ static int parse_password(const char *filename, char **wall) {
release_terminal();
}
- asprintf(&packet, "+%s", password);
- free(password);
+ packet_length = 1+strlen(password)+1;
+ if (!(packet = new(char, packet_length)))
+ r = -ENOMEM;
+ else {
+ packet[0] = '+';
+ strcpy(packet+1, password);
+ }
- packet_length = strlen(packet);
+ free(password);
}
if (r == -ETIME || r == -ENOENT) {
@@ -382,17 +387,10 @@ static int parse_password(const char *filename, char **wall) {
}
if (r < 0) {
-
log_error("Failed to query password: %s", strerror(-r));
goto finish;
}
- if (!packet) {
- log_error("Out of memory");
- r = -ENOMEM;
- goto finish;
- }
-
if ((socket_fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) {
log_error("socket(): %m");
r = -errno;