diff options
author | Lennart Poettering <lennart@poettering.net> | 2011-04-13 21:26:30 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2011-04-13 21:26:30 +0200 |
commit | d55f4f3f92f56f76bdd06192d6a2ef3ee9fe4772 (patch) | |
tree | 683467af7c400cb0397edab27643ce79695898a5 | |
parent | 8254a475893e746eb667c0666a69a871d7fc4732 (diff) |
ask-password: always send final NUL char
-rw-r--r-- | src/reply-password.c | 2 | ||||
-rw-r--r-- | src/tty-ask-password-agent.c | 18 |
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; |