summaryrefslogtreecommitdiffstats
path: root/daemon/strings.c
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2010-05-07 00:13:05 +0100
committerRichard Jones <rjones@redhat.com>2010-05-07 15:27:28 +0100
commit26991ebb8181b57f4c8454f2862c938d7c5d012d (patch)
tree0a6c069d6b0546b83569bc16295db33df2a1ddc4 /daemon/strings.c
parentdeee8e2b4e377dc2eb23fc551a4d0711ac49b585 (diff)
downloadlibguestfs-26991ebb8181b57f4c8454f2862c938d7c5d012d.tar.gz
libguestfs-26991ebb8181b57f4c8454f2862c938d7c5d012d.tar.xz
libguestfs-26991ebb8181b57f4c8454f2862c938d7c5d012d.zip
daemon: Fix strings to work on absolute symbolic links (RHBZ#579608).
Diffstat (limited to 'daemon/strings.c')
-rw-r--r--daemon/strings.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/daemon/strings.c b/daemon/strings.c
index 47017168..1ba02419 100644
--- a/daemon/strings.c
+++ b/daemon/strings.c
@@ -21,6 +21,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
#include "daemon.h"
#include "actions.h"
@@ -28,19 +30,21 @@
char **
do_strings_e (const char *encoding, const char *path)
{
- char *buf;
- int r;
+ int fd, flags, r;
char *out, *err;
char **lines;
- 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 ("%s", path);
return NULL;
}
- r = command (&out, &err, "strings", "-e", encoding, buf, NULL);
- free (buf);
+ flags = COMMAND_FLAG_CHROOT_COPY_FILE_TO_STDIN | fd;
+ r = commandf (&out, &err, flags, "strings", "-e", encoding, NULL);
if (r == -1) {
reply_with_error ("%s: %s", path, err);
free (err);