6373f34abd9d8ea65f4f40244c88e2a13c7b63c4
[libguestfs.git] / daemon / guestfsd.c
1 /* libguestfs - the guestfsd daemon
2  * Copyright (C) 2009-2011 Red Hat Inc.
3  *
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.
8  *
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.
13  *
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., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18
19 #include <config.h>
20
21 #ifdef HAVE_WINDOWS_H
22 # include <windows.h>
23 #endif
24
25 #include <stdio.h>
26 #include <stdlib.h>
27 #include <string.h>
28 #include <unistd.h>
29 #include <rpc/types.h>
30 #include <rpc/xdr.h>
31 #include <getopt.h>
32 #include <sys/param.h>
33 #include <sys/types.h>
34 #include <sys/stat.h>
35 #include <fcntl.h>
36 #include <signal.h>
37 #include <netdb.h>
38 #include <sys/select.h>
39 #include <sys/wait.h>
40 #include <arpa/inet.h>
41 #include <netinet/in.h>
42 #include <errno.h>
43
44 #ifdef HAVE_PRINTF_H
45 # include <printf.h>
46 #endif
47
48 #include "sockets.h"
49 #include "c-ctype.h"
50 #include "ignore-value.h"
51 #include "error.h"
52
53 #include "daemon.h"
54
55 static char *read_cmdline (void);
56
57 #ifndef MAX
58 # define MAX(a,b) ((a)>(b)?(a):(b))
59 #endif
60
61 /* Not the end of the world if this open flag is not defined. */
62 #ifndef O_CLOEXEC
63 # define O_CLOEXEC 0
64 #endif
65
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.
69  */
70 static dev_t root_device = 0;
71
72 int verbose = 0;
73
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);
78 #else
79 #ifdef HAVE_REGISTER_PRINTF_FUNCTION
80 static int print_arginfo (const struct printf_info *info, size_t n, int *argtypes);
81 #else
82 #error "HAVE_REGISTER_PRINTF_{SPECIFIER|FUNCTION} not defined"
83 #endif
84 #endif
85
86 #ifdef WIN32
87 static int
88 winsock_init (void)
89 {
90   int r;
91
92   /* http://msdn2.microsoft.com/en-us/library/ms742213.aspx */
93   r = gl_sockets_startup (SOCKETS_2_2);
94   return r == 0 ? 0 : -1;
95 }
96 #else /* !WIN32 */
97 static int
98 winsock_init (void)
99 {
100   return 0;
101 }
102 #endif /* !WIN32 */
103
104 /* Location to mount root device. */
105 const char *sysroot = "/sysroot"; /* No trailing slash. */
106 size_t sysroot_len = 8;
107
108 /* If set (the default), do 'umount-all' when performing autosync. */
109 int autosync_umount = 1;
110
111 /* Not used explicitly, but required by the gnulib 'error' module. */
112 const char *program_name = "guestfsd";
113
114 /* Name of the virtio-serial channel. */
115 #define VIRTIO_SERIAL_CHANNEL "/dev/virtio-ports/org.libguestfs.channel.0"
116
117 static void
118 usage (void)
119 {
120   fprintf (stderr,
121     "guestfsd [-r] [-v|--verbose]\n");
122 }
123
124 int
125 main (int argc, char *argv[])
126 {
127   static const char *options = "rv?";
128   static const struct option long_options[] = {
129     { "help", 0, 0, '?' },
130     { "verbose", 0, 0, 'v' },
131     { 0, 0, 0, 0 }
132   };
133   int c;
134   char *cmdline;
135
136   ignore_value (chdir ("/"));
137
138   if (winsock_init () == -1)
139     error (EXIT_FAILURE, 0, "winsock initialization failed");
140
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);
145 #else
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);
149 #else
150 #error "HAVE_REGISTER_PRINTF_{SPECIFIER|FUNCTION} not defined"
151 #endif
152 #endif
153
154   struct stat statbuf;
155   if (stat ("/", &statbuf) == 0)
156     root_device = statbuf.st_dev;
157
158   for (;;) {
159     c = getopt_long (argc, argv, options, long_options, NULL);
160     if (c == -1) break;
161
162     switch (c) {
163       /* The -r flag is used when running standalone.  It changes
164        * several aspects of the daemon.
165        */
166     case 'r':
167       sysroot = "";
168       sysroot_len = 0;
169       autosync_umount = 0;
170       break;
171
172     case 'v':
173       verbose = 1;
174       break;
175
176     case '?':
177       usage ();
178       exit (EXIT_SUCCESS);
179
180     default:
181       fprintf (stderr, "guestfsd: unexpected command line option 0x%x\n", c);
182       exit (EXIT_FAILURE);
183     }
184   }
185
186   if (optind < argc) {
187     usage ();
188     exit (EXIT_FAILURE);
189   }
190
191   cmdline = read_cmdline ();
192
193   /* Set the verbose flag. */
194   verbose = verbose ||
195     (cmdline && strstr (cmdline, "guestfs_verbose=1") != NULL);
196   if (verbose)
197     printf ("verbose daemon enabled\n");
198
199   if (verbose) {
200     if (cmdline)
201       printf ("linux commmand line: %s\n", cmdline);
202     else
203       printf ("could not read linux command line\n");
204   }
205
206 #ifndef WIN32
207   /* Make sure SIGPIPE doesn't kill us. */
208   struct sigaction sa;
209   memset (&sa, 0, sizeof sa);
210   sa.sa_handler = SIG_IGN;
211   sa.sa_flags = 0;
212   if (sigaction (SIGPIPE, &sa, NULL) == -1)
213     perror ("sigaction SIGPIPE"); /* but try to continue anyway ... */
214 #endif
215
216 #ifdef WIN32
217 # define setenv(n,v,f) _putenv(n "=" v)
218 #endif
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
222    *
223    * NOTE: if you change $PATH, you must also change 'prog_exists'
224    * function below.
225    */
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);
230
231 #ifndef WIN32
232   /* We document that umask defaults to 022 (it should be this anyway). */
233   umask (022);
234 #else
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.
238    */
239   _umask (0);
240 #endif
241
242   /* Make a private copy of /etc/lvm so we can change the config (see
243    * daemon/lvm-filter.c).
244    */
245   copy_lvm ();
246
247   /* Connect to virtio-serial channel. */
248   int sock = open (VIRTIO_SERIAL_CHANNEL, O_RDWR | O_CLOEXEC);
249   if (sock == -1) {
250     fprintf (stderr,
251              "\n"
252              "Failed to connect to virtio-serial channel.\n"
253              "\n"
254              "This is a fatal error and the appliance will now exit.\n"
255              "\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"
262              "\n");
263     perror (VIRTIO_SERIAL_CHANNEL);
264     exit (EXIT_FAILURE);
265   }
266
267   /* Send the magic length message which indicates that
268    * userspace is up inside the guest.
269    */
270   char lenbuf[4];
271   XDR xdr;
272   uint32_t len = GUESTFS_LAUNCH_FLAG;
273   xdrmem_create (&xdr, lenbuf, sizeof lenbuf, XDR_ENCODE);
274   xdr_u_int (&xdr, &len);
275
276   if (xwrite (sock, lenbuf, sizeof lenbuf) == -1) {
277     perror ("xwrite");
278     exit (EXIT_FAILURE);
279   }
280
281   xdr_destroy (&xdr);
282
283   /* Enter the main loop, reading and performing actions. */
284   main_loop (sock);
285
286   exit (EXIT_SUCCESS);
287 }
288
289 /* Read /proc/cmdline. */
290 static char *
291 read_cmdline (void)
292 {
293   int fd = open ("/proc/cmdline", O_RDONLY);
294   if (fd == -1) {
295     perror ("/proc/cmdline");
296     return NULL;
297   }
298
299   size_t len = 0;
300   ssize_t n;
301   char buf[256];
302   char *r = NULL;
303
304   for (;;) {
305     n = read (fd, buf, sizeof buf);
306     if (n == -1) {
307       perror ("read");
308       free (r);
309       close (fd);
310       return NULL;
311     }
312     if (n == 0)
313       break;
314     char *newr = realloc (r, len + n + 1); /* + 1 is for terminating NUL */
315     if (newr == NULL) {
316       perror ("realloc");
317       free (r);
318       close (fd);
319       return NULL;
320     }
321     r = newr;
322     memcpy (&r[len], buf, n);
323     len += n;
324   }
325
326   if (r)
327     r[len] = '\0';
328
329   if (close (fd) == -1) {
330     perror ("close");
331     free (r);
332     return NULL;
333   }
334
335   return r;
336 }
337
338 /* Return true iff device is the root device (and therefore should be
339  * ignored from the point of view of user calls).
340  */
341 int
342 is_root_device (const char *device)
343 {
344   struct stat statbuf;
345   if (stat (device, &statbuf) == -1) {
346     perror (device);
347     return 0;
348   }
349   if (statbuf.st_rdev == root_device)
350     return 1;
351   return 0;
352 }
353
354 /* Turn "/path" into "/sysroot/path".
355  *
356  * Caller must check for NULL and call reply_with_perror ("malloc")
357  * if it is.  Caller must also free the string.
358  *
359  * See also the custom %R printf formatter which does shell quoting too.
360  */
361 char *
362 sysroot_path (const char *path)
363 {
364   char *r;
365   int len = strlen (path) + sysroot_len + 1;
366
367   r = malloc (len);
368   if (r == NULL)
369     return NULL;
370
371   snprintf (r, len, "%s%s", sysroot, path);
372   return r;
373 }
374
375 int
376 xwrite (int sock, const void *v_buf, size_t len)
377 {
378   int r;
379   const char *buf = v_buf;
380
381   while (len > 0) {
382     r = write (sock, buf, len);
383     if (r == -1) {
384       perror ("write");
385       return -1;
386     }
387     buf += r;
388     len -= r;
389   }
390
391   return 0;
392 }
393
394 int
395 xread (int sock, void *v_buf, size_t len)
396 {
397   int r;
398   char *buf = v_buf;
399
400   while (len > 0) {
401     r = read (sock, buf, len);
402     if (r == -1) {
403       perror ("read");
404       return -1;
405     }
406     if (r == 0) {
407       fprintf (stderr, "read: unexpected end of file on fd %d\n", sock);
408       return -1;
409     }
410     buf += r;
411     len -= r;
412   }
413
414   return 0;
415 }
416
417 int
418 add_string (char ***argv, int *size, int *alloc, const char *str)
419 {
420   char **new_argv;
421   char *new_str;
422
423   if (*size >= *alloc) {
424     *alloc += 64;
425     new_argv = realloc (*argv, *alloc * sizeof (char *));
426     if (new_argv == NULL) {
427       reply_with_perror ("realloc");
428       free_strings (*argv);
429       return -1;
430     }
431     *argv = new_argv;
432   }
433
434   if (str) {
435     new_str = strdup (str);
436     if (new_str == NULL) {
437       reply_with_perror ("strdup");
438       free_strings (*argv);
439       return -1;
440     }
441   } else
442     new_str = NULL;
443
444   (*argv)[*size] = new_str;
445
446   (*size)++;
447   return 0;
448 }
449
450 size_t
451 count_strings (char *const *argv)
452 {
453   size_t argc;
454
455   for (argc = 0; argv[argc] != NULL; ++argc)
456     ;
457   return argc;
458 }
459
460 /* http://graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2 */
461 int
462 is_power_of_2 (unsigned long v)
463 {
464   return v && ((v & (v - 1)) == 0);
465 }
466
467 static int
468 compare (const void *vp1, const void *vp2)
469 {
470   char * const *p1 = (char * const *) vp1;
471   char * const *p2 = (char * const *) vp2;
472   return strcmp (*p1, *p2);
473 }
474
475 void
476 sort_strings (char **argv, int len)
477 {
478   qsort (argv, len, sizeof (char *), compare);
479 }
480
481 void
482 free_strings (char **argv)
483 {
484   int argc;
485
486   for (argc = 0; argv[argc] != NULL; ++argc)
487     free (argv[argc]);
488   free (argv);
489 }
490
491 void
492 free_stringslen (char **argv, int len)
493 {
494   int i;
495
496   for (i = 0; i < len; ++i)
497     free (argv[i]);
498   free (argv);
499 }
500
501 /* Easy ways to run external commands.  For full documentation, see
502  * 'commandrvf' below.
503  */
504 int
505 commandf (char **stdoutput, char **stderror, int flags, const char *name, ...)
506 {
507   va_list args;
508   const char **argv;
509   char *s;
510   int i, r;
511
512   /* Collect the command line arguments into an array. */
513   i = 2;
514   argv = malloc (sizeof (char *) * i);
515   if (argv == NULL) {
516     perror ("malloc");
517     return -1;
518   }
519   argv[0] = (char *) name;
520   argv[1] = NULL;
521
522   va_start (args, name);
523
524   while ((s = va_arg (args, char *)) != NULL) {
525     const char **p = realloc (argv, sizeof (char *) * (++i));
526     if (p == NULL) {
527       perror ("realloc");
528       free (argv);
529       va_end (args);
530       return -1;
531     }
532     argv = p;
533     argv[i-2] = s;
534     argv[i-1] = NULL;
535   }
536
537   va_end (args);
538
539   r = commandvf (stdoutput, stderror, flags, (const char * const*) argv);
540
541   /* NB: Mustn't free the strings which are on the stack. */
542   free (argv);
543
544   return r;
545 }
546
547 /* Same as 'command', but we allow the status code from the
548  * subcommand to be non-zero, and return that status code.
549  * We still return -1 if there was some other error.
550  */
551 int
552 commandrf (char **stdoutput, char **stderror, int flags, const char *name, ...)
553 {
554   va_list args;
555   const char **argv;
556   char *s;
557   int i, r;
558
559   /* Collect the command line arguments into an array. */
560   i = 2;
561   argv = malloc (sizeof (char *) * i);
562   if (argv == NULL) {
563     perror ("malloc");
564     return -1;
565   }
566   argv[0] = (char *) name;
567   argv[1] = NULL;
568
569   va_start (args, name);
570
571   while ((s = va_arg (args, char *)) != NULL) {
572     const char **p = realloc (argv, sizeof (char *) * (++i));
573     if (p == NULL) {
574       perror ("realloc");
575       free (argv);
576       va_end (args);
577       return -1;
578     }
579     argv = p;
580     argv[i-2] = s;
581     argv[i-1] = NULL;
582   }
583
584   va_end (args);
585
586   r = commandrvf (stdoutput, stderror, flags, argv);
587
588   /* NB: Mustn't free the strings which are on the stack. */
589   free (argv);
590
591   return r;
592 }
593
594 /* Same as 'command', but passing an argv. */
595 int
596 commandvf (char **stdoutput, char **stderror, int flags,
597            char const *const *argv)
598 {
599   int r;
600
601   r = commandrvf (stdoutput, stderror, flags, (void *) argv);
602   if (r == 0)
603     return 0;
604   else
605     return -1;
606 }
607
608 /* This is a more sane version of 'system(3)' for running external
609  * commands.  It uses fork/execvp, so we don't need to worry about
610  * quoting of parameters, and it allows us to capture any error
611  * messages in a buffer.
612  *
613  * If stdoutput is not NULL, then *stdoutput will return the stdout
614  * of the command.
615  *
616  * If stderror is not NULL, then *stderror will return the stderr
617  * of the command.  If there is a final \n character, it is removed
618  * so you can use the error string directly in a call to
619  * reply_with_error.
620  *
621  * Flags:
622  *
623  * COMMAND_FLAG_FOLD_STDOUT_ON_STDERR: For broken external commands
624  * that send error messages to stdout (hello, parted) but that don't
625  * have any useful stdout information, use this flag to capture the
626  * error messages in the *stderror buffer.  If using this flag,
627  * you should pass stdoutput as NULL because nothing could ever be
628  * captured in that buffer.
629  *
630  * COMMAND_FLAG_CHROOT_COPY_FILE_TO_STDIN: For running external
631  * commands on chrooted files correctly (see RHBZ#579608) specifying
632  * this flag causes another process to be forked which chroots into
633  * sysroot and just copies the input file to stdin of the specified
634  * command.  The file descriptor is ORed with the flags, and that file
635  * descriptor is always closed by this function.  See hexdump.c for an
636  * example of usage.
637  */
638 int
639 commandrvf (char **stdoutput, char **stderror, int flags,
640             char const* const *argv)
641 {
642   int so_size = 0, se_size = 0;
643   int so_fd[2], se_fd[2];
644   int flag_copy_stdin = flags & COMMAND_FLAG_CHROOT_COPY_FILE_TO_STDIN;
645   int stdin_fd[2] = { -1, -1 };
646   pid_t pid, stdin_pid = -1;
647   int r, quit, i;
648   fd_set rset, rset2;
649   char buf[256];
650   char *p;
651
652   if (stdoutput) *stdoutput = NULL;
653   if (stderror) *stderror = NULL;
654
655   if (verbose) {
656     printf ("%s", argv[0]);
657     for (i = 1; argv[i] != NULL; ++i)
658       printf (" %s", argv[i]);
659     printf ("\n");
660   }
661
662   /* Note: abort is used in a few places along the error paths early
663    * in this function.  This is because (a) cleaning up correctly is
664    * very complex at these places and (b) abort is used when a
665    * resource problems is indicated which would be due to much more
666    * serious issues - eg. memory or file descriptor leaks.  We
667    * wouldn't expect fork(2) or pipe(2) to fail in normal
668    * circumstances.
669    */
670
671   if (pipe (so_fd) == -1 || pipe (se_fd) == -1) {
672     error (0, errno, "pipe");
673     abort ();
674   }
675
676   if (flag_copy_stdin) {
677     if (pipe (stdin_fd) == -1) {
678       error (0, errno, "pipe");
679       abort ();
680     }
681   }
682
683   pid = fork ();
684   if (pid == -1) {
685     error (0, errno, "fork");
686     abort ();
687   }
688
689   if (pid == 0) {               /* Child process running the command. */
690     signal (SIGALRM, SIG_DFL);
691     signal (SIGPIPE, SIG_DFL);
692     close (0);
693     if (flag_copy_stdin) {
694       dup2 (stdin_fd[0], 0);
695       close (stdin_fd[0]);
696       close (stdin_fd[1]);
697     } else {
698       /* Set stdin to /dev/null (ignore failure) */
699       ignore_value (open ("/dev/null", O_RDONLY));
700     }
701     close (so_fd[0]);
702     close (se_fd[0]);
703     if (!(flags & COMMAND_FLAG_FOLD_STDOUT_ON_STDERR))
704       dup2 (so_fd[1], 1);
705     else
706       dup2 (se_fd[1], 1);
707     dup2 (se_fd[1], 2);
708     close (so_fd[1]);
709     close (se_fd[1]);
710
711     execvp (argv[0], (void *) argv);
712     perror (argv[0]);
713     _exit (EXIT_FAILURE);
714   }
715
716   if (flag_copy_stdin) {
717     int fd = flags & COMMAND_FLAG_FD_MASK;
718
719     stdin_pid = fork ();
720     if (stdin_pid == -1) {
721       error (0, errno, "fork");
722       abort ();
723     }
724
725     if (stdin_pid == 0) {       /* Child process copying stdin. */
726       close (so_fd[0]);
727       close (so_fd[1]);
728       close (se_fd[0]);
729       close (se_fd[1]);
730
731       close (1);
732       dup2 (stdin_fd[1], 1);
733       close (stdin_fd[0]);
734       close (stdin_fd[1]);
735
736       if (chroot (sysroot) == -1) {
737         perror ("chroot");
738         _exit (EXIT_FAILURE);
739       }
740
741       ssize_t n;
742       char buffer[BUFSIZ];
743       while ((n = read (fd, buffer, sizeof buffer)) > 0) {
744         if (xwrite (1, buffer, n) == -1)
745           /* EPIPE error indicates the command process has exited
746            * early.  If the command process fails that will be caught
747            * by the daemon, and if not, then it's not an error.
748            */
749           _exit (errno == EPIPE ? EXIT_SUCCESS : EXIT_FAILURE);
750       }
751
752       if (n == -1) {
753         perror ("read");
754         _exit (EXIT_FAILURE);
755       }
756
757       if (close (fd) == -1) {
758         perror ("close");
759         _exit (EXIT_FAILURE);
760       }
761
762       _exit (EXIT_SUCCESS);
763     }
764
765     close (fd);
766     close (stdin_fd[0]);
767     close (stdin_fd[1]);
768   }
769
770   /* Parent process. */
771   close (so_fd[1]);
772   close (se_fd[1]);
773
774   FD_ZERO (&rset);
775   FD_SET (so_fd[0], &rset);
776   FD_SET (se_fd[0], &rset);
777
778   quit = 0;
779   while (quit < 2) {
780   again:
781     rset2 = rset;
782     r = select (MAX (so_fd[0], se_fd[0]) + 1, &rset2, NULL, NULL, NULL);
783     if (r == -1) {
784       if (errno == EINTR)
785         goto again;
786
787       perror ("select");
788     quit:
789       if (stdoutput) {
790         free (*stdoutput);
791         *stdoutput = NULL;
792       }
793       if (stderror) {
794         free (*stderror);
795         /* Need to return non-NULL *stderror here since most callers
796          * will try to print and then free the err string.
797          * Unfortunately recovery from strdup failure here is not
798          * possible.
799          */
800         *stderror = strdup ("error running external command, "
801                             "see debug output for details");
802       }
803       close (so_fd[0]);
804       close (se_fd[0]);
805       waitpid (pid, NULL, 0);
806       if (stdin_pid >= 0) waitpid (stdin_pid, NULL, 0);
807       return -1;
808     }
809
810     if (FD_ISSET (so_fd[0], &rset2)) { /* something on stdout */
811       r = read (so_fd[0], buf, sizeof buf);
812       if (r == -1) {
813         perror ("read");
814         goto quit;
815       }
816       if (r == 0) { FD_CLR (so_fd[0], &rset); quit++; }
817
818       if (r > 0 && stdoutput) {
819         so_size += r;
820         p = realloc (*stdoutput, so_size);
821         if (p == NULL) {
822           perror ("realloc");
823           goto quit;
824         }
825         *stdoutput = p;
826         memcpy (*stdoutput + so_size - r, buf, r);
827       }
828     }
829
830     if (FD_ISSET (se_fd[0], &rset2)) { /* something on stderr */
831       r = read (se_fd[0], buf, sizeof buf);
832       if (r == -1) {
833         perror ("read");
834         goto quit;
835       }
836       if (r == 0) { FD_CLR (se_fd[0], &rset); quit++; }
837
838       if (r > 0) {
839         if (verbose)
840           ignore_value (write (2, buf, r));
841
842         if (stderror) {
843           se_size += r;
844           p = realloc (*stderror, se_size);
845           if (p == NULL) {
846             perror ("realloc");
847             goto quit;
848           }
849           *stderror = p;
850           memcpy (*stderror + se_size - r, buf, r);
851         }
852       }
853     }
854   }
855
856   close (so_fd[0]);
857   close (se_fd[0]);
858
859   /* Make sure the output buffers are \0-terminated.  Also remove any
860    * trailing \n characters from the error buffer (not from stdout).
861    */
862   if (stdoutput) {
863     void *q = realloc (*stdoutput, so_size+1);
864     if (q == NULL) {
865       perror ("realloc");
866       free (*stdoutput);
867     }
868     *stdoutput = q;
869     if (*stdoutput)
870       (*stdoutput)[so_size] = '\0';
871   }
872   if (stderror) {
873     void *q = realloc (*stderror, se_size+1);
874     if (q == NULL) {
875       perror ("realloc");
876       free (*stderror);
877     }
878     *stderror = q;
879     if (*stderror) {
880       (*stderror)[se_size] = '\0';
881       se_size--;
882       while (se_size >= 0 && (*stderror)[se_size] == '\n')
883         (*stderror)[se_size--] = '\0';
884     }
885   }
886
887   if (flag_copy_stdin) {
888     /* Check copy process didn't fail. */
889     if (waitpid (stdin_pid, &r, 0) != stdin_pid) {
890       perror ("waitpid");
891       kill (pid, 9);
892       waitpid (pid, NULL, 0);
893       return -1;
894     }
895
896     if (!WIFEXITED (r) || WEXITSTATUS (r) != 0) {
897       fprintf (stderr, "failed copying from input file, see earlier messages\n");
898       kill (pid, 9);
899       waitpid (pid, NULL, 0);
900       return -1;
901     }
902   }
903
904   /* Get the exit status of the command. */
905   if (waitpid (pid, &r, 0) != pid) {
906     perror ("waitpid");
907     return -1;
908   }
909
910   if (WIFEXITED (r)) {
911     return WEXITSTATUS (r);
912   } else
913     return -1;
914 }
915
916 /* Split an output string into a NULL-terminated list of lines.
917  * Typically this is used where we have run an external command
918  * which has printed out a list of things, and we want to return
919  * an actual list.
920  *
921  * The corner cases here are quite tricky.  Note in particular:
922  *
923  *   "" -> []
924  *   "\n" -> [""]
925  *   "a\nb" -> ["a"; "b"]
926  *   "a\nb\n" -> ["a"; "b"]
927  *   "a\nb\n\n" -> ["a"; "b"; ""]
928  *
929  * The original string is written over and destroyed by this
930  * function (which is usually OK because it's the 'out' string
931  * from command()).  You can free the original string, because
932  * add_string() strdups the strings.
933  */
934 char **
935 split_lines (char *str)
936 {
937   char **lines = NULL;
938   int size = 0, alloc = 0;
939   char *p, *pend;
940
941   if (STREQ (str, ""))
942     goto empty_list;
943
944   p = str;
945   while (p) {
946     /* Empty last line? */
947     if (p[0] == '\0')
948       break;
949
950     pend = strchr (p, '\n');
951     if (pend) {
952       *pend = '\0';
953       pend++;
954     }
955
956     if (add_string (&lines, &size, &alloc, p) == -1) {
957       return NULL;
958     }
959
960     p = pend;
961   }
962
963  empty_list:
964   if (add_string (&lines, &size, &alloc, NULL) == -1)
965     return NULL;
966
967   return lines;
968 }
969
970 /* Skip leading and trailing whitespace, updating the original string
971  * in-place.
972  */
973 void
974 trim (char *str)
975 {
976   size_t len = strlen (str);
977
978   while (len > 0 && c_isspace (str[len-1])) {
979     str[len-1] = '\0';
980     len--;
981   }
982
983   const char *p = str;
984   while (*p && c_isspace (*p)) {
985     p++;
986     len--;
987   }
988
989   memmove (str, p, len+1);
990 }
991
992 /* printf helper function so we can use %Q ("quoted") and %R to print
993  * shell-quoted strings.  See guestfs(3)/EXTENDING LIBGUESTFS for more
994  * details.
995  */
996 static int
997 print_shell_quote (FILE *stream,
998                    const struct printf_info *info ATTRIBUTE_UNUSED,
999                    const void *const *args)
1000 {
1001 #define SAFE(c) (c_isalnum((c)) ||                                      \
1002                  (c) == '/' || (c) == '-' || (c) == '_' || (c) == '.')
1003   int i, len;
1004   const char *str = *((const char **) (args[0]));
1005
1006   for (i = len = 0; str[i]; ++i) {
1007     if (!SAFE(str[i])) {
1008       putc ('\\', stream);
1009       len ++;
1010     }
1011     putc (str[i], stream);
1012     len ++;
1013   }
1014
1015   return len;
1016 }
1017
1018 static int
1019 print_sysroot_shell_quote (FILE *stream,
1020                            const struct printf_info *info,
1021                            const void *const *args)
1022 {
1023   fputs (sysroot, stream);
1024   return sysroot_len + print_shell_quote (stream, info, args);
1025 }
1026
1027 #ifdef HAVE_REGISTER_PRINTF_SPECIFIER
1028 static int
1029 print_arginfo (const struct printf_info *info ATTRIBUTE_UNUSED,
1030                size_t n, int *argtypes, int *size)
1031 {
1032   if (n > 0) {
1033     argtypes[0] = PA_STRING;
1034     size[0] = sizeof (const char *);
1035   }
1036   return 1;
1037 }
1038 #else
1039 #ifdef HAVE_REGISTER_PRINTF_FUNCTION
1040 static int
1041 print_arginfo (const struct printf_info *info, size_t n, int *argtypes)
1042 {
1043   if (n > 0)
1044     argtypes[0] = PA_STRING;
1045   return 1;
1046 }
1047 #else
1048 #error "HAVE_REGISTER_PRINTF_{SPECIFIER|FUNCTION} not defined"
1049 #endif
1050 #endif
1051
1052 /* Perform device name translation.  Don't call this directly -
1053  * use the RESOLVE_DEVICE macro.
1054  *
1055  * See guestfs(3) for the algorithm.
1056  *
1057  * We have to open the device and test for ENXIO, because
1058  * the device nodes themselves will exist in the appliance.
1059  */
1060 int
1061 device_name_translation (char *device)
1062 {
1063   int fd;
1064
1065   fd = open (device, O_RDONLY);
1066   if (fd >= 0) {
1067   close_ok:
1068     close (fd);
1069     return 0;
1070   }
1071
1072   if (errno != ENXIO && errno != ENOENT)
1073     return -1;
1074
1075   /* If the name begins with "/dev/sd" then try the alternatives. */
1076   if (STRNEQLEN (device, "/dev/sd", 7))
1077     return -1;
1078
1079   device[5] = 'h';              /* /dev/hd (old IDE driver) */
1080   fd = open (device, O_RDONLY);
1081   if (fd >= 0)
1082     goto close_ok;
1083
1084   device[5] = 'v';              /* /dev/vd (for virtio devices) */
1085   fd = open (device, O_RDONLY);
1086   if (fd >= 0)
1087     goto close_ok;
1088
1089   device[5] = 's';              /* Restore original device name. */
1090   return -1;
1091 }
1092
1093 /* Check program exists and is executable on $PATH.  Actually, we
1094  * just assume PATH contains the default entries (see main() above).
1095  */
1096 int
1097 prog_exists (const char *prog)
1098 {
1099   static const char * const dirs[] =
1100     { "/sbin", "/usr/sbin", "/bin", "/usr/bin" };
1101   size_t i;
1102   char buf[1024];
1103
1104   for (i = 0; i < sizeof dirs / sizeof dirs[0]; ++i) {
1105     snprintf (buf, sizeof buf, "%s/%s", dirs[i], prog);
1106     if (access (buf, X_OK) == 0)
1107       return 1;
1108   }
1109   return 0;
1110 }
1111
1112 /* LVM and other commands aren't synchronous, especially when udev is
1113  * involved.  eg. You can create or remove some device, but the /dev
1114  * device node won't appear until some time later.  This means that
1115  * you get an error if you run one command followed by another.
1116  *
1117  * Use 'udevadm settle' after certain commands, but don't be too
1118  * fussed if it fails.
1119  *
1120  * 'udevsettle' was the old name for this command (RHEL 5).  This was
1121  * deprecated in favour of 'udevadm settle'.  The old 'udevsettle'
1122  * command was left as a symlink.  Then in Fedora 13 the old symlink
1123  * remained but it stopped working (RHBZ#548121), so we have to be
1124  * careful not to assume that we can use 'udevsettle' if it exists.
1125  */
1126 void
1127 udev_settle (void)
1128 {
1129   (void) command (NULL, NULL, "udevadm", "settle", NULL);
1130   (void) command (NULL, NULL, "udevsettle", NULL);
1131 }