about summary refs log tree commit diff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index 495262ef..53d2cf64 100644
--- a/src/main.c
+++ b/src/main.c
@@ -72,6 +72,7 @@ static gboolean configure_and_quit = FALSE;
 
 static struct {
 	gboolean show_version;
+	gboolean print_config;
 	gboolean become_daemon;
 	gboolean debug;
 	gboolean g_fatal_warnings;
@@ -228,6 +229,28 @@ manager_configure_quit (NMManager *manager, gpointer user_data)
 	configure_and_quit = TRUE;
 }
 
+static int
+print_config (NMConfigCmdLineOptions *config_cli)
+{
+	gs_unref_object NMConfig *config = NULL;
+	gs_free_error GError *error = NULL;
+	NMConfigData *config_data;
+
+	nm_logging_setup ("OFF", "ALL", NULL, NULL);
+
+	config = nm_config_new (config_cli, &error);
+	if (config == NULL) {
+		fprintf (stderr, _("Failed to read configuration: %s\n"),
+		         (error && error->message) ? error->message : _("unknown"));
+		return 7;
+	}
+
+	config_data = nm_config_get_data (config);
+	fprintf (stdout, "# NetworkManager configuration: %s\n", nm_config_data_get_config_description (config_data));
+	nm_config_data_log (config_data, "", "", stdout);
+	return 0;
+}
+
 static void
 do_early_setup (int *argc, char **argv[], NMConfigCmdLineOptions *config_cli)
 {
@@ -243,10 +266,10 @@ do_early_setup (int *argc, char **argv[], NMConfigCmdLineOptions *config_cli)
 		{ "pid-file", 'p', 0, G_OPTION_ARG_FILENAME, &global_opt.pidfile, N_("Specify the location of a PID file"), N_(NM_DEFAULT_PID_FILE) },
 		{ "state-file", 0, 0, G_OPTION_ARG_FILENAME, &global_opt.state_file, N_("State file location"), N_(NM_DEFAULT_SYSTEM_STATE_FILE) },
 		{ "run-from-build-dir", 0, 0, G_OPTION_ARG_NONE, &global_opt.run_from_build_dir, "Run from build directory", NULL },
+		{ "print-config", 0, 0, G_OPTION_ARG_NONE, &global_opt.print_config, N_("Print NetworkManager configuration and exit"), NULL },
 		{NULL}
 	};
 
-	config_cli = nm_config_cmd_line_options_new ();
 	if (!nm_main_utils_early_setup ("NetworkManager",
 	                                argc,
 	                                argv,
@@ -302,6 +325,14 @@ main (int argc, char *argv[])
 		exit (0);
 	}
 
+	if (global_opt.print_config) {
+		int result;
+
+		result = print_config (config_cli);
+		nm_config_cmd_line_options_free (config_cli);
+		exit (result);
+	}
+
 	nm_main_utils_ensure_root ();
 
 	nm_main_utils_ensure_not_running_pidfile (global_opt.pidfile);
@@ -423,7 +454,7 @@ main (int argc, char *argv[])
 	dbus_glib_global_set_disable_legacy_property_access ();
 
 	nm_log_info (LOGD_CORE, "Read config: %s", nm_config_data_get_config_description (nm_config_get_data (config)));
-	nm_config_data_log (nm_config_get_data (config), "CONFIG: ");
+	nm_config_data_log (nm_config_get_data (config), "CONFIG: ", "  ", NULL);
 	nm_log_dbg (LOGD_CORE, "WEXT support is %s",
 #if HAVE_WEXT
 	             "enabled"