/* libguestfs - the guestfsd daemon
- * Copyright (C) 2009 Red Hat Inc.
+ * Copyright (C) 2009 Red Hat Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
DIR *dir;
struct dirent *d;
- NEED_ROOT (NULL);
- ABS_PATH (path, NULL);
-
CHROOT_IN;
dir = opendir (path);
CHROOT_OUT;
}
while ((d = readdir (dir)) != NULL) {
- if (strcmp (d->d_name, ".") == 0 || strcmp (d->d_name, "..") == 0)
+ if (STREQ (d->d_name, ".") || STREQ (d->d_name, ".."))
continue;
if (add_string (&r, &size, &alloc, d->d_name) == -1) {
return r;
}
+/* Because we can't chroot and run the ls command (since 'ls' won't
+ * necessarily exist in the chroot), this command can be used to escape
+ * from the sysroot (eg. 'll /..'). This command is not meant for
+ * serious use anyway, just for quick interactive sessions.
+ */
+
char *
do_ll (const char *path)
{
- int r, len;
+ int r;
char *out, *err;
char *spath;
- //NEED_ROOT
- ABS_PATH (path, NULL);
-
- /* This exposes the /sysroot, because we can't chroot and run the ls
- * command (since 'ls' won't necessarily exist in the chroot). This
- * command is not meant for serious use anyway, just for quick
- * interactive sessions. For the same reason, you can also "escape"
- * the sysroot (eg. 'll /..').
- */
- len = strlen (path) + 9;
- spath = malloc (len);
+ spath = sysroot_path (path);
if (!spath) {
reply_with_perror ("malloc");
return NULL;
}
- snprintf (spath, len, "/sysroot%s", path);
r = command (&out, &err, "ls", "-la", spath, NULL);
free (spath);