/*
* The example shows how to list connections. Contrast this example with
* list-connections-gdbus.c, which is a bit lower level and talks directly to NM
* using GDBus.
*
* Compile with:
* gcc -Wall test.cpp -o test `pkg-config --libs --cflags libnm`
*/
/* Print details of connection */
static void
show_connection (NMConnection *connection)
{
printf("--- CONNECTION ---\n");
NMSettingWireless* s_con;
NMSettingWirelessSecurity* wifiSec;
const char* interfce;
interfce = nm_connection_get_interface_name(connection);
s_con = nm_connection_get_setting_wireless(connection);
if (s_con) {
GBytes* ssidBytes = nm_setting_wireless_get_ssid(s_con);
const char* ssid = nm_utils_ssid_to_utf8((guint8 *)g_bytes_get_data(ssidBytes, NULL), g_bytes_get_size(ssidBytes));
printf("SSID: %s\nInterface: %s\n", ssid, interfce);
wifiSec = nm_connection_get_setting_wireless_security(connection);
if(wifiSec){
const char* auth = nm_setting_wireless_security_get_auth_alg(wifiSec);
const char* encrypt = nm_setting_wireless_security_get_key_mgmt(wifiSec);
const char* psk = nm_setting_wireless_security_get_psk(wifiSec); //THIS RETURNS NULL! BUT THE WPA-PSK PASSWORD IS SET!
printf("Auth: %s\nEncryption: %s\nPassword: %s\n", auth, encrypt, psk);
nm_connection_dump(connection); //Also in debug dump no password field
}
}
}
int
main (int argc, char *argv[])
{
NMClient *client;
GError *error = NULL;
const GPtrArray *connections;
int i;
/* Initialize GType system */
g_type_init ();
if (!(client = nm_client_new (NULL, &error))) {
g_message ("Error: Could not connect to NetworkManager: %s.", error->message);
g_error_free (error);
return EXIT_FAILURE;
}
if (!nm_client_get_nm_running (client)) {
g_message ("Error: Can't obtain connections: NetworkManager is not running.");
return EXIT_FAILURE;
}
/* Now the connections can be listed. */
connections = nm_client_get_connections (client);
printf ("Connections:\n===================\n");
for (i = 0; i < connections->len; i++)
show_connection ((NMConnection*) connections->pdata[i]);
g_object_unref (client);
return EXIT_SUCCESS;
}
This is the interesting part of program output: Program output image
And this is the etc/NetworkManager/system_connections dump (where the psk field is set): Wireless Network file dump image
Thanks in advance and Best Regards,
Flavio