X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=daemon%2Fdebug.c;h=6e9e373000e79c30ac9d714a0b45d568b7a6693d;hb=f6e36bf361c587e0dbb2f0c71f5d22a7cf7f4f42;hp=e4a7f05586bf5a7cc76069541de8ba9def99f4d4;hpb=8be6c7056d18cd5aa5edddfc73bfd4206b038cee;p=libguestfs.git diff --git a/daemon/debug.c b/daemon/debug.c index e4a7f05..6e9e373 100644 --- a/daemon/debug.c +++ b/daemon/debug.c @@ -45,12 +45,16 @@ struct cmd { }; static char *debug_help (const char *subcmd, int argc, char *const *const argv); +static char *debug_env (const char *subcmd, int argc, char *const *const argv); static char *debug_fds (const char *subcmd, int argc, char *const *const argv); +static char *debug_segv (const char *subcmd, int argc, char *const *const argv); static char *debug_sh (const char *subcmd, int argc, char *const *const argv); static struct cmd cmds[] = { { "help", debug_help }, + { "env", debug_env }, { "fds", debug_fds }, + { "segv", debug_segv }, { "sh", debug_sh }, { NULL, NULL } }; @@ -177,6 +181,14 @@ debug_fds (const char *subcmd, int argc, char *const *const argv) return out; } +/* Force a segfault in the daemon. */ +static char * +debug_segv (const char *subcmd, int argc, char *const *const argv) +{ + *(int*)0 = 0; + return NULL; +} + /* Run an arbitrary shell command. */ static char * debug_sh (const char *subcmd, int argc, char *const *const argv) @@ -186,7 +198,27 @@ debug_sh (const char *subcmd, int argc, char *const *const argv) r = commandv (&out, &err, argv); if (r == -1) { - reply_with_error ("ps: %s", err); + reply_with_error ("sh: %s", err); + free (out); + free (err); + return NULL; + } + + free (err); + + return out; +} + +/* Print the environment that commands get (by running external printenv). */ +static char * +debug_env (const char *subcmd, int argc, char *const *const argv) +{ + int r; + char *out, *err; + + r = command (&out, &err, "printenv", NULL); + if (r == -1) { + reply_with_error ("printenv: %s", err); free (out); free (err); return NULL;