X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=daemon%2Fguestfsd.c;h=bfd8139241ab0c5b0ae0632f2cb1d29619c1d186;hb=d5fad33b4eaa39722ea1dc96de9446ffc4805e01;hp=07a1c5e0e278e302e2014affd502299a34913e10;hpb=2f1a50d81671810256dce0852e6b1e0810ac44af;p=libguestfs.git diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c index 07a1c5e..bfd8139 100644 --- a/daemon/guestfsd.c +++ b/daemon/guestfsd.c @@ -43,8 +43,8 @@ static void usage (void); /* Also in guestfs.c */ -#define VMCHANNEL_PORT "6666" -#define VMCHANNEL_ADDR "10.0.2.4" +#define GUESTFWD_PORT "6666" +#define GUESTFWD_ADDR "10.0.2.4" int verbose = 0; @@ -67,18 +67,14 @@ int sysroot_len = 8; int main (int argc, char *argv[]) { - static const char *options = "fh:p:?"; + static const char *options = "f?"; static const struct option long_options[] = { { "foreground", 0, 0, 'f' }, { "help", 0, 0, '?' }, - { "host", 1, 0, 'h' }, - { "port", 1, 0, 'p' }, { 0, 0, 0, 0 } }; int c, n, r; int dont_fork = 0; - const char *host = NULL; - const char *port = NULL; FILE *fp; char buf[4096]; char *p, *p2; @@ -111,14 +107,6 @@ main (int argc, char *argv[]) dont_fork = 1; break; - case 'h': - host = optarg; - break; - - case 'p': - port = optarg; - break; - case '?': usage (); exit (0); @@ -134,47 +122,21 @@ main (int argc, char *argv[]) exit (1); } - /* If host and port aren't set yet, try /proc/cmdline. */ - if (!host || !port) { - fp = fopen ("/proc/cmdline", "r"); - if (fp == NULL) { - perror ("/proc/cmdline"); - goto next; - } - n = fread (buf, 1, sizeof buf - 1, fp); - fclose (fp); - buf[n] = '\0'; - - /* Set the verbose flag. Not quite right because this will only - * set the flag if host and port aren't set on the command line. - * Don't worry about this for now. (XXX) - */ - verbose = strstr (buf, "guestfs_verbose=1") != NULL; - if (verbose) - printf ("verbose daemon enabled\n"); - - p = strstr (buf, "guestfs="); - - if (p) { - p += 8; - p2 = strchr (p, ':'); - if (p2) { - *p2++ = '\0'; - host = p; - r = strcspn (p2, " \n"); - p2[r] = '\0'; - port = p2; - } - } + /* Set the verbose flag. */ + fp = fopen ("/proc/cmdline", "r"); + if (fp == NULL) { + perror ("/proc/cmdline"); + goto next; } + n = fread (buf, 1, sizeof buf - 1, fp); + fclose (fp); + buf[n] = '\0'; - next: - /* Can't parse /proc/cmdline, so use built-in defaults. */ - if (!host || !port) { - host = VMCHANNEL_ADDR; - port = VMCHANNEL_PORT; - } + verbose = strstr (buf, "guestfs_verbose=1") != NULL; + if (verbose) + printf ("verbose daemon enabled\n"); + next: /* Make sure SIGPIPE doesn't kill us. */ memset (&sa, 0, sizeof sa); sa.sa_handler = SIG_IGN; @@ -188,7 +150,7 @@ main (int argc, char *argv[]) */ setenv ("PATH", "/usr/bin:/bin", 1); setenv ("SHELL", "/bin/sh", 1); - setenv ("LANG", "C", 1); + setenv ("LC_ALL", "C", 1); /* We document that umask defaults to 022 (it should be this anyway). */ umask (022); @@ -197,9 +159,10 @@ main (int argc, char *argv[]) memset (&hints, 0, sizeof hints); hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_ADDRCONFIG; - r = getaddrinfo (host, port, &hints, &res); + r = getaddrinfo (GUESTFWD_ADDR, GUESTFWD_PORT, &hints, &res); if (r != 0) { - fprintf (stderr, "%s:%s: %s\n", host, port, gai_strerror (r)); + fprintf (stderr, "%s:%s: %s\n", + GUESTFWD_ADDR, GUESTFWD_PORT, gai_strerror (r)); exit (1); } @@ -219,7 +182,8 @@ main (int argc, char *argv[]) freeaddrinfo (res); if (sock == -1) { - fprintf (stderr, "connection to %s:%s failed\n", host, port); + fprintf (stderr, "connection to %s:%s failed\n", + GUESTFWD_ADDR, GUESTFWD_PORT); exit (1); } @@ -233,7 +197,8 @@ main (int argc, char *argv[]) exit (1); } - (void) xwrite (sock, buf, xdr_getpos (&xdr)); + if (xwrite (sock, buf, xdr_getpos (&xdr)) == -1) + exit (1); xdr_destroy (&xdr); @@ -273,9 +238,10 @@ sysroot_path (const char *path) } int -xwrite (int sock, const void *buf, size_t len) +xwrite (int sock, const void *v_buf, size_t len) { int r; + const char *buf = v_buf; while (len > 0) { r = write (sock, buf, len); @@ -291,9 +257,10 @@ xwrite (int sock, const void *buf, size_t len) } int -xread (int sock, void *buf, size_t len) +xread (int sock, void *v_buf, size_t len) { int r; + char *buf = v_buf; while (len > 0) { r = read (sock, buf, len); @@ -315,7 +282,7 @@ xread (int sock, void *buf, size_t len) static void usage (void) { - fprintf (stderr, "guestfsd [-f] [-h host -p port]\n"); + fprintf (stderr, "guestfsd [-f]\n"); } int @@ -351,7 +318,7 @@ add_string (char ***argv, int *size, int *alloc, const char *str) } int -count_strings (char * const* const argv) +count_strings (char *const *argv) { int argc; @@ -403,7 +370,7 @@ int command (char **stdoutput, char **stderror, const char *name, ...) { va_list args; - char **argv, **p; + const char **argv; char *s; int i, r; @@ -420,7 +387,7 @@ command (char **stdoutput, char **stderror, const char *name, ...) va_start (args, name); while ((s = va_arg (args, char *)) != NULL) { - p = realloc (argv, sizeof (char *) * (++i)); + const char **p = realloc (argv, sizeof (char *) * (++i)); if (p == NULL) { perror ("realloc"); free (argv); @@ -434,7 +401,7 @@ command (char **stdoutput, char **stderror, const char *name, ...) va_end (args); - r = commandv (stdoutput, stderror, argv); + r = commandv (stdoutput, stderror, (char **) argv); /* NB: Mustn't free the strings which are on the stack. */ free (argv); @@ -450,7 +417,7 @@ int commandr (char **stdoutput, char **stderror, const char *name, ...) { va_list args; - char **argv, **p; + const char **argv; char *s; int i, r; @@ -467,7 +434,7 @@ commandr (char **stdoutput, char **stderror, const char *name, ...) va_start (args, name); while ((s = va_arg (args, char *)) != NULL) { - p = realloc (argv, sizeof (char *) * (++i)); + const char **p = realloc (argv, sizeof (char *) * (++i)); if (p == NULL) { perror ("realloc"); free (argv); @@ -491,11 +458,11 @@ commandr (char **stdoutput, char **stderror, const char *name, ...) /* Same as 'command', but passing an argv. */ int -commandv (char **stdoutput, char **stderror, char * const* const argv) +commandv (char **stdoutput, char **stderror, char *const *argv) { int r; - r = commandrv (stdoutput, stderror, argv); + r = commandrv (stdoutput, stderror, (void *) argv); if (r == 0) return 0; else @@ -503,7 +470,7 @@ commandv (char **stdoutput, char **stderror, char * const* const argv) } int -commandrv (char **stdoutput, char **stderror, char * const* const argv) +commandrv (char **stdoutput, char **stderror, char const* const *argv) { int so_size = 0, se_size = 0; int so_fd[2], se_fd[2]; @@ -547,7 +514,7 @@ commandrv (char **stdoutput, char **stderror, char * const* const argv) close (so_fd[1]); close (se_fd[1]); - execvp (argv[0], argv); + execvp (argv[0], (void *) argv); perror (argv[0]); _exit (1); } @@ -718,7 +685,7 @@ split_lines (char *str) */ static int print_shell_quote (FILE *stream, - const struct printf_info *info, + const struct printf_info *info ATTRIBUTE_UNUSED, const void *const *args) { #define SAFE(c) (isalnum((c)) || \ @@ -743,15 +710,13 @@ print_sysroot_shell_quote (FILE *stream, const struct printf_info *info, const void *const *args) { -#define SAFE(c) (isalnum((c)) || \ - (c) == '/' || (c) == '-' || (c) == '_' || (c) == '.') fputs (sysroot, stream); return sysroot_len + print_shell_quote (stream, info, args); } #ifdef HAVE_REGISTER_PRINTF_SPECIFIER static int -print_arginfo (const struct printf_info *info, +print_arginfo (const struct printf_info *info ATTRIBUTE_UNUSED, size_t n, int *argtypes, int *size) { if (n > 0) { @@ -775,7 +740,7 @@ print_arginfo (const struct printf_info *info, size_t n, int *argtypes) #endif /* Perform device name translation. Don't call this directly - - * use the IS_DEVICE macro. + * use the RESOLVE_DEVICE macro. * * See guestfs(3) for the algorithm. *