diff options
author | Chris Lumens <clumens@redhat.com> | 2005-09-20 15:32:33 +0000 |
---|---|---|
committer | Chris Lumens <clumens@redhat.com> | 2005-09-20 15:32:33 +0000 |
commit | c5121a07b37a39d5b2318552d68c38342a56face (patch) | |
tree | 605f14fcc48ffc880ff6b0f1b5813439c040840b /loader2 | |
parent | cc01c708e8b2af4bf8aafdabe74c1ced90829d41 (diff) | |
download | anaconda-c5121a07b37a39d5b2318552d68c38342a56face.tar.gz anaconda-c5121a07b37a39d5b2318552d68c38342a56face.tar.xz anaconda-c5121a07b37a39d5b2318552d68c38342a56face.zip |
Don't copy null characters into the log file.
Diffstat (limited to 'loader2')
-rw-r--r-- | loader2/init.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/loader2/init.c b/loader2/init.c index 8fb550c11..2e3a8ae08 100644 --- a/loader2/init.c +++ b/loader2/init.c @@ -158,7 +158,7 @@ static void doklog(char * fn) { socklen_t s; int sock = -1; struct sockaddr_un sockaddr; - char buf[1024]; + char inbuf[1024], outbuf[1024]; int readfd; int ret; @@ -234,24 +234,44 @@ static void doklog(char * fn) { if (i <= 0) continue; if (FD_ISSET(in, &readset)) { - i = read(in, buf, sizeof(buf)); + i = read(in, inbuf, sizeof(inbuf)); if (i > 0) { + int inctr, outctr; + + /* Remove null chars from input buffer. */ + for (inctr = 0, outctr = 0; inctr < i; inctr++) { + if (inbuf[inctr] != '\0') { + outbuf[outctr] = inbuf[inctr]; + outctr++; + } + } + if (out >= 0) - ret = write(out, buf, i); - ret = write(log, buf, i); + ret = write(out, outbuf, outctr); + ret = write(log, outbuf, outctr); } } for (readfd = 0; readfd < 20; ++readfd) { if (FD_ISSET(readfd, &readset) && FD_ISSET(readfd, &unixs)) { - i = read(readfd, buf, sizeof(buf)); + i = read(readfd, inbuf, sizeof(inbuf)); if (i > 0) { + int inctr, outctr; + + /* Remove null chars from input buffer. */ + for (inctr = 0, outctr = 0; inctr < i; inctr++) { + if (inbuf[inctr] != '\0') { + outbuf[outctr] = inbuf[inctr]; + outctr++; + } + } + if (out >= 0) { - ret = write(out, buf, i); + ret = write(out, outbuf, outctr); ret = write(out, "\n", 1); } - ret = write(log, buf, i); + ret = write(log, outbuf, outctr); ret = write(log, "\n", 1); } else if (i == 0) { /* socket closed */ |