about summary refs log tree commit diff
path: root/cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'cli/src')
-rw-r--r--cli/src/Makefile.in17
-rw-r--r--cli/src/connections.c213
-rw-r--r--cli/src/devices.c16
-rw-r--r--cli/src/settings.c373
-rw-r--r--cli/src/settings.h1
5 files changed, 302 insertions, 318 deletions
diff --git a/cli/src/Makefile.in b/cli/src/Makefile.in
index 27f3b23a..cb37b8db 100644
--- a/cli/src/Makefile.in
+++ b/cli/src/Makefile.in
@@ -62,12 +62,11 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/compiler_warnings.m4 \
 	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intltool.m4 \
 	$(top_srcdir)/m4/introspection.m4 $(top_srcdir)/m4/lib-ld.m4 \
 	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
-	$(top_srcdir)/m4/libnl-check.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
-	$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/vapigen.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+	$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/vapigen.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -222,12 +221,6 @@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBM = @LIBM@
-LIBNL1_CFLAGS = @LIBNL1_CFLAGS@
-LIBNL1_LIBS = @LIBNL1_LIBS@
-LIBNL2_CFLAGS = @LIBNL2_CFLAGS@
-LIBNL2_LIBS = @LIBNL2_LIBS@
-LIBNL3_CFLAGS = @LIBNL3_CFLAGS@
-LIBNL3_LIBS = @LIBNL3_LIBS@
 LIBNL_CFLAGS = @LIBNL_CFLAGS@
 LIBNL_LIBS = @LIBNL_LIBS@
 LIBOBJS = @LIBOBJS@
diff --git a/cli/src/connections.c b/cli/src/connections.c
index e7926f1a..d509ce04 100644
--- a/cli/src/connections.c
+++ b/cli/src/connections.c
@@ -269,6 +269,7 @@ nmc_connection_detail (NMConnection *connection, NmCli *nmc)
 
 	/* Loop through the required settings and print them. */
 	for (i = 0; i < print_settings_array->len; i++) {
+		NMSetting *setting;
 		int section_idx = g_array_index (print_settings_array, int, i);
 
 		if (nmc->print_output != NMC_PRINT_TERSE && !nmc->multiline_output && was_output)
@@ -276,204 +277,11 @@ nmc_connection_detail (NMConnection *connection, NmCli *nmc)
 
 		was_output = FALSE;
 
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[0].name)) {
-			NMSettingConnection *s_con = nm_connection_get_setting_connection (connection);
-			if (s_con) {
-				setting_connection_details (s_con, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[1].name)) {
-			NMSettingWired *s_wired = nm_connection_get_setting_wired (connection);
-			if (s_wired) {
-				setting_wired_details (s_wired, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[2].name)) {
-			NMSetting8021x *s_8021X = nm_connection_get_setting_802_1x (connection);
-			if (s_8021X) {
-				setting_802_1X_details (s_8021X, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[3].name)) {
-			NMSettingWireless *s_wireless = nm_connection_get_setting_wireless (connection);
-			if (s_wireless) {
-				setting_wireless_details (s_wireless, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[4].name)) {
-			NMSettingWirelessSecurity *s_wsec = nm_connection_get_setting_wireless_security (connection);
-			if (s_wsec) {
-				setting_wireless_security_details (s_wsec, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[5].name)) {
-			NMSettingIP4Config *s_ip4 = nm_connection_get_setting_ip4_config (connection);
-			if (s_ip4) {
-				setting_ip4_config_details (s_ip4, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[6].name)) {
-			NMSettingIP6Config *s_ip6 = nm_connection_get_setting_ip6_config (connection);
-			if (s_ip6) {
-				setting_ip6_config_details (s_ip6, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[7].name)) {
-			NMSettingSerial *s_serial = nm_connection_get_setting_serial (connection);
-			if (s_serial) {
-				setting_serial_details (s_serial, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[8].name)) {
-			NMSettingPPP *s_ppp = nm_connection_get_setting_ppp (connection);
-			if (s_ppp) {
-				setting_ppp_details (s_ppp, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[9].name)) {
-			NMSettingPPPOE *s_pppoe = nm_connection_get_setting_pppoe (connection);
-			if (s_pppoe) {
-				setting_pppoe_details (s_pppoe, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[10].name)) {
-			NMSettingGsm *s_gsm = nm_connection_get_setting_gsm (connection);
-			if (s_gsm) {
-				setting_gsm_details (s_gsm, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[11].name)) {
-			NMSettingCdma *s_cdma = nm_connection_get_setting_cdma (connection);
-			if (s_cdma) {
-				setting_cdma_details (s_cdma, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[12].name)) {
-			NMSettingBluetooth *s_bluetooth = nm_connection_get_setting_bluetooth (connection);
-			if (s_bluetooth) {
-				setting_bluetooth_details (s_bluetooth, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[13].name)) {
-			NMSettingOlpcMesh *s_olpc_mesh = nm_connection_get_setting_olpc_mesh (connection);
-			if (s_olpc_mesh) {
-				setting_olpc_mesh_details (s_olpc_mesh, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[14].name)) {
-			NMSettingVPN *s_vpn = nm_connection_get_setting_vpn (connection);
-			if (s_vpn) {
-				setting_vpn_details (s_vpn, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-#if WITH_WIMAX
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[15].name)) {
-			NMSettingWimax *s_wimax = nm_connection_get_setting_wimax (connection);
-			if (s_wimax) {
-				setting_wimax_details (s_wimax, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-#endif
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[16].name)) {
-			NMSettingInfiniband *s_infiniband = nm_connection_get_setting_infiniband (connection);
-			if (s_infiniband) {
-				setting_infiniband_details (s_infiniband, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[17].name)) {
-			NMSettingBond *s_bond = nm_connection_get_setting_bond (connection);
-			if (s_bond) {
-				setting_bond_details (s_bond, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[18].name)) {
-			NMSettingVlan *s_vlan = nm_connection_get_setting_vlan (connection);
-			if (s_vlan) {
-				setting_vlan_details (s_vlan, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[19].name)) {
-			NMSettingAdsl *s_adsl = nm_connection_get_setting_adsl (connection);
-			if (s_adsl) {
-				setting_adsl_details (s_adsl, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[20].name)) {
-			NMSettingBridge *s_bridge = nm_connection_get_setting_bridge (connection);
-			if (s_bridge) {
-				setting_bridge_details (s_bridge, nmc);
-				was_output = TRUE;
-				continue;
-			}
-		}
-
-		if (!strcasecmp (nmc_fields_settings_names[section_idx].name, nmc_fields_settings_names[21].name)) {
-			NMSettingBridgePort *s_bridge_port = nm_connection_get_setting_bridge_port (connection);
-			if (s_bridge_port) {
-				setting_bridge_port_details (s_bridge_port, nmc);
-				was_output = TRUE;
-				continue;
-			}
+		setting = nm_connection_get_setting_by_name (connection, nmc_fields_settings_names[section_idx].name);
+		if (setting) {
+			setting_details (setting, nmc);
+			was_output = TRUE;
+			continue;
 		}
 	}
 
@@ -723,9 +531,12 @@ fill_in_fields_con_status (NMActiveConnection *active, GSList *con_list)
 	devices = nm_active_connection_get_devices (active);
 	for (i = 0; devices && (i < devices->len); i++) {
 		NMDevice *device = g_ptr_array_index (devices, i);
+		const char *dev_iface = nm_device_get_iface (device);
 
-		g_string_append (dev_str, nm_device_get_iface (device));
-		g_string_append_c (dev_str, ',');
+		if (dev_iface) {
+			g_string_append (dev_str, dev_iface);
+			g_string_append_c (dev_str, ',');
+		}
 	}
 	if (dev_str->len > 0)
 		g_string_truncate (dev_str, dev_str->len - 1);  /* Cut off last ',' */
@@ -1279,7 +1090,7 @@ find_device_for_connection (NmCli *nmc,
 
 			if (iface) {
 				const char *dev_iface = nm_device_get_iface (dev);
-				if (   !strcmp (dev_iface, iface)
+				if (   !g_strcmp0 (dev_iface, iface)
 				    && nm_device_connection_compatible (dev, connection, NULL)) {
 					found_device = dev;
 				}
diff --git a/cli/src/devices.c b/cli/src/devices.c
index caaf7102..52c8c855 100644
--- a/cli/src/devices.c
+++ b/cli/src/devices.c
@@ -833,8 +833,10 @@ show_device_info (gpointer data, gpointer user_data)
 					NMDevice *slave = g_ptr_array_index (slaves, idx);
 					const char *iface = nm_device_get_iface (slave);
 
-					g_string_append (bond_slaves_str, iface);
-					g_string_append_c (bond_slaves_str, ' ');
+					if (iface) {
+						g_string_append (bond_slaves_str, iface);
+						g_string_append_c (bond_slaves_str, ' ');
+					}
 				}
 				if (bond_slaves_str->len > 0)
 					g_string_truncate (bond_slaves_str, bond_slaves_str->len-1);  /* Chop off last space */
@@ -1018,7 +1020,7 @@ do_devices_list (NmCli *nmc, int argc, char **argv)
 			NMDevice *candidate = g_ptr_array_index (devices, i);
 			const char *dev_iface = nm_device_get_iface (candidate);
 
-			if (!strcmp (dev_iface, iface))
+			if (!g_strcmp0 (dev_iface, iface))
 				device = candidate;
 		}
 		if (!device) {
@@ -1182,7 +1184,7 @@ do_device_disconnect (NmCli *nmc, int argc, char **argv)
 		NMDevice *candidate = g_ptr_array_index (devices, i);
 		const char *dev_iface = nm_device_get_iface (candidate);
 
-		if (!strcmp (dev_iface, iface))
+		if (!g_strcmp0 (dev_iface, iface))
 			device = candidate;
 	}
 
@@ -1321,7 +1323,7 @@ do_device_wifi_list (NmCli *nmc, int argc, char **argv)
 			NMDevice *candidate = g_ptr_array_index (devices, i);
 			const char *dev_iface = nm_device_get_iface (candidate);
 
-			if (!strcmp (dev_iface, iface)) {
+			if (!g_strcmp0 (dev_iface, iface)) {
 				device = candidate;
 				break;
 			}
@@ -1517,7 +1519,7 @@ find_wifi_device_by_iface (const GPtrArray *devices, const char *iface, int *idx
 
 		if (iface) {
 			/* If a iface was specified then use it. */
-			if (strcmp (dev_iface, iface) == 0) {
+			if (g_strcmp0 (dev_iface, iface) == 0) {
 				device = candidate;
 				break;
 			}
@@ -1968,7 +1970,7 @@ do_device_wimax_list (NmCli *nmc, int argc, char **argv)
 			NMDevice *candidate = g_ptr_array_index (devices, i);
 			const char *dev_iface = nm_device_get_iface (candidate);
 
-			if (!strcmp (dev_iface, iface)) {
+			if (!g_strcmp0 (dev_iface, iface)) {
 				device = candidate;
 				break;
 			}
diff --git a/cli/src/settings.c b/cli/src/settings.c
index 407ca8ad..1b3d0fd0 100644
--- a/cli/src/settings.c
+++ b/cli/src/settings.c
@@ -94,33 +94,39 @@ static NmcOutputField nmc_fields_setting_wired[] = {
 
 /* Available fields for NM_SETTING_802_1X_SETTING_NAME */
 static NmcOutputField nmc_fields_setting_8021X[] = {
-	SETTING_FIELD ("name", 10),                                         /* 0 */
-	SETTING_FIELD (NM_SETTING_802_1X_EAP, 10),                          /* 1 */
-	SETTING_FIELD (NM_SETTING_802_1X_IDENTITY, 15),                     /* 2 */
-	SETTING_FIELD (NM_SETTING_802_1X_ANONYMOUS_IDENTITY, 15),           /* 3 */
-	SETTING_FIELD (NM_SETTING_802_1X_PAC_FILE, 15),                     /* 4 */
-	SETTING_FIELD (NM_SETTING_802_1X_CA_CERT, 10),                      /* 5 */
-	SETTING_FIELD (NM_SETTING_802_1X_CA_PATH, 10),                      /* 6 */
-	SETTING_FIELD (NM_SETTING_802_1X_SUBJECT_MATCH, 10),                /* 7 */
-	SETTING_FIELD (NM_SETTING_802_1X_ALTSUBJECT_MATCHES, 10),           /* 8 */
-	SETTING_FIELD (NM_SETTING_802_1X_CLIENT_CERT, 10),                  /* 9 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPVER, 10),               /* 10 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPLABEL, 10),             /* 11 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, 10),     /* 12 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTH, 10),                  /* 13 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTHEAP, 10),               /* 14 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_CERT, 20),               /* 15 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_PATH, 20),               /* 16 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, 10),         /* 17 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, 10),    /* 18 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CLIENT_CERT, 20),           /* 19 */
-	SETTING_FIELD (NM_SETTING_802_1X_PASSWORD, 10),                     /* 20 */
-	SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY, 15),                  /* 21 */
-	SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, 20),         /* 22 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, 20),           /* 23 */
-	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD, 20),  /* 24 */
-	SETTING_FIELD (NM_SETTING_802_1X_PIN, 8),                           /* 25 */
-	SETTING_FIELD (NM_SETTING_802_1X_SYSTEM_CA_CERTS, 17),              /* 26 */
+	SETTING_FIELD ("name", 10),                                              /* 0 */
+	SETTING_FIELD (NM_SETTING_802_1X_EAP, 10),                               /* 1 */
+	SETTING_FIELD (NM_SETTING_802_1X_IDENTITY, 15),                          /* 2 */
+	SETTING_FIELD (NM_SETTING_802_1X_ANONYMOUS_IDENTITY, 15),                /* 3 */
+	SETTING_FIELD (NM_SETTING_802_1X_PAC_FILE, 15),                          /* 4 */
+	SETTING_FIELD (NM_SETTING_802_1X_CA_CERT, 10),                           /* 5 */
+	SETTING_FIELD (NM_SETTING_802_1X_CA_PATH, 10),                           /* 6 */
+	SETTING_FIELD (NM_SETTING_802_1X_SUBJECT_MATCH, 10),                     /* 7 */
+	SETTING_FIELD (NM_SETTING_802_1X_ALTSUBJECT_MATCHES, 10),                /* 8 */
+	SETTING_FIELD (NM_SETTING_802_1X_CLIENT_CERT, 10),                       /* 9 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPVER, 10),                    /* 10 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_PEAPLABEL, 10),                  /* 11 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE1_FAST_PROVISIONING, 10),          /* 12 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTH, 10),                       /* 13 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_AUTHEAP, 10),                    /* 14 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_CERT, 20),                    /* 15 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CA_PATH, 20),                    /* 16 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_SUBJECT_MATCH, 10),              /* 17 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES, 10),         /* 18 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_CLIENT_CERT, 20),                /* 19 */
+	SETTING_FIELD (NM_SETTING_802_1X_PASSWORD, 10),                          /* 20 */
+	SETTING_FIELD (NM_SETTING_802_1X_PASSWORD_FLAGS, 20),                    /* 21 */
+	SETTING_FIELD (NM_SETTING_802_1X_PASSWORD_RAW, 20),                      /* 22 */
+	SETTING_FIELD (NM_SETTING_802_1X_PASSWORD_RAW_FLAGS, 20),                /* 23 */
+	SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY, 15),                       /* 24 */
+	SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, 20),              /* 25 */
+	SETTING_FIELD (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, 20),        /* 26 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, 20),                /* 27 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD, 20),       /* 28 */
+	SETTING_FIELD (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS, 20), /* 29 */
+	SETTING_FIELD (NM_SETTING_802_1X_PIN, 8),                                /* 30 */
+	SETTING_FIELD (NM_SETTING_802_1X_PIN_FLAGS, 20),                         /* 31 */
+	SETTING_FIELD (NM_SETTING_802_1X_SYSTEM_CA_CERTS, 17),                   /* 32 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_802_1X_ALL     "name"","\
@@ -144,11 +150,17 @@ static NmcOutputField nmc_fields_setting_8021X[] = {
                                           NM_SETTING_802_1X_PHASE2_ALTSUBJECT_MATCHES","\
                                           NM_SETTING_802_1X_PHASE2_CLIENT_CERT","\
                                           NM_SETTING_802_1X_PASSWORD","\
+                                          NM_SETTING_802_1X_PASSWORD_FLAGS","\
+                                          NM_SETTING_802_1X_PASSWORD_RAW","\
+                                          NM_SETTING_802_1X_PASSWORD_RAW_FLAGS","\
                                           NM_SETTING_802_1X_PRIVATE_KEY","\
                                           NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD","\
+                                          NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS","\
                                           NM_SETTING_802_1X_PHASE2_PRIVATE_KEY","\
                                           NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD","\
+                                          NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS","\
                                           NM_SETTING_802_1X_PIN","\
+                                          NM_SETTING_802_1X_PIN_FLAGS","\
                                           NM_SETTING_802_1X_SYSTEM_CA_CERTS
 #define NMC_FIELDS_SETTING_802_1X_COMMON  NMC_FIELDS_SETTING_802_1X_ALL
 
@@ -167,7 +179,8 @@ static NmcOutputField nmc_fields_setting_wireless[] = {
 	SETTING_FIELD (NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST, 39),     /* 10 */
 	SETTING_FIELD (NM_SETTING_WIRELESS_MTU, 6),                        /* 11 */
 	SETTING_FIELD (NM_SETTING_WIRELESS_SEEN_BSSIDS, 35),               /* 12 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SEC, 10),                       /* 13 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SEC, 25),                       /* 13 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_HIDDEN, 10),                    /* 14 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_WIRELESS_ALL     "name"","\
@@ -183,26 +196,30 @@ static NmcOutputField nmc_fields_setting_wireless[] = {
                                             NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST","\
                                             NM_SETTING_WIRELESS_MTU","\
                                             NM_SETTING_WIRELESS_SEEN_BSSIDS","\
-                                            NM_SETTING_WIRELESS_SEC
+                                            NM_SETTING_WIRELESS_SEC","\
+                                            NM_SETTING_WIRELESS_HIDDEN
 #define NMC_FIELDS_SETTING_WIRELESS_COMMON  NMC_FIELDS_SETTING_WIRELESS_ALL
 
 /* Available fields for NM_SETTING_WIRELESS_SECURITY_SETTING_NAME */
 static NmcOutputField nmc_fields_setting_wireless_security[] = {
-	SETTING_FIELD ("name", 25),                                      /* 0 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, 10),       /* 1 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 15),  /* 2 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, 10),       /* 3 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PROTO, 10),          /* 4 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PAIRWISE, 10),       /* 5 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_GROUP, 10),          /* 6 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, 15),  /* 7 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, 10),       /* 8 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY1, 10),       /* 9 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY2, 10),       /* 10 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY3, 10),       /* 11 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PSK, 6),             /* 12 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, 15),  /* 13 */
-	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, 15),   /* 14 */
+	SETTING_FIELD ("name", 25),                                           /* 0 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, 10),            /* 1 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 15),       /* 2 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, 10),            /* 3 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PROTO, 10),               /* 4 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PAIRWISE, 10),            /* 5 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_GROUP, 10),               /* 6 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, 15),       /* 7 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, 10),            /* 8 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY1, 10),            /* 9 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY2, 10),            /* 10 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY3, 10),            /* 11 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, 20),       /* 12 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, 15),        /* 13 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PSK, 6),                  /* 14 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS, 20),           /* 15 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, 15),       /* 16 */
+	SETTING_FIELD (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, 20), /* 17 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_WIRELESS_SECURITY_ALL     "name"","\
@@ -217,9 +234,12 @@ static NmcOutputField nmc_fields_setting_wireless_security[] = {
                                                      NM_SETTING_WIRELESS_SECURITY_WEP_KEY1","\
                                                      NM_SETTING_WIRELESS_SECURITY_WEP_KEY2","\
                                                      NM_SETTING_WIRELESS_SECURITY_WEP_KEY3","\
+                                                     NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS","\
+                                                     NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE","\
                                                      NM_SETTING_WIRELESS_SECURITY_PSK","\
+                                                     NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS","\
                                                      NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD","\
-                                                     NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE
+                                                     NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS
 #define NMC_FIELDS_SETTING_WIRELESS_SECURITY_COMMON  NMC_FIELDS_SETTING_WIRELESS_SECURITY_ALL
 
 /* Available fields for NM_SETTING_IP4_CONFIG_SETTING_NAME */
@@ -267,6 +287,7 @@ static NmcOutputField nmc_fields_setting_ip6_config[] = {
 	SETTING_FIELD (NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, 15),           /* 8 */
 	SETTING_FIELD (NM_SETTING_IP6_CONFIG_MAY_FAIL, 12),                /* 9 */
 	SETTING_FIELD (NM_SETTING_IP6_CONFIG_IP6_PRIVACY, 15),             /* 10 */
+	SETTING_FIELD (NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME, 14),           /* 11 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_IP6_CONFIG_ALL     "name"","\
@@ -279,7 +300,8 @@ static NmcOutputField nmc_fields_setting_ip6_config[] = {
                                               NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS","\
                                               NM_SETTING_IP6_CONFIG_NEVER_DEFAULT","\
                                               NM_SETTING_IP6_CONFIG_MAY_FAIL","\
-                                              NM_SETTING_IP6_CONFIG_IP6_PRIVACY
+                                              NM_SETTING_IP6_CONFIG_IP6_PRIVACY","\
+                                              NM_SETTING_IP6_CONFIG_DHCP_HOSTNAME
 #define NMC_FIELDS_SETTING_IP6_CONFIG_COMMON  NMC_FIELDS_SETTING_IP4_CONFIG_ALL
 
 /* Available fields for NM_SETTING_SERIAL_SETTING_NAME */
@@ -350,32 +372,36 @@ static NmcOutputField nmc_fields_setting_pppoe[] = {
 	SETTING_FIELD (NM_SETTING_PPPOE_SERVICE, 12),                      /* 1 */
 	SETTING_FIELD (NM_SETTING_PPPOE_USERNAME, 15),                     /* 2 */
 	SETTING_FIELD (NM_SETTING_PPPOE_PASSWORD, 15),                     /* 3 */
+	SETTING_FIELD (NM_SETTING_PPPOE_PASSWORD_FLAGS, 20),               /* 4 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_PPPOE_ALL     "name"","\
                                          NM_SETTING_PPPOE_SERVICE","\
                                          NM_SETTING_PPPOE_USERNAME","\
-                                         NM_SETTING_PPPOE_PASSWORD
-#define NMC_FIELDS_SETTING_PPPOE_COMMON  NMC_FIELDS_SETTING_PPP_ALL
+                                         NM_SETTING_PPPOE_PASSWORD","\
+                                         NM_SETTING_PPPOE_PASSWORD_FLAGS
+#define NMC_FIELDS_SETTING_PPPOE_COMMON  NMC_FIELDS_SETTING_PPPOE_ALL
 
 /* Available fields for NM_SETTING_ADSL_SETTING_NAME */
 static NmcOutputField nmc_fields_setting_adsl[] = {
 	SETTING_FIELD ("name", 10),                                /* 0 */
 	SETTING_FIELD (NM_SETTING_ADSL_USERNAME, 15),              /* 1 */
 	SETTING_FIELD (NM_SETTING_ADSL_PASSWORD, 15),              /* 2 */
-	SETTING_FIELD (NM_SETTING_ADSL_VPI, 10),                   /* 3 */
-	SETTING_FIELD (NM_SETTING_ADSL_VCI, 10),                   /* 4 */
+	SETTING_FIELD (NM_SETTING_ADSL_PASSWORD_FLAGS, 20),        /* 3 */
+	SETTING_FIELD (NM_SETTING_ADSL_PROTOCOL, 10),              /* 4 */
 	SETTING_FIELD (NM_SETTING_ADSL_ENCAPSULATION, 10),         /* 5 */
-	SETTING_FIELD (NM_SETTING_ADSL_PROTOCOL, 10),              /* 6 */
+	SETTING_FIELD (NM_SETTING_ADSL_VPI, 10),                   /* 6 */
+	SETTING_FIELD (NM_SETTING_ADSL_VCI, 10),                   /* 7 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_ADSL_ALL     "name"","\
                                         NM_SETTING_ADSL_USERNAME","\
                                         NM_SETTING_ADSL_PASSWORD","\
-                                        NM_SETTING_ADSL_VPI","\
-                                        NM_SETTING_ADSL_VCI","\
+                                        NM_SETTING_ADSL_PASSWORD_FLAGS","\
+                                        NM_SETTING_ADSL_PROTOCOL","\
                                         NM_SETTING_ADSL_ENCAPSULATION","\
-                                        NM_SETTING_ADSL_PROTOCOL
+                                        NM_SETTING_ADSL_VPI","\
+                                        NM_SETTING_ADSL_VCI
 #define NMC_FIELDS_SETTING_ADSL_COMMON  NMC_FIELDS_SETTING_ADSL_ALL
 
 /* Available fields for NM_SETTING_GSM_SETTING_NAME */
@@ -384,23 +410,27 @@ static NmcOutputField nmc_fields_setting_gsm[] = {
 	SETTING_FIELD (NM_SETTING_GSM_NUMBER, 10),                         /* 1 */
 	SETTING_FIELD (NM_SETTING_GSM_USERNAME, 15),                       /* 2 */
 	SETTING_FIELD (NM_SETTING_GSM_PASSWORD, 15),                       /* 3 */
-	SETTING_FIELD (NM_SETTING_GSM_APN, 25),                            /* 4 */
-	SETTING_FIELD (NM_SETTING_GSM_NETWORK_ID, 12),                     /* 5 */
-	SETTING_FIELD (NM_SETTING_GSM_NETWORK_TYPE, 15),                   /* 6 */
-	SETTING_FIELD (NM_SETTING_GSM_ALLOWED_BANDS, 15),                  /* 7 */
-	SETTING_FIELD (NM_SETTING_GSM_PIN, 10),                            /* 8 */
-	SETTING_FIELD (NM_SETTING_GSM_HOME_ONLY, 10),                      /* 9 */
+	SETTING_FIELD (NM_SETTING_GSM_PASSWORD_FLAGS, 20),                 /* 4 */
+	SETTING_FIELD (NM_SETTING_GSM_APN, 25),                            /* 5 */
+	SETTING_FIELD (NM_SETTING_GSM_NETWORK_ID, 12),                     /* 6 */
+	SETTING_FIELD (NM_SETTING_GSM_NETWORK_TYPE, 15),                   /* 7 */
+	SETTING_FIELD (NM_SETTING_GSM_ALLOWED_BANDS, 15),                  /* 8 */
+	SETTING_FIELD (NM_SETTING_GSM_PIN, 10),                            /* 9 */
+	SETTING_FIELD (NM_SETTING_GSM_PIN_FLAGS, 20),                      /* 10 */
+	SETTING_FIELD (NM_SETTING_GSM_HOME_ONLY, 10),                      /* 11 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_GSM_ALL     "name"","\
                                        NM_SETTING_GSM_NUMBER","\
                                        NM_SETTING_GSM_USERNAME","\
                                        NM_SETTING_GSM_PASSWORD","\
+                                       NM_SETTING_GSM_PASSWORD_FLAGS","\
                                        NM_SETTING_GSM_APN","\
                                        NM_SETTING_GSM_NETWORK_ID","\
                                        NM_SETTING_GSM_NETWORK_TYPE","\
                                        NM_SETTING_GSM_ALLOWED_BANDS","\
                                        NM_SETTING_GSM_PIN","\
+                                       NM_SETTING_GSM_PIN_FLAGS","\
                                        NM_SETTING_GSM_HOME_ONLY
 #define NMC_FIELDS_SETTING_GSM_COMMON  NMC_FIELDS_SETTING_GSM_ALL
 
@@ -410,12 +440,14 @@ static NmcOutputField nmc_fields_setting_cdma[] = {
 	SETTING_FIELD (NM_SETTING_CDMA_NUMBER, 15),                        /* 1 */
 	SETTING_FIELD (NM_SETTING_CDMA_USERNAME, 15),                      /* 2 */
 	SETTING_FIELD (NM_SETTING_CDMA_PASSWORD, 15),                      /* 3 */
+	SETTING_FIELD (NM_SETTING_CDMA_PASSWORD_FLAGS, 20),                /* 4 */
 	{NULL, NULL, 0, NULL, 0}
 };
 #define NMC_FIELDS_SETTING_CDMA_ALL     "name"","\
                                         NM_SETTING_CDMA_NUMBER","\
                                         NM_SETTING_CDMA_USERNAME","\
-                                        NM_SETTING_CDMA_PASSWORD
+                                        NM_SETTING_CDMA_PASSWORD","\
+                                        NM_SETTING_CDMA_PASSWORD_FLAGS
 #define NMC_FIELDS_SETTING_CDMA_COMMON  NMC_FIELDS_SETTING_CDMA_ALL
 
 /* Available fields for NM_SETTING_BLUETOOTH_SETTING_NAME */
@@ -570,15 +602,15 @@ wep_key_type_to_string (NMWepKeyType type)
 }
 
 static char *
-blob_cert_to_string (const GByteArray *array)
+byte_array_to_string (const GByteArray *array)
 {
 	GString *cert = NULL;
 	int i;
 
-	if (array->len > 0)
+	if (array && array->len > 0)
 		cert = g_string_new (NULL);
 
-	for (i = 0; i < array->len; i++) {
+	for (i = 0; array && i < array->len; i++) {
 		g_string_append_printf (cert, "%02X", array->data[i]);
 	}
 
@@ -697,9 +729,95 @@ ip6_privacy_to_string (NMSettingIP6ConfigPrivacy ip6_privacy)
 	}
 }
 
+static char *
+secret_flags_to_string (guint32 flags)
+{
+	GString *flag_str;
+
+	if (flags == 0)
+		return g_strdup (_("0 (none)"));
+
+	flag_str = g_string_new (NULL);
+	g_string_printf (flag_str, "%d (", flags);
+
+	if (flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED)
+		g_string_append (flag_str, _("agent-owned, "));
+	if (flags & NM_SETTING_SECRET_FLAG_NOT_SAVED)
+		g_string_append (flag_str, _("not saved, "));
+	if (flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)
+		g_string_append (flag_str, _("not required, "));
+
+	if (flag_str->str[flag_str->len-1] == '(')
+		g_string_assign (flag_str, _("unknown"));
+	else
+		g_string_truncate (flag_str, flag_str->len-2);  /* chop off trailing ', ' */
+
+	g_string_append_c (flag_str, ')');
+
+	return g_string_free (flag_str, FALSE);
+}
+
 /*----------------------------------------------------------------------------*/
 
 gboolean
+setting_details (NMSetting *setting, NmCli *nmc)
+{
+	GType setting_type;
+
+	g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
+
+	setting_type = G_OBJECT_TYPE (setting);
+
+	if (setting_type == NM_TYPE_SETTING_CONNECTION)
+		return setting_connection_details (NM_SETTING_CONNECTION (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_WIRED)
+		return setting_wired_details (NM_SETTING_WIRED (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_802_1X)
+		return setting_802_1X_details (NM_SETTING_802_1X (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_WIRELESS)
+		return setting_wireless_details (NM_SETTING_WIRELESS (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_WIRELESS_SECURITY)
+		return setting_wireless_security_details (NM_SETTING_WIRELESS_SECURITY (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_IP4_CONFIG)
+		return setting_ip4_config_details (NM_SETTING_IP4_CONFIG (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_IP6_CONFIG)
+		return setting_ip6_config_details (NM_SETTING_IP6_CONFIG (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_SERIAL)
+		return setting_serial_details (NM_SETTING_SERIAL (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_PPP)
+		return setting_ppp_details (NM_SETTING_PPP (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_PPPOE)
+		return setting_pppoe_details (NM_SETTING_PPPOE (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_GSM)
+		return setting_gsm_details (NM_SETTING_GSM (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_CDMA)
+		return setting_cdma_details (NM_SETTING_CDMA (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_BLUETOOTH)
+		return setting_bluetooth_details (NM_SETTING_BLUETOOTH (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_OLPC_MESH)
+		return setting_olpc_mesh_details (NM_SETTING_OLPC_MESH (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_VPN)
+		return setting_vpn_details (NM_SETTING_VPN (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_WIMAX)
+		return setting_wimax_details (NM_SETTING_WIMAX (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_INFINIBAND)
+		return setting_infiniband_details (NM_SETTING_INFINIBAND (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_BOND)
+		return setting_bond_details (NM_SETTING_BOND (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_VLAN)
+		return setting_vlan_details (NM_SETTING_VLAN (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_ADSL)
+		return setting_adsl_details (NM_SETTING_ADSL (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_BRIDGE)
+		return setting_bridge_details (NM_SETTING_BRIDGE (setting), nmc);
+	else if (setting_type == NM_TYPE_SETTING_BRIDGE_PORT)
+		return setting_bridge_port_details (NM_SETTING_BRIDGE_PORT (setting), nmc);
+	else
+		/* should not be reached */
+		return FALSE;
+}
+
+gboolean
 setting_connection_details (NMSettingConnection *s_con, NmCli *nmc)
 {
 	guint64 timestamp;
@@ -849,7 +967,8 @@ setting_802_1X_details (NMSetting8021x *s_8021X, NmCli *nmc)
 	NMSetting8021xCKScheme scheme;
 	GString *eap_str, *alt_sub_match, *phase2_alt_sub_match;
 	char *ca_cert_str = NULL, *client_cert_str = NULL, *phase2_ca_cert_str = NULL;
-	char *phase2_client_cert_str = NULL, *private_key_str = NULL, *phase2_private_key_str = NULL;
+	char *phase2_client_cert_str = NULL, *private_key_str = NULL, *phase2_private_key_str = NULL, *pswd_raw_str = NULL;
+	char *pswd_flags, *pswd_raw_flags, *priv_key_pswd_flags, *phase2_priv_key_pswd_flags, *pin_flags;
 	int i;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
@@ -870,37 +989,37 @@ setting_802_1X_details (NMSetting8021x *s_8021X, NmCli *nmc)
 	}
 	scheme = nm_setting_802_1x_get_ca_cert_scheme (s_8021X);
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
-		ca_cert_str = blob_cert_to_string (nm_setting_802_1x_get_ca_cert_blob (s_8021X));
+		ca_cert_str = byte_array_to_string (nm_setting_802_1x_get_ca_cert_blob (s_8021X));
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
 		ca_cert_str = g_strdup (nm_setting_802_1x_get_ca_cert_path (s_8021X));
 
 	scheme = nm_setting_802_1x_get_client_cert_scheme (s_8021X);
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
-		client_cert_str = blob_cert_to_string (nm_setting_802_1x_get_client_cert_blob (s_8021X));
+		client_cert_str = byte_array_to_string (nm_setting_802_1x_get_client_cert_blob (s_8021X));
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
 		client_cert_str = g_strdup (nm_setting_802_1x_get_client_cert_path (s_8021X));
 
 	scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme (s_8021X);
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
-		phase2_ca_cert_str = blob_cert_to_string (nm_setting_802_1x_get_phase2_ca_cert_blob (s_8021X));
+		phase2_ca_cert_str = byte_array_to_string (nm_setting_802_1x_get_phase2_ca_cert_blob (s_8021X));
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
 		phase2_ca_cert_str = g_strdup (nm_setting_802_1x_get_phase2_ca_cert_path (s_8021X));
 
 	scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (s_8021X);
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
-		phase2_client_cert_str = blob_cert_to_string (nm_setting_802_1x_get_phase2_client_cert_blob (s_8021X));
+		phase2_client_cert_str = byte_array_to_string (nm_setting_802_1x_get_phase2_client_cert_blob (s_8021X));
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
 		phase2_client_cert_str = g_strdup (nm_setting_802_1x_get_phase2_client_cert_path (s_8021X));
 
 	scheme = nm_setting_802_1x_get_private_key_scheme (s_8021X);
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
-		private_key_str = blob_cert_to_string (nm_setting_802_1x_get_private_key_blob (s_8021X));
+		private_key_str = byte_array_to_string (nm_setting_802_1x_get_private_key_blob (s_8021X));
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
 		private_key_str = g_strdup (nm_setting_802_1x_get_private_key_path (s_8021X));
 
 	scheme = nm_setting_802_1x_get_phase2_private_key_scheme (s_8021X);
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_BLOB)
-		phase2_private_key_str = blob_cert_to_string (nm_setting_802_1x_get_phase2_private_key_blob (s_8021X));
+		phase2_private_key_str = byte_array_to_string (nm_setting_802_1x_get_phase2_private_key_blob (s_8021X));
 	if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH)
 		phase2_private_key_str = g_strdup (nm_setting_802_1x_get_phase2_private_key_path (s_8021X));
 
@@ -914,6 +1033,14 @@ setting_802_1X_details (NMSetting8021x *s_8021X, NmCli *nmc)
 		g_string_append_printf (phase2_alt_sub_match, "%s,", nm_setting_802_1x_get_phase2_altsubject_match (s_8021X, i));
 	g_string_truncate (phase2_alt_sub_match, phase2_alt_sub_match->len-1);  /* chop off trailing ',' */
 
+	pswd_raw_str = byte_array_to_string (nm_setting_802_1x_get_password_raw (s_8021X));
+
+	pswd_flags = secret_flags_to_string (nm_setting_802_1x_get_password_flags (s_8021X));
+	pswd_raw_flags = secret_flags_to_string (nm_setting_802_1x_get_password_raw_flags (s_8021X));
+	priv_key_pswd_flags = secret_flags_to_string (nm_setting_802_1x_get_private_key_password_flags (s_8021X));
+	phase2_priv_key_pswd_flags = secret_flags_to_string (nm_setting_802_1x_get_phase2_private_key_password_flags (s_8021X));
+	pin_flags = secret_flags_to_string (nm_setting_802_1x_get_pin_flags (s_8021X));
+
 	nmc->allowed_fields[0].value = NM_SETTING_802_1X_SETTING_NAME;
 	nmc->allowed_fields[1].value = eap_str->str;
 	nmc->allowed_fields[2].value = nm_setting_802_1x_get_identity (s_8021X);
@@ -935,12 +1062,18 @@ setting_802_1X_details (NMSetting8021x *s_8021X, NmCli *nmc)
 	nmc->allowed_fields[18].value = phase2_alt_sub_match->str;
 	nmc->allowed_fields[19].value = phase2_client_cert_str;
 	nmc->allowed_fields[20].value = nm_setting_802_1x_get_password (s_8021X);
-	nmc->allowed_fields[21].value = private_key_str;
-	nmc->allowed_fields[22].value = nm_setting_802_1x_get_private_key_password (s_8021X);
-	nmc->allowed_fields[23].value = phase2_private_key_str;
-	nmc->allowed_fields[24].value = nm_setting_802_1x_get_phase2_private_key_password (s_8021X);
-	nmc->allowed_fields[25].value = nm_setting_802_1x_get_pin (s_8021X);
-	nmc->allowed_fields[26].value = nm_setting_802_1x_get_system_ca_certs (s_8021X) ? _("yes") : _("no");
+	nmc->allowed_fields[21].value = pswd_flags;
+	nmc->allowed_fields[22].value = pswd_raw_str;
+	nmc->allowed_fields[23].value = pswd_raw_flags;
+	nmc->allowed_fields[24].value = private_key_str;
+	nmc->allowed_fields[25].value = nm_setting_802_1x_get_private_key_password (s_8021X);
+	nmc->allowed_fields[26].value = priv_key_pswd_flags;
+	nmc->allowed_fields[27].value = phase2_private_key_str;
+	nmc->allowed_fields[28].value = nm_setting_802_1x_get_phase2_private_key_password (s_8021X);
+	nmc->allowed_fields[29].value = phase2_priv_key_pswd_flags;
+	nmc->allowed_fields[30].value = nm_setting_802_1x_get_pin (s_8021X);
+	nmc->allowed_fields[31].value = pin_flags;
+	nmc->allowed_fields[32].value = nm_setting_802_1x_get_system_ca_certs (s_8021X) ? _("yes") : _("no");
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
@@ -951,6 +1084,12 @@ setting_802_1X_details (NMSetting8021x *s_8021X, NmCli *nmc)
 	g_free (phase2_client_cert_str);
 	g_free (private_key_str);
 	g_free (phase2_private_key_str);
+	g_free (pswd_flags);
+	g_free (pswd_raw_str);
+	g_free (pswd_raw_flags);
+	g_free (priv_key_pswd_flags);
+	g_free (phase2_priv_key_pswd_flags);
+	g_free (pin_flags);
 	g_string_free (eap_str, TRUE);
 	g_string_free (alt_sub_match, TRUE);
 	g_string_free (phase2_alt_sub_match, TRUE);
@@ -963,8 +1102,8 @@ setting_wireless_details (NMSettingWireless *s_wireless, NmCli *nmc)
 {
 	int i;
 	const GByteArray *ssid, *bssid, *mac;
-	char *ssid_str, *channel_str, *rate_str, *tx_power_str, *mtu_str;
-	char *device_mac_str = NULL, *cloned_mac_str = NULL, *bssid_str = NULL;
+	char *channel_str, *rate_str, *tx_power_str, *mtu_str;
+	char *device_mac_str = NULL, *cloned_mac_str = NULL, *ssid_str = NULL, *bssid_str = NULL;
 	GString *mac_blacklist, *seen_bssids;
 	const GSList *iter;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
@@ -979,7 +1118,8 @@ setting_wireless_details (NMSettingWireless *s_wireless, NmCli *nmc)
 	print_fields (nmc->print_fields, nmc->allowed_fields);  /* Print field names */
 
 	ssid = nm_setting_wireless_get_ssid (s_wireless);
-	ssid_str = ssid_to_printable ((const char *) ssid->data, ssid->len);
+	if (ssid)
+		ssid_str = ssid_to_printable ((const char *) ssid->data, ssid->len);
 	channel_str = g_strdup_printf ("%d", nm_setting_wireless_get_channel (s_wireless));
 	rate_str = g_strdup_printf ("%d", nm_setting_wireless_get_rate (s_wireless));
 	bssid = nm_setting_wireless_get_bssid (s_wireless);
@@ -1023,6 +1163,7 @@ setting_wireless_details (NMSettingWireless *s_wireless, NmCli *nmc)
 	nmc->allowed_fields[11].value = strcmp (mtu_str, "0") ?  mtu_str : _("auto");
 	nmc->allowed_fields[12].value = seen_bssids->str;
 	nmc->allowed_fields[13].value = nm_setting_wireless_get_security (s_wireless);
+	nmc->allowed_fields[14].value = nm_setting_wireless_get_hidden (s_wireless) ? _("yes") : _("no");
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
@@ -1045,7 +1186,7 @@ gboolean
 setting_wireless_security_details (NMSettingWirelessSecurity *s_wireless_sec, NmCli *nmc)
 {
 	int i;
-	char *wep_tx_keyidx_str, *wep_key_type_str;
+	char *wep_tx_keyidx_str, *wep_key_type_str, *wep_flags, *psk_flags, *leap_flags;
 	GString *protos, *pairwises, *groups;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
@@ -1079,6 +1220,10 @@ setting_wireless_security_details (NMSettingWirelessSecurity *s_wireless_sec, Nm
 	}
 	wep_key_type_str = wep_key_type_to_string (nm_setting_wireless_security_get_wep_key_type (s_wireless_sec));
 
+	wep_flags = secret_flags_to_string (nm_setting_wireless_security_get_wep_key_flags (s_wireless_sec));
+	psk_flags = secret_flags_to_string (nm_setting_wireless_security_get_psk_flags (s_wireless_sec));
+	leap_flags = secret_flags_to_string (nm_setting_wireless_security_get_leap_password_flags (s_wireless_sec));
+
 	nmc->allowed_fields[0].value = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME;
 	nmc->allowed_fields[1].value = nm_setting_wireless_security_get_key_mgmt (s_wireless_sec);
 	nmc->allowed_fields[2].value = wep_tx_keyidx_str;
@@ -1091,15 +1236,21 @@ setting_wireless_security_details (NMSettingWirelessSecurity *s_wireless_sec, Nm
 	nmc->allowed_fields[9].value = nm_setting_wireless_security_get_wep_key (s_wireless_sec, 1);
 	nmc->allowed_fields[10].value = nm_setting_wireless_security_get_wep_key (s_wireless_sec, 2);
 	nmc->allowed_fields[11].value = nm_setting_wireless_security_get_wep_key (s_wireless_sec, 3);
-	nmc->allowed_fields[12].value = nm_setting_wireless_security_get_psk (s_wireless_sec);
-	nmc->allowed_fields[13].value = nm_setting_wireless_security_get_leap_password (s_wireless_sec);
-	nmc->allowed_fields[14].value = wep_key_type_str;
+	nmc->allowed_fields[12].value = wep_flags;
+	nmc->allowed_fields[13].value = wep_key_type_str;
+	nmc->allowed_fields[14].value = nm_setting_wireless_security_get_psk (s_wireless_sec);
+	nmc->allowed_fields[15].value = psk_flags;
+	nmc->allowed_fields[16].value = nm_setting_wireless_security_get_leap_password (s_wireless_sec);
+	nmc->allowed_fields[17].value = leap_flags;
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
 
 	g_free (wep_tx_keyidx_str);
 	g_free (wep_key_type_str);
+	g_free (wep_flags);
+	g_free (psk_flags);
+	g_free (leap_flags);
 	g_string_free (protos, TRUE);
 	g_string_free (pairwises, TRUE);
 	g_string_free (groups, TRUE);
@@ -1364,6 +1515,7 @@ setting_ip6_config_details (NMSettingIP6Config *s_ip6, NmCli *nmc)
 	nmc->allowed_fields[8].value = nm_setting_ip6_config_get_never_default (s_ip6) ? _("yes") : _("no");
 	nmc->allowed_fields[9].value = nm_setting_ip6_config_get_may_fail (s_ip6) ? _("yes") : _("no");
 	nmc->allowed_fields[10].value = ip6_privacy_str;
+	nmc->allowed_fields[11].value = nm_setting_ip6_config_get_dhcp_hostname (s_ip6);
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
@@ -1473,6 +1625,7 @@ setting_ppp_details (NMSettingPPP *s_ppp, NmCli *nmc)
 gboolean
 setting_pppoe_details (NMSettingPPPOE *s_pppoe, NmCli *nmc)
 {
+	char *pswd_flags;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
 	guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
@@ -1484,21 +1637,26 @@ setting_pppoe_details (NMSettingPPPOE *s_pppoe, NmCli *nmc)
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
 	print_fields (nmc->print_fields, nmc->allowed_fields);  /* Print field names */
 
+	pswd_flags = secret_flags_to_string (nm_setting_pppoe_get_password_flags (s_pppoe));
+
 	nmc->allowed_fields[0].value = NM_SETTING_PPPOE_SETTING_NAME;
 	nmc->allowed_fields[1].value = nm_setting_pppoe_get_service (s_pppoe);
 	nmc->allowed_fields[2].value = nm_setting_pppoe_get_username (s_pppoe);
 	nmc->allowed_fields[3].value = nm_setting_pppoe_get_password (s_pppoe);
+	nmc->allowed_fields[4].value = pswd_flags;
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
 
+	g_free (pswd_flags);
+
 	return TRUE;
 }
 
 gboolean
 setting_gsm_details (NMSettingGsm *s_gsm, NmCli *nmc)
 {
-	char *network_type_str, *allowed_bands_str;
+	char *network_type_str, *allowed_bands_str, *pswd_flags, *pin_flags;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
 	guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
@@ -1513,22 +1671,29 @@ setting_gsm_details (NMSettingGsm *s_gsm, NmCli *nmc)
 	network_type_str = g_strdup_printf ("%d", nm_setting_gsm_get_network_type (s_gsm));
 	allowed_bands_str = allowed_bands_to_string (nm_setting_gsm_get_allowed_bands (s_gsm));
 
+	pswd_flags = secret_flags_to_string (nm_setting_gsm_get_password_flags (s_gsm));
+	pin_flags = secret_flags_to_string (nm_setting_gsm_get_pin_flags (s_gsm));
+
 	nmc->allowed_fields[0].value = NM_SETTING_GSM_SETTING_NAME;
 	nmc->allowed_fields[1].value = nm_setting_gsm_get_number (s_gsm);
 	nmc->allowed_fields[2].value = nm_setting_gsm_get_username (s_gsm);
 	nmc->allowed_fields[3].value = nm_setting_gsm_get_password (s_gsm);
-	nmc->allowed_fields[4].value = nm_setting_gsm_get_apn (s_gsm);
-	nmc->allowed_fields[5].value = nm_setting_gsm_get_network_id (s_gsm);
-	nmc->allowed_fields[6].value = network_type_str;
-	nmc->allowed_fields[7].value = allowed_bands_str;
-	nmc->allowed_fields[8].value = nm_setting_gsm_get_pin (s_gsm);
-	nmc->allowed_fields[9].value = nm_setting_gsm_get_home_only (s_gsm) ? _("yes") : _("no");
+	nmc->allowed_fields[4].value = pswd_flags;
+	nmc->allowed_fields[5].value = nm_setting_gsm_get_apn (s_gsm);
+	nmc->allowed_fields[6].value = nm_setting_gsm_get_network_id (s_gsm);
+	nmc->allowed_fields[7].value = network_type_str;
+	nmc->allowed_fields[8].value = allowed_bands_str;
+	nmc->allowed_fields[9].value = nm_setting_gsm_get_pin (s_gsm);
+	nmc->allowed_fields[10].value = pin_flags;
+	nmc->allowed_fields[11].value = nm_setting_gsm_get_home_only (s_gsm) ? _("yes") : _("no");
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
 
 	g_free (network_type_str);
 	g_free (allowed_bands_str);
+	g_free (pswd_flags);
+	g_free (pin_flags);
 
 	return TRUE;
 }
@@ -1536,6 +1701,7 @@ setting_gsm_details (NMSettingGsm *s_gsm, NmCli *nmc)
 gboolean
 setting_cdma_details (NMSettingCdma *s_cdma, NmCli *nmc)
 {
+	char *pswd_flags;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
 	guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
@@ -1547,14 +1713,19 @@ setting_cdma_details (NMSettingCdma *s_cdma, NmCli *nmc)
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
 	print_fields (nmc->print_fields, nmc->allowed_fields);  /* Print field names */
 
+	pswd_flags = secret_flags_to_string (nm_setting_cdma_get_password_flags (s_cdma));
+
 	nmc->allowed_fields[0].value = NM_SETTING_CDMA_SETTING_NAME;
 	nmc->allowed_fields[1].value = nm_setting_cdma_get_number (s_cdma);
 	nmc->allowed_fields[2].value = nm_setting_cdma_get_username (s_cdma);
 	nmc->allowed_fields[3].value = nm_setting_cdma_get_password (s_cdma);
+	nmc->allowed_fields[4].value = pswd_flags;
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
 
+	g_free (pswd_flags);
+
 	return TRUE;
 }
 
@@ -1594,7 +1765,7 @@ gboolean
 setting_olpc_mesh_details (NMSettingOlpcMesh *s_olpc_mesh, NmCli *nmc)
 {
 	const GByteArray *ssid, *dhcp_anycast;
-	char *ssid_str, *channel_str, *dhcp_anycast_str = NULL;
+	char *channel_str, *ssid_str = NULL, *dhcp_anycast_str = NULL;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
 	guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
@@ -1607,7 +1778,8 @@ setting_olpc_mesh_details (NMSettingOlpcMesh *s_olpc_mesh, NmCli *nmc)
 	print_fields (nmc->print_fields, nmc->allowed_fields);  /* Print field names */
 
 	ssid = nm_setting_olpc_mesh_get_ssid (s_olpc_mesh);
-	ssid_str = ssid_to_printable ((const char *) ssid->data, ssid->len);
+	if (ssid)
+		ssid_str = ssid_to_printable ((const char *) ssid->data, ssid->len);
 	channel_str = g_strdup_printf ("%d", nm_setting_olpc_mesh_get_channel (s_olpc_mesh));
 	dhcp_anycast = nm_setting_olpc_mesh_get_dhcp_anycast_address (s_olpc_mesh);
 	if (dhcp_anycast)
@@ -1820,6 +1992,7 @@ setting_vlan_details (NMSettingVlan *s_vlan, NmCli *nmc)
 gboolean
 setting_adsl_details (NMSettingAdsl *s_adsl, NmCli *nmc)
 {
+	char *pswd_flags;
 	guint32 mode_flag = (nmc->print_output == NMC_PRINT_PRETTY) ? NMC_PF_FLAG_PRETTY : (nmc->print_output == NMC_PRINT_TERSE) ? NMC_PF_FLAG_TERSE : 0;
 	guint32 multiline_flag = nmc->multiline_output ? NMC_PF_FLAG_MULTILINE : 0;
 	guint32 escape_flag = nmc->escape_values ? NMC_PF_FLAG_ESCAPE : 0;
@@ -1831,19 +2004,23 @@ setting_adsl_details (NMSettingAdsl *s_adsl, NmCli *nmc)
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_FIELD_NAMES;
 	print_fields (nmc->print_fields, nmc->allowed_fields);  /* Print field names */
 
+	pswd_flags = secret_flags_to_string (nm_setting_adsl_get_password_flags (s_adsl));
+
 	nmc->allowed_fields[0].value = NM_SETTING_ADSL_SETTING_NAME;
 	nmc->allowed_fields[1].value = nm_setting_adsl_get_username (s_adsl);
 	nmc->allowed_fields[2].value = nm_setting_adsl_get_password (s_adsl);
-	nmc->allowed_fields[3].value = g_strdup_printf ("%d", nm_setting_adsl_get_vpi (s_adsl));
-	nmc->allowed_fields[4].value = g_strdup_printf ("%d", nm_setting_adsl_get_vci (s_adsl));
+	nmc->allowed_fields[3].value = pswd_flags;
+	nmc->allowed_fields[4].value = nm_setting_adsl_get_protocol (s_adsl);
 	nmc->allowed_fields[5].value = nm_setting_adsl_get_encapsulation (s_adsl);
-	nmc->allowed_fields[6].value = nm_setting_adsl_get_protocol (s_adsl);
+	nmc->allowed_fields[6].value = g_strdup_printf ("%d", nm_setting_adsl_get_vpi (s_adsl));
+	nmc->allowed_fields[7].value = g_strdup_printf ("%d", nm_setting_adsl_get_vci (s_adsl));
 
 	nmc->print_fields.flags = multiline_flag | mode_flag | escape_flag | NMC_PF_FLAG_SECTION_PREFIX;
 	print_fields (nmc->print_fields, nmc->allowed_fields); /* Print values */
 
-	g_free ((char*) nmc->allowed_fields[3].value);
-	g_free ((char*) nmc->allowed_fields[4].value);
+	g_free (pswd_flags);
+	g_free ((char*) nmc->allowed_fields[6].value);
+	g_free ((char*) nmc->allowed_fields[7].value);
 
 	return TRUE;
 }
diff --git a/cli/src/settings.h b/cli/src/settings.h
index 2a64052a..15e5577f 100644
--- a/cli/src/settings.h
+++ b/cli/src/settings.h
@@ -47,6 +47,7 @@
 #include "utils.h"
 
 
+gboolean setting_details (NMSetting *ssetting, NmCli *nmc);
 gboolean setting_connection_details (NMSettingConnection *s_con, NmCli *nmc);
 gboolean setting_wired_details (NMSettingWired *s_wired, NmCli *nmc);
 gboolean setting_802_1X_details (NMSetting8021x *s_8021X, NmCli *nmc);