/* Copyright (C) 2015 ABRT team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "abrt_problems2_service.h" #include "libabrt.h" #include static GMainLoop *g_loop; static int g_timeout_value = 10; static void on_bus_acquired(GDBusConnection *connection, const gchar *name, gpointer user_data) { GError *error = NULL; int r = abrt_p2_service_register_objects(ABRT_P2_SERVICE(user_data), connection, &error); if (r == -EALREADY) return; error_msg("Failed to register Problems2 Objects: %s", error->message); g_error_free(error); g_main_loop_quit(g_loop); } static void on_name_acquired(GDBusConnection *connection, const gchar *name, gpointer user_data) { log_debug("Acquired the name '%s' on the system bus", name); } static void on_name_lost(GDBusConnection *connection, const gchar *name, gpointer user_data) { log_warning("The name '%s' has been lost, please check if other " "service owning the name is not running.\n", name); g_main_loop_quit(g_loop); } void quit_loop(int signo) { g_main_loop_quit(g_loop); } int main(int argc, char *argv[]) { /* I18n */ setlocale(LC_ALL, ""); #if ENABLE_NLS bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); #endif guint owner_id; glib_init(); abrt_init(argv); load_abrt_conf(); const char *program_usage_string = "& [options]"; enum { OPT_v = 1 << 0, OPT_t = 1 << 1, }; /* Keep enum above and order of options below in sync! */ struct options program_options[] = { OPT__VERBOSE(&g_verbose), OPT_INTEGER('t', NULL, &g_timeout_value, "Exit after NUM seconds of inactivity"), OPT_END() }; /*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string); export_abrt_envvars(0); msg_prefix = "abrt-problems2"; /* for log_warning(), error_msg() and such */ if (getuid() != 0) error_msg_and_die("This program must be run as root."); GError *error = NULL; AbrtP2Service *service = abrt_p2_service_new(&error); if (service == NULL) { error_msg_and_die("Failed to initialize ABRT Problems2 service: %s", error->message); } owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, ABRT_P2_BUS, G_BUS_NAME_OWNER_FLAGS_NONE, on_bus_acquired, on_name_acquired, on_name_lost, service, g_object_unref); g_loop = g_main_loop_new(NULL, FALSE); signal(SIGABRT, quit_loop); g_main_loop_run(g_loop); g_main_loop_unref(g_loop); log_notice("Cleaning up"); if (owner_id > 0) g_bus_unown_name(owner_id); free_abrt_conf_data(); return 0; }