From: Richard Jones Date: Thu, 6 May 2010 23:13:31 +0000 (+0100) Subject: daemon: Fix wc* commands to work on absolute symbolic links (RHBZ#579608). X-Git-Tag: 1.3.10~2 X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;h=a84f1360499309e2d2ecb661adc6917539b5eef4;p=libguestfs.git daemon: Fix wc* commands to work on absolute symbolic links (RHBZ#579608). --- diff --git a/daemon/wc.c b/daemon/wc.c index fe27bf1..43e28e0 100644 --- a/daemon/wc.c +++ b/daemon/wc.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "../src/guestfs_protocol.h" #include "daemon.h" @@ -30,19 +31,20 @@ static int wc (const char *flag, const char *path) { - char *buf; char *out, *err; - int r; + int fd, flags, r; - /* Make the path relative to /sysroot. */ - buf = sysroot_path (path); - if (!buf) { - reply_with_perror ("malloc"); + CHROOT_IN; + fd = open (path, O_RDONLY); + CHROOT_OUT; + + if (fd == -1) { + reply_with_perror ("wc %s: %s", flag, path); return -1; } - r = command (&out, &err, "wc", flag, buf, NULL); - free (buf); + flags = COMMAND_FLAG_CHROOT_COPY_FILE_TO_STDIN | fd; + r = commandf (&out, &err, flags, "wc", flag, NULL); if (r == -1) { reply_with_error ("wc %s: %s", flag, err); free (out); diff --git a/src/generator.ml b/src/generator.ml index a5a7ddc..1e6d3c0 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -2838,7 +2838,10 @@ See also: L"); ("wc_l", (RInt "lines", [Pathname "path"]), 118, [], [InitISOFS, Always, TestOutputInt ( - [["wc_l"; "/10klines"]], 10000)], + [["wc_l"; "/10klines"]], 10000); + (* Test for RHBZ#579608, absolute symbolic links. *) + InitISOFS, Always, TestOutputInt ( + [["wc_l"; "/abssymlink"]], 10000)], "count lines in a file", "\ This command counts the lines in a file, using the