1 /* libguestfs - the guestfsd daemon
2 * Copyright (C) 2009-2011 Red Hat Inc.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
29 #include <rpc/types.h>
32 #include <sys/param.h>
33 #include <sys/types.h>
38 #include <sys/select.h>
40 #include <arpa/inet.h>
41 #include <netinet/in.h>
50 #include "ignore-value.h"
55 static char *read_cmdline (void);
58 # define MAX(a,b) ((a)>(b)?(a):(b))
61 /* Not the end of the world if this open flag is not defined. */
66 /* If root device is an ext2 filesystem, this is the major and minor.
67 * This is so we can ignore this device from the point of view of the
68 * user, eg. in guestfs_list_devices and many other places.
70 static dev_t root_device = 0;
74 static int print_shell_quote (FILE *stream, const struct printf_info *info, const void *const *args);
75 static int print_sysroot_shell_quote (FILE *stream, const struct printf_info *info, const void *const *args);
76 #ifdef HAVE_REGISTER_PRINTF_SPECIFIER
77 static int print_arginfo (const struct printf_info *info, size_t n, int *argtypes, int *size);
79 #ifdef HAVE_REGISTER_PRINTF_FUNCTION
80 static int print_arginfo (const struct printf_info *info, size_t n, int *argtypes);
82 #error "HAVE_REGISTER_PRINTF_{SPECIFIER|FUNCTION} not defined"
92 /* http://msdn2.microsoft.com/en-us/library/ms742213.aspx */
93 r = gl_sockets_startup (SOCKETS_2_2);
94 return r == 0 ? 0 : -1;
104 /* Location to mount root device. */
105 const char *sysroot = "/sysroot"; /* No trailing slash. */
106 size_t sysroot_len = 8;
108 /* If set (the default), do 'umount-all' when performing autosync. */
109 int autosync_umount = 1;
111 /* Not used explicitly, but required by the gnulib 'error' module. */
112 const char *program_name = "guestfsd";
114 /* Name of the virtio-serial channel. */
115 #define VIRTIO_SERIAL_CHANNEL "/dev/virtio-ports/org.libguestfs.channel.0"
121 "guestfsd [-r] [-v|--verbose]\n");
125 main (int argc, char *argv[])
127 static const char *options = "rv?";
128 static const struct option long_options[] = {
129 { "help", 0, 0, '?' },
130 { "verbose", 0, 0, 'v' },
136 ignore_value (chdir ("/"));
138 if (winsock_init () == -1)
139 error (EXIT_FAILURE, 0, "winsock initialization failed");
141 #ifdef HAVE_REGISTER_PRINTF_SPECIFIER
142 /* http://udrepper.livejournal.com/20948.html */
143 register_printf_specifier ('Q', print_shell_quote, print_arginfo);
144 register_printf_specifier ('R', print_sysroot_shell_quote, print_arginfo);
146 #ifdef HAVE_REGISTER_PRINTF_FUNCTION
147 register_printf_function ('Q', print_shell_quote, print_arginfo);
148 register_printf_function ('R', print_sysroot_shell_quote, print_arginfo);
150 #error "HAVE_REGISTER_PRINTF_{SPECIFIER|FUNCTION} not defined"
155 if (stat ("/", &statbuf) == 0)
156 root_device = statbuf.st_dev;
159 c = getopt_long (argc, argv, options, long_options, NULL);
163 /* The -r flag is used when running standalone. It changes
164 * several aspects of the daemon.
181 fprintf (stderr, "guestfsd: unexpected command line option 0x%x\n", c);
191 cmdline = read_cmdline ();
193 /* Set the verbose flag. */
195 (cmdline && strstr (cmdline, "guestfs_verbose=1") != NULL);
197 printf ("verbose daemon enabled\n");
201 printf ("linux commmand line: %s\n", cmdline);
203 printf ("could not read linux command line\n");
207 /* Make sure SIGPIPE doesn't kill us. */
209 memset (&sa, 0, sizeof sa);
210 sa.sa_handler = SIG_IGN;
212 if (sigaction (SIGPIPE, &sa, NULL) == -1)
213 perror ("sigaction SIGPIPE"); /* but try to continue anyway ... */
217 # define setenv(n,v,f) _putenv(n "=" v)
219 /* Set up a basic environment. After we are called by /init the
220 * environment is essentially empty.
221 * https://bugzilla.redhat.com/show_bug.cgi?id=502074#c5
223 * NOTE: if you change $PATH, you must also change 'prog_exists'
226 setenv ("PATH", "/sbin:/usr/sbin:/bin:/usr/bin", 1);
227 setenv ("SHELL", "/bin/sh", 1);
228 setenv ("LC_ALL", "C", 1);
229 setenv ("TERM", "dumb", 1);
232 /* We document that umask defaults to 022 (it should be this anyway). */
235 /* This is the default for Windows anyway. It's not even clear if
236 * Windows ever uses this -- the MSDN documentation for the function
237 * contains obvious errors.
242 /* Make a private copy of /etc/lvm so we can change the config (see
243 * daemon/lvm-filter.c).
247 /* Connect to virtio-serial channel. */
248 int sock = open (VIRTIO_SERIAL_CHANNEL, O_RDWR | O_CLOEXEC);
252 "Failed to connect to virtio-serial channel.\n"
254 "This is a fatal error and the appliance will now exit.\n"
256 "Usually this error is caused by either QEMU or the appliance\n"
257 "kernel not supporting the vmchannel method that the\n"
258 "libguestfs library chose to use. Please run\n"
259 "'libguestfs-test-tool' and provide the complete, unedited\n"
260 "output to the libguestfs developers, either in a bug report\n"
261 "or on the libguestfs redhat com mailing list.\n"
263 perror (VIRTIO_SERIAL_CHANNEL);
267 /* Send the magic length message which indicates that
268 * userspace is up inside the guest.
272 uint32_t len = GUESTFS_LAUNCH_FLAG;
273 xdrmem_create (&xdr, lenbuf, sizeof lenbuf, XDR_ENCODE);
274 xdr_u_int (&xdr, &len);
276 if (xwrite (sock, lenbuf, sizeof lenbuf) == -1) {
283 /* Enter the main loop, reading and performing actions. */
289 /* Read /proc/cmdline. */
293 int fd = open ("/proc/cmdline", O_RDONLY);
295 perror ("/proc/cmdline");
305 n = read (fd, buf, sizeof buf);
314 char *newr = realloc (r, len + n + 1); /* + 1 is for terminating NUL */
322 memcpy (&r[len], buf, n);
329 if (close (fd) == -1) {
338 /* Return true iff device is the root device (and therefore should be
339 * ignored from the point of view of user calls).
342 is_root_device (const char *device)
345 if (stat (device, &statbuf) == -1) {
349 if (statbuf.st_rdev == root_device)
354 /* Turn "/path" into "/sysroot/path".
356 * Caller must check for NULL and call reply_with_perror ("malloc")
357 * if it is. Caller must also free the string.
359 * See also the custom %R printf formatter which does shell quoting too.
362 sysroot_path (const char *path)
365 int len = strlen (path) + sysroot_len + 1;
371 snprintf (r, len, "%s%s", sysroot, path);
376 xwrite (int sock, const void *v_buf, size_t len)
379 const char *buf = v_buf;
382 r = write (sock, buf, len);
395 xread (int sock, void *v_buf, size_t len)
401 r = read (sock, buf, len);
407 fprintf (stderr, "read: unexpected end of file on fd %d\n", sock);
418 add_string_nodup (char ***argv, int *size, int *alloc, char *str)
422 if (*size >= *alloc) {
424 new_argv = realloc (*argv, *alloc * sizeof (char *));
425 if (new_argv == NULL) {
426 reply_with_perror ("realloc");
427 free_strings (*argv);
434 (*argv)[*size] = str;
441 add_string (char ***argv, int *size, int *alloc, const char *str)
446 new_str = strdup (str);
447 if (new_str == NULL) {
448 reply_with_perror ("strdup");
449 free_strings (*argv);
457 return add_string_nodup (argv, size, alloc, new_str);
461 count_strings (char *const *argv)
465 for (argc = 0; argv[argc] != NULL; ++argc)
470 /* http://graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2 */
472 is_power_of_2 (unsigned long v)
474 return v && ((v & (v - 1)) == 0);
478 compare (const void *vp1, const void *vp2)
480 char * const *p1 = (char * const *) vp1;
481 char * const *p2 = (char * const *) vp2;
482 return strcmp (*p1, *p2);
486 sort_strings (char **argv, int len)
488 qsort (argv, len, sizeof (char *), compare);
492 free_strings (char **argv)
496 for (argc = 0; argv[argc] != NULL; ++argc)
502 free_stringslen (char **argv, int len)
506 for (i = 0; i < len; ++i)
511 /* Easy ways to run external commands. For full documentation, see
512 * 'commandrvf' below.
515 commandf (char **stdoutput, char **stderror, int flags, const char *name, ...)
522 /* Collect the command line arguments into an array. */
524 argv = malloc (sizeof (char *) * i);
529 argv[0] = (char *) name;
532 va_start (args, name);
534 while ((s = va_arg (args, char *)) != NULL) {
535 const char **p = realloc (argv, sizeof (char *) * (++i));
549 r = commandvf (stdoutput, stderror, flags, (const char * const*) argv);
551 /* NB: Mustn't free the strings which are on the stack. */
557 /* Same as 'command', but we allow the status code from the
558 * subcommand to be non-zero, and return that status code.
559 * We still return -1 if there was some other error.
562 commandrf (char **stdoutput, char **stderror, int flags, const char *name, ...)
569 /* Collect the command line arguments into an array. */
571 argv = malloc (sizeof (char *) * i);
576 argv[0] = (char *) name;
579 va_start (args, name);
581 while ((s = va_arg (args, char *)) != NULL) {
582 const char **p = realloc (argv, sizeof (char *) * (++i));
596 r = commandrvf (stdoutput, stderror, flags, argv);
598 /* NB: Mustn't free the strings which are on the stack. */
604 /* Same as 'command', but passing an argv. */
606 commandvf (char **stdoutput, char **stderror, int flags,
607 char const *const *argv)
611 r = commandrvf (stdoutput, stderror, flags, (void *) argv);
618 /* This is a more sane version of 'system(3)' for running external
619 * commands. It uses fork/execvp, so we don't need to worry about
620 * quoting of parameters, and it allows us to capture any error
621 * messages in a buffer.
623 * If stdoutput is not NULL, then *stdoutput will return the stdout
626 * If stderror is not NULL, then *stderror will return the stderr
627 * of the command. If there is a final \n character, it is removed
628 * so you can use the error string directly in a call to
633 * COMMAND_FLAG_FOLD_STDOUT_ON_STDERR: For broken external commands
634 * that send error messages to stdout (hello, parted) but that don't
635 * have any useful stdout information, use this flag to capture the
636 * error messages in the *stderror buffer. If using this flag,
637 * you should pass stdoutput as NULL because nothing could ever be
638 * captured in that buffer.
640 * COMMAND_FLAG_CHROOT_COPY_FILE_TO_STDIN: For running external
641 * commands on chrooted files correctly (see RHBZ#579608) specifying
642 * this flag causes another process to be forked which chroots into
643 * sysroot and just copies the input file to stdin of the specified
644 * command. The file descriptor is ORed with the flags, and that file
645 * descriptor is always closed by this function. See hexdump.c for an
649 commandrvf (char **stdoutput, char **stderror, int flags,
650 char const* const *argv)
652 int so_size = 0, se_size = 0;
653 int so_fd[2], se_fd[2];
654 int flag_copy_stdin = flags & COMMAND_FLAG_CHROOT_COPY_FILE_TO_STDIN;
655 int stdin_fd[2] = { -1, -1 };
656 pid_t pid, stdin_pid = -1;
662 if (stdoutput) *stdoutput = NULL;
663 if (stderror) *stderror = NULL;
666 printf ("%s", argv[0]);
667 for (i = 1; argv[i] != NULL; ++i)
668 printf (" %s", argv[i]);
672 /* Note: abort is used in a few places along the error paths early
673 * in this function. This is because (a) cleaning up correctly is
674 * very complex at these places and (b) abort is used when a
675 * resource problems is indicated which would be due to much more
676 * serious issues - eg. memory or file descriptor leaks. We
677 * wouldn't expect fork(2) or pipe(2) to fail in normal
681 if (pipe (so_fd) == -1 || pipe (se_fd) == -1) {
682 error (0, errno, "pipe");
686 if (flag_copy_stdin) {
687 if (pipe (stdin_fd) == -1) {
688 error (0, errno, "pipe");
695 error (0, errno, "fork");
699 if (pid == 0) { /* Child process running the command. */
700 signal (SIGALRM, SIG_DFL);
701 signal (SIGPIPE, SIG_DFL);
703 if (flag_copy_stdin) {
704 dup2 (stdin_fd[0], 0);
708 /* Set stdin to /dev/null (ignore failure) */
709 ignore_value (open ("/dev/null", O_RDONLY));
713 if (!(flags & COMMAND_FLAG_FOLD_STDOUT_ON_STDERR))
721 execvp (argv[0], (void *) argv);
723 _exit (EXIT_FAILURE);
726 if (flag_copy_stdin) {
727 int fd = flags & COMMAND_FLAG_FD_MASK;
730 if (stdin_pid == -1) {
731 error (0, errno, "fork");
735 if (stdin_pid == 0) { /* Child process copying stdin. */
742 dup2 (stdin_fd[1], 1);
746 if (chroot (sysroot) == -1) {
748 _exit (EXIT_FAILURE);
753 while ((n = read (fd, buffer, sizeof buffer)) > 0) {
754 if (xwrite (1, buffer, n) == -1)
755 /* EPIPE error indicates the command process has exited
756 * early. If the command process fails that will be caught
757 * by the daemon, and if not, then it's not an error.
759 _exit (errno == EPIPE ? EXIT_SUCCESS : EXIT_FAILURE);
764 _exit (EXIT_FAILURE);
767 if (close (fd) == -1) {
769 _exit (EXIT_FAILURE);
772 _exit (EXIT_SUCCESS);
780 /* Parent process. */
785 FD_SET (so_fd[0], &rset);
786 FD_SET (se_fd[0], &rset);
792 r = select (MAX (so_fd[0], se_fd[0]) + 1, &rset2, NULL, NULL, NULL);
805 /* Need to return non-NULL *stderror here since most callers
806 * will try to print and then free the err string.
807 * Unfortunately recovery from strdup failure here is not
810 *stderror = strdup ("error running external command, "
811 "see debug output for details");
815 waitpid (pid, NULL, 0);
816 if (stdin_pid >= 0) waitpid (stdin_pid, NULL, 0);
820 if (FD_ISSET (so_fd[0], &rset2)) { /* something on stdout */
821 r = read (so_fd[0], buf, sizeof buf);
826 if (r == 0) { FD_CLR (so_fd[0], &rset); quit++; }
828 if (r > 0 && stdoutput) {
830 p = realloc (*stdoutput, so_size);
836 memcpy (*stdoutput + so_size - r, buf, r);
840 if (FD_ISSET (se_fd[0], &rset2)) { /* something on stderr */
841 r = read (se_fd[0], buf, sizeof buf);
846 if (r == 0) { FD_CLR (se_fd[0], &rset); quit++; }
850 ignore_value (write (2, buf, r));
854 p = realloc (*stderror, se_size);
860 memcpy (*stderror + se_size - r, buf, r);
869 /* Make sure the output buffers are \0-terminated. Also remove any
870 * trailing \n characters from the error buffer (not from stdout).
873 void *q = realloc (*stdoutput, so_size+1);
880 (*stdoutput)[so_size] = '\0';
883 void *q = realloc (*stderror, se_size+1);
890 (*stderror)[se_size] = '\0';
892 while (se_size >= 0 && (*stderror)[se_size] == '\n')
893 (*stderror)[se_size--] = '\0';
897 if (flag_copy_stdin) {
898 /* Check copy process didn't fail. */
899 if (waitpid (stdin_pid, &r, 0) != stdin_pid) {
902 waitpid (pid, NULL, 0);
906 if (!WIFEXITED (r) || WEXITSTATUS (r) != 0) {
907 fprintf (stderr, "failed copying from input file, see earlier messages\n");
909 waitpid (pid, NULL, 0);
914 /* Get the exit status of the command. */
915 if (waitpid (pid, &r, 0) != pid) {
921 return WEXITSTATUS (r);
926 /* Split an output string into a NULL-terminated list of lines.
927 * Typically this is used where we have run an external command
928 * which has printed out a list of things, and we want to return
931 * The corner cases here are quite tricky. Note in particular:
935 * "a\nb" -> ["a"; "b"]
936 * "a\nb\n" -> ["a"; "b"]
937 * "a\nb\n\n" -> ["a"; "b"; ""]
939 * The original string is written over and destroyed by this
940 * function (which is usually OK because it's the 'out' string
941 * from command()). You can free the original string, because
942 * add_string() strdups the strings.
945 split_lines (char *str)
948 int size = 0, alloc = 0;
956 /* Empty last line? */
960 pend = strchr (p, '\n');
966 if (add_string (&lines, &size, &alloc, p) == -1) {
974 if (add_string (&lines, &size, &alloc, NULL) == -1)
980 /* Skip leading and trailing whitespace, updating the original string
986 size_t len = strlen (str);
988 while (len > 0 && c_isspace (str[len-1])) {
994 while (*p && c_isspace (*p)) {
999 memmove (str, p, len+1);
1002 /* printf helper function so we can use %Q ("quoted") and %R to print
1003 * shell-quoted strings. See guestfs(3)/EXTENDING LIBGUESTFS for more
1007 print_shell_quote (FILE *stream,
1008 const struct printf_info *info ATTRIBUTE_UNUSED,
1009 const void *const *args)
1011 #define SAFE(c) (c_isalnum((c)) || \
1012 (c) == '/' || (c) == '-' || (c) == '_' || (c) == '.')
1014 const char *str = *((const char **) (args[0]));
1016 for (i = len = 0; str[i]; ++i) {
1017 if (!SAFE(str[i])) {
1018 putc ('\\', stream);
1021 putc (str[i], stream);
1029 print_sysroot_shell_quote (FILE *stream,
1030 const struct printf_info *info,
1031 const void *const *args)
1033 fputs (sysroot, stream);
1034 return sysroot_len + print_shell_quote (stream, info, args);
1037 #ifdef HAVE_REGISTER_PRINTF_SPECIFIER
1039 print_arginfo (const struct printf_info *info ATTRIBUTE_UNUSED,
1040 size_t n, int *argtypes, int *size)
1043 argtypes[0] = PA_STRING;
1044 size[0] = sizeof (const char *);
1049 #ifdef HAVE_REGISTER_PRINTF_FUNCTION
1051 print_arginfo (const struct printf_info *info, size_t n, int *argtypes)
1054 argtypes[0] = PA_STRING;
1058 #error "HAVE_REGISTER_PRINTF_{SPECIFIER|FUNCTION} not defined"
1062 /* Perform device name translation. Don't call this directly -
1063 * use the RESOLVE_DEVICE macro.
1065 * See guestfs(3) for the algorithm.
1067 * We have to open the device and test for ENXIO, because
1068 * the device nodes themselves will exist in the appliance.
1071 device_name_translation (char *device)
1075 fd = open (device, O_RDONLY);
1082 if (errno != ENXIO && errno != ENOENT)
1085 /* If the name begins with "/dev/sd" then try the alternatives. */
1086 if (STRNEQLEN (device, "/dev/sd", 7))
1089 device[5] = 'h'; /* /dev/hd (old IDE driver) */
1090 fd = open (device, O_RDONLY);
1094 device[5] = 'v'; /* /dev/vd (for virtio devices) */
1095 fd = open (device, O_RDONLY);
1099 device[5] = 's'; /* Restore original device name. */
1103 /* Check program exists and is executable on $PATH. Actually, we
1104 * just assume PATH contains the default entries (see main() above).
1107 prog_exists (const char *prog)
1109 static const char * const dirs[] =
1110 { "/sbin", "/usr/sbin", "/bin", "/usr/bin" };
1114 for (i = 0; i < sizeof dirs / sizeof dirs[0]; ++i) {
1115 snprintf (buf, sizeof buf, "%s/%s", dirs[i], prog);
1116 if (access (buf, X_OK) == 0)
1122 /* LVM and other commands aren't synchronous, especially when udev is
1123 * involved. eg. You can create or remove some device, but the /dev
1124 * device node won't appear until some time later. This means that
1125 * you get an error if you run one command followed by another.
1127 * Use 'udevadm settle' after certain commands, but don't be too
1128 * fussed if it fails.
1130 * 'udevsettle' was the old name for this command (RHEL 5). This was
1131 * deprecated in favour of 'udevadm settle'. The old 'udevsettle'
1132 * command was left as a symlink. Then in Fedora 13 the old symlink
1133 * remained but it stopped working (RHBZ#548121), so we have to be
1134 * careful not to assume that we can use 'udevsettle' if it exists.
1139 (void) command (NULL, NULL, "udevadm", "settle", NULL);
1140 (void) command (NULL, NULL, "udevsettle", NULL);