int main (int argc, char **argv) { GOptionContext *context; GError *error = NULL; int ret; static gboolean opt_packages = FALSE; static gboolean opt_version = FALSE; static gchar *opt_interactive = NULL; static GOptionEntry entries[] = { { "interact", 0, 0, G_OPTION_ARG_STRING, &opt_interactive, "Interact with the raw protocol", "boundary" }, { "packages", 0, 0, G_OPTION_ARG_NONE, &opt_packages, "Show Cockpit package information", NULL }, { "version", 0, 0, G_OPTION_ARG_NONE, &opt_version, "Show Cockpit version information", NULL }, { NULL } }; signal (SIGPIPE, SIG_IGN); /* Debugging issues during testing */ #if WITH_DEBUG signal (SIGABRT, cockpit_test_signal_backtrace); signal (SIGSEGV, cockpit_test_signal_backtrace); #endif g_setenv ("GSETTINGS_BACKEND", "memory", TRUE); g_setenv ("GIO_USE_PROXY_RESOLVER", "dummy", TRUE); g_setenv ("GIO_USE_VFS", "local", TRUE); /* * All channels that are added here should * not rely on running as a real user, however * they may lookup paths, such as run dir or * home directory. Glib has problems if * g_get_user_database_entry is called without * a real user, which it's path functions * do as a last resort when no environment vars * are set. So set HOME if it isn't set.. */ g_setenv("HOME", "/", FALSE); context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, NULL); g_option_context_set_description (context, "cockpit-stub provides a limited number of channels and is meant to be" "used in place of cockpit-bridge in non-system setting. When\n" "run from the command line one of the options above must be specified.\n"); g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (error) { g_printerr ("cockpit-stub: %s\n", error->message); g_error_free (error); return 1; } if (opt_packages) { cockpit_packages_dump (); return 0; } else if (opt_version) { print_version (); return 0; } if (!opt_interactive && isatty (1)) { g_printerr ("cockpit-stub: no option specified\n"); return 2; } ret = run_bridge (opt_interactive); g_free (opt_interactive); return ret; }
int main (int argc, char **argv) { GOptionContext *context; GError *error = NULL; int ret; static gboolean opt_packages = FALSE; static gboolean opt_privileged = FALSE; static gboolean opt_version = FALSE; static gchar *opt_interactive = NULL; static GOptionEntry entries[] = { { "interact", 0, 0, G_OPTION_ARG_STRING, &opt_interactive, "Interact with the raw protocol", "boundary" }, { "privileged", 0, 0, G_OPTION_ARG_NONE, &opt_privileged, "Privileged copy of bridge", NULL }, { "packages", 0, 0, G_OPTION_ARG_NONE, &opt_packages, "Show Cockpit package information", NULL }, { "version", 0, 0, G_OPTION_ARG_NONE, &opt_version, "Show Cockpit version information", NULL }, { NULL } }; signal (SIGPIPE, SIG_IGN); /* Debugging issues during testing */ #if WITH_DEBUG signal (SIGABRT, cockpit_test_signal_backtrace); signal (SIGSEGV, cockpit_test_signal_backtrace); #endif /* * We have to tell GLib about an alternate default location for XDG_DATA_DIRS * if we've been compiled with a different prefix. GLib caches that, so need * to do this very early. */ if (!g_getenv ("XDG_DATA_DIRS") && !g_str_equal (DATADIR, "/usr/share")) g_setenv ("XDG_DATA_DIRS", DATADIR, TRUE); g_setenv ("GSETTINGS_BACKEND", "memory", TRUE); g_setenv ("GIO_USE_PROXY_RESOLVER", "dummy", TRUE); g_setenv ("GIO_USE_VFS", "local", TRUE); context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, NULL); g_option_context_set_description (context, "cockpit-bridge is run automatically inside of a Cockpit session. When\n" "run from the command line one of the options above must be specified.\n"); g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (error) { g_printerr ("cockpit-bridge: %s\n", error->message); g_error_free (error); return 1; } if (opt_packages) { cockpit_packages_dump (); return 0; } else if (opt_version) { print_version (); return 0; } if (!opt_interactive && isatty (1)) { g_printerr ("cockpit-bridge: no option specified\n"); return 2; } ret = run_bridge (opt_interactive, opt_privileged); g_free (opt_interactive); return ret; }