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