1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* NetworkManager system settings service - keyfile plugin
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * Copyright (C) 2008 - 2011 Red Hat, Inc.
19 */
20
21 #include <stdio.h>
22 #include <stdarg.h>
23 #include <unistd.h>
24 #include <string.h>
25 #include <netinet/ether.h>
26 #include <linux/if_infiniband.h>
27 #include <netinet/in.h>
28 #include <arpa/inet.h>
29 #include <sys/socket.h>
30 #include <sys/types.h>
31 #include <sys/stat.h>
32
33 #include <nm-utils.h>
34 #include <nm-setting-connection.h>
35 #include <nm-setting-wired.h>
36 #include <nm-setting-wireless.h>
37 #include <nm-setting-wireless-security.h>
38 #include <nm-setting-ip4-config.h>
39 #include <nm-setting-ip6-config.h>
40 #include <nm-setting-8021x.h>
41 #include <nm-setting-pppoe.h>
42 #include <nm-setting-ppp.h>
43 #include <nm-setting-vpn.h>
44 #include <nm-setting-gsm.h>
45 #include <nm-setting-cdma.h>
46 #include <nm-setting-serial.h>
47 #include <nm-setting-vlan.h>
48
49 #include "nm-test-helpers.h"
50 #include "NetworkManagerUtils.h"
51
52 #include "common.h"
53 #include "reader.h"
54 #include "writer.h"
55 #include "utils.h"
56
57 #if 0
58 static void
59 connection_diff (NMConnection *a, NMConnection *b)
60 {
61 GHashTable *hash;
62 GHashTableIter iter, siter;
63 const char *setting_name, *key;
64 GHashTable *setting_hash = NULL;
65
66 if (!nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &hash)) {
67 g_hash_table_iter_init (&iter, hash);
68 while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting_hash)) {
69 g_hash_table_iter_init (&siter, setting_hash);
70 while (g_hash_table_iter_next (&siter, (gpointer) &key, NULL))
71 g_message (":: %s :: %s", setting_name,key);
72 }
73 g_hash_table_destroy (hash);
74 }
75 }
76 #endif
77
78 static gboolean
79 verify_cert_or_key (NMSetting8021x *s_compare,
80 const char *file,
81 const char *privkey_password,
82 const char *property)
83 {
84 NMSetting8021x *s_8021x;
85 GError *error = NULL;
86 gboolean success = FALSE;
87 const char *expected = NULL, *setting = NULL;
88 gboolean phase2 = FALSE;
89 NMSetting8021xCKScheme scheme = NM_SETTING_802_1X_CK_SCHEME_UNKNOWN;
90
91 if (strstr (property, "phase2"))
92 phase2 = TRUE;
93
94 s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
95
96 /* Load the certificate into an empty setting */
97 if (strstr (property, "ca-cert")) {
98 if (phase2)
99 success = nm_setting_802_1x_set_phase2_ca_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
100 else
101 success = nm_setting_802_1x_set_ca_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
102 } else if (strstr (property, "client-cert")) {
103 if (phase2)
104 success = nm_setting_802_1x_set_phase2_client_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
105 else
106 success = nm_setting_802_1x_set_client_cert (s_8021x, file, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
107 } else if (strstr (property, "private-key")) {
108 if (phase2)
109 success = nm_setting_802_1x_set_phase2_private_key (s_8021x, file, privkey_password, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
110 else
111 success = nm_setting_802_1x_set_private_key (s_8021x, file, privkey_password, NM_SETTING_802_1X_CK_SCHEME_PATH, NULL, &error);
112 }
113 g_assert_no_error (error);
114 g_assert_cmpint (success, ==, TRUE);
115
116 /* Ensure it was loaded using the PATH scheme */
117 if (strstr (property, "ca-cert")) {
118 if (phase2)
119 scheme = nm_setting_802_1x_get_phase2_ca_cert_scheme (s_8021x);
120 else
121 scheme = nm_setting_802_1x_get_ca_cert_scheme (s_8021x);
122 } else if (strstr (property, "client-cert")) {
123 if (phase2)
124 scheme = nm_setting_802_1x_get_phase2_client_cert_scheme (s_8021x);
125 else
126 scheme = nm_setting_802_1x_get_client_cert_scheme (s_8021x);
127 } else if (strstr (property, "private-key")) {
128 if (phase2)
129 scheme = nm_setting_802_1x_get_phase2_private_key_scheme (s_8021x);
130 else
131 scheme = nm_setting_802_1x_get_private_key_scheme (s_8021x);
132 }
133 g_assert_cmpint (scheme, ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
134
135 /* Grab the path back out */
136 if (strstr (property, "ca-cert")) {
137 if (phase2)
138 expected = nm_setting_802_1x_get_phase2_ca_cert_path (s_8021x);
139 else
140 expected = nm_setting_802_1x_get_ca_cert_path (s_8021x);
141 } else if (strstr (property, "client-cert")) {
142 if (phase2)
143 expected = nm_setting_802_1x_get_phase2_client_cert_path (s_8021x);
144 else
145 expected = nm_setting_802_1x_get_client_cert_path (s_8021x);
146 } else if (strstr (property, "private-key")) {
147 if (phase2)
148 expected = nm_setting_802_1x_get_phase2_private_key_path (s_8021x);
149 else
150 expected = nm_setting_802_1x_get_private_key_path (s_8021x);
151 }
152 g_assert_cmpstr (expected, ==, file);
153
154 /* Compare the path with the expected path from the real setting */
155 if (strstr (property, "ca-cert")) {
156 if (phase2)
157 setting = nm_setting_802_1x_get_phase2_ca_cert_path (s_compare);
158 else
159 setting = nm_setting_802_1x_get_ca_cert_path (s_compare);
160 } else if (strstr (property, "client-cert")) {
161 if (phase2)
162 setting = nm_setting_802_1x_get_phase2_client_cert_path (s_compare);
163 else
164 setting = nm_setting_802_1x_get_client_cert_path (s_compare);
165 } else if (strstr (property, "private-key")) {
166 if (phase2)
167 setting = nm_setting_802_1x_get_phase2_private_key_path (s_compare);
168 else
169 setting = nm_setting_802_1x_get_private_key_path (s_compare);
170 }
171 g_assert_cmpstr (setting, ==, expected);
172
173 g_object_unref (s_8021x);
174 return TRUE;
175 }
176
177
178 static void
179 test_read_basic (void)
180 {
181 NMConnection *connection;
182 NMSettingConnection *s_con;
183 NMSettingWired *s_wired;
184 NMSettingIP4Config *s_ip4;
185 NMSettingIP6Config *s_ip6;
186 GError *error = NULL;
187 const GByteArray *array;
188 char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
189 const char *expected_id = "System test-minimal";
190 guint64 expected_timestamp = 0;
191 gboolean success;
192
193 connection = connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-minimal",
194 NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
195 g_assert_no_error (error);
196 g_assert (connection);
197 success = nm_connection_verify (connection, &error);
198 g_assert_no_error (error);
199 g_assert (success);
200
201 /* ===== CONNECTION SETTING ===== */
202 s_con = nm_connection_get_setting_connection (connection);
203 g_assert (s_con);
204 g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
205 g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
206 g_assert (nm_setting_connection_get_autoconnect (s_con));
207
208 /* UUID can't be tested if the ifcfg does not contain the UUID key, because
209 * the UUID is generated on the full path of the ifcfg file, which can change
210 * depending on where the tests are run.
211 */
212
213 /* ===== WIRED SETTING ===== */
214 s_wired = nm_connection_get_setting_wired (connection);
215 g_assert (s_wired);
216 g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
217
218 /* MAC address */
219 array = nm_setting_wired_get_mac_address (s_wired);
220 g_assert (array);
221 g_assert_cmpint (array->len, ==, ETH_ALEN);
222 g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
223
224 /* ===== IPv4 SETTING ===== */
225 s_ip4 = nm_connection_get_setting_ip4_config (connection);
226 g_assert (s_ip4);
227 g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
228 g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
229
230 /* ===== IPv6 SETTING ===== */
231 s_ip6 = nm_connection_get_setting_ip6_config (connection);
232 g_assert (s_ip6);
233 g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
234 g_assert (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE);
235
236 g_object_unref (connection);
237 }
238
239 static void
240 test_read_variables_corner_cases (void)
241 {
242 NMConnection *connection;
243 NMSettingConnection *s_con;
244 NMSettingWired *s_wired;
245 NMSettingIP4Config *s_ip4;
246 GError *error = NULL;
247 const GByteArray *array;
248 char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
249 const char *expected_zone = "'";
250 const char *expected_id = "\"";
251 guint64 expected_timestamp = 0;
252 gboolean success;
253
254 connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-variables-corner-cases-1",
255 NULL, TYPE_ETHERNET, NULL, NULL, NULL, NULL, NULL, &error, NULL);
256 g_assert_no_error (error);
257 g_assert (connection);
258 success = nm_connection_verify (connection, &error);
259 g_assert_no_error (error);
260 g_assert (success);
261
262 /* ===== CONNECTION SETTING ===== */
263 s_con = nm_connection_get_setting_connection (connection);
264 g_assert (s_con);
265 g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
266 g_assert_cmpstr (nm_setting_connection_get_zone (s_con), ==, expected_zone);
267 g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
268 g_assert (nm_setting_connection_get_autoconnect (s_con));
269
270 /* ===== WIRED SETTING ===== */
271 s_wired = nm_connection_get_setting_wired (connection);
272 g_assert (s_wired);
273 g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0);
274
275 /* MAC address */
276 array = nm_setting_wired_get_mac_address (s_wired);
277 g_assert (array);
278 g_assert_cmpint (array->len, ==, ETH_ALEN);
279 g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
280
281 /* ===== IPv4 SETTING ===== */
282 s_ip4 = nm_connection_get_setting_ip4_config (connection);
283 g_assert (s_ip4);
284 g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
285 g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
286
287 g_object_unref (connection);
288 }
289
290 static void
291 test_read_unmanaged (void)
292 {
293 NMConnection *connection;
294 NMSettingConnection *s_con;
295 NMSettingWired *s_wired;
296 NMSettingIP4Config *s_ip4;
297 char *unmanaged = NULL;
298 GError *error = NULL;
299 const GByteArray *array;
300 char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0xf8, 0x9f };
301 const char *expected_id = "System test-nm-controlled";
302 guint64 expected_timestamp = 0;
303 gboolean success;
304
305 connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-nm-controlled",
306 NULL, TYPE_ETHERNET, NULL,
307 &unmanaged,
308 NULL, NULL, NULL, &error, NULL);
309 g_assert_no_error (error);
310 g_assert (connection);
311 success = nm_connection_verify (connection, &error);
312 g_assert_no_error (error);
313 g_assert (success);
314 g_assert_cmpstr (unmanaged, ==, "mac:00:11:22:33:f8:9f");
315
316 /* ===== CONNECTION SETTING ===== */
317 s_con = nm_connection_get_setting_connection (connection);
318 g_assert (s_con);
319 g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
320 g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, expected_timestamp);
321 g_assert (nm_setting_connection_get_autoconnect (s_con));
322
323 /* ===== WIRED SETTING ===== */
324 s_wired = nm_connection_get_setting_wired (connection);
325 g_assert (s_wired);
326
327 /* MAC address */
328 array = nm_setting_wired_get_mac_address (s_wired);
329 g_assert (array);
330 g_assert_cmpint (array->len, ==, ETH_ALEN);
331 g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
332
333 /* ===== IPv4 SETTING ===== */
334 s_ip4 = nm_connection_get_setting_ip4_config (connection);
335 g_assert (s_ip4 == NULL);
336
337 g_free (unmanaged);
338 g_object_unref (connection);
339 }
340
341 static void
342 test_read_wired_static (const char *file,
343 const char *expected_id,
344 gboolean expect_ip6)
345 {
346 NMConnection *connection;
347 NMSettingConnection *s_con;
348 NMSettingWired *s_wired;
349 NMSettingIP4Config *s_ip4;
350 NMSettingIP6Config *s_ip6;
351 char *unmanaged = NULL;
352 GError *error = NULL;
353 const GByteArray *array;
354 char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee };
355 const char *expected_dns1 = "4.2.2.1";
356 const char *expected_dns2 = "4.2.2.2";
357 guint32 addr;
358 struct in6_addr addr6;
359 const char *expected_address1 = "192.168.1.5";
360 const char *expected_address1_gw = "192.168.1.1";
361 const char *expected6_address1 = "dead:beaf::1";
362 const char *expected6_address2 = "dead:beaf::2";
363 const char *expected6_dns1 = "1:2:3:4::a";
364 const char *expected6_dns2 = "1:2:3:4::b";
365 NMIP4Address *ip4_addr;
366 NMIP6Address *ip6_addr;
367 gboolean success;
368
369 connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL,
370 &unmanaged, NULL, NULL, NULL, &error, NULL);
371 g_assert_no_error (error);
372 g_assert (connection);
373 success = nm_connection_verify (connection, &error);
374 g_assert_no_error (error);
375 g_assert (success);
376 g_assert_cmpstr (unmanaged, ==, NULL);
377
378 /* ===== CONNECTION SETTING ===== */
379 s_con = nm_connection_get_setting_connection (connection);
380 g_assert (s_con);
381 g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
382 g_assert_cmpint (nm_setting_connection_get_timestamp (s_con), ==, 0);
383 g_assert (nm_setting_connection_get_autoconnect (s_con));
384
385 /* ===== WIRED SETTING ===== */
386 s_wired = nm_connection_get_setting_wired (connection);
387 g_assert (s_wired);
388 g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 1492);
389
390 /* MAC address */
391 array = nm_setting_wired_get_mac_address (s_wired);
392 g_assert (array);
393 g_assert_cmpint (array->len, ==, ETH_ALEN);
394 g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0);
395
396 /* ===== IPv4 SETTING ===== */
397 s_ip4 = nm_connection_get_setting_ip4_config (connection);
398 g_assert (s_ip4);
399 g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
400 g_assert (nm_setting_ip4_config_get_may_fail (s_ip4));
401
402 /* DNS Addresses */
403 g_assert_cmpint (nm_setting_ip4_config_get_num_dns (s_ip4), ==, 2);
404 g_assert_cmpint (inet_pton (AF_INET, expected_dns1, &addr), >, 0);
405 g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 0), ==, addr);
406 g_assert_cmpint (inet_pton (AF_INET, expected_dns2, &addr), >, 0);
407 g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 1), ==, addr);
408
409 /* IP addresses */
410 g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 1);
411 ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
412 g_assert (ip4_addr);
413 g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 24);
414 g_assert_cmpint (inet_pton (AF_INET, expected_address1, &addr), >, 0);
415 g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr);
416 g_assert_cmpint (inet_pton (AF_INET, expected_address1_gw, &addr), >, 0);
417 g_assert_cmpint (nm_ip4_address_get_gateway (ip4_addr), ==, addr);
418
419 /* ===== IPv6 SETTING ===== */
420 s_ip6 = nm_connection_get_setting_ip6_config (connection);
421 g_assert (s_ip6);
422 if (expect_ip6) {
423 g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_MANUAL);
424 g_assert (nm_setting_ip6_config_get_may_fail (s_ip6));
425
426 /* DNS Addresses */
427 g_assert_cmpint (nm_setting_ip6_config_get_num_dns (s_ip6), ==, 2);
428 g_assert_cmpint (inet_pton (AF_INET6, expected6_dns1, &addr6), >, 0);
429 g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr6));
430 g_assert_cmpint (inet_pton (AF_INET6, expected6_dns2, &addr6), >, 0);
431 g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr6));
432
433 /* IP addresses */
434 g_assert_cmpint (nm_setting_ip6_config_get_num_addresses (s_ip6), ==, 2);
435
436 ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
437 g_assert (ip6_addr);
438 g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 64);
439 g_assert_cmpint (inet_pton (AF_INET6, expected6_address1, &addr6), >, 0);
440 g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
441
442 ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
443 g_assert (ip6_addr);
444 g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 56);
445 g_assert_cmpint (inet_pton (AF_INET6, expected6_address2, &addr6), >, 0);
446 g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
447 } else {
448 g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
449 }
450
451 g_free (unmanaged);
452 g_object_unref (connection);
453 }
454
455 static void
456 test_read_wired_static_no_prefix (gconstpointer user_data)
457 {
458 guint32 expected_prefix = GPOINTER_TO_UINT (user_data);
459 NMConnection *connection;
460 NMSettingConnection *s_con;
461 NMSettingIP4Config *s_ip4;
462 GError *error = NULL;
463 NMIP4Address *ip4_addr;
464 char *file, *expected_id;
465
466 file = g_strdup_printf (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-wired-static-no-prefix-%u", expected_prefix);
467 expected_id = g_strdup_printf ("System test-wired-static-no-prefix-%u", expected_prefix);
468
469 connection = connection_from_file (file, NULL, TYPE_ETHERNET, NULL, NULL,
470 NULL, NULL, NULL, &error, NULL);
471 g_assert_no_error (error);
472 g_assert (connection);
473 g_assert (nm_connection_verify (connection, &error));
474
475 /* ===== CONNECTION SETTING ===== */
476 s_con = nm_connection_get_setting_connection (connection);
477 g_assert (s_con);
478 g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
479
480 /* ===== IPv4 SETTING ===== */
481 s_ip4 = nm_connection_get_setting_ip4_config (connection);
482 g_assert (s_ip4);
483 g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_MANUAL);
484
485 g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 1);
486 ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
487 g_assert (ip4_addr);
488 g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, expected_prefix);
489
490 g_free (file);
491 g_free (expected_id);
492 g_object_unref (connection);
493 }
494
495 #define TEST_IFCFG_WIRED_DHCP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp"
496
497 static void
498 test_read_wired_dhcp (void)
499 {
500 NMConnection *connection;
501 NMSettingConnection *s_con;
502 NMSettingWired *s_wired;
503 NMSettingIP4Config *s_ip4;
504 char *unmanaged = NULL;
505 char *keyfile = NULL;
506 char *routefile = NULL;
507 char *route6file = NULL;
508 gboolean ignore_error = FALSE;
509 GError *error = NULL;
510 const GByteArray *array;
511 char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee };
512 const char *tmp;
513 const char *expected_id = "System test-wired-dhcp";
514 const char *expected_dns1 = "4.2.2.1";
515 const char *expected_dns2 = "4.2.2.2";
516 guint32 addr;
517 const char *expected_dhcp_hostname = "foobar";
518
519 connection = connection_from_file (TEST_IFCFG_WIRED_DHCP,
520 NULL,
521 TYPE_ETHERNET,
522 NULL,
523 &unmanaged,
524 &keyfile,
525 &routefile,
526 &route6file,
527 &error,
528 &ignore_error);
529 ASSERT (connection != NULL,
530 "wired-dhcp-read", "failed to read %s: %s", TEST_IFCFG_WIRED_DHCP, error->message);
531
532 ASSERT (nm_connection_verify (connection, &error),
533 "wired-dhcp-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DHCP, error->message);
534
535 ASSERT (unmanaged == NULL,
536 "wired-dhcp-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DHCP);
537
538 /* ===== CONNECTION SETTING ===== */
539
540 s_con = nm_connection_get_setting_connection (connection);
541 ASSERT (s_con != NULL,
542 "wired-dhcp-verify-connection", "failed to verify %s: missing %s setting",
543 TEST_IFCFG_WIRED_DHCP,
544 NM_SETTING_CONNECTION_SETTING_NAME);
545
546 /* ID */
547 tmp = nm_setting_connection_get_id (s_con);
548 ASSERT (tmp != NULL,
549 "wired-dhcp-verify-connection", "failed to verify %s: missing %s / %s key",
550 TEST_IFCFG_WIRED_DHCP,
551 NM_SETTING_CONNECTION_SETTING_NAME,
552 NM_SETTING_CONNECTION_ID);
553 ASSERT (strcmp (tmp, expected_id) == 0,
554 "wired-dhcp-verify-connection", "failed to verify %s: unexpected %s / %s key value",
555 TEST_IFCFG_WIRED_DHCP,
556 NM_SETTING_CONNECTION_SETTING_NAME,
557 NM_SETTING_CONNECTION_ID);
558
559 /* Timestamp */
560 ASSERT (nm_setting_connection_get_timestamp (s_con) == 0,
561 "wired-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
562 TEST_IFCFG_WIRED_DHCP,
563 NM_SETTING_CONNECTION_SETTING_NAME,
564 NM_SETTING_CONNECTION_TIMESTAMP);
565
566 /* Autoconnect */
567 ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
568 "wired-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
569 TEST_IFCFG_WIRED_DHCP,
570 NM_SETTING_CONNECTION_SETTING_NAME,
571 NM_SETTING_CONNECTION_AUTOCONNECT);
572
573 /* ===== WIRED SETTING ===== */
574
575 s_wired = nm_connection_get_setting_wired (connection);
576 ASSERT (s_wired != NULL,
577 "wired-dhcp-verify-wired", "failed to verify %s: missing %s setting",
578 TEST_IFCFG_WIRED_DHCP,
579 NM_SETTING_WIRED_SETTING_NAME);
580
581 /* MAC address */
582 array = nm_setting_wired_get_mac_address (s_wired);
583 ASSERT (array != NULL,
584 "wired-dhcp-verify-wired", "failed to verify %s: missing %s / %s key",
585 TEST_IFCFG_WIRED_DHCP,
586 NM_SETTING_WIRED_SETTING_NAME,
587 NM_SETTING_WIRED_MAC_ADDRESS);
588 ASSERT (array->len == ETH_ALEN,
589 "wired-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
590 TEST_IFCFG_WIRED_DHCP,
591 NM_SETTING_WIRED_SETTING_NAME,
592 NM_SETTING_WIRED_MAC_ADDRESS);
593 ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
594 "wired-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value",
595 TEST_IFCFG_WIRED_DHCP,
596 NM_SETTING_WIRED_SETTING_NAME,
597 NM_SETTING_WIRED_MAC_ADDRESS);
598
599 /* ===== IPv4 SETTING ===== */
600
601 s_ip4 = nm_connection_get_setting_ip4_config (connection);
602 ASSERT (s_ip4 != NULL,
603 "wired-dhcp-verify-ip4", "failed to verify %s: missing %s setting",
604 TEST_IFCFG_WIRED_DHCP,
605 NM_SETTING_IP4_CONFIG_SETTING_NAME);
606
607 /* Method */
608 tmp = nm_setting_ip4_config_get_method (s_ip4);
609 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
610 "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
611 TEST_IFCFG_WIRED_DHCP,
612 NM_SETTING_IP4_CONFIG_SETTING_NAME,
613 NM_SETTING_IP4_CONFIG_METHOD);
614
615 tmp = nm_setting_ip4_config_get_dhcp_hostname (s_ip4);
616 ASSERT (tmp != NULL,
617 "wired-dhcp-verify-ip4", "failed to verify %s: missing %s / %s key",
618 TEST_IFCFG_WIRED_DHCP,
619 NM_SETTING_IP4_CONFIG_SETTING_NAME,
620 NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME);
621 ASSERT (strcmp (tmp, expected_dhcp_hostname) == 0,
622 "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
623 TEST_IFCFG_WIRED_DHCP,
624 NM_SETTING_IP4_CONFIG_SETTING_NAME,
625 NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME);
626
627 ASSERT (nm_setting_ip4_config_get_ignore_auto_dns (s_ip4) == TRUE,
628 "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
629 TEST_IFCFG_WIRED_DHCP,
630 NM_SETTING_IP4_CONFIG_SETTING_NAME,
631 NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS);
632
633 /* DNS Addresses */
634 ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
635 "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
636 TEST_IFCFG_WIRED_DHCP,
637 NM_SETTING_IP4_CONFIG_SETTING_NAME,
638 NM_SETTING_IP4_CONFIG_DNS);
639
640 ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
641 "wired-dhcp-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
642 TEST_IFCFG_WIRED_DHCP,
643 NM_SETTING_IP4_CONFIG_SETTING_NAME,
644 NM_SETTING_IP4_CONFIG_DNS);
645 ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
646 "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
647 TEST_IFCFG_WIRED_DHCP,
648 NM_SETTING_IP4_CONFIG_SETTING_NAME,
649 NM_SETTING_IP4_CONFIG_DNS);
650
651 ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
652 "wired-dhcp-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
653 TEST_IFCFG_WIRED_DHCP,
654 NM_SETTING_IP4_CONFIG_SETTING_NAME,
655 NM_SETTING_IP4_CONFIG_DNS);
656 ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
657 "wired-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
658 TEST_IFCFG_WIRED_DHCP,
659 NM_SETTING_IP4_CONFIG_SETTING_NAME,
660 NM_SETTING_IP4_CONFIG_DNS);
661
662 g_free (unmanaged);
663 g_free (keyfile);
664 g_free (routefile);
665 g_free (route6file);
666 g_object_unref (connection);
667 }
668
669 static void
670 test_read_wired_dhcp_plus_ip (void)
671 {
672 NMConnection *connection;
673 NMSettingIP4Config *s_ip4;
674 NMSettingIP6Config *s_ip6;
675 GError *error = NULL;
676 guint32 addr4;
677 struct in6_addr addr6;
678 NMIP4Address *ip4_addr;
679 NMIP6Address *ip6_addr;
680 gboolean success;
681
682 connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-plus-ip",
683 NULL, TYPE_ETHERNET, NULL, NULL,
684 NULL, NULL, NULL, &error, NULL);
685 g_assert_no_error (error);
686 g_assert (connection);
687 success = nm_connection_verify (connection, &error);
688 g_assert_no_error (error);
689 g_assert (success);
690
691 /* ===== IPv4 SETTING ===== */
692 s_ip4 = nm_connection_get_setting_ip4_config (connection);
693 g_assert (s_ip4);
694 g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
695 g_assert (nm_setting_ip4_config_get_may_fail (s_ip4));
696
697 /* DNS Addresses */
698 g_assert_cmpint (nm_setting_ip4_config_get_num_dns (s_ip4), ==, 2);
699 g_assert_cmpint (inet_pton (AF_INET, "4.2.2.1", &addr4), >, 0);
700 g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 0), ==, addr4);
701 g_assert_cmpint (inet_pton (AF_INET, "4.2.2.2", &addr4), >, 0);
702 g_assert_cmpint (nm_setting_ip4_config_get_dns (s_ip4, 1), ==, addr4);
703
704 /* IP addresses */
705 g_assert_cmpint (nm_setting_ip4_config_get_num_addresses (s_ip4), ==, 2);
706 ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
707 g_assert (ip4_addr);
708 g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 24);
709 g_assert_cmpint (inet_pton (AF_INET, "1.2.3.4", &addr4), >, 0);
710 g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr4);
711 g_assert_cmpint (inet_pton (AF_INET, "1.1.1.1", &addr4), >, 0);
712 g_assert_cmpint (nm_ip4_address_get_gateway (ip4_addr), ==, addr4);
713
714 ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 1);
715 g_assert (ip4_addr);
716 g_assert_cmpint (nm_ip4_address_get_prefix (ip4_addr), ==, 16);
717 g_assert_cmpint (inet_pton (AF_INET, "9.8.7.6", &addr4), >, 0);
718 g_assert_cmpint (nm_ip4_address_get_address (ip4_addr), ==, addr4);
719
720 /* ===== IPv6 SETTING ===== */
721 s_ip6 = nm_connection_get_setting_ip6_config (connection);
722 g_assert (s_ip6);
723 g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_AUTO);
724 g_assert (nm_setting_ip6_config_get_may_fail (s_ip6));
725
726 /* DNS Addresses */
727 g_assert_cmpint (nm_setting_ip6_config_get_num_dns (s_ip6), ==, 2);
728 g_assert_cmpint (inet_pton (AF_INET6, "1:2:3:4::a", &addr6), >, 0);
729 g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr6));
730 g_assert_cmpint (inet_pton (AF_INET6, "1:2:3:4::b", &addr6), >, 0);
731 g_assert (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr6));
732
733 /* IP addresses */
734 g_assert_cmpint (nm_setting_ip6_config_get_num_addresses (s_ip6), ==, 3);
735 ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
736 g_assert (ip6_addr);
737 g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 56);
738 g_assert_cmpint (inet_pton (AF_INET6, "1001:abba::1234", &addr6), >, 0);
739 g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
740
741 ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
742 g_assert (ip6_addr);
743 g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 64);
744 g_assert_cmpint (inet_pton (AF_INET6, "2001:abba::2234", &addr6), >, 0);
745 g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
746
747 ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 2);
748 g_assert (ip6_addr);
749 g_assert_cmpint (nm_ip6_address_get_prefix (ip6_addr), ==, 96);
750 g_assert_cmpint (inet_pton (AF_INET6, "3001:abba::3234", &addr6), >, 0);
751 g_assert (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr6));
752
753 g_object_unref (connection);
754 }
755
756 #define TEST_IFCFG_WIRED_GLOBAL_GATEWAY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-global-gateway"
757 #define TEST_NETWORK_WIRED_GLOBAL_GATEWAY TEST_IFCFG_DIR"/network-scripts/network-test-wired-global-gateway"
758
759 static void
760 test_read_wired_global_gateway (void)
761 {
762 NMConnection *connection;
763 NMSettingConnection *s_con;
764 NMSettingWired *s_wired;
765 NMSettingIP4Config *s_ip4;
766 char *unmanaged = NULL;
767 char *keyfile = NULL;
768 char *routefile = NULL;
769 char *route6file = NULL;
770 gboolean ignore_error = FALSE;
771 GError *error = NULL;
772 const char *tmp;
773 const char *expected_id = "System test-wired-global-gateway";
774 guint32 addr;
775 const char *expected_address1 = "192.168.1.5";
776 const char *expected_address1_gw = "192.168.1.2";
777 NMIP4Address *ip4_addr;
778
779 connection = connection_from_file (TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
780 TEST_NETWORK_WIRED_GLOBAL_GATEWAY,
781 TYPE_ETHERNET,
782 NULL,
783 &unmanaged,
784 &keyfile,
785 &routefile,
786 &route6file,
787 &error,
788 &ignore_error);
789 ASSERT (connection != NULL,
790 "wired-global-gateway-read", "failed to read %s: %s", TEST_IFCFG_WIRED_GLOBAL_GATEWAY, error->message);
791
792 ASSERT (nm_connection_verify (connection, &error),
793 "wired-global-gateway-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_GLOBAL_GATEWAY, error->message);
794
795 ASSERT (unmanaged == NULL,
796 "wired-global-gateway-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_GLOBAL_GATEWAY);
797
798 /* ===== CONNECTION SETTING ===== */
799
800 s_con = nm_connection_get_setting_connection (connection);
801 ASSERT (s_con != NULL,
802 "wired-global-gateway-verify-connection", "failed to verify %s: missing %s setting",
803 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
804 NM_SETTING_CONNECTION_SETTING_NAME);
805
806 /* ID */
807 tmp = nm_setting_connection_get_id (s_con);
808 ASSERT (tmp != NULL,
809 "wired-global-gateway-verify-connection", "failed to verify %s: missing %s / %s key",
810 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
811 NM_SETTING_CONNECTION_SETTING_NAME,
812 NM_SETTING_CONNECTION_ID);
813 ASSERT (strcmp (tmp, expected_id) == 0,
814 "wired-global-gateway-verify-connection", "failed to verify %s: unexpected %s / %s key value",
815 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
816 NM_SETTING_CONNECTION_SETTING_NAME,
817 NM_SETTING_CONNECTION_ID);
818
819 /* ===== WIRED SETTING ===== */
820
821 s_wired = nm_connection_get_setting_wired (connection);
822 ASSERT (s_wired != NULL,
823 "wired-global-gateway-verify-wired", "failed to verify %s: missing %s setting",
824 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
825 NM_SETTING_WIRED_SETTING_NAME);
826
827 /* ===== IPv4 SETTING ===== */
828
829 s_ip4 = nm_connection_get_setting_ip4_config (connection);
830 ASSERT (s_ip4 != NULL,
831 "wired-global-gateway-verify-ip4", "failed to verify %s: missing %s setting",
832 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
833 NM_SETTING_IP4_CONFIG_SETTING_NAME);
834
835 /* Method */
836 tmp = nm_setting_ip4_config_get_method (s_ip4);
837 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
838 "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
839 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
840 NM_SETTING_IP4_CONFIG_SETTING_NAME,
841 NM_SETTING_IP4_CONFIG_METHOD);
842
843 /* Address #1 */
844 ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
845 ASSERT (ip4_addr,
846 "wired-global-gateway-verify-ip4", "failed to verify %s: missing IP4 address #1",
847 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
848 NM_SETTING_IP4_CONFIG_SETTING_NAME,
849 NM_SETTING_IP4_CONFIG_ADDRESSES);
850
851 ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 24,
852 "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
853 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
854 NM_SETTING_IP4_CONFIG_SETTING_NAME,
855 NM_SETTING_IP4_CONFIG_ADDRESSES);
856
857 ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
858 "wired-global-gateway-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
859 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
860 NM_SETTING_IP4_CONFIG_SETTING_NAME,
861 NM_SETTING_IP4_CONFIG_DNS);
862 ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
863 "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
864 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
865 NM_SETTING_IP4_CONFIG_SETTING_NAME,
866 NM_SETTING_IP4_CONFIG_ADDRESSES);
867
868 ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0,
869 "wired-global-gateway-verify-ip4", "failed to verify %s: couldn't convert IP address #1 gateway",
870 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
871 NM_SETTING_IP4_CONFIG_SETTING_NAME,
872 NM_SETTING_IP4_CONFIG_ADDRESSES);
873 ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr,
874 "wired-global-gateway-verify-ip4", "failed to verify %s: unexpected IP4 address #1 gateway",
875 TEST_IFCFG_WIRED_GLOBAL_GATEWAY,
876 NM_SETTING_IP4_CONFIG_SETTING_NAME,
877 NM_SETTING_IP4_CONFIG_ADDRESSES);
878
879 g_free (unmanaged);
880 g_free (keyfile);
881 g_free (routefile);
882 g_free (route6file);
883 g_object_unref (connection);
884 }
885
886 #define TEST_IFCFG_WIRED_NEVER_DEFAULT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-never-default"
887 #define TEST_NETWORK_WIRED_NEVER_DEFAULT TEST_IFCFG_DIR"/network-scripts/network-test-wired-never-default"
888
889 static void
890 test_read_wired_never_default (void)
891 {
892 NMConnection *connection;
893 NMSettingConnection *s_con;
894 NMSettingWired *s_wired;
895 NMSettingIP4Config *s_ip4;
896 NMSettingIP6Config *s_ip6;
897 char *unmanaged = NULL;
898 char *keyfile = NULL;
899 char *routefile = NULL;
900 char *route6file = NULL;
901 gboolean ignore_error = FALSE;
902 GError *error = NULL;
903 const char *tmp;
904 const char *expected_id = "System test-wired-never-default";
905
906 connection = connection_from_file (TEST_IFCFG_WIRED_NEVER_DEFAULT,
907 TEST_NETWORK_WIRED_NEVER_DEFAULT,
908 TYPE_ETHERNET,
909 NULL,
910 &unmanaged,
911 &keyfile,
912 &routefile,
913 &route6file,
914 &error,
915 &ignore_error);
916 ASSERT (connection != NULL,
917 "wired-never-default-read", "failed to read %s: %s", TEST_IFCFG_WIRED_NEVER_DEFAULT, error->message);
918
919 ASSERT (nm_connection_verify (connection, &error),
920 "wired-never-default-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_NEVER_DEFAULT, error->message);
921
922 ASSERT (unmanaged == NULL,
923 "wired-never-default-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_NEVER_DEFAULT);
924
925 /* ===== CONNECTION SETTING ===== */
926
927 s_con = nm_connection_get_setting_connection (connection);
928 ASSERT (s_con != NULL,
929 "wired-never-default-verify-connection", "failed to verify %s: missing %s setting",
930 TEST_IFCFG_WIRED_NEVER_DEFAULT,
931 NM_SETTING_CONNECTION_SETTING_NAME);
932
933 /* ID */
934 tmp = nm_setting_connection_get_id (s_con);
935 ASSERT (tmp != NULL,
936 "wired-never-default-verify-connection", "failed to verify %s: missing %s / %s key",
937 TEST_IFCFG_WIRED_NEVER_DEFAULT,
938 NM_SETTING_CONNECTION_SETTING_NAME,
939 NM_SETTING_CONNECTION_ID);
940 ASSERT (strcmp (tmp, expected_id) == 0,
941 "wired-never-default-verify-connection", "failed to verify %s: unexpected %s / %s key value",
942 TEST_IFCFG_WIRED_NEVER_DEFAULT,
943 NM_SETTING_CONNECTION_SETTING_NAME,
944 NM_SETTING_CONNECTION_ID);
945
946 /* ===== WIRED SETTING ===== */
947
948 s_wired = nm_connection_get_setting_wired (connection);
949 ASSERT (s_wired != NULL,
950 "wired-never-default-verify-wired", "failed to verify %s: missing %s setting",
951 TEST_IFCFG_WIRED_NEVER_DEFAULT,
952 NM_SETTING_WIRED_SETTING_NAME);
953
954 /* ===== IPv4 SETTING ===== */
955
956 s_ip4 = nm_connection_get_setting_ip4_config (connection);
957 ASSERT (s_ip4 != NULL,
958 "wired-never-default-verify-ip4", "failed to verify %s: missing %s setting",
959 TEST_IFCFG_WIRED_NEVER_DEFAULT,
960 NM_SETTING_IP4_CONFIG_SETTING_NAME);
961
962 /* Method */
963 tmp = nm_setting_ip4_config_get_method (s_ip4);
964 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
965 "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
966 TEST_IFCFG_WIRED_NEVER_DEFAULT,
967 NM_SETTING_IP4_CONFIG_SETTING_NAME,
968 NM_SETTING_IP4_CONFIG_METHOD);
969
970 ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == TRUE,
971 "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
972 TEST_IFCFG_WIRED_NEVER_DEFAULT,
973 NM_SETTING_IP4_CONFIG_SETTING_NAME,
974 NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
975
976 /* DNS Addresses */
977 ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 0,
978 "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
979 TEST_IFCFG_WIRED_NEVER_DEFAULT,
980 NM_SETTING_IP4_CONFIG_SETTING_NAME,
981 NM_SETTING_IP4_CONFIG_DNS);
982
983 /* ===== IPv6 SETTING ===== */
984
985 s_ip6 = nm_connection_get_setting_ip6_config (connection);
986 ASSERT (s_ip6 != NULL,
987 "wired-never-default-verify-ip6", "failed to verify %s: missing %s setting",
988 TEST_IFCFG_WIRED_NEVER_DEFAULT,
989 NM_SETTING_IP6_CONFIG_SETTING_NAME);
990
991 /* Method */
992 tmp = nm_setting_ip6_config_get_method (s_ip6);
993 ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0,
994 "wired-never-default-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
995 TEST_IFCFG_WIRED_NEVER_DEFAULT,
996 NM_SETTING_IP6_CONFIG_SETTING_NAME,
997 NM_SETTING_IP6_CONFIG_METHOD);
998
999 ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == TRUE,
1000 "wired-never-default-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1001 TEST_IFCFG_WIRED_NEVER_DEFAULT,
1002 NM_SETTING_IP6_CONFIG_SETTING_NAME,
1003 NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
1004
1005 g_free (unmanaged);
1006 g_free (keyfile);
1007 g_free (routefile);
1008 g_free (route6file);
1009 g_object_unref (connection);
1010 }
1011
1012 #define TEST_IFCFG_WIRED_DEFROUTE_NO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-defroute-no"
1013
1014 static void
1015 test_read_wired_defroute_no (void)
1016 {
1017 NMConnection *connection;
1018 NMSettingConnection *s_con;
1019 NMSettingWired *s_wired;
1020 NMSettingIP4Config *s_ip4;
1021 NMSettingIP6Config *s_ip6;
1022 char *unmanaged = NULL;
1023 char *keyfile = NULL;
1024 char *routefile = NULL;
1025 char *route6file = NULL;
1026 gboolean ignore_error = FALSE;
1027 GError *error = NULL;
1028 const char *tmp;
1029 const char *expected_id = "System test-wired-defroute-no";
1030
1031 connection = connection_from_file (TEST_IFCFG_WIRED_DEFROUTE_NO,
1032 NULL,
1033 TYPE_ETHERNET,
1034 NULL,
1035 &unmanaged,
1036 &keyfile,
1037 &routefile,
1038 &route6file,
1039 &error,
1040 &ignore_error);
1041 ASSERT (connection != NULL,
1042 "wired-defroute-no-read", "failed to read %s: %s", TEST_IFCFG_WIRED_DEFROUTE_NO, error->message);
1043
1044 ASSERT (nm_connection_verify (connection, &error),
1045 "wired-defroute-no-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DEFROUTE_NO, error->message);
1046
1047 ASSERT (unmanaged == NULL,
1048 "wired-defroute-no-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DEFROUTE_NO);
1049
1050 /* ===== CONNECTION SETTING ===== */
1051
1052 s_con = nm_connection_get_setting_connection (connection);
1053 ASSERT (s_con != NULL,
1054 "wired-defroute-no-verify-connection", "failed to verify %s: missing %s setting",
1055 TEST_IFCFG_WIRED_DEFROUTE_NO,
1056 NM_SETTING_CONNECTION_SETTING_NAME);
1057
1058 /* ID */
1059 tmp = nm_setting_connection_get_id (s_con);
1060 ASSERT (tmp != NULL,
1061 "wired-defroute-no-verify-connection", "failed to verify %s: missing %s / %s key",
1062 TEST_IFCFG_WIRED_DEFROUTE_NO,
1063 NM_SETTING_CONNECTION_SETTING_NAME,
1064 NM_SETTING_CONNECTION_ID);
1065 ASSERT (strcmp (tmp, expected_id) == 0,
1066 "wired-defroute-no-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1067 TEST_IFCFG_WIRED_DEFROUTE_NO,
1068 NM_SETTING_CONNECTION_SETTING_NAME,
1069 NM_SETTING_CONNECTION_ID);
1070
1071 /* ===== WIRED SETTING ===== */
1072
1073 s_wired = nm_connection_get_setting_wired (connection);
1074 ASSERT (s_wired != NULL,
1075 "wired-defroute-no-verify-wired", "failed to verify %s: missing %s setting",
1076 TEST_IFCFG_WIRED_DEFROUTE_NO,
1077 NM_SETTING_WIRED_SETTING_NAME);
1078
1079 /* ===== IPv4 SETTING ===== */
1080
1081 s_ip4 = nm_connection_get_setting_ip4_config (connection);
1082 ASSERT (s_ip4 != NULL,
1083 "wired-defroute-no-verify-ip4", "failed to verify %s: missing %s setting",
1084 TEST_IFCFG_WIRED_DEFROUTE_NO,
1085 NM_SETTING_IP4_CONFIG_SETTING_NAME);
1086
1087 /* Method */
1088 tmp = nm_setting_ip4_config_get_method (s_ip4);
1089 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
1090 "wired-defroute-no-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1091 TEST_IFCFG_WIRED_DEFROUTE_NO,
1092 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1093 NM_SETTING_IP4_CONFIG_METHOD);
1094
1095 ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == TRUE,
1096 "wired-defroute-no-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1097 TEST_IFCFG_WIRED_DEFROUTE_NO,
1098 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1099 NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
1100
1101 /* ===== IPv6 SETTING ===== */
1102
1103 s_ip6 = nm_connection_get_setting_ip6_config (connection);
1104 ASSERT (s_ip6 != NULL,
1105 "wired-defroute-no-verify-ip6", "failed to verify %s: missing %s setting",
1106 TEST_IFCFG_WIRED_DEFROUTE_NO,
1107 NM_SETTING_IP6_CONFIG_SETTING_NAME);
1108
1109 /* Method */
1110 tmp = nm_setting_ip6_config_get_method (s_ip6);
1111 ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0,
1112 "wired-defroute-no-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1113 TEST_IFCFG_WIRED_DEFROUTE_NO,
1114 NM_SETTING_IP6_CONFIG_SETTING_NAME,
1115 NM_SETTING_IP6_CONFIG_METHOD);
1116
1117 ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == TRUE,
1118 "wired-defroute-no-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1119 TEST_IFCFG_WIRED_DEFROUTE_NO,
1120 NM_SETTING_IP6_CONFIG_SETTING_NAME,
1121 NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
1122
1123 g_free (unmanaged);
1124 g_free (keyfile);
1125 g_free (routefile);
1126 g_free (route6file);
1127 g_object_unref (connection);
1128 }
1129
1130 #define TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-defroute-no-gatewaydev-yes"
1131 #define TEST_NETWORK_WIRED_DEFROUTE_NO_GATEWAYDEV_YES TEST_IFCFG_DIR"/network-scripts/network-test-wired-defroute-no-gatewaydev-yes"
1132
1133 static void
1134 test_read_wired_defroute_no_gatewaydev_yes (void)
1135 {
1136 NMConnection *connection;
1137 NMSettingConnection *s_con;
1138 NMSettingWired *s_wired;
1139 NMSettingIP4Config *s_ip4;
1140 NMSettingIP6Config *s_ip6;
1141 char *unmanaged = NULL;
1142 char *keyfile = NULL;
1143 char *routefile = NULL;
1144 char *route6file = NULL;
1145 gboolean ignore_error = FALSE;
1146 GError *error = NULL;
1147 const char *tmp;
1148 const char *expected_id = "System test-wired-defroute-no-gatewaydev-yes";
1149
1150 connection = connection_from_file (TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1151 TEST_NETWORK_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1152 TYPE_ETHERNET,
1153 NULL,
1154 &unmanaged,
1155 &keyfile,
1156 &routefile,
1157 &route6file,
1158 &error,
1159 &ignore_error);
1160 ASSERT (connection != NULL,
1161 "wired-defroute-no-gatewaydev-yes-read",
1162 "failed to read %s: %s",
1163 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1164 error->message);
1165
1166 ASSERT (nm_connection_verify (connection, &error),
1167 "wired-defroute-no-gatewaydev-yes-verify",
1168 "failed to verify %s: %s",
1169 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1170 error->message);
1171
1172 ASSERT (unmanaged == NULL,
1173 "wired-defroute-no-gatewaydev-yes-verify",
1174 "failed to verify %s: unexpected unmanaged value",
1175 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES);
1176
1177 /* ===== CONNECTION SETTING ===== */
1178
1179 s_con = nm_connection_get_setting_connection (connection);
1180 ASSERT (s_con != NULL,
1181 "wired-defroute-no-gatewaydev-yes-verify-connection", "failed to verify %s: missing %s setting",
1182 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1183 NM_SETTING_CONNECTION_SETTING_NAME);
1184
1185 /* ID */
1186 tmp = nm_setting_connection_get_id (s_con);
1187 ASSERT (tmp != NULL,
1188 "wired-defroute-no-gatewaydev-yes-verify-connection", "failed to verify %s: missing %s / %s key",
1189 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1190 NM_SETTING_CONNECTION_SETTING_NAME,
1191 NM_SETTING_CONNECTION_ID);
1192 ASSERT (strcmp (tmp, expected_id) == 0,
1193 "wired-defroute-no-gatewaydev-yes-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1194 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1195 NM_SETTING_CONNECTION_SETTING_NAME,
1196 NM_SETTING_CONNECTION_ID);
1197
1198 /* ===== WIRED SETTING ===== */
1199
1200 s_wired = nm_connection_get_setting_wired (connection);
1201 ASSERT (s_wired != NULL,
1202 "wired-defroute-no-gatewaydev-yes-verify-wired", "failed to verify %s: missing %s setting",
1203 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1204 NM_SETTING_WIRED_SETTING_NAME);
1205
1206 /* ===== IPv4 SETTING ===== */
1207
1208 s_ip4 = nm_connection_get_setting_ip4_config (connection);
1209 ASSERT (s_ip4 != NULL,
1210 "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: missing %s setting",
1211 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1212 NM_SETTING_IP4_CONFIG_SETTING_NAME);
1213
1214 /* Method */
1215 tmp = nm_setting_ip4_config_get_method (s_ip4);
1216 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
1217 "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1218 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1219 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1220 NM_SETTING_IP4_CONFIG_METHOD);
1221
1222 ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE,
1223 "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1224 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1225 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1226 NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
1227
1228 /* ===== IPv6 SETTING ===== */
1229
1230 s_ip6 = nm_connection_get_setting_ip6_config (connection);
1231 ASSERT (s_ip6 != NULL,
1232 "wired-defroute-no-gatewaydev-yes-verify-ip6", "failed to verify %s: missing %s setting",
1233 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1234 NM_SETTING_IP6_CONFIG_SETTING_NAME);
1235
1236 /* Method */
1237 tmp = nm_setting_ip6_config_get_method (s_ip6);
1238 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
1239 "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1240 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1241 NM_SETTING_IP6_CONFIG_SETTING_NAME,
1242 NM_SETTING_IP6_CONFIG_METHOD);
1243
1244 ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE,
1245 "wired-defroute-no-gatewaydev-yes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1246 TEST_IFCFG_WIRED_DEFROUTE_NO_GATEWAYDEV_YES,
1247 NM_SETTING_IP6_CONFIG_SETTING_NAME,
1248 NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
1249
1250 g_free (unmanaged);
1251 g_free (keyfile);
1252 g_free (routefile);
1253 g_free (route6file);
1254 g_object_unref (connection);
1255 }
1256
1257 #define TEST_IFCFG_WIRED_STATIC_ROUTES TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-routes"
1258
1259 static void
1260 test_read_wired_static_routes (void)
1261 {
1262 NMConnection *connection;
1263 NMSettingConnection *s_con;
1264 NMSettingWired *s_wired;
1265 NMSettingIP4Config *s_ip4;
1266 char *unmanaged = NULL;
1267 char *keyfile = NULL;
1268 char *routefile = NULL;
1269 char *route6file = NULL;
1270 gboolean ignore_error = FALSE;
1271 GError *error = NULL;
1272 const char *tmp;
1273 NMIP4Route *ip4_route;
1274 guint32 addr;
1275 const char *expected_id = "System test-wired-static-routes";
1276 const char *expected_dst1 = "11.22.33.0";
1277 const char *expected_dst2 = "44.55.66.77";
1278 const char *expected_gw1 = "192.168.1.5";
1279 const char *expected_gw2 = "192.168.1.7";
1280
1281 connection = connection_from_file (TEST_IFCFG_WIRED_STATIC_ROUTES,
1282 NULL,
1283 TYPE_ETHERNET,
1284 NULL,
1285 &unmanaged,
1286 &keyfile,
1287 &routefile,
1288 &route6file,
1289 &error,
1290 &ignore_error);
1291
1292 ASSERT (connection != NULL,
1293 "wired-static-routes-read",
1294 "failed to read %s: %s",
1295 TEST_IFCFG_WIRED_STATIC_ROUTES, error->message);
1296
1297 ASSERT (nm_connection_verify (connection, &error),
1298 "wired-static-routes-verify", "failed to verify %s: %s",
1299 TEST_IFCFG_WIRED_STATIC_ROUTES, error->message);
1300
1301 ASSERT (unmanaged == NULL,
1302 "wired-static-routes-verify",
1303 "failed to verify %s: unexpected unmanaged value",
1304 TEST_IFCFG_WIRED_STATIC_ROUTES);
1305
1306 /* ===== CONNECTION SETTING ===== */
1307
1308 s_con = nm_connection_get_setting_connection (connection);
1309 ASSERT (s_con != NULL,
1310 "wired-static-routes-verify-connection", "failed to verify %s: missing %s setting",
1311 TEST_IFCFG_WIRED_STATIC_ROUTES,
1312 NM_SETTING_CONNECTION_SETTING_NAME);
1313
1314 /* ID */
1315 tmp = nm_setting_connection_get_id (s_con);
1316 ASSERT (tmp != NULL,
1317 "wired-static-routes-verify-connection", "failed to verify %s: missing %s / %s key",
1318 TEST_IFCFG_WIRED_STATIC_ROUTES,
1319 NM_SETTING_CONNECTION_SETTING_NAME,
1320 NM_SETTING_CONNECTION_ID);
1321 ASSERT (strcmp (tmp, expected_id) == 0,
1322 "wired-static-routes-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1323 TEST_IFCFG_WIRED_STATIC_ROUTES,
1324 NM_SETTING_CONNECTION_SETTING_NAME,
1325 NM_SETTING_CONNECTION_ID);
1326
1327 /* ===== WIRED SETTING ===== */
1328
1329 s_wired = nm_connection_get_setting_wired (connection);
1330 ASSERT (s_wired != NULL,
1331 "wired-static-routes-verify-wired", "failed to verify %s: missing %s setting",
1332 TEST_IFCFG_WIRED_STATIC_ROUTES,
1333 NM_SETTING_WIRED_SETTING_NAME);
1334
1335 /* ===== IPv4 SETTING ===== */
1336
1337 s_ip4 = nm_connection_get_setting_ip4_config (connection);
1338 ASSERT (s_ip4 != NULL,
1339 "wired-static-routes-verify-ip4", "failed to verify %s: missing %s setting",
1340 TEST_IFCFG_WIRED_STATIC_ROUTES,
1341 NM_SETTING_IP4_CONFIG_SETTING_NAME);
1342
1343 /* Method */
1344 tmp = nm_setting_ip4_config_get_method (s_ip4);
1345 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
1346 "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1347 TEST_IFCFG_WIRED_STATIC_ROUTES,
1348 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1349 NM_SETTING_IP4_CONFIG_METHOD);
1350
1351 /* Routes */
1352 ASSERT (nm_setting_ip4_config_get_num_routes (s_ip4) == 2,
1353 "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1354 TEST_IFCFG_WIRED_STATIC_ROUTES,
1355 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1356 NM_SETTING_IP4_CONFIG_ROUTES);
1357
1358 ip4_route = nm_setting_ip4_config_get_route (s_ip4, 0);
1359 ASSERT (ip4_route,
1360 "wired-static-routes-verify-ip4", "failed to verify %s: missing IP4 route #1",
1361 TEST_IFCFG_WIRED_STATIC_ROUTES);
1362
1363 ASSERT (inet_pton (AF_INET, expected_dst1, &addr) > 0,
1364 "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert destination IP address #1",
1365 TEST_IFCFG_WIRED_STATIC_ROUTES);
1366 ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1367 "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
1368 TEST_IFCFG_WIRED_STATIC_ROUTES,
1369 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1370 NM_SETTING_IP4_CONFIG_ROUTES);
1371
1372 ASSERT (nm_ip4_route_get_prefix (ip4_route) == 24,
1373 "wired-static-routes-verify-ip4", "failed to verify %s: unexpected destination route #1 prefix",
1374 TEST_IFCFG_WIRED_STATIC_ROUTES);
1375
1376 ASSERT (inet_pton (AF_INET, expected_gw1, &addr) > 0,
1377 "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #1",
1378 TEST_IFCFG_WIRED_STATIC_ROUTES);
1379 ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1380 "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
1381 TEST_IFCFG_WIRED_STATIC_ROUTES,
1382 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1383 NM_SETTING_IP4_CONFIG_ROUTES);
1384
1385 ip4_route = nm_setting_ip4_config_get_route (s_ip4, 1);
1386 ASSERT (ip4_route,
1387 "wired-static-routes-verify-ip4", "failed to verify %s: missing IP4 route #2",
1388 TEST_IFCFG_WIRED_STATIC_ROUTES);
1389
1390 ASSERT (inet_pton (AF_INET, expected_dst2, &addr) > 0,
1391 "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert destination IP address #2",
1392 TEST_IFCFG_WIRED_STATIC_ROUTES);
1393 ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1394 "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
1395 TEST_IFCFG_WIRED_STATIC_ROUTES,
1396 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1397 NM_SETTING_IP4_CONFIG_ROUTES);
1398
1399 ASSERT (nm_ip4_route_get_prefix (ip4_route) == 32,
1400 "wired-static-routes-verify-ip4", "failed to verify %s: unexpected destination route #2 prefix",
1401 TEST_IFCFG_WIRED_STATIC_ROUTES);
1402
1403 ASSERT (inet_pton (AF_INET, expected_gw2, &addr) > 0,
1404 "wired-static-routes-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #2",
1405 TEST_IFCFG_WIRED_STATIC_ROUTES);
1406 ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1407 "wired-static-routes-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
1408 TEST_IFCFG_WIRED_STATIC_ROUTES,
1409 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1410 NM_SETTING_IP4_CONFIG_ROUTES);
1411 ASSERT (nm_ip4_route_get_metric (ip4_route) == 3,
1412 "wired-static-routes-verify-ip4", "failed to verify %s: unexpected route metric #2",
1413 TEST_IFCFG_WIRED_STATIC_ROUTES);
1414
1415 g_free (unmanaged);
1416 g_free (keyfile);
1417 g_free (routefile);
1418 g_free (route6file);
1419 g_object_unref (connection);
1420 }
1421
1422 #define TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-routes-legacy"
1423
1424 static void
1425 test_read_wired_static_routes_legacy (void)
1426 {
1427 NMConnection *connection;
1428 NMSettingConnection *s_con;
1429 NMSettingWired *s_wired;
1430 NMSettingIP4Config *s_ip4;
1431 char *unmanaged = NULL;
1432 char *keyfile = NULL;
1433 char *routefile = NULL;
1434 char *route6file = NULL;
1435 gboolean ignore_error = FALSE;
1436 GError *error = NULL;
1437 const char *tmp;
1438 NMIP4Route *ip4_route;
1439 guint32 addr;
1440 const char *expected_id = "System test-wired-static-routes-legacy";
1441 const char *expected_dst1 = "21.31.41.0";
1442 const char *expected_dst2 = "32.42.52.62";
1443 const char *expected_dst3 = "43.53.0.0";
1444 const char *expected_gw1 = "9.9.9.9";
1445 const char *expected_gw2 = "8.8.8.8";
1446 const char *expected_gw3 = "7.7.7.7";
1447
1448 connection = connection_from_file (TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1449 NULL,
1450 TYPE_ETHERNET,
1451 NULL,
1452 &unmanaged,
1453 &keyfile,
1454 &routefile,
1455 &route6file,
1456 &error,
1457 &ignore_error);
1458
1459 ASSERT (connection != NULL,
1460 "wired-static-routes-legacy-read",
1461 "failed to read %s: %s",
1462 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY, error->message);
1463
1464 ASSERT (nm_connection_verify (connection, &error),
1465 "wired-static-routes-legacy-verify", "failed to verify %s: %s",
1466 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY, error->message);
1467
1468 ASSERT (unmanaged == NULL,
1469 "wired-static-routes-legacy-verify",
1470 "failed to verify %s: unexpected unmanaged value",
1471 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1472
1473 /* ===== CONNECTION SETTING ===== */
1474
1475 s_con = nm_connection_get_setting_connection (connection);
1476 ASSERT (s_con != NULL,
1477 "wired-static-routes-legacy-verify-connection", "failed to verify %s: missing %s setting",
1478 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1479 NM_SETTING_CONNECTION_SETTING_NAME);
1480
1481 /* ID */
1482 tmp = nm_setting_connection_get_id (s_con);
1483 ASSERT (tmp != NULL,
1484 "wired-static-routes-legacy-verify-connection", "failed to verify %s: missing %s / %s key",
1485 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1486 NM_SETTING_CONNECTION_SETTING_NAME,
1487 NM_SETTING_CONNECTION_ID);
1488 ASSERT (strcmp (tmp, expected_id) == 0,
1489 "wired-static-routes-legacy-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1490 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1491 NM_SETTING_CONNECTION_SETTING_NAME,
1492 NM_SETTING_CONNECTION_ID);
1493
1494 /* ===== WIRED SETTING ===== */
1495
1496 s_wired = nm_connection_get_setting_wired (connection);
1497 ASSERT (s_wired != NULL,
1498 "wired-static-routes-legacy-verify-wired", "failed to verify %s: missing %s setting",
1499 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1500 NM_SETTING_WIRED_SETTING_NAME);
1501
1502 /* ===== IPv4 SETTING ===== */
1503
1504 s_ip4 = nm_connection_get_setting_ip4_config (connection);
1505 ASSERT (s_ip4 != NULL,
1506 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing %s setting",
1507 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1508 NM_SETTING_IP4_CONFIG_SETTING_NAME);
1509
1510 /* Method */
1511 tmp = nm_setting_ip4_config_get_method (s_ip4);
1512 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
1513 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1514 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1515 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1516 NM_SETTING_IP4_CONFIG_METHOD);
1517
1518 /* Routes */
1519 ASSERT (nm_setting_ip4_config_get_num_routes (s_ip4) == 3,
1520 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1521 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1522 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1523 NM_SETTING_IP4_CONFIG_ROUTES);
1524
1525 /* Route #1 */
1526 ip4_route = nm_setting_ip4_config_get_route (s_ip4, 0);
1527 ASSERT (ip4_route,
1528 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing IP4 route #1",
1529 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1530
1531 ASSERT (inet_pton (AF_INET, expected_dst1, &addr) > 0,
1532 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert destination IP address #1",
1533 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1534 ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1535 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
1536 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1537 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1538 NM_SETTING_IP4_CONFIG_ROUTES);
1539
1540 ASSERT (nm_ip4_route_get_prefix (ip4_route) == 24,
1541 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #1 prefix",
1542 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1543
1544 ASSERT (inet_pton (AF_INET, expected_gw1, &addr) > 0,
1545 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #1",
1546 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1547 ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1548 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
1549 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1550 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1551 NM_SETTING_IP4_CONFIG_ROUTES);
1552
1553 ASSERT (nm_ip4_route_get_metric (ip4_route) == 1,
1554 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #1 metric",
1555 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1556
1557 /* Route #2 */
1558 ip4_route = nm_setting_ip4_config_get_route (s_ip4, 1);
1559 ASSERT (ip4_route,
1560 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing IP4 route #2",
1561 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1562
1563 ASSERT (inet_pton (AF_INET, expected_dst2, &addr) > 0,
1564 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert destination IP address #2",
1565 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1566 ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1567 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
1568 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1569 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1570 NM_SETTING_IP4_CONFIG_ROUTES);
1571
1572 ASSERT (nm_ip4_route_get_prefix (ip4_route) == 32,
1573 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #2 prefix",
1574 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1575
1576 ASSERT (inet_pton (AF_INET, expected_gw2, &addr) > 0,
1577 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #2",
1578 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1579 ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1580 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
1581 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1582 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1583 NM_SETTING_IP4_CONFIG_ROUTES);
1584
1585 ASSERT (nm_ip4_route_get_metric (ip4_route) == 0,
1586 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #2 metric",
1587 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1588
1589 /* Route #3 */
1590 ip4_route = nm_setting_ip4_config_get_route (s_ip4, 2);
1591 ASSERT (ip4_route,
1592 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: missing IP4 route #3",
1593 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1594
1595 ASSERT (inet_pton (AF_INET, expected_dst3, &addr) > 0,
1596 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert destination IP address #3",
1597 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1598 ASSERT (nm_ip4_route_get_dest (ip4_route) == addr,
1599 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #3",
1600 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1601 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1602 NM_SETTING_IP4_CONFIG_ROUTES);
1603
1604 ASSERT (nm_ip4_route_get_prefix (ip4_route) == 16,
1605 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #3 prefix",
1606 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1607
1608 ASSERT (inet_pton (AF_INET, expected_gw3, &addr) > 0,
1609 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: couldn't convert next hop IP address #3",
1610 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1611 ASSERT (nm_ip4_route_get_next_hop (ip4_route) == addr,
1612 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value #3",
1613 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY,
1614 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1615 NM_SETTING_IP4_CONFIG_ROUTES);
1616
1617 ASSERT (nm_ip4_route_get_metric (ip4_route) == 3,
1618 "wired-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected destination route #3 metric",
1619 TEST_IFCFG_WIRED_STATIC_ROUTES_LEGACY);
1620
1621 g_free (unmanaged);
1622 g_free (keyfile);
1623 g_free (routefile);
1624 g_free (route6file);
1625 g_object_unref (connection);
1626 }
1627
1628 static void
1629 test_read_wired_ipv4_manual (const char *file, const char *expected_id)
1630 {
1631 NMConnection *connection;
1632 NMSettingConnection *s_con;
1633 NMSettingWired *s_wired;
1634 NMSettingIP4Config *s_ip4;
1635 char *unmanaged = NULL;
1636 char *keyfile = NULL;
1637 char *routefile = NULL;
1638 char *route6file = NULL;
1639 gboolean ignore_error = FALSE;
1640 GError *error = NULL;
1641 const char *tmp;
1642 const char *expected_address1 = "1.2.3.4";
1643 const char *expected_address2 = "9.8.7.6";
1644 const char *expected_address3 = "3.3.3.3";
1645 guint32 expected_prefix1 = 24;
1646 guint32 expected_prefix2 = 16;
1647 guint32 expected_prefix3 = 8;
1648 NMIP4Address *ip4_addr;
1649 guint32 addr;
1650
1651 connection = connection_from_file (file,
1652 NULL,
1653 TYPE_ETHERNET,
1654 NULL,
1655 &unmanaged,
1656 &keyfile,
1657 &routefile,
1658 &route6file,
1659 &error,
1660 &ignore_error);
1661 ASSERT (connection != NULL,
1662 "wired-ipv4-manual-read", "failed to read %s: %s", file, error->message);
1663
1664 ASSERT (nm_connection_verify (connection, &error),
1665 "wired-ipv4-manual-verify", "failed to verify %s: %s", file, error->message);
1666
1667 ASSERT (unmanaged == NULL,
1668 "wired-ipv4-manual-verify", "failed to verify %s: unexpected unmanaged value", file);
1669
1670 /* ===== CONNECTION SETTING ===== */
1671
1672 s_con = nm_connection_get_setting_connection (connection);
1673 ASSERT (s_con != NULL,
1674 "wired-ipv4-manual-verify-connection", "failed to verify %s: missing %s setting",
1675 file,
1676 NM_SETTING_CONNECTION_SETTING_NAME);
1677
1678 /* ID */
1679 tmp = nm_setting_connection_get_id (s_con);
1680 ASSERT (tmp != NULL,
1681 "wired-ipv4-manual-verify-connection", "failed to verify %s: missing %s / %s key",
1682 file,
1683 NM_SETTING_CONNECTION_SETTING_NAME,
1684 NM_SETTING_CONNECTION_ID);
1685 ASSERT (strcmp (tmp, expected_id) == 0,
1686 "wired-ipv4-manual-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1687 file,
1688 NM_SETTING_CONNECTION_SETTING_NAME,
1689 NM_SETTING_CONNECTION_ID);
1690
1691 /* ===== WIRED SETTING ===== */
1692
1693 s_wired = nm_connection_get_setting_wired (connection);
1694 ASSERT (s_wired != NULL,
1695 "wired-ipv4-manual-verify-wired", "failed to verify %s: missing %s setting",
1696 file,
1697 NM_SETTING_WIRED_SETTING_NAME);
1698
1699 /* ===== IPv4 SETTING ===== */
1700
1701 s_ip4 = nm_connection_get_setting_ip4_config (connection);
1702 ASSERT (s_ip4 != NULL,
1703 "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing %s setting",
1704 file,
1705 NM_SETTING_IP4_CONFIG_SETTING_NAME);
1706
1707 /* Method */
1708 tmp = nm_setting_ip4_config_get_method (s_ip4);
1709 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
1710 "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1711 file,
1712 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1713 NM_SETTING_IP4_CONFIG_METHOD);
1714
1715 /* IP addresses */
1716 ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 3,
1717 "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1718 file,
1719 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1720 NM_SETTING_IP4_CONFIG_ADDRESSES);
1721
1722 /* Address #1 */
1723 ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
1724 ASSERT (ip4_addr,
1725 "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #1",
1726 file);
1727
1728 ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix1,
1729 "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
1730 file);
1731
1732 ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
1733 "wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
1734 file);
1735 ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
1736 "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
1737 file);
1738
1739 /* Address #2 */
1740 ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 1);
1741 ASSERT (ip4_addr,
1742 "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #2",
1743 file);
1744
1745 ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix2,
1746 "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #2 prefix",
1747 file);
1748
1749 ASSERT (inet_pton (AF_INET, expected_address2, &addr) > 0,
1750 "wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #2",
1751 file);
1752 ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
1753 "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #2",
1754 file);
1755
1756 /* Address #3 */
1757 ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 2);
1758 ASSERT (ip4_addr,
1759 "wired-ipv4-manual-verify-ip4", "failed to verify %s: missing IP4 address #3",
1760 file);
1761
1762 ASSERT (nm_ip4_address_get_prefix (ip4_addr) == expected_prefix3,
1763 "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #3 prefix",
1764 file);
1765
1766 ASSERT (inet_pton (AF_INET, expected_address3, &addr) > 0,
1767 "wired-ipv4-manual-verify-ip4", "failed to verify %s: couldn't convert IP address #3",
1768 file);
1769 ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
1770 "wired-ipv4-manual-verify-ip4", "failed to verify %s: unexpected IP4 address #3",
1771 file);
1772
1773 g_free (unmanaged);
1774 g_free (keyfile);
1775 g_free (routefile);
1776 g_free (route6file);
1777 g_object_unref (connection);
1778 }
1779
1780 #define TEST_IFCFG_WIRED_IPV6_MANUAL TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv6-manual"
1781
1782 static void
1783 test_read_wired_ipv6_manual (void)
1784 {
1785 NMConnection *connection;
1786 NMSettingConnection *s_con;
1787 NMSettingWired *s_wired;
1788 NMSettingIP4Config *s_ip4;
1789 NMSettingIP6Config *s_ip6;
1790 char *unmanaged = NULL;
1791 char *keyfile = NULL;
1792 char *routefile = NULL;
1793 char *route6file = NULL;
1794 gboolean ignore_error = FALSE;
1795 GError *error = NULL;
1796 const char *tmp;
1797 const char *expected_id = "System test-wired-ipv6-manual";
1798 const char *expected_address1 = "1001:abba::1234";
1799 const char *expected_address2 = "2001:abba::2234";
1800 const char *expected_address3 = "3001:abba::3234";
1801 guint32 expected_prefix1 = 56;
1802 guint32 expected_prefix2 = 64;
1803 guint32 expected_prefix3 = 96;
1804 const char *expected_route1_dest = "9876::1234";
1805 guint32 expected_route1_prefix = 96;
1806 const char *expected_route1_nexthop = "9876::7777";
1807 guint32 expected_route1_metric = 2;
1808 const char *expected_dns1 = "1:2:3:4::a";
1809 const char *expected_dns2 = "1:2:3:4::b";
1810 NMIP6Address *ip6_addr;
1811 NMIP6Route *ip6_route;
1812 struct in6_addr addr;
1813
1814 connection = connection_from_file (TEST_IFCFG_WIRED_IPV6_MANUAL,
1815 NULL,
1816 TYPE_ETHERNET,
1817 NULL,
1818 &unmanaged,
1819 &keyfile,
1820 &routefile,
1821 &route6file,
1822 &error,
1823 &ignore_error);
1824 ASSERT (connection != NULL,
1825 "wired-ipv6-manual-read", "failed to read %s: %s", TEST_IFCFG_WIRED_IPV6_MANUAL, error->message);
1826
1827 ASSERT (nm_connection_verify (connection, &error),
1828 "wired-ipv6-manual-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_IPV6_MANUAL, error->message);
1829
1830 ASSERT (unmanaged == NULL,
1831 "wired-ipv6-manual-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_IPV6_MANUAL);
1832
1833 /* ===== CONNECTION SETTING ===== */
1834
1835 s_con = nm_connection_get_setting_connection (connection);
1836 ASSERT (s_con != NULL,
1837 "wired-ipv6-manual-verify-connection", "failed to verify %s: missing %s setting",
1838 TEST_IFCFG_WIRED_IPV6_MANUAL,
1839 NM_SETTING_CONNECTION_SETTING_NAME);
1840
1841 /* ID */
1842 tmp = nm_setting_connection_get_id (s_con);
1843 ASSERT (tmp != NULL,
1844 "wired-ipv6-manual-verify-connection", "failed to verify %s: missing %s / %s key",
1845 TEST_IFCFG_WIRED_IPV6_MANUAL,
1846 NM_SETTING_CONNECTION_SETTING_NAME,
1847 NM_SETTING_CONNECTION_ID);
1848 ASSERT (strcmp (tmp, expected_id) == 0,
1849 "wired-ipv6-manual-verify-connection", "failed to verify %s: unexpected %s / %s key value",
1850 TEST_IFCFG_WIRED_IPV6_MANUAL,
1851 NM_SETTING_CONNECTION_SETTING_NAME,
1852 NM_SETTING_CONNECTION_ID);
1853
1854 /* ===== WIRED SETTING ===== */
1855
1856 s_wired = nm_connection_get_setting_wired (connection);
1857 ASSERT (s_wired != NULL,
1858 "wired-ipv6-manual-verify-wired", "failed to verify %s: missing %s setting",
1859 TEST_IFCFG_WIRED_IPV6_MANUAL,
1860 NM_SETTING_WIRED_SETTING_NAME);
1861
1862 /* ===== IPv4 SETTING ===== */
1863
1864 s_ip4 = nm_connection_get_setting_ip4_config (connection);
1865 ASSERT (s_ip4 != NULL,
1866 "wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s setting",
1867 TEST_IFCFG_WIRED_IPV6_MANUAL,
1868 NM_SETTING_IP4_CONFIG_SETTING_NAME);
1869
1870 /* DNS Addresses */
1871 ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
1872 "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1873 TEST_IFCFG_WIRED_IPV6_MANUAL,
1874 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1875 NM_SETTING_IP4_CONFIG_DNS);
1876
1877 /* DNS search domains */
1878 ASSERT (nm_setting_ip4_config_get_num_dns_searches (s_ip4) == 3,
1879 "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1880 TEST_IFCFG_WIRED_IPV6_MANUAL,
1881 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1882 NM_SETTING_IP4_CONFIG_DNS);
1883
1884 tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 0);
1885 ASSERT (tmp != NULL,
1886 "wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s / %s key",
1887 TEST_IFCFG_WIRED_IPV6_MANUAL,
1888 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1889 NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1890 ASSERT (strcmp (tmp, "lorem.com") == 0,
1891 "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1892 TEST_IFCFG_WIRED_IPV6_MANUAL,
1893 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1894 NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1895
1896 tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 1);
1897 ASSERT (tmp != NULL,
1898 "wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s / %s key",
1899 TEST_IFCFG_WIRED_IPV6_MANUAL,
1900 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1901 NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1902 ASSERT (strcmp (tmp, "ipsum.org") == 0,
1903 "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1904 TEST_IFCFG_WIRED_IPV6_MANUAL,
1905 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1906 NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1907
1908 tmp = nm_setting_ip4_config_get_dns_search (s_ip4, 2);
1909 ASSERT (tmp != NULL,
1910 "wired-ipv6-manual-verify-ip4", "failed to verify %s: missing %s / %s key",
1911 TEST_IFCFG_WIRED_IPV6_MANUAL,
1912 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1913 NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1914 ASSERT (strcmp (tmp, "dolor.edu") == 0,
1915 "wired-ipv6-manual-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
1916 TEST_IFCFG_WIRED_IPV6_MANUAL,
1917 NM_SETTING_IP4_CONFIG_SETTING_NAME,
1918 NM_SETTING_IP4_CONFIG_DNS_SEARCH);
1919
1920 /* ===== IPv6 SETTING ===== */
1921
1922 s_ip6 = nm_connection_get_setting_ip6_config (connection);
1923 ASSERT (s_ip6 != NULL,
1924 "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing %s setting",
1925 TEST_IFCFG_WIRED_IPV6_MANUAL,
1926 NM_SETTING_IP6_CONFIG_SETTING_NAME);
1927
1928 /* Method */
1929 tmp = nm_setting_ip6_config_get_method (s_ip6);
1930 ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
1931 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1932 TEST_IFCFG_WIRED_IPV6_MANUAL,
1933 NM_SETTING_IP6_CONFIG_SETTING_NAME,
1934 NM_SETTING_IP6_CONFIG_METHOD);
1935
1936 ASSERT (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE,
1937 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1938 TEST_IFCFG_WIRED_IPV6_MANUAL,
1939 NM_SETTING_IP6_CONFIG_SETTING_NAME,
1940 NM_SETTING_IP6_CONFIG_NEVER_DEFAULT);
1941
1942 ASSERT (nm_setting_ip6_config_get_may_fail (s_ip6) == TRUE,
1943 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1944 TEST_IFCFG_WIRED_IPV6_MANUAL,
1945 NM_SETTING_IP6_CONFIG_SETTING_NAME,
1946 NM_SETTING_IP6_CONFIG_MAY_FAIL);
1947
1948 /* IP addresses */
1949 ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 3,
1950 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
1951 TEST_IFCFG_WIRED_IPV6_MANUAL,
1952 NM_SETTING_IP6_CONFIG_SETTING_NAME,
1953 NM_SETTING_IP6_CONFIG_ADDRESSES);
1954
1955 /* Address #1 */
1956 ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
1957 ASSERT (ip6_addr,
1958 "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 address #1",
1959 TEST_IFCFG_WIRED_IPV6_MANUAL);
1960
1961 ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix1,
1962 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #1 prefix",
1963 TEST_IFCFG_WIRED_IPV6_MANUAL);
1964
1965 ASSERT (inet_pton (AF_INET6, expected_address1, &addr) > 0,
1966 "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP address #1",
1967 TEST_IFCFG_WIRED_IPV6_MANUAL);
1968 ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
1969 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #1",
1970 TEST_IFCFG_WIRED_IPV6_MANUAL);
1971
1972 /* Address #2 */
1973 ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 1);
1974 ASSERT (ip6_addr,
1975 "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 address #2",
1976 TEST_IFCFG_WIRED_IPV6_MANUAL);
1977
1978 ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix2,
1979 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #2 prefix",
1980 TEST_IFCFG_WIRED_IPV6_MANUAL);
1981
1982 ASSERT (inet_pton (AF_INET6, expected_address2, &addr) > 0,
1983 "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP address #2",
1984 TEST_IFCFG_WIRED_IPV6_MANUAL);
1985 ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
1986 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #2",
1987 TEST_IFCFG_WIRED_IPV6_MANUAL);
1988
1989 /* Address #3 */
1990 ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 2);
1991 ASSERT (ip6_addr,
1992 "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 address #3",
1993 TEST_IFCFG_WIRED_IPV6_MANUAL);
1994
1995 ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix3,
1996 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #3 prefix",
1997 TEST_IFCFG_WIRED_IPV6_MANUAL);
1998
1999 ASSERT (inet_pton (AF_INET6, expected_address3, &addr) > 0,
2000 "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP address #3",
2001 TEST_IFCFG_WIRED_IPV6_MANUAL);
2002 ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
2003 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 address #3",
2004 TEST_IFCFG_WIRED_IPV6_MANUAL);
2005
2006 /* Routes */
2007 ASSERT (nm_setting_ip6_config_get_num_routes (s_ip6) == 1,
2008 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2009 TEST_IFCFG_WIRED_IPV6_MANUAL,
2010 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2011 NM_SETTING_IP6_CONFIG_ROUTES);
2012
2013 /* Route #1 */
2014 ip6_route = nm_setting_ip6_config_get_route (s_ip6, 0);
2015 ASSERT (ip6_route,
2016 "wired-ipv6-manual-verify-ip6", "failed to verify %s: missing IP6 route #1",
2017 TEST_IFCFG_WIRED_IPV6_MANUAL);
2018
2019 ASSERT (inet_pton (AF_INET6, expected_route1_dest, &addr) > 0,
2020 "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP route dest #1",
2021 TEST_IFCFG_WIRED_IPV6_MANUAL);
2022 ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_route_get_dest (ip6_route), &addr),
2023 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route dest #1",
2024 TEST_IFCFG_WIRED_IPV6_MANUAL);
2025
2026 ASSERT (nm_ip6_route_get_prefix (ip6_route) == expected_route1_prefix,
2027 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route #1 prefix",
2028 TEST_IFCFG_WIRED_IPV6_MANUAL);
2029
2030 ASSERT (inet_pton (AF_INET6, expected_route1_nexthop, &addr) > 0,
2031 "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert IP route next_hop #1",
2032 TEST_IFCFG_WIRED_IPV6_MANUAL);
2033 ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_route_get_next_hop (ip6_route), &addr),
2034 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route next hop #1",
2035 TEST_IFCFG_WIRED_IPV6_MANUAL);
2036
2037 ASSERT (nm_ip6_route_get_metric (ip6_route) == expected_route1_metric,
2038 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected IP6 route #1 metric",
2039 TEST_IFCFG_WIRED_IPV6_MANUAL);
2040
2041 /* DNS Addresses */
2042 ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 2,
2043 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2044 TEST_IFCFG_WIRED_IPV6_MANUAL,
2045 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2046 NM_SETTING_IP6_CONFIG_DNS);
2047
2048 ASSERT (inet_pton (AF_INET6, expected_dns1, &addr) > 0,
2049 "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #1",
2050 TEST_IFCFG_WIRED_IPV6_MANUAL);
2051 ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr),
2052 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value #1",
2053 TEST_IFCFG_WIRED_IPV6_MANUAL,
2054 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2055 NM_SETTING_IP6_CONFIG_DNS);
2056
2057 ASSERT (inet_pton (AF_INET6, expected_dns2, &addr) > 0,
2058 "wired-ipv6-manual-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #2",
2059 TEST_IFCFG_WIRED_IPV6_MANUAL);
2060 ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 1), &addr),
2061 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value #2",
2062 TEST_IFCFG_WIRED_IPV6_MANUAL,
2063 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2064 NM_SETTING_IP6_CONFIG_DNS);
2065
2066 /* DNS domains - none as domains are stuffed to 'ipv4' setting */
2067 ASSERT (nm_setting_ip6_config_get_num_dns_searches (s_ip6) == 0,
2068 "wired-ipv6-manual-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2069 TEST_IFCFG_WIRED_IPV6_MANUAL,
2070 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2071 NM_SETTING_IP6_CONFIG_DNS_SEARCH);
2072
2073 g_free (unmanaged);
2074 g_free (keyfile);
2075 g_free (routefile);
2076 g_free (route6file);
2077 g_object_unref (connection);
2078 }
2079
2080 #define TEST_IFCFG_WIRED_IPV6_ONLY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv6-only"
2081
2082 static void
2083 test_read_wired_ipv6_only (void)
2084 {
2085 NMConnection *connection;
2086 NMSettingConnection *s_con;
2087 NMSettingWired *s_wired;
2088 NMSettingIP4Config *s_ip4;
2089 NMSettingIP6Config *s_ip6;
2090 char *unmanaged = NULL;
2091 char *keyfile = NULL;
2092 char *routefile = NULL;
2093 char *route6file = NULL;
2094 gboolean ignore_error = FALSE;
2095 GError *error = NULL;
2096 const char *tmp;
2097 const char *expected_id = "System test-wired-ipv6-only";
2098 const char *expected_address1 = "1001:abba::1234";
2099 guint32 expected_prefix1 = 56;
2100 const char *expected_dns1 = "1:2:3:4::a";
2101 NMIP6Address *ip6_addr;
2102 struct in6_addr addr;
2103 const char *method;
2104
2105 connection = connection_from_file (TEST_IFCFG_WIRED_IPV6_ONLY,
2106 NULL,
2107 TYPE_ETHERNET,
2108 NULL,
2109 &unmanaged,
2110 &keyfile,
2111 &routefile,
2112 &route6file,
2113 &error,
2114 &ignore_error);
2115 ASSERT (connection != NULL,
2116 "wired-ipv6-only-read", "failed to read %s: %s", TEST_IFCFG_WIRED_IPV6_ONLY, error->message);
2117
2118 ASSERT (nm_connection_verify (connection, &error),
2119 "wired-ipv6-only-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_IPV6_ONLY, error->message);
2120
2121 ASSERT (unmanaged == NULL,
2122 "wired-ipv6-only-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_IPV6_MANUAL);
2123
2124 /* ===== CONNECTION SETTING ===== */
2125
2126 s_con = nm_connection_get_setting_connection (connection);
2127 ASSERT (s_con != NULL,
2128 "wired-ipv6-only-verify-connection", "failed to verify %s: missing %s setting",
2129 TEST_IFCFG_WIRED_IPV6_MANUAL,
2130 NM_SETTING_CONNECTION_SETTING_NAME);
2131
2132 /* ID */
2133 tmp = nm_setting_connection_get_id (s_con);
2134 ASSERT (tmp != NULL,
2135 "wired-ipv6-only-verify-connection", "failed to verify %s: missing %s / %s key",
2136 TEST_IFCFG_WIRED_IPV6_MANUAL,
2137 NM_SETTING_CONNECTION_SETTING_NAME,
2138 NM_SETTING_CONNECTION_ID);
2139 ASSERT (strcmp (tmp, expected_id) == 0,
2140 "wired-ipv6-only-verify-connection", "failed to verify %s: unexpected %s / %s key value",
2141 TEST_IFCFG_WIRED_IPV6_MANUAL,
2142 NM_SETTING_CONNECTION_SETTING_NAME,
2143 NM_SETTING_CONNECTION_ID);
2144
2145 /* ===== WIRED SETTING ===== */
2146
2147 s_wired = nm_connection_get_setting_wired (connection);
2148 ASSERT (s_wired != NULL,
2149 "wired-ipv6-only-verify-wired", "failed to verify %s: missing %s setting",
2150 TEST_IFCFG_WIRED_IPV6_MANUAL,
2151 NM_SETTING_WIRED_SETTING_NAME);
2152
2153 /* ===== IPv4 SETTING ===== */
2154
2155 s_ip4 = nm_connection_get_setting_ip4_config (connection);
2156 ASSERT (s_ip4 != NULL,
2157 "wired-ipv6-only-verify-ip4", "failed to verify %s: missing %s setting",
2158 TEST_IFCFG_WIRED_IPV6_MANUAL,
2159 NM_SETTING_IP4_CONFIG_SETTING_NAME);
2160
2161 method = nm_setting_ip4_config_get_method (s_ip4);
2162 ASSERT (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0,
2163 "wired-ipv6-only-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
2164 TEST_IFCFG_WIRED_IPV6_MANUAL,
2165 NM_SETTING_IP4_CONFIG_SETTING_NAME,
2166 NM_SETTING_IP4_CONFIG_METHOD);
2167
2168 /* ===== IPv6 SETTING ===== */
2169
2170 s_ip6 = nm_connection_get_setting_ip6_config (connection);
2171 ASSERT (s_ip6 != NULL,
2172 "wired-ipv6-only-verify-ip6", "failed to verify %s: missing %s setting",
2173 TEST_IFCFG_WIRED_IPV6_MANUAL,
2174 NM_SETTING_IP6_CONFIG_SETTING_NAME);
2175
2176 /* Method */
2177 tmp = nm_setting_ip6_config_get_method (s_ip6);
2178 ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_MANUAL) == 0,
2179 "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2180 TEST_IFCFG_WIRED_IPV6_MANUAL,
2181 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2182 NM_SETTING_IP6_CONFIG_METHOD);
2183
2184 /* IP addresses */
2185 ASSERT (nm_setting_ip6_config_get_num_addresses (s_ip6) == 1,
2186 "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2187 TEST_IFCFG_WIRED_IPV6_MANUAL,
2188 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2189 NM_SETTING_IP6_CONFIG_ADDRESSES);
2190
2191 /* Address #1 */
2192 ip6_addr = nm_setting_ip6_config_get_address (s_ip6, 0);
2193 ASSERT (ip6_addr,
2194 "wired-ipv6-only-verify-ip6", "failed to verify %s: missing IP6 address #1",
2195 TEST_IFCFG_WIRED_IPV6_MANUAL);
2196
2197 ASSERT (nm_ip6_address_get_prefix (ip6_addr) == expected_prefix1,
2198 "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected IP6 address #1 prefix",
2199 TEST_IFCFG_WIRED_IPV6_MANUAL);
2200
2201 ASSERT (inet_pton (AF_INET6, expected_address1, &addr) > 0,
2202 "wired-ipv6-only-verify-ip6", "failed to verify %s: couldn't convert IP address #1",
2203 TEST_IFCFG_WIRED_IPV6_MANUAL);
2204 ASSERT (IN6_ARE_ADDR_EQUAL (nm_ip6_address_get_address (ip6_addr), &addr),
2205 "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected IP6 address #1",
2206 TEST_IFCFG_WIRED_IPV6_MANUAL);
2207
2208 /* DNS Addresses */
2209 ASSERT (nm_setting_ip6_config_get_num_dns (s_ip6) == 1,
2210 "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2211 TEST_IFCFG_WIRED_IPV6_MANUAL,
2212 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2213 NM_SETTING_IP6_CONFIG_DNS);
2214
2215 ASSERT (inet_pton (AF_INET6, expected_dns1, &addr) > 0,
2216 "wired-ipv6-only-verify-ip6", "failed to verify %s: couldn't convert DNS IP address #1",
2217 TEST_IFCFG_WIRED_IPV6_MANUAL);
2218 ASSERT (IN6_ARE_ADDR_EQUAL (nm_setting_ip6_config_get_dns (s_ip6, 0), &addr),
2219 "wired-ipv6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value #1",
2220 TEST_IFCFG_WIRED_IPV6_MANUAL,
2221 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2222 NM_SETTING_IP6_CONFIG_DNS);
2223
2224 /* DNS domains should be in IPv6, because IPv4 is disabled */
2225 g_assert_cmpint (nm_setting_ip6_config_get_num_dns_searches (s_ip6), ==, 3);
2226 g_assert_cmpstr (nm_setting_ip6_config_get_dns_search (s_ip6, 0), ==, "lorem.com");
2227 g_assert_cmpstr (nm_setting_ip6_config_get_dns_search (s_ip6, 1), ==, "ipsum.org");
2228 g_assert_cmpstr (nm_setting_ip6_config_get_dns_search (s_ip6, 2), ==, "dolor.edu");
2229
2230 g_free (unmanaged);
2231 g_free (keyfile);
2232 g_free (routefile);
2233 g_free (route6file);
2234 g_object_unref (connection);
2235 }
2236
2237 #define TEST_IFCFG_WIRED_DHCP6_ONLY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp6-only"
2238
2239 static void
2240 test_read_wired_dhcp6_only (void)
2241 {
2242 NMConnection *connection;
2243 NMSettingConnection *s_con;
2244 NMSettingWired *s_wired;
2245 NMSettingIP4Config *s_ip4;
2246 NMSettingIP6Config *s_ip6;
2247 char *unmanaged = NULL;
2248 char *keyfile = NULL;
2249 char *routefile = NULL;
2250 char *route6file = NULL;
2251 gboolean ignore_error = FALSE;
2252 GError *error = NULL;
2253 const char *tmp;
2254 const char *expected_id = "System test-wired-dhcp6-only";
2255 const char *method;
2256
2257 connection = connection_from_file (TEST_IFCFG_WIRED_DHCP6_ONLY,
2258 NULL,
2259 TYPE_ETHERNET,
2260 NULL,
2261 &unmanaged,
2262 &keyfile,
2263 &routefile,
2264 &route6file,
2265 &error,
2266 &ignore_error);
2267 ASSERT (connection != NULL,
2268 "wired-dhcp6-only-read", "failed to read %s: %s", TEST_IFCFG_WIRED_DHCP6_ONLY, error->message);
2269
2270 ASSERT (nm_connection_verify (connection, &error),
2271 "wired-dhcp6-only-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_DHCP6_ONLY, error->message);
2272
2273 ASSERT (unmanaged == NULL,
2274 "wired-dhcp6-only-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_DHCP6_ONLY);
2275
2276 /* ===== CONNECTION SETTING ===== */
2277
2278 s_con = nm_connection_get_setting_connection (connection);
2279 ASSERT (s_con != NULL,
2280 "wired-dhcp6-only-verify-connection", "failed to verify %s: missing %s setting",
2281 TEST_IFCFG_WIRED_DHCP6_ONLY,
2282 NM_SETTING_CONNECTION_SETTING_NAME);
2283
2284 /* ID */
2285 tmp = nm_setting_connection_get_id (s_con);
2286 ASSERT (tmp != NULL,
2287 "wired-dhcp6-only-verify-connection", "failed to verify %s: missing %s / %s key",
2288 TEST_IFCFG_WIRED_DHCP6_ONLY,
2289 NM_SETTING_CONNECTION_SETTING_NAME,
2290 NM_SETTING_CONNECTION_ID);
2291 ASSERT (strcmp (tmp, expected_id) == 0,
2292 "wired-dhcp6-only-verify-connection", "failed to verify %s: unexpected %s / %s key value",
2293 TEST_IFCFG_WIRED_DHCP6_ONLY,
2294 NM_SETTING_CONNECTION_SETTING_NAME,
2295 NM_SETTING_CONNECTION_ID);
2296
2297 /* ===== WIRED SETTING ===== */
2298
2299 s_wired = nm_connection_get_setting_wired (connection);
2300 ASSERT (s_wired != NULL,
2301 "wired-dhcp6-only-verify-wired", "failed to verify %s: missing %s setting",
2302 TEST_IFCFG_WIRED_DHCP6_ONLY,
2303 NM_SETTING_WIRED_SETTING_NAME);
2304
2305 /* ===== IPv4 SETTING ===== */
2306
2307 s_ip4 = nm_connection_get_setting_ip4_config (connection);
2308 ASSERT (s_ip4 != NULL,
2309 "wired-dhcp6-only-verify-ip4", "failed to verify %s: missing %s setting",
2310 TEST_IFCFG_WIRED_DHCP6_ONLY,
2311 NM_SETTING_IP4_CONFIG_SETTING_NAME);
2312
2313 method = nm_setting_ip4_config_get_method (s_ip4);
2314 ASSERT (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED) == 0,
2315 "wired-dhcp6-only-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
2316 TEST_IFCFG_WIRED_DHCP6_ONLY,
2317 NM_SETTING_IP4_CONFIG_SETTING_NAME,
2318 NM_SETTING_IP4_CONFIG_METHOD);
2319
2320 /* ===== IPv6 SETTING ===== */
2321
2322 s_ip6 = nm_connection_get_setting_ip6_config (connection);
2323 ASSERT (s_ip6 != NULL,
2324 "wired-dhcp6-only-verify-ip6", "failed to verify %s: missing %s setting",
2325 TEST_IFCFG_WIRED_DHCP6_ONLY,
2326 NM_SETTING_IP6_CONFIG_SETTING_NAME);
2327
2328 /* Method */
2329 tmp = nm_setting_ip6_config_get_method (s_ip6);
2330 ASSERT (strcmp (tmp, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0,
2331 "wired-dhcp6-only-verify-ip6", "failed to verify %s: unexpected %s / %s key value",
2332 TEST_IFCFG_WIRED_DHCP6_ONLY,
2333 NM_SETTING_IP6_CONFIG_SETTING_NAME,
2334 NM_SETTING_IP6_CONFIG_METHOD);
2335
2336 g_free (unmanaged);
2337 g_free (keyfile);
2338 g_free (routefile);
2339 g_free (route6file);
2340 g_object_unref (connection);
2341 }
2342
2343 #define TEST_IFCFG_ONBOOT_NO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-onboot-no"
2344
2345 static void
2346 test_read_onboot_no (void)
2347 {
2348 NMConnection *connection;
2349 NMSettingConnection *s_con;
2350 char *unmanaged = NULL;
2351 char *keyfile = NULL;
2352 char *routefile = NULL;
2353 char *route6file = NULL;
2354 gboolean ignore_error = FALSE;
2355 GError *error = NULL;
2356
2357 connection = connection_from_file (TEST_IFCFG_ONBOOT_NO,
2358 NULL,
2359 TYPE_ETHERNET,
2360 NULL,
2361 &unmanaged,
2362 &keyfile,
2363 &routefile,
2364 &route6file,
2365 &error,
2366 &ignore_error);
2367 ASSERT (connection != NULL,
2368 "onboot-no-read", "failed to read %s: %s", TEST_IFCFG_ONBOOT_NO, error->message);
2369
2370 ASSERT (nm_connection_verify (connection, &error),
2371 "onboot-no-verify", "failed to verify %s: %s", TEST_IFCFG_ONBOOT_NO, error->message);
2372
2373 ASSERT (unmanaged == NULL,
2374 "onboot-no-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_ONBOOT_NO);
2375
2376 /* ===== CONNECTION SETTING ===== */
2377
2378 s_con = nm_connection_get_setting_connection (connection);
2379 ASSERT (s_con != NULL,
2380 "onboot-no-verify-connection", "failed to verify %s: missing %s setting",
2381 TEST_IFCFG_ONBOOT_NO,
2382 NM_SETTING_CONNECTION_SETTING_NAME);
2383
2384 /* Autoconnect */
2385 ASSERT (nm_setting_connection_get_autoconnect (s_con) == FALSE,
2386 "onboot-no-verify-connection", "failed to verify %s: unexpected %s /%s key value",
2387 TEST_IFCFG_ONBOOT_NO,
2388 NM_SETTING_CONNECTION_SETTING_NAME,
2389 NM_SETTING_CONNECTION_AUTOCONNECT);
2390
2391 g_free (unmanaged);
2392 g_free (keyfile);
2393 g_free (routefile);
2394 g_free (route6file);
2395 g_object_unref (connection);
2396 }
2397
2398 #define TEST_IFCFG_NOIP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-noip"
2399
2400 static void
2401 test_read_noip (void)
2402 {
2403 NMConnection *connection;
2404 NMSettingIP4Config *s_ip4;
2405 NMSettingIP6Config *s_ip6;
2406 char *unmanaged = NULL;
2407 char *keyfile = NULL;
2408 char *routefile = NULL;
2409 char *route6file = NULL;
2410 gboolean ignore_error = FALSE;
2411 GError *error = NULL;
2412
2413 connection = connection_from_file (TEST_IFCFG_NOIP,
2414 NULL,
2415 TYPE_ETHERNET,
2416 NULL,
2417 &unmanaged,
2418 &keyfile,
2419 &routefile,
2420 &route6file,
2421 &error,
2422 &ignore_error);
2423 g_assert (connection);
2424 g_assert (nm_connection_verify (connection, &error));
2425 g_assert_no_error (error);
2426
2427 s_ip4 = nm_connection_get_setting_ip4_config (connection);
2428 g_assert (s_ip4);
2429 g_assert_cmpstr (nm_setting_ip4_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED);
2430 g_assert (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE);
2431
2432 s_ip6 = nm_connection_get_setting_ip6_config (connection);
2433 g_assert (s_ip6);
2434 g_assert_cmpstr (nm_setting_ip6_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_IGNORE);
2435 g_assert (nm_setting_ip6_config_get_never_default (s_ip6) == FALSE);
2436
2437 g_free (unmanaged);
2438 g_free (keyfile);
2439 g_free (routefile);
2440 g_free (route6file);
2441 g_object_unref (connection);
2442 }
2443
2444 #define TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-8021x-peap-mschapv2"
2445 #define TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
2446
2447 static void
2448 test_read_wired_8021x_peap_mschapv2 (void)
2449 {
2450 NMConnection *connection;
2451 NMSettingWired *s_wired;
2452 NMSettingIP4Config *s_ip4;
2453 NMSetting8021x *s_8021x;
2454 NMSetting8021x *tmp_8021x;
2455 char *unmanaged = NULL;
2456 char *keyfile = NULL;
2457 char *routefile = NULL;
2458 char *route6file = NULL;
2459 gboolean ignore_error = FALSE;
2460 GError *error = NULL;
2461 const char *tmp;
2462 const char *expected_identity = "David Smith";
2463 const char *expected_anon_identity = "somebody";
2464 const char *expected_password = "foobar baz";
2465 gboolean success = FALSE;
2466 const char *expected_ca_cert_path;
2467 const char *read_ca_cert_path;
2468
2469 connection = connection_from_file (TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2470 NULL,
2471 TYPE_ETHERNET,
2472 NULL,
2473 &unmanaged,
2474 &keyfile,
2475 &routefile,
2476 &route6file,
2477 &error,
2478 &ignore_error);
2479 ASSERT (connection != NULL,
2480 "wired-8021x-peap-mschapv2-read", "failed to read %s: %s", TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2, error->message);
2481
2482 ASSERT (nm_connection_verify (connection, &error),
2483 "wired-8021x-peap-mschapv2-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2, error->message);
2484
2485 ASSERT (unmanaged == NULL,
2486 "wired-8021x-peap-mschapv2-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2);
2487
2488 /* ===== WIRED SETTING ===== */
2489
2490 s_wired = nm_connection_get_setting_wired (connection);
2491 ASSERT (s_wired != NULL,
2492 "wired-8021x-peap-mschapv2-verify-wired", "failed to verify %s: missing %s setting",
2493 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2494 NM_SETTING_WIRED_SETTING_NAME);
2495
2496 /* ===== IPv4 SETTING ===== */
2497
2498 s_ip4 = nm_connection_get_setting_ip4_config (connection);
2499 ASSERT (s_ip4 != NULL,
2500 "wired-8021x-peap-mschapv2-verify-ip4", "failed to verify %s: missing %s setting",
2501 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2502 NM_SETTING_IP4_CONFIG_SETTING_NAME);
2503
2504 /* Method */
2505 tmp = nm_setting_ip4_config_get_method (s_ip4);
2506 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
2507 "wired-8021x-peap-mschapv2-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
2508 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2509 NM_SETTING_IP4_CONFIG_SETTING_NAME,
2510 NM_SETTING_IP4_CONFIG_METHOD);
2511
2512 /* ===== 802.1x SETTING ===== */
2513 s_8021x = nm_connection_get_setting_802_1x (connection);
2514 ASSERT (s_8021x != NULL,
2515 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s setting",
2516 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2517 NM_SETTING_802_1X_SETTING_NAME);
2518
2519 /* EAP methods */
2520 ASSERT (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1,
2521 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2522 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2523 NM_SETTING_802_1X_SETTING_NAME,
2524 NM_SETTING_802_1X_EAP);
2525 tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0);
2526 ASSERT (tmp != NULL,
2527 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s eap method",
2528 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2529 NM_SETTING_802_1X_SETTING_NAME,
2530 NM_SETTING_802_1X_EAP);
2531 ASSERT (strcmp (tmp, "peap") == 0,
2532 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2533 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2534 NM_SETTING_802_1X_SETTING_NAME,
2535 NM_SETTING_802_1X_EAP);
2536
2537 /* Identity */
2538 tmp = nm_setting_802_1x_get_identity (s_8021x);
2539 ASSERT (tmp != NULL,
2540 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2541 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2542 NM_SETTING_802_1X_SETTING_NAME,
2543 NM_SETTING_802_1X_IDENTITY);
2544 ASSERT (strcmp (tmp, expected_identity) == 0,
2545 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2546 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2547 NM_SETTING_802_1X_SETTING_NAME,
2548 NM_SETTING_802_1X_IDENTITY);
2549
2550 /* Anonymous Identity */
2551 tmp = nm_setting_802_1x_get_anonymous_identity (s_8021x);
2552 ASSERT (tmp != NULL,
2553 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2554 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2555 NM_SETTING_802_1X_SETTING_NAME,
2556 NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
2557 ASSERT (strcmp (tmp, expected_anon_identity) == 0,
2558 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2559 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2560 NM_SETTING_802_1X_SETTING_NAME,
2561 NM_SETTING_802_1X_ANONYMOUS_IDENTITY);
2562
2563 /* Password */
2564 tmp = nm_setting_802_1x_get_password (s_8021x);
2565 ASSERT (tmp != NULL,
2566 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2567 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2568 NM_SETTING_802_1X_SETTING_NAME,
2569 NM_SETTING_802_1X_PASSWORD);
2570 ASSERT (strcmp (tmp, expected_password) == 0,
2571 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2572 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2573 NM_SETTING_802_1X_SETTING_NAME,
2574 NM_SETTING_802_1X_PASSWORD);
2575
2576 /* PEAP version */
2577 tmp = nm_setting_802_1x_get_phase1_peapver (s_8021x);
2578 ASSERT (tmp != NULL,
2579 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2580 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2581 NM_SETTING_802_1X_SETTING_NAME,
2582 NM_SETTING_802_1X_PHASE1_PEAPVER);
2583 ASSERT (strcmp (tmp, "1") == 0,
2584 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2585 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2586 NM_SETTING_802_1X_SETTING_NAME,
2587 NM_SETTING_802_1X_PHASE1_PEAPVER);
2588
2589 /* PEAP Label */
2590 tmp = nm_setting_802_1x_get_phase1_peaplabel (s_8021x);
2591 ASSERT (tmp != NULL,
2592 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2593 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2594 NM_SETTING_802_1X_SETTING_NAME,
2595 NM_SETTING_802_1X_PHASE1_PEAPLABEL);
2596 ASSERT (strcmp (tmp, "1") == 0,
2597 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
2598 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2599 NM_SETTING_802_1X_SETTING_NAME,
2600 NM_SETTING_802_1X_PHASE1_PEAPLABEL);
2601
2602 /* CA Cert */
2603 tmp_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
2604
2605 success = nm_setting_802_1x_set_ca_cert (tmp_8021x,
2606 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2_CA_CERT,
2607 NM_SETTING_802_1X_CK_SCHEME_PATH,
2608 NULL,
2609 &error);
2610 ASSERT (success == TRUE,
2611 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: could not load CA certificate",
2612 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2613 NM_SETTING_802_1X_SETTING_NAME,
2614 NM_SETTING_802_1X_CA_CERT);
2615 expected_ca_cert_path = nm_setting_802_1x_get_ca_cert_path (tmp_8021x);
2616 ASSERT (expected_ca_cert_path != NULL,
2617 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: failed to get CA certificate",
2618 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2619 NM_SETTING_802_1X_SETTING_NAME,
2620 NM_SETTING_802_1X_CA_CERT);
2621
2622 read_ca_cert_path = nm_setting_802_1x_get_ca_cert_path (s_8021x);
2623 ASSERT (read_ca_cert_path != NULL,
2624 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: missing %s / %s key",
2625 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2626 NM_SETTING_802_1X_SETTING_NAME,
2627 NM_SETTING_802_1X_CA_CERT);
2628
2629 ASSERT (strcmp (read_ca_cert_path, expected_ca_cert_path) == 0,
2630 "wired-8021x-peap-mschapv2-verify-8021x", "failed to verify %s: unexpected %s / %s certificate path",
2631 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2,
2632 NM_SETTING_802_1X_SETTING_NAME,
2633 NM_SETTING_802_1X_CA_CERT);
2634
2635 g_object_unref (tmp_8021x);
2636
2637 g_free (unmanaged);
2638 g_free (keyfile);
2639 g_free (routefile);
2640 g_free (route6file);
2641 g_object_unref (connection);
2642 }
2643
2644 #define TEST_IFCFG_WIRED_8021X_TLS_AGENT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-8021x-tls-agent"
2645 #define TEST_IFCFG_WIRED_8021X_TLS_ALWAYS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-8021x-tls-always"
2646
2647 static void
2648 test_read_wired_8021x_tls_secret_flags (const char *ifcfg, NMSettingSecretFlags expected_flags)
2649 {
2650 NMConnection *connection;
2651 NMSettingWired *s_wired;
2652 NMSetting8021x *s_8021x;
2653 char *unmanaged = NULL;
2654 char *keyfile = NULL;
2655 char *routefile = NULL;
2656 char *route6file = NULL;
2657 gboolean ignore_error = FALSE;
2658 GError *error = NULL;
2659 const char *expected_identity = "David Smith";
2660 gboolean success = FALSE;
2661 char *dirname, *tmp;
2662
2663 connection = connection_from_file (ifcfg,
2664 NULL,
2665 TYPE_ETHERNET,
2666 NULL,
2667 &unmanaged,
2668 &keyfile,
2669 &routefile,
2670 &route6file,
2671 &error,
2672 &ignore_error);
2673 g_assert_no_error (error);
2674 g_assert (connection);
2675
2676 success = nm_connection_verify (connection, &error);
2677 g_assert_no_error (error);
2678 g_assert (success);
2679
2680 /* ===== WIRED SETTING ===== */
2681 s_wired = nm_connection_get_setting_wired (connection);
2682 g_assert (s_wired);
2683
2684 /* ===== 802.1x SETTING ===== */
2685 s_8021x = nm_connection_get_setting_802_1x (connection);
2686 g_assert (s_8021x);
2687 g_assert_cmpint (nm_setting_802_1x_get_num_eap_methods (s_8021x), ==, 1);
2688 g_assert_cmpstr (nm_setting_802_1x_get_eap_method (s_8021x, 0), ==, "tls");
2689 g_assert_cmpstr (nm_setting_802_1x_get_identity (s_8021x), ==, expected_identity);
2690 g_assert_cmpint (nm_setting_802_1x_get_private_key_password_flags (s_8021x), ==, expected_flags);
2691
2692 dirname = g_path_get_dirname (ifcfg);
2693 tmp = g_build_path ("/", dirname, "test_ca_cert.pem", NULL);
2694 g_assert_cmpstr (nm_setting_802_1x_get_ca_cert_path (s_8021x), ==, tmp);
2695 g_free (tmp);
2696
2697 tmp = g_build_path ("/", dirname, "test1_key_and_cert.pem", NULL);
2698 g_assert_cmpstr (nm_setting_802_1x_get_client_cert_path (s_8021x), ==, tmp);
2699 g_assert_cmpstr (nm_setting_802_1x_get_private_key_path (s_8021x), ==, tmp);
2700 g_free (tmp);
2701
2702 g_free (dirname);
2703
2704 g_free (unmanaged);
2705 g_free (keyfile);
2706 g_free (routefile);
2707 g_free (route6file);
2708 g_object_unref (connection);
2709 }
2710
2711 #define TEST_IFCFG_WIFI_OPEN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open"
2712
2713 static void
2714 test_read_wifi_open (void)
2715 {
2716 NMConnection *connection;
2717 NMSettingConnection *s_con;
2718 NMSettingWireless *s_wireless;
2719 NMSettingWirelessSecurity *s_wsec;
2720 NMSettingIP4Config *s_ip4;
2721 char *unmanaged = NULL;
2722 char *keyfile = NULL;
2723 char *routefile = NULL;
2724 char *route6file = NULL;
2725 gboolean ignore_error = FALSE;
2726 GError *error = NULL;
2727 const char *tmp;
2728 const GByteArray *array;
2729 char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
2730 const char *expected_id = "System blahblah (test-wifi-open)";
2731 guint64 expected_timestamp = 0;
2732 const char *expected_ssid = "blahblah";
2733 const char *expected_mode = "infrastructure";
2734 const guint32 expected_channel = 1;
2735
2736 connection = connection_from_file (TEST_IFCFG_WIFI_OPEN,
2737 NULL,
2738 TYPE_WIRELESS,
2739 NULL,
2740 &unmanaged,
2741 &keyfile,
2742 &routefile,
2743 &route6file,
2744 &error,
2745 &ignore_error);
2746 ASSERT (connection != NULL,
2747 "wifi-open-read", "failed to read %s: %s", TEST_IFCFG_WIFI_OPEN, error->message);
2748
2749 ASSERT (nm_connection_verify (connection, &error),
2750 "wifi-open-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_OPEN, error->message);
2751
2752 /* ===== CONNECTION SETTING ===== */
2753
2754 s_con = nm_connection_get_setting_connection (connection);
2755 ASSERT (s_con != NULL,
2756 "wifi-open-verify-connection", "failed to verify %s: missing %s setting",
2757 TEST_IFCFG_WIFI_OPEN,
2758 NM_SETTING_CONNECTION_SETTING_NAME);
2759
2760 /* ID */
2761 tmp = nm_setting_connection_get_id (s_con);
2762 ASSERT (tmp != NULL,
2763 "wifi-open-verify-connection", "failed to verify %s: missing %s / %s key",
2764 TEST_IFCFG_WIFI_OPEN,
2765 NM_SETTING_CONNECTION_SETTING_NAME,
2766 NM_SETTING_CONNECTION_ID);
2767 ASSERT (strcmp (tmp, expected_id) == 0,
2768 "wifi-open-verify-connection", "failed to verify %s: unexpected %s / %s key value",
2769 TEST_IFCFG_WIFI_OPEN,
2770 NM_SETTING_CONNECTION_SETTING_NAME,
2771 NM_SETTING_CONNECTION_ID);
2772
2773 /* UUID can't be tested if the ifcfg does not contain the UUID key, because
2774 * the UUID is generated on the full path of the ifcfg file, which can change
2775 * depending on where the tests are run.
2776 */
2777
2778 /* Timestamp */
2779 ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
2780 "wifi-open-verify-connection", "failed to verify %s: unexpected %s /%s key value",
2781 TEST_IFCFG_WIFI_OPEN,
2782 NM_SETTING_CONNECTION_SETTING_NAME,
2783 NM_SETTING_CONNECTION_TIMESTAMP);
2784
2785 /* Autoconnect */
2786 ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
2787 "wifi-open-verify-connection", "failed to verify %s: unexpected %s /%s key value",
2788 TEST_IFCFG_WIFI_OPEN,
2789 NM_SETTING_CONNECTION_SETTING_NAME,
2790 NM_SETTING_CONNECTION_AUTOCONNECT);
2791
2792 /* ===== WIRELESS SETTING ===== */
2793
2794 s_wireless = nm_connection_get_setting_wireless (connection);
2795 ASSERT (s_wireless != NULL,
2796 "wifi-open-verify-wireless", "failed to verify %s: missing %s setting",
2797 TEST_IFCFG_WIFI_OPEN,
2798 NM_SETTING_WIRELESS_SETTING_NAME);
2799
2800 /* MAC address */
2801 array = nm_setting_wireless_get_mac_address (s_wireless);
2802 ASSERT (array != NULL,
2803 "wifi-open-verify-wireless", "failed to verify %s: missing %s / %s key",
2804 TEST_IFCFG_WIFI_OPEN,
2805 NM_SETTING_WIRELESS_SETTING_NAME,
2806 NM_SETTING_WIRELESS_MAC_ADDRESS);
2807 ASSERT (array->len == ETH_ALEN,
2808 "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
2809 TEST_IFCFG_WIFI_OPEN,
2810 NM_SETTING_WIRELESS_SETTING_NAME,
2811 NM_SETTING_WIRELESS_MAC_ADDRESS);
2812 ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
2813 "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2814 TEST_IFCFG_WIFI_OPEN,
2815 NM_SETTING_WIRELESS_SETTING_NAME,
2816 NM_SETTING_WIRELESS_MAC_ADDRESS);
2817
2818 ASSERT (nm_setting_wireless_get_mtu (s_wireless) == 0,
2819 "wifi-open-verify-wired", "failed to verify %s: unexpected %s / %s key value",
2820 TEST_IFCFG_WIFI_OPEN,
2821 NM_SETTING_WIRELESS_SETTING_NAME,
2822 NM_SETTING_WIRELESS_MTU);
2823
2824 array = nm_setting_wireless_get_ssid (s_wireless);
2825 ASSERT (array != NULL,
2826 "wifi-open-verify-wireless", "failed to verify %s: missing %s / %s key",
2827 TEST_IFCFG_WIFI_OPEN,
2828 NM_SETTING_WIRELESS_SETTING_NAME,
2829 NM_SETTING_WIRELESS_SSID);
2830 ASSERT (array->len == strlen (expected_ssid),
2831 "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
2832 TEST_IFCFG_WIFI_OPEN,
2833 NM_SETTING_WIRELESS_SETTING_NAME,
2834 NM_SETTING_WIRELESS_SSID);
2835 ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
2836 "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2837 TEST_IFCFG_WIFI_OPEN,
2838 NM_SETTING_WIRELESS_SETTING_NAME,
2839 NM_SETTING_WIRELESS_SSID);
2840
2841 ASSERT (nm_setting_wireless_get_bssid (s_wireless) == NULL,
2842 "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2843 TEST_IFCFG_WIFI_OPEN,
2844 NM_SETTING_WIRELESS_SETTING_NAME,
2845 NM_SETTING_WIRELESS_BSSID);
2846
2847 tmp = nm_setting_wireless_get_mode (s_wireless);
2848 ASSERT (tmp != NULL,
2849 "wifi-open-verify-wireless", "failed to verify %s: missing %s / %s key",
2850 TEST_IFCFG_WIFI_OPEN,
2851 NM_SETTING_WIRELESS_SETTING_NAME,
2852 NM_SETTING_WIRELESS_MODE);
2853 ASSERT (strcmp (tmp, expected_mode) == 0,
2854 "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2855 TEST_IFCFG_WIFI_OPEN,
2856 NM_SETTING_WIRELESS_SETTING_NAME,
2857 NM_SETTING_WIRELESS_MODE);
2858
2859 ASSERT (nm_setting_wireless_get_channel (s_wireless) == expected_channel,
2860 "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2861 TEST_IFCFG_WIFI_OPEN,
2862 NM_SETTING_WIRELESS_SETTING_NAME,
2863 NM_SETTING_WIRELESS_CHANNEL);
2864
2865 /* ===== WiFi SECURITY SETTING ===== */
2866 s_wsec = nm_connection_get_setting_wireless_security (connection);
2867 g_assert (s_wsec == NULL);
2868
2869 /* ===== IPv4 SETTING ===== */
2870
2871 s_ip4 = nm_connection_get_setting_ip4_config (connection);
2872 ASSERT (s_ip4 != NULL,
2873 "wifi-open-verify-ip4", "failed to verify %s: missing %s setting",
2874 TEST_IFCFG_WIFI_OPEN,
2875 NM_SETTING_IP4_CONFIG_SETTING_NAME);
2876
2877 /* Method */
2878 tmp = nm_setting_ip4_config_get_method (s_ip4);
2879 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
2880 "wifi-open-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
2881 TEST_IFCFG_WIFI_OPEN,
2882 NM_SETTING_IP4_CONFIG_SETTING_NAME,
2883 NM_SETTING_IP4_CONFIG_METHOD);
2884
2885 g_free (unmanaged);
2886 g_free (keyfile);
2887 g_free (routefile);
2888 g_free (route6file);
2889 g_object_unref (connection);
2890 }
2891
2892 #define TEST_IFCFG_WIFI_OPEN_AUTO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-auto"
2893
2894 static void
2895 test_read_wifi_open_auto (void)
2896 {
2897 NMConnection *connection;
2898 NMSettingConnection *s_con;
2899 NMSettingWireless *s_wireless;
2900 char *unmanaged = NULL;
2901 char *keyfile = NULL;
2902 char *routefile = NULL;
2903 char *route6file = NULL;
2904 gboolean ignore_error = FALSE;
2905 GError *error = NULL;
2906 const char *tmp;
2907 const char *expected_id = "System blahblah (test-wifi-open-auto)";
2908 const char *expected_mode = "infrastructure";
2909
2910 connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_AUTO,
2911 NULL,
2912 TYPE_WIRELESS,
2913 NULL,
2914 &unmanaged,
2915 &keyfile,
2916 &routefile,
2917 &route6file,
2918 &error,
2919 &ignore_error);
2920 ASSERT (connection != NULL,
2921 "wifi-open-auto-read", "failed to read %s: %s", TEST_IFCFG_WIFI_OPEN_AUTO, error->message);
2922
2923 ASSERT (nm_connection_verify (connection, &error),
2924 "wifi-open-auto-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_OPEN_AUTO, error->message);
2925
2926 /* ===== CONNECTION SETTING ===== */
2927
2928 s_con = nm_connection_get_setting_connection (connection);
2929 ASSERT (s_con != NULL,
2930 "wifi-open-auto-verify-connection", "failed to verify %s: missing %s setting",
2931 TEST_IFCFG_WIFI_OPEN_AUTO,
2932 NM_SETTING_CONNECTION_SETTING_NAME);
2933
2934 /* ID */
2935 tmp = nm_setting_connection_get_id (s_con);
2936 ASSERT (tmp != NULL,
2937 "wifi-open-auto-verify-connection", "failed to verify %s: missing %s / %s key",
2938 TEST_IFCFG_WIFI_OPEN_AUTO,
2939 NM_SETTING_CONNECTION_SETTING_NAME,
2940 NM_SETTING_CONNECTION_ID);
2941 ASSERT (strcmp (tmp, expected_id) == 0,
2942 "wifi-open-auto-verify-connection", "failed to verify %s: unexpected %s / %s key value",
2943 TEST_IFCFG_WIFI_OPEN_AUTO,
2944 NM_SETTING_CONNECTION_SETTING_NAME,
2945 NM_SETTING_CONNECTION_ID);
2946
2947 /* ===== WIRELESS SETTING ===== */
2948
2949 s_wireless = nm_connection_get_setting_wireless (connection);
2950 ASSERT (s_wireless != NULL,
2951 "wifi-open-auto-verify-wireless", "failed to verify %s: missing %s setting",
2952 TEST_IFCFG_WIFI_OPEN_AUTO,
2953 NM_SETTING_WIRELESS_SETTING_NAME);
2954
2955 tmp = nm_setting_wireless_get_mode (s_wireless);
2956 ASSERT (tmp != NULL,
2957 "wifi-open-auto-verify-wireless", "failed to verify %s: missing %s / %s key",
2958 TEST_IFCFG_WIFI_OPEN_AUTO,
2959 NM_SETTING_WIRELESS_SETTING_NAME,
2960 NM_SETTING_WIRELESS_MODE);
2961 ASSERT (strcmp (tmp, expected_mode) == 0,
2962 "wifi-open-auto-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
2963 TEST_IFCFG_WIFI_OPEN_AUTO,
2964 NM_SETTING_WIRELESS_SETTING_NAME,
2965 NM_SETTING_WIRELESS_MODE);
2966
2967 g_free (unmanaged);
2968 g_free (keyfile);
2969 g_free (routefile);
2970 g_free (route6file);
2971 g_object_unref (connection);
2972 }
2973
2974 #define TEST_IFCFG_WIFI_OPEN_SSID_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-hex"
2975
2976 static void
2977 test_read_wifi_open_ssid_hex (void)
2978 {
2979 NMConnection *connection;
2980 NMSettingConnection *s_con;
2981 NMSettingWireless *s_wireless;
2982 char *unmanaged = NULL;
2983 char *keyfile = NULL;
2984 char *routefile = NULL;
2985 char *route6file = NULL;
2986 gboolean ignore_error = FALSE;
2987 GError *error = NULL;
2988 const char *tmp;
2989 const GByteArray *array;
2990 const char *expected_id = "System blahblah (test-wifi-open-ssid-hex)";
2991 const char *expected_ssid = "blahblah";
2992
2993 connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_SSID_HEX,
2994 NULL,
2995 TYPE_WIRELESS,
2996 NULL,
2997 &unmanaged,
2998 &keyfile,
2999 &routefile,
3000 &route6file,
3001 &error,
3002 &ignore_error);
3003 ASSERT (connection != NULL,
3004 "wifi-open-ssid-hex-read", "failed to read %s: %s", TEST_IFCFG_WIFI_OPEN_SSID_HEX, error->message);
3005
3006 ASSERT (nm_connection_verify (connection, &error),
3007 "wifi-open-ssid-hex-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_OPEN_SSID_HEX, error->message);
3008
3009 /* ===== CONNECTION SETTING ===== */
3010
3011 s_con = nm_connection_get_setting_connection (connection);
3012 ASSERT (s_con != NULL,
3013 "wifi-open-ssid-hex-verify-connection", "failed to verify %s: missing %s setting",
3014 TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3015 NM_SETTING_CONNECTION_SETTING_NAME);
3016
3017 /* ID */
3018 tmp = nm_setting_connection_get_id (s_con);
3019 ASSERT (tmp != NULL,
3020 "wifi-open-ssid-hex-verify-connection", "failed to verify %s: missing %s / %s key",
3021 TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3022 NM_SETTING_CONNECTION_SETTING_NAME,
3023 NM_SETTING_CONNECTION_ID);
3024 ASSERT (strcmp (tmp, expected_id) == 0,
3025 "wifi-open-ssid-hex-verify-connection", "failed to verify %s: unexpected %s / %s key value",
3026 TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3027 NM_SETTING_CONNECTION_SETTING_NAME,
3028 NM_SETTING_CONNECTION_ID);
3029
3030 /* ===== WIRELESS SETTING ===== */
3031
3032 s_wireless = nm_connection_get_setting_wireless (connection);
3033 ASSERT (s_wireless != NULL,
3034 "wifi-open-ssid-hex-verify-wireless", "failed to verify %s: missing %s setting",
3035 TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3036 NM_SETTING_WIRELESS_SETTING_NAME);
3037
3038 /* SSID */
3039 array = nm_setting_wireless_get_ssid (s_wireless);
3040 ASSERT (array != NULL,
3041 "wifi-open-ssid-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
3042 TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3043 NM_SETTING_WIRELESS_SETTING_NAME,
3044 NM_SETTING_WIRELESS_SSID);
3045 ASSERT (array->len == strlen (expected_ssid),
3046 "wifi-open-ssid-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3047 TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3048 NM_SETTING_WIRELESS_SETTING_NAME,
3049 NM_SETTING_WIRELESS_SSID);
3050 ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
3051 "wifi-open-ssid-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3052 TEST_IFCFG_WIFI_OPEN_SSID_HEX,
3053 NM_SETTING_WIRELESS_SETTING_NAME,
3054 NM_SETTING_WIRELESS_SSID);
3055
3056 g_free (unmanaged);
3057 g_free (keyfile);
3058 g_free (routefile);
3059 g_free (route6file);
3060 g_object_unref (connection);
3061 }
3062
3063 static void
3064 test_read_wifi_open_ssid_bad (const char *file, const char *test)
3065 {
3066 NMConnection *connection;
3067 char *unmanaged = NULL;
3068 char *keyfile = NULL;
3069 char *routefile = NULL;
3070 char *route6file = NULL;
3071 gboolean ignore_error = FALSE;
3072 GError *error = NULL;
3073
3074 connection = connection_from_file (file,
3075 NULL,
3076 TYPE_WIRELESS,
3077 NULL,
3078 &unmanaged,
3079 &keyfile,
3080 &routefile,
3081 &route6file,
3082 &error,
3083 &ignore_error);
3084 ASSERT (connection == NULL, test, "unexpected success reading %s", file);
3085 g_clear_error (&error);
3086
3087 g_free (unmanaged);
3088 g_free (keyfile);
3089 g_free (routefile);
3090 g_free (route6file);
3091 }
3092
3093 #define TEST_IFCFG_WIFI_OPEN_SSID_QUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-quoted"
3094
3095 static void
3096 test_read_wifi_open_ssid_quoted (void)
3097 {
3098 NMConnection *connection;
3099 NMSettingConnection *s_con;
3100 NMSettingWireless *s_wireless;
3101 char *unmanaged = NULL;
3102 char *keyfile = NULL;
3103 char *routefile = NULL;
3104 char *route6file = NULL;
3105 gboolean ignore_error = FALSE;
3106 GError *error = NULL;
3107 const char *tmp;
3108 const GByteArray *array;
3109 const char *expected_id = "System foo\"bar\\ (test-wifi-open-ssid-quoted)";
3110 const char *expected_ssid = "foo\"bar\\";
3111
3112 connection = connection_from_file (TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3113 NULL,
3114 TYPE_WIRELESS,
3115 NULL,
3116 &unmanaged,
3117 &keyfile,
3118 &routefile,
3119 &route6file,
3120 &error,
3121 &ignore_error);
3122 ASSERT (connection != NULL,
3123 "wifi-open-ssid-quoted-read", "failed to read %s: %s", TEST_IFCFG_WIFI_OPEN_SSID_QUOTED, error->message);
3124
3125 ASSERT (nm_connection_verify (connection, &error),
3126 "wifi-open-ssid-quoted-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_OPEN_SSID_QUOTED, error->message);
3127
3128 /* ===== CONNECTION SETTING ===== */
3129
3130 s_con = nm_connection_get_setting_connection (connection);
3131 ASSERT (s_con != NULL,
3132 "wifi-open-ssid-quoted-verify-connection", "failed to verify %s: missing %s setting",
3133 TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3134 NM_SETTING_CONNECTION_SETTING_NAME);
3135
3136 /* ID */
3137 tmp = nm_setting_connection_get_id (s_con);
3138 ASSERT (tmp != NULL,
3139 "wifi-open-ssid-quoted-verify-connection", "failed to verify %s: missing %s / %s key",
3140 TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3141 NM_SETTING_CONNECTION_SETTING_NAME,
3142 NM_SETTING_CONNECTION_ID);
3143 ASSERT (strcmp (tmp, expected_id) == 0,
3144 "wifi-open-ssid-quoted-verify-connection", "failed to verify %s: unexpected %s / %s key value",
3145 TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3146 NM_SETTING_CONNECTION_SETTING_NAME,
3147 NM_SETTING_CONNECTION_ID);
3148
3149 /* ===== WIRELESS SETTING ===== */
3150
3151 s_wireless = nm_connection_get_setting_wireless (connection);
3152 ASSERT (s_wireless != NULL,
3153 "wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: missing %s setting",
3154 TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3155 NM_SETTING_WIRELESS_SETTING_NAME);
3156
3157 /* SSID */
3158 array = nm_setting_wireless_get_ssid (s_wireless);
3159 ASSERT (array != NULL,
3160 "wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: missing %s / %s key",
3161 TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3162 NM_SETTING_WIRELESS_SETTING_NAME,
3163 NM_SETTING_WIRELESS_SSID);
3164 ASSERT (array->len == strlen (expected_ssid),
3165 "wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3166 TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3167 NM_SETTING_WIRELESS_SETTING_NAME,
3168 NM_SETTING_WIRELESS_SSID);
3169 ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
3170 "wifi-open-ssid-quoted-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3171 TEST_IFCFG_WIFI_OPEN_SSID_QUOTED,
3172 NM_SETTING_WIRELESS_SETTING_NAME,
3173 NM_SETTING_WIRELESS_SSID);
3174
3175 g_free (unmanaged);
3176 g_free (keyfile);
3177 g_free (routefile);
3178 g_free (route6file);
3179 g_object_unref (connection);
3180 }
3181
3182 #define TEST_IFCFG_WIFI_WEP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep"
3183
3184 static void
3185 test_read_wifi_wep (void)
3186 {
3187 NMConnection *connection;
3188 NMSettingConnection *s_con;
3189 NMSettingWireless *s_wireless;
3190 NMSettingWirelessSecurity *s_wsec;
3191 NMSettingIP4Config *s_ip4;
3192 char *unmanaged = NULL;
3193 char *keyfile = NULL;
3194 char *routefile = NULL;
3195 char *route6file = NULL;
3196 gboolean ignore_error = FALSE;
3197 GError *error = NULL;
3198 const char *tmp;
3199 const GByteArray *array;
3200 char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
3201 const char *expected_id = "System blahblah (test-wifi-wep)";
3202 guint64 expected_timestamp = 0;
3203 const char *expected_ssid = "blahblah";
3204 const char *expected_mode = "infrastructure";
3205 const guint32 expected_channel = 1;
3206 const char *expected_wep_key0 = "0123456789abcdef0123456789";
3207 NMWepKeyType key_type;
3208
3209 connection = connection_from_file (TEST_IFCFG_WIFI_WEP,
3210 NULL,
3211 TYPE_WIRELESS,
3212 NULL,
3213 &unmanaged,
3214 &keyfile,
3215 &routefile,
3216 &route6file,
3217 &error,
3218 &ignore_error);
3219 ASSERT (connection != NULL,
3220 "wifi-wep-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP, error->message);
3221
3222 ASSERT (nm_connection_verify (connection, &error),
3223 "wifi-wep-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP, error->message);
3224
3225 /* ===== CONNECTION SETTING ===== */
3226
3227 s_con = nm_connection_get_setting_connection (connection);
3228 ASSERT (s_con != NULL,
3229 "wifi-wep-verify-connection", "failed to verify %s: missing %s setting",
3230 TEST_IFCFG_WIFI_WEP,
3231 NM_SETTING_CONNECTION_SETTING_NAME);
3232
3233 /* ID */
3234 tmp = nm_setting_connection_get_id (s_con);
3235 ASSERT (tmp != NULL,
3236 "wifi-wep-verify-connection", "failed to verify %s: missing %s / %s key",
3237 TEST_IFCFG_WIFI_WEP,
3238 NM_SETTING_CONNECTION_SETTING_NAME,
3239 NM_SETTING_CONNECTION_ID);
3240 ASSERT (strcmp (tmp, expected_id) == 0,
3241 "wifi-wep-verify-connection", "failed to verify %s: unexpected %s / %s key value",
3242 TEST_IFCFG_WIFI_WEP,
3243 NM_SETTING_CONNECTION_SETTING_NAME,
3244 NM_SETTING_CONNECTION_ID);
3245
3246 /* UUID can't be tested if the ifcfg does not contain the UUID key, because
3247 * the UUID is generated on the full path of the ifcfg file, which can change
3248 * depending on where the tests are run.
3249 */
3250
3251 /* Timestamp */
3252 ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
3253 "wifi-wep-verify-connection", "failed to verify %s: unexpected %s /%s key value",
3254 TEST_IFCFG_WIFI_WEP,
3255 NM_SETTING_CONNECTION_SETTING_NAME,
3256 NM_SETTING_CONNECTION_TIMESTAMP);
3257
3258 /* Autoconnect */
3259 ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
3260 "wifi-wep-verify-connection", "failed to verify %s: unexpected %s /%s key value",
3261 TEST_IFCFG_WIFI_WEP,
3262 NM_SETTING_CONNECTION_SETTING_NAME,
3263 NM_SETTING_CONNECTION_AUTOCONNECT);
3264
3265 /* ===== WIRELESS SETTING ===== */
3266
3267 s_wireless = nm_connection_get_setting_wireless (connection);
3268 ASSERT (s_wireless != NULL,
3269 "wifi-wep-verify-wireless", "failed to verify %s: missing %s setting",
3270 TEST_IFCFG_WIFI_WEP,
3271 NM_SETTING_WIRELESS_SETTING_NAME);
3272
3273 /* MAC address */
3274 array = nm_setting_wireless_get_mac_address (s_wireless);
3275 ASSERT (array != NULL,
3276 "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3277 TEST_IFCFG_WIFI_WEP,
3278 NM_SETTING_WIRELESS_SETTING_NAME,
3279 NM_SETTING_WIRELESS_MAC_ADDRESS);
3280 ASSERT (array->len == ETH_ALEN,
3281 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3282 TEST_IFCFG_WIFI_WEP,
3283 NM_SETTING_WIRELESS_SETTING_NAME,
3284 NM_SETTING_WIRELESS_MAC_ADDRESS);
3285 ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
3286 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3287 TEST_IFCFG_WIFI_WEP,
3288 NM_SETTING_WIRELESS_SETTING_NAME,
3289 NM_SETTING_WIRELESS_MAC_ADDRESS);
3290
3291 /* MTU */
3292 ASSERT (nm_setting_wireless_get_mtu (s_wireless) == 0,
3293 "wifi-wep-verify-wired", "failed to verify %s: unexpected %s / %s key value",
3294 TEST_IFCFG_WIFI_WEP,
3295 NM_SETTING_WIRELESS_SETTING_NAME,
3296 NM_SETTING_WIRELESS_MTU);
3297
3298 /* SSID */
3299 array = nm_setting_wireless_get_ssid (s_wireless);
3300 ASSERT (array != NULL,
3301 "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3302 TEST_IFCFG_WIFI_WEP,
3303 NM_SETTING_WIRELESS_SETTING_NAME,
3304 NM_SETTING_WIRELESS_SSID);
3305 ASSERT (array->len == strlen (expected_ssid),
3306 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3307 TEST_IFCFG_WIFI_WEP,
3308 NM_SETTING_WIRELESS_SETTING_NAME,
3309 NM_SETTING_WIRELESS_SSID);
3310 ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
3311 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3312 TEST_IFCFG_WIFI_WEP,
3313 NM_SETTING_WIRELESS_SETTING_NAME,
3314 NM_SETTING_WIRELESS_SSID);
3315
3316 /* BSSID */
3317 ASSERT (nm_setting_wireless_get_bssid (s_wireless) == NULL,
3318 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3319 TEST_IFCFG_WIFI_WEP,
3320 NM_SETTING_WIRELESS_SETTING_NAME,
3321 NM_SETTING_WIRELESS_BSSID);
3322
3323 /* Mode */
3324 tmp = nm_setting_wireless_get_mode (s_wireless);
3325 ASSERT (tmp != NULL,
3326 "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3327 TEST_IFCFG_WIFI_WEP,
3328 NM_SETTING_WIRELESS_SETTING_NAME,
3329 NM_SETTING_WIRELESS_MODE);
3330 ASSERT (strcmp (tmp, expected_mode) == 0,
3331 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3332 TEST_IFCFG_WIFI_WEP,
3333 NM_SETTING_WIRELESS_SETTING_NAME,
3334 NM_SETTING_WIRELESS_MODE);
3335
3336 /* Channel */
3337 ASSERT (nm_setting_wireless_get_channel (s_wireless) == expected_channel,
3338 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3339 TEST_IFCFG_WIFI_WEP,
3340 NM_SETTING_WIRELESS_SETTING_NAME,
3341 NM_SETTING_WIRELESS_CHANNEL);
3342
3343 /* ===== WIRELESS SECURITY SETTING ===== */
3344
3345 s_wsec = nm_connection_get_setting_wireless_security (connection);
3346 ASSERT (s_wsec != NULL,
3347 "wifi-wep-verify-wireless", "failed to verify %s: missing %s setting",
3348 TEST_IFCFG_WIFI_WEP,
3349 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
3350
3351 /* Key management */
3352 ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
3353 "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3354 TEST_IFCFG_WIFI_WEP,
3355 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3356 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
3357
3358 /* WEP key index */
3359 ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
3360 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3361 TEST_IFCFG_WIFI_WEP,
3362 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3363 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
3364
3365 /* WEP key type */
3366 key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
3367 ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
3368 "wifi-wep-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
3369 TEST_IFCFG_WIFI_WEP,
3370 key_type);
3371
3372 /* WEP key index 0 */
3373 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
3374 ASSERT (tmp != NULL,
3375 "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3376 TEST_IFCFG_WIFI_WEP,
3377 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3378 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3379 ASSERT (strcmp (tmp, expected_wep_key0) == 0,
3380 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3381 TEST_IFCFG_WIFI_WEP,
3382 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3383 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3384
3385 /* WEP key index 1 */
3386 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
3387 ASSERT (tmp == NULL,
3388 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3389 TEST_IFCFG_WIFI_WEP,
3390 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3391 NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
3392
3393 /* WEP key index 2 */
3394 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
3395 ASSERT (tmp == NULL,
3396 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3397 TEST_IFCFG_WIFI_WEP,
3398 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3399 NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
3400
3401 /* WEP key index 3 */
3402 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
3403 ASSERT (tmp == NULL,
3404 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3405 TEST_IFCFG_WIFI_WEP,
3406 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3407 NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
3408
3409 /* WEP Authentication mode */
3410 tmp = nm_setting_wireless_security_get_auth_alg (s_wsec);
3411 ASSERT (tmp != NULL,
3412 "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3413 TEST_IFCFG_WIFI_WEP,
3414 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3415 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
3416 ASSERT (strcmp (tmp, "shared") == 0,
3417 "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key",
3418 TEST_IFCFG_WIFI_WEP,
3419 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3420 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
3421
3422 /* ===== IPv4 SETTING ===== */
3423
3424 s_ip4 = nm_connection_get_setting_ip4_config (connection);
3425 ASSERT (s_ip4 != NULL,
3426 "wifi-wep-verify-ip4", "failed to verify %s: missing %s setting",
3427 TEST_IFCFG_WIFI_WEP,
3428 NM_SETTING_IP4_CONFIG_SETTING_NAME);
3429
3430 /* Method */
3431 tmp = nm_setting_ip4_config_get_method (s_ip4);
3432 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
3433 "wifi-wep-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
3434 TEST_IFCFG_WIFI_WEP,
3435 NM_SETTING_IP4_CONFIG_SETTING_NAME,
3436 NM_SETTING_IP4_CONFIG_METHOD);
3437
3438 g_free (unmanaged);
3439 g_free (keyfile);
3440 g_free (routefile);
3441 g_free (route6file);
3442 g_object_unref (connection);
3443 }
3444
3445 #define TEST_IFCFG_WIFI_WEP_ADHOC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-adhoc"
3446
3447 static void
3448 test_read_wifi_wep_adhoc (void)
3449 {
3450 NMConnection *connection;
3451 NMSettingConnection *s_con;
3452 NMSettingWireless *s_wireless;
3453 NMSettingWirelessSecurity *s_wsec;
3454 NMSettingIP4Config *s_ip4;
3455 char *unmanaged = NULL;
3456 char *keyfile = NULL;
3457 char *routefile = NULL;
3458 char *route6file = NULL;
3459 gboolean ignore_error = FALSE;
3460 GError *error = NULL;
3461 const char *tmp;
3462 const GByteArray *array;
3463 const char *expected_id = "System blahblah (test-wifi-wep-adhoc)";
3464 const char *expected_ssid = "blahblah";
3465 const char *expected_mode = "adhoc";
3466 const char *expected_wep_key0 = "0123456789abcdef0123456789";
3467 guint32 addr;
3468 const char *expected_dns1 = "4.2.2.1";
3469 const char *expected_dns2 = "4.2.2.2";
3470
3471 connection = connection_from_file (TEST_IFCFG_WIFI_WEP_ADHOC,
3472 NULL,
3473 TYPE_WIRELESS,
3474 NULL,
3475 &unmanaged,
3476 &keyfile,
3477 &routefile,
3478 &route6file,
3479 &error,
3480 &ignore_error);
3481 ASSERT (connection != NULL,
3482 "wifi-wep-adhoc-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_ADHOC, error->message);
3483
3484 ASSERT (nm_connection_verify (connection, &error),
3485 "wifi-wep-adhoc-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_ADHOC, error->message);
3486
3487 /* ===== CONNECTION SETTING ===== */
3488
3489 s_con = nm_connection_get_setting_connection (connection);
3490 ASSERT (s_con != NULL,
3491 "wifi-wep-adhoc-verify-connection", "failed to verify %s: missing %s setting",
3492 TEST_IFCFG_WIFI_WEP_ADHOC,
3493 NM_SETTING_CONNECTION_SETTING_NAME);
3494
3495 /* ID */
3496 tmp = nm_setting_connection_get_id (s_con);
3497 ASSERT (tmp != NULL,
3498 "wifi-wep-adhoc-verify-connection", "failed to verify %s: missing %s / %s key",
3499 TEST_IFCFG_WIFI_WEP_ADHOC,
3500 NM_SETTING_CONNECTION_SETTING_NAME,
3501 NM_SETTING_CONNECTION_ID);
3502 ASSERT (strcmp (tmp, expected_id) == 0,
3503 "wifi-wep-adhoc-verify-connection", "failed to verify %s: unexpected %s / %s key value",
3504 TEST_IFCFG_WIFI_WEP_ADHOC,
3505 NM_SETTING_CONNECTION_SETTING_NAME,
3506 NM_SETTING_CONNECTION_ID);
3507
3508 /* UUID can't be tested if the ifcfg does not contain the UUID key, because
3509 * the UUID is generated on the full path of the ifcfg file, which can change
3510 * depending on where the tests are run.
3511 */
3512
3513 /* Autoconnect */
3514 ASSERT (nm_setting_connection_get_autoconnect (s_con) == FALSE,
3515 "wifi-wep-adhoc-verify-connection", "failed to verify %s: unexpected %s /%s key value",
3516 TEST_IFCFG_WIFI_WEP_ADHOC,
3517 NM_SETTING_CONNECTION_SETTING_NAME,
3518 NM_SETTING_CONNECTION_AUTOCONNECT);
3519
3520 /* ===== WIRELESS SETTING ===== */
3521
3522 s_wireless = nm_connection_get_setting_wireless (connection);
3523 ASSERT (s_wireless != NULL,
3524 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
3525 TEST_IFCFG_WIFI_WEP_ADHOC,
3526 NM_SETTING_WIRELESS_SETTING_NAME);
3527
3528 /* SSID */
3529 array = nm_setting_wireless_get_ssid (s_wireless);
3530 ASSERT (array != NULL,
3531 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
3532 TEST_IFCFG_WIFI_WEP_ADHOC,
3533 NM_SETTING_WIRELESS_SETTING_NAME,
3534 NM_SETTING_WIRELESS_SSID);
3535 ASSERT (array->len == strlen (expected_ssid),
3536 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
3537 TEST_IFCFG_WIFI_WEP_ADHOC,
3538 NM_SETTING_WIRELESS_SETTING_NAME,
3539 NM_SETTING_WIRELESS_SSID);
3540 ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
3541 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3542 TEST_IFCFG_WIFI_WEP_ADHOC,
3543 NM_SETTING_WIRELESS_SETTING_NAME,
3544 NM_SETTING_WIRELESS_SSID);
3545
3546 /* BSSID */
3547 ASSERT (nm_setting_wireless_get_bssid (s_wireless) == NULL,
3548 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3549 TEST_IFCFG_WIFI_WEP_ADHOC,
3550 NM_SETTING_WIRELESS_SETTING_NAME,
3551 NM_SETTING_WIRELESS_BSSID);
3552
3553 /* Mode */
3554 tmp = nm_setting_wireless_get_mode (s_wireless);
3555 ASSERT (tmp != NULL,
3556 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
3557 TEST_IFCFG_WIFI_WEP_ADHOC,
3558 NM_SETTING_WIRELESS_SETTING_NAME,
3559 NM_SETTING_WIRELESS_MODE);
3560 ASSERT (strcmp (tmp, expected_mode) == 0,
3561 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3562 TEST_IFCFG_WIFI_WEP_ADHOC,
3563 NM_SETTING_WIRELESS_SETTING_NAME,
3564 NM_SETTING_WIRELESS_MODE);
3565
3566 /* Channel */
3567 ASSERT (nm_setting_wireless_get_channel (s_wireless) == 11,
3568 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3569 TEST_IFCFG_WIFI_WEP_ADHOC,
3570 NM_SETTING_WIRELESS_SETTING_NAME,
3571 NM_SETTING_WIRELESS_CHANNEL);
3572
3573 /* ===== WIRELESS SECURITY SETTING ===== */
3574
3575 s_wsec = nm_connection_get_setting_wireless_security (connection);
3576 ASSERT (s_wsec != NULL,
3577 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
3578 TEST_IFCFG_WIFI_WEP_ADHOC,
3579 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
3580
3581 /* Key management */
3582 ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
3583 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
3584 TEST_IFCFG_WIFI_WEP_ADHOC,
3585 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3586 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
3587
3588 /* WEP key index */
3589 ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
3590 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3591 TEST_IFCFG_WIFI_WEP_ADHOC,
3592 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3593 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
3594
3595 /* WEP key index 0 */
3596 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
3597 ASSERT (tmp != NULL,
3598 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
3599 TEST_IFCFG_WIFI_WEP_ADHOC,
3600 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3601 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3602 ASSERT (strcmp (tmp, expected_wep_key0) == 0,
3603 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3604 TEST_IFCFG_WIFI_WEP_ADHOC,
3605 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3606 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3607
3608 /* WEP key index 1 */
3609 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
3610 ASSERT (tmp == NULL,
3611 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3612 TEST_IFCFG_WIFI_WEP_ADHOC,
3613 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3614 NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
3615
3616 /* WEP key index 2 */
3617 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
3618 ASSERT (tmp == NULL,
3619 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3620 TEST_IFCFG_WIFI_WEP_ADHOC,
3621 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3622 NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
3623
3624 /* WEP key index 3 */
3625 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
3626 ASSERT (tmp == NULL,
3627 "wifi-wep-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3628 TEST_IFCFG_WIFI_WEP_ADHOC,
3629 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3630 NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
3631
3632 /* WEP Authentication mode */
3633 tmp = nm_setting_wireless_security_get_auth_alg (s_wsec);
3634 ASSERT (tmp == NULL,
3635 "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3636 TEST_IFCFG_WIFI_WEP,
3637 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3638 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
3639
3640 /* ===== IPv4 SETTING ===== */
3641
3642 s_ip4 = nm_connection_get_setting_ip4_config (connection);
3643 ASSERT (s_ip4 != NULL,
3644 "wifi-wep-adhoc-verify-ip4", "failed to verify %s: missing %s setting",
3645 TEST_IFCFG_WIFI_WEP_ADHOC,
3646 NM_SETTING_IP4_CONFIG_SETTING_NAME);
3647
3648 /* Method */
3649 tmp = nm_setting_ip4_config_get_method (s_ip4);
3650 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
3651 "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
3652 TEST_IFCFG_WIFI_WEP_ADHOC,
3653 NM_SETTING_IP4_CONFIG_SETTING_NAME,
3654 NM_SETTING_IP4_CONFIG_METHOD);
3655
3656 /* Ignore auto DNS */
3657 ASSERT (nm_setting_ip4_config_get_ignore_auto_dns (s_ip4) == TRUE,
3658 "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
3659 TEST_IFCFG_WIFI_WEP_ADHOC,
3660 NM_SETTING_IP4_CONFIG_SETTING_NAME,
3661 NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS);
3662
3663 /* DNS Addresses */
3664 ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
3665 "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
3666 TEST_IFCFG_WIFI_WEP_ADHOC,
3667 NM_SETTING_IP4_CONFIG_SETTING_NAME,
3668 NM_SETTING_IP4_CONFIG_DNS);
3669
3670 ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
3671 "wifi-wep-adhoc-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
3672 TEST_IFCFG_WIFI_WEP_ADHOC,
3673 NM_SETTING_IP4_CONFIG_SETTING_NAME,
3674 NM_SETTING_IP4_CONFIG_DNS);
3675 ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
3676 "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
3677 TEST_IFCFG_WIFI_WEP_ADHOC,
3678 NM_SETTING_IP4_CONFIG_SETTING_NAME,
3679 NM_SETTING_IP4_CONFIG_DNS);
3680
3681 ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
3682 "wifi-wep-adhoc-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
3683 TEST_IFCFG_WIFI_WEP_ADHOC,
3684 NM_SETTING_IP4_CONFIG_SETTING_NAME,
3685 NM_SETTING_IP4_CONFIG_DNS);
3686 ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
3687 "wifi-wep-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
3688 TEST_IFCFG_WIFI_WEP_ADHOC,
3689 NM_SETTING_IP4_CONFIG_SETTING_NAME,
3690 NM_SETTING_IP4_CONFIG_DNS);
3691
3692 g_free (unmanaged);
3693 g_free (keyfile);
3694 g_free (routefile);
3695 g_free (route6file);
3696 g_object_unref (connection);
3697 }
3698
3699 #define TEST_IFCFG_WIFI_WEP_PASSPHRASE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-passphrase"
3700
3701 static void
3702 test_read_wifi_wep_passphrase (void)
3703 {
3704 NMConnection *connection;
3705 NMSettingConnection *s_con;
3706 NMSettingWireless *s_wireless;
3707 NMSettingWirelessSecurity *s_wsec;
3708 char *unmanaged = NULL;
3709 char *keyfile = NULL;
3710 char *routefile = NULL;
3711 char *route6file = NULL;
3712 gboolean ignore_error = FALSE;
3713 GError *error = NULL;
3714 const char *tmp;
3715 const char *expected_wep_key0 = "foobar222blahblah";
3716 NMWepKeyType key_type;
3717
3718 connection = connection_from_file (TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3719 NULL,
3720 TYPE_WIRELESS,
3721 NULL,
3722 &unmanaged,
3723 &keyfile,
3724 &routefile,
3725 &route6file,
3726 &error,
3727 &ignore_error);
3728 ASSERT (connection != NULL,
3729 "wifi-wep-passphrase-read", "failed to read %s: %s",
3730 TEST_IFCFG_WIFI_WEP_PASSPHRASE, error->message);
3731
3732 ASSERT (nm_connection_verify (connection, &error),
3733 "wifi-wep-passphrase-verify", "failed to verify %s: %s",
3734 TEST_IFCFG_WIFI_WEP_PASSPHRASE, error->message);
3735
3736 /* ===== CONNECTION SETTING ===== */
3737
3738 s_con = nm_connection_get_setting_connection (connection);
3739 ASSERT (s_con != NULL,
3740 "wifi-wep-passphrase-verify-connection", "failed to verify %s: missing %s setting",
3741 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3742 NM_SETTING_CONNECTION_SETTING_NAME);
3743
3744 /* ===== WIRELESS SETTING ===== */
3745
3746 s_wireless = nm_connection_get_setting_wireless (connection);
3747 ASSERT (s_wireless != NULL,
3748 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s setting",
3749 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3750 NM_SETTING_WIRELESS_SETTING_NAME);
3751
3752 /* ===== WIRELESS SECURITY SETTING ===== */
3753
3754 s_wsec = nm_connection_get_setting_wireless_security (connection);
3755 ASSERT (s_wsec != NULL,
3756 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s setting",
3757 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3758 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
3759
3760 /* Key management */
3761 ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
3762 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s / %s key",
3763 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3764 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3765 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
3766
3767 /* WEP key index */
3768 ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
3769 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3770 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3771 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3772 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
3773
3774 /* WEP key type */
3775 key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
3776 ASSERT (key_type == NM_WEP_KEY_TYPE_PASSPHRASE,
3777 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
3778 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3779 key_type);
3780
3781 /* WEP key index 0 */
3782 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
3783 ASSERT (tmp != NULL,
3784 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: missing %s / %s key",
3785 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3786 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3787 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3788 ASSERT (strcmp (tmp, expected_wep_key0) == 0,
3789 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3790 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3791 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3792 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3793
3794 /* WEP key index 1 */
3795 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
3796 ASSERT (tmp == NULL,
3797 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3798 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3799 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3800 NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
3801
3802 /* WEP key index 2 */
3803 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
3804 ASSERT (tmp == NULL,
3805 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3806 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3807 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3808 NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
3809
3810 /* WEP key index 3 */
3811 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
3812 ASSERT (tmp == NULL,
3813 "wifi-wep-passphrase-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3814 TEST_IFCFG_WIFI_WEP_PASSPHRASE,
3815 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3816 NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
3817
3818 g_free (unmanaged);
3819 g_free (keyfile);
3820 g_free (routefile);
3821 g_free (route6file);
3822 g_object_unref (connection);
3823 }
3824
3825 #define TEST_IFCFG_WIFI_WEP_40_ASCII TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-40-ascii"
3826
3827 static void
3828 test_read_wifi_wep_40_ascii (void)
3829 {
3830 NMConnection *connection;
3831 NMSettingConnection *s_con;
3832 NMSettingWireless *s_wireless;
3833 NMSettingWirelessSecurity *s_wsec;
3834 char *unmanaged = NULL;
3835 char *keyfile = NULL;
3836 char *routefile = NULL;
3837 char *route6file = NULL;
3838 gboolean ignore_error = FALSE;
3839 GError *error = NULL;
3840 const char *tmp;
3841 const char *expected_wep_key0 = "Lorem";
3842 NMWepKeyType key_type;
3843
3844 connection = connection_from_file (TEST_IFCFG_WIFI_WEP_40_ASCII,
3845 NULL,
3846 TYPE_WIRELESS,
3847 NULL,
3848 &unmanaged,
3849 &keyfile,
3850 &routefile,
3851 &route6file,
3852 &error,
3853 &ignore_error);
3854 ASSERT (connection != NULL,
3855 "wifi-wep-40-ascii-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_40_ASCII, error->message);
3856
3857 ASSERT (nm_connection_verify (connection, &error),
3858 "wifi-wep-40-ascii-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_40_ASCII, error->message);
3859
3860 /* ===== CONNECTION SETTING ===== */
3861
3862 s_con = nm_connection_get_setting_connection (connection);
3863 ASSERT (s_con != NULL,
3864 "wifi-wep-40-ascii-verify-connection", "failed to verify %s: missing %s setting",
3865 TEST_IFCFG_WIFI_WEP_40_ASCII,
3866 NM_SETTING_CONNECTION_SETTING_NAME);
3867
3868 /* ===== WIRELESS SETTING ===== */
3869
3870 s_wireless = nm_connection_get_setting_wireless (connection);
3871 ASSERT (s_wireless != NULL,
3872 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s setting",
3873 TEST_IFCFG_WIFI_WEP_40_ASCII,
3874 NM_SETTING_WIRELESS_SETTING_NAME);
3875
3876 /* ===== WIRELESS SECURITY SETTING ===== */
3877
3878 s_wsec = nm_connection_get_setting_wireless_security (connection);
3879 ASSERT (s_wsec != NULL,
3880 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s setting",
3881 TEST_IFCFG_WIFI_WEP_40_ASCII,
3882 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
3883
3884 /* Key management */
3885 ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
3886 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
3887 TEST_IFCFG_WIFI_WEP_40_ASCII,
3888 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3889 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
3890
3891 /* WEP key index */
3892 ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
3893 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3894 TEST_IFCFG_WIFI_WEP_40_ASCII,
3895 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3896 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
3897
3898 /* WEP key type */
3899 key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
3900 ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
3901 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
3902 TEST_IFCFG_WIFI_WEP_40_ASCII,
3903 key_type);
3904
3905 /* WEP key index 0 */
3906 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
3907 ASSERT (tmp != NULL,
3908 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
3909 TEST_IFCFG_WIFI_WEP_40_ASCII,
3910 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3911 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3912 ASSERT (strcmp (tmp, expected_wep_key0) == 0,
3913 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
3914 TEST_IFCFG_WIFI_WEP_40_ASCII,
3915 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3916 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
3917
3918 /* WEP key index 1 */
3919 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
3920 ASSERT (tmp == NULL,
3921 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3922 TEST_IFCFG_WIFI_WEP_40_ASCII,
3923 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3924 NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
3925
3926 /* WEP key index 2 */
3927 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
3928 ASSERT (tmp == NULL,
3929 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3930 TEST_IFCFG_WIFI_WEP_40_ASCII,
3931 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3932 NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
3933
3934 /* WEP key index 3 */
3935 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
3936 ASSERT (tmp == NULL,
3937 "wifi-wep-40-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
3938 TEST_IFCFG_WIFI_WEP_40_ASCII,
3939 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
3940 NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
3941
3942 g_free (unmanaged);
3943 g_free (keyfile);
3944 g_free (routefile);
3945 g_free (route6file);
3946 g_object_unref (connection);
3947 }
3948
3949 #define TEST_IFCFG_WIFI_WEP_104_ASCII TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-104-ascii"
3950
3951 static void
3952 test_read_wifi_wep_104_ascii (void)
3953 {
3954 NMConnection *connection;
3955 NMSettingConnection *s_con;
3956 NMSettingWireless *s_wireless;
3957 NMSettingWirelessSecurity *s_wsec;
3958 char *unmanaged = NULL;
3959 char *keyfile = NULL;
3960 char *routefile = NULL;
3961 char *route6file = NULL;
3962 gboolean ignore_error = FALSE;
3963 GError *error = NULL;
3964 const char *tmp;
3965 const char *expected_wep_key0 = "LoremIpsumSit";
3966 NMWepKeyType key_type;
3967
3968 connection = connection_from_file (TEST_IFCFG_WIFI_WEP_104_ASCII,
3969 NULL,
3970 TYPE_WIRELESS,
3971 NULL,
3972 &unmanaged,
3973 &keyfile,
3974 &routefile,
3975 &route6file,
3976 &error,
3977 &ignore_error);
3978 ASSERT (connection != NULL,
3979 "wifi-wep-104-ascii-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_104_ASCII, error->message);
3980
3981 ASSERT (nm_connection_verify (connection, &error),
3982 "wifi-wep-104-ascii-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_104_ASCII, error->message);
3983
3984 /* ===== CONNECTION SETTING ===== */
3985
3986 s_con = nm_connection_get_setting_connection (connection);
3987 ASSERT (s_con != NULL,
3988 "wifi-wep-104-ascii-verify-connection", "failed to verify %s: missing %s setting",
3989 TEST_IFCFG_WIFI_WEP_104_ASCII,
3990 NM_SETTING_CONNECTION_SETTING_NAME);
3991
3992 /* ===== WIRELESS SETTING ===== */
3993
3994 s_wireless = nm_connection_get_setting_wireless (connection);
3995 ASSERT (s_wireless != NULL,
3996 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s setting",
3997 TEST_IFCFG_WIFI_WEP_104_ASCII,
3998 NM_SETTING_WIRELESS_SETTING_NAME);
3999
4000 /* ===== WIRELESS SECURITY SETTING ===== */
4001
4002 s_wsec = nm_connection_get_setting_wireless_security (connection);
4003 ASSERT (s_wsec != NULL,
4004 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s setting",
4005 TEST_IFCFG_WIFI_WEP_104_ASCII,
4006 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4007
4008 /* Key management */
4009 ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
4010 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
4011 TEST_IFCFG_WIFI_WEP_104_ASCII,
4012 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4013 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4014
4015 /* WEP key index */
4016 ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
4017 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4018 TEST_IFCFG_WIFI_WEP_104_ASCII,
4019 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4020 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
4021
4022 /* WEP key type */
4023 key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
4024 ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
4025 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
4026 TEST_IFCFG_WIFI_WEP_104_ASCII,
4027 key_type);
4028
4029 /* WEP key index 0 */
4030 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
4031 ASSERT (tmp != NULL,
4032 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: missing %s / %s key",
4033 TEST_IFCFG_WIFI_WEP_104_ASCII,
4034 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4035 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
4036 ASSERT (strcmp (tmp, expected_wep_key0) == 0,
4037 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4038 TEST_IFCFG_WIFI_WEP_104_ASCII,
4039 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4040 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
4041
4042 /* WEP key index 1 */
4043 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 1);
4044 ASSERT (tmp == NULL,
4045 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
4046 TEST_IFCFG_WIFI_WEP_104_ASCII,
4047 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4048 NM_SETTING_WIRELESS_SECURITY_WEP_KEY1);
4049
4050 /* WEP key index 2 */
4051 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 2);
4052 ASSERT (tmp == NULL,
4053 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
4054 TEST_IFCFG_WIFI_WEP_104_ASCII,
4055 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4056 NM_SETTING_WIRELESS_SECURITY_WEP_KEY2);
4057
4058 /* WEP key index 3 */
4059 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 3);
4060 ASSERT (tmp == NULL,
4061 "wifi-wep-104-ascii-verify-wireless", "failed to verify %s: unexpected %s / %s key",
4062 TEST_IFCFG_WIFI_WEP_104_ASCII,
4063 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4064 NM_SETTING_WIRELESS_SECURITY_WEP_KEY3);
4065
4066 g_free (unmanaged);
4067 g_free (keyfile);
4068 g_free (routefile);
4069 g_free (route6file);
4070 g_object_unref (connection);
4071 }
4072
4073 #define TEST_IFCFG_WIFI_LEAP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-leap"
4074
4075 static void
4076 test_read_wifi_leap (void)
4077 {
4078 NMConnection *connection;
4079 NMSettingConnection *s_con;
4080 NMSettingWireless *s_wireless;
4081 NMSettingWirelessSecurity *s_wsec;
4082 char *unmanaged = NULL;
4083 char *keyfile = NULL;
4084 char *routefile = NULL;
4085 char *route6file = NULL;
4086 gboolean ignore_error = FALSE;
4087 GError *error = NULL;
4088 const char *tmp;
4089 const char *expected_id = "System blahblah (test-wifi-leap)";
4090 const char *expected_identity = "Bill Smith";
4091 const char *expected_password = "foobarblah";
4092
4093 connection = connection_from_file (TEST_IFCFG_WIFI_LEAP,
4094 NULL,
4095 TYPE_WIRELESS,
4096 NULL,
4097 &unmanaged,
4098 &keyfile,
4099 &routefile,
4100 &route6file,
4101 &error,
4102 &ignore_error);
4103 ASSERT (connection != NULL,
4104 "wifi-leap-read", "failed to read %s: %s", TEST_IFCFG_WIFI_LEAP, error->message);
4105
4106 ASSERT (nm_connection_verify (connection, &error),
4107 "wifi-leap-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_LEAP, error->message);
4108
4109 /* ===== CONNECTION SETTING ===== */
4110
4111 s_con = nm_connection_get_setting_connection (connection);
4112 ASSERT (s_con != NULL,
4113 "wifi-leap-verify-connection", "failed to verify %s: missing %s setting",
4114 TEST_IFCFG_WIFI_LEAP,
4115 NM_SETTING_CONNECTION_SETTING_NAME);
4116
4117 /* ID */
4118 tmp = nm_setting_connection_get_id (s_con);
4119 ASSERT (tmp != NULL,
4120 "wifi-leap-verify-connection", "failed to verify %s: missing %s / %s key",
4121 TEST_IFCFG_WIFI_LEAP,
4122 NM_SETTING_CONNECTION_SETTING_NAME,
4123 NM_SETTING_CONNECTION_ID);
4124 ASSERT (strcmp (tmp, expected_id) == 0,
4125 "wifi-leap-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4126 TEST_IFCFG_WIFI_LEAP,
4127 NM_SETTING_CONNECTION_SETTING_NAME,
4128 NM_SETTING_CONNECTION_ID);
4129
4130 /* ===== WIRELESS SETTING ===== */
4131
4132 s_wireless = nm_connection_get_setting_wireless (connection);
4133 ASSERT (s_wireless != NULL,
4134 "wifi-leap-verify-wireless", "failed to verify %s: missing %s setting",
4135 TEST_IFCFG_WIFI_LEAP,
4136 NM_SETTING_WIRELESS_SETTING_NAME);
4137
4138 /* ===== WIRELESS SECURITY SETTING ===== */
4139
4140 s_wsec = nm_connection_get_setting_wireless_security (connection);
4141 ASSERT (s_wsec != NULL,
4142 "wifi-leap-verify-wireless", "failed to verify %s: missing %s setting",
4143 TEST_IFCFG_WIFI_LEAP,
4144 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4145
4146 /* Key management */
4147 ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "ieee8021x") == 0,
4148 "wifi-leap-verify-wireless", "failed to verify %s: missing %s / %s key",
4149 TEST_IFCFG_WIFI_LEAP,
4150 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4151 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4152
4153 /* WEP Authentication mode */
4154 tmp = nm_setting_wireless_security_get_auth_alg (s_wsec);
4155 ASSERT (tmp != NULL,
4156 "wifi-leap-verify-wireless", "failed to verify %s: missing %s / %s key",
4157 TEST_IFCFG_WIFI_LEAP,
4158 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4159 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
4160 ASSERT (strcmp (tmp, "leap") == 0,
4161 "wifi-leap-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4162 TEST_IFCFG_WIFI_LEAP,
4163 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4164 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
4165
4166 /* LEAP Username */
4167 tmp = nm_setting_wireless_security_get_leap_username (s_wsec);
4168 ASSERT (tmp != NULL,
4169 "wifi-leap-verify-wireless", "failed to verify %s: missing %s / %s key",
4170 TEST_IFCFG_WIFI_LEAP,
4171 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4172 NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
4173 ASSERT (strcmp (tmp, expected_identity) == 0,
4174 "wifi-leap-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4175 TEST_IFCFG_WIFI_LEAP,
4176 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4177 NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME);
4178
4179 /* LEAP Password */
4180 tmp = nm_setting_wireless_security_get_leap_password (s_wsec);
4181 ASSERT (tmp != NULL,
4182 "wifi-leap-verify-wireless", "failed to verify %s: missing %s / %s key",
4183 TEST_IFCFG_WIFI_LEAP,
4184 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4185 NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD);
4186 ASSERT (strcmp (tmp, expected_password) == 0,
4187 "wifi-leap-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4188 TEST_IFCFG_WIFI_LEAP,
4189 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4190 NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD);
4191
4192 g_free (unmanaged);
4193 g_free (keyfile);
4194 g_free (routefile);
4195 g_free (route6file);
4196 g_object_unref (connection);
4197 }
4198
4199 #define TEST_IFCFG_WIFI_LEAP_AGENT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-leap-agent"
4200 #define TEST_IFCFG_WIFI_LEAP_ALWAYS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-leap-always-ask"
4201
4202 static void
4203 test_read_wifi_leap_secret_flags (const char *file, NMSettingSecretFlags expected_flags)
4204 {
4205 NMConnection *connection;
4206 NMSettingWireless *s_wifi;
4207 NMSettingWirelessSecurity *s_wsec;
4208 char *unmanaged = NULL;
4209 char *keyfile = NULL;
4210 char *routefile = NULL;
4211 char *route6file = NULL;
4212 gboolean ignore_error = FALSE;
4213 GError *error = NULL;
4214 const char *expected_identity = "Bill Smith";
4215 gboolean success;
4216
4217 connection = connection_from_file (file,
4218 NULL,
4219 TYPE_WIRELESS,
4220 NULL,
4221 &unmanaged,
4222 &keyfile,
4223 &routefile,
4224 &route6file,
4225 &error,
4226 &ignore_error);
4227 g_assert_no_error (error);
4228 g_assert (connection);
4229
4230 success = nm_connection_verify (connection, &error);
4231 g_assert_no_error (error);
4232 g_assert (success);
4233
4234 /* ===== WIRELESS SETTING ===== */
4235 s_wifi = nm_connection_get_setting_wireless (connection);
4236 g_assert (s_wifi);
4237
4238 /* ===== WIRELESS SECURITY SETTING ===== */
4239 s_wsec = nm_connection_get_setting_wireless_security (connection);
4240 g_assert (s_wsec);
4241
4242 g_assert (g_strcmp0 (nm_setting_wireless_security_get_key_mgmt (s_wsec), "ieee8021x") == 0);
4243 g_assert (g_strcmp0 (nm_setting_wireless_security_get_auth_alg (s_wsec), "leap") == 0);
4244 g_assert (g_strcmp0 (nm_setting_wireless_security_get_leap_username (s_wsec), expected_identity) == 0);
4245 /* password blank as it's not system-owned */
4246 g_assert (nm_setting_wireless_security_get_leap_password_flags (s_wsec) == expected_flags);
4247 g_assert (nm_setting_wireless_security_get_leap_password (s_wsec) == NULL);
4248
4249 g_free (unmanaged);
4250 g_free (keyfile);
4251 g_free (routefile);
4252 g_free (route6file);
4253 g_object_unref (connection);
4254 }
4255
4256 #define TEST_IFCFG_WIFI_WPA_PSK TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk"
4257
4258 static void
4259 test_read_wifi_wpa_psk (void)
4260 {
4261 NMConnection *connection;
4262 NMSettingConnection *s_con;
4263 NMSettingWireless *s_wireless;
4264 NMSettingWirelessSecurity *s_wsec;
4265 NMSettingIP4Config *s_ip4;
4266 char *unmanaged = NULL;
4267 char *keyfile = NULL;
4268 char *routefile = NULL;
4269 char *route6file = NULL;
4270 gboolean ignore_error = FALSE;
4271 GError *error = NULL;
4272 const char *tmp;
4273 const GByteArray *array;
4274 char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 };
4275 const char *expected_id = "System blahblah (test-wifi-wpa-psk)";
4276 guint64 expected_timestamp = 0;
4277 const char *expected_ssid = "blahblah";
4278 const char *expected_mode = "infrastructure";
4279 const guint32 expected_channel = 1;
4280 const char *expected_key_mgmt = "wpa-psk";
4281 const char *expected_psk = "I wonder what the king is doing tonight?";
4282 guint32 n, i;
4283 gboolean found_pair_tkip = FALSE;
4284 gboolean found_pair_ccmp = FALSE;
4285 gboolean found_group_tkip = FALSE;
4286 gboolean found_group_ccmp = FALSE;
4287 gboolean found_group_wep40 = FALSE;
4288 gboolean found_group_wep104 = FALSE;
4289 gboolean found_proto_wpa = FALSE;
4290 gboolean found_proto_rsn = FALSE;
4291
4292 connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK,
4293 NULL,
4294 TYPE_WIRELESS,
4295 NULL,
4296 &unmanaged,
4297 &keyfile,
4298 &routefile,
4299 &route6file,
4300 &error,
4301 &ignore_error);
4302 ASSERT (connection != NULL,
4303 "wifi-wpa-psk-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK, error->message);
4304
4305 ASSERT (nm_connection_verify (connection, &error),
4306 "wifi-wpa-psk-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK, error->message);
4307
4308 /* ===== CONNECTION SETTING ===== */
4309
4310 s_con = nm_connection_get_setting_connection (connection);
4311 ASSERT (s_con != NULL,
4312 "wifi-wpa-psk-verify-connection", "failed to verify %s: missing %s setting",
4313 TEST_IFCFG_WIFI_WPA_PSK,
4314 NM_SETTING_CONNECTION_SETTING_NAME);
4315
4316 /* ID */
4317 tmp = nm_setting_connection_get_id (s_con);
4318 ASSERT (tmp != NULL,
4319 "wifi-wpa-psk-verify-connection", "failed to verify %s: missing %s / %s key",
4320 TEST_IFCFG_WIFI_WPA_PSK,
4321 NM_SETTING_CONNECTION_SETTING_NAME,
4322 NM_SETTING_CONNECTION_ID);
4323 ASSERT (strcmp (tmp, expected_id) == 0,
4324 "wifi-wpa-psk-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4325 TEST_IFCFG_WIFI_WPA_PSK,
4326 NM_SETTING_CONNECTION_SETTING_NAME,
4327 NM_SETTING_CONNECTION_ID);
4328
4329 /* UUID can't be tested if the ifcfg does not contain the UUID key, because
4330 * the UUID is generated on the full path of the ifcfg file, which can change
4331 * depending on where the tests are run.
4332 */
4333
4334 /* Timestamp */
4335 ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
4336 "wifi-wpa-psk-verify-connection", "failed to verify %s: unexpected %s /%s key value",
4337 TEST_IFCFG_WIFI_WPA_PSK,
4338 NM_SETTING_CONNECTION_SETTING_NAME,
4339 NM_SETTING_CONNECTION_TIMESTAMP);
4340
4341 /* Autoconnect */
4342 ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
4343 "wifi-wpa-psk-verify-connection", "failed to verify %s: unexpected %s /%s key value",
4344 TEST_IFCFG_WIFI_WPA_PSK,
4345 NM_SETTING_CONNECTION_SETTING_NAME,
4346 NM_SETTING_CONNECTION_AUTOCONNECT);
4347
4348 /* ===== WIRELESS SETTING ===== */
4349
4350 s_wireless = nm_connection_get_setting_wireless (connection);
4351 ASSERT (s_wireless != NULL,
4352 "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s setting",
4353 TEST_IFCFG_WIFI_WPA_PSK,
4354 NM_SETTING_WIRELESS_SETTING_NAME);
4355
4356 /* MAC address */
4357 array = nm_setting_wireless_get_mac_address (s_wireless);
4358 ASSERT (array != NULL,
4359 "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4360 TEST_IFCFG_WIFI_WPA_PSK,
4361 NM_SETTING_WIRELESS_SETTING_NAME,
4362 NM_SETTING_WIRELESS_MAC_ADDRESS);
4363 ASSERT (array->len == ETH_ALEN,
4364 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
4365 TEST_IFCFG_WIFI_WPA_PSK,
4366 NM_SETTING_WIRELESS_SETTING_NAME,
4367 NM_SETTING_WIRELESS_MAC_ADDRESS);
4368 ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
4369 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4370 TEST_IFCFG_WIFI_WPA_PSK,
4371 NM_SETTING_WIRELESS_SETTING_NAME,
4372 NM_SETTING_WIRELESS_MAC_ADDRESS);
4373
4374 /* MTU */
4375 ASSERT (nm_setting_wireless_get_mtu (s_wireless) == 0,
4376 "wifi-wpa-psk-verify-wired", "failed to verify %s: unexpected %s / %s key value",
4377 TEST_IFCFG_WIFI_WPA_PSK,
4378 NM_SETTING_WIRELESS_SETTING_NAME,
4379 NM_SETTING_WIRELESS_MTU);
4380
4381 /* SSID */
4382 array = nm_setting_wireless_get_ssid (s_wireless);
4383 ASSERT (array != NULL,
4384 "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4385 TEST_IFCFG_WIFI_WPA_PSK,
4386 NM_SETTING_WIRELESS_SETTING_NAME,
4387 NM_SETTING_WIRELESS_SSID);
4388 ASSERT (array->len == strlen (expected_ssid),
4389 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
4390 TEST_IFCFG_WIFI_WPA_PSK,
4391 NM_SETTING_WIRELESS_SETTING_NAME,
4392 NM_SETTING_WIRELESS_SSID);
4393 ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
4394 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4395 TEST_IFCFG_WIFI_WPA_PSK,
4396 NM_SETTING_WIRELESS_SETTING_NAME,
4397 NM_SETTING_WIRELESS_SSID);
4398
4399 /* BSSID */
4400 ASSERT (nm_setting_wireless_get_bssid (s_wireless) == NULL,
4401 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4402 TEST_IFCFG_WIFI_WPA_PSK,
4403 NM_SETTING_WIRELESS_SETTING_NAME,
4404 NM_SETTING_WIRELESS_BSSID);
4405
4406 /* Mode */
4407 tmp = nm_setting_wireless_get_mode (s_wireless);
4408 ASSERT (tmp != NULL,
4409 "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4410 TEST_IFCFG_WIFI_WPA_PSK,
4411 NM_SETTING_WIRELESS_SETTING_NAME,
4412 NM_SETTING_WIRELESS_MODE);
4413 ASSERT (strcmp (tmp, expected_mode) == 0,
4414 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4415 TEST_IFCFG_WIFI_WPA_PSK,
4416 NM_SETTING_WIRELESS_SETTING_NAME,
4417 NM_SETTING_WIRELESS_MODE);
4418
4419 /* Channel */
4420 ASSERT (nm_setting_wireless_get_channel (s_wireless) == expected_channel,
4421 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4422 TEST_IFCFG_WIFI_WPA_PSK,
4423 NM_SETTING_WIRELESS_SETTING_NAME,
4424 NM_SETTING_WIRELESS_CHANNEL);
4425
4426 /* ===== WIRELESS SECURITY SETTING ===== */
4427
4428 s_wsec = nm_connection_get_setting_wireless_security (connection);
4429 ASSERT (s_wsec != NULL,
4430 "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s setting",
4431 TEST_IFCFG_WIFI_WPA_PSK,
4432 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4433
4434 /* Key management */
4435 tmp = nm_setting_wireless_security_get_key_mgmt (s_wsec);
4436 ASSERT (tmp != NULL,
4437 "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4438 TEST_IFCFG_WIFI_WPA_PSK,
4439 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4440 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4441 ASSERT (strcmp (tmp, expected_key_mgmt) == 0,
4442 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4443 TEST_IFCFG_WIFI_WPA_PSK,
4444 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4445 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4446
4447 /* PSK */
4448 tmp = nm_setting_wireless_security_get_psk (s_wsec);
4449 ASSERT (tmp != NULL,
4450 "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key",
4451 TEST_IFCFG_WIFI_WPA_PSK,
4452 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4453 NM_SETTING_WIRELESS_SECURITY_PSK);
4454 ASSERT (strcmp (tmp, expected_psk) == 0,
4455 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4456 TEST_IFCFG_WIFI_WPA_PSK,
4457 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4458 NM_SETTING_WIRELESS_SECURITY_PSK);
4459
4460 /* WEP Authentication mode */
4461 tmp = nm_setting_wireless_security_get_auth_alg (s_wsec);
4462 ASSERT (tmp == NULL,
4463 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key",
4464 TEST_IFCFG_WIFI_WPA_PSK,
4465 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4466 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG);
4467
4468 /* Pairwise ciphers */
4469 n = nm_setting_wireless_security_get_num_pairwise (s_wsec);
4470 ASSERT (n == 2,
4471 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4472 TEST_IFCFG_WIFI_WPA_PSK,
4473 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4474 NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
4475 for (i = 0; i < n; i++) {
4476 tmp = nm_setting_wireless_security_get_pairwise (s_wsec, i);
4477 ASSERT (tmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing pairwise cipher",
4478 TEST_IFCFG_WIFI_WPA_PSK);
4479 if (strcmp (tmp, "tkip") == 0)
4480 found_pair_tkip = TRUE;
4481 else if (strcmp (tmp, "ccmp") == 0)
4482 found_pair_ccmp = TRUE;
4483 }
4484 ASSERT (found_pair_tkip, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing pairwise TKIP cipher",
4485 TEST_IFCFG_WIFI_WPA_PSK);
4486 ASSERT (found_pair_ccmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing pairwise CCMP cipher",
4487 TEST_IFCFG_WIFI_WPA_PSK);
4488
4489 /* Group ciphers */
4490 n = nm_setting_wireless_security_get_num_groups (s_wsec);
4491 ASSERT (n == 4,
4492 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4493 TEST_IFCFG_WIFI_WPA_PSK,
4494 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4495 NM_SETTING_WIRELESS_SECURITY_GROUP);
4496 for (i = 0; i < n; i++) {
4497 tmp = nm_setting_wireless_security_get_group (s_wsec, i);
4498 ASSERT (tmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group cipher",
4499 TEST_IFCFG_WIFI_WPA_PSK);
4500 if (strcmp (tmp, "tkip") == 0)
4501 found_group_tkip = TRUE;
4502 else if (strcmp (tmp, "ccmp") == 0)
4503 found_group_ccmp = TRUE;
4504 else if (strcmp (tmp, "wep40") == 0)
4505 found_group_wep40 = TRUE;
4506 else if (strcmp (tmp, "wep104") == 0)
4507 found_group_wep104 = TRUE;
4508 }
4509 ASSERT (found_group_tkip, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group TKIP cipher",
4510 TEST_IFCFG_WIFI_WPA_PSK);
4511 ASSERT (found_group_ccmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group CCMP cipher",
4512 TEST_IFCFG_WIFI_WPA_PSK);
4513 ASSERT (found_group_wep40, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group WEP-40 cipher",
4514 TEST_IFCFG_WIFI_WPA_PSK);
4515 ASSERT (found_group_wep104, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing group WEP-104 cipher",
4516 TEST_IFCFG_WIFI_WPA_PSK);
4517
4518 /* Protocols */
4519 n = nm_setting_wireless_security_get_num_protos (s_wsec);
4520 ASSERT (n == 2,
4521 "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4522 TEST_IFCFG_WIFI_WPA_PSK,
4523 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4524 NM_SETTING_WIRELESS_SECURITY_PROTO);
4525 for (i = 0; i < n; i++) {
4526 tmp = nm_setting_wireless_security_get_proto (s_wsec, i);
4527 ASSERT (tmp, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing protocol",
4528 TEST_IFCFG_WIFI_WPA_PSK);
4529 if (strcmp (tmp, "wpa") == 0)
4530 found_proto_wpa = TRUE;
4531 else if (strcmp (tmp, "rsn") == 0)
4532 found_proto_rsn = TRUE;
4533 }
4534 ASSERT (found_proto_wpa, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing protoocl WPA",
4535 TEST_IFCFG_WIFI_WPA_PSK);
4536 ASSERT (found_proto_rsn, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing protocol RSN",
4537 TEST_IFCFG_WIFI_WPA_PSK);
4538
4539 /* ===== IPv4 SETTING ===== */
4540
4541 s_ip4 = nm_connection_get_setting_ip4_config (connection);
4542 ASSERT (s_ip4 != NULL,
4543 "wifi-wpa-psk-verify-ip4", "failed to verify %s: missing %s setting",
4544 TEST_IFCFG_WIFI_WPA_PSK,
4545 NM_SETTING_IP4_CONFIG_SETTING_NAME);
4546
4547 /* Method */
4548 tmp = nm_setting_ip4_config_get_method (s_ip4);
4549 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
4550 "wifi-wpa-psk-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
4551 TEST_IFCFG_WIFI_WPA_PSK,
4552 NM_SETTING_IP4_CONFIG_SETTING_NAME,
4553 NM_SETTING_IP4_CONFIG_METHOD);
4554
4555 g_free (unmanaged);
4556 g_free (keyfile);
4557 g_free (routefile);
4558 g_free (route6file);
4559 g_object_unref (connection);
4560 }
4561
4562 #define TEST_IFCFG_WIFI_WPA_PSK_2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-2"
4563
4564 static void
4565 test_read_wifi_wpa_psk_2 (void)
4566 {
4567 NMConnection *connection;
4568 NMSettingConnection *s_con;
4569 NMSettingWireless *s_wireless;
4570 NMSettingWirelessSecurity *s_wsec;
4571 char *unmanaged = NULL;
4572 char *keyfile = NULL;
4573 char *routefile = NULL;
4574 char *route6file = NULL;
4575 gboolean ignore_error = FALSE;
4576 GError *error = NULL;
4577 const char *tmp;
4578 const char *expected_id = "System ipsum (test-wifi-wpa-psk-2)";
4579 const char *expected_psk = "They're really saying I love you. >>`<< \\";
4580
4581 connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_2,
4582 NULL,
4583 TYPE_WIRELESS,
4584 NULL,
4585 &unmanaged,
4586 &keyfile,
4587 &routefile,
4588 &route6file,
4589 &error,
4590 &ignore_error);
4591 ASSERT (connection != NULL,
4592 "wifi-wpa-psk-2-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK_2, error->message);
4593
4594 ASSERT (nm_connection_verify (connection, &error),
4595 "wifi-wpa-psk-2-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK_2, error->message);
4596
4597 /* ===== CONNECTION SETTING ===== */
4598
4599 s_con = nm_connection_get_setting_connection (connection);
4600 ASSERT (s_con != NULL,
4601 "wifi-wpa-psk-2-verify-connection", "failed to verify %s: missing %s setting",
4602 TEST_IFCFG_WIFI_WPA_PSK_2,
4603 NM_SETTING_CONNECTION_SETTING_NAME);
4604
4605 /* ID */
4606 tmp = nm_setting_connection_get_id (s_con);
4607 ASSERT (tmp != NULL,
4608 "wifi-wpa-psk-2-verify-connection", "failed to verify %s: missing %s / %s key",
4609 TEST_IFCFG_WIFI_WPA_PSK_2,
4610 NM_SETTING_CONNECTION_SETTING_NAME,
4611 NM_SETTING_CONNECTION_ID);
4612 ASSERT (strcmp (tmp, expected_id) == 0,
4613 "wifi-wpa-psk-2-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4614 TEST_IFCFG_WIFI_WPA_PSK_2,
4615 NM_SETTING_CONNECTION_SETTING_NAME,
4616 NM_SETTING_CONNECTION_ID);
4617
4618 /* ===== WIRELESS SETTING ===== */
4619
4620 s_wireless = nm_connection_get_setting_wireless (connection);
4621 ASSERT (s_wireless != NULL,
4622 "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: missing %s setting",
4623 TEST_IFCFG_WIFI_WPA_PSK_2,
4624 NM_SETTING_WIRELESS_SETTING_NAME);
4625
4626 /* ===== WIRELESS SECURITY SETTING ===== */
4627
4628 s_wsec = nm_connection_get_setting_wireless_security (connection);
4629 ASSERT (s_wsec != NULL,
4630 "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: missing %s setting",
4631 TEST_IFCFG_WIFI_WPA_PSK_2,
4632 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4633
4634 /* PSK */
4635 tmp = nm_setting_wireless_security_get_psk (s_wsec);
4636 ASSERT (tmp != NULL,
4637 "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: missing %s / %s key",
4638 TEST_IFCFG_WIFI_WPA_PSK_2,
4639 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4640 NM_SETTING_WIRELESS_SECURITY_PSK);
4641 ASSERT (strcmp (tmp, expected_psk) == 0,
4642 "wifi-wpa-psk-2-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4643 TEST_IFCFG_WIFI_WPA_PSK_2,
4644 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4645 NM_SETTING_WIRELESS_SECURITY_PSK);
4646
4647 g_free (unmanaged);
4648 g_free (keyfile);
4649 g_free (routefile);
4650 g_free (route6file);
4651 g_object_unref (connection);
4652 }
4653
4654 #define TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-unquoted"
4655
4656 static void
4657 test_read_wifi_wpa_psk_unquoted (void)
4658 {
4659 NMConnection *connection;
4660 NMSettingConnection *s_con;
4661 NMSettingWireless *s_wireless;
4662 NMSettingWirelessSecurity *s_wsec;
4663 char *unmanaged = NULL;
4664 char *keyfile = NULL;
4665 char *routefile = NULL;
4666 char *route6file = NULL;
4667 gboolean ignore_error = FALSE;
4668 GError *error = NULL;
4669 const char *tmp;
4670 const char *expected_id = "System blahblah (test-wifi-wpa-psk-unquoted)";
4671 const char *expected_psk = "54336845e2f3f321c4c7";
4672
4673 connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4674 NULL,
4675 TYPE_WIRELESS,
4676 NULL,
4677 &unmanaged,
4678 &keyfile,
4679 &routefile,
4680 &route6file,
4681 &error,
4682 &ignore_error);
4683 ASSERT (connection != NULL,
4684 "wifi-wpa-psk-unquoted-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED, error->message);
4685
4686 ASSERT (nm_connection_verify (connection, &error),
4687 "wifi-wpa-psk-unquoted-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED, error->message);
4688
4689 /* ===== CONNECTION SETTING ===== */
4690
4691 s_con = nm_connection_get_setting_connection (connection);
4692 ASSERT (s_con != NULL,
4693 "wifi-wpa-psk-unquoted-verify-connection", "failed to verify %s: missing %s setting",
4694 TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4695 NM_SETTING_CONNECTION_SETTING_NAME);
4696
4697 /* ID */
4698 tmp = nm_setting_connection_get_id (s_con);
4699 ASSERT (tmp != NULL,
4700 "wifi-wpa-psk-unquoted-verify-connection", "failed to verify %s: missing %s / %s key",
4701 TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4702 NM_SETTING_CONNECTION_SETTING_NAME,
4703 NM_SETTING_CONNECTION_ID);
4704 ASSERT (strcmp (tmp, expected_id) == 0,
4705 "wifi-wpa-psk-unquoted-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4706 TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4707 NM_SETTING_CONNECTION_SETTING_NAME,
4708 NM_SETTING_CONNECTION_ID);
4709
4710 /* ===== WIRELESS SETTING ===== */
4711
4712 s_wireless = nm_connection_get_setting_wireless (connection);
4713 ASSERT (s_wireless != NULL,
4714 "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: missing %s setting",
4715 TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4716 NM_SETTING_WIRELESS_SETTING_NAME);
4717
4718 /* ===== WIRELESS SECURITY SETTING ===== */
4719
4720 s_wsec = nm_connection_get_setting_wireless_security (connection);
4721 ASSERT (s_wsec != NULL,
4722 "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: missing %s setting",
4723 TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4724 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4725
4726 /* PSK */
4727 tmp = nm_setting_wireless_security_get_psk (s_wsec);
4728 ASSERT (tmp != NULL,
4729 "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: missing %s / %s key",
4730 TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4731 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4732 NM_SETTING_WIRELESS_SECURITY_PSK);
4733 ASSERT (strcmp (tmp, expected_psk) == 0,
4734 "wifi-wpa-psk-unquoted-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4735 TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED,
4736 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4737 NM_SETTING_WIRELESS_SECURITY_PSK);
4738
4739 g_free (unmanaged);
4740 g_free (keyfile);
4741 g_free (routefile);
4742 g_free (route6file);
4743 g_object_unref (connection);
4744 }
4745
4746 #define TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-unquoted2"
4747
4748 static void
4749 test_read_wifi_wpa_psk_unquoted2 (void)
4750 {
4751 NMConnection *connection;
4752 char *unmanaged = NULL;
4753 char *keyfile = NULL;
4754 char *routefile = NULL;
4755 char *route6file = NULL;
4756 gboolean ignore_error = FALSE;
4757 GError *error = NULL;
4758
4759 /* Ensure a quoted 64-character WPA passphrase will fail since passphrases
4760 * must be between 8 and 63 ASCII characters inclusive per the WPA spec.
4761 */
4762
4763 connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED2,
4764 NULL,
4765 TYPE_WIRELESS,
4766 NULL,
4767 &unmanaged,
4768 &keyfile,
4769 &routefile,
4770 &route6file,
4771 &error,
4772 &ignore_error);
4773 ASSERT (connection == NULL,
4774 "wifi-wpa-psk-unquoted-read", "unexpected success reading %s", TEST_IFCFG_WIFI_WPA_PSK_UNQUOTED2);
4775 g_clear_error (&error);
4776
4777 g_free (unmanaged);
4778 g_free (keyfile);
4779 g_free (routefile);
4780 g_free (route6file);
4781 }
4782
4783 #define TEST_IFCFG_WIFI_WPA_PSK_ADHOC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-adhoc"
4784
4785 static void
4786 test_read_wifi_wpa_psk_adhoc (void)
4787 {
4788 NMConnection *connection;
4789 NMSettingConnection *s_con;
4790 NMSettingWireless *s_wireless;
4791 NMSettingWirelessSecurity *s_wsec;
4792 NMSettingIP4Config *s_ip4;
4793 char *unmanaged = NULL;
4794 char *keyfile = NULL;
4795 char *routefile = NULL;
4796 char *route6file = NULL;
4797 gboolean ignore_error = FALSE;
4798 GError *error = NULL;
4799 const char *tmp;
4800 const char *expected_id = "System blahblah (test-wifi-wpa-psk-adhoc)";
4801 const char *expected_mode = "adhoc";
4802 const char *expected_key_mgmt = "wpa-none";
4803 const char *expected_psk = "I wonder what the king is doing tonight?";
4804 const char *expected_group = "ccmp";
4805 const char *expected_proto = "wpa";
4806
4807 connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4808 NULL,
4809 TYPE_WIRELESS,
4810 NULL,
4811 &unmanaged,
4812 &keyfile,
4813 &routefile,
4814 &route6file,
4815 &error,
4816 &ignore_error);
4817 ASSERT (connection != NULL,
4818 "wifi-wpa-psk-adhoc-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK_ADHOC, error->message);
4819
4820 ASSERT (nm_connection_verify (connection, &error),
4821 "wifi-wpa-psk-adhoc-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK_ADHOC, error->message);
4822
4823 /* ===== CONNECTION SETTING ===== */
4824
4825 s_con = nm_connection_get_setting_connection (connection);
4826 ASSERT (s_con != NULL,
4827 "wifi-wpa-psk-adhoc-verify-connection", "failed to verify %s: missing %s setting",
4828 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4829 NM_SETTING_CONNECTION_SETTING_NAME);
4830
4831 /* ID */
4832 tmp = nm_setting_connection_get_id (s_con);
4833 ASSERT (tmp != NULL,
4834 "wifi-wpa-psk-adhoc-verify-connection", "failed to verify %s: missing %s / %s key",
4835 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4836 NM_SETTING_CONNECTION_SETTING_NAME,
4837 NM_SETTING_CONNECTION_ID);
4838 ASSERT (strcmp (tmp, expected_id) == 0,
4839 "wifi-wpa-psk-adhoc-verify-connection", "failed to verify %s: unexpected %s / %s key value",
4840 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4841 NM_SETTING_CONNECTION_SETTING_NAME,
4842 NM_SETTING_CONNECTION_ID);
4843
4844 /* ===== WIRELESS SETTING ===== */
4845
4846 s_wireless = nm_connection_get_setting_wireless (connection);
4847 ASSERT (s_wireless != NULL,
4848 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
4849 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4850 NM_SETTING_WIRELESS_SETTING_NAME);
4851
4852 /* Mode */
4853 tmp = nm_setting_wireless_get_mode (s_wireless);
4854 ASSERT (tmp != NULL,
4855 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
4856 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4857 NM_SETTING_WIRELESS_SETTING_NAME,
4858 NM_SETTING_WIRELESS_MODE);
4859 ASSERT (strcmp (tmp, expected_mode) == 0,
4860 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4861 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4862 NM_SETTING_WIRELESS_SETTING_NAME,
4863 NM_SETTING_WIRELESS_MODE);
4864
4865 /* ===== WIRELESS SECURITY SETTING ===== */
4866
4867 s_wsec = nm_connection_get_setting_wireless_security (connection);
4868 ASSERT (s_wsec != NULL,
4869 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s setting",
4870 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4871 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
4872
4873 /* Key management */
4874 tmp = nm_setting_wireless_security_get_key_mgmt (s_wsec);
4875 ASSERT (tmp != NULL,
4876 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
4877 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4878 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4879 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4880 ASSERT (strcmp (tmp, expected_key_mgmt) == 0,
4881 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4882 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4883 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4884 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
4885
4886 /* PSK */
4887 tmp = nm_setting_wireless_security_get_psk (s_wsec);
4888 ASSERT (tmp != NULL,
4889 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing %s / %s key",
4890 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4891 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4892 NM_SETTING_WIRELESS_SECURITY_PSK);
4893 ASSERT (strcmp (tmp, expected_psk) == 0,
4894 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4895 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4896 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4897 NM_SETTING_WIRELESS_SECURITY_PSK);
4898
4899 /* Pairwise cipher: unused in adhoc mode */
4900 ASSERT (nm_setting_wireless_security_get_num_pairwise (s_wsec) == 0,
4901 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4902 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4903 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4904 NM_SETTING_WIRELESS_SECURITY_PAIRWISE);
4905
4906 /* Group cipher */
4907 ASSERT (nm_setting_wireless_security_get_num_groups (s_wsec) == 1,
4908 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4909 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4910 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4911 NM_SETTING_WIRELESS_SECURITY_GROUP);
4912
4913 tmp = nm_setting_wireless_security_get_group (s_wsec, 0);
4914 ASSERT (tmp != NULL,
4915 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing group cipher",
4916 TEST_IFCFG_WIFI_WPA_PSK_ADHOC);
4917 ASSERT (strcmp (tmp, expected_group) == 0,
4918 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4919 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4920 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4921 NM_SETTING_WIRELESS_SECURITY_GROUP);
4922
4923 /* Protocols */
4924 ASSERT (nm_setting_wireless_security_get_num_protos (s_wsec) == 1,
4925 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4926 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4927 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4928 NM_SETTING_WIRELESS_SECURITY_PROTO);
4929 tmp = nm_setting_wireless_security_get_proto (s_wsec, 0);
4930 ASSERT (tmp != NULL,
4931 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: missing proto",
4932 TEST_IFCFG_WIFI_WPA_PSK_ADHOC);
4933 ASSERT (strcmp (tmp, expected_proto) == 0,
4934 "wifi-wpa-psk-adhoc-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
4935 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4936 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
4937 NM_SETTING_WIRELESS_SECURITY_PROTO);
4938
4939 /* ===== IPv4 SETTING ===== */
4940
4941 s_ip4 = nm_connection_get_setting_ip4_config (connection);
4942 ASSERT (s_ip4 != NULL,
4943 "wifi-wpa-psk-adhoc-verify-ip4", "failed to verify %s: missing %s setting",
4944 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4945 NM_SETTING_IP4_CONFIG_SETTING_NAME);
4946
4947 /* Method */
4948 tmp = nm_setting_ip4_config_get_method (s_ip4);
4949 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
4950 "wifi-wpa-psk-adhoc-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
4951 TEST_IFCFG_WIFI_WPA_PSK_ADHOC,
4952 NM_SETTING_IP4_CONFIG_SETTING_NAME,
4953 NM_SETTING_IP4_CONFIG_METHOD);
4954
4955 g_free (unmanaged);
4956 g_free (keyfile);
4957 g_free (routefile);
4958 g_free (route6file);
4959 g_object_unref (connection);
4960 }
4961
4962 #define TEST_IFCFG_WIFI_WPA_PSK_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-psk-hex"
4963
4964 static void
4965 test_read_wifi_wpa_psk_hex (void)
4966 {
4967 NMConnection *connection;
4968 NMSettingConnection *s_con;
4969 NMSettingWireless *s_wireless;
4970 NMSettingWirelessSecurity *s_wsec;
4971 NMSettingIP4Config *s_ip4;
4972 char *unmanaged = NULL;
4973 char *keyfile = NULL;
4974 char *routefile = NULL;
4975 char *route6file = NULL;
4976 gboolean ignore_error = FALSE;
4977 GError *error = NULL;
4978 const char *tmp;
4979 const GByteArray *array;
4980 const char *expected_id = "System blahblah (test-wifi-wpa-psk-hex)";
4981 const char *expected_ssid = "blahblah";
4982 const char *expected_key_mgmt = "wpa-psk";
4983 const char *expected_psk = "1da190379817bc360dda52e85c388c439a21ea5c7bf819c64e9da051807deae6";
4984
4985 connection = connection_from_file (TEST_IFCFG_WIFI_WPA_PSK_HEX,
4986 NULL,
4987 TYPE_WIRELESS,
4988 NULL,
4989 &unmanaged,
4990 &keyfile,
4991 &routefile,
4992 &route6file,
4993 &error,
4994 &ignore_error);
4995 ASSERT (connection != NULL,
4996 "wifi-wpa-psk-hex-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_PSK_HEX, error->message);
4997
4998 ASSERT (nm_connection_verify (connection, &error),
4999 "wifi-wpa-psk-hex-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_PSK_HEX, error->message);
5000
5001 /* ===== CONNECTION SETTING ===== */
5002
5003 s_con = nm_connection_get_setting_connection (connection);
5004 ASSERT (s_con != NULL,
5005 "wifi-wpa-psk-hex-verify-connection", "failed to verify %s: missing %s setting",
5006 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5007 NM_SETTING_CONNECTION_SETTING_NAME);
5008
5009 /* ID */
5010 tmp = nm_setting_connection_get_id (s_con);
5011 ASSERT (tmp != NULL,
5012 "wifi-wpa-psk-hex-verify-connection", "failed to verify %s: missing %s / %s key",
5013 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5014 NM_SETTING_CONNECTION_SETTING_NAME,
5015 NM_SETTING_CONNECTION_ID);
5016 ASSERT (strcmp (tmp, expected_id) == 0,
5017 "wifi-wpa-psk-hex-verify-connection", "failed to verify %s: unexpected %s / %s key value",
5018 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5019 NM_SETTING_CONNECTION_SETTING_NAME,
5020 NM_SETTING_CONNECTION_ID);
5021
5022 /* ===== WIRELESS SETTING ===== */
5023
5024 s_wireless = nm_connection_get_setting_wireless (connection);
5025 ASSERT (s_wireless != NULL,
5026 "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s setting",
5027 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5028 NM_SETTING_WIRELESS_SETTING_NAME);
5029
5030 /* SSID */
5031 array = nm_setting_wireless_get_ssid (s_wireless);
5032 ASSERT (array != NULL,
5033 "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
5034 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5035 NM_SETTING_WIRELESS_SETTING_NAME,
5036 NM_SETTING_WIRELESS_SSID);
5037 ASSERT (array->len == strlen (expected_ssid),
5038 "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value length",
5039 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5040 NM_SETTING_WIRELESS_SETTING_NAME,
5041 NM_SETTING_WIRELESS_SSID);
5042 ASSERT (memcmp (array->data, expected_ssid, strlen (expected_ssid)) == 0,
5043 "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
5044 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5045 NM_SETTING_WIRELESS_SETTING_NAME,
5046 NM_SETTING_WIRELESS_SSID);
5047
5048 /* ===== WIRELESS SECURITY SETTING ===== */
5049
5050 s_wsec = nm_connection_get_setting_wireless_security (connection);
5051 ASSERT (s_wsec != NULL,
5052 "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s setting",
5053 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5054 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
5055
5056 /* Key management */
5057 tmp = nm_setting_wireless_security_get_key_mgmt (s_wsec);
5058 ASSERT (tmp != NULL,
5059 "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
5060 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5061 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5062 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5063 ASSERT (strcmp (tmp, expected_key_mgmt) == 0,
5064 "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
5065 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5066 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5067 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5068
5069 /* PSK */
5070 tmp = nm_setting_wireless_security_get_psk (s_wsec);
5071 ASSERT (tmp != NULL,
5072 "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: missing %s / %s key",
5073 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5074 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5075 NM_SETTING_WIRELESS_SECURITY_PSK);
5076 ASSERT (strcmp (tmp, expected_psk) == 0,
5077 "wifi-wpa-psk-hex-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
5078 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5079 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5080 NM_SETTING_WIRELESS_SECURITY_PSK);
5081
5082 /* ===== IPv4 SETTING ===== */
5083
5084 s_ip4 = nm_connection_get_setting_ip4_config (connection);
5085 ASSERT (s_ip4 != NULL,
5086 "wifi-wpa-psk-hex-verify-ip4", "failed to verify %s: missing %s setting",
5087 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5088 NM_SETTING_IP4_CONFIG_SETTING_NAME);
5089
5090 /* Method */
5091 tmp = nm_setting_ip4_config_get_method (s_ip4);
5092 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
5093 "wifi-wpa-psk-hex-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5094 TEST_IFCFG_WIFI_WPA_PSK_HEX,
5095 NM_SETTING_IP4_CONFIG_SETTING_NAME,
5096 NM_SETTING_IP4_CONFIG_METHOD);
5097
5098 g_free (unmanaged);
5099 g_free (keyfile);
5100 g_free (routefile);
5101 g_free (route6file);
5102 g_object_unref (connection);
5103 }
5104
5105 #define TEST_IFCFG_WIFI_WPA_EAP_TLS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-eap-tls"
5106 #define TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
5107 #define TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT TEST_IFCFG_DIR"/network-scripts/test1_key_and_cert.pem"
5108 #define TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY TEST_IFCFG_DIR"/network-scripts/test1_key_and_cert.pem"
5109
5110 static void
5111 test_read_wifi_wpa_eap_tls (void)
5112 {
5113 NMConnection *connection;
5114 NMSettingWireless *s_wireless;
5115 NMSettingIP4Config *s_ip4;
5116 NMSetting8021x *s_8021x;
5117 char *unmanaged = NULL;
5118 char *keyfile = NULL;
5119 char *routefile = NULL;
5120 char *route6file = NULL;
5121 gboolean ignore_error = FALSE;
5122 GError *error = NULL;
5123 const char *tmp, *password;
5124 const char *expected_identity = "Bill Smith";
5125 const char *expected_privkey_password = "test1";
5126
5127 connection = connection_from_file (TEST_IFCFG_WIFI_WPA_EAP_TLS,
5128 NULL,
5129 TYPE_ETHERNET,
5130 NULL,
5131 &unmanaged,
5132 &keyfile,
5133 &routefile,
5134 &route6file,
5135 &error,
5136 &ignore_error);
5137 ASSERT (connection != NULL,
5138 "wifi-wpa-eap-tls-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TLS, error->message);
5139
5140 ASSERT (nm_connection_verify (connection, &error),
5141 "wifi-wpa-eap-tls-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TLS, error->message);
5142
5143 ASSERT (unmanaged == NULL,
5144 "wifi-wpa-eap-tls-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIFI_WPA_EAP_TLS);
5145
5146 /* ===== WIRELESS SETTING ===== */
5147
5148 s_wireless = nm_connection_get_setting_wireless (connection);
5149 ASSERT (s_wireless != NULL,
5150 "wifi-wpa-eap-tls-verify-wireless", "failed to verify %s: missing %s setting",
5151 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5152 NM_SETTING_WIRELESS_SETTING_NAME);
5153
5154 /* ===== IPv4 SETTING ===== */
5155
5156 s_ip4 = nm_connection_get_setting_ip4_config (connection);
5157 ASSERT (s_ip4 != NULL,
5158 "wifi-wpa-eap-tls-verify-ip4", "failed to verify %s: missing %s setting",
5159 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5160 NM_SETTING_IP4_CONFIG_SETTING_NAME);
5161
5162 /* Method */
5163 tmp = nm_setting_ip4_config_get_method (s_ip4);
5164 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
5165 "wifi-wpa-eap-tls-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5166 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5167 NM_SETTING_IP4_CONFIG_SETTING_NAME,
5168 NM_SETTING_IP4_CONFIG_METHOD);
5169
5170 /* ===== 802.1x SETTING ===== */
5171 s_8021x = nm_connection_get_setting_802_1x (connection);
5172 ASSERT (s_8021x != NULL,
5173 "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: missing %s setting",
5174 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5175 NM_SETTING_802_1X_SETTING_NAME);
5176
5177 /* EAP methods */
5178 ASSERT (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1,
5179 "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5180 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5181 NM_SETTING_802_1X_SETTING_NAME,
5182 NM_SETTING_802_1X_EAP);
5183 tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0);
5184 ASSERT (tmp != NULL,
5185 "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5186 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5187 NM_SETTING_802_1X_SETTING_NAME,
5188 NM_SETTING_802_1X_EAP);
5189 ASSERT (strcmp (tmp, "tls") == 0,
5190 "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5191 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5192 NM_SETTING_802_1X_SETTING_NAME,
5193 NM_SETTING_802_1X_EAP);
5194
5195 /* Identity */
5196 tmp = nm_setting_802_1x_get_identity (s_8021x);
5197 ASSERT (tmp != NULL,
5198 "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: missing %s / %s key",
5199 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5200 NM_SETTING_802_1X_SETTING_NAME,
5201 NM_SETTING_802_1X_IDENTITY);
5202 ASSERT (strcmp (tmp, expected_identity) == 0,
5203 "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5204 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5205 NM_SETTING_802_1X_SETTING_NAME,
5206 NM_SETTING_802_1X_IDENTITY);
5207
5208 /* CA Cert */
5209 verify_cert_or_key (s_8021x,
5210 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
5211 NULL,
5212 NM_SETTING_802_1X_CA_CERT);
5213
5214 /* Client Cert */
5215 verify_cert_or_key (s_8021x,
5216 TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
5217 NULL,
5218 NM_SETTING_802_1X_CLIENT_CERT);
5219
5220 /* Private Key Password */
5221 password = nm_setting_802_1x_get_private_key_password (s_8021x);
5222 ASSERT (password != NULL,
5223 "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: missing %s / %s key",
5224 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5225 NM_SETTING_802_1X_SETTING_NAME,
5226 NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
5227
5228 ASSERT (strcmp (password, expected_privkey_password) == 0,
5229 "wifi-wpa-eap-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key",
5230 TEST_IFCFG_WIFI_WPA_EAP_TLS,
5231 NM_SETTING_802_1X_SETTING_NAME,
5232 NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD);
5233
5234 /* Private key */
5235 verify_cert_or_key (s_8021x,
5236 TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
5237 expected_privkey_password,
5238 NM_SETTING_802_1X_PRIVATE_KEY);
5239
5240 g_free (unmanaged);
5241 g_free (keyfile);
5242 g_free (routefile);
5243 g_free (route6file);
5244 g_object_unref (connection);
5245 }
5246
5247 #define TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wpa-eap-ttls-tls"
5248 #define TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
5249 /* Also use TLS defines from the previous test */
5250
5251 static void
5252 test_read_wifi_wpa_eap_ttls_tls (void)
5253 {
5254 NMConnection *connection;
5255 NMSettingWireless *s_wireless;
5256 NMSettingIP4Config *s_ip4;
5257 NMSetting8021x *s_8021x;
5258 char *unmanaged = NULL;
5259 char *keyfile = NULL;
5260 char *routefile = NULL;
5261 char *route6file = NULL;
5262 gboolean ignore_error = FALSE;
5263 GError *error = NULL;
5264 const char *tmp, *password;
5265 const char *expected_identity = "Chuck Shumer";
5266 const char *expected_privkey_password = "test1";
5267
5268 connection = connection_from_file (TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5269 NULL,
5270 TYPE_WIRELESS,
5271 NULL,
5272 &unmanaged,
5273 &keyfile,
5274 &routefile,
5275 &route6file,
5276 &error,
5277 &ignore_error);
5278 ASSERT (connection != NULL,
5279 "wifi-wpa-eap-ttls-tls-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS, error->message);
5280
5281 ASSERT (nm_connection_verify (connection, &error),
5282 "wifi-wpa-eap-ttls-tls-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS, error->message);
5283
5284 ASSERT (unmanaged == NULL,
5285 "wifi-wpa-eap-ttls-tls-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS);
5286
5287 /* ===== WIRELESS SETTING ===== */
5288
5289 s_wireless = nm_connection_get_setting_wireless (connection);
5290 ASSERT (s_wireless != NULL,
5291 "wifi-wpa-eap-ttls-tls-verify-wireless", "failed to verify %s: missing %s setting",
5292 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5293 NM_SETTING_WIRELESS_SETTING_NAME);
5294
5295 /* ===== IPv4 SETTING ===== */
5296
5297 s_ip4 = nm_connection_get_setting_ip4_config (connection);
5298 ASSERT (s_ip4 != NULL,
5299 "wifi-wpa-eap-ttls-tls-verify-ip4", "failed to verify %s: missing %s setting",
5300 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5301 NM_SETTING_IP4_CONFIG_SETTING_NAME);
5302
5303 /* Method */
5304 tmp = nm_setting_ip4_config_get_method (s_ip4);
5305 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
5306 "wifi-wpa-eap-ttls-tls-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5307 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5308 NM_SETTING_IP4_CONFIG_SETTING_NAME,
5309 NM_SETTING_IP4_CONFIG_METHOD);
5310
5311 /* ===== 802.1x SETTING ===== */
5312 s_8021x = nm_connection_get_setting_802_1x (connection);
5313 ASSERT (s_8021x != NULL,
5314 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s setting",
5315 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5316 NM_SETTING_802_1X_SETTING_NAME);
5317
5318 /* EAP methods */
5319 ASSERT (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1,
5320 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5321 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5322 NM_SETTING_802_1X_SETTING_NAME,
5323 NM_SETTING_802_1X_EAP);
5324 tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0);
5325 ASSERT (tmp != NULL,
5326 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5327 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5328 NM_SETTING_802_1X_SETTING_NAME,
5329 NM_SETTING_802_1X_EAP);
5330 ASSERT (strcmp (tmp, "ttls") == 0,
5331 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5332 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5333 NM_SETTING_802_1X_SETTING_NAME,
5334 NM_SETTING_802_1X_EAP);
5335
5336 /* CA Cert */
5337 verify_cert_or_key (s_8021x,
5338 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS_CA_CERT,
5339 NULL,
5340 NM_SETTING_802_1X_CA_CERT);
5341
5342 /* Inner auth method */
5343 tmp = nm_setting_802_1x_get_phase2_autheap (s_8021x);
5344 ASSERT (tmp != NULL,
5345 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5346 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5347 NM_SETTING_802_1X_SETTING_NAME,
5348 NM_SETTING_802_1X_PHASE2_AUTHEAP);
5349 ASSERT (strcmp (tmp, "tls") == 0,
5350 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5351 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5352 NM_SETTING_802_1X_SETTING_NAME,
5353 NM_SETTING_802_1X_PHASE2_AUTHEAP);
5354
5355 /* Inner CA Cert */
5356 verify_cert_or_key (s_8021x,
5357 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
5358 NULL,
5359 NM_SETTING_802_1X_PHASE2_CA_CERT);
5360
5361 /* Inner Client Cert */
5362 verify_cert_or_key (s_8021x,
5363 TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
5364 NULL,
5365 NM_SETTING_802_1X_PHASE2_CLIENT_CERT);
5366
5367 /* Inner Private Key Password */
5368 password = nm_setting_802_1x_get_phase2_private_key_password (s_8021x);
5369 ASSERT (password != NULL,
5370 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s / %s key",
5371 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5372 NM_SETTING_802_1X_SETTING_NAME,
5373 NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
5374
5375 ASSERT (strcmp (password, expected_privkey_password) == 0,
5376 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key",
5377 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5378 NM_SETTING_802_1X_SETTING_NAME,
5379 NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD);
5380
5381 /* Inner private key */
5382 verify_cert_or_key (s_8021x,
5383 TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
5384 expected_privkey_password,
5385 NM_SETTING_802_1X_PHASE2_PRIVATE_KEY);
5386
5387 /* Identity */
5388 tmp = nm_setting_802_1x_get_identity (s_8021x);
5389 ASSERT (tmp != NULL,
5390 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: missing %s / %s key",
5391 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5392 NM_SETTING_802_1X_SETTING_NAME,
5393 NM_SETTING_802_1X_IDENTITY);
5394 ASSERT (strcmp (tmp, expected_identity) == 0,
5395 "wifi-wpa-eap-ttls-tls-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5396 TEST_IFCFG_WIFI_WPA_EAP_TTLS_TLS,
5397 NM_SETTING_802_1X_SETTING_NAME,
5398 NM_SETTING_802_1X_IDENTITY);
5399
5400 g_free (unmanaged);
5401 g_free (keyfile);
5402 g_free (routefile);
5403 g_free (route6file);
5404 g_object_unref (connection);
5405 }
5406
5407 #define TEST_IFCFG_WIFI_DYNAMIC_WEP_LEAP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-dynamic-wep-leap"
5408
5409 static void
5410 test_read_wifi_dynamic_wep_leap (void)
5411 {
5412 NMConnection *connection;
5413 NMSettingWireless *s_wifi;
5414 NMSettingWirelessSecurity *s_wsec;
5415 NMSetting8021x *s_8021x;
5416 char *unmanaged = NULL;
5417 char *keyfile = NULL;
5418 char *routefile = NULL;
5419 char *route6file = NULL;
5420 gboolean ignore_error = FALSE, success;
5421 GError *error = NULL;
5422
5423 connection = connection_from_file (TEST_IFCFG_WIFI_DYNAMIC_WEP_LEAP,
5424 NULL,
5425 TYPE_WIRELESS,
5426 NULL,
5427 &unmanaged,
5428 &keyfile,
5429 &routefile,
5430 &route6file,
5431 &error,
5432 &ignore_error);
5433 g_assert_no_error (error);
5434 g_assert (connection);
5435
5436 success = nm_connection_verify (connection, &error);
5437 g_assert_no_error (error);
5438 g_assert (success);
5439
5440 /* ===== WIRELESS SETTING ===== */
5441
5442 s_wifi = nm_connection_get_setting_wireless (connection);
5443 g_assert (s_wifi);
5444
5445 /* ===== WiFi SECURITY SETTING ===== */
5446 s_wsec = nm_connection_get_setting_wireless_security (connection);
5447 g_assert (s_wsec);
5448
5449 /* Key management */
5450 g_assert_cmpstr (nm_setting_wireless_security_get_key_mgmt (s_wsec), ==, "ieee8021x");
5451
5452 /* Auth alg should be NULL (open) for dynamic WEP with LEAP as the EAP method;
5453 * only "old-school" LEAP uses 'leap' for the auth alg.
5454 */
5455 g_assert_cmpstr (nm_setting_wireless_security_get_auth_alg (s_wsec), ==, NULL);
5456
5457 /* Expect no old-school LEAP username/password, that'll be in the 802.1x setting */
5458 g_assert_cmpstr (nm_setting_wireless_security_get_leap_username (s_wsec), ==, NULL);
5459 g_assert_cmpstr (nm_setting_wireless_security_get_leap_password (s_wsec), ==, NULL);
5460
5461 /* ===== 802.1x SETTING ===== */
5462 s_8021x = nm_connection_get_setting_802_1x (connection);
5463 g_assert (s_8021x);
5464
5465 /* EAP method should be "leap" */
5466 g_assert_cmpint (nm_setting_802_1x_get_num_eap_methods (s_8021x), ==, 1);
5467 g_assert_cmpstr (nm_setting_802_1x_get_eap_method (s_8021x, 0), ==, "leap");
5468
5469 /* username & password */
5470 g_assert_cmpstr (nm_setting_802_1x_get_identity (s_8021x), ==, "bill smith");
5471 g_assert_cmpstr (nm_setting_802_1x_get_password (s_8021x), ==, "foobar baz");
5472
5473 g_free (unmanaged);
5474 g_free (keyfile);
5475 g_free (routefile);
5476 g_free (route6file);
5477 g_object_unref (connection);
5478 }
5479
5480 #define TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-eap-ttls-chap"
5481 #define TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
5482
5483 static void
5484 test_read_wifi_wep_eap_ttls_chap (void)
5485 {
5486 NMConnection *connection;
5487 NMSettingWireless *s_wireless;
5488 NMSettingWirelessSecurity *s_wsec;
5489 NMSettingIP4Config *s_ip4;
5490 NMSetting8021x *s_8021x;
5491 char *unmanaged = NULL;
5492 char *keyfile = NULL;
5493 char *routefile = NULL;
5494 char *route6file = NULL;
5495 gboolean ignore_error = FALSE;
5496 GError *error = NULL;
5497 const char *tmp;
5498 const char *expected_password = "foobar baz";
5499 const char *expected_identity = "David Smith";
5500 const char *expected_key_mgmt = "ieee8021x";
5501
5502 connection = connection_from_file (TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5503 NULL,
5504 TYPE_WIRELESS,
5505 NULL,
5506 &unmanaged,
5507 &keyfile,
5508 &routefile,
5509 &route6file,
5510 &error,
5511 &ignore_error);
5512 ASSERT (connection != NULL,
5513 "wifi-wep-eap-ttls-chap-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP, error->message);
5514
5515 ASSERT (nm_connection_verify (connection, &error),
5516 "wifi-wep-eap-ttls-chap-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP, error->message);
5517
5518 ASSERT (unmanaged == NULL,
5519 "wifi-wep-eap-ttls-chap-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP);
5520
5521 /* ===== WIRELESS SETTING ===== */
5522
5523 s_wireless = nm_connection_get_setting_wireless (connection);
5524 ASSERT (s_wireless != NULL,
5525 "wifi-wep-eap-ttls-chap-verify-wireless", "failed to verify %s: missing %s setting",
5526 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5527 NM_SETTING_WIRELESS_SETTING_NAME);
5528
5529 /* ===== IPv4 SETTING ===== */
5530
5531 s_ip4 = nm_connection_get_setting_ip4_config (connection);
5532 ASSERT (s_ip4 != NULL,
5533 "wifi-wep-eap-ttls-chap-verify-ip4", "failed to verify %s: missing %s setting",
5534 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5535 NM_SETTING_IP4_CONFIG_SETTING_NAME);
5536
5537 /* Method */
5538 tmp = nm_setting_ip4_config_get_method (s_ip4);
5539 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
5540 "wifi-wep-eap-ttls-chap-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5541 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5542 NM_SETTING_IP4_CONFIG_SETTING_NAME,
5543 NM_SETTING_IP4_CONFIG_METHOD);
5544
5545 /* ===== 802.1x SETTING ===== */
5546 s_wsec = nm_connection_get_setting_wireless_security (connection);
5547 ASSERT (s_wsec != NULL,
5548 "wifi-wep-eap-ttls-chap-verify-wireless-security", "failed to verify %s: missing %s setting",
5549 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5550 NM_SETTING_802_1X_SETTING_NAME);
5551
5552 /* Key management */
5553 tmp = nm_setting_wireless_security_get_key_mgmt (s_wsec);
5554 ASSERT (tmp != NULL,
5555 "wifi-wep-eap-ttls-chap-verify-wireless-security", "failed to verify %s: missing %s / %s key",
5556 TEST_IFCFG_WIFI_WPA_PSK,
5557 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5558 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5559 ASSERT (strcmp (tmp, expected_key_mgmt) == 0,
5560 "wifi-wep-eap-ttls-chap-verify-wireless-security", "failed to verify %s: unexpected %s / %s key value",
5561 TEST_IFCFG_WIFI_WPA_PSK,
5562 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5563 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5564
5565 /* ===== 802.1x SETTING ===== */
5566 s_8021x = nm_connection_get_setting_802_1x (connection);
5567 ASSERT (s_8021x != NULL,
5568 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s setting",
5569 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5570 NM_SETTING_802_1X_SETTING_NAME);
5571
5572 /* EAP methods */
5573 ASSERT (nm_setting_802_1x_get_num_eap_methods (s_8021x) == 1,
5574 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5575 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5576 NM_SETTING_802_1X_SETTING_NAME,
5577 NM_SETTING_802_1X_EAP);
5578 tmp = nm_setting_802_1x_get_eap_method (s_8021x, 0);
5579 ASSERT (tmp != NULL,
5580 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5581 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5582 NM_SETTING_802_1X_SETTING_NAME,
5583 NM_SETTING_802_1X_EAP);
5584 ASSERT (strcmp (tmp, "ttls") == 0,
5585 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5586 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5587 NM_SETTING_802_1X_SETTING_NAME,
5588 NM_SETTING_802_1X_EAP);
5589
5590 /* CA Cert */
5591 verify_cert_or_key (s_8021x,
5592 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP_CA_CERT,
5593 NULL,
5594 NM_SETTING_802_1X_CA_CERT);
5595
5596 /* Inner auth method */
5597 tmp = nm_setting_802_1x_get_phase2_auth (s_8021x);
5598 ASSERT (tmp != NULL,
5599 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s / %s eap method",
5600 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5601 NM_SETTING_802_1X_SETTING_NAME,
5602 NM_SETTING_802_1X_PHASE2_AUTH);
5603 ASSERT (strcmp (tmp, "chap") == 0,
5604 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5605 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5606 NM_SETTING_802_1X_SETTING_NAME,
5607 NM_SETTING_802_1X_PHASE2_AUTH);
5608
5609 /* Password */
5610 tmp = nm_setting_802_1x_get_identity (s_8021x);
5611 ASSERT (tmp != NULL,
5612 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s / %s key",
5613 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5614 NM_SETTING_802_1X_SETTING_NAME,
5615 NM_SETTING_802_1X_IDENTITY);
5616 ASSERT (strcmp (tmp, expected_identity) == 0,
5617 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5618 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5619 NM_SETTING_802_1X_SETTING_NAME,
5620 NM_SETTING_802_1X_IDENTITY);
5621
5622 /* Password */
5623 tmp = nm_setting_802_1x_get_password (s_8021x);
5624 ASSERT (tmp != NULL,
5625 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: missing %s / %s key",
5626 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5627 NM_SETTING_802_1X_SETTING_NAME,
5628 NM_SETTING_802_1X_PASSWORD);
5629 ASSERT (strcmp (tmp, expected_password) == 0,
5630 "wifi-wep-eap-ttls-chap-verify-8021x", "failed to verify %s: unexpected %s / %s key value",
5631 TEST_IFCFG_WIFI_WEP_EAP_TTLS_CHAP,
5632 NM_SETTING_802_1X_SETTING_NAME,
5633 NM_SETTING_802_1X_PASSWORD);
5634
5635 g_free (unmanaged);
5636 g_free (keyfile);
5637 g_free (routefile);
5638 g_free (route6file);
5639 g_object_unref (connection);
5640 }
5641
5642 #define TEST_IFCFG_WIRED_QETH_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-qeth-static"
5643
5644 static void
5645 test_read_wired_qeth_static (void)
5646 {
5647 NMConnection *connection;
5648 NMSettingConnection *s_con;
5649 NMSettingWired *s_wired;
5650 NMSettingIP4Config *s_ip4;
5651 char *unmanaged = NULL;
5652 char *keyfile = NULL;
5653 char *routefile = NULL;
5654 char *route6file = NULL;
5655 gboolean ignore_error = FALSE;
5656 GError *error = NULL;
5657 const char *tmp;
5658 const char *expected_id = "System test-wired-qeth-static";
5659 const GByteArray *array;
5660 const char *expected_channel0 = "0.0.0600";
5661 const char *expected_channel1 = "0.0.0601";
5662 const char *expected_channel2 = "0.0.0602";
5663 const GPtrArray *subchannels;
5664
5665 connection = connection_from_file (TEST_IFCFG_WIRED_QETH_STATIC,
5666 NULL,
5667 TYPE_ETHERNET,
5668 NULL,
5669 &unmanaged,
5670 &keyfile,
5671 &routefile,
5672 &route6file,
5673 &error,
5674 &ignore_error);
5675 ASSERT (connection != NULL,
5676 "wired-qeth-static-read", "failed to read %s: %s", TEST_IFCFG_WIRED_QETH_STATIC, error->message);
5677
5678 ASSERT (nm_connection_verify (connection, &error),
5679 "wired-qeth-static-verify", "failed to verify %s: %s", TEST_IFCFG_WIRED_QETH_STATIC, error->message);
5680
5681 ASSERT (unmanaged == NULL,
5682 "wired-qeth-static-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_WIRED_QETH_STATIC);
5683
5684 /* ===== CONNECTION SETTING ===== */
5685
5686 s_con = nm_connection_get_setting_connection (connection);
5687 ASSERT (s_con != NULL,
5688 "wired-qeth-static-verify-connection", "failed to verify %s: missing %s setting",
5689 TEST_IFCFG_WIRED_QETH_STATIC,
5690 NM_SETTING_CONNECTION_SETTING_NAME);
5691
5692 /* ID */
5693 tmp = nm_setting_connection_get_id (s_con);
5694 ASSERT (tmp != NULL,
5695 "wired-qeth-static-verify-connection", "failed to verify %s: missing %s / %s key",
5696 TEST_IFCFG_WIRED_QETH_STATIC,
5697 NM_SETTING_CONNECTION_SETTING_NAME,
5698 NM_SETTING_CONNECTION_ID);
5699 ASSERT (strcmp (tmp, expected_id) == 0,
5700 "wired-qeth-static-verify-connection", "failed to verify %s: unexpected %s / %s key value",
5701 TEST_IFCFG_WIRED_QETH_STATIC,
5702 NM_SETTING_CONNECTION_SETTING_NAME,
5703 NM_SETTING_CONNECTION_ID);
5704
5705 /* ===== WIRED SETTING ===== */
5706
5707 s_wired = nm_connection_get_setting_wired (connection);
5708 ASSERT (s_wired != NULL,
5709 "wired-qeth-static-verify-wired", "failed to verify %s: missing %s setting",
5710 TEST_IFCFG_WIRED_QETH_STATIC,
5711 NM_SETTING_WIRED_SETTING_NAME);
5712
5713 /* MAC address */
5714 array = nm_setting_wired_get_mac_address (s_wired);
5715 ASSERT (array == NULL,
5716 "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s / %s key",
5717 TEST_IFCFG_WIRED_QETH_STATIC,
5718 NM_SETTING_WIRED_SETTING_NAME,
5719 NM_SETTING_WIRED_MAC_ADDRESS);
5720
5721 /* Subchannels */
5722 subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
5723 ASSERT (subchannels != NULL,
5724 "wired-qeth-static-verify-wired", "failed to verify %s: missing %s / %s key",
5725 TEST_IFCFG_WIRED_QETH_STATIC,
5726 NM_SETTING_WIRED_SETTING_NAME,
5727 NM_SETTING_WIRED_S390_SUBCHANNELS);
5728 ASSERT (subchannels->len == 3,
5729 "wired-qeth-static-verify-wired", "failed to verify %s: invalid %s / %s key (not 3 elements)",
5730 TEST_IFCFG_WIRED_QETH_STATIC,
5731 NM_SETTING_WIRED_SETTING_NAME,
5732 NM_SETTING_WIRED_S390_SUBCHANNELS);
5733
5734 tmp = (const char *) g_ptr_array_index (subchannels, 0);
5735 ASSERT (strcmp (tmp, expected_channel0) == 0,
5736 "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #0",
5737 TEST_IFCFG_WIRED_QETH_STATIC);
5738
5739 tmp = (const char *) g_ptr_array_index (subchannels, 1);
5740 ASSERT (strcmp (tmp, expected_channel1) == 0,
5741 "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #1",
5742 TEST_IFCFG_WIRED_QETH_STATIC);
5743
5744 tmp = (const char *) g_ptr_array_index (subchannels, 2);
5745 ASSERT (strcmp (tmp, expected_channel2) == 0,
5746 "wired-qeth-static-verify-wired", "failed to verify %s: unexpected subchannel #2",
5747 TEST_IFCFG_WIRED_QETH_STATIC);
5748
5749 /* Nettype */
5750 tmp = nm_setting_wired_get_s390_nettype (s_wired);
5751 ASSERT (tmp != NULL,
5752 "wired-qeth-static-verify-wired", "failed to verify %s: missing %s / %s key",
5753 TEST_IFCFG_WIRED_QETH_STATIC,
5754 NM_SETTING_WIRED_SETTING_NAME,
5755 NM_SETTING_WIRED_S390_NETTYPE);
5756 ASSERT (strcmp (tmp, "qeth") == 0,
5757 "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
5758 TEST_IFCFG_WIRED_QETH_STATIC,
5759 NM_SETTING_WIRED_SETTING_NAME,
5760 NM_SETTING_WIRED_S390_NETTYPE);
5761
5762 /* port name */
5763 tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "portname");
5764 ASSERT (tmp != NULL,
5765 "wired-qeth-static-verify-wired", "failed to verify %s: missing %s s390 option 'portname'",
5766 TEST_IFCFG_WIRED_QETH_STATIC,
5767 NM_SETTING_WIRED_SETTING_NAME);
5768 ASSERT (strcmp (tmp, "OSAPORT") == 0,
5769 "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s s390 option 'portname' value",
5770 TEST_IFCFG_WIRED_QETH_STATIC,
5771 NM_SETTING_WIRED_SETTING_NAME);
5772
5773 /* port number */
5774 tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "portno");
5775 ASSERT (tmp != NULL,
5776 "wired-qeth-static-verify-wired", "failed to verify %s: missing %s s390 option 'portno'",
5777 TEST_IFCFG_WIRED_QETH_STATIC,
5778 NM_SETTING_WIRED_SETTING_NAME);
5779 ASSERT (strcmp (tmp, "0") == 0,
5780 "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s s390 option 'portno' value",
5781 TEST_IFCFG_WIRED_QETH_STATIC,
5782 NM_SETTING_WIRED_SETTING_NAME);
5783
5784 /* layer */
5785 tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "layer2");
5786 ASSERT (tmp != NULL,
5787 "wired-qeth-static-verify-wired", "failed to verify %s: missing %s s390 option 'layer2'",
5788 TEST_IFCFG_WIRED_QETH_STATIC,
5789 NM_SETTING_WIRED_SETTING_NAME);
5790 ASSERT (strcmp (tmp, "1") == 0,
5791 "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s s390 option 'layer2' value",
5792 TEST_IFCFG_WIRED_QETH_STATIC,
5793 NM_SETTING_WIRED_SETTING_NAME);
5794
5795 /* ===== IPv4 SETTING ===== */
5796
5797 s_ip4 = nm_connection_get_setting_ip4_config (connection);
5798 ASSERT (s_ip4 != NULL,
5799 "wired-qeth-static-verify-ip4", "failed to verify %s: missing %s setting",
5800 TEST_IFCFG_WIRED_QETH_STATIC,
5801 NM_SETTING_IP4_CONFIG_SETTING_NAME);
5802
5803 /* Method */
5804 tmp = nm_setting_ip4_config_get_method (s_ip4);
5805 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
5806 "wired-qeth-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
5807 TEST_IFCFG_WIRED_QETH_STATIC,
5808 NM_SETTING_IP4_CONFIG_SETTING_NAME,
5809 NM_SETTING_IP4_CONFIG_METHOD);
5810
5811 g_free (unmanaged);
5812 g_free (keyfile);
5813 g_free (routefile);
5814 g_free (route6file);
5815 g_object_unref (connection);
5816 }
5817
5818 #define TEST_IFCFG_WIRED_CTC_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ctc-static"
5819
5820 static void
5821 test_read_wired_ctc_static (void)
5822 {
5823 NMConnection *connection;
5824 NMSettingConnection *s_con;
5825 NMSettingWired *s_wired;
5826 char *unmanaged = NULL;
5827 char *keyfile = NULL;
5828 char *routefile = NULL;
5829 char *route6file = NULL;
5830 gboolean ignore_error = FALSE;
5831 GError *error = NULL;
5832 const char *tmp;
5833 const char *expected_id = "System test-wired-ctc-static";
5834 const char *expected_channel0 = "0.0.1b00";
5835 const char *expected_channel1 = "0.0.1b01";
5836 const GPtrArray *subchannels;
5837 gboolean success;
5838
5839 connection = connection_from_file (TEST_IFCFG_WIRED_CTC_STATIC,
5840 NULL,
5841 TYPE_ETHERNET,
5842 NULL,
5843 &unmanaged,
5844 &keyfile,
5845 &routefile,
5846 &route6file,
5847 &error,
5848 &ignore_error);
5849 g_assert_no_error (error);
5850 g_assert (connection);
5851
5852 success = nm_connection_verify (connection, &error);
5853 g_assert_no_error (error);
5854 g_assert (success);
5855 g_assert (unmanaged == NULL);
5856
5857 /* ===== CONNECTION SETTING ===== */
5858 s_con = nm_connection_get_setting_connection (connection);
5859 g_assert (s_con != NULL);
5860 g_assert_cmpstr (nm_setting_connection_get_id (s_con), ==, expected_id);
5861
5862 /* ===== WIRED SETTING ===== */
5863 s_wired = nm_connection_get_setting_wired (connection);
5864 g_assert (s_wired != NULL);
5865
5866 g_assert (nm_setting_wired_get_mac_address (s_wired) == NULL);
5867
5868 /* Subchannels */
5869 subchannels = nm_setting_wired_get_s390_subchannels (s_wired);
5870 g_assert (subchannels != NULL);
5871 g_assert_cmpint (subchannels->len, ==, 2);
5872
5873 g_assert_cmpstr (g_ptr_array_index (subchannels, 0), ==, expected_channel0);
5874 g_assert_cmpstr (g_ptr_array_index (subchannels, 1), ==, expected_channel1);
5875
5876 /* Nettype */
5877 g_assert_cmpstr (nm_setting_wired_get_s390_nettype (s_wired), ==, "ctc");
5878
5879 /* port name */
5880 tmp = nm_setting_wired_get_s390_option_by_key (s_wired, "ctcprot");
5881 g_assert (tmp != NULL);
5882 g_assert_cmpstr (tmp, ==, "0");
5883
5884 g_free (unmanaged);
5885 g_free (keyfile);
5886 g_free (routefile);
5887 g_free (route6file);
5888 g_object_unref (connection);
5889 }
5890
5891 #define TEST_IFCFG_WIFI_WEP_NO_KEYS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-no-keys"
5892
5893 static void
5894 test_read_wifi_wep_no_keys (void)
5895 {
5896 NMConnection *connection;
5897 NMSettingConnection *s_con;
5898 NMSettingWireless *s_wireless;
5899 NMSettingWirelessSecurity *s_wsec;
5900 char *unmanaged = NULL;
5901 char *keyfile = NULL;
5902 char *routefile = NULL;
5903 char *route6file = NULL;
5904 gboolean ignore_error = FALSE;
5905 GError *error = NULL;
5906 const char *tmp;
5907 const char *expected_id = "System foobar (test-wifi-wep-no-keys)";
5908 NMWepKeyType key_type;
5909
5910 connection = connection_from_file (TEST_IFCFG_WIFI_WEP_NO_KEYS,
5911 NULL,
5912 TYPE_WIRELESS,
5913 NULL,
5914 &unmanaged,
5915 &keyfile,
5916 &routefile,
5917 &route6file,
5918 &error,
5919 &ignore_error);
5920 ASSERT (connection != NULL,
5921 "wifi-wep-no-keys-read", "failed to read %s: %s", TEST_IFCFG_WIFI_WEP_NO_KEYS, error->message);
5922
5923 ASSERT (nm_connection_verify (connection, &error),
5924 "wifi-wep-no-keys-verify", "failed to verify %s: %s", TEST_IFCFG_WIFI_WEP_NO_KEYS, error->message);
5925
5926 /* ===== CONNECTION SETTING ===== */
5927
5928 s_con = nm_connection_get_setting_connection (connection);
5929 ASSERT (s_con != NULL,
5930 "wifi-wep-no-keys-verify-connection", "failed to verify %s: missing %s setting",
5931 TEST_IFCFG_WIFI_WEP_NO_KEYS,
5932 NM_SETTING_CONNECTION_SETTING_NAME);
5933
5934 /* ID */
5935 tmp = nm_setting_connection_get_id (s_con);
5936 ASSERT (tmp != NULL,
5937 "wifi-wep-no-keys-verify-connection", "failed to verify %s: missing %s / %s key",
5938 TEST_IFCFG_WIFI_WEP_NO_KEYS,
5939 NM_SETTING_CONNECTION_SETTING_NAME,
5940 NM_SETTING_CONNECTION_ID);
5941 ASSERT (strcmp (tmp, expected_id) == 0,
5942 "wifi-wep-no-keys-verify-connection", "failed to verify %s: unexpected %s / %s key value",
5943 TEST_IFCFG_WIFI_WEP_NO_KEYS,
5944 NM_SETTING_CONNECTION_SETTING_NAME,
5945 NM_SETTING_CONNECTION_ID);
5946
5947 /* UUID can't be tested if the ifcfg does not contain the UUID key, because
5948 * the UUID is generated on the full path of the ifcfg file, which can change
5949 * depending on where the tests are run.
5950 */
5951
5952 /* ===== WIRELESS SETTING ===== */
5953
5954 s_wireless = nm_connection_get_setting_wireless (connection);
5955 ASSERT (s_wireless != NULL,
5956 "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s setting",
5957 TEST_IFCFG_WIFI_WEP_NO_KEYS,
5958 NM_SETTING_WIRELESS_SETTING_NAME);
5959
5960 /* ===== WIRELESS SECURITY SETTING ===== */
5961
5962 s_wsec = nm_connection_get_setting_wireless_security (connection);
5963 ASSERT (s_wsec != NULL,
5964 "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s setting",
5965 TEST_IFCFG_WIFI_WEP_NO_KEYS,
5966 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
5967
5968 /* Key management */
5969 ASSERT (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0,
5970 "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s / %s key",
5971 TEST_IFCFG_WIFI_WEP_NO_KEYS,
5972 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5973 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT);
5974
5975 /* WEP key index */
5976 ASSERT (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0,
5977 "wifi-wep-no-keys-verify-wireless", "failed to verify %s: unexpected %s / %s key value",
5978 TEST_IFCFG_WIFI_WEP_NO_KEYS,
5979 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5980 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX);
5981
5982 /* WEP key type */
5983 key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
5984 ASSERT (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY,
5985 "wifi-wep-no-keys-verify-wireless", "failed to verify %s: unexpected WEP key type %d",
5986 TEST_IFCFG_WIFI_WEP_NO_KEYS,
5987 key_type);
5988
5989 /* WEP key index 0; we don't expect it to be filled */
5990 tmp = nm_setting_wireless_security_get_wep_key (s_wsec, 0);
5991 ASSERT (tmp == NULL,
5992 "wifi-wep-no-keys-verify-wireless", "failed to verify %s: missing %s / %s key",
5993 TEST_IFCFG_WIFI_WEP_NO_KEYS,
5994 NM_SETTING_WIRELESS_SECURITY_SETTING_NAME,
5995 NM_SETTING_WIRELESS_SECURITY_WEP_KEY0);
5996
5997 g_free (unmanaged);
5998 g_free (keyfile);
5999 g_free (routefile);
6000 g_free (route6file);
6001 g_object_unref (connection);
6002 }
6003
6004 #define TEST_IFCFG_PERMISSIONS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-permissions"
6005
6006 static void
6007 test_read_permissions (void)
6008 {
6009 NMConnection *connection;
6010 NMSettingConnection *s_con;
6011 char *unmanaged = NULL;
6012 char *keyfile = NULL;
6013 char *routefile = NULL;
6014 char *route6file = NULL;
6015 gboolean ignore_error = FALSE, success;
6016 GError *error = NULL;
6017 guint32 num;
6018 const char *tmp;
6019
6020 connection = connection_from_file (TEST_IFCFG_PERMISSIONS,
6021 NULL,
6022 TYPE_ETHERNET,
6023 NULL,
6024 &unmanaged,
6025 &keyfile,
6026 &routefile,
6027 &route6file,
6028 &error,
6029 &ignore_error);
6030 ASSERT (connection != NULL,
6031 "permissions-read", "failed to read %s: %s", TEST_IFCFG_PERMISSIONS, error->message);
6032
6033 ASSERT (nm_connection_verify (connection, &error),
6034 "permissions-verify", "failed to verify %s: %s", TEST_IFCFG_PERMISSIONS, error->message);
6035
6036 /* ===== CONNECTION SETTING ===== */
6037
6038 s_con = nm_connection_get_setting_connection (connection);
6039 ASSERT (s_con != NULL,
6040 "permissions-verify-connection", "failed to verify %s: missing %s setting",
6041 TEST_IFCFG_PERMISSIONS,
6042 NM_SETTING_CONNECTION_SETTING_NAME);
6043
6044 num = nm_setting_connection_get_num_permissions (s_con);
6045 ASSERT (num == 3,
6046 "permissions-verify-permissions", "unexpected number of permissions (%d, expected 3)",
6047 num);
6048
6049 /* verify each permission */
6050 tmp = NULL;
6051 success = nm_setting_connection_get_permission (s_con, 0, NULL, &tmp, NULL);
6052 ASSERT (success == TRUE,
6053 "permissions-verify-permissions", "unexpected failure getting permission #1");
6054 ASSERT (strcmp (tmp, "dcbw") == 0,
6055 "permissions-verify-permissions", "unexpected permission #1");
6056
6057 tmp = NULL;
6058 success = nm_setting_connection_get_permission (s_con, 1, NULL, &tmp, NULL);
6059 ASSERT (success == TRUE,
6060 "permissions-verify-permissions", "unexpected failure getting permission #2");
6061 ASSERT (strcmp (tmp, "ssmith") == 0,
6062 "permissions-verify-permissions", "unexpected permission #2");
6063
6064 tmp = NULL;
6065 success = nm_setting_connection_get_permission (s_con, 2, NULL, &tmp, NULL);
6066 ASSERT (success == TRUE,
6067 "permissions-verify-permissions", "unexpected failure getting permission #3");
6068 ASSERT (strcmp (tmp, "johnny5") == 0,
6069 "permissions-verify-permissions", "unexpected permission #3");
6070
6071 g_free (unmanaged);
6072 g_free (keyfile);
6073 g_free (routefile);
6074 g_free (route6file);
6075 g_object_unref (connection);
6076 }
6077
6078 #define TEST_IFCFG_WIFI_WEP_AGENT_KEYS TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-wep-agent-keys"
6079
6080 static void
6081 test_read_wifi_wep_agent_keys (void)
6082 {
6083 NMConnection *connection;
6084 NMSettingWireless *s_wifi;
6085 NMSettingWirelessSecurity *s_wsec;
6086 char *unmanaged = NULL;
6087 char *keyfile = NULL;
6088 char *routefile = NULL;
6089 char *route6file = NULL;
6090 gboolean ignore_error = FALSE;
6091 GError *error = NULL;
6092 NMWepKeyType key_type;
6093 gboolean success;
6094 NMSettingSecretFlags flags;
6095
6096 connection = connection_from_file (TEST_IFCFG_WIFI_WEP_AGENT_KEYS,
6097 NULL,
6098 TYPE_WIRELESS,
6099 NULL,
6100 &unmanaged,
6101 &keyfile,
6102 &routefile,
6103 &route6file,
6104 &error,
6105 &ignore_error);
6106 g_assert (connection != NULL);
6107
6108 success = nm_connection_verify (connection, &error);
6109 g_assert_no_error (error);
6110 g_assert (success);
6111
6112 /* Ensure the connection is still marked for wifi security even though
6113 * we don't have any WEP keys because they are agent owned.
6114 */
6115
6116 /* ===== WIRELESS SETTING ===== */
6117 s_wifi = nm_connection_get_setting_wireless (connection);
6118 g_assert (s_wifi);
6119
6120 /* ===== WIRELESS SECURITY SETTING ===== */
6121 s_wsec = nm_connection_get_setting_wireless_security (connection);
6122 g_assert (s_wsec);
6123
6124 g_assert (strcmp (nm_setting_wireless_security_get_key_mgmt (s_wsec), "none") == 0);
6125 g_assert (nm_setting_wireless_security_get_wep_tx_keyidx (s_wsec) == 0);
6126
6127 key_type = nm_setting_wireless_security_get_wep_key_type (s_wsec);
6128 g_assert (key_type == NM_WEP_KEY_TYPE_UNKNOWN || key_type == NM_WEP_KEY_TYPE_KEY);
6129
6130 /* We don't expect WEP key0 to be filled */
6131 g_assert (nm_setting_wireless_security_get_wep_key (s_wsec, 0) == NULL);
6132
6133 flags = nm_setting_wireless_security_get_wep_key_flags (s_wsec);
6134 g_assert (flags & NM_SETTING_SECRET_FLAG_AGENT_OWNED);
6135
6136 g_free (unmanaged);
6137 g_free (keyfile);
6138 g_free (routefile);
6139 g_free (route6file);
6140 g_object_unref (connection);
6141 }
6142
6143 static void
6144 test_write_wired_static (void)
6145 {
6146 NMConnection *connection;
6147 NMConnection *reread;
6148 NMSettingConnection *s_con;
6149 NMSettingWired *s_wired;
6150 NMSettingIP4Config *s_ip4, *reread_s_ip4;
6151 NMSettingIP6Config *s_ip6, *reread_s_ip6;
6152 static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
6153 GByteArray *mac;
6154 guint32 mtu = 1492;
6155 char *uuid;
6156 const guint32 ip1 = htonl (0x01010103);
6157 const guint32 ip2 = htonl (0x01010105);
6158 const guint32 gw = htonl (0x01010101);
6159 const guint32 dns1 = htonl (0x04020201);
6160 const guint32 dns2 = htonl (0x04020202);
6161 const guint32 prefix = 24;
6162 const char *dns_search1 = "foobar.com";
6163 const char *dns_search2 = "lab.foobar.com";
6164 const char *dns_search3 = "foobar6.com";
6165 const char *dns_search4 = "lab6.foobar.com";
6166 struct in6_addr ip6, ip6_1, ip6_2;
6167 struct in6_addr route1_dest, route2_dest, route1_nexthop, route2_nexthop;
6168 struct in6_addr dns6_1, dns6_2;
6169 const guint32 route1_prefix = 64, route2_prefix = 128;
6170 const guint32 route1_metric = 99, route2_metric = 1;
6171 NMIP4Address *addr;
6172 NMIP6Address *addr6;
6173 NMIP6Route *route6;
6174 gboolean success;
6175 GError *error = NULL;
6176 char *testfile = NULL;
6177 char *unmanaged = NULL;
6178 char *keyfile = NULL;
6179 char *routefile = NULL;
6180 char *route6file = NULL;
6181 gboolean ignore_error = FALSE;
6182
6183 inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6);
6184 inet_pton (AF_INET6, "2003:1234:abcd::2", &ip6_1);
6185 inet_pton (AF_INET6, "3003:1234:abcd::3", &ip6_2);
6186 inet_pton (AF_INET6, "2222:aaaa:bbbb:cccc::", &route1_dest);
6187 inet_pton (AF_INET6, "2222:aaaa:bbbb:cccc:dddd:eeee:5555:6666", &route1_nexthop);
6188 inet_pton (AF_INET6, "::", &route2_dest);
6189 inet_pton (AF_INET6, "2222:aaaa::9999", &route2_nexthop);
6190 inet_pton (AF_INET6, "fade:0102:0103::face", &dns6_1);
6191 inet_pton (AF_INET6, "cafe:ffff:eeee:dddd:cccc:bbbb:aaaa:feed", &dns6_2);
6192
6193 connection = nm_connection_new ();
6194
6195 /* Connection setting */
6196 s_con = (NMSettingConnection *) nm_setting_connection_new ();
6197 nm_connection_add_setting (connection, NM_SETTING (s_con));
6198
6199 uuid = nm_utils_uuid_generate ();
6200 g_object_set (s_con,
6201 NM_SETTING_CONNECTION_ID, "Test Write Wired Static",
6202 NM_SETTING_CONNECTION_UUID, uuid,
6203 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
6204 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
6205 NULL);
6206 g_free (uuid);
6207
6208 /* Wired setting */
6209 s_wired = (NMSettingWired *) nm_setting_wired_new ();
6210 nm_connection_add_setting (connection, NM_SETTING (s_wired));
6211
6212 mac = g_byte_array_sized_new (sizeof (tmpmac));
6213 g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
6214
6215 g_object_set (s_wired,
6216 NM_SETTING_WIRED_MAC_ADDRESS, mac,
6217 NM_SETTING_WIRED_MTU, mtu,
6218 NULL);
6219 g_byte_array_free (mac, TRUE);
6220
6221 /* IP4 setting */
6222 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
6223 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
6224
6225 g_object_set (s_ip4,
6226 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
6227 NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
6228 NULL);
6229
6230 addr = nm_ip4_address_new ();
6231 nm_ip4_address_set_address (addr, ip1);
6232 nm_ip4_address_set_prefix (addr, prefix);
6233 nm_ip4_address_set_gateway (addr, gw);
6234 nm_setting_ip4_config_add_address (s_ip4, addr);
6235 nm_ip4_address_unref (addr);
6236
6237 addr = nm_ip4_address_new ();
6238 nm_ip4_address_set_address (addr, ip2);
6239 nm_ip4_address_set_prefix (addr, prefix);
6240 nm_ip4_address_set_gateway (addr, gw);
6241 nm_setting_ip4_config_add_address (s_ip4, addr);
6242 nm_ip4_address_unref (addr);
6243
6244 nm_setting_ip4_config_add_dns (s_ip4, dns1);
6245 nm_setting_ip4_config_add_dns (s_ip4, dns2);
6246
6247 nm_setting_ip4_config_add_dns_search (s_ip4, dns_search1);
6248 nm_setting_ip4_config_add_dns_search (s_ip4, dns_search2);
6249
6250 /* IP6 setting */
6251 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
6252 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
6253
6254 g_object_set (s_ip6,
6255 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
6256 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
6257 NULL);
6258
6259 /* Add addresses */
6260 addr6 = nm_ip6_address_new ();
6261 nm_ip6_address_set_address (addr6, &ip6);
6262 nm_ip6_address_set_prefix (addr6, 11);
6263 nm_setting_ip6_config_add_address (s_ip6, addr6);
6264 nm_ip6_address_unref (addr6);
6265
6266 addr6 = nm_ip6_address_new ();
6267 nm_ip6_address_set_address (addr6, &ip6_1);
6268 nm_ip6_address_set_prefix (addr6, 22);
6269 nm_setting_ip6_config_add_address (s_ip6, addr6);
6270 nm_ip6_address_unref (addr6);
6271
6272 addr6 = nm_ip6_address_new ();
6273 nm_ip6_address_set_address (addr6, &ip6_2);
6274 nm_ip6_address_set_prefix (addr6, 33);
6275 nm_setting_ip6_config_add_address (s_ip6, addr6);
6276 nm_ip6_address_unref (addr6);
6277
6278 /* Add routes */
6279 route6 = nm_ip6_route_new ();
6280 nm_ip6_route_set_dest (route6, &route1_dest);
6281 nm_ip6_route_set_prefix (route6, route1_prefix);
6282 nm_ip6_route_set_next_hop (route6, &route1_nexthop);
6283 nm_ip6_route_set_metric (route6, route1_metric);
6284 nm_setting_ip6_config_add_route (s_ip6, route6);
6285 nm_ip6_route_unref (route6);
6286
6287 route6 = nm_ip6_route_new ();
6288 nm_ip6_route_set_dest (route6, &route2_dest);
6289 nm_ip6_route_set_prefix (route6, route2_prefix);
6290 nm_ip6_route_set_next_hop (route6, &route2_nexthop);
6291 nm_ip6_route_set_metric (route6, route2_metric);
6292 nm_setting_ip6_config_add_route (s_ip6, route6);
6293 nm_ip6_route_unref (route6);
6294
6295 /* DNS servers */
6296 nm_setting_ip6_config_add_dns (s_ip6, &dns6_1);
6297 nm_setting_ip6_config_add_dns (s_ip6, &dns6_2);
6298
6299 /* DNS domains */
6300 nm_setting_ip6_config_add_dns_search (s_ip6, dns_search3);
6301 nm_setting_ip6_config_add_dns_search (s_ip6, dns_search4);
6302
6303 ASSERT (nm_connection_verify (connection, &error) == TRUE,
6304 "wired-static-write", "failed to verify connection: %s",
6305 (error && error->message) ? error->message : "(unknown)");
6306
6307 /* Save the ifcfg */
6308 success = writer_new_connection (connection,
6309 TEST_SCRATCH_DIR "/network-scripts/",
6310 &testfile,
6311 &error);
6312 ASSERT (success == TRUE,
6313 "wired-static-write", "failed to write connection to disk: %s",
6314 (error && error->message) ? error->message : "(unknown)");
6315
6316 ASSERT (testfile != NULL,
6317 "wired-static-write", "didn't get ifcfg file path back after writing connection");
6318
6319 /* reread will be normalized, so we must normalize connection too. */
6320 nm_utils_normalize_connection (connection, TRUE);
6321
6322 /* re-read the connection for comparison */
6323 reread = connection_from_file (testfile,
6324 NULL,
6325 TYPE_ETHERNET,
6326 NULL,
6327 &unmanaged,
6328 &keyfile,
6329 &routefile,
6330 &route6file,
6331 &error,
6332 &ignore_error);
6333 unlink (testfile);
6334
6335 ASSERT (reread != NULL,
6336 "wired-static-write-reread", "failed to read %s: %s", testfile, error->message);
6337
6338 ASSERT (nm_connection_verify (reread, &error),
6339 "wired-static-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
6340
6341 /* FIXME: currently DNS domains from IPv6 setting are stored in 'DOMAIN' key in ifcfg-file
6342 * However after re-reading they are dropped into IPv4 setting.
6343 * So, in order to comparison succeeded, move DNS domains back to IPv6 setting.
6344 */
6345 reread_s_ip4 = nm_connection_get_setting_ip4_config (reread);
6346 reread_s_ip6 = nm_connection_get_setting_ip6_config (reread);
6347 nm_setting_ip6_config_add_dns_search (reread_s_ip6, nm_setting_ip4_config_get_dns_search (reread_s_ip4, 2));
6348 nm_setting_ip6_config_add_dns_search (reread_s_ip6, nm_setting_ip4_config_get_dns_search (reread_s_ip4, 3));
6349 nm_setting_ip4_config_remove_dns_search (reread_s_ip4, 3);
6350 nm_setting_ip4_config_remove_dns_search (reread_s_ip4, 2);
6351
6352 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
6353 "wired-static-write", "written and re-read connection weren't the same.");
6354
6355 if (route6file)
6356 unlink (route6file);
6357
6358 g_free (testfile);
6359 g_free (unmanaged);
6360 g_free (keyfile);
6361 g_free (routefile);
6362 g_free (route6file);
6363 g_object_unref (connection);
6364 g_object_unref (reread);
6365 }
6366
6367 static void
6368 test_write_wired_dhcp (void)
6369 {
6370 NMConnection *connection;
6371 NMConnection *reread;
6372 NMSettingConnection *s_con;
6373 NMSettingWired *s_wired;
6374 NMSettingIP4Config *s_ip4;
6375 NMSettingIP6Config *s_ip6;
6376 char *uuid;
6377 gboolean success;
6378 GError *error = NULL;
6379 char *testfile = NULL;
6380 char *unmanaged = NULL;
6381 char *keyfile = NULL;
6382 char *routefile = NULL;
6383 char *route6file = NULL;
6384 gboolean ignore_error = FALSE;
6385
6386 connection = nm_connection_new ();
6387
6388 /* Connection setting */
6389 s_con = (NMSettingConnection *) nm_setting_connection_new ();
6390 nm_connection_add_setting (connection, NM_SETTING (s_con));
6391
6392 uuid = nm_utils_uuid_generate ();
6393 g_object_set (s_con,
6394 NM_SETTING_CONNECTION_ID, "Test Write Wired DHCP",
6395 NM_SETTING_CONNECTION_UUID, uuid,
6396 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
6397 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
6398 NULL);
6399 g_free (uuid);
6400
6401 /* Wired setting */
6402 s_wired = (NMSettingWired *) nm_setting_wired_new ();
6403 nm_connection_add_setting (connection, NM_SETTING (s_wired));
6404
6405 /* IP4 setting */
6406 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
6407 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
6408
6409 g_object_set (s_ip4,
6410 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
6411 NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "random-client-id-00:22:33",
6412 NM_SETTING_IP4_CONFIG_DHCP_HOSTNAME, "awesome-hostname",
6413 NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, TRUE,
6414 NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, TRUE,
6415 NULL);
6416
6417 ASSERT (nm_connection_verify (connection, &error) == TRUE,
6418 "wired-dhcp-write", "failed to verify connection: %s",
6419 (error && error->message) ? error->message : "(unknown)");
6420
6421 /* IP6 setting */
6422 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
6423 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
6424
6425 g_object_set (s_ip6,
6426 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
6427 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
6428 NULL);
6429
6430 /* Save the ifcfg */
6431 success = writer_new_connection (connection,
6432 TEST_SCRATCH_DIR "/network-scripts/",
6433 &testfile,
6434 &error);
6435 ASSERT (success == TRUE,
6436 "wired-dhcp-write", "failed to write connection to disk: %s",
6437 (error && error->message) ? error->message : "(unknown)");
6438
6439 ASSERT (testfile != NULL,
6440 "wired-dhcp-write", "didn't get ifcfg file path back after writing connection");
6441
6442 /* reread will be normalized, so we must normalize connection too. */
6443 nm_utils_normalize_connection (connection, TRUE);
6444
6445 /* re-read the connection for comparison */
6446 reread = connection_from_file (testfile,
6447 NULL,
6448 TYPE_ETHERNET,
6449 NULL,
6450 &unmanaged,
6451 &keyfile,
6452 &routefile,
6453 &route6file,
6454 &error,
6455 &ignore_error);
6456 unlink (testfile);
6457
6458 ASSERT (reread != NULL,
6459 "wired-dhcp-write-reread", "failed to read %s: %s", testfile, error->message);
6460
6461 ASSERT (nm_connection_verify (reread, &error),
6462 "wired-dhcp-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
6463
6464 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
6465 "wired-dhcp-write", "written and re-read connection weren't the same.");
6466
6467 g_free (testfile);
6468 g_free (unmanaged);
6469 g_free (keyfile);
6470 g_free (routefile);
6471 g_free (route6file);
6472 g_object_unref (connection);
6473 g_object_unref (reread);
6474 }
6475
6476 static void
6477 test_write_wired_dhcp_plus_ip (void)
6478 {
6479 NMConnection *connection, *reread;
6480 char *written = NULL;
6481 GError *error = NULL;
6482 gboolean success = FALSE;
6483
6484 connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-dhcp-plus-ip",
6485 NULL, TYPE_ETHERNET, NULL, NULL,
6486 NULL, NULL, NULL, &error, NULL);
6487 g_assert_no_error (error);
6488 g_assert (connection != NULL);
6489
6490 success = writer_new_connection (connection,
6491 TEST_SCRATCH_DIR "/network-scripts/",
6492 &written,
6493 &error);
6494 g_assert (success);
6495
6496 /* reread will be normalized, so we must normalize connection too. */
6497 nm_utils_normalize_connection (connection, TRUE);
6498
6499 /* re-read the connection for comparison */
6500 reread = connection_from_file (written, NULL, TYPE_ETHERNET, NULL, NULL,
6501 NULL, NULL, NULL, &error, NULL);
6502 unlink (written);
6503 g_free (written);
6504
6505 g_assert_no_error (error);
6506 g_assert (reread != NULL);
6507
6508 success = nm_connection_verify (reread, &error);
6509 g_assert_no_error (error);
6510 g_assert (success);
6511
6512 success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
6513 g_assert (success);
6514
6515 g_object_unref (connection);
6516 g_object_unref (reread);
6517 }
6518
6519 static void
6520 test_write_wired_static_ip6_only (void)
6521 {
6522 NMConnection *connection;
6523 NMConnection *reread;
6524 NMSettingConnection *s_con;
6525 NMSettingWired *s_wired;
6526 NMSettingIP4Config *s_ip4;
6527 NMSettingIP6Config *s_ip6;
6528 static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
6529 GByteArray *mac;
6530 char *uuid;
6531 struct in6_addr ip6;
6532 struct in6_addr dns6;
6533 NMIP6Address *addr6;
6534 gboolean success;
6535 GError *error = NULL;
6536 char *testfile = NULL;
6537 char *unmanaged = NULL;
6538 char *keyfile = NULL;
6539 char *routefile = NULL;
6540 char *route6file = NULL;
6541 gboolean ignore_error = FALSE;
6542
6543 inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6);
6544 inet_pton (AF_INET6, "fade:0102:0103::face", &dns6);
6545
6546 connection = nm_connection_new ();
6547
6548 /* Connection setting */
6549 s_con = (NMSettingConnection *) nm_setting_connection_new ();
6550 nm_connection_add_setting (connection, NM_SETTING (s_con));
6551
6552 uuid = nm_utils_uuid_generate ();
6553 g_object_set (s_con,
6554 NM_SETTING_CONNECTION_ID, "Test Write Wired Static IP6 Only",
6555 NM_SETTING_CONNECTION_UUID, uuid,
6556 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
6557 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
6558 NULL);
6559 g_free (uuid);
6560
6561 /* Wired setting */
6562 s_wired = (NMSettingWired *) nm_setting_wired_new ();
6563 nm_connection_add_setting (connection, NM_SETTING (s_wired));
6564
6565 mac = g_byte_array_sized_new (sizeof (tmpmac));
6566 g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
6567 g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
6568 g_byte_array_free (mac, TRUE);
6569
6570 /* IP4 setting */
6571 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
6572 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
6573
6574 g_object_set (s_ip4,
6575 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
6576 NULL);
6577
6578 /* IP6 setting */
6579 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
6580 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
6581
6582 g_object_set (s_ip6,
6583 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
6584 NULL);
6585
6586 /* Add addresses */
6587 addr6 = nm_ip6_address_new ();
6588 nm_ip6_address_set_address (addr6, &ip6);
6589 nm_ip6_address_set_prefix (addr6, 11);
6590 nm_setting_ip6_config_add_address (s_ip6, addr6);
6591 nm_ip6_address_unref (addr6);
6592
6593 /* DNS server */
6594 nm_setting_ip6_config_add_dns (s_ip6, &dns6);
6595
6596 ASSERT (nm_connection_verify (connection, &error) == TRUE,
6597 "wired-static-ip6-only-write", "failed to verify connection: %s",
6598 (error && error->message) ? error->message : "(unknown)");
6599
6600 /* Save the ifcfg */
6601 success = writer_new_connection (connection,
6602 TEST_SCRATCH_DIR "/network-scripts/",
6603 &testfile,
6604 &error);
6605 ASSERT (success == TRUE,
6606 "wired-static-ip6-only-write", "failed to write connection to disk: %s",
6607 (error && error->message) ? error->message : "(unknown)");
6608
6609 ASSERT (testfile != NULL,
6610 "wired-static-ip6-only-write", "didn't get ifcfg file path back after writing connection");
6611
6612 /* reread will be normalized, so we must normalize connection too. */
6613 nm_utils_normalize_connection (connection, TRUE);
6614
6615 /* re-read the connection for comparison */
6616 reread = connection_from_file (testfile,
6617 NULL,
6618 TYPE_ETHERNET,
6619 NULL,
6620 &unmanaged,
6621 &keyfile,
6622 &routefile,
6623 &route6file,
6624 &error,
6625 &ignore_error);
6626 unlink (testfile);
6627
6628 ASSERT (reread != NULL,
6629 "wired-static-ip6-only-write-reread", "failed to read %s: %s", testfile, error->message);
6630
6631 ASSERT (nm_connection_verify (reread, &error),
6632 "wired-static-ip6-only-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
6633
6634 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
6635 "wired-static-ip6-only-write", "written and re-read connection weren't the same.");
6636
6637 if (route6file)
6638 unlink (route6file);
6639
6640 g_free (testfile);
6641 g_free (unmanaged);
6642 g_free (keyfile);
6643 g_free (routefile);
6644 g_free (route6file);
6645 g_object_unref (connection);
6646 g_object_unref (reread);
6647 }
6648
6649 /* Test writing an IPv6 config with varying gateway address.
6650 * For missing gateway (::), we expect no IPV6_DEFAULTGW to be written
6651 * to ifcfg-rh.
6652 *
6653 * As user_data pass the IPv6 address of the gateway as string. NULL means
6654 * not to explicitly set the gateway in the configuration before writing it.
6655 * That way, the gateway actually defaults to "::".
6656 */
6657 static void
6658 test_write_wired_static_ip6_only_gw (gconstpointer user_data)
6659 {
6660 NMConnection *connection;
6661 NMConnection *reread;
6662 NMSettingConnection *s_con;
6663 NMSettingWired *s_wired;
6664 NMSettingIP4Config *s_ip4;
6665 NMSettingIP6Config *s_ip6;
6666 static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
6667 GByteArray *mac;
6668 char *uuid;
6669 struct in6_addr ip6;
6670 struct in6_addr dns6;
6671 NMIP6Address *addr6;
6672 gboolean success;
6673 GError *error = NULL;
6674 char *testfile = NULL;
6675 char *id = NULL;
6676 gboolean ignore_error = FALSE;
6677 char *written_ifcfg_gateway;
6678 char s_gateway6[INET6_ADDRSTRLEN] = { 0 };
6679 struct in6_addr gateway6_autovar;
6680 const struct in6_addr *gateway6 = NULL;
6681
6682 /* parsing the input argument and set the struct in6_addr "gateway6" to
6683 * the gateway address. NULL means "do not set the gateway explicitly". */
6684 if (user_data) {
6685 g_assert_cmpint (inet_pton (AF_INET6, user_data, &gateway6_autovar), ==, 1);
6686 gateway6 = &gateway6_autovar;
6687 }
6688
6689 inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6);
6690 inet_pton (AF_INET6, "fade:0102:0103::face", &dns6);
6691 if (gateway6)
6692 inet_ntop (AF_INET6, gateway6, s_gateway6, sizeof (s_gateway6));
6693
6694 connection = nm_connection_new ();
6695
6696 /* Connection setting */
6697 s_con = (NMSettingConnection *) nm_setting_connection_new ();
6698 nm_connection_add_setting (connection, NM_SETTING (s_con));
6699
6700 uuid = nm_utils_uuid_generate ();
6701 id = g_strdup_printf ("Test Write Wired Static IP6 Only With Gateway %s", gateway6 ? s_gateway6 : "NULL");
6702 g_object_set (s_con,
6703 NM_SETTING_CONNECTION_ID, id,
6704 NM_SETTING_CONNECTION_UUID, uuid,
6705 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
6706 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
6707 NULL);
6708 g_free (uuid);
6709 g_free (id);
6710
6711 /* Wired setting */
6712 s_wired = (NMSettingWired *) nm_setting_wired_new ();
6713 nm_connection_add_setting (connection, NM_SETTING (s_wired));
6714
6715 mac = g_byte_array_sized_new (sizeof (tmpmac));
6716 g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
6717 g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL);
6718 g_byte_array_free (mac, TRUE);
6719
6720 /* IP4 setting */
6721 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
6722 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
6723
6724 g_object_set (s_ip4,
6725 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
6726 NULL);
6727
6728 /* IP6 setting */
6729 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
6730 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
6731
6732 g_object_set (s_ip6,
6733 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
6734 NULL);
6735
6736 /* Add addresses */
6737 addr6 = nm_ip6_address_new ();
6738 nm_ip6_address_set_address (addr6, &ip6);
6739 nm_ip6_address_set_prefix (addr6, 11);
6740 if (gateway6)
6741 nm_ip6_address_set_gateway (addr6, gateway6);
6742 nm_setting_ip6_config_add_address (s_ip6, addr6);
6743 nm_ip6_address_unref (addr6);
6744
6745 /* DNS server */
6746 nm_setting_ip6_config_add_dns (s_ip6, &dns6);
6747
6748 g_assert (nm_connection_verify (connection, &error));
6749
6750 /* Save the ifcfg */
6751 success = writer_new_connection (connection,
6752 TEST_SCRATCH_DIR "/network-scripts/",
6753 &testfile,
6754 &error);
6755 g_assert_no_error (error);
6756 g_assert (success);
6757 g_assert (testfile);
6758
6759 /* reread will be normalized, so we must normalize connection too. */
6760 nm_utils_normalize_connection (connection, TRUE);
6761
6762 /* re-read the connection for comparison */
6763 reread = connection_from_file (testfile,
6764 NULL,
6765 TYPE_ETHERNET,
6766 NULL, NULL, NULL,
6767 NULL, NULL,
6768 &error,
6769 &ignore_error);
6770
6771 {
6772 /* re-read the file to check that what key was written. */
6773 shvarFile *ifcfg = svNewFile (testfile);
6774
6775 g_assert (ifcfg);
6776 written_ifcfg_gateway = svGetValue (ifcfg, "IPV6_DEFAULTGW", FALSE);
6777 svCloseFile (ifcfg);
6778 }
6779
6780 unlink (testfile);
6781
6782 g_assert_no_error (error);
6783 g_assert (reread);
6784 g_assert (nm_connection_verify (reread, &error));
6785 g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
6786
6787 /* access the gateway from the loaded connection. */
6788 s_ip6 = nm_connection_get_setting_ip6_config (reread);
6789 g_assert (s_ip6 && nm_setting_ip6_config_get_num_addresses (s_ip6)==1);
6790 addr6 = nm_setting_ip6_config_get_address (s_ip6, 0);
6791 g_assert (addr6);
6792
6793 /* assert that the gateway was written and reloaded as expected */
6794 if (!gateway6 || IN6_IS_ADDR_UNSPECIFIED (gateway6)) {
6795 g_assert (IN6_IS_ADDR_UNSPECIFIED (nm_ip6_address_get_gateway (addr6)));
6796 g_assert (written_ifcfg_gateway==NULL);
6797 } else {
6798 g_assert (!IN6_IS_ADDR_UNSPECIFIED (nm_ip6_address_get_gateway (addr6)));
6799 g_assert_cmpint (memcmp (nm_ip6_address_get_gateway (addr6), gateway6, sizeof (struct in6_addr)), ==, 0);
6800 g_assert_cmpstr (written_ifcfg_gateway, ==, s_gateway6);
6801 }
6802
6803 g_free (testfile);
6804 g_free (written_ifcfg_gateway);
6805 g_object_unref (connection);
6806 g_object_unref (reread);
6807 }
6808
6809 #define TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY TEST_IFCFG_DIR"/network-scripts/ifcfg-test-static-routes-legacy"
6810
6811 static void
6812 test_read_write_static_routes_legacy (void)
6813 {
6814 NMConnection *connection, *reread;
6815 NMSettingConnection *s_con;
6816 NMSettingWired *s_wired;
6817 NMSettingIP4Config *s_ip4;
6818 char *unmanaged = NULL;
6819 char *testfile = NULL;
6820 char *keyfile = NULL;
6821 char *keyfile2 = NULL;
6822 char *routefile = NULL;
6823 char *routefile2 = NULL;
6824 char *route6file = NULL;
6825 char *route6file2 = NULL;
6826 gboolean ignore_error = FALSE;
6827 gboolean success;
6828 GError *error = NULL;
6829 const char *tmp;
6830
6831 connection = connection_from_file (TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6832 NULL,
6833 TYPE_ETHERNET,
6834 NULL,
6835 &unmanaged,
6836 &keyfile,
6837 &routefile,
6838 &route6file,
6839 &error,
6840 &ignore_error);
6841 ASSERT (connection != NULL,
6842 "read-write-static-routes-legacy-read", "failed to read %s: %s",
6843 TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY, error->message);
6844
6845 ASSERT (nm_connection_verify (connection, &error),
6846 "read-write-static-routes-legacy-verify", "failed to verify %s: %s",
6847 TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY, error->message);
6848
6849 /* ===== CONNECTION SETTING ===== */
6850
6851 s_con = nm_connection_get_setting_connection (connection);
6852 ASSERT (s_con != NULL,
6853 "read-write-static-routes-legacy-verify-connection", "failed to verify %s: missing %s setting",
6854 TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6855 NM_SETTING_CONNECTION_SETTING_NAME);
6856
6857 /* ID */
6858 tmp = nm_setting_connection_get_id (s_con);
6859 ASSERT (tmp != NULL,
6860 "read-write-static-routes-legacy-verify-connection", "failed to verify %s: missing %s / %s key",
6861 TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6862 NM_SETTING_CONNECTION_SETTING_NAME,
6863 NM_SETTING_CONNECTION_ID);
6864
6865 /* Autoconnect */
6866 ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
6867 "read_write-static-routes-legacy-verify-connection", "failed to verify %s: unexpected %s /%s key value",
6868 TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6869 NM_SETTING_CONNECTION_SETTING_NAME,
6870 NM_SETTING_CONNECTION_AUTOCONNECT);
6871
6872 /* ===== WIRED SETTING ===== */
6873
6874 s_wired = nm_connection_get_setting_wired (connection);
6875 ASSERT (s_wired != NULL,
6876 "read-write-static-routes-legacy-verify-wired", "failed to verify %s: missing %s setting",
6877 TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6878 NM_SETTING_WIRED_SETTING_NAME);
6879
6880 /* ===== IPv4 SETTING ===== */
6881
6882 s_ip4 = nm_connection_get_setting_ip4_config (connection);
6883 ASSERT (s_ip4 != NULL,
6884 "read-write-static-routes-legacy-verify-ip4", "failed to verify %s: missing %s setting",
6885 TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6886 NM_SETTING_IP4_CONFIG_SETTING_NAME);
6887
6888 /* Method */
6889 tmp = nm_setting_ip4_config_get_method (s_ip4);
6890 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
6891 "read-write-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
6892 TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6893 NM_SETTING_IP4_CONFIG_SETTING_NAME,
6894 NM_SETTING_IP4_CONFIG_METHOD);
6895
6896 ASSERT (nm_setting_ip4_config_get_never_default (s_ip4) == FALSE,
6897 "read-write-static-routes-legacy-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
6898 TEST_IFCFG_READ_WRITE_STATIC_ROUTES_LEGACY,
6899 NM_SETTING_IP4_CONFIG_SETTING_NAME,
6900 NM_SETTING_IP4_CONFIG_NEVER_DEFAULT);
6901
6902 /* Save the ifcfg; use a special different scratch dir to ensure that
6903 * we can clean up after the written connection in both the original
6904 * source tree and for 'make distcheck'.
6905 */
6906 success = writer_new_connection (connection,
6907 TEST_SCRATCH_DIR "/network-scripts/tmp",
6908 &testfile,
6909 &error);
6910 ASSERT (success == TRUE,
6911 "read-write-static-routes-legacy-write", "failed to write connection to disk: %s",
6912 (error && error->message) ? error->message : "(unknown)");
6913
6914 ASSERT (testfile != NULL,
6915 "read-write-static-routes-legacy-write", "didn't get ifcfg file path back after writing connection");
6916
6917 /* reread will be normalized, so we must normalize connection too. */
6918 nm_utils_normalize_connection (connection, TRUE);
6919
6920 /* re-read the connection for comparison */
6921 reread = connection_from_file (testfile,
6922 NULL,
6923 TYPE_ETHERNET,
6924 NULL,
6925 &unmanaged,
6926 &keyfile2,
6927 &routefile2,
6928 &route6file2,
6929 &error,
6930 &ignore_error);
6931 unlink (testfile);
6932 unlink (routefile2);
6933 unlink (route6file2);
6934
6935 ASSERT (reread != NULL,
6936 "read-write-static-routes-legacy-reread", "failed to read %s: %s", testfile, error->message);
6937
6938 ASSERT (routefile2 != NULL,
6939 "read-write-static-routes-legacy-reread", "expected routefile for '%s'", testfile);
6940
6941 ASSERT (nm_connection_verify (reread, &error),
6942 "read-write-static-routes-legacy-reread-verify", "failed to verify %s: %s", testfile, error->message);
6943
6944 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
6945 "read-write-static-routes-legacy-write", "written and re-read connection weren't the same.");
6946
6947 g_free (testfile);
6948 g_free (unmanaged);
6949 g_free (keyfile);
6950 g_free (keyfile2);
6951 g_free (routefile);
6952 g_free (routefile2);
6953 g_free (route6file);
6954 g_free (route6file2);
6955 g_object_unref (connection);
6956 g_object_unref (reread);
6957 }
6958
6959 static void
6960 test_write_wired_static_routes (void)
6961 {
6962 NMConnection *connection;
6963 NMConnection *reread;
6964 NMSettingConnection *s_con;
6965 NMSettingWired *s_wired;
6966 NMSettingIP4Config *s_ip4;
6967 NMSettingIP6Config *s_ip6;
6968 static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
6969 GByteArray *mac;
6970 guint32 mtu = 1492;
6971 char *uuid;
6972 const guint32 ip1 = htonl (0x01010103);
6973 const guint32 ip2 = htonl (0x01010105);
6974 const guint32 gw = htonl (0x01010101);
6975 const guint32 dns1 = htonl (0x04020201);
6976 const guint32 dns2 = htonl (0x04020202);
6977 const guint32 route_dst1 = htonl (0x01020300);
6978 const guint32 route_dst2= htonl (0x03020100);
6979 const guint32 route_gw1 = htonl (0xdeadbeef);
6980 const guint32 route_gw2 = htonl (0xcafeabbe);
6981 const guint32 prefix = 24;
6982 const char *dns_search1 = "foobar.com";
6983 const char *dns_search2 = "lab.foobar.com";
6984 NMIP4Address *addr;
6985 NMIP4Route *route;
6986 gboolean success;
6987 GError *error = NULL;
6988 char *testfile = NULL;
6989 char *unmanaged = NULL;
6990 char *keyfile = NULL;
6991 char *routefile = NULL;
6992 char *route6file = NULL;
6993 gboolean ignore_error = FALSE;
6994
6995 connection = nm_connection_new ();
6996
6997 /* Connection setting */
6998 s_con = (NMSettingConnection *) nm_setting_connection_new ();
6999 nm_connection_add_setting (connection, NM_SETTING (s_con));
7000
7001 uuid = nm_utils_uuid_generate ();
7002 g_object_set (s_con,
7003 NM_SETTING_CONNECTION_ID, "Test Write Wired Static Routes",
7004 NM_SETTING_CONNECTION_UUID, uuid,
7005 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7006 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
7007 NULL);
7008 g_free (uuid);
7009
7010 /* Wired setting */
7011 s_wired = (NMSettingWired *) nm_setting_wired_new ();
7012 nm_connection_add_setting (connection, NM_SETTING (s_wired));
7013
7014 mac = g_byte_array_sized_new (sizeof (tmpmac));
7015 g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
7016
7017 g_object_set (s_wired,
7018 NM_SETTING_WIRED_MAC_ADDRESS, mac,
7019 NM_SETTING_WIRED_MTU, mtu,
7020 NULL);
7021 g_byte_array_free (mac, TRUE);
7022
7023 /* IP4 setting */
7024 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7025 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7026
7027 g_object_set (s_ip4,
7028 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
7029 NULL);
7030
7031 addr = nm_ip4_address_new ();
7032 nm_ip4_address_set_address (addr, ip1);
7033 nm_ip4_address_set_prefix (addr, prefix);
7034 nm_ip4_address_set_gateway (addr, gw);
7035 nm_setting_ip4_config_add_address (s_ip4, addr);
7036 nm_ip4_address_unref (addr);
7037
7038 addr = nm_ip4_address_new ();
7039 nm_ip4_address_set_address (addr, ip2);
7040 nm_ip4_address_set_prefix (addr, prefix);
7041 nm_ip4_address_set_gateway (addr, gw);
7042 nm_setting_ip4_config_add_address (s_ip4, addr);
7043 nm_ip4_address_unref (addr);
7044
7045 /* Write out routes */
7046 route = nm_ip4_route_new ();
7047 nm_ip4_route_set_dest (route, route_dst1);
7048 nm_ip4_route_set_prefix (route, prefix);
7049 nm_ip4_route_set_next_hop (route, route_gw1);
7050 nm_setting_ip4_config_add_route (s_ip4, route);
7051 nm_ip4_route_unref (route);
7052
7053 route = nm_ip4_route_new ();
7054 nm_ip4_route_set_dest (route, route_dst2);
7055 nm_ip4_route_set_prefix (route, prefix);
7056 nm_ip4_route_set_next_hop (route, route_gw2);
7057 nm_ip4_route_set_metric (route, 77);
7058 nm_setting_ip4_config_add_route (s_ip4, route);
7059 nm_ip4_route_unref (route);
7060
7061 nm_setting_ip4_config_add_dns (s_ip4, dns1);
7062 nm_setting_ip4_config_add_dns (s_ip4, dns2);
7063
7064 nm_setting_ip4_config_add_dns_search (s_ip4, dns_search1);
7065 nm_setting_ip4_config_add_dns_search (s_ip4, dns_search2);
7066
7067 /* IP6 setting */
7068 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7069 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7070
7071 g_object_set (s_ip6,
7072 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7073 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7074 NULL);
7075
7076 ASSERT (nm_connection_verify (connection, &error) == TRUE,
7077 "wired-static-routes-write", "failed to verify connection: %s",
7078 (error && error->message) ? error->message : "(unknown)");
7079
7080 /* Save the ifcfg */
7081 success = writer_new_connection (connection,
7082 TEST_SCRATCH_DIR "/network-scripts/",
7083 &testfile,
7084 &error);
7085 ASSERT (success == TRUE,
7086 "wired-static-routes-write", "failed to write connection to disk: %s",
7087 (error && error->message) ? error->message : "(unknown)");
7088
7089 ASSERT (testfile != NULL,
7090 "wired-static-routes-write", "didn't get ifcfg file path back after writing connection");
7091
7092 /* reread will be normalized, so we must normalize connection too. */
7093 nm_utils_normalize_connection (connection, TRUE);
7094
7095 /* re-read the connection for comparison */
7096 reread = connection_from_file (testfile,
7097 NULL,
7098 TYPE_ETHERNET,
7099 NULL,
7100 &unmanaged,
7101 &keyfile,
7102 &routefile,
7103 &route6file,
7104 &error,
7105 &ignore_error);
7106 unlink (testfile);
7107
7108 ASSERT (reread != NULL,
7109 "wired-static-routes-write-reread", "failed to read %s: %s", testfile, error->message);
7110
7111 ASSERT (routefile != NULL,
7112 "wired-static-routes-write-reread", "expected routefile for '%s'", testfile);
7113 unlink (routefile);
7114
7115 ASSERT (nm_connection_verify (reread, &error),
7116 "wired-static-routes-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7117
7118 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7119 "wired-static-routes-write", "written and re-read connection weren't the same.");
7120
7121 g_free (testfile);
7122 g_free (unmanaged);
7123 g_free (keyfile);
7124 g_free (routefile);
7125 g_free (route6file);
7126 g_object_unref (connection);
7127 g_object_unref (reread);
7128 }
7129
7130 static void
7131 test_write_wired_dhcp_8021x_peap_mschapv2 (void)
7132 {
7133 NMConnection *connection;
7134 NMConnection *reread;
7135 NMSettingConnection *s_con;
7136 NMSettingWired *s_wired;
7137 NMSettingIP4Config *s_ip4;
7138 NMSettingIP6Config *s_ip6;
7139 NMSetting8021x *s_8021x;
7140 char *uuid;
7141 gboolean success;
7142 GError *error = NULL;
7143 char *testfile = NULL;
7144 char *unmanaged = NULL;
7145 char *keyfile = NULL;
7146 char *routefile = NULL;
7147 char *route6file = NULL;
7148 gboolean ignore_error = FALSE;
7149
7150 connection = nm_connection_new ();
7151
7152 /* Connection setting */
7153 s_con = (NMSettingConnection *) nm_setting_connection_new ();
7154 nm_connection_add_setting (connection, NM_SETTING (s_con));
7155
7156 uuid = nm_utils_uuid_generate ();
7157 g_object_set (s_con,
7158 NM_SETTING_CONNECTION_ID, "Test Write Wired DHCP 802.1x PEAP MSCHAPv2",
7159 NM_SETTING_CONNECTION_UUID, uuid,
7160 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7161 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
7162 NULL);
7163 g_free (uuid);
7164
7165 /* Wired setting */
7166 s_wired = (NMSettingWired *) nm_setting_wired_new ();
7167 nm_connection_add_setting (connection, NM_SETTING (s_wired));
7168
7169 /* IP4 setting */
7170 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7171 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7172
7173 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7174
7175 /* IP6 setting */
7176 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7177 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7178
7179 g_object_set (s_ip6,
7180 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7181 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7182 NULL);
7183
7184 /* 802.1x setting */
7185 s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
7186 nm_connection_add_setting (connection, NM_SETTING (s_8021x));
7187
7188 g_object_set (s_8021x,
7189 NM_SETTING_802_1X_IDENTITY, "Bob Saget",
7190 NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "barney",
7191 NM_SETTING_802_1X_PASSWORD, "Kids, it was back in October 2008...",
7192 NM_SETTING_802_1X_PHASE1_PEAPVER, "1",
7193 NM_SETTING_802_1X_PHASE1_PEAPLABEL, "1",
7194 NM_SETTING_802_1X_PHASE2_AUTH, "mschapv2",
7195 NULL);
7196
7197 nm_setting_802_1x_add_eap_method (s_8021x, "peap");
7198
7199 success = nm_setting_802_1x_set_ca_cert (s_8021x,
7200 TEST_IFCFG_WIRED_8021x_PEAP_MSCHAPV2_CA_CERT,
7201 NM_SETTING_802_1X_CK_SCHEME_PATH,
7202 NULL,
7203 &error);
7204 ASSERT (success == TRUE,
7205 "wired-dhcp-8021x-peap-mschapv2write", "failed to verify connection: %s",
7206 (error && error->message) ? error->message : "(unknown)");
7207
7208 ASSERT (nm_connection_verify (connection, &error) == TRUE,
7209 "wired-dhcp-8021x-peap-mschapv2write", "failed to verify connection: %s",
7210 (error && error->message) ? error->message : "(unknown)");
7211
7212 /* Save the ifcfg */
7213 success = writer_new_connection (connection,
7214 TEST_SCRATCH_DIR "/network-scripts/",
7215 &testfile,
7216 &error);
7217 ASSERT (success == TRUE,
7218 "wired-dhcp-8021x-peap-mschapv2write", "failed to write connection to disk: %s",
7219 (error && error->message) ? error->message : "(unknown)");
7220
7221 ASSERT (testfile != NULL,
7222 "wired-dhcp-8021x-peap-mschapv2write", "didn't get ifcfg file path back after writing connection");
7223
7224 /* reread will be normalized, so we must normalize connection too. */
7225 nm_utils_normalize_connection (connection, TRUE);
7226
7227 /* re-read the connection for comparison */
7228 reread = connection_from_file (testfile,
7229 NULL,
7230 TYPE_ETHERNET,
7231 NULL,
7232 &unmanaged,
7233 &keyfile,
7234 &routefile,
7235 &route6file,
7236 &error,
7237 &ignore_error);
7238 unlink (testfile);
7239
7240 ASSERT (reread != NULL,
7241 "wired-dhcp-8021x-peap-mschapv2write-reread", "failed to read %s: %s", testfile, error->message);
7242
7243 ASSERT (keyfile != NULL,
7244 "wired-dhcp-8021x-peap-mschapv2write-reread", "expected keyfile for '%s'", testfile);
7245 unlink (keyfile);
7246
7247 ASSERT (nm_connection_verify (reread, &error),
7248 "wired-dhcp-8021x-peap-mschapv2write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7249
7250 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7251 "wired-dhcp-8021x-peap-mschapv2write", "written and re-read connection weren't the same.");
7252
7253 g_free (testfile);
7254 g_free (unmanaged);
7255 g_free (keyfile);
7256 g_free (routefile);
7257 g_free (route6file);
7258 g_object_unref (connection);
7259 g_object_unref (reread);
7260 }
7261
7262 #if 0
7263 static GByteArray *
7264 file_to_byte_array (const char *filename)
7265 {
7266 char *contents;
7267 GByteArray *array = NULL;
7268 gsize length = 0;
7269
7270 if (g_file_get_contents (filename, &contents, &length, NULL)) {
7271 array = g_byte_array_sized_new (length);
7272 g_byte_array_append (array, (guint8 *) contents, length);
7273 g_assert (array->len == length);
7274 g_free (contents);
7275 }
7276 return array;
7277 }
7278 #endif
7279
7280 #define TEST_IFCFG_WIRED_TLS_CA_CERT TEST_IFCFG_DIR"/network-scripts/test_ca_cert.pem"
7281 #define TEST_IFCFG_WIRED_TLS_CLIENT_CERT TEST_IFCFG_DIR"/network-scripts/test1_key_and_cert.pem"
7282 #define TEST_IFCFG_WIRED_TLS_PRIVATE_KEY TEST_IFCFG_DIR"/network-scripts/test1_key_and_cert.pem"
7283
7284 static void
7285 test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme,
7286 NMSettingSecretFlags flags)
7287 {
7288 NMConnection *connection;
7289 NMConnection *reread;
7290 NMSettingConnection *s_con;
7291 NMSettingWired *s_wired;
7292 NMSettingIP4Config *s_ip4;
7293 NMSettingIP6Config *s_ip6;
7294 NMSetting8021x *s_8021x;
7295 char *uuid;
7296 gboolean success;
7297 GError *error = NULL;
7298 char *testfile = NULL;
7299 char *unmanaged = NULL;
7300 char *keyfile = NULL;
7301 char *routefile = NULL;
7302 char *route6file = NULL;
7303 gboolean ignore_error = FALSE;
7304 NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
7305 const char *pw;
7306 char *tmp;
7307
7308 connection = nm_connection_new ();
7309 g_assert (connection != NULL);
7310
7311 /* Connection setting */
7312 s_con = (NMSettingConnection *) nm_setting_connection_new ();
7313 g_assert (s_con);
7314 nm_connection_add_setting (connection, NM_SETTING (s_con));
7315
7316 uuid = nm_utils_uuid_generate ();
7317 g_object_set (s_con,
7318 NM_SETTING_CONNECTION_ID, "Test Write Wired 802.1x TLS Blobs",
7319 NM_SETTING_CONNECTION_UUID, uuid,
7320 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7321 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
7322 NULL);
7323 g_free (uuid);
7324
7325 /* Wired setting */
7326 s_wired = (NMSettingWired *) nm_setting_wired_new ();
7327 g_assert (s_wired);
7328 nm_connection_add_setting (connection, NM_SETTING (s_wired));
7329
7330 /* IP4 setting */
7331 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7332 g_assert (s_ip4);
7333 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7334 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7335
7336 /* IP6 setting */
7337 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7338 g_assert (s_ip6);
7339 g_object_set (s_ip6,
7340 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7341 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7342 NULL);
7343 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7344
7345 /* 802.1x setting */
7346 s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
7347 g_assert (s_8021x);
7348 nm_connection_add_setting (connection, NM_SETTING (s_8021x));
7349
7350 g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
7351 nm_setting_802_1x_add_eap_method (s_8021x, "tls");
7352
7353 /* CA cert */
7354 success = nm_setting_802_1x_set_ca_cert (s_8021x,
7355 TEST_IFCFG_WIRED_TLS_CA_CERT,
7356 scheme,
7357 &format,
7358 &error);
7359 g_assert_no_error (error);
7360 g_assert (success);
7361 g_assert (format == NM_SETTING_802_1X_CK_FORMAT_X509);
7362
7363 /* Client cert */
7364 format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
7365 success = nm_setting_802_1x_set_client_cert (s_8021x,
7366 TEST_IFCFG_WIRED_TLS_CLIENT_CERT,
7367 scheme,
7368 &format,
7369 &error);
7370 g_assert_no_error (error);
7371 g_assert (success);
7372 g_assert (format == NM_SETTING_802_1X_CK_FORMAT_X509);
7373
7374 /* Private key */
7375 format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN;
7376 success = nm_setting_802_1x_set_private_key (s_8021x,
7377 TEST_IFCFG_WIRED_TLS_PRIVATE_KEY,
7378 "test1",
7379 scheme,
7380 &format,
7381 &error);
7382 g_assert_no_error (error);
7383 g_assert (success);
7384 g_assert (format == NM_SETTING_802_1X_CK_FORMAT_RAW_KEY);
7385
7386 /* Set secret flags */
7387 g_object_set (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, flags, NULL);
7388
7389 /* Verify finished connection */
7390 success = nm_connection_verify (connection, &error);
7391 if (!success) {
7392 g_assert (error);
7393 g_warning ("Failed to verify connection: %s", error->message);
7394 }
7395 g_assert (success);
7396
7397 /* Save the ifcfg */
7398 success = writer_new_connection (connection,
7399 TEST_SCRATCH_DIR "/network-scripts/",
7400 &testfile,
7401 &error);
7402 if (!success) {
7403 g_assert (error);
7404 g_warning ("Failed to write connection: %s", error->message);
7405 }
7406 g_assert (success);
7407 g_assert (testfile != NULL);
7408
7409 /* reread will be normalized, so we must normalize connection too. */
7410 nm_utils_normalize_connection (connection, TRUE);
7411
7412 /* re-read the connection for comparison */
7413 reread = connection_from_file (testfile,
7414 NULL,
7415 TYPE_WIRELESS,
7416 NULL,
7417 &unmanaged,
7418 &keyfile,
7419 &routefile,
7420 &route6file,
7421 &error,
7422 &ignore_error);
7423 unlink (testfile);
7424 g_assert (keyfile != NULL);
7425 unlink (keyfile);
7426
7427 g_assert (reread != NULL);
7428
7429 success = nm_connection_verify (reread, &error);
7430 if (!success) {
7431 g_assert (error);
7432 g_warning ("Failed to verify %s: %s", testfile, error->message);
7433 }
7434 g_assert (success);
7435
7436 /* Ensure the reread connection's certificates and private key are paths; no
7437 * matter what scheme was used in the original connection they will be read
7438 * back in as paths.
7439 */
7440 s_8021x = nm_connection_get_setting_802_1x (reread);
7441 g_assert (s_8021x);
7442 g_assert_cmpint (nm_setting_802_1x_get_ca_cert_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
7443 g_assert_cmpint (nm_setting_802_1x_get_client_cert_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
7444 g_assert_cmpint (nm_setting_802_1x_get_private_key_scheme (s_8021x), ==, NM_SETTING_802_1X_CK_SCHEME_PATH);
7445
7446 g_assert_cmpint (nm_setting_802_1x_get_private_key_password_flags (s_8021x), ==, flags);
7447 pw = nm_setting_802_1x_get_private_key_password (s_8021x);
7448 if (flags == NM_SETTING_SECRET_FLAG_NONE) {
7449 /* Ensure the private key password is still set */
7450 g_assert (pw != NULL);
7451 g_assert_cmpstr (pw, ==, "test1");
7452 } else {
7453 /* If the secret isn't owned by system settings, make sure its no longer there */
7454 g_assert (pw == NULL);
7455 }
7456
7457 if (scheme == NM_SETTING_802_1X_CK_SCHEME_PATH) {
7458 /* Do a direct compare if using the path scheme since then the
7459 * certificate and key properties should be the same. If using blob
7460 * scheme the original connection cert/key properties will be blobs
7461 * but the re-read connection is always path scheme, so we wouldn't
7462 * expect it to compare successfully.
7463 */
7464 if (flags != NM_SETTING_SECRET_FLAG_NONE) {
7465 /* Clear original connection's private key password because flags
7466 * say it's not system-owned, and therefore it should not show up
7467 * in the re-read connection.
7468 */
7469 s_8021x = nm_connection_get_setting_802_1x (connection);
7470 g_object_set (s_8021x, NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD, NULL, NULL);
7471 }
7472
7473 g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
7474 }
7475
7476 /* Clean up created certs and keys */
7477 tmp = utils_cert_path (testfile, "ca-cert.der");
7478 unlink (tmp);
7479 g_free (tmp);
7480
7481 tmp = utils_cert_path (testfile, "client-cert.der");
7482 unlink (tmp);
7483 g_free (tmp);
7484
7485 tmp = utils_cert_path (testfile, "private-key.pem");
7486 unlink (tmp);
7487 g_free (tmp);
7488
7489 g_free (testfile);
7490 g_free (unmanaged);
7491 g_free (keyfile);
7492 g_free (routefile);
7493 g_free (route6file);
7494 g_object_unref (connection);
7495 g_object_unref (reread);
7496 }
7497
7498 static void
7499 test_write_wifi_open (void)
7500 {
7501 NMConnection *connection;
7502 NMConnection *reread;
7503 NMSettingConnection *s_con;
7504 NMSettingWireless *s_wifi;
7505 NMSettingIP4Config *s_ip4;
7506 NMSettingIP6Config *s_ip6;
7507 char *uuid;
7508 gboolean success;
7509 GError *error = NULL;
7510 char *testfile = NULL;
7511 char *unmanaged = NULL;
7512 char *keyfile = NULL;
7513 char *routefile = NULL;
7514 char *route6file = NULL;
7515 gboolean ignore_error = FALSE;
7516 GByteArray *ssid;
7517 const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 };
7518 GByteArray *bssid;
7519 const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
7520 guint32 channel = 9, mtu = 1345;
7521 GByteArray *mac;
7522 const unsigned char mac_data[] = { 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff };
7523 shvarFile *ifcfg;
7524 char *tmp;
7525
7526 connection = nm_connection_new ();
7527
7528 /* Connection setting */
7529 s_con = (NMSettingConnection *) nm_setting_connection_new ();
7530 nm_connection_add_setting (connection, NM_SETTING (s_con));
7531
7532 uuid = nm_utils_uuid_generate ();
7533 g_object_set (s_con,
7534 NM_SETTING_CONNECTION_ID, "Test Write Wifi Open",
7535 NM_SETTING_CONNECTION_UUID, uuid,
7536 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7537 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
7538 NULL);
7539 g_free (uuid);
7540
7541 /* Wifi setting */
7542 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
7543 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
7544
7545 ssid = g_byte_array_sized_new (sizeof (ssid_data));
7546 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
7547 bssid = g_byte_array_sized_new (sizeof (bssid_data));
7548 g_byte_array_append (bssid, bssid_data, sizeof (bssid_data));
7549 mac = g_byte_array_sized_new (sizeof (mac_data));
7550 g_byte_array_append (mac, mac_data, sizeof (mac_data));
7551
7552 g_object_set (s_wifi,
7553 NM_SETTING_WIRELESS_SSID, ssid,
7554 NM_SETTING_WIRELESS_BSSID, bssid,
7555 NM_SETTING_WIRELESS_MAC_ADDRESS, mac,
7556 NM_SETTING_WIRELESS_MODE, "infrastructure",
7557 NM_SETTING_WIRELESS_BAND, "bg",
7558 NM_SETTING_WIRELESS_CHANNEL, channel,
7559 NM_SETTING_WIRELESS_MTU, mtu,
7560 NULL);
7561
7562 g_byte_array_free (ssid, TRUE);
7563 g_byte_array_free (bssid, TRUE);
7564 g_byte_array_free (mac, TRUE);
7565
7566 /* IP4 setting */
7567 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7568 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7569
7570 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7571
7572 /* IP6 setting */
7573 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7574 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7575
7576 g_object_set (s_ip6,
7577 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7578 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7579 NULL);
7580
7581 ASSERT (nm_connection_verify (connection, &error) == TRUE,
7582 "wifi-open-write", "failed to verify connection: %s",
7583 (error && error->message) ? error->message : "(unknown)");
7584
7585 /* Save the ifcfg */
7586 success = writer_new_connection (connection,
7587 TEST_SCRATCH_DIR "/network-scripts/",
7588 &testfile,
7589 &error);
7590 ASSERT (success == TRUE,
7591 "wifi-open-write", "failed to write connection to disk: %s",
7592 (error && error->message) ? error->message : "(unknown)");
7593
7594 ASSERT (testfile != NULL,
7595 "wifi-open-write", "didn't get ifcfg file path back after writing connection");
7596
7597 /* reread will be normalized, so we must normalize connection too. */
7598 nm_utils_normalize_connection (connection, TRUE);
7599
7600 /* re-read the connection for comparison */
7601 reread = connection_from_file (testfile,
7602 NULL,
7603 TYPE_WIRELESS,
7604 NULL,
7605 &unmanaged,
7606 &keyfile,
7607 &routefile,
7608 &route6file,
7609 &error,
7610 &ignore_error);
7611
7612 /* Now make sure that the ESSID item isn't double-quoted (rh #606518) */
7613 ifcfg = svNewFile (testfile);
7614 ASSERT (ifcfg != NULL,
7615 "wifi-open-write-reread", "failed to load %s as shvarfile", testfile);
7616
7617 tmp = svGetValue (ifcfg, "ESSID", TRUE);
7618 ASSERT (tmp != NULL,
7619 "wifi-open-write-reread", "failed to read ESSID key from %s", testfile);
7620
7621 ASSERT (strncmp (tmp, "\"\"", 2) != 0,
7622 "wifi-open-write-reread", "unexpected ESSID double-quote in %s", testfile);
7623
7624 g_free (tmp);
7625 svCloseFile (ifcfg);
7626
7627 unlink (testfile);
7628
7629 ASSERT (reread != NULL,
7630 "wifi-open-write-reread", "failed to read %s: %s", testfile, error->message);
7631
7632 ASSERT (nm_connection_verify (reread, &error),
7633 "wifi-open-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7634
7635 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7636 "wifi-open-write", "written and re-read connection weren't the same.");
7637
7638 g_free (testfile);
7639 g_free (unmanaged);
7640 g_free (keyfile);
7641 g_free (routefile);
7642 g_free (route6file);
7643 g_object_unref (connection);
7644 g_object_unref (reread);
7645 }
7646
7647 static void
7648 test_write_wifi_open_hex_ssid (void)
7649 {
7650 NMConnection *connection;
7651 NMConnection *reread;
7652 NMSettingConnection *s_con;
7653 NMSettingWireless *s_wifi;
7654 NMSettingIP4Config *s_ip4;
7655 NMSettingIP6Config *s_ip6;
7656 char *uuid;
7657 gboolean success;
7658 GError *error = NULL;
7659 char *testfile = NULL;
7660 char *unmanaged = NULL;
7661 char *keyfile = NULL;
7662 char *routefile = NULL;
7663 char *route6file = NULL;
7664 gboolean ignore_error = FALSE;
7665 GByteArray *ssid;
7666 const unsigned char ssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd };
7667
7668 connection = nm_connection_new ();
7669
7670 /* Connection setting */
7671 s_con = (NMSettingConnection *) nm_setting_connection_new ();
7672 nm_connection_add_setting (connection, NM_SETTING (s_con));
7673
7674 uuid = nm_utils_uuid_generate ();
7675 g_object_set (s_con,
7676 NM_SETTING_CONNECTION_ID, "Test Write Wifi Open Hex SSID",
7677 NM_SETTING_CONNECTION_UUID, uuid,
7678 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7679 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
7680 NULL);
7681 g_free (uuid);
7682
7683 /* Wifi setting */
7684 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
7685 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
7686
7687 ssid = g_byte_array_sized_new (sizeof (ssid_data));
7688 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
7689
7690 g_object_set (s_wifi,
7691 NM_SETTING_WIRELESS_SSID, ssid,
7692 NM_SETTING_WIRELESS_MODE, "infrastructure",
7693 NULL);
7694
7695 g_byte_array_free (ssid, TRUE);
7696
7697 /* IP4 setting */
7698 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7699 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7700
7701 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7702
7703 /* IP6 setting */
7704 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7705 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7706
7707 g_object_set (s_ip6,
7708 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7709 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7710 NULL);
7711
7712 ASSERT (nm_connection_verify (connection, &error) == TRUE,
7713 "wifi-open-hex-ssid-write", "failed to verify connection: %s",
7714 (error && error->message) ? error->message : "(unknown)");
7715
7716 /* Save the ifcfg */
7717 success = writer_new_connection (connection,
7718 TEST_SCRATCH_DIR "/network-scripts/",
7719 &testfile,
7720 &error);
7721 ASSERT (success == TRUE,
7722 "wifi-open-hex-ssid-write", "failed to write connection to disk: %s",
7723 (error && error->message) ? error->message : "(unknown)");
7724
7725 ASSERT (testfile != NULL,
7726 "wifi-open-hex-ssid-write", "didn't get ifcfg file path back after writing connection");
7727
7728 /* reread will be normalized, so we must normalize connection too. */
7729 nm_utils_normalize_connection (connection, TRUE);
7730
7731 /* re-read the connection for comparison */
7732 reread = connection_from_file (testfile,
7733 NULL,
7734 TYPE_WIRELESS,
7735 NULL,
7736 &unmanaged,
7737 &keyfile,
7738 &routefile,
7739 &route6file,
7740 &error,
7741 &ignore_error);
7742 unlink (testfile);
7743
7744 ASSERT (reread != NULL,
7745 "wifi-open-hex-ssid-write-reread", "failed to read %s: %s", testfile, error->message);
7746
7747 ASSERT (nm_connection_verify (reread, &error),
7748 "wifi-open-hex-ssid-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7749
7750 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7751 "wifi-open-hex-ssid-write", "written and re-read connection weren't the same.");
7752
7753 g_free (testfile);
7754 g_free (unmanaged);
7755 g_free (keyfile);
7756 g_free (routefile);
7757 g_free (route6file);
7758 g_object_unref (connection);
7759 g_object_unref (reread);
7760 }
7761
7762 static void
7763 test_write_wifi_wep (void)
7764 {
7765 NMConnection *connection;
7766 NMConnection *reread;
7767 NMSettingConnection *s_con;
7768 NMSettingWireless *s_wifi;
7769 NMSettingWirelessSecurity *s_wsec;
7770 NMSettingIP4Config *s_ip4;
7771 NMSettingIP6Config *s_ip6;
7772 char *uuid;
7773 gboolean success;
7774 GError *error = NULL;
7775 char *testfile = NULL;
7776 char *unmanaged = NULL;
7777 char *keyfile = NULL;
7778 char *routefile = NULL;
7779 char *route6file = NULL;
7780 gboolean ignore_error = FALSE;
7781 GByteArray *ssid;
7782 const unsigned char ssid_data[] = "blahblah";
7783 struct stat statbuf;
7784
7785 connection = nm_connection_new ();
7786
7787 /* Connection setting */
7788 s_con = (NMSettingConnection *) nm_setting_connection_new ();
7789 nm_connection_add_setting (connection, NM_SETTING (s_con));
7790
7791 uuid = nm_utils_uuid_generate ();
7792 g_object_set (s_con,
7793 NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP",
7794 NM_SETTING_CONNECTION_UUID, uuid,
7795 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7796 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
7797 NULL);
7798 g_free (uuid);
7799
7800 /* Wifi setting */
7801 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
7802 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
7803
7804 ssid = g_byte_array_sized_new (sizeof (ssid_data));
7805 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
7806
7807 g_object_set (s_wifi,
7808 NM_SETTING_WIRELESS_SSID, ssid,
7809 NM_SETTING_WIRELESS_MODE, "infrastructure",
7810 NULL);
7811
7812 g_byte_array_free (ssid, TRUE);
7813
7814 /* Wireless security setting */
7815 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
7816 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
7817
7818 g_object_set (s_wsec,
7819 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
7820 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 2,
7821 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared",
7822 NULL);
7823 nm_setting_wireless_security_set_wep_key (s_wsec, 0, "0123456789abcdef0123456789");
7824 nm_setting_wireless_security_set_wep_key (s_wsec, 1, "11111111111111111111111111");
7825 nm_setting_wireless_security_set_wep_key (s_wsec, 2, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
7826 nm_setting_wireless_security_set_wep_key (s_wsec, 3, "BBBBBBBBBBBBBBBBBBBBBBBBBB");
7827
7828 /* IP4 setting */
7829 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7830 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7831
7832 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
7833
7834 /* IP6 setting */
7835 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7836 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7837
7838 g_object_set (s_ip6,
7839 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7840 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7841 NULL);
7842
7843 ASSERT (nm_connection_verify (connection, &error) == TRUE,
7844 "wifi-wep-write", "failed to verify connection: %s",
7845 (error && error->message) ? error->message : "(unknown)");
7846
7847 /* Save the ifcfg */
7848 success = writer_new_connection (connection,
7849 TEST_SCRATCH_DIR "/network-scripts/",
7850 &testfile,
7851 &error);
7852 ASSERT (success == TRUE,
7853 "wifi-wep-write", "failed to write connection to disk: %s",
7854 (error && error->message) ? error->message : "(unknown)");
7855
7856 ASSERT (testfile != NULL,
7857 "wifi-wep-write", "didn't get ifcfg file path back after writing connection");
7858
7859 /* reread will be normalized, so we must normalize connection too. */
7860 nm_utils_normalize_connection (connection, TRUE);
7861
7862 /* re-read the connection for comparison */
7863 reread = connection_from_file (testfile,
7864 NULL,
7865 TYPE_WIRELESS,
7866 NULL,
7867 &unmanaged,
7868 &keyfile,
7869 &routefile,
7870 &route6file,
7871 &error,
7872 &ignore_error);
7873 unlink (testfile);
7874
7875 ASSERT (keyfile != NULL,
7876 "wifi-wep-write-reread", "expected keyfile for '%s'", testfile);
7877
7878 ASSERT (stat (keyfile, &statbuf) == 0,
7879 "wifi-wep-write-reread", "couldn't stat() '%s'", keyfile);
7880 ASSERT (S_ISREG (statbuf.st_mode),
7881 "wifi-wep-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
7882 ASSERT ((statbuf.st_mode & 0077) == 0,
7883 "wifi-wep-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
7884
7885 unlink (keyfile);
7886
7887 ASSERT (reread != NULL,
7888 "wifi-wep-write-reread", "failed to read %s: %s", testfile, error->message);
7889
7890 ASSERT (nm_connection_verify (reread, &error),
7891 "wifi-wep-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
7892
7893 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
7894 "wifi-wep-write", "written and re-read connection weren't the same.");
7895
7896 g_free (testfile);
7897 g_free (unmanaged);
7898 g_free (keyfile);
7899 g_free (routefile);
7900 g_free (route6file);
7901 g_object_unref (connection);
7902 g_object_unref (reread);
7903 }
7904
7905 static void
7906 test_write_wifi_wep_adhoc (void)
7907 {
7908 NMConnection *connection;
7909 NMConnection *reread;
7910 NMSettingConnection *s_con;
7911 NMSettingWireless *s_wifi;
7912 NMSettingWirelessSecurity *s_wsec;
7913 NMSettingIP4Config *s_ip4;
7914 NMSettingIP6Config *s_ip6;
7915 char *uuid;
7916 gboolean success;
7917 GError *error = NULL;
7918 char *testfile = NULL;
7919 char *unmanaged = NULL;
7920 char *keyfile = NULL;
7921 char *routefile = NULL;
7922 char *route6file = NULL;
7923 gboolean ignore_error = FALSE;
7924 GByteArray *ssid;
7925 const unsigned char ssid_data[] = "blahblah";
7926 struct stat statbuf;
7927 NMIP4Address *addr;
7928 const guint32 ip1 = htonl (0x01010103);
7929 const guint32 gw = htonl (0x01010101);
7930 const guint32 dns1 = htonl (0x04020201);
7931 const guint32 prefix = 24;
7932
7933 connection = nm_connection_new ();
7934
7935 /* Connection setting */
7936 s_con = (NMSettingConnection *) nm_setting_connection_new ();
7937 nm_connection_add_setting (connection, NM_SETTING (s_con));
7938
7939 uuid = nm_utils_uuid_generate ();
7940 g_object_set (s_con,
7941 NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP AdHoc",
7942 NM_SETTING_CONNECTION_UUID, uuid,
7943 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
7944 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
7945 NULL);
7946 g_free (uuid);
7947
7948 /* Wifi setting */
7949 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
7950 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
7951
7952 ssid = g_byte_array_sized_new (sizeof (ssid_data));
7953 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
7954
7955 g_object_set (s_wifi,
7956 NM_SETTING_WIRELESS_SSID, ssid,
7957 NM_SETTING_WIRELESS_MODE, "adhoc",
7958 NULL);
7959
7960 g_byte_array_free (ssid, TRUE);
7961
7962 /* Wireless security setting */
7963 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
7964 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
7965
7966 g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", NULL);
7967 nm_setting_wireless_security_set_wep_key (s_wsec, 0, "0123456789abcdef0123456789");
7968
7969 /* IP4 setting */
7970 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
7971 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
7972
7973 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
7974
7975 /* IP Address */
7976 addr = nm_ip4_address_new ();
7977 nm_ip4_address_set_address (addr, ip1);
7978 nm_ip4_address_set_prefix (addr, prefix);
7979 nm_ip4_address_set_gateway (addr, gw);
7980 nm_setting_ip4_config_add_address (s_ip4, addr);
7981 nm_ip4_address_unref (addr);
7982
7983 nm_setting_ip4_config_add_dns (s_ip4, dns1);
7984
7985 /* IP6 setting */
7986 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
7987 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
7988
7989 g_object_set (s_ip6,
7990 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
7991 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
7992 NULL);
7993
7994 ASSERT (nm_connection_verify (connection, &error) == TRUE,
7995 "wifi-wep-adhoc-write", "failed to verify connection: %s",
7996 (error && error->message) ? error->message : "(unknown)");
7997
7998 /* Save the ifcfg */
7999 success = writer_new_connection (connection,
8000 TEST_SCRATCH_DIR "/network-scripts/",
8001 &testfile,
8002 &error);
8003 ASSERT (success == TRUE,
8004 "wifi-wep-adhoc-write", "failed to write connection to disk: %s",
8005 (error && error->message) ? error->message : "(unknown)");
8006
8007 ASSERT (testfile != NULL,
8008 "wifi-wep-adhoc-write", "didn't get ifcfg file path back after writing connection");
8009
8010 /* reread will be normalized, so we must normalize connection too. */
8011 nm_utils_normalize_connection (connection, TRUE);
8012
8013 /* re-read the connection for comparison */
8014 reread = connection_from_file (testfile,
8015 NULL,
8016 TYPE_WIRELESS,
8017 NULL,
8018 &unmanaged,
8019 &keyfile,
8020 &routefile,
8021 &route6file,
8022 &error,
8023 &ignore_error);
8024 unlink (testfile);
8025
8026 ASSERT (keyfile != NULL,
8027 "wifi-wep-adhoc-write-reread", "expected keyfile for '%s'", testfile);
8028
8029 ASSERT (stat (keyfile, &statbuf) == 0,
8030 "wifi-wep-adhoc-write-reread", "couldn't stat() '%s'", keyfile);
8031 ASSERT (S_ISREG (statbuf.st_mode),
8032 "wifi-wep-adhoc-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8033 ASSERT ((statbuf.st_mode & 0077) == 0,
8034 "wifi-wep-adhoc-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8035
8036 unlink (keyfile);
8037
8038 ASSERT (reread != NULL,
8039 "wifi-wep-adhoc-write-reread", "failed to read %s: %s", testfile, error->message);
8040
8041 ASSERT (nm_connection_verify (reread, &error),
8042 "wifi-wep-adhoc-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8043
8044 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8045 "wifi-wep-adhoc-write", "written and re-read connection weren't the same.");
8046
8047 g_free (testfile);
8048 g_free (unmanaged);
8049 g_free (keyfile);
8050 g_free (routefile);
8051 g_free (route6file);
8052 g_object_unref (connection);
8053 g_object_unref (reread);
8054 }
8055
8056 static void
8057 test_write_wifi_wep_passphrase (void)
8058 {
8059 NMConnection *connection;
8060 NMConnection *reread;
8061 NMSettingConnection *s_con;
8062 NMSettingWireless *s_wifi;
8063 NMSettingWirelessSecurity *s_wsec;
8064 NMSettingIP4Config *s_ip4;
8065 NMSettingIP6Config *s_ip6;
8066 char *uuid;
8067 gboolean success;
8068 GError *error = NULL;
8069 char *testfile = NULL;
8070 char *unmanaged = NULL;
8071 char *keyfile = NULL;
8072 char *routefile = NULL;
8073 char *route6file = NULL;
8074 gboolean ignore_error = FALSE;
8075 GByteArray *ssid;
8076 const unsigned char ssid_data[] = "blahblah";
8077 struct stat statbuf;
8078
8079 connection = nm_connection_new ();
8080
8081 /* Connection setting */
8082 s_con = (NMSettingConnection *) nm_setting_connection_new ();
8083 nm_connection_add_setting (connection, NM_SETTING (s_con));
8084
8085 uuid = nm_utils_uuid_generate ();
8086 g_object_set (s_con,
8087 NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP Passphrase",
8088 NM_SETTING_CONNECTION_UUID, uuid,
8089 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8090 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8091 NULL);
8092 g_free (uuid);
8093
8094 /* Wifi setting */
8095 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8096 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8097
8098 ssid = g_byte_array_sized_new (sizeof (ssid_data));
8099 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8100
8101 g_object_set (s_wifi,
8102 NM_SETTING_WIRELESS_SSID, ssid,
8103 NM_SETTING_WIRELESS_MODE, "infrastructure",
8104 NULL);
8105
8106 g_byte_array_free (ssid, TRUE);
8107
8108 /* Wireless security setting */
8109 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8110 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8111
8112 g_object_set (s_wsec,
8113 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
8114 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 0,
8115 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared",
8116 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_PASSPHRASE,
8117 NULL);
8118 nm_setting_wireless_security_set_wep_key (s_wsec, 0, "asdfdjaslfjasd;flasjdfl;aksdf");
8119
8120 /* IP4 setting */
8121 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8122 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8123
8124 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8125
8126 /* IP6 setting */
8127 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8128 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8129
8130 g_object_set (s_ip6,
8131 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8132 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8133 NULL);
8134
8135 ASSERT (nm_connection_verify (connection, &error) == TRUE,
8136 "wifi-wep-passphrase-write", "failed to verify connection: %s",
8137 (error && error->message) ? error->message : "(unknown)");
8138
8139 /* Save the ifcfg */
8140 success = writer_new_connection (connection,
8141 TEST_SCRATCH_DIR "/network-scripts/",
8142 &testfile,
8143 &error);
8144 ASSERT (success == TRUE,
8145 "wifi-wep-passphrase-write", "failed to write connection to disk: %s",
8146 (error && error->message) ? error->message : "(unknown)");
8147
8148 ASSERT (testfile != NULL,
8149 "wifi-wep-passphrase-write", "didn't get ifcfg file path back after writing connection");
8150
8151 /* reread will be normalized, so we must normalize connection too. */
8152 nm_utils_normalize_connection (connection, TRUE);
8153
8154 /* re-read the connection for comparison */
8155 reread = connection_from_file (testfile,
8156 NULL,
8157 TYPE_WIRELESS,
8158 NULL,
8159 &unmanaged,
8160 &keyfile,
8161 &routefile,
8162 &route6file,
8163 &error,
8164 &ignore_error);
8165 unlink (testfile);
8166
8167 ASSERT (keyfile != NULL,
8168 "wifi-wep-passphrase-write-reread", "expected keyfile for '%s'", testfile);
8169
8170 ASSERT (stat (keyfile, &statbuf) == 0,
8171 "wifi-wep-passphrase-write-reread", "couldn't stat() '%s'", keyfile);
8172 ASSERT (S_ISREG (statbuf.st_mode),
8173 "wifi-wep-passphrase-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8174 ASSERT ((statbuf.st_mode & 0077) == 0,
8175 "wifi-wep-passphrase-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8176
8177 unlink (keyfile);
8178
8179 ASSERT (reread != NULL,
8180 "wifi-wep-passphrase-write-reread", "failed to read %s: %s", testfile, error->message);
8181
8182 ASSERT (nm_connection_verify (reread, &error),
8183 "wifi-wep-passphrase-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8184
8185 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8186 "wifi-wep-passphrase-write", "written and re-read connection weren't the same.");
8187
8188 g_free (testfile);
8189 g_free (unmanaged);
8190 g_free (keyfile);
8191 g_free (routefile);
8192 g_free (route6file);
8193 g_object_unref (connection);
8194 g_object_unref (reread);
8195 }
8196
8197 static void
8198 test_write_wifi_wep_40_ascii (void)
8199 {
8200 NMConnection *connection;
8201 NMConnection *reread;
8202 NMSettingConnection *s_con;
8203 NMSettingWireless *s_wifi;
8204 NMSettingWirelessSecurity *s_wsec;
8205 NMSettingIP4Config *s_ip4;
8206 NMSettingIP6Config *s_ip6;
8207 char *uuid;
8208 gboolean success;
8209 GError *error = NULL;
8210 char *testfile = NULL;
8211 char *unmanaged = NULL;
8212 char *keyfile = NULL;
8213 char *routefile = NULL;
8214 char *route6file = NULL;
8215 gboolean ignore_error = FALSE;
8216 GByteArray *ssid;
8217 const unsigned char ssid_data[] = "blahblah40";
8218 struct stat statbuf;
8219
8220 connection = nm_connection_new ();
8221
8222 /* Connection setting */
8223 s_con = (NMSettingConnection *) nm_setting_connection_new ();
8224 nm_connection_add_setting (connection, NM_SETTING (s_con));
8225
8226 uuid = nm_utils_uuid_generate ();
8227 g_object_set (s_con,
8228 NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP 40 ASCII",
8229 NM_SETTING_CONNECTION_UUID, uuid,
8230 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8231 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8232 NULL);
8233 g_free (uuid);
8234
8235 /* Wifi setting */
8236 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8237 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8238
8239 ssid = g_byte_array_sized_new (sizeof (ssid_data));
8240 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8241
8242 g_object_set (s_wifi,
8243 NM_SETTING_WIRELESS_SSID, ssid,
8244 NM_SETTING_WIRELESS_MODE, "infrastructure",
8245 NULL);
8246
8247 g_byte_array_free (ssid, TRUE);
8248
8249 /* Wireless security setting */
8250 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8251 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8252
8253 g_object_set (s_wsec,
8254 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
8255 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 2,
8256 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared",
8257 NULL);
8258 nm_setting_wireless_security_set_wep_key (s_wsec, 0, "lorem");
8259 nm_setting_wireless_security_set_wep_key (s_wsec, 1, "ipsum");
8260 nm_setting_wireless_security_set_wep_key (s_wsec, 2, "dolor");
8261 nm_setting_wireless_security_set_wep_key (s_wsec, 3, "donec");
8262
8263 /* IP4 setting */
8264 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8265 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8266
8267 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8268
8269 /* IP6 setting */
8270 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8271 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8272
8273 g_object_set (s_ip6,
8274 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8275 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8276 NULL);
8277
8278 ASSERT (nm_connection_verify (connection, &error) == TRUE,
8279 "wifi-wep-40-ascii-write", "failed to verify connection: %s",
8280 (error && error->message) ? error->message : "(unknown)");
8281
8282 /* Save the ifcfg */
8283 success = writer_new_connection (connection,
8284 TEST_SCRATCH_DIR "/network-scripts/",
8285 &testfile,
8286 &error);
8287 ASSERT (success == TRUE,
8288 "wifi-wep-40-ascii-write", "failed to write connection to disk: %s",
8289 (error && error->message) ? error->message : "(unknown)");
8290
8291 ASSERT (testfile != NULL,
8292 "wifi-wep-40-ascii-write", "didn't get ifcfg file path back after writing connection");
8293
8294 /* reread will be normalized, so we must normalize connection too. */
8295 nm_utils_normalize_connection (connection, TRUE);
8296
8297 /* re-read the connection for comparison */
8298 reread = connection_from_file (testfile,
8299 NULL,
8300 TYPE_WIRELESS,
8301 NULL,
8302 &unmanaged,
8303 &keyfile,
8304 &routefile,
8305 &route6file,
8306 &error,
8307 &ignore_error);
8308 unlink (testfile);
8309
8310 ASSERT (keyfile != NULL,
8311 "wifi-wep-40-ascii-write-reread", "expected keyfile for '%s'", testfile);
8312
8313 ASSERT (stat (keyfile, &statbuf) == 0,
8314 "wifi-wep-40-ascii-write-reread", "couldn't stat() '%s'", keyfile);
8315 ASSERT (S_ISREG (statbuf.st_mode),
8316 "wifi-wep-40-ascii-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8317 ASSERT ((statbuf.st_mode & 0077) == 0,
8318 "wifi-wep-40-ascii-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8319
8320 unlink (keyfile);
8321
8322 ASSERT (reread != NULL,
8323 "wifi-wep-40-ascii-write-reread", "failed to read %s: %s", testfile, error->message);
8324
8325 ASSERT (nm_connection_verify (reread, &error),
8326 "wifi-wep-40-ascii-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8327
8328 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8329 "wifi-wep-40-ascii-write", "written and re-read connection weren't the same.");
8330
8331 g_free (testfile);
8332 g_free (unmanaged);
8333 g_free (keyfile);
8334 g_free (routefile);
8335 g_free (route6file);
8336 g_object_unref (connection);
8337 g_object_unref (reread);
8338 }
8339
8340 static void
8341 test_write_wifi_wep_104_ascii (void)
8342 {
8343 NMConnection *connection;
8344 NMConnection *reread;
8345 NMSettingConnection *s_con;
8346 NMSettingWireless *s_wifi;
8347 NMSettingWirelessSecurity *s_wsec;
8348 NMSettingIP4Config *s_ip4;
8349 NMSettingIP6Config *s_ip6;
8350 char *uuid;
8351 gboolean success;
8352 GError *error = NULL;
8353 char *testfile = NULL;
8354 char *unmanaged = NULL;
8355 char *keyfile = NULL;
8356 char *routefile = NULL;
8357 char *route6file = NULL;
8358 gboolean ignore_error = FALSE;
8359 GByteArray *ssid;
8360 const unsigned char ssid_data[] = "blahblah104";
8361 struct stat statbuf;
8362
8363 connection = nm_connection_new ();
8364
8365 /* Connection setting */
8366 s_con = (NMSettingConnection *) nm_setting_connection_new ();
8367 nm_connection_add_setting (connection, NM_SETTING (s_con));
8368
8369 uuid = nm_utils_uuid_generate ();
8370 g_object_set (s_con,
8371 NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP 104 ASCII",
8372 NM_SETTING_CONNECTION_UUID, uuid,
8373 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8374 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8375 NULL);
8376 g_free (uuid);
8377
8378 /* Wifi setting */
8379 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8380 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8381
8382 ssid = g_byte_array_sized_new (sizeof (ssid_data));
8383 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8384
8385 g_object_set (s_wifi,
8386 NM_SETTING_WIRELESS_SSID, ssid,
8387 NM_SETTING_WIRELESS_MODE, "infrastructure",
8388 NULL);
8389
8390 g_byte_array_free (ssid, TRUE);
8391
8392 /* Wireless security setting */
8393 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8394 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8395
8396 g_object_set (s_wsec,
8397 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
8398 NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, 0,
8399 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open",
8400 NULL);
8401 nm_setting_wireless_security_set_wep_key (s_wsec, 0, "LoremIpsumSit");
8402 nm_setting_wireless_security_set_wep_key (s_wsec, 1, "AlfaBetaGamma");
8403 nm_setting_wireless_security_set_wep_key (s_wsec, 2, "WEP-104 ASCII");
8404 nm_setting_wireless_security_set_wep_key (s_wsec, 3, "thisismyascii");
8405
8406 /* IP4 setting */
8407 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8408 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8409
8410 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8411
8412 /* IP6 setting */
8413 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8414 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8415
8416 g_object_set (s_ip6,
8417 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8418 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8419 NULL);
8420
8421 ASSERT (nm_connection_verify (connection, &error) == TRUE,
8422 "wifi-wep-104-ascii-write", "failed to verify connection: %s",
8423 (error && error->message) ? error->message : "(unknown)");
8424
8425 /* Save the ifcfg */
8426 success = writer_new_connection (connection,
8427 TEST_SCRATCH_DIR "/network-scripts/",
8428 &testfile,
8429 &error);
8430 ASSERT (success == TRUE,
8431 "wifi-wep-104-ascii-write", "failed to write connection to disk: %s",
8432 (error && error->message) ? error->message : "(unknown)");
8433
8434 ASSERT (testfile != NULL,
8435 "wifi-wep-104-ascii-write", "didn't get ifcfg file path back after writing connection");
8436
8437 /* reread will be normalized, so we must normalize connection too. */
8438 nm_utils_normalize_connection (connection, TRUE);
8439
8440 /* re-read the connection for comparison */
8441 reread = connection_from_file (testfile,
8442 NULL,
8443 TYPE_WIRELESS,
8444 NULL,
8445 &unmanaged,
8446 &keyfile,
8447 &routefile,
8448 &route6file,
8449 &error,
8450 &ignore_error);
8451 unlink (testfile);
8452
8453 ASSERT (keyfile != NULL,
8454 "wifi-wep-104-ascii-write-reread", "expected keyfile for '%s'", testfile);
8455
8456 ASSERT (stat (keyfile, &statbuf) == 0,
8457 "wifi-wep-104-ascii-write-reread", "couldn't stat() '%s'", keyfile);
8458 ASSERT (S_ISREG (statbuf.st_mode),
8459 "wifi-wep-104-ascii-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8460 ASSERT ((statbuf.st_mode & 0077) == 0,
8461 "wifi-wep-104-ascii-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8462
8463 unlink (keyfile);
8464
8465 ASSERT (reread != NULL,
8466 "wifi-wep-104-ascii-write-reread", "failed to read %s: %s", testfile, error->message);
8467
8468 ASSERT (nm_connection_verify (reread, &error),
8469 "wifi-wep-104-ascii-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8470
8471 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8472 "wifi-wep-104-ascii-write", "written and re-read connection weren't the same.");
8473
8474 g_free (testfile);
8475 g_free (unmanaged);
8476 g_free (keyfile);
8477 g_free (routefile);
8478 g_free (route6file);
8479 g_object_unref (connection);
8480 g_object_unref (reread);
8481 }
8482
8483 static void
8484 test_write_wifi_leap (void)
8485 {
8486 NMConnection *connection;
8487 NMConnection *reread;
8488 NMSettingConnection *s_con;
8489 NMSettingWireless *s_wifi;
8490 NMSettingWirelessSecurity *s_wsec;
8491 NMSettingIP4Config *s_ip4;
8492 NMSettingIP6Config *s_ip6;
8493 char *uuid;
8494 gboolean success;
8495 GError *error = NULL;
8496 char *testfile = NULL;
8497 char *unmanaged = NULL;
8498 char *keyfile = NULL;
8499 char *routefile = NULL;
8500 char *route6file = NULL;
8501 gboolean ignore_error = FALSE;
8502 GByteArray *ssid;
8503 const unsigned char ssid_data[] = "blahblah";
8504 struct stat statbuf;
8505
8506 connection = nm_connection_new ();
8507
8508 /* Connection setting */
8509 s_con = (NMSettingConnection *) nm_setting_connection_new ();
8510 nm_connection_add_setting (connection, NM_SETTING (s_con));
8511
8512 uuid = nm_utils_uuid_generate ();
8513 g_object_set (s_con,
8514 NM_SETTING_CONNECTION_ID, "Test Write Wifi LEAP",
8515 NM_SETTING_CONNECTION_UUID, uuid,
8516 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8517 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8518 NULL);
8519 g_free (uuid);
8520
8521 /* Wifi setting */
8522 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8523 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8524
8525 ssid = g_byte_array_sized_new (sizeof (ssid_data));
8526 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8527
8528 g_object_set (s_wifi,
8529 NM_SETTING_WIRELESS_SSID, ssid,
8530 NM_SETTING_WIRELESS_MODE, "infrastructure",
8531 NULL);
8532
8533 g_byte_array_free (ssid, TRUE);
8534
8535 /* Wireless security setting */
8536 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8537 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8538
8539 g_object_set (s_wsec,
8540 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x",
8541 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap",
8542 NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "Bill Smith",
8543 NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, "foobar22",
8544 NULL);
8545
8546 /* IP4 setting */
8547 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8548 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8549
8550 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8551
8552 /* IP6 setting */
8553 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8554 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8555
8556 g_object_set (s_ip6,
8557 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8558 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8559 NULL);
8560
8561 ASSERT (nm_connection_verify (connection, &error) == TRUE,
8562 "wifi-leap-write", "failed to verify connection: %s",
8563 (error && error->message) ? error->message : "(unknown)");
8564
8565 /* Save the ifcfg */
8566 success = writer_new_connection (connection,
8567 TEST_SCRATCH_DIR "/network-scripts/",
8568 &testfile,
8569 &error);
8570 ASSERT (success == TRUE,
8571 "wifi-leap-write", "failed to write connection to disk: %s",
8572 (error && error->message) ? error->message : "(unknown)");
8573
8574 ASSERT (testfile != NULL,
8575 "wifi-leap-write", "didn't get ifcfg file path back after writing connection");
8576
8577 /* reread will be normalized, so we must normalize connection too. */
8578 nm_utils_normalize_connection (connection, TRUE);
8579
8580 /* re-read the connection for comparison */
8581 reread = connection_from_file (testfile,
8582 NULL,
8583 TYPE_WIRELESS,
8584 NULL,
8585 &unmanaged,
8586 &keyfile,
8587 &routefile,
8588 &route6file,
8589 &error,
8590 &ignore_error);
8591 unlink (testfile);
8592
8593 ASSERT (keyfile != NULL,
8594 "wifi-leap-write-reread", "expected keyfile for '%s'", testfile);
8595
8596 ASSERT (stat (keyfile, &statbuf) == 0,
8597 "wifi-leap-write-reread", "couldn't stat() '%s'", keyfile);
8598 ASSERT (S_ISREG (statbuf.st_mode),
8599 "wifi-leap-write-reread", "keyfile '%s' wasn't a normal file", keyfile);
8600 ASSERT ((statbuf.st_mode & 0077) == 0,
8601 "wifi-leap-write-reread", "keyfile '%s' wasn't readable only by its owner", keyfile);
8602
8603 unlink (keyfile);
8604
8605 ASSERT (reread != NULL,
8606 "wifi-leap-write-reread", "failed to read %s: %s", testfile, error->message);
8607
8608 ASSERT (nm_connection_verify (reread, &error),
8609 "wifi-leap-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
8610
8611 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8612 "wifi-leap-write", "written and re-read connection weren't the same.");
8613
8614 g_free (testfile);
8615 g_free (unmanaged);
8616 g_free (keyfile);
8617 g_free (routefile);
8618 g_free (route6file);
8619 g_object_unref (connection);
8620 g_object_unref (reread);
8621 }
8622
8623 static void
8624 test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags)
8625 {
8626 NMConnection *connection;
8627 NMConnection *reread;
8628 NMSettingConnection *s_con;
8629 NMSettingWireless *s_wifi;
8630 NMSettingWirelessSecurity *s_wsec;
8631 NMSettingIP4Config *s_ip4;
8632 NMSettingIP6Config *s_ip6;
8633 char *uuid;
8634 gboolean success;
8635 GError *error = NULL;
8636 char *testfile = NULL;
8637 char *unmanaged = NULL;
8638 char *keyfile = NULL;
8639 char *routefile = NULL;
8640 char *route6file = NULL;
8641 gboolean ignore_error = FALSE;
8642 GByteArray *ssid;
8643 const unsigned char ssid_data[] = "blahblah";
8644
8645 connection = nm_connection_new ();
8646 g_assert (connection);
8647
8648 /* Connection setting */
8649 s_con = (NMSettingConnection *) nm_setting_connection_new ();
8650 g_assert (s_con);
8651 nm_connection_add_setting (connection, NM_SETTING (s_con));
8652
8653 uuid = nm_utils_uuid_generate ();
8654 g_object_set (s_con,
8655 NM_SETTING_CONNECTION_ID, "Test Write Wifi LEAP Secret Flags",
8656 NM_SETTING_CONNECTION_UUID, uuid,
8657 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8658 NULL);
8659 g_free (uuid);
8660
8661 /* Wifi setting */
8662 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8663 g_assert (s_wifi);
8664 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8665
8666 ssid = g_byte_array_sized_new (sizeof (ssid_data));
8667 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8668 g_object_set (s_wifi,
8669 NM_SETTING_WIRELESS_SSID, ssid,
8670 NM_SETTING_WIRELESS_MODE, "infrastructure",
8671 NULL);
8672 g_byte_array_free (ssid, TRUE);
8673
8674 /* Wireless security setting */
8675 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8676 g_assert (s_wsec);
8677 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8678
8679 g_object_set (s_wsec,
8680 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x",
8681 NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap",
8682 NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "Bill Smith",
8683 NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, "foobar22",
8684 NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, flags,
8685 NULL);
8686
8687 /* IP4 setting */
8688 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8689 g_assert (s_ip4);
8690 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8691 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8692
8693 /* IP6 setting */
8694 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8695 g_assert (s_ip6);
8696 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8697
8698 g_object_set (s_ip6,
8699 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8700 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8701 NULL);
8702
8703 success = nm_connection_verify (connection, &error);
8704 g_assert_no_error (error);
8705 g_assert (success);
8706
8707 /* Save the ifcfg */
8708 success = writer_new_connection (connection,
8709 TEST_SCRATCH_DIR "/network-scripts/",
8710 &testfile,
8711 &error);
8712 g_assert_no_error (error);
8713 g_assert (success);
8714 g_assert (testfile);
8715
8716 /* reread will be normalized, so we must normalize connection too. */
8717 nm_utils_normalize_connection (connection, TRUE);
8718
8719 /* re-read the connection for comparison */
8720 reread = connection_from_file (testfile,
8721 NULL,
8722 TYPE_WIRELESS,
8723 NULL,
8724 &unmanaged,
8725 &keyfile,
8726 &routefile,
8727 &route6file,
8728 &error,
8729 &ignore_error);
8730 unlink (testfile);
8731
8732 g_assert_no_error (error);
8733
8734 /* No key should be written out since the secret is not system owned */
8735 g_assert (keyfile);
8736 g_assert (g_file_test (keyfile, G_FILE_TEST_EXISTS) == FALSE);
8737
8738 g_assert (reread);
8739
8740 success = nm_connection_verify (reread, &error);
8741 g_assert_no_error (error);
8742 g_assert (success);
8743
8744 /* Remove the LEAP password from the original connection since it wont' be
8745 * in the reread connection, as the password is not system owned.
8746 */
8747 g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD, NULL, NULL);
8748 g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
8749
8750 g_free (testfile);
8751 g_free (unmanaged);
8752 g_free (keyfile);
8753 g_free (routefile);
8754 g_free (route6file);
8755 g_object_unref (connection);
8756 g_object_unref (reread);
8757 }
8758
8759 static void
8760 test_write_wifi_wpa_psk (const char *name,
8761 const char *test_name,
8762 gboolean wep_group,
8763 gboolean wpa,
8764 gboolean wpa2,
8765 const char *psk)
8766 {
8767 NMConnection *connection;
8768 NMConnection *reread;
8769 NMSettingConnection *s_con;
8770 NMSettingWireless *s_wifi;
8771 NMSettingWirelessSecurity *s_wsec;
8772 NMSettingIP4Config *s_ip4;
8773 NMSettingIP6Config *s_ip6;
8774 char *uuid, *tmp;
8775 gboolean success;
8776 GError *error = NULL;
8777 char *testfile = NULL;
8778 char *unmanaged = NULL;
8779 char *keyfile = NULL;
8780 char *routefile = NULL;
8781 char *route6file = NULL;
8782 gboolean ignore_error = FALSE;
8783 GByteArray *ssid;
8784 const unsigned char ssid_data[] = "blahblah";
8785
8786 g_return_if_fail (psk != NULL);
8787
8788 connection = nm_connection_new ();
8789
8790 /* Connection setting */
8791 s_con = (NMSettingConnection *) nm_setting_connection_new ();
8792 nm_connection_add_setting (connection, NM_SETTING (s_con));
8793
8794 uuid = nm_utils_uuid_generate ();
8795 g_object_set (s_con,
8796 NM_SETTING_CONNECTION_ID, name,
8797 NM_SETTING_CONNECTION_UUID, uuid,
8798 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8799 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8800 NULL);
8801 g_free (uuid);
8802
8803 /* Wifi setting */
8804 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8805 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8806
8807 ssid = g_byte_array_sized_new (sizeof (ssid_data));
8808 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8809
8810 g_object_set (s_wifi,
8811 NM_SETTING_WIRELESS_SSID, ssid,
8812 NM_SETTING_WIRELESS_MODE, "infrastructure",
8813 NULL);
8814
8815 g_byte_array_free (ssid, TRUE);
8816
8817 /* Wireless security setting */
8818 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8819 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8820
8821 g_object_set (s_wsec,
8822 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
8823 NM_SETTING_WIRELESS_SECURITY_PSK, psk,
8824 NULL);
8825
8826 if (wep_group) {
8827 nm_setting_wireless_security_add_group (s_wsec, "wep40");
8828 nm_setting_wireless_security_add_group (s_wsec, "wep104");
8829 }
8830 if (wpa) {
8831 nm_setting_wireless_security_add_proto (s_wsec, "wpa");
8832 nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
8833 nm_setting_wireless_security_add_group (s_wsec, "tkip");
8834 }
8835 if (wpa2) {
8836 nm_setting_wireless_security_add_proto (s_wsec, "rsn");
8837 nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
8838 nm_setting_wireless_security_add_group (s_wsec, "ccmp");
8839 }
8840
8841 /* IP4 setting */
8842 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8843 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8844
8845 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
8846
8847 /* IP6 setting */
8848 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
8849 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
8850
8851 g_object_set (s_ip6,
8852 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
8853 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
8854 NULL);
8855
8856 ASSERT (nm_connection_verify (connection, &error) == TRUE,
8857 test_name, "failed to verify connection: %s",
8858 (error && error->message) ? error->message : "(unknown)");
8859
8860 /* Save the ifcfg */
8861 success = writer_new_connection (connection,
8862 TEST_SCRATCH_DIR "/network-scripts/",
8863 &testfile,
8864 &error);
8865 ASSERT (success == TRUE,
8866 test_name, "failed to write connection to disk: %s",
8867 (error && error->message) ? error->message : "(unknown)");
8868
8869 ASSERT (testfile != NULL,
8870 test_name, "didn't get ifcfg file path back after writing connection");
8871
8872 /* reread will be normalized, so we must normalize connection too. */
8873 nm_utils_normalize_connection (connection, TRUE);
8874
8875 /* re-read the connection for comparison */
8876 reread = connection_from_file (testfile,
8877 NULL,
8878 TYPE_WIRELESS,
8879 NULL,
8880 &unmanaged,
8881 &keyfile,
8882 &routefile,
8883 &route6file,
8884 &error,
8885 &ignore_error);
8886 unlink (testfile);
8887
8888 tmp = g_strdup_printf ("%s-reread", test_name);
8889 ASSERT (keyfile != NULL,
8890 tmp, "expected keyfile for '%s'", testfile);
8891 unlink (keyfile);
8892
8893 ASSERT (reread != NULL,
8894 tmp, "failed to read %s: %s", testfile, error->message);
8895
8896 ASSERT (nm_connection_verify (reread, &error),
8897 tmp, "failed to verify %s: %s", testfile, error->message);
8898 g_free (tmp);
8899
8900 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
8901 test_name, "written and re-read connection weren't the same.");
8902
8903 g_free (testfile);
8904 g_free (unmanaged);
8905 g_free (keyfile);
8906 g_free (routefile);
8907 g_free (route6file);
8908 g_object_unref (connection);
8909 g_object_unref (reread);
8910 }
8911
8912 static void
8913 test_write_wifi_wpa_psk_adhoc (void)
8914 {
8915 NMConnection *connection;
8916 NMConnection *reread;
8917 NMSettingConnection *s_con;
8918 NMSettingWireless *s_wifi;
8919 NMSettingWirelessSecurity *s_wsec;
8920 NMSettingIP4Config *s_ip4;
8921 NMSettingIP6Config *s_ip6;
8922 char *uuid;
8923 gboolean success;
8924 GError *error = NULL;
8925 char *testfile = NULL;
8926 char *unmanaged = NULL;
8927 char *keyfile = NULL;
8928 char *routefile = NULL;
8929 char *route6file = NULL;
8930 gboolean ignore_error = FALSE;
8931 GByteArray *ssid;
8932 const unsigned char ssid_data[] = "blahblah";
8933 NMIP4Address *addr;
8934 const guint32 ip1 = htonl (0x01010103);
8935 const guint32 gw = htonl (0x01010101);
8936 const guint32 dns1 = htonl (0x04020201);
8937 const guint32 prefix = 24;
8938
8939 connection = nm_connection_new ();
8940
8941 /* Connection setting */
8942 s_con = (NMSettingConnection *) nm_setting_connection_new ();
8943 nm_connection_add_setting (connection, NM_SETTING (s_con));
8944
8945 uuid = nm_utils_uuid_generate ();
8946 g_object_set (s_con,
8947 NM_SETTING_CONNECTION_ID, "Test Write Wifi WPA PSK",
8948 NM_SETTING_CONNECTION_UUID, uuid,
8949 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
8950 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
8951 NULL);
8952 g_free (uuid);
8953
8954 /* Wifi setting */
8955 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
8956 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
8957
8958 ssid = g_byte_array_sized_new (sizeof (ssid_data));
8959 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
8960
8961 g_object_set (s_wifi,
8962 NM_SETTING_WIRELESS_SSID, ssid,
8963 NM_SETTING_WIRELESS_MODE, "adhoc",
8964 NM_SETTING_WIRELESS_CHANNEL, 11,
8965 NM_SETTING_WIRELESS_BAND, "bg",
8966 NULL);
8967
8968 g_byte_array_free (ssid, TRUE);
8969
8970 /* Wireless security setting */
8971 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
8972 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
8973
8974 g_object_set (s_wsec,
8975 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-none",
8976 NM_SETTING_WIRELESS_SECURITY_PSK, "7d308b11df1b4243b0f78e5f3fc68cdbb9a264ed0edf4c188edf329ff5b467f0",
8977 NULL);
8978
8979 nm_setting_wireless_security_add_proto (s_wsec, "wpa");
8980 nm_setting_wireless_security_add_group (s_wsec, "tkip");
8981
8982 /* IP4 setting */
8983 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
8984 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
8985
8986 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
8987
8988 /* IP Address */
8989 addr = nm_ip4_address_new ();
8990 nm_ip4_address_set_address (addr, ip1);
8991 nm_ip4_address_set_prefix (addr, prefix);
8992 nm_ip4_address_set_gateway (addr, gw);
8993 nm_setting_ip4_config_add_address (s_ip4, addr);
8994 nm_ip4_address_unref (addr);
8995
8996 nm_setting_ip4_config_add_dns (s_ip4, dns1);
8997
8998 /* IP6 setting */
8999 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9000 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9001
9002 g_object_set (s_ip6,
9003 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9004 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9005 NULL);
9006
9007 ASSERT (nm_connection_verify (connection, &error) == TRUE,
9008 "wifi-wpa-psk-adhoc-write", "failed to verify connection: %s",
9009 (error && error->message) ? error->message : "(unknown)");
9010
9011 /* Save the ifcfg */
9012 success = writer_new_connection (connection,
9013 TEST_SCRATCH_DIR "/network-scripts/",
9014 &testfile,
9015 &error);
9016 ASSERT (success == TRUE,
9017 "wifi-wpa-psk-adhoc-write", "failed to write connection to disk: %s",
9018 (error && error->message) ? error->message : "(unknown)");
9019
9020 ASSERT (testfile != NULL,
9021 "wifi-wpa-psk-adhoc-write", "didn't get ifcfg file path back after writing connection");
9022
9023 /* reread will be normalized, so we must normalize connection too. */
9024 nm_utils_normalize_connection (connection, TRUE);
9025
9026 /* re-read the connection for comparison */
9027 reread = connection_from_file (testfile,
9028 NULL,
9029 TYPE_WIRELESS,
9030 NULL,
9031 &unmanaged,
9032 &keyfile,
9033 &routefile,
9034 &route6file,
9035 &error,
9036 &ignore_error);
9037 unlink (testfile);
9038
9039 ASSERT (keyfile != NULL,
9040 "wifi-wpa-psk-adhoc-write-reread", "expected keyfile for '%s'", testfile);
9041 unlink (keyfile);
9042
9043 ASSERT (reread != NULL,
9044 "wifi-wpa-psk-adhoc-write-reread", "failed to read %s: %s", testfile, error->message);
9045
9046 ASSERT (nm_connection_verify (reread, &error),
9047 "wifi-wpa-psk-adhoc-write-reread", "failed to verify %s: %s", testfile, error->message);
9048
9049 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
9050 "wifi-wpa-psk-adhoc-write", "written and re-read connection weren't the same.");
9051
9052 g_free (testfile);
9053 g_free (unmanaged);
9054 g_free (keyfile);
9055 g_free (routefile);
9056 g_free (route6file);
9057 g_object_unref (connection);
9058 g_object_unref (reread);
9059 }
9060
9061 static void
9062 test_write_wifi_wpa_eap_tls (void)
9063 {
9064 NMConnection *connection;
9065 NMConnection *reread;
9066 NMSettingConnection *s_con;
9067 NMSettingWireless *s_wifi;
9068 NMSettingWirelessSecurity *s_wsec;
9069 NMSetting8021x *s_8021x;
9070 NMSettingIP4Config *s_ip4;
9071 NMSettingIP6Config *s_ip6;
9072 char *uuid;
9073 gboolean success;
9074 GError *error = NULL;
9075 char *testfile = NULL;
9076 char *unmanaged = NULL;
9077 char *keyfile = NULL;
9078 char *routefile = NULL;
9079 char *route6file = NULL;
9080 gboolean ignore_error = FALSE;
9081 GByteArray *ssid;
9082 const char *ssid_data = "blahblah";
9083
9084 connection = nm_connection_new ();
9085
9086 /* Connection setting */
9087 s_con = (NMSettingConnection *) nm_setting_connection_new ();
9088 nm_connection_add_setting (connection, NM_SETTING (s_con));
9089
9090 uuid = nm_utils_uuid_generate ();
9091 g_object_set (s_con,
9092 NM_SETTING_CONNECTION_ID, "Test Write Wifi WPA EAP-TLS",
9093 NM_SETTING_CONNECTION_UUID, uuid,
9094 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9095 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9096 NULL);
9097 g_free (uuid);
9098
9099 /* Wifi setting */
9100 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9101 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9102
9103 ssid = g_byte_array_sized_new (strlen (ssid_data));
9104 g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
9105
9106 g_object_set (s_wifi,
9107 NM_SETTING_WIRELESS_SSID, ssid,
9108 NM_SETTING_WIRELESS_MODE, "infrastructure",
9109 NULL);
9110
9111 g_byte_array_free (ssid, TRUE);
9112
9113 /* Wireless security setting */
9114 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9115 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9116
9117 g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
9118 nm_setting_wireless_security_add_proto (s_wsec, "wpa");
9119 nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
9120 nm_setting_wireless_security_add_group (s_wsec, "tkip");
9121
9122 /* Wireless security setting */
9123 s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
9124 nm_connection_add_setting (connection, NM_SETTING (s_8021x));
9125
9126 g_object_set (s_8021x, NM_SETTING_802_1X_IDENTITY, "Bill Smith", NULL);
9127
9128 nm_setting_802_1x_add_eap_method (s_8021x, "tls");
9129
9130 success = nm_setting_802_1x_set_ca_cert (s_8021x,
9131 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
9132 NM_SETTING_802_1X_CK_SCHEME_PATH,
9133 NULL,
9134 &error);
9135 ASSERT (success == TRUE,
9136 "wifi-wpa-eap-tls-write", "failed to set CA certificate '%s': %s",
9137 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT, error->message);
9138
9139 success = nm_setting_802_1x_set_client_cert (s_8021x,
9140 TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
9141 NM_SETTING_802_1X_CK_SCHEME_PATH,
9142 NULL,
9143 &error);
9144 ASSERT (success == TRUE,
9145 "wifi-wpa-eap-tls-write", "failed to set client certificate '%s': %s",
9146 TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT, error->message);
9147
9148 success = nm_setting_802_1x_set_private_key (s_8021x,
9149 TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
9150 "test1",
9151 NM_SETTING_802_1X_CK_SCHEME_PATH,
9152 NULL,
9153 &error);
9154 ASSERT (success == TRUE,
9155 "wifi-wpa-eap-tls-write", "failed to set private key '%s': %s",
9156 TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY, error->message);
9157
9158 /* IP4 setting */
9159 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9160 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9161
9162 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9163
9164 /* IP6 setting */
9165 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9166 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9167
9168 g_object_set (s_ip6,
9169 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9170 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9171 NULL);
9172
9173 ASSERT (nm_connection_verify (connection, &error) == TRUE,
9174 "wifi-wpa-eap-tls-write", "failed to verify connection: %s",
9175 (error && error->message) ? error->message : "(unknown)");
9176
9177 /* Save the ifcfg */
9178 success = writer_new_connection (connection,
9179 TEST_SCRATCH_DIR "/network-scripts/",
9180 &testfile,
9181 &error);
9182 ASSERT (success == TRUE,
9183 "wifi-wpa-eap-tls-write", "failed to write connection to disk: %s",
9184 (error && error->message) ? error->message : "(unknown)");
9185
9186 ASSERT (testfile != NULL,
9187 "wifi-wpa-eap-tls-write", "didn't get ifcfg file path back after writing connection");
9188
9189 /* reread will be normalized, so we must normalize connection too. */
9190 nm_utils_normalize_connection (connection, TRUE);
9191
9192 /* re-read the connection for comparison */
9193 reread = connection_from_file (testfile,
9194 NULL,
9195 TYPE_WIRELESS,
9196 NULL,
9197 &unmanaged,
9198 &keyfile,
9199 &routefile,
9200 &route6file,
9201 &error,
9202 &ignore_error);
9203 unlink (testfile);
9204
9205 ASSERT (keyfile != NULL,
9206 "wifi-wpa-eap-tls-write-reread", "expected keyfile for '%s'", testfile);
9207 unlink (keyfile);
9208
9209 ASSERT (reread != NULL,
9210 "wifi-wpa-eap-tls-write-reread", "failed to read %s: %s", testfile, error->message);
9211
9212 ASSERT (nm_connection_verify (reread, &error),
9213 "wifi-wpa-eap-tls-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
9214
9215 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
9216 "wifi-wpa-eap-tls-write", "written and re-read connection weren't the same.");
9217
9218 g_free (testfile);
9219 g_free (unmanaged);
9220 g_free (keyfile);
9221 g_free (routefile);
9222 g_free (route6file);
9223 g_object_unref (connection);
9224 g_object_unref (reread);
9225 }
9226
9227 static void
9228 test_write_wifi_wpa_eap_ttls_tls (void)
9229 {
9230 NMConnection *connection;
9231 NMConnection *reread;
9232 NMSettingConnection *s_con;
9233 NMSettingWireless *s_wifi;
9234 NMSettingWirelessSecurity *s_wsec;
9235 NMSetting8021x *s_8021x;
9236 NMSettingIP4Config *s_ip4;
9237 NMSettingIP6Config *s_ip6;
9238 char *uuid;
9239 gboolean success;
9240 GError *error = NULL;
9241 char *testfile = NULL;
9242 char *unmanaged = NULL;
9243 char *keyfile = NULL;
9244 char *routefile = NULL;
9245 char *route6file = NULL;
9246 gboolean ignore_error = FALSE;
9247 GByteArray *ssid;
9248 const char *ssid_data = "blahblah";
9249
9250 connection = nm_connection_new ();
9251
9252 /* Connection setting */
9253 s_con = (NMSettingConnection *) nm_setting_connection_new ();
9254 nm_connection_add_setting (connection, NM_SETTING (s_con));
9255
9256 uuid = nm_utils_uuid_generate ();
9257 g_object_set (s_con,
9258 NM_SETTING_CONNECTION_ID, "Test Write Wifi WPA EAP-TTLS (TLS)",
9259 NM_SETTING_CONNECTION_UUID, uuid,
9260 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9261 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9262 NULL);
9263 g_free (uuid);
9264
9265 /* Wifi setting */
9266 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9267 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9268
9269 ssid = g_byte_array_sized_new (strlen (ssid_data));
9270 g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
9271
9272 g_object_set (s_wifi,
9273 NM_SETTING_WIRELESS_SSID, ssid,
9274 NM_SETTING_WIRELESS_MODE, "infrastructure",
9275 NULL);
9276
9277 g_byte_array_free (ssid, TRUE);
9278
9279 /* Wireless security setting */
9280 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9281 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9282
9283 g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
9284 nm_setting_wireless_security_add_proto (s_wsec, "rsn");
9285 nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
9286 nm_setting_wireless_security_add_group (s_wsec, "ccmp");
9287
9288 /* Wireless security setting */
9289 s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
9290 nm_connection_add_setting (connection, NM_SETTING (s_8021x));
9291
9292 nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
9293
9294 g_object_set (s_8021x,
9295 NM_SETTING_802_1X_IDENTITY, "Bill Smith",
9296 NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "foobar22",
9297 NM_SETTING_802_1X_PHASE2_AUTHEAP, "tls",
9298 NULL);
9299
9300 success = nm_setting_802_1x_set_ca_cert (s_8021x,
9301 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
9302 NM_SETTING_802_1X_CK_SCHEME_PATH,
9303 NULL,
9304 &error);
9305 ASSERT (success == TRUE,
9306 "wifi-wpa-eap-ttls-tls-write", "failed to set CA certificate '%s': %s",
9307 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT, error->message);
9308
9309 /* Phase 2 TLS stuff */
9310
9311 /* phase2 CA cert */
9312 success = nm_setting_802_1x_set_phase2_ca_cert (s_8021x,
9313 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
9314 NM_SETTING_802_1X_CK_SCHEME_PATH,
9315 NULL,
9316 &error);
9317 ASSERT (success == TRUE,
9318 "wifi-wpa-eap-ttls-tls-write", "failed to set inner CA certificate '%s': %s",
9319 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT, error->message);
9320
9321 /* phase2 client cert */
9322 success = nm_setting_802_1x_set_phase2_client_cert (s_8021x,
9323 TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT,
9324 NM_SETTING_802_1X_CK_SCHEME_PATH,
9325 NULL,
9326 &error);
9327 ASSERT (success == TRUE,
9328 "wifi-wpa-eap-ttls-tls-write", "failed to set inner client certificate '%s': %s",
9329 TEST_IFCFG_WIFI_WPA_EAP_TLS_CLIENT_CERT, error->message);
9330
9331 /* phase2 private key */
9332 success = nm_setting_802_1x_set_phase2_private_key (s_8021x,
9333 TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY,
9334 "test1",
9335 NM_SETTING_802_1X_CK_SCHEME_PATH,
9336 NULL,
9337 &error);
9338 ASSERT (success == TRUE,
9339 "wifi-wpa-eap-ttls-tls-write", "failed to set private key '%s': %s",
9340 TEST_IFCFG_WIFI_WPA_EAP_TLS_PRIVATE_KEY, error->message);
9341
9342 /* IP4 setting */
9343 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9344 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9345
9346 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9347
9348 /* IP6 setting */
9349 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9350 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9351
9352 g_object_set (s_ip6,
9353 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9354 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9355 NULL);
9356
9357 ASSERT (nm_connection_verify (connection, &error) == TRUE,
9358 "wifi-wpa-eap-ttls-tls-write", "failed to verify connection: %s",
9359 (error && error->message) ? error->message : "(unknown)");
9360
9361 /* Save the ifcfg */
9362 success = writer_new_connection (connection,
9363 TEST_SCRATCH_DIR "/network-scripts/",
9364 &testfile,
9365 &error);
9366 ASSERT (success == TRUE,
9367 "wifi-wpa-eap-ttls-tls-write", "failed to write connection to disk: %s",
9368 (error && error->message) ? error->message : "(unknown)");
9369
9370 ASSERT (testfile != NULL,
9371 "wifi-wpa-eap-ttls-tls-write", "didn't get ifcfg file path back after writing connection");
9372
9373 /* reread will be normalized, so we must normalize connection too. */
9374 nm_utils_normalize_connection (connection, TRUE);
9375
9376 /* re-read the connection for comparison */
9377 reread = connection_from_file (testfile,
9378 NULL,
9379 TYPE_WIRELESS,
9380 NULL,
9381 &unmanaged,
9382 &keyfile,
9383 &routefile,
9384 &route6file,
9385 &error,
9386 &ignore_error);
9387 unlink (testfile);
9388
9389 ASSERT (reread != NULL,
9390 "wifi-wpa-eap-ttls-tls-write-reread", "failed to read %s: %s", testfile, error->message);
9391
9392 ASSERT (keyfile != NULL,
9393 "wifi-wpa-eap-ttls-tls-write-reread", "expected keyfile for '%s'", testfile);
9394 unlink (keyfile);
9395
9396 ASSERT (nm_connection_verify (reread, &error),
9397 "wifi-wpa-eap-ttls-tls-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
9398
9399 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
9400 "wifi-wpa-eap-ttls-tls-write", "written and re-read connection weren't the same.");
9401
9402 g_free (testfile);
9403 g_free (unmanaged);
9404 g_free (keyfile);
9405 g_free (routefile);
9406 g_free (route6file);
9407 g_object_unref (connection);
9408 g_object_unref (reread);
9409 }
9410
9411 static void
9412 test_write_wifi_wpa_eap_ttls_mschapv2 (void)
9413 {
9414 NMConnection *connection;
9415 NMConnection *reread;
9416 NMSettingConnection *s_con;
9417 NMSettingWireless *s_wifi;
9418 NMSettingWirelessSecurity *s_wsec;
9419 NMSetting8021x *s_8021x;
9420 NMSettingIP4Config *s_ip4;
9421 NMSettingIP6Config *s_ip6;
9422 char *uuid;
9423 gboolean success;
9424 GError *error = NULL;
9425 char *testfile = NULL;
9426 char *unmanaged = NULL;
9427 char *keyfile = NULL;
9428 char *routefile = NULL;
9429 char *route6file = NULL;
9430 gboolean ignore_error = FALSE;
9431 GByteArray *ssid;
9432 const char *ssid_data = "blahblah";
9433
9434 connection = nm_connection_new ();
9435
9436 /* Connection setting */
9437 s_con = (NMSettingConnection *) nm_setting_connection_new ();
9438 nm_connection_add_setting (connection, NM_SETTING (s_con));
9439
9440 uuid = nm_utils_uuid_generate ();
9441 g_object_set (s_con,
9442 NM_SETTING_CONNECTION_ID, "Test Write Wifi WPA EAP-TTLS (MSCHAPv2)",
9443 NM_SETTING_CONNECTION_UUID, uuid,
9444 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9445 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9446 NULL);
9447 g_free (uuid);
9448
9449 /* Wifi setting */
9450 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9451 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9452
9453 ssid = g_byte_array_sized_new (strlen (ssid_data));
9454 g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
9455
9456 g_object_set (s_wifi,
9457 NM_SETTING_WIRELESS_SSID, ssid,
9458 NM_SETTING_WIRELESS_MODE, "infrastructure",
9459 NULL);
9460
9461 g_byte_array_free (ssid, TRUE);
9462
9463 /* Wireless security setting */
9464 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9465 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9466
9467 g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-eap", NULL);
9468 nm_setting_wireless_security_add_proto (s_wsec, "wpa");
9469 nm_setting_wireless_security_add_proto (s_wsec, "rsn");
9470 nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
9471 nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
9472 nm_setting_wireless_security_add_group (s_wsec, "tkip");
9473 nm_setting_wireless_security_add_group (s_wsec, "ccmp");
9474
9475 /* Wireless security setting */
9476 s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
9477 nm_connection_add_setting (connection, NM_SETTING (s_8021x));
9478
9479 nm_setting_802_1x_add_eap_method (s_8021x, "ttls");
9480
9481 g_object_set (s_8021x,
9482 NM_SETTING_802_1X_IDENTITY, "Bill Smith",
9483 NM_SETTING_802_1X_PASSWORD, ";alkdfja;dslkfjsad;lkfjsadf",
9484 NM_SETTING_802_1X_ANONYMOUS_IDENTITY, "foobar22",
9485 NM_SETTING_802_1X_PHASE2_AUTHEAP, "mschapv2",
9486 NULL);
9487
9488 success = nm_setting_802_1x_set_ca_cert (s_8021x,
9489 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT,
9490 NM_SETTING_802_1X_CK_SCHEME_PATH,
9491 NULL,
9492 &error);
9493 ASSERT (success == TRUE,
9494 "wifi-wpa-eap-ttls-mschapv2-write", "failed to set CA certificate '%s': %s",
9495 TEST_IFCFG_WIFI_WPA_EAP_TLS_CA_CERT, error->message);
9496
9497
9498 /* IP4 setting */
9499 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9500 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9501
9502 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9503
9504 /* IP6 setting */
9505 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9506 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9507
9508 g_object_set (s_ip6,
9509 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9510 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9511 NULL);
9512
9513 ASSERT (nm_connection_verify (connection, &error) == TRUE,
9514 "wifi-wpa-eap-ttls-mschapv2-write", "failed to verify connection: %s",
9515 (error && error->message) ? error->message : "(unknown)");
9516
9517 /* Save the ifcfg */
9518 success = writer_new_connection (connection,
9519 TEST_SCRATCH_DIR "/network-scripts/",
9520 &testfile,
9521 &error);
9522 ASSERT (success == TRUE,
9523 "wifi-wpa-eap-ttls-mschapv2-write", "failed to write connection to disk: %s",
9524 (error && error->message) ? error->message : "(unknown)");
9525
9526 ASSERT (testfile != NULL,
9527 "wifi-wpa-eap-ttls-mschapv2-write", "didn't get ifcfg file path back after writing connection");
9528
9529 /* reread will be normalized, so we must normalize connection too. */
9530 nm_utils_normalize_connection (connection, TRUE);
9531
9532 /* re-read the connection for comparison */
9533 reread = connection_from_file (testfile,
9534 NULL,
9535 TYPE_WIRELESS,
9536 NULL,
9537 &unmanaged,
9538 &keyfile,
9539 &routefile,
9540 &route6file,
9541 &error,
9542 &ignore_error);
9543 unlink (testfile);
9544
9545 ASSERT (reread != NULL,
9546 "wifi-wpa-eap-ttls-mschapv2-write-reread", "failed to read %s: %s", testfile, error->message);
9547
9548 ASSERT (keyfile != NULL,
9549 "wifi-wpa-eap-ttls-mschapv2-write-reread", "expected keyfile for '%s'", testfile);
9550 unlink (keyfile);
9551
9552 ASSERT (nm_connection_verify (reread, &error),
9553 "wifi-wpa-eap-ttls-mschapv2-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
9554
9555 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
9556 "wifi-wpa-eap-ttls-mschapv2-write", "written and re-read connection weren't the same.");
9557
9558 g_free (testfile);
9559 g_free (unmanaged);
9560 g_free (keyfile);
9561 g_free (routefile);
9562 g_free (route6file);
9563 g_object_unref (connection);
9564 g_object_unref (reread);
9565 }
9566
9567 static void
9568 test_write_wifi_wpa_then_open (void)
9569 {
9570 NMConnection *connection;
9571 NMConnection *reread;
9572 NMSettingConnection *s_con;
9573 NMSettingWireless *s_wifi;
9574 NMSettingWirelessSecurity *s_wsec;
9575 NMSettingIP4Config *s_ip4;
9576 NMSettingIP6Config *s_ip6;
9577 char *uuid;
9578 gboolean success;
9579 GError *error = NULL;
9580 char *testfile = NULL;
9581 char *unmanaged = NULL;
9582 char *keyfile = NULL;
9583 char *routefile = NULL;
9584 char *route6file = NULL;
9585 gboolean ignore_error = FALSE;
9586 GByteArray *ssid;
9587 const unsigned char ssid_data[] = "blahblah";
9588
9589 /* Test that writing out a WPA config then changing that to an open
9590 * config doesn't leave various WPA-related keys lying around in the ifcfg.
9591 */
9592
9593 connection = nm_connection_new ();
9594 g_assert (connection);
9595
9596 /* Connection setting */
9597 s_con = (NMSettingConnection *) nm_setting_connection_new ();
9598 g_assert (s_con);
9599 nm_connection_add_setting (connection, NM_SETTING (s_con));
9600
9601 uuid = nm_utils_uuid_generate ();
9602 g_object_set (s_con,
9603 NM_SETTING_CONNECTION_ID, "random wifi connection",
9604 NM_SETTING_CONNECTION_UUID, uuid,
9605 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9606 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9607 NULL);
9608 g_free (uuid);
9609
9610 /* Wifi setting */
9611 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9612 g_assert (s_wifi);
9613 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9614
9615 ssid = g_byte_array_sized_new (sizeof (ssid_data));
9616 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
9617
9618 g_object_set (s_wifi,
9619 NM_SETTING_WIRELESS_SSID, ssid,
9620 NM_SETTING_WIRELESS_MODE, "infrastructure",
9621 NULL);
9622
9623 g_byte_array_free (ssid, TRUE);
9624
9625 /* Wireless security setting */
9626 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9627 g_assert (s_wsec);
9628 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9629
9630 g_object_set (s_wsec,
9631 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
9632 NM_SETTING_WIRELESS_SECURITY_PSK, "some cool PSK",
9633 NULL);
9634
9635 nm_setting_wireless_security_add_proto (s_wsec, "wpa");
9636 nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
9637 nm_setting_wireless_security_add_group (s_wsec, "tkip");
9638
9639 nm_setting_wireless_security_add_proto (s_wsec, "rsn");
9640 nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
9641 nm_setting_wireless_security_add_group (s_wsec, "ccmp");
9642
9643 /* IP4 setting */
9644 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9645 g_assert (s_ip4);
9646 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9647
9648 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9649
9650 /* IP6 setting */
9651 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9652 g_assert (s_ip6);
9653 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9654
9655 g_object_set (s_ip6,
9656 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9657 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9658 NULL);
9659
9660 success = nm_connection_verify (connection, &error);
9661 g_assert_no_error (error);
9662 g_assert (success);
9663
9664 /* Save the ifcfg */
9665 success = writer_new_connection (connection,
9666 TEST_SCRATCH_DIR "/network-scripts/",
9667 &testfile,
9668 &error);
9669 g_assert_no_error (error);
9670 g_assert (success);
9671 g_assert (testfile);
9672
9673 /* reread will be normalized, so we must normalize connection too. */
9674 nm_utils_normalize_connection (connection, TRUE);
9675
9676 /* re-read the connection for comparison */
9677 reread = connection_from_file (testfile,
9678 NULL,
9679 TYPE_WIRELESS,
9680 NULL,
9681 &unmanaged,
9682 &keyfile,
9683 &routefile,
9684 &route6file,
9685 &error,
9686 &ignore_error);
9687 g_assert_no_error (error);
9688 g_assert (reread);
9689
9690 success = nm_connection_verify (reread, &error);
9691 g_assert_no_error (error);
9692
9693 success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
9694 g_assert (success);
9695
9696 g_free (unmanaged);
9697 unmanaged = NULL;
9698 g_free (routefile);
9699 routefile = NULL;
9700 g_free (route6file);
9701 route6file = NULL;
9702 g_object_unref (reread);
9703
9704 /* Now change the connection to open and recheck */
9705 nm_connection_remove_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY);
9706
9707 /* Write it back out */
9708 success = writer_update_connection (connection,
9709 TEST_SCRATCH_DIR "/network-scripts/",
9710 testfile,
9711 keyfile,
9712 &error);
9713 g_assert_no_error (error);
9714 g_assert (success);
9715
9716 unlink (keyfile);
9717 g_free (keyfile);
9718 keyfile = NULL;
9719
9720 /* reread will be normalized, so we must normalize connection too. */
9721 nm_utils_normalize_connection (connection, TRUE);
9722
9723 /* re-read it for comparison */
9724 reread = connection_from_file (testfile,
9725 NULL,
9726 TYPE_WIRELESS,
9727 NULL,
9728 &unmanaged,
9729 &keyfile,
9730 &routefile,
9731 &route6file,
9732 &error,
9733 &ignore_error);
9734 unlink (testfile);
9735 g_assert_no_error (error);
9736
9737 g_assert (reread);
9738
9739 /* No keyfile since it's an open connection this time */
9740 g_assert (keyfile);
9741 g_assert (g_file_test (keyfile, G_FILE_TEST_EXISTS) == FALSE);
9742
9743 success = nm_connection_verify (reread, &error);
9744 g_assert_no_error (error);
9745
9746 success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
9747 g_assert (success);
9748
9749 unlink (testfile);
9750 g_free (testfile);
9751 g_free (unmanaged);
9752 g_free (keyfile);
9753 g_free (routefile);
9754 g_free (route6file);
9755 g_object_unref (reread);
9756
9757 g_object_unref (connection);
9758 }
9759
9760 static void
9761 test_write_wifi_wpa_then_wep_with_perms (void)
9762 {
9763 NMConnection *connection;
9764 NMConnection *reread;
9765 NMSettingConnection *s_con;
9766 NMSettingWireless *s_wifi;
9767 NMSettingWirelessSecurity *s_wsec;
9768 NMSettingIP4Config *s_ip4;
9769 NMSettingIP6Config *s_ip6;
9770 char *uuid;
9771 gboolean success;
9772 GError *error = NULL;
9773 char *testfile = NULL;
9774 char *unmanaged = NULL;
9775 char *keyfile = NULL;
9776 char *routefile = NULL;
9777 char *route6file = NULL;
9778 gboolean ignore_error = FALSE;
9779 GByteArray *ssid;
9780 GSList *perm_list = NULL;
9781 const unsigned char ssid_data[] = "SomeSSID";
9782
9783 /* Test that writing out a WPA config then changing that to a WEP
9784 * config works and doesn't cause infinite loop or other issues.
9785 */
9786
9787 connection = nm_connection_new ();
9788 g_assert (connection);
9789
9790 /* Connection setting */
9791 s_con = (NMSettingConnection *) nm_setting_connection_new ();
9792 g_assert (s_con);
9793 nm_connection_add_setting (connection, NM_SETTING (s_con));
9794
9795 uuid = nm_utils_uuid_generate ();
9796 perm_list = g_slist_append (perm_list, "user:superman:");
9797 g_object_set (s_con,
9798 NM_SETTING_CONNECTION_ID, "random wifi connection 2",
9799 NM_SETTING_CONNECTION_UUID, uuid,
9800 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
9801 NM_SETTING_CONNECTION_PERMISSIONS, perm_list,
9802 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
9803 NULL);
9804 g_free (uuid);
9805 g_slist_free (perm_list);
9806 ASSERT (nm_setting_connection_get_num_permissions (s_con) == 1,
9807 "test_write_wifi_wpa_then_wep_with_perms", "unexpected failure adding valid user permisson");
9808
9809 /* Wifi setting */
9810 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
9811 g_assert (s_wifi);
9812 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
9813
9814 ssid = g_byte_array_sized_new (sizeof (ssid_data));
9815 g_byte_array_append (ssid, ssid_data, sizeof (ssid_data));
9816
9817 g_object_set (s_wifi,
9818 NM_SETTING_WIRELESS_SSID, ssid,
9819 NM_SETTING_WIRELESS_MODE, "infrastructure",
9820 NULL);
9821
9822 g_byte_array_free (ssid, TRUE);
9823
9824 /* Wireless security setting */
9825 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9826 g_assert (s_wsec);
9827 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9828
9829 g_object_set (s_wsec,
9830 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk",
9831 NM_SETTING_WIRELESS_SECURITY_PSK, "My cool PSK",
9832 NULL);
9833
9834 nm_setting_wireless_security_add_proto (s_wsec, "wpa");
9835 nm_setting_wireless_security_add_pairwise (s_wsec, "tkip");
9836 nm_setting_wireless_security_add_group (s_wsec, "tkip");
9837
9838 nm_setting_wireless_security_add_proto (s_wsec, "rsn");
9839 nm_setting_wireless_security_add_pairwise (s_wsec, "ccmp");
9840 nm_setting_wireless_security_add_group (s_wsec, "ccmp");
9841
9842 /* IP4 setting */
9843 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
9844 g_assert (s_ip4);
9845 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
9846
9847 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
9848
9849 /* IP6 setting */
9850 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
9851 g_assert (s_ip6);
9852 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
9853
9854 g_object_set (s_ip6,
9855 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
9856 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
9857 NULL);
9858
9859 success = nm_connection_verify (connection, &error);
9860 g_assert_no_error (error);
9861 g_assert (success);
9862
9863 /* Save the ifcfg */
9864 success = writer_new_connection (connection,
9865 TEST_SCRATCH_DIR "/network-scripts/",
9866 &testfile,
9867 &error);
9868 g_assert_no_error (error);
9869 g_assert (success);
9870 g_assert (testfile);
9871
9872 /* reread will be normalized, so we must normalize connection too. */
9873 nm_utils_normalize_connection (connection, TRUE);
9874
9875 /* re-read the connection for comparison */
9876 reread = connection_from_file (testfile,
9877 NULL,
9878 TYPE_WIRELESS,
9879 NULL,
9880 &unmanaged,
9881 &keyfile,
9882 &routefile,
9883 &route6file,
9884 &error,
9885 &ignore_error);
9886 g_assert_no_error (error);
9887 g_assert (reread);
9888
9889 success = nm_connection_verify (reread, &error);
9890 g_assert_no_error (error);
9891
9892 success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
9893 g_assert (success);
9894
9895 g_free (unmanaged);
9896 unmanaged = NULL;
9897 g_free (routefile);
9898 routefile = NULL;
9899 g_free (route6file);
9900 route6file = NULL;
9901 g_object_unref (reread);
9902
9903 /* Now change the connection to WEP and recheck */
9904 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
9905 g_assert (s_wsec);
9906 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
9907
9908 g_object_set (s_wsec,
9909 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
9910 NULL);
9911 nm_setting_wireless_security_set_wep_key (s_wsec, 0, "abraka dabra");
9912
9913 /* Write it back out */
9914 success = writer_update_connection (connection,
9915 TEST_SCRATCH_DIR "/network-scripts/",
9916 testfile,
9917 keyfile,
9918 &error);
9919 g_assert_no_error (error);
9920 g_assert (success);
9921
9922 g_free (keyfile);
9923 keyfile = NULL;
9924
9925 /* reread will be normalized, so we must normalize connection too. */
9926 nm_utils_normalize_connection (connection, TRUE);
9927
9928 /* re-read it for comparison */
9929 reread = connection_from_file (testfile,
9930 NULL,
9931 TYPE_WIRELESS,
9932 NULL,
9933 &unmanaged,
9934 &keyfile,
9935 &routefile,
9936 &route6file,
9937 &error,
9938 &ignore_error);
9939 g_assert_no_error (error);
9940
9941 g_assert (reread);
9942
9943 success = nm_connection_verify (reread, &error);
9944 g_assert_no_error (error);
9945
9946 success = nm_connection_compare (connection, reread,
9947 NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
9948 NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS);
9949
9950 ASSERT (success,
9951 "test_write_wifi_wpa_then_wep_with_perms", "failed to compare connections");
9952
9953 unlink (keyfile);
9954 unlink (testfile);
9955
9956 g_free (testfile);
9957 g_free (unmanaged);
9958 g_free (keyfile);
9959 g_free (routefile);
9960 g_free (route6file);
9961 g_object_unref (reread);
9962
9963 g_object_unref (connection);
9964 }
9965
9966 static void
9967 test_write_wifi_dynamic_wep_leap (void)
9968 {
9969 NMConnection *connection;
9970 NMConnection *reread;
9971 NMSettingConnection *s_con;
9972 NMSettingWireless *s_wifi;
9973 NMSettingWirelessSecurity *s_wsec;
9974 NMSetting8021x *s_8021x;
9975 NMSettingIP4Config *s_ip4;
9976 NMSettingIP6Config *s_ip6;
9977 char *uuid;
9978 gboolean success;
9979 GError *error = NULL;
9980 char *testfile = NULL;
9981 char *unmanaged = NULL;
9982 char *keyfile = NULL;
9983 char *routefile = NULL;
9984 char *route6file = NULL;
9985 gboolean ignore_error = FALSE;
9986 GByteArray *ssid;
9987 const char *ssid_data = "blahblah";
9988 shvarFile *ifcfg;
9989 char *tmp;
9990
9991 connection = nm_connection_new ();
9992 g_assert (connection);
9993
9994 /* Connection setting */
9995 s_con = (NMSettingConnection *) nm_setting_connection_new ();
9996 g_assert (s_con);
9997 nm_connection_add_setting (connection, NM_SETTING (s_con));
9998
9999 uuid = nm_utils_uuid_generate ();
10000 g_object_set (s_con,
10001 NM_SETTING_CONNECTION_ID, "Test Write Wifi Dynamic WEP LEAP",
10002 NM_SETTING_CONNECTION_UUID, uuid,
10003 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
10004 NULL);
10005 g_free (uuid);
10006
10007 /* Wifi setting */
10008 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
10009 g_assert (s_wifi);
10010 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
10011
10012 ssid = g_byte_array_sized_new (strlen (ssid_data));
10013 g_byte_array_append (ssid, (const unsigned char *) ssid_data, strlen (ssid_data));
10014
10015 g_object_set (s_wifi,
10016 NM_SETTING_WIRELESS_SSID, ssid,
10017 NM_SETTING_WIRELESS_MODE, "infrastructure",
10018 NULL);
10019
10020 g_byte_array_free (ssid, TRUE);
10021
10022 /* Wireless security setting */
10023 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
10024 g_assert (s_wsec);
10025 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
10026
10027 g_object_set (s_wsec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", NULL);
10028
10029 /* Wireless security setting */
10030 s_8021x = (NMSetting8021x *) nm_setting_802_1x_new ();
10031 g_assert (s_8021x);
10032 nm_connection_add_setting (connection, NM_SETTING (s_8021x));
10033
10034 nm_setting_802_1x_add_eap_method (s_8021x, "leap");
10035
10036 g_object_set (s_8021x,
10037 NM_SETTING_802_1X_IDENTITY, "Bill Smith",
10038 NM_SETTING_802_1X_PASSWORD, ";alkdfja;dslkfjsad;lkfjsadf",
10039 NULL);
10040
10041 /* IP4 setting */
10042 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10043 g_assert (s_ip4);
10044 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
10045 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10046
10047 /* IP6 setting */
10048 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10049 g_assert (s_ip6);
10050 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10051
10052 g_object_set (s_ip6,
10053 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10054 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10055 NULL);
10056
10057 success = nm_connection_verify (connection, &error);
10058 g_assert_no_error (error);
10059 g_assert (success);
10060
10061 /* Save the ifcfg */
10062 success = writer_new_connection (connection,
10063 TEST_SCRATCH_DIR "/network-scripts/",
10064 &testfile,
10065 &error);
10066 g_assert_no_error (error);
10067 g_assert (success);
10068 g_assert (testfile);
10069
10070 /* reread will be normalized, so we must normalize connection too. */
10071 nm_utils_normalize_connection (connection, TRUE);
10072
10073 /* re-read the connection for comparison */
10074 reread = connection_from_file (testfile,
10075 NULL,
10076 TYPE_WIRELESS,
10077 NULL,
10078 &unmanaged,
10079 &keyfile,
10080 &routefile,
10081 &route6file,
10082 &error,
10083 &ignore_error);
10084 g_assert_no_error (error);
10085 g_assert (reread);
10086 g_assert (keyfile);
10087 unlink (keyfile);
10088
10089 success = nm_connection_verify (reread, &error);
10090 g_assert_no_error (error);
10091 g_assert (success);
10092
10093 success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
10094 g_assert (success);
10095
10096 /* Check and make sure that an "old-school" LEAP (Network EAP) connection
10097 * did not get written. Check first that the auth alg is not set to "LEAP"
10098 * and next that the only IEEE 802.1x EAP method is "LEAP".
10099 */
10100 ifcfg = svNewFile (testfile);
10101 g_assert (ifcfg);
10102 tmp = svGetValue (ifcfg, "SECURITYMODE", FALSE);
10103 g_assert_cmpstr (tmp, ==, NULL);
10104 g_free (tmp);
10105
10106 tmp = svGetValue (ifcfg, "IEEE_8021X_EAP_METHODS", FALSE);
10107 g_assert_cmpstr (tmp, ==, "LEAP");
10108 g_free (tmp);
10109
10110 svCloseFile (ifcfg);
10111 unlink (testfile);
10112
10113 g_free (testfile);
10114 g_free (unmanaged);
10115 g_free (keyfile);
10116 g_free (routefile);
10117 g_free (route6file);
10118 g_object_unref (connection);
10119 g_object_unref (reread);
10120 }
10121
10122 #define TEST_IFCFG_IBFT_DHCP TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft-dhcp"
10123
10124 static void
10125 test_read_ibft_dhcp (void)
10126 {
10127 NMConnection *connection;
10128 NMSettingConnection *s_con;
10129 NMSettingWired *s_wired;
10130 NMSettingIP4Config *s_ip4;
10131 char *unmanaged = NULL;
10132 char *keyfile = NULL;
10133 char *routefile = NULL;
10134 char *route6file = NULL;
10135 gboolean ignore_error = FALSE;
10136 GError *error = NULL;
10137 const char *tmp;
10138 const GByteArray *array;
10139 char expected_mac_address[ETH_ALEN] = { 0x00, 0x33, 0x21, 0x98, 0xb9, 0xf1 };
10140 const char *expected_id = "System test-ibft-dhcp";
10141 guint64 expected_timestamp = 0;
10142
10143 connection = connection_from_file (TEST_IFCFG_IBFT_DHCP,
10144 NULL,
10145 TYPE_ETHERNET,
10146 TEST_IFCFG_DIR "/iscsiadm-test-dhcp",
10147 &unmanaged,
10148 &keyfile,
10149 &routefile,
10150 &route6file,
10151 &error,
10152 &ignore_error);
10153 ASSERT (connection != NULL,
10154 "ibft-dhcp-read", "failed to read %s: %s", TEST_IFCFG_IBFT_DHCP, error->message);
10155
10156 ASSERT (nm_connection_verify (connection, &error),
10157 "ibft-dhcp-verify", "failed to verify %s: %s", TEST_IFCFG_IBFT_DHCP, error->message);
10158
10159 /* ===== CONNECTION SETTING ===== */
10160
10161 s_con = nm_connection_get_setting_connection (connection);
10162 ASSERT (s_con != NULL,
10163 "ibft-dhcp-verify-connection", "failed to verify %s: missing %s setting",
10164 TEST_IFCFG_IBFT_DHCP,
10165 NM_SETTING_CONNECTION_SETTING_NAME);
10166
10167 /* ID */
10168 tmp = nm_setting_connection_get_id (s_con);
10169 ASSERT (tmp != NULL,
10170 "ibft-dhcp-verify-connection", "failed to verify %s: missing %s / %s key",
10171 TEST_IFCFG_IBFT_DHCP,
10172 NM_SETTING_CONNECTION_SETTING_NAME,
10173 NM_SETTING_CONNECTION_ID);
10174 ASSERT (strcmp (tmp, expected_id) == 0,
10175 "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s / %s key value",
10176 TEST_IFCFG_IBFT_DHCP,
10177 NM_SETTING_CONNECTION_SETTING_NAME,
10178 NM_SETTING_CONNECTION_ID);
10179
10180 /* UUID can't be tested if the ifcfg does not contain the UUID key, because
10181 * the UUID is generated on the full path of the ifcfg file, which can change
10182 * depending on where the tests are run.
10183 */
10184
10185 /* Timestamp */
10186 ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
10187 "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10188 TEST_IFCFG_IBFT_DHCP,
10189 NM_SETTING_CONNECTION_SETTING_NAME,
10190 NM_SETTING_CONNECTION_TIMESTAMP);
10191
10192 /* Autoconnect */
10193 ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
10194 "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10195 TEST_IFCFG_IBFT_DHCP,
10196 NM_SETTING_CONNECTION_SETTING_NAME,
10197 NM_SETTING_CONNECTION_AUTOCONNECT);
10198
10199 /* Read-only */
10200 ASSERT (nm_setting_connection_get_read_only (s_con) == TRUE,
10201 "ibft-dhcp-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10202 TEST_IFCFG_IBFT_DHCP,
10203 NM_SETTING_CONNECTION_SETTING_NAME,
10204 NM_SETTING_CONNECTION_READ_ONLY);
10205
10206 /* ===== WIRED SETTING ===== */
10207
10208 s_wired = nm_connection_get_setting_wired (connection);
10209 ASSERT (s_wired != NULL,
10210 "ibft-dhcp-verify-wired", "failed to verify %s: missing %s setting",
10211 TEST_IFCFG_IBFT_DHCP,
10212 NM_SETTING_WIRED_SETTING_NAME);
10213
10214 /* MAC address */
10215 array = nm_setting_wired_get_mac_address (s_wired);
10216 ASSERT (array != NULL,
10217 "ibft-dhcp-verify-wired", "failed to verify %s: missing %s / %s key",
10218 TEST_IFCFG_IBFT_DHCP,
10219 NM_SETTING_WIRED_SETTING_NAME,
10220 NM_SETTING_WIRED_MAC_ADDRESS);
10221 ASSERT (array->len == ETH_ALEN,
10222 "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
10223 TEST_IFCFG_IBFT_DHCP,
10224 NM_SETTING_WIRED_SETTING_NAME,
10225 NM_SETTING_WIRED_MAC_ADDRESS);
10226 ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
10227 "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value",
10228 TEST_IFCFG_IBFT_DHCP,
10229 NM_SETTING_WIRED_SETTING_NAME,
10230 NM_SETTING_WIRED_MAC_ADDRESS);
10231
10232 ASSERT (nm_setting_wired_get_mtu (s_wired) == 0,
10233 "ibft-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value",
10234 TEST_IFCFG_IBFT_DHCP,
10235 NM_SETTING_WIRED_SETTING_NAME,
10236 NM_SETTING_WIRED_MTU);
10237
10238 /* ===== IPv4 SETTING ===== */
10239
10240 s_ip4 = nm_connection_get_setting_ip4_config (connection);
10241 ASSERT (s_ip4 != NULL,
10242 "ibft-dhcp-verify-ip4", "failed to verify %s: missing %s setting",
10243 TEST_IFCFG_IBFT_DHCP,
10244 NM_SETTING_IP4_CONFIG_SETTING_NAME);
10245
10246 /* Method */
10247 tmp = nm_setting_ip4_config_get_method (s_ip4);
10248 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0,
10249 "ibft-dhcp-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
10250 TEST_IFCFG_IBFT_DHCP,
10251 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10252 NM_SETTING_IP4_CONFIG_METHOD);
10253
10254 g_free (unmanaged);
10255 g_free (keyfile);
10256 g_free (routefile);
10257 g_free (route6file);
10258 g_object_unref (connection);
10259 }
10260
10261 #define TEST_IFCFG_IBFT_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-ibft-static"
10262
10263 static void
10264 test_read_ibft_static (void)
10265 {
10266 NMConnection *connection;
10267 NMSettingConnection *s_con;
10268 NMSettingWired *s_wired;
10269 NMSettingIP4Config *s_ip4;
10270 char *unmanaged = NULL;
10271 char *keyfile = NULL;
10272 char *routefile = NULL;
10273 char *route6file = NULL;
10274 gboolean ignore_error = FALSE;
10275 GError *error = NULL;
10276 const char *tmp;
10277 const GByteArray *array;
10278 char expected_mac_address[ETH_ALEN] = { 0x00, 0x33, 0x21, 0x98, 0xb9, 0xf0 };
10279 const char *expected_id = "System test-ibft-static";
10280 guint64 expected_timestamp = 0;
10281 const char *expected_dns1 = "10.16.255.2";
10282 const char *expected_dns2 = "10.16.255.3";
10283 guint32 addr;
10284 const char *expected_address1 = "192.168.32.72";
10285 const char *expected_address1_gw = "192.168.35.254";
10286 NMIP4Address *ip4_addr;
10287
10288 connection = connection_from_file (TEST_IFCFG_IBFT_STATIC,
10289 NULL,
10290 TYPE_ETHERNET,
10291 TEST_IFCFG_DIR "/iscsiadm-test-static",
10292 &unmanaged,
10293 &keyfile,
10294 &routefile,
10295 &route6file,
10296 &error,
10297 &ignore_error);
10298 ASSERT (connection != NULL,
10299 "ibft-static-read", "failed to read %s: %s", TEST_IFCFG_IBFT_STATIC, error->message);
10300
10301 ASSERT (nm_connection_verify (connection, &error),
10302 "ibft-static-verify", "failed to verify %s: %s", TEST_IFCFG_IBFT_STATIC, error->message);
10303
10304 /* ===== CONNECTION SETTING ===== */
10305
10306 s_con = nm_connection_get_setting_connection (connection);
10307 ASSERT (s_con != NULL,
10308 "ibft-static-verify-connection", "failed to verify %s: missing %s setting",
10309 TEST_IFCFG_IBFT_STATIC,
10310 NM_SETTING_CONNECTION_SETTING_NAME);
10311
10312 /* ID */
10313 tmp = nm_setting_connection_get_id (s_con);
10314 ASSERT (tmp != NULL,
10315 "ibft-static-verify-connection", "failed to verify %s: missing %s / %s key",
10316 TEST_IFCFG_IBFT_STATIC,
10317 NM_SETTING_CONNECTION_SETTING_NAME,
10318 NM_SETTING_CONNECTION_ID);
10319 ASSERT (strcmp (tmp, expected_id) == 0,
10320 "ibft-static-verify-connection", "failed to verify %s: unexpected %s / %s key value",
10321 TEST_IFCFG_IBFT_STATIC,
10322 NM_SETTING_CONNECTION_SETTING_NAME,
10323 NM_SETTING_CONNECTION_ID);
10324
10325 /* UUID can't be tested if the ifcfg does not contain the UUID key, because
10326 * the UUID is generated on the full path of the ifcfg file, which can change
10327 * depending on where the tests are run.
10328 */
10329
10330 /* Timestamp */
10331 ASSERT (nm_setting_connection_get_timestamp (s_con) == expected_timestamp,
10332 "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10333 TEST_IFCFG_IBFT_STATIC,
10334 NM_SETTING_CONNECTION_SETTING_NAME,
10335 NM_SETTING_CONNECTION_TIMESTAMP);
10336
10337 /* Autoconnect */
10338 ASSERT (nm_setting_connection_get_autoconnect (s_con) == TRUE,
10339 "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10340 TEST_IFCFG_IBFT_STATIC,
10341 NM_SETTING_CONNECTION_SETTING_NAME,
10342 NM_SETTING_CONNECTION_AUTOCONNECT);
10343
10344 /* Read-only */
10345 ASSERT (nm_setting_connection_get_read_only (s_con) == TRUE,
10346 "ibft-static-verify-connection", "failed to verify %s: unexpected %s /%s key value",
10347 TEST_IFCFG_IBFT_STATIC,
10348 NM_SETTING_CONNECTION_SETTING_NAME,
10349 NM_SETTING_CONNECTION_READ_ONLY);
10350
10351 /* ===== WIRED SETTING ===== */
10352
10353 s_wired = nm_connection_get_setting_wired (connection);
10354 ASSERT (s_wired != NULL,
10355 "ibft-static-verify-wired", "failed to verify %s: missing %s setting",
10356 TEST_IFCFG_IBFT_STATIC,
10357 NM_SETTING_WIRED_SETTING_NAME);
10358
10359 /* MAC address */
10360 array = nm_setting_wired_get_mac_address (s_wired);
10361 ASSERT (array != NULL,
10362 "ibft-static-verify-wired", "failed to verify %s: missing %s / %s key",
10363 TEST_IFCFG_IBFT_STATIC,
10364 NM_SETTING_WIRED_SETTING_NAME,
10365 NM_SETTING_WIRED_MAC_ADDRESS);
10366 ASSERT (array->len == ETH_ALEN,
10367 "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value length",
10368 TEST_IFCFG_IBFT_STATIC,
10369 NM_SETTING_WIRED_SETTING_NAME,
10370 NM_SETTING_WIRED_MAC_ADDRESS);
10371 ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
10372 "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
10373 TEST_IFCFG_IBFT_STATIC,
10374 NM_SETTING_WIRED_SETTING_NAME,
10375 NM_SETTING_WIRED_MAC_ADDRESS);
10376
10377 ASSERT (nm_setting_wired_get_mtu (s_wired) == 0,
10378 "ibft-static-verify-wired", "failed to verify %s: unexpected %s / %s key value",
10379 TEST_IFCFG_IBFT_STATIC,
10380 NM_SETTING_WIRED_SETTING_NAME,
10381 NM_SETTING_WIRED_MTU);
10382
10383 /* ===== IPv4 SETTING ===== */
10384
10385 s_ip4 = nm_connection_get_setting_ip4_config (connection);
10386 ASSERT (s_ip4 != NULL,
10387 "ibft-static-verify-ip4", "failed to verify %s: missing %s setting",
10388 TEST_IFCFG_IBFT_STATIC,
10389 NM_SETTING_IP4_CONFIG_SETTING_NAME);
10390
10391 /* Method */
10392 tmp = nm_setting_ip4_config_get_method (s_ip4);
10393 ASSERT (strcmp (tmp, NM_SETTING_IP4_CONFIG_METHOD_MANUAL) == 0,
10394 "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
10395 TEST_IFCFG_IBFT_STATIC,
10396 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10397 NM_SETTING_IP4_CONFIG_METHOD);
10398
10399 /* DNS Addresses */
10400 ASSERT (nm_setting_ip4_config_get_num_dns (s_ip4) == 2,
10401 "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
10402 TEST_IFCFG_IBFT_STATIC,
10403 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10404 NM_SETTING_IP4_CONFIG_DNS);
10405
10406 ASSERT (inet_pton (AF_INET, expected_dns1, &addr) > 0,
10407 "ibft-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #1",
10408 TEST_IFCFG_IBFT_STATIC,
10409 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10410 NM_SETTING_IP4_CONFIG_DNS);
10411 ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 0) == addr,
10412 "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #1",
10413 TEST_IFCFG_IBFT_STATIC,
10414 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10415 NM_SETTING_IP4_CONFIG_DNS);
10416
10417 ASSERT (inet_pton (AF_INET, expected_dns2, &addr) > 0,
10418 "ibft-static-verify-ip4", "failed to verify %s: couldn't convert DNS IP address #2",
10419 TEST_IFCFG_IBFT_STATIC,
10420 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10421 NM_SETTING_IP4_CONFIG_DNS);
10422 ASSERT (nm_setting_ip4_config_get_dns (s_ip4, 1) == addr,
10423 "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value #2",
10424 TEST_IFCFG_IBFT_STATIC,
10425 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10426 NM_SETTING_IP4_CONFIG_DNS);
10427
10428 ASSERT (nm_setting_ip4_config_get_num_addresses (s_ip4) == 1,
10429 "ibft-static-verify-ip4", "failed to verify %s: unexpected %s / %s key value",
10430 TEST_IFCFG_IBFT_STATIC,
10431 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10432 NM_SETTING_IP4_CONFIG_DNS);
10433
10434 /* Address #1 */
10435 ip4_addr = nm_setting_ip4_config_get_address (s_ip4, 0);
10436 ASSERT (ip4_addr,
10437 "ibft-static-verify-ip4", "failed to verify %s: missing IP4 address #1",
10438 TEST_IFCFG_IBFT_STATIC,
10439 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10440 NM_SETTING_IP4_CONFIG_ADDRESSES);
10441
10442 ASSERT (nm_ip4_address_get_prefix (ip4_addr) == 22,
10443 "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 prefix",
10444 TEST_IFCFG_IBFT_STATIC,
10445 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10446 NM_SETTING_IP4_CONFIG_ADDRESSES);
10447
10448 ASSERT (inet_pton (AF_INET, expected_address1, &addr) > 0,
10449 "ibft-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1",
10450 TEST_IFCFG_IBFT_STATIC,
10451 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10452 NM_SETTING_IP4_CONFIG_DNS);
10453 ASSERT (nm_ip4_address_get_address (ip4_addr) == addr,
10454 "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1",
10455 TEST_IFCFG_IBFT_STATIC,
10456 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10457 NM_SETTING_IP4_CONFIG_ADDRESSES);
10458
10459 ASSERT (inet_pton (AF_INET, expected_address1_gw, &addr) > 0,
10460 "ibft-static-verify-ip4", "failed to verify %s: couldn't convert IP address #1 gateway",
10461 TEST_IFCFG_IBFT_STATIC,
10462 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10463 NM_SETTING_IP4_CONFIG_ADDRESSES);
10464 ASSERT (nm_ip4_address_get_gateway (ip4_addr) == addr,
10465 "ibft-static-verify-ip4", "failed to verify %s: unexpected IP4 address #1 gateway",
10466 TEST_IFCFG_IBFT_STATIC,
10467 NM_SETTING_IP4_CONFIG_SETTING_NAME,
10468 NM_SETTING_IP4_CONFIG_ADDRESSES);
10469
10470 g_free (unmanaged);
10471 g_free (keyfile);
10472 g_free (routefile);
10473 g_free (route6file);
10474 g_object_unref (connection);
10475 }
10476
10477 static void
10478 test_read_ibft_malformed (const char *name, const char *iscsiadm_path)
10479 {
10480 NMConnection *connection;
10481 char *unmanaged = NULL;
10482 char *keyfile = NULL;
10483 char *routefile = NULL;
10484 char *route6file = NULL;
10485 gboolean ignore_error = FALSE;
10486 GError *error = NULL;
10487
10488 g_assert (g_file_test (iscsiadm_path, G_FILE_TEST_EXISTS));
10489
10490 connection = connection_from_file (TEST_IFCFG_IBFT_STATIC,
10491 NULL,
10492 TYPE_ETHERNET,
10493 iscsiadm_path,
10494 &unmanaged,
10495 &keyfile,
10496 &routefile,
10497 &route6file,
10498 &error,
10499 &ignore_error);
10500 ASSERT (connection == NULL,
10501 name, "unexpectedly able to read %s", TEST_IFCFG_IBFT_STATIC);
10502
10503 g_free (unmanaged);
10504 g_free (keyfile);
10505 g_free (routefile);
10506 g_free (route6file);
10507 }
10508
10509 static void
10510 test_write_wired_qeth_dhcp (void)
10511 {
10512 NMConnection *connection;
10513 NMConnection *reread;
10514 NMSettingConnection *s_con;
10515 NMSettingWired *s_wired;
10516 NMSettingIP4Config *s_ip4;
10517 NMSettingIP6Config *s_ip6;
10518 char *uuid;
10519 GPtrArray *subchans;
10520 gboolean success;
10521 GError *error = NULL;
10522 char *testfile = NULL;
10523 char *unmanaged = NULL;
10524 char *keyfile = NULL;
10525 char *routefile = NULL;
10526 char *route6file = NULL;
10527 gboolean ignore_error = FALSE;
10528
10529 connection = nm_connection_new ();
10530
10531 /* Connection setting */
10532 s_con = (NMSettingConnection *) nm_setting_connection_new ();
10533 nm_connection_add_setting (connection, NM_SETTING (s_con));
10534
10535 uuid = nm_utils_uuid_generate ();
10536 g_object_set (s_con,
10537 NM_SETTING_CONNECTION_ID, "Test Write Wired qeth Static",
10538 NM_SETTING_CONNECTION_UUID, uuid,
10539 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
10540 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
10541 NULL);
10542 g_free (uuid);
10543
10544 /* Wired setting */
10545 s_wired = (NMSettingWired *) nm_setting_wired_new ();
10546 nm_connection_add_setting (connection, NM_SETTING (s_wired));
10547
10548 subchans = g_ptr_array_sized_new (3);
10549 g_ptr_array_add (subchans, "0.0.600");
10550 g_ptr_array_add (subchans, "0.0.601");
10551 g_ptr_array_add (subchans, "0.0.602");
10552 g_object_set (s_wired,
10553 NM_SETTING_WIRED_S390_SUBCHANNELS, subchans,
10554 NM_SETTING_WIRED_S390_NETTYPE, "qeth",
10555 NULL);
10556 g_ptr_array_free (subchans, TRUE);
10557
10558 nm_setting_wired_add_s390_option (s_wired, "portname", "FOOBAR");
10559 nm_setting_wired_add_s390_option (s_wired, "portno", "1");
10560 nm_setting_wired_add_s390_option (s_wired, "layer2", "0");
10561 nm_setting_wired_add_s390_option (s_wired, "protocol", "blahbalh");
10562
10563 /* IP4 setting */
10564 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10565 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10566
10567 g_object_set (s_ip4,
10568 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
10569 NULL);
10570
10571 /* IP6 setting */
10572 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10573 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10574
10575 g_object_set (s_ip6,
10576 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10577 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10578 NULL);
10579
10580 /* Verify */
10581 ASSERT (nm_connection_verify (connection, &error) == TRUE,
10582 "wired-qeth-dhcp-write", "failed to verify connection: %s",
10583 (error && error->message) ? error->message : "(unknown)");
10584
10585 /* Save the ifcfg */
10586 success = writer_new_connection (connection,
10587 TEST_SCRATCH_DIR "/network-scripts/",
10588 &testfile,
10589 &error);
10590 ASSERT (success == TRUE,
10591 "wired-qeth-dhcp-write", "failed to write connection to disk: %s",
10592 (error && error->message) ? error->message : "(unknown)");
10593
10594 ASSERT (testfile != NULL,
10595 "wired-qeth-dhcp-write", "didn't get ifcfg file path back after writing connection");
10596
10597 /* reread will be normalized, so we must normalize connection too. */
10598 nm_utils_normalize_connection (connection, TRUE);
10599
10600 /* re-read the connection for comparison */
10601 reread = connection_from_file (testfile,
10602 NULL,
10603 TYPE_ETHERNET,
10604 NULL,
10605 &unmanaged,
10606 &keyfile,
10607 &routefile,
10608 &route6file,
10609 &error,
10610 &ignore_error);
10611 unlink (testfile);
10612
10613 ASSERT (reread != NULL,
10614 "wired-qeth-dhcp-write-reread", "failed to read %s: %s", testfile, error->message);
10615
10616 ASSERT (nm_connection_verify (reread, &error),
10617 "wired-qeth-dhcp-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
10618
10619 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
10620 "wired-qeth-dhcp-write", "written and re-read connection weren't the same.");
10621
10622 if (route6file)
10623 unlink (route6file);
10624
10625 g_free (testfile);
10626 g_free (unmanaged);
10627 g_free (keyfile);
10628 g_free (routefile);
10629 g_free (route6file);
10630 g_object_unref (connection);
10631 g_object_unref (reread);
10632 }
10633
10634 static void
10635 test_write_wired_ctc_dhcp (void)
10636 {
10637 NMConnection *connection;
10638 NMConnection *reread;
10639 NMSettingConnection *s_con;
10640 NMSettingWired *s_wired;
10641 NMSettingIP4Config *s_ip4;
10642 NMSettingIP6Config *s_ip6;
10643 char *uuid;
10644 GPtrArray *subchans;
10645 gboolean success;
10646 GError *error = NULL;
10647 char *testfile = NULL;
10648 char *unmanaged = NULL;
10649 char *keyfile = NULL;
10650 char *routefile = NULL;
10651 char *route6file = NULL;
10652 gboolean ignore_error = FALSE;
10653 shvarFile *ifcfg;
10654 char *tmp;
10655
10656 connection = nm_connection_new ();
10657 g_assert (connection);
10658
10659 /* Connection setting */
10660 s_con = (NMSettingConnection *) nm_setting_connection_new ();
10661 g_assert (s_con);
10662 nm_connection_add_setting (connection, NM_SETTING (s_con));
10663
10664 uuid = nm_utils_uuid_generate ();
10665 g_object_set (s_con,
10666 NM_SETTING_CONNECTION_ID, "Test Write Wired ctc Static",
10667 NM_SETTING_CONNECTION_UUID, uuid,
10668 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
10669 NULL);
10670 g_free (uuid);
10671
10672 /* Wired setting */
10673 s_wired = (NMSettingWired *) nm_setting_wired_new ();
10674 g_assert (s_wired);
10675 nm_connection_add_setting (connection, NM_SETTING (s_wired));
10676
10677 subchans = g_ptr_array_sized_new (2);
10678 g_ptr_array_add (subchans, "0.0.600");
10679 g_ptr_array_add (subchans, "0.0.601");
10680 g_object_set (s_wired,
10681 NM_SETTING_WIRED_S390_SUBCHANNELS, subchans,
10682 NM_SETTING_WIRED_S390_NETTYPE, "ctc",
10683 NULL);
10684 g_ptr_array_free (subchans, TRUE);
10685 nm_setting_wired_add_s390_option (s_wired, "ctcprot", "0");
10686
10687 /* IP4 setting */
10688 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10689 g_assert (s_ip4);
10690 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10691 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
10692
10693 /* IP6 setting */
10694 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10695 g_assert (s_ip6);
10696 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10697
10698 g_object_set (s_ip6,
10699 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10700 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10701 NULL);
10702
10703 /* Verify */
10704 success = nm_connection_verify (connection, &error);
10705 g_assert_no_error (error);
10706 g_assert (success);
10707
10708 /* Save the ifcfg */
10709 success = writer_new_connection (connection,
10710 TEST_SCRATCH_DIR "/network-scripts/",
10711 &testfile,
10712 &error);
10713 g_assert_no_error (error);
10714 g_assert (success);
10715 g_assert (testfile != NULL);
10716
10717 /* Ensure the CTCPROT item gets written out as it's own option */
10718 ifcfg = svNewFile (testfile);
10719 g_assert (ifcfg);
10720
10721 tmp = svGetValue (ifcfg, "CTCPROT", TRUE);
10722 g_assert (tmp);
10723 g_assert_cmpstr (tmp, ==, "0");
10724 g_free (tmp);
10725
10726 /* And that it's not in the generic OPTIONS string */
10727 tmp = svGetValue (ifcfg, "OPTIONS", TRUE);
10728 g_assert (tmp == NULL);
10729 g_free (tmp);
10730
10731 svCloseFile (ifcfg);
10732
10733 /* reread will be normalized, so we must normalize connection too. */
10734 nm_utils_normalize_connection (connection, TRUE);
10735
10736 /* re-read the connection for comparison */
10737 reread = connection_from_file (testfile,
10738 NULL,
10739 TYPE_ETHERNET,
10740 NULL,
10741 &unmanaged,
10742 &keyfile,
10743 &routefile,
10744 &route6file,
10745 &error,
10746 &ignore_error);
10747 unlink (testfile);
10748
10749 g_assert (reread);
10750 success = nm_connection_verify (reread, &error);
10751 g_assert_no_error (error);
10752 g_assert (success);
10753
10754 success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
10755 g_assert (success);
10756
10757 if (route6file)
10758 unlink (route6file);
10759
10760 g_free (testfile);
10761 g_free (unmanaged);
10762 g_free (keyfile);
10763 g_free (routefile);
10764 g_free (route6file);
10765 g_object_unref (connection);
10766 g_object_unref (reread);
10767 }
10768
10769 static void
10770 test_write_permissions (void)
10771 {
10772 NMConnection *connection;
10773 NMConnection *reread;
10774 NMSettingConnection *s_con;
10775 NMSettingWired *s_wired;
10776 NMSettingIP4Config *s_ip4;
10777 NMSettingIP6Config *s_ip6;
10778 char *uuid;
10779 gboolean success;
10780 GError *error = NULL;
10781 char *testfile = NULL;
10782 char *unmanaged = NULL;
10783 char *keyfile = NULL;
10784 char *routefile = NULL;
10785 char *route6file = NULL;
10786 gboolean ignore_error = FALSE;
10787
10788 connection = nm_connection_new ();
10789
10790 /* Connection setting */
10791 s_con = (NMSettingConnection *) nm_setting_connection_new ();
10792 nm_connection_add_setting (connection, NM_SETTING (s_con));
10793
10794 uuid = nm_utils_uuid_generate ();
10795 g_object_set (s_con,
10796 NM_SETTING_CONNECTION_ID, "Test Write Permissions",
10797 NM_SETTING_CONNECTION_UUID, uuid,
10798 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
10799 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
10800 NULL);
10801 g_free (uuid);
10802
10803 nm_setting_connection_add_permission (s_con, "user", "blahblah", NULL);
10804 nm_setting_connection_add_permission (s_con, "user", "foobar", NULL);
10805 nm_setting_connection_add_permission (s_con, "user", "asdfasdf", NULL);
10806
10807 /* Wired setting */
10808 s_wired = (NMSettingWired *) nm_setting_wired_new ();
10809 nm_connection_add_setting (connection, NM_SETTING (s_wired));
10810
10811 /* IP4 setting */
10812 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10813 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10814
10815 g_object_set (s_ip4,
10816 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
10817 NULL);
10818
10819 /* IP6 setting */
10820 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10821 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10822
10823 g_object_set (s_ip6,
10824 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10825 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10826 NULL);
10827
10828 /* Verify */
10829 ASSERT (nm_connection_verify (connection, &error) == TRUE,
10830 "permissions-write", "failed to verify connection: %s",
10831 (error && error->message) ? error->message : "(unknown)");
10832
10833 /* Save the ifcfg */
10834 success = writer_new_connection (connection,
10835 TEST_SCRATCH_DIR "/network-scripts/",
10836 &testfile,
10837 &error);
10838 ASSERT (success == TRUE,
10839 "permissions-write", "failed to write connection to disk: %s",
10840 (error && error->message) ? error->message : "(unknown)");
10841
10842 ASSERT (testfile != NULL,
10843 "permissions-write", "didn't get ifcfg file path back after writing connection");
10844
10845 /* reread will be normalized, so we must normalize connection too. */
10846 nm_utils_normalize_connection (connection, TRUE);
10847
10848 /* re-read the connection for comparison */
10849 reread = connection_from_file (testfile,
10850 NULL,
10851 TYPE_ETHERNET,
10852 NULL,
10853 &unmanaged,
10854 &keyfile,
10855 &routefile,
10856 &route6file,
10857 &error,
10858 &ignore_error);
10859 unlink (testfile);
10860
10861 ASSERT (reread != NULL,
10862 "permissions-write-reread", "failed to read %s: %s", testfile, error->message);
10863
10864 ASSERT (nm_connection_verify (reread, &error),
10865 "permissions-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
10866
10867 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
10868 "permissions-write", "written and re-read connection weren't the same.");
10869
10870 if (route6file)
10871 unlink (route6file);
10872
10873 g_free (testfile);
10874 g_free (unmanaged);
10875 g_free (keyfile);
10876 g_free (routefile);
10877 g_free (route6file);
10878 g_object_unref (connection);
10879 g_object_unref (reread);
10880 }
10881
10882 static void
10883 test_write_wifi_wep_agent_keys (void)
10884 {
10885 NMConnection *connection;
10886 NMConnection *reread;
10887 NMSettingConnection *s_con;
10888 NMSettingWireless *s_wifi;
10889 NMSettingWirelessSecurity *s_wsec;
10890 NMSettingIP4Config *s_ip4;
10891 NMSettingIP6Config *s_ip6;
10892 char *uuid;
10893 const char *str_ssid = "foobarbaz";
10894 GByteArray *ssid;
10895 gboolean success;
10896 GError *error = NULL;
10897 char *testfile = NULL;
10898 char *unmanaged = NULL;
10899 char *keyfile = NULL;
10900 char *routefile = NULL;
10901 char *route6file = NULL;
10902 gboolean ignore_error = FALSE;
10903
10904 connection = nm_connection_new ();
10905 g_assert (connection != NULL);
10906
10907 /* Connection setting */
10908 s_con = (NMSettingConnection *) nm_setting_connection_new ();
10909 g_assert (s_con);
10910 nm_connection_add_setting (connection, NM_SETTING (s_con));
10911
10912 uuid = nm_utils_uuid_generate ();
10913 g_object_set (s_con,
10914 NM_SETTING_CONNECTION_ID, "Test Write Wifi WEP Agent Owned",
10915 NM_SETTING_CONNECTION_UUID, uuid,
10916 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME,
10917 NULL);
10918 g_free (uuid);
10919
10920 /* IP4 setting */
10921 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
10922 g_assert (s_ip4);
10923 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
10924 g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
10925
10926 /* IP6 setting */
10927 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
10928 g_assert (s_ip6);
10929 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
10930
10931 g_object_set (s_ip6,
10932 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
10933 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
10934 NULL);
10935
10936 /* Wifi setting */
10937 s_wifi = (NMSettingWireless *) nm_setting_wireless_new ();
10938 g_assert (s_wifi);
10939 nm_connection_add_setting (connection, NM_SETTING (s_wifi));
10940
10941 ssid = g_byte_array_sized_new (strlen (str_ssid));
10942 g_byte_array_append (ssid, (guint8 *) str_ssid, strlen (str_ssid));
10943 g_object_set (s_wifi,
10944 NM_SETTING_WIRELESS_SSID, ssid,
10945 NM_SETTING_WIRELESS_MODE, "infrastructure",
10946 NULL);
10947 g_byte_array_free (ssid, TRUE);
10948
10949 /* Wifi security setting */
10950 s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new ();
10951 g_assert (s_wsec);
10952 nm_connection_add_setting (connection, NM_SETTING (s_wsec));
10953
10954 g_object_set (s_wsec,
10955 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none",
10956 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_PASSPHRASE,
10957 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, NM_SETTING_SECRET_FLAG_AGENT_OWNED,
10958 NULL);
10959 nm_setting_wireless_security_set_wep_key (s_wsec, 0, "asdfdjaslfjasd;flasjdfl;aksdf");
10960
10961 /* Verify */
10962 success = nm_connection_verify (connection, &error);
10963 g_assert_no_error (error);
10964 g_assert (success);
10965
10966 /* Save the ifcfg */
10967 success = writer_new_connection (connection,
10968 TEST_SCRATCH_DIR "/network-scripts/",
10969 &testfile,
10970 &error);
10971 g_assert_no_error (error);
10972 g_assert (success);
10973 g_assert (testfile != NULL);
10974
10975 /* reread will be normalized, so we must normalize connection too. */
10976 nm_utils_normalize_connection (connection, TRUE);
10977
10978 /* re-read the connection for comparison */
10979 reread = connection_from_file (testfile,
10980 NULL,
10981 TYPE_WIRELESS,
10982 NULL,
10983 &unmanaged,
10984 &keyfile,
10985 &routefile,
10986 &route6file,
10987 &error,
10988 &ignore_error);
10989 unlink (testfile);
10990
10991 g_assert_no_error (error);
10992 g_assert (reread);
10993
10994 success = nm_connection_verify (reread, &error);
10995 g_assert_no_error (error);
10996 g_assert (success);
10997
10998 /* Remove the WEP key from the original, because it should not have been
10999 * written out to disk as it was agent-owned. The new connection should
11000 * not have any WEP keys set.
11001 * Also the new connection should not have WEP key type set.
11002 */
11003 nm_setting_wireless_security_set_wep_key (s_wsec, 0, NULL);
11004 g_object_set (s_wsec,
11005 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_UNKNOWN,
11006 NULL);
11007
11008 /* Compare original and reread */
11009 success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
11010 g_assert (success);
11011
11012 if (route6file)
11013 unlink (route6file);
11014
11015 g_free (testfile);
11016 g_free (unmanaged);
11017 g_free (keyfile);
11018 g_free (routefile);
11019 g_free (route6file);
11020 g_object_unref (connection);
11021 g_object_unref (reread);
11022 }
11023
11024 static void
11025 test_write_wired_pppoe (void)
11026 {
11027 NMConnection *connection;
11028 NMSettingConnection *s_con;
11029 NMSettingWired *s_wired;
11030 NMSettingIP4Config *s_ip4;
11031 NMSettingPPPOE *s_pppoe;
11032 NMSettingPPP *s_ppp;
11033 char *uuid;
11034 gboolean success;
11035 GError *error = NULL;
11036 char *testfile = NULL;
11037
11038 connection = nm_connection_new ();
11039
11040 /* Connection setting */
11041 s_con = (NMSettingConnection *) nm_setting_connection_new ();
11042 nm_connection_add_setting (connection, NM_SETTING (s_con));
11043
11044 uuid = nm_utils_uuid_generate ();
11045 g_object_set (s_con,
11046 NM_SETTING_CONNECTION_ID, "Test Write Wired PPPoE",
11047 NM_SETTING_CONNECTION_UUID, uuid,
11048 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11049 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
11050 NULL);
11051 g_free (uuid);
11052
11053 /* Wired setting */
11054 s_wired = (NMSettingWired *) nm_setting_wired_new ();
11055 nm_connection_add_setting (connection, NM_SETTING (s_wired));
11056
11057 /* IP4 setting */
11058 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11059 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11060
11061 g_object_set (s_ip4,
11062 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
11063 NULL);
11064
11065 /* PPPoE setting */
11066 s_pppoe = (NMSettingPPPOE *) nm_setting_pppoe_new ();
11067 nm_connection_add_setting (connection, NM_SETTING (s_pppoe));
11068
11069 g_object_set (G_OBJECT (s_pppoe),
11070 NM_SETTING_PPPOE_SERVICE, "stupid-service",
11071 NM_SETTING_PPPOE_USERNAME, "Bill Smith",
11072 NM_SETTING_PPPOE_PASSWORD, "test1",
11073 NULL);
11074
11075 /* PPP setting */
11076 s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
11077 nm_connection_add_setting (connection, NM_SETTING (s_ppp));
11078
11079 ASSERT (nm_connection_verify (connection, &error) == TRUE,
11080 "wired-pppoe-write", "failed to verify connection: %s",
11081 (error && error->message) ? error->message : "(unknown)");
11082
11083 /* Save the ifcfg */
11084 success = writer_new_connection (connection,
11085 TEST_SCRATCH_DIR "/network-scripts/",
11086 &testfile,
11087 &error);
11088 ASSERT (success == FALSE,
11089 "wired-pppoe-write", "unexpected success writing connection to disk");
11090
11091 g_object_unref (connection);
11092 }
11093
11094 static void
11095 test_write_vpn (void)
11096 {
11097 NMConnection *connection;
11098 NMSettingConnection *s_con;
11099 NMSettingIP4Config *s_ip4;
11100 NMSettingVPN *s_vpn;
11101 char *uuid;
11102 gboolean success;
11103 GError *error = NULL;
11104 char *testfile = NULL;
11105
11106 connection = nm_connection_new ();
11107
11108 /* Connection setting */
11109 s_con = (NMSettingConnection *) nm_setting_connection_new ();
11110 nm_connection_add_setting (connection, NM_SETTING (s_con));
11111
11112 uuid = nm_utils_uuid_generate ();
11113 g_object_set (s_con,
11114 NM_SETTING_CONNECTION_ID, "Test Write VPN",
11115 NM_SETTING_CONNECTION_UUID, uuid,
11116 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11117 NM_SETTING_CONNECTION_TYPE, NM_SETTING_VPN_SETTING_NAME,
11118 NULL);
11119 g_free (uuid);
11120
11121 /* VPN setting */
11122 s_vpn = (NMSettingVPN *) nm_setting_vpn_new ();
11123 nm_connection_add_setting (connection, NM_SETTING (s_vpn));
11124
11125 g_object_set (s_vpn,
11126 NM_SETTING_VPN_SERVICE_TYPE, "awesomevpn",
11127 NM_SETTING_VPN_USER_NAME, "Bill Smith",
11128 NULL);
11129
11130 nm_setting_vpn_add_data_item (s_vpn, "server", "vpn.somewhere.com");
11131 nm_setting_vpn_add_secret (s_vpn, "password", "sup3rs3cr3t");
11132
11133 /* IP4 setting */
11134 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11135 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11136
11137 g_object_set (s_ip4,
11138 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
11139 NULL);
11140
11141 ASSERT (nm_connection_verify (connection, &error) == TRUE,
11142 "vpn-write", "failed to verify connection: %s",
11143 (error && error->message) ? error->message : "(unknown)");
11144
11145 /* Save the ifcfg */
11146 success = writer_new_connection (connection,
11147 TEST_SCRATCH_DIR "/network-scripts/",
11148 &testfile,
11149 &error);
11150 ASSERT (success == FALSE,
11151 "vpn-write", "unexpected success writing connection to disk");
11152
11153 g_object_unref (connection);
11154 }
11155
11156 static void
11157 test_write_mobile_broadband (gboolean gsm)
11158 {
11159 NMConnection *connection;
11160 NMSettingConnection *s_con;
11161 NMSettingIP4Config *s_ip4;
11162 NMSettingGsm *s_gsm;
11163 NMSettingCdma *s_cdma;
11164 NMSettingPPP *s_ppp;
11165 NMSettingSerial *s_serial;
11166 char *uuid;
11167 gboolean success;
11168 GError *error = NULL;
11169 char *testfile = NULL;
11170
11171 connection = nm_connection_new ();
11172
11173 /* Connection setting */
11174 s_con = (NMSettingConnection *) nm_setting_connection_new ();
11175 nm_connection_add_setting (connection, NM_SETTING (s_con));
11176
11177 uuid = nm_utils_uuid_generate ();
11178 g_object_set (s_con,
11179 NM_SETTING_CONNECTION_ID, gsm ? "Test Write GSM" : "Test Write CDMA",
11180 NM_SETTING_CONNECTION_UUID, uuid,
11181 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11182 NM_SETTING_CONNECTION_TYPE, gsm ? NM_SETTING_GSM_SETTING_NAME : NM_SETTING_CDMA_SETTING_NAME,
11183 NULL);
11184 g_free (uuid);
11185
11186 if (gsm) {
11187 /* GSM setting */
11188 s_gsm = (NMSettingGsm *) nm_setting_gsm_new ();
11189 nm_connection_add_setting (connection, NM_SETTING (s_gsm));
11190
11191 g_object_set (s_gsm, NM_SETTING_GSM_NUMBER, "*99#", NULL);
11192 } else {
11193 /* CDMA setting */
11194 s_cdma = (NMSettingCdma *) nm_setting_cdma_new ();
11195 nm_connection_add_setting (connection, NM_SETTING (s_cdma));
11196
11197 g_object_set (s_cdma, NM_SETTING_CDMA_NUMBER, "#777", NULL);
11198 }
11199
11200 /* Serial setting */
11201 s_serial = (NMSettingSerial *) nm_setting_serial_new ();
11202 nm_connection_add_setting (connection, NM_SETTING (s_serial));
11203
11204 g_object_set (s_serial,
11205 NM_SETTING_SERIAL_BAUD, 115200,
11206 NM_SETTING_SERIAL_BITS, 8,
11207 NM_SETTING_SERIAL_PARITY, 'n',
11208 NM_SETTING_SERIAL_STOPBITS, 1,
11209 NULL);
11210
11211 /* IP4 setting */
11212 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11213 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11214
11215 g_object_set (s_ip4,
11216 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
11217 NULL);
11218
11219 /* PPP setting */
11220 s_ppp = (NMSettingPPP *) nm_setting_ppp_new ();
11221 nm_connection_add_setting (connection, NM_SETTING (s_ppp));
11222
11223 ASSERT (nm_connection_verify (connection, &error) == TRUE,
11224 "mobile-broadband-write", "failed to verify connection: %s",
11225 (error && error->message) ? error->message : "(unknown)");
11226
11227 /* Save the ifcfg */
11228 success = writer_new_connection (connection,
11229 TEST_SCRATCH_DIR "/network-scripts/",
11230 &testfile,
11231 &error);
11232 ASSERT (success == FALSE,
11233 "mobile-broadband-write", "unexpected success writing connection to disk");
11234
11235 g_object_unref (connection);
11236 }
11237
11238 #define TEST_IFCFG_BRIDGE_MAIN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-main"
11239
11240 static void
11241 test_read_bridge_main (void)
11242 {
11243 NMConnection *connection;
11244 NMSettingBridge *s_bridge;
11245 char *unmanaged = NULL;
11246 char *keyfile = NULL;
11247 char *routefile = NULL;
11248 char *route6file = NULL;
11249 gboolean ignore_error = FALSE;
11250 GError *error = NULL;
11251
11252 connection = connection_from_file (TEST_IFCFG_BRIDGE_MAIN,
11253 NULL,
11254 TYPE_ETHERNET,
11255 NULL,
11256 &unmanaged,
11257 &keyfile,
11258 &routefile,
11259 &route6file,
11260 &error,
11261 &ignore_error);
11262 g_assert (connection);
11263 g_assert (nm_connection_verify (connection, &error));
11264 g_assert_no_error (error);
11265
11266 /* ===== Bridging SETTING ===== */
11267
11268 s_bridge = nm_connection_get_setting_bridge (connection);
11269 g_assert (s_bridge);
11270 g_assert_cmpstr (nm_setting_bridge_get_interface_name (s_bridge), ==, "br0");
11271 g_assert_cmpuint (nm_setting_bridge_get_forward_delay (s_bridge), ==, 0);
11272 g_assert (nm_setting_bridge_get_stp (s_bridge));
11273 g_assert_cmpuint (nm_setting_bridge_get_priority (s_bridge), ==, 32744);
11274 g_assert_cmpuint (nm_setting_bridge_get_hello_time (s_bridge), ==, 7);
11275 g_assert_cmpuint (nm_setting_bridge_get_max_age (s_bridge), ==, 39);
11276 g_assert_cmpuint (nm_setting_bridge_get_ageing_time (s_bridge), ==, 235352);
11277
11278 g_free (unmanaged);
11279 g_free (keyfile);
11280 g_free (routefile);
11281 g_free (route6file);
11282 g_object_unref (connection);
11283 }
11284
11285 static void
11286 test_write_bridge_main (void)
11287 {
11288 NMConnection *connection;
11289 NMConnection *reread;
11290 NMSettingConnection *s_con;
11291 NMSettingBridge *s_bridge;
11292 NMSettingIP4Config *s_ip4;
11293 NMSettingIP6Config *s_ip6;
11294 char *uuid;
11295 const guint32 ip1 = htonl (0x01010103);
11296 const guint32 gw = htonl (0x01010101);
11297 const guint32 prefix = 24;
11298 NMIP4Address *addr;
11299 gboolean success;
11300 GError *error = NULL;
11301 char *testfile = NULL;
11302 char *unmanaged = NULL;
11303 char *keyfile = NULL;
11304 char *routefile = NULL;
11305 char *route6file = NULL;
11306 gboolean ignore_error = FALSE;
11307
11308 connection = nm_connection_new ();
11309 g_assert (connection);
11310
11311 /* Connection setting */
11312 s_con = (NMSettingConnection *) nm_setting_connection_new ();
11313 g_assert (s_con);
11314 nm_connection_add_setting (connection, NM_SETTING (s_con));
11315
11316 uuid = nm_utils_uuid_generate ();
11317 g_object_set (s_con,
11318 NM_SETTING_CONNECTION_ID, "Test Write Bridge Main",
11319 NM_SETTING_CONNECTION_UUID, uuid,
11320 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11321 NM_SETTING_CONNECTION_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
11322 NULL);
11323 g_free (uuid);
11324
11325 /* bridge setting */
11326 s_bridge = (NMSettingBridge *) nm_setting_bridge_new ();
11327 g_assert (s_bridge);
11328 nm_connection_add_setting (connection, NM_SETTING (s_bridge));
11329
11330 g_object_set (s_bridge,
11331 NM_SETTING_BRIDGE_INTERFACE_NAME, "br0",
11332 NULL);
11333
11334 /* IP4 setting */
11335 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11336 g_assert (s_ip4);
11337 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11338
11339 g_object_set (s_ip4,
11340 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
11341 NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
11342 NULL);
11343
11344 addr = nm_ip4_address_new ();
11345 nm_ip4_address_set_address (addr, ip1);
11346 nm_ip4_address_set_prefix (addr, prefix);
11347 nm_ip4_address_set_gateway (addr, gw);
11348 nm_setting_ip4_config_add_address (s_ip4, addr);
11349 nm_ip4_address_unref (addr);
11350
11351 /* IP6 setting */
11352 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
11353 g_assert (s_ip6);
11354 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
11355
11356 g_object_set (s_ip6,
11357 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
11358 NULL);
11359
11360 g_assert (nm_connection_verify (connection, &error));
11361 g_assert_no_error (error);
11362
11363 /* Save the ifcfg */
11364 success = writer_new_connection (connection,
11365 TEST_SCRATCH_DIR "/network-scripts/",
11366 &testfile,
11367 &error);
11368 g_assert (success);
11369 g_assert_cmpstr (testfile, !=, NULL);
11370
11371 /* reread will be normalized, so we must normalize connection too. */
11372 nm_utils_normalize_connection (connection, TRUE);
11373
11374 /* re-read the connection for comparison */
11375 reread = connection_from_file (testfile,
11376 NULL,
11377 TYPE_BRIDGE,
11378 NULL,
11379 &unmanaged,
11380 &keyfile,
11381 &routefile,
11382 &route6file,
11383 &error,
11384 &ignore_error);
11385 unlink (testfile);
11386
11387 g_assert (reread);
11388 g_assert (nm_connection_verify (reread, &error));
11389 g_assert_no_error (error);
11390 g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
11391
11392 g_free (testfile);
11393 g_free (unmanaged);
11394 g_free (keyfile);
11395 g_free (routefile);
11396 g_free (route6file);
11397 g_object_unref (connection);
11398 g_object_unref (reread);
11399 }
11400
11401 #define TEST_IFCFG_BRIDGE_COMPONENT TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-component"
11402
11403 static void
11404 test_read_bridge_component (void)
11405 {
11406 NMConnection *connection;
11407 NMSettingConnection *s_con;
11408 NMSettingBridgePort *s_port;
11409 char *unmanaged = NULL;
11410 char *keyfile = NULL;
11411 char *routefile = NULL;
11412 char *route6file = NULL;
11413 gboolean ignore_error = FALSE;
11414 GError *error = NULL;
11415 gboolean success;
11416
11417 connection = connection_from_file (TEST_IFCFG_BRIDGE_COMPONENT,
11418 NULL,
11419 TYPE_ETHERNET,
11420 NULL,
11421 &unmanaged,
11422 &keyfile,
11423 &routefile,
11424 &route6file,
11425 &error,
11426 &ignore_error);
11427 g_assert (connection);
11428
11429 success = nm_connection_verify (connection, &error);
11430 g_assert_no_error (error);
11431 g_assert (success);
11432
11433 s_con = nm_connection_get_setting_connection (connection);
11434 g_assert (s_con);
11435 g_assert_cmpstr (nm_setting_connection_get_master (s_con), ==, "br0");
11436 g_assert_cmpstr (nm_setting_connection_get_slave_type (s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME);
11437
11438 s_port = nm_connection_get_setting_bridge_port (connection);
11439 g_assert (s_port);
11440 g_assert (nm_setting_bridge_port_get_hairpin_mode (s_port));
11441 g_assert_cmpuint (nm_setting_bridge_port_get_priority (s_port), ==, 28);
11442 g_assert_cmpuint (nm_setting_bridge_port_get_path_cost (s_port), ==, 100);
11443
11444 g_free (unmanaged);
11445 g_free (keyfile);
11446 g_free (routefile);
11447 g_free (route6file);
11448 g_object_unref (connection);
11449 }
11450
11451 static void
11452 test_write_bridge_component (void)
11453 {
11454 NMConnection *connection;
11455 NMConnection *reread;
11456 NMSettingConnection *s_con;
11457 NMSettingWired *s_wired;
11458 NMSetting *s_port;
11459 static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
11460 GByteArray *mac;
11461 guint32 mtu = 1492;
11462 char *uuid;
11463 gboolean success;
11464 GError *error = NULL;
11465 char *testfile = NULL;
11466 char *unmanaged = NULL;
11467 char *keyfile = NULL;
11468 char *routefile = NULL;
11469 char *route6file = NULL;
11470 gboolean ignore_error = FALSE;
11471
11472 connection = nm_connection_new ();
11473 g_assert (connection);
11474
11475 /* Connection setting */
11476 s_con = (NMSettingConnection *) nm_setting_connection_new ();
11477 g_assert (s_con);
11478 nm_connection_add_setting (connection, NM_SETTING (s_con));
11479
11480 uuid = nm_utils_uuid_generate ();
11481 g_object_set (s_con,
11482 NM_SETTING_CONNECTION_ID, "Test Write Bridge Component",
11483 NM_SETTING_CONNECTION_UUID, uuid,
11484 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11485 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
11486 NM_SETTING_CONNECTION_MASTER, "br0",
11487 NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
11488 NULL);
11489 g_free (uuid);
11490
11491 /* Wired setting */
11492 s_wired = (NMSettingWired *) nm_setting_wired_new ();
11493 g_assert (s_wired);
11494 nm_connection_add_setting (connection, NM_SETTING (s_wired));
11495
11496 mac = g_byte_array_sized_new (sizeof (tmpmac));
11497 g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
11498
11499 g_object_set (s_wired,
11500 NM_SETTING_WIRED_MAC_ADDRESS, mac,
11501 NM_SETTING_WIRED_MTU, mtu,
11502 NULL);
11503 g_byte_array_free (mac, TRUE);
11504
11505 /* Bridge port */
11506 s_port = nm_setting_bridge_port_new ();
11507 nm_connection_add_setting (connection, s_port);
11508 g_object_set (s_port,
11509 NM_SETTING_BRIDGE_PORT_PRIORITY, 50,
11510 NM_SETTING_BRIDGE_PORT_PATH_COST, 33,
11511 NULL);
11512
11513 success = nm_connection_verify (connection, &error);
11514 g_assert_no_error (error);
11515 g_assert (success);
11516
11517 /* Save the ifcfg */
11518 success = writer_new_connection (connection,
11519 TEST_SCRATCH_DIR "/network-scripts/",
11520 &testfile,
11521 &error);
11522 g_assert_no_error (error);
11523 g_assert (success);
11524 g_assert (testfile);
11525
11526 /* reread will be normalized, so we must normalize connection too. */
11527 nm_utils_normalize_connection (connection, TRUE);
11528
11529 /* re-read the connection for comparison */
11530 reread = connection_from_file (testfile,
11531 NULL,
11532 TYPE_ETHERNET,
11533 NULL,
11534 &unmanaged,
11535 &keyfile,
11536 &routefile,
11537 &route6file,
11538 &error,
11539 &ignore_error);
11540 unlink (testfile);
11541
11542 g_assert (reread);
11543
11544 success = nm_connection_verify (reread, &error);
11545 g_assert_no_error (error);
11546
11547 g_assert (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT));
11548
11549 if (route6file)
11550 unlink (route6file);
11551
11552 g_free (testfile);
11553 g_free (unmanaged);
11554 g_free (keyfile);
11555 g_free (routefile);
11556 g_free (route6file);
11557 g_object_unref (connection);
11558 g_object_unref (reread);
11559 }
11560
11561 static void
11562 test_read_bridge_missing_stp (void)
11563 {
11564 NMConnection *connection;
11565 NMSettingBridge *s_bridge;
11566 char *unmanaged = NULL;
11567 char *keyfile = NULL;
11568 char *routefile = NULL;
11569 char *route6file = NULL;
11570 gboolean ignore_error = FALSE;
11571 GError *error = NULL;
11572
11573 connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-missing-stp",
11574 NULL,
11575 TYPE_BRIDGE,
11576 NULL,
11577 &unmanaged,
11578 &keyfile,
11579 &routefile,
11580 &route6file,
11581 &error,
11582 &ignore_error);
11583 g_assert (connection);
11584 g_assert (nm_connection_verify (connection, &error));
11585 g_assert_no_error (error);
11586
11587 /* ===== Bridging SETTING ===== */
11588
11589 s_bridge = nm_connection_get_setting_bridge (connection);
11590 g_assert (s_bridge);
11591 g_assert_cmpstr (nm_setting_bridge_get_interface_name (s_bridge), ==, "br0");
11592 g_assert (nm_setting_bridge_get_stp (s_bridge) == FALSE);
11593
11594 g_free (unmanaged);
11595 g_free (keyfile);
11596 g_free (routefile);
11597 g_free (route6file);
11598 g_object_unref (connection);
11599 }
11600
11601 #define TEST_IFCFG_VLAN_INTERFACE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-interface"
11602
11603 static void
11604 test_read_vlan_interface (void)
11605 {
11606 NMConnection *connection;
11607 char *unmanaged = NULL;
11608 char *keyfile = NULL;
11609 char *routefile = NULL;
11610 char *route6file = NULL;
11611 gboolean ignore_error = FALSE;
11612 GError *error = NULL;
11613 NMSettingVlan *s_vlan;
11614 guint32 from = 0, to = 0;
11615
11616 connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE,
11617 NULL,
11618 TYPE_ETHERNET,
11619 NULL,
11620 &unmanaged,
11621 &keyfile,
11622 &routefile,
11623 &route6file,
11624 &error,
11625 &ignore_error);
11626 g_assert_no_error (error);
11627 g_assert (connection != NULL);
11628
11629 g_free (unmanaged);
11630 g_free (keyfile);
11631 g_free (routefile);
11632 g_free (route6file);
11633
11634 s_vlan = nm_connection_get_setting_vlan (connection);
11635 g_assert (s_vlan);
11636
11637 g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, "vlan43");
11638 g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
11639 g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 43);
11640 g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==,
11641 NM_VLAN_FLAG_GVRP | NM_VLAN_FLAG_LOOSE_BINDING);
11642
11643 /* Ingress map */
11644 g_assert_cmpint (nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_INGRESS_MAP), ==, 2);
11645
11646 g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_INGRESS_MAP, 0, &from, &to));
11647 g_assert_cmpint (from, ==, 0);
11648 g_assert_cmpint (to, ==, 1);
11649
11650 g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_INGRESS_MAP, 1, &from, &to));
11651 g_assert_cmpint (from, ==, 2);
11652 g_assert_cmpint (to, ==, 5);
11653
11654 /* Egress map */
11655 g_assert_cmpint (nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_EGRESS_MAP), ==, 3);
11656
11657 g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_EGRESS_MAP, 0, &from, &to));
11658 g_assert_cmpint (from, ==, 12);
11659 g_assert_cmpint (to, ==, 3);
11660
11661 g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_EGRESS_MAP, 1, &from, &to));
11662 g_assert_cmpint (from, ==, 14);
11663 g_assert_cmpint (to, ==, 7);
11664
11665 g_assert (nm_setting_vlan_get_priority (s_vlan, NM_VLAN_EGRESS_MAP, 2, &from, &to));
11666 g_assert_cmpint (from, ==, 3);
11667 g_assert_cmpint (to, ==, 1);
11668
11669 g_object_unref (connection);
11670 }
11671
11672 #define TEST_IFCFG_VLAN_ONLY_VLANID TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-only-vlanid"
11673
11674 static void
11675 test_read_vlan_only_vlan_id (void)
11676 {
11677 NMConnection *connection;
11678 char *unmanaged = NULL;
11679 char *keyfile = NULL;
11680 char *routefile = NULL;
11681 char *route6file = NULL;
11682 gboolean ignore_error = FALSE;
11683 GError *error = NULL;
11684 NMSettingVlan *s_vlan;
11685
11686 connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_VLANID,
11687 NULL,
11688 TYPE_ETHERNET,
11689 NULL,
11690 &unmanaged,
11691 &keyfile,
11692 &routefile,
11693 &route6file,
11694 &error,
11695 &ignore_error);
11696 g_assert_no_error (error);
11697 g_assert (connection != NULL);
11698
11699 g_free (unmanaged);
11700 g_free (keyfile);
11701 g_free (routefile);
11702 g_free (route6file);
11703
11704 s_vlan = nm_connection_get_setting_vlan (connection);
11705 g_assert (s_vlan);
11706
11707 g_assert (nm_setting_vlan_get_interface_name (s_vlan) == NULL);
11708 g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
11709 g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 43);
11710
11711 g_object_unref (connection);
11712 }
11713
11714 #define TEST_IFCFG_VLAN_ONLY_DEVICE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-only-device"
11715
11716 static void
11717 test_read_vlan_only_device (void)
11718 {
11719 NMConnection *connection;
11720 char *unmanaged = NULL;
11721 char *keyfile = NULL;
11722 char *routefile = NULL;
11723 char *route6file = NULL;
11724 gboolean ignore_error = FALSE;
11725 GError *error = NULL;
11726 NMSettingVlan *s_vlan;
11727
11728 connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_DEVICE,
11729 NULL,
11730 TYPE_ETHERNET,
11731 NULL,
11732 &unmanaged,
11733 &keyfile,
11734 &routefile,
11735 &route6file,
11736 &error,
11737 &ignore_error);
11738 g_assert_no_error (error);
11739 g_assert (connection != NULL);
11740
11741 g_free (unmanaged);
11742 g_free (keyfile);
11743 g_free (routefile);
11744 g_free (route6file);
11745
11746 s_vlan = nm_connection_get_setting_vlan (connection);
11747 g_assert (s_vlan);
11748
11749 g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, "eth0.9");
11750 g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth0");
11751 g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 9);
11752
11753 g_object_unref (connection);
11754 }
11755
11756 static void
11757 test_read_vlan_physdev (void)
11758 {
11759 NMConnection *connection;
11760 GError *error = NULL;
11761 NMSettingVlan *s_vlan;
11762
11763 connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-physdev",
11764 NULL, TYPE_ETHERNET, NULL, NULL,
11765 NULL, NULL, NULL, &error, NULL);
11766 g_assert_no_error (error);
11767 g_assert (connection);
11768 g_assert (nm_connection_verify (connection, &error));
11769
11770 s_vlan = nm_connection_get_setting_vlan (connection);
11771 g_assert (s_vlan);
11772
11773 g_assert_cmpstr (nm_setting_vlan_get_interface_name (s_vlan), ==, "vlan0.3");
11774 g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth0");
11775 g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 3);
11776
11777 g_object_unref (connection);
11778 }
11779
11780 static void
11781 test_write_vlan (void)
11782 {
11783 NMConnection *connection;
11784 char *unmanaged = NULL;
11785 char *keyfile = NULL;
11786 char *routefile = NULL;
11787 char *route6file = NULL;
11788 char *written = NULL;
11789 gboolean ignore_error = FALSE;
11790 GError *error = NULL;
11791 gboolean success = FALSE;
11792
11793 connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE,
11794 NULL,
11795 TYPE_VLAN,
11796 NULL,
11797 &unmanaged,
11798 &keyfile,
11799 &routefile,
11800 &route6file,
11801 &error,
11802 &ignore_error);
11803 g_assert (connection != NULL);
11804
11805 success = writer_new_connection (connection,
11806 TEST_SCRATCH_DIR "/network-scripts/",
11807 &written,
11808 &error);
11809 g_assert (success);
11810
11811 unlink (written);
11812 g_free (written);
11813
11814 g_free (unmanaged);
11815 g_free (keyfile);
11816 g_free (routefile);
11817 g_free (route6file);
11818 }
11819
11820 static void
11821 test_write_vlan_only_vlanid (void)
11822 {
11823 NMConnection *connection, *reread;
11824 char *unmanaged = NULL;
11825 char *keyfile = NULL;
11826 char *routefile = NULL;
11827 char *route6file = NULL;
11828 char *written = NULL;
11829 gboolean ignore_error = FALSE;
11830 GError *error = NULL;
11831 gboolean success = FALSE;
11832
11833 connection = connection_from_file (TEST_IFCFG_VLAN_ONLY_VLANID,
11834 NULL,
11835 TYPE_VLAN,
11836 NULL,
11837 &unmanaged,
11838 &keyfile,
11839 &routefile,
11840 &route6file,
11841 &error,
11842 &ignore_error);
11843 g_assert_no_error (error);
11844 g_assert (connection != NULL);
11845
11846 g_free (unmanaged);
11847 unmanaged = NULL;
11848 g_free (keyfile);
11849 keyfile = NULL;
11850 g_free (routefile);
11851 routefile = NULL;
11852 g_free (route6file);
11853 route6file = NULL;
11854
11855 success = writer_new_connection (connection,
11856 TEST_SCRATCH_DIR "/network-scripts/",
11857 &written,
11858 &error);
11859 g_assert (success);
11860
11861 /* reread will be normalized, so we must normalize connection too. */
11862 nm_utils_normalize_connection (connection, TRUE);
11863
11864 /* re-read the connection for comparison */
11865 reread = connection_from_file (written,
11866 NULL,
11867 TYPE_ETHERNET,
11868 NULL,
11869 &unmanaged,
11870 &keyfile,
11871 &routefile,
11872 &route6file,
11873 &error,
11874 &ignore_error);
11875 unlink (written);
11876 g_free (written);
11877 g_free (unmanaged);
11878 g_free (keyfile);
11879 g_free (routefile);
11880 g_free (route6file);
11881
11882 g_assert_no_error (error);
11883 g_assert (reread != NULL);
11884
11885 success = nm_connection_verify (reread, &error);
11886 g_assert_no_error (error);
11887 g_assert (success);
11888
11889 success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT);
11890 g_assert (success);
11891
11892 g_object_unref (connection);
11893 g_object_unref (reread);
11894 }
11895
11896 static void
11897 test_write_ethernet_missing_ipv6 (void)
11898 {
11899 NMConnection *connection;
11900 NMConnection *reread;
11901 NMSettingConnection *s_con;
11902 NMSettingWired *s_wired;
11903 NMSettingIP4Config *s_ip4;
11904 NMSettingIP6Config *s_ip6;
11905 char *uuid;
11906 gboolean success;
11907 GError *error = NULL;
11908 char *testfile = NULL;
11909 char *unmanaged = NULL;
11910 char *keyfile = NULL;
11911 char *routefile = NULL;
11912 char *route6file = NULL;
11913 gboolean ignore_error = FALSE;
11914
11915 connection = nm_connection_new ();
11916 g_assert (connection);
11917
11918 /* Connection setting */
11919 s_con = (NMSettingConnection *) nm_setting_connection_new ();
11920 g_assert (s_con);
11921 nm_connection_add_setting (connection, NM_SETTING (s_con));
11922
11923 uuid = nm_utils_uuid_generate ();
11924 g_object_set (s_con,
11925 NM_SETTING_CONNECTION_ID, "Test Write Ethernet Without IPv6 Setting",
11926 NM_SETTING_CONNECTION_UUID, uuid,
11927 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
11928 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
11929 NULL);
11930 g_free (uuid);
11931
11932 /* Wired setting */
11933 s_wired = (NMSettingWired *) nm_setting_wired_new ();
11934 g_assert (s_wired);
11935 nm_connection_add_setting (connection, NM_SETTING (s_wired));
11936
11937 /* IP4 setting */
11938 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
11939 g_assert (s_ip4);
11940 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
11941 g_object_set (s_ip4,
11942 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
11943 NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "random-client-id-00:22:33",
11944 NM_SETTING_IP4_CONFIG_IGNORE_AUTO_ROUTES, TRUE,
11945 NM_SETTING_IP4_CONFIG_IGNORE_AUTO_DNS, TRUE,
11946 NULL);
11947
11948 /* IP6 setting */
11949 /*
11950 * We intentionally don't add IPv6 setting here. ifcfg-rh plugin should regard
11951 * missing IPv6 as IPv6 with NM_SETTING_IP6_CONFIG_METHOD_AUTO method.
11952 */
11953
11954 ASSERT (nm_connection_verify (connection, &error) == TRUE,
11955 "ethernet-missing-ipv6", "failed to verify connection: %s",
11956 (error && error->message) ? error->message : "(unknown)");
11957
11958 /* Save the ifcfg */
11959 success = writer_new_connection (connection,
11960 TEST_SCRATCH_DIR "/network-scripts/",
11961 &testfile,
11962 &error);
11963 ASSERT (success == TRUE,
11964 "ethernet-missing-ipv6", "failed to write connection to disk: %s",
11965 (error && error->message) ? error->message : "(unknown)");
11966
11967 ASSERT (testfile != NULL,
11968 "ethernet-missing-ipv6", "didn't get ifcfg file path back after writing connection");
11969
11970 /* reread will be normalized, so we must normalize connection too. */
11971 nm_utils_normalize_connection (connection, TRUE);
11972
11973 /* re-read the connection for comparison */
11974 reread = connection_from_file (testfile,
11975 NULL,
11976 TYPE_ETHERNET,
11977 NULL,
11978 &unmanaged,
11979 &keyfile,
11980 &routefile,
11981 &route6file,
11982 &error,
11983 &ignore_error);
11984 unlink (testfile);
11985
11986 ASSERT (reread != NULL,
11987 "ethernet-missing-ipv6-reread", "failed to read %s: %s", testfile, error->message);
11988
11989 ASSERT (nm_connection_verify (reread, &error),
11990 "ethernet-missing-ipv6-reread-verify", "failed to verify %s: %s", testfile, error->message);
11991
11992 /*
11993 * We need to add IPv6 setting to the original connection now so that
11994 * the comparison can succeed. Missing IPv6 setting should have been
11995 * written out (and re-read) as Automatic IPv6.
11996 */
11997 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
11998 g_assert (s_ip6);
11999 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
12000 g_object_set (s_ip6,
12001 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO,
12002 NM_SETTING_IP6_CONFIG_MAY_FAIL, TRUE,
12003 NULL);
12004
12005 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12006 "ethernet-missing-ipv6", "written and re-read connection weren't the same.");
12007
12008 g_free (testfile);
12009 g_free (unmanaged);
12010 g_free (keyfile);
12011 g_free (routefile);
12012 g_free (route6file);
12013 g_object_unref (connection);
12014 g_object_unref (reread);
12015 }
12016
12017 #define TEST_IFCFG_BOND_MAIN TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bond-main"
12018
12019 static void
12020 test_read_bond_main (void)
12021 {
12022 NMConnection *connection;
12023 NMSettingBond *s_bond;
12024 char *unmanaged = NULL;
12025 char *keyfile = NULL;
12026 char *routefile = NULL;
12027 char *route6file = NULL;
12028 gboolean ignore_error = FALSE;
12029 GError *error = NULL;
12030
12031 connection = connection_from_file (TEST_IFCFG_BOND_MAIN,
12032 NULL,
12033 TYPE_ETHERNET,
12034 NULL,
12035 &unmanaged,
12036 &keyfile,
12037 &routefile,
12038 &route6file,
12039 &error,
12040 &ignore_error);
12041 ASSERT (connection != NULL,
12042 "bond-main-read", "unexpected failure reading %s", TEST_IFCFG_BOND_MAIN);
12043
12044 ASSERT (nm_connection_verify (connection, &error),
12045 "bond-main-read", "failed to verify %s: %s", TEST_IFCFG_BOND_MAIN, error->message);
12046
12047 /* ===== Bonding SETTING ===== */
12048
12049 s_bond = nm_connection_get_setting_bond (connection);
12050 ASSERT (s_bond != NULL,
12051 "bond-main", "failed to verify %s: missing %s setting",
12052 TEST_IFCFG_BOND_MAIN,
12053 NM_SETTING_BOND_SETTING_NAME);
12054
12055 ASSERT (g_strcmp0 (nm_setting_bond_get_interface_name (s_bond), "bond0") == 0,
12056 "bond-main", "failed to verify %s: DEVICE=%s does not match bond0",
12057 TEST_IFCFG_BOND_MAIN, nm_setting_bond_get_interface_name (s_bond));
12058
12059 ASSERT (g_strcmp0 (nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON), "100") == 0,
12060 "bond-main", "failed to verify %s: miimon=%s does not match 100",
12061 TEST_IFCFG_BOND_MAIN, nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON));
12062
12063 g_free (unmanaged);
12064 g_free (keyfile);
12065 g_free (routefile);
12066 g_free (route6file);
12067 g_object_unref (connection);
12068 }
12069
12070 static void
12071 test_write_bond_main (void)
12072 {
12073 NMConnection *connection;
12074 NMConnection *reread;
12075 NMSettingConnection *s_con;
12076 NMSettingBond *s_bond;
12077 NMSettingIP4Config *s_ip4;
12078 NMSettingIP6Config *s_ip6;
12079 NMSettingWired *s_wired;
12080 char *uuid;
12081 const guint32 ip1 = htonl (0x01010103);
12082 const guint32 gw = htonl (0x01010101);
12083 const guint32 prefix = 24;
12084 NMIP4Address *addr;
12085 gboolean success;
12086 GError *error = NULL;
12087 char *testfile = NULL;
12088 char *unmanaged = NULL;
12089 char *keyfile = NULL;
12090 char *routefile = NULL;
12091 char *route6file = NULL;
12092 gboolean ignore_error = FALSE;
12093
12094 connection = nm_connection_new ();
12095
12096 /* Connection setting */
12097 s_con = (NMSettingConnection *) nm_setting_connection_new ();
12098 nm_connection_add_setting (connection, NM_SETTING (s_con));
12099
12100 uuid = nm_utils_uuid_generate ();
12101 g_object_set (s_con,
12102 NM_SETTING_CONNECTION_ID, "Test Write Bond Main",
12103 NM_SETTING_CONNECTION_UUID, uuid,
12104 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
12105 NM_SETTING_CONNECTION_TYPE, NM_SETTING_BOND_SETTING_NAME,
12106 NULL);
12107 g_free (uuid);
12108
12109 /* Wired setting */
12110 s_wired = (NMSettingWired *) nm_setting_wired_new ();
12111 nm_connection_add_setting (connection, NM_SETTING (s_wired));
12112
12113 /* bond setting */
12114 s_bond = (NMSettingBond *) nm_setting_bond_new ();
12115 nm_connection_add_setting (connection, NM_SETTING (s_bond));
12116
12117 g_object_set (s_bond,
12118 NM_SETTING_BOND_INTERFACE_NAME, "bond0",
12119 NULL);
12120
12121 /* IP4 setting */
12122 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
12123 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
12124
12125 g_object_set (s_ip4,
12126 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
12127 NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
12128 NULL);
12129
12130 addr = nm_ip4_address_new ();
12131 nm_ip4_address_set_address (addr, ip1);
12132 nm_ip4_address_set_prefix (addr, prefix);
12133 nm_ip4_address_set_gateway (addr, gw);
12134 nm_setting_ip4_config_add_address (s_ip4, addr);
12135 nm_ip4_address_unref (addr);
12136
12137 /* IP6 setting */
12138 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
12139 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
12140
12141 g_object_set (s_ip6,
12142 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
12143 NULL);
12144
12145 ASSERT (nm_connection_verify (connection, &error) == TRUE,
12146 "bond-main-write", "failed to verify connection: %s",
12147 (error && error->message) ? error->message : "(unknown)");
12148
12149 /* Save the ifcfg */
12150 success = writer_new_connection (connection,
12151 TEST_SCRATCH_DIR "/network-scripts/",
12152 &testfile,
12153 &error);
12154 ASSERT (success == TRUE,
12155 "bond-main-write", "failed to write connection to disk: %s",
12156 (error && error->message) ? error->message : "(unknown)");
12157
12158 ASSERT (testfile != NULL,
12159 "bond-main-write", "didn't get ifcfg file path back after writing connection");
12160
12161 /* reread will be normalized, so we must normalize connection too. */
12162 nm_utils_normalize_connection (connection, TRUE);
12163
12164 /* re-read the connection for comparison */
12165 reread = connection_from_file (testfile,
12166 NULL,
12167 TYPE_BOND,
12168 NULL,
12169 &unmanaged,
12170 &keyfile,
12171 &routefile,
12172 &route6file,
12173 &error,
12174 &ignore_error);
12175 unlink (testfile);
12176
12177 ASSERT (reread != NULL,
12178 "bond-main-write-reread", "failed to read %s: %s", testfile, error->message);
12179
12180 ASSERT (nm_connection_verify (reread, &error),
12181 "bond-main-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
12182
12183 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12184 "bond-main-write", "written and re-read connection weren't the same.");
12185
12186 g_free (testfile);
12187 g_free (unmanaged);
12188 g_free (keyfile);
12189 g_free (routefile);
12190 g_free (route6file);
12191 g_object_unref (connection);
12192 g_object_unref (reread);
12193 }
12194
12195 #define TEST_IFCFG_BOND_SLAVE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bond-slave"
12196
12197 static void
12198 test_read_bond_slave (void)
12199 {
12200 NMConnection *connection;
12201 NMSettingConnection *s_con;
12202 char *unmanaged = NULL;
12203 char *keyfile = NULL;
12204 char *routefile = NULL;
12205 char *route6file = NULL;
12206 gboolean ignore_error = FALSE;
12207 GError *error = NULL;
12208
12209 connection = connection_from_file (TEST_IFCFG_BOND_SLAVE,
12210 NULL,
12211 TYPE_ETHERNET,
12212 NULL,
12213 &unmanaged,
12214 &keyfile,
12215 &routefile,
12216 &route6file,
12217 &error,
12218 &ignore_error);
12219 ASSERT (connection != NULL,
12220 "bond-slave-read", "unexpected failure reading %s", TEST_IFCFG_BOND_SLAVE);
12221
12222 ASSERT (nm_connection_verify (connection, &error),
12223 "bond-slave-read", "failed to verify %s: %s", TEST_IFCFG_BOND_SLAVE, error->message);
12224
12225 s_con = nm_connection_get_setting_connection (connection);
12226 ASSERT (s_con != NULL,
12227 "bond-slave-read", "failed to verify %s: missing %s setting",
12228 TEST_IFCFG_BOND_SLAVE, NM_SETTING_CONNECTION_SETTING_NAME);
12229
12230 ASSERT (g_strcmp0 (nm_setting_connection_get_master (s_con), "bond0") == 0,
12231 "bond-slave-read", "failed to verify %s: master is not bond0",
12232 TEST_IFCFG_BOND_SLAVE);
12233
12234 ASSERT (g_strcmp0 (nm_setting_connection_get_slave_type (s_con), NM_SETTING_BOND_SETTING_NAME) == 0,
12235 "bond-slave-read", "failed to verify %s: slave-type is not bond",
12236 TEST_IFCFG_BOND_SLAVE);
12237
12238 g_free (unmanaged);
12239 g_free (keyfile);
12240 g_free (routefile);
12241 g_free (route6file);
12242 g_object_unref (connection);
12243 }
12244
12245 static void
12246 test_write_bond_slave (void)
12247 {
12248 NMConnection *connection;
12249 NMConnection *reread;
12250 NMSettingConnection *s_con;
12251 NMSettingWired *s_wired;
12252 static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd };
12253 GByteArray *mac;
12254 guint32 mtu = 1492;
12255 char *uuid;
12256 gboolean success;
12257 GError *error = NULL;
12258 char *testfile = NULL;
12259 char *unmanaged = NULL;
12260 char *keyfile = NULL;
12261 char *routefile = NULL;
12262 char *route6file = NULL;
12263 gboolean ignore_error = FALSE;
12264
12265 connection = nm_connection_new ();
12266
12267 /* Connection setting */
12268 s_con = (NMSettingConnection *) nm_setting_connection_new ();
12269 nm_connection_add_setting (connection, NM_SETTING (s_con));
12270
12271 uuid = nm_utils_uuid_generate ();
12272 g_object_set (s_con,
12273 NM_SETTING_CONNECTION_ID, "Test Write Bond Slave",
12274 NM_SETTING_CONNECTION_UUID, uuid,
12275 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
12276 NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
12277 NM_SETTING_CONNECTION_MASTER, "bond0",
12278 NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BOND_SETTING_NAME,
12279 NULL);
12280 g_free (uuid);
12281
12282 /* Wired setting */
12283 s_wired = (NMSettingWired *) nm_setting_wired_new ();
12284 nm_connection_add_setting (connection, NM_SETTING (s_wired));
12285
12286 mac = g_byte_array_sized_new (sizeof (tmpmac));
12287 g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
12288
12289 g_object_set (s_wired,
12290 NM_SETTING_WIRED_MAC_ADDRESS, mac,
12291 NM_SETTING_WIRED_MTU, mtu,
12292 NULL);
12293 g_byte_array_free (mac, TRUE);
12294
12295 ASSERT (nm_connection_verify (connection, &error) == TRUE,
12296 "bond-slave-write", "failed to verify connection: %s",
12297 (error && error->message) ? error->message : "(unknown)");
12298
12299 /* Save the ifcfg */
12300 success = writer_new_connection (connection,
12301 TEST_SCRATCH_DIR "/network-scripts/",
12302 &testfile,
12303 &error);
12304 ASSERT (success == TRUE,
12305 "bond-slave-write", "failed to write connection to disk: %s",
12306 (error && error->message) ? error->message : "(unknown)");
12307
12308 ASSERT (testfile != NULL,
12309 "bond-slave-write", "didn't get ifcfg file path back after writing connection");
12310
12311 /* reread will be normalized, so we must normalize connection too. */
12312 nm_utils_normalize_connection (connection, TRUE);
12313
12314 /* re-read the connection for comparison */
12315 reread = connection_from_file (testfile,
12316 NULL,
12317 TYPE_ETHERNET,
12318 NULL,
12319 &unmanaged,
12320 &keyfile,
12321 &routefile,
12322 &route6file,
12323 &error,
12324 &ignore_error);
12325 unlink (testfile);
12326
12327 ASSERT (reread != NULL,
12328 "bond-slave-write-reread", "failed to read %s: %s", testfile, error->message);
12329
12330 ASSERT (nm_connection_verify (reread, &error),
12331 "bond-slave-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
12332
12333 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12334 "bond-slave-write", "written and re-read connection weren't the same.");
12335
12336 if (route6file)
12337 unlink (route6file);
12338
12339 g_free (testfile);
12340 g_free (unmanaged);
12341 g_free (keyfile);
12342 g_free (routefile);
12343 g_free (route6file);
12344 g_object_unref (connection);
12345 g_object_unref (reread);
12346 }
12347
12348 #define TEST_IFCFG_INFINIBAND TEST_IFCFG_DIR"/network-scripts/ifcfg-test-infiniband"
12349
12350 static void
12351 test_read_infiniband (void)
12352 {
12353 NMConnection *connection;
12354 NMSettingInfiniband *s_infiniband;
12355 char *unmanaged = NULL;
12356 char *keyfile = NULL;
12357 char *routefile = NULL;
12358 char *route6file = NULL;
12359 gboolean ignore_error = FALSE;
12360 GError *error = NULL;
12361 const GByteArray *array;
12362 char expected_mac_address[INFINIBAND_ALEN] = { 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22 };
12363 const char *transport_mode;
12364
12365 connection = connection_from_file (TEST_IFCFG_INFINIBAND,
12366 NULL,
12367 TYPE_INFINIBAND,
12368 NULL,
12369 &unmanaged,
12370 &keyfile,
12371 &routefile,
12372 &route6file,
12373 &error,
12374 &ignore_error);
12375 ASSERT (connection != NULL,
12376 "infiniband-read", "failed to read %s: %s", TEST_IFCFG_INFINIBAND, error->message);
12377
12378 ASSERT (nm_connection_verify (connection, &error),
12379 "infiniband-verify", "failed to verify %s: %s", TEST_IFCFG_INFINIBAND, error->message);
12380
12381 ASSERT (unmanaged == NULL,
12382 "infiniband-verify", "failed to verify %s: unexpected unmanaged value", TEST_IFCFG_INFINIBAND);
12383
12384 /* ===== INFINIBAND SETTING ===== */
12385
12386 s_infiniband = nm_connection_get_setting_infiniband (connection);
12387 ASSERT (s_infiniband != NULL,
12388 "infiniband-verify-wired", "failed to verify %s: missing %s setting",
12389 TEST_IFCFG_INFINIBAND,
12390 NM_SETTING_INFINIBAND_SETTING_NAME);
12391
12392 /* MAC address */
12393 array = nm_setting_infiniband_get_mac_address (s_infiniband);
12394 ASSERT (array != NULL,
12395 "infiniband-verify-infiniband", "failed to verify %s: missing %s / %s key",
12396 TEST_IFCFG_INFINIBAND,
12397 NM_SETTING_INFINIBAND_SETTING_NAME,
12398 NM_SETTING_INFINIBAND_MAC_ADDRESS);
12399 ASSERT (array->len == INFINIBAND_ALEN,
12400 "infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value length",
12401 TEST_IFCFG_INFINIBAND,
12402 NM_SETTING_INFINIBAND_SETTING_NAME,
12403 NM_SETTING_INFINIBAND_MAC_ADDRESS);
12404 ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0,
12405 "infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value",
12406 TEST_IFCFG_INFINIBAND,
12407 NM_SETTING_INFINIBAND_SETTING_NAME,
12408 NM_SETTING_INFINIBAND_MAC_ADDRESS);
12409
12410 /* Transport mode */
12411 transport_mode = nm_setting_infiniband_get_transport_mode (s_infiniband);
12412 ASSERT (transport_mode != NULL,
12413 "infiniband-verify-infiniband", "failed to verify %s: missing %s / %s key",
12414 TEST_IFCFG_INFINIBAND,
12415 NM_SETTING_INFINIBAND_SETTING_NAME,
12416 NM_SETTING_INFINIBAND_TRANSPORT_MODE);
12417 ASSERT (strcmp (transport_mode, "connected") == 0,
12418 "infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value",
12419 TEST_IFCFG_INFINIBAND,
12420 NM_SETTING_INFINIBAND_SETTING_NAME,
12421 NM_SETTING_INFINIBAND_TRANSPORT_MODE);
12422
12423 g_free (unmanaged);
12424 g_free (keyfile);
12425 g_free (routefile);
12426 g_free (route6file);
12427 g_object_unref (connection);
12428 }
12429
12430 static void
12431 test_write_infiniband (void)
12432 {
12433 NMConnection *connection;
12434 NMConnection *reread;
12435 NMSettingConnection *s_con;
12436 NMSettingInfiniband *s_infiniband;
12437 NMSettingIP4Config *s_ip4;
12438 NMSettingIP6Config *s_ip6;
12439 unsigned char tmpmac[INFINIBAND_ALEN] = { 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22 };
12440 GByteArray *mac;
12441 guint32 mtu = 65520;
12442 char *uuid;
12443 const guint32 ip1 = htonl (0x01010103);
12444 const guint32 gw = htonl (0x01010101);
12445 const guint32 prefix = 24;
12446 NMIP4Address *addr;
12447 gboolean success;
12448 GError *error = NULL;
12449 char *testfile = NULL;
12450 char *unmanaged = NULL;
12451 char *keyfile = NULL;
12452 char *routefile = NULL;
12453 char *route6file = NULL;
12454 gboolean ignore_error = FALSE;
12455
12456 connection = nm_connection_new ();
12457
12458 /* Connection setting */
12459 s_con = (NMSettingConnection *) nm_setting_connection_new ();
12460 nm_connection_add_setting (connection, NM_SETTING (s_con));
12461
12462 uuid = nm_utils_uuid_generate ();
12463 g_object_set (s_con,
12464 NM_SETTING_CONNECTION_ID, "Test Write InfiniBand",
12465 NM_SETTING_CONNECTION_UUID, uuid,
12466 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
12467 NM_SETTING_CONNECTION_TYPE, NM_SETTING_INFINIBAND_SETTING_NAME,
12468 NULL);
12469 g_free (uuid);
12470
12471 /* InfiniBand setting */
12472 s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
12473 nm_connection_add_setting (connection, NM_SETTING (s_infiniband));
12474
12475 mac = g_byte_array_sized_new (sizeof (tmpmac));
12476 g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
12477
12478 g_object_set (s_infiniband,
12479 NM_SETTING_INFINIBAND_MAC_ADDRESS, mac,
12480 NM_SETTING_INFINIBAND_MTU, mtu,
12481 NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected",
12482 NULL);
12483 g_byte_array_free (mac, TRUE);
12484
12485 /* IP4 setting */
12486 s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new ();
12487 nm_connection_add_setting (connection, NM_SETTING (s_ip4));
12488
12489 g_object_set (s_ip4,
12490 NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL,
12491 NM_SETTING_IP4_CONFIG_MAY_FAIL, TRUE,
12492 NULL);
12493
12494 addr = nm_ip4_address_new ();
12495 nm_ip4_address_set_address (addr, ip1);
12496 nm_ip4_address_set_prefix (addr, prefix);
12497 nm_ip4_address_set_gateway (addr, gw);
12498 nm_setting_ip4_config_add_address (s_ip4, addr);
12499 nm_ip4_address_unref (addr);
12500
12501 /* IP6 setting */
12502 s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new ();
12503 nm_connection_add_setting (connection, NM_SETTING (s_ip6));
12504
12505 g_object_set (s_ip6,
12506 NM_SETTING_IP6_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
12507 NULL);
12508
12509 ASSERT (nm_connection_verify (connection, &error) == TRUE,
12510 "infiniband-write", "failed to verify connection: %s",
12511 (error && error->message) ? error->message : "(unknown)");
12512
12513 /* Save the ifcfg */
12514 success = writer_new_connection (connection,
12515 TEST_SCRATCH_DIR "/network-scripts/",
12516 &testfile,
12517 &error);
12518 ASSERT (success == TRUE,
12519 "infiniband-write", "failed to write connection to disk: %s",
12520 (error && error->message) ? error->message : "(unknown)");
12521
12522 ASSERT (testfile != NULL,
12523 "infiniband-write", "didn't get ifcfg file path back after writing connection");
12524
12525 /* reread will be normalized, so we must normalize connection too. */
12526 nm_utils_normalize_connection (connection, TRUE);
12527
12528 /* re-read the connection for comparison */
12529 reread = connection_from_file (testfile,
12530 NULL,
12531 TYPE_INFINIBAND,
12532 NULL,
12533 &unmanaged,
12534 &keyfile,
12535 &routefile,
12536 &route6file,
12537 &error,
12538 &ignore_error);
12539 unlink (testfile);
12540
12541 ASSERT (reread != NULL,
12542 "infiniband-write-reread", "failed to read %s: %s", testfile, error->message);
12543
12544 ASSERT (nm_connection_verify (reread, &error),
12545 "infiniband-write-reread-verify", "failed to verify %s: %s", testfile, error->message);
12546
12547 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12548 "infiniband-write", "written and re-read connection weren't the same.");
12549
12550 g_free (testfile);
12551 g_free (unmanaged);
12552 g_free (keyfile);
12553 g_free (routefile);
12554 g_free (route6file);
12555 g_object_unref (connection);
12556 g_object_unref (reread);
12557 }
12558
12559 #define TEST_IFCFG_BOND_SLAVE_IB TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bond-slave-ib"
12560
12561 static void
12562 test_read_bond_slave_ib (void)
12563 {
12564 NMConnection *connection;
12565 NMSettingConnection *s_con;
12566 char *unmanaged = NULL;
12567 char *keyfile = NULL;
12568 char *routefile = NULL;
12569 char *route6file = NULL;
12570 gboolean ignore_error = FALSE;
12571 GError *error = NULL;
12572
12573 connection = connection_from_file (TEST_IFCFG_BOND_SLAVE_IB,
12574 NULL,
12575 NULL,
12576 NULL,
12577 &unmanaged,
12578 &keyfile,
12579 &routefile,
12580 &route6file,
12581 &error,
12582 &ignore_error);
12583 ASSERT (connection != NULL,
12584 "bond-slave-read-ib", "unexpected failure reading %s", TEST_IFCFG_BOND_SLAVE_IB);
12585
12586 ASSERT (nm_connection_verify (connection, &error),
12587 "bond-slave-read-ib", "failed to verify %s: %s", TEST_IFCFG_BOND_SLAVE_IB, error->message);
12588
12589 s_con = nm_connection_get_setting_connection (connection);
12590 ASSERT (s_con != NULL,
12591 "bond-slave-read-ib", "failed to verify %s: missing %s setting",
12592 TEST_IFCFG_BOND_SLAVE_IB, NM_SETTING_CONNECTION_SETTING_NAME);
12593
12594 ASSERT (g_strcmp0 (nm_setting_connection_get_master (s_con), "bond0") == 0,
12595 "bond-slave-read-ib", "failed to verify %s: master is not bond0",
12596 TEST_IFCFG_BOND_SLAVE_IB);
12597
12598 ASSERT (g_strcmp0 (nm_setting_connection_get_slave_type (s_con), NM_SETTING_BOND_SETTING_NAME) == 0,
12599 "bond-slave-read-ib", "failed to verify %s: slave-type is not bond",
12600 TEST_IFCFG_BOND_SLAVE_IB);
12601
12602 g_free (unmanaged);
12603 g_free (keyfile);
12604 g_free (routefile);
12605 g_free (route6file);
12606 g_object_unref (connection);
12607 }
12608
12609 static void
12610 test_write_bond_slave_ib (void)
12611 {
12612 NMConnection *connection;
12613 NMConnection *reread;
12614 NMSettingConnection *s_con;
12615 NMSettingInfiniband *s_infiniband;
12616 static unsigned char tmpmac[] = {
12617 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
12618 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22
12619 };
12620 GByteArray *mac;
12621 char *uuid;
12622 gboolean success;
12623 GError *error = NULL;
12624 char *testfile = NULL;
12625 char *unmanaged = NULL;
12626 char *keyfile = NULL;
12627 char *routefile = NULL;
12628 char *route6file = NULL;
12629 gboolean ignore_error = FALSE;
12630
12631 connection = nm_connection_new ();
12632
12633 /* Connection setting */
12634 s_con = (NMSettingConnection *) nm_setting_connection_new ();
12635 nm_connection_add_setting (connection, NM_SETTING (s_con));
12636
12637 uuid = nm_utils_uuid_generate ();
12638 g_object_set (s_con,
12639 NM_SETTING_CONNECTION_ID, "Test Write Bond Slave InfiniBand",
12640 NM_SETTING_CONNECTION_UUID, uuid,
12641 NM_SETTING_CONNECTION_AUTOCONNECT, TRUE,
12642 NM_SETTING_CONNECTION_TYPE, NM_SETTING_INFINIBAND_SETTING_NAME,
12643 NM_SETTING_CONNECTION_MASTER, "bond0",
12644 NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BOND_SETTING_NAME,
12645 NULL);
12646 g_free (uuid);
12647
12648 /* InfiniBand setting */
12649 s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new ();
12650 nm_connection_add_setting (connection, NM_SETTING (s_infiniband));
12651
12652 mac = g_byte_array_sized_new (sizeof (tmpmac));
12653 g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac));
12654
12655 g_object_set (s_infiniband,
12656 NM_SETTING_INFINIBAND_MAC_ADDRESS, mac,
12657 NM_SETTING_INFINIBAND_MTU, 2044,
12658 NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram",
12659 NULL);
12660 g_byte_array_free (mac, TRUE);
12661
12662 ASSERT (nm_connection_verify (connection, &error) == TRUE,
12663 "bond-slave-write-ib", "failed to verify connection: %s",
12664 (error && error->message) ? error->message : "(unknown)");
12665
12666 /* Save the ifcfg */
12667 success = writer_new_connection (connection,
12668 TEST_SCRATCH_DIR "/network-scripts/",
12669 &testfile,
12670 &error);
12671 ASSERT (success == TRUE,
12672 "bond-slave-write-ib", "failed to write connection to disk: %s",
12673 (error && error->message) ? error->message : "(unknown)");
12674
12675 ASSERT (testfile != NULL,
12676 "bond-slave-write-ib", "didn't get ifcfg file path back after writing connection");
12677
12678 /* reread will be normalized, so we must normalize connection too. */
12679 nm_utils_normalize_connection (connection, TRUE);
12680
12681 /* re-read the connection for comparison */
12682 reread = connection_from_file (testfile,
12683 NULL,
12684 NULL,
12685 NULL,
12686 &unmanaged,
12687 &keyfile,
12688 &routefile,
12689 &route6file,
12690 &error,
12691 &ignore_error);
12692 unlink (testfile);
12693
12694 ASSERT (reread != NULL,
12695 "bond-slave-write-ib-reread", "failed to read %s: %s", testfile, error->message);
12696
12697 ASSERT (nm_connection_verify (reread, &error),
12698 "bond-slave-write-ib-reread-verify", "failed to verify %s: %s", testfile, error->message);
12699
12700 ASSERT (nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT) == TRUE,
12701 "bond-slave-write-ib", "written and re-read connection weren't the same.");
12702
12703 if (route6file)
12704 unlink (route6file);
12705
12706 g_free (testfile);
12707 g_free (unmanaged);
12708 g_free (keyfile);
12709 g_free (routefile);
12710 g_free (route6file);
12711 g_object_unref (connection);
12712 g_object_unref (reread);
12713 }
12714
12715 #define TEST_IFCFG_WIFI_OPEN_SSID_BAD_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-bad-hex"
12716 #define TEST_IFCFG_WIFI_OPEN_SSID_LONG_QUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-quoted"
12717 #define TEST_IFCFG_WIFI_OPEN_SSID_LONG_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-hex"
12718
12719
12720 #define TEST_IFCFG_WIRED_STATIC TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static"
12721 #define TEST_IFCFG_WIRED_STATIC_BOOTPROTO TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-static-bootproto"
12722
12723 #define TEST_IFCFG_WIRED_IPV4_MANUAL_1 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-1"
12724 #define TEST_IFCFG_WIRED_IPV4_MANUAL_2 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-2"
12725 #define TEST_IFCFG_WIRED_IPV4_MANUAL_3 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-3"
12726 #define TEST_IFCFG_WIRED_IPV4_MANUAL_4 TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wired-ipv4-manual-4"
12727
12728 #define DEFAULT_HEX_PSK "7d308b11df1b4243b0f78e5f3fc68cdbb9a264ed0edf4c188edf329ff5b467f0"
12729
12730 #define TPATH "/settings/plugins/ifcfg-rh/"
12731
12732 int main (int argc, char **argv)
12733 {
12734 GError *error = NULL;
12735 gboolean success;
12736
12737 g_test_init (&argc, &argv, NULL);
12738 g_type_init ();
12739
12740 success = nm_utils_init (&error);
12741 g_assert_no_error (error);
12742 g_assert (success);
12743
12744 g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL);
12745
12746 g_test_add_func (TPATH "unmanaged", test_read_unmanaged);
12747 g_test_add_func (TPATH "basic", test_read_basic);
12748 g_test_add_func (TPATH "variables-corner-cases", test_read_variables_corner_cases);
12749 g_test_add_data_func (TPATH "no-prefix/8", GUINT_TO_POINTER (8), test_read_wired_static_no_prefix);
12750 g_test_add_data_func (TPATH "no-prefix/16", GUINT_TO_POINTER (16), test_read_wired_static_no_prefix);
12751 g_test_add_data_func (TPATH "no-prefix/24", GUINT_TO_POINTER (24), test_read_wired_static_no_prefix);
12752 g_test_add_data_func (TPATH "static-ip6-only-gw/_NULL_", NULL, test_write_wired_static_ip6_only_gw);
12753 g_test_add_data_func (TPATH "static-ip6-only-gw/::", "::", test_write_wired_static_ip6_only_gw);
12754 g_test_add_data_func (TPATH "static-ip6-only-gw/2001:db8:8:4::2", "2001:db8:8:4::2", test_write_wired_static_ip6_only_gw);
12755 g_test_add_data_func (TPATH "static-ip6-only-gw/ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255", "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255", test_write_wired_static_ip6_only_gw);
12756
12757 test_read_wired_static (TEST_IFCFG_WIRED_STATIC, "System test-wired-static", TRUE);
12758 test_read_wired_static (TEST_IFCFG_WIRED_STATIC_BOOTPROTO, "System test-wired-static-bootproto", FALSE);
12759 test_read_wired_dhcp ();
12760 g_test_add_func (TPATH "dhcp-plus-ip", test_read_wired_dhcp_plus_ip);
12761 test_read_wired_global_gateway ();
12762 test_read_wired_never_default ();
12763 test_read_wired_defroute_no ();
12764 test_read_wired_defroute_no_gatewaydev_yes ();
12765 test_read_wired_static_routes ();
12766 test_read_wired_static_routes_legacy ();
12767 test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_1, "System test-wired-ipv4-manual-1");
12768 test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_2, "System test-wired-ipv4-manual-2");
12769 test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_3, "System test-wired-ipv4-manual-3");
12770 test_read_wired_ipv4_manual (TEST_IFCFG_WIRED_IPV4_MANUAL_4, "System test-wired-ipv4-manual-4");
12771 test_read_wired_ipv6_manual ();
12772 test_read_wired_ipv6_only ();
12773 test_read_wired_dhcp6_only ();
12774 test_read_onboot_no ();
12775 test_read_noip ();
12776 test_read_wired_8021x_peap_mschapv2 ();
12777 test_read_wired_8021x_tls_secret_flags (TEST_IFCFG_WIRED_8021X_TLS_AGENT, NM_SETTING_SECRET_FLAG_AGENT_OWNED);
12778 test_read_wired_8021x_tls_secret_flags (TEST_IFCFG_WIRED_8021X_TLS_ALWAYS,
12779 NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
12780 test_read_wifi_open ();
12781 test_read_wifi_open_auto ();
12782 test_read_wifi_open_ssid_hex ();
12783 test_read_wifi_open_ssid_bad (TEST_IFCFG_WIFI_OPEN_SSID_BAD_HEX, "wifi-open-ssid-bad-hex-read");
12784 test_read_wifi_open_ssid_bad (TEST_IFCFG_WIFI_OPEN_SSID_LONG_HEX, "wifi-open-ssid-long-hex-read");
12785 test_read_wifi_open_ssid_bad (TEST_IFCFG_WIFI_OPEN_SSID_LONG_QUOTED, "wifi-open-ssid-long-quoted-read");
12786 test_read_wifi_open_ssid_quoted ();
12787 test_read_wifi_wep ();
12788 test_read_wifi_wep_adhoc ();
12789 test_read_wifi_wep_passphrase ();
12790 test_read_wifi_wep_40_ascii ();
12791 test_read_wifi_wep_104_ascii ();
12792 test_read_wifi_leap ();
12793 test_read_wifi_leap_secret_flags (TEST_IFCFG_WIFI_LEAP_AGENT, NM_SETTING_SECRET_FLAG_AGENT_OWNED);
12794 test_read_wifi_leap_secret_flags (TEST_IFCFG_WIFI_LEAP_ALWAYS,
12795 NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
12796 test_read_wifi_wpa_psk ();
12797 test_read_wifi_wpa_psk_2 ();
12798 test_read_wifi_wpa_psk_unquoted ();
12799 test_read_wifi_wpa_psk_unquoted2 ();
12800 test_read_wifi_wpa_psk_adhoc ();
12801 test_read_wifi_wpa_psk_hex ();
12802 test_read_wifi_dynamic_wep_leap ();
12803 test_read_wifi_wpa_eap_tls ();
12804 test_read_wifi_wpa_eap_ttls_tls ();
12805 test_read_wifi_wep_eap_ttls_chap ();
12806 test_read_wired_qeth_static ();
12807 test_read_wired_ctc_static ();
12808 test_read_wifi_wep_no_keys ();
12809 test_read_permissions ();
12810 test_read_wifi_wep_agent_keys ();
12811 test_read_infiniband ();
12812 test_read_vlan_interface ();
12813 test_read_vlan_only_vlan_id ();
12814 test_read_vlan_only_device ();
12815 g_test_add_func (TPATH "vlan/physdev", test_read_vlan_physdev);
12816
12817 test_write_wired_static ();
12818 test_write_wired_static_ip6_only ();
12819 test_write_wired_static_routes ();
12820 test_read_write_static_routes_legacy ();
12821 test_write_wired_dhcp ();
12822 g_test_add_func (TPATH "dhcp-plus-ip", test_write_wired_dhcp_plus_ip);
12823 test_write_wired_dhcp_8021x_peap_mschapv2 ();
12824 test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_PATH, NM_SETTING_SECRET_FLAG_AGENT_OWNED);
12825 test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_PATH, NM_SETTING_SECRET_FLAG_NOT_SAVED);
12826 test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_PATH, NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
12827 test_write_wired_8021x_tls (NM_SETTING_802_1X_CK_SCHEME_BLOB, NM_SETTING_SECRET_FLAG_NONE);
12828 test_write_wifi_open ();
12829 test_write_wifi_open_hex_ssid ();
12830 test_write_wifi_wep ();
12831 test_write_wifi_wep_adhoc ();
12832 test_write_wifi_wep_passphrase ();
12833 test_write_wifi_wep_40_ascii ();
12834 test_write_wifi_wep_104_ascii ();
12835 test_write_wifi_leap ();
12836 test_write_wifi_leap_secret_flags (NM_SETTING_SECRET_FLAG_AGENT_OWNED);
12837 test_write_wifi_leap_secret_flags (NM_SETTING_SECRET_FLAG_NOT_SAVED);
12838 test_write_wifi_leap_secret_flags (NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED);
12839 test_write_wifi_wpa_psk ("Test Write Wifi WPA PSK",
12840 "wifi-wpa-psk-write",
12841 FALSE,
12842 TRUE,
12843 FALSE,
12844 DEFAULT_HEX_PSK);
12845 test_write_wifi_wpa_psk ("Test Write Wifi WPA2 PSK",
12846 "wifi-wpa2-psk-write",
12847 FALSE,
12848 FALSE,
12849 TRUE,
12850 DEFAULT_HEX_PSK);
12851 test_write_wifi_wpa_psk ("Test Write Wifi WPA WPA2 PSK",
12852 "wifi-wpa-wpa2-psk-write",
12853 FALSE,
12854 TRUE,
12855 TRUE,
12856 DEFAULT_HEX_PSK);
12857 test_write_wifi_wpa_psk ("Test Write Wifi WEP WPA WPA2 PSK",
12858 "wifi-wep-wpa-wpa2-psk-write",
12859 TRUE,
12860 TRUE,
12861 TRUE,
12862 DEFAULT_HEX_PSK);
12863 test_write_wifi_wpa_psk ("Test Write Wifi WPA WPA2 PSK Passphrase",
12864 "wifi-wpa-wpa2-psk-passphrase-write",
12865 FALSE,
12866 TRUE,
12867 TRUE,
12868 "really insecure passphrase04!");
12869 test_write_wifi_wpa_psk ("Test Write Wifi WPA WPA2 PSK Passphrase Special Chars",
12870 "wifi-wpa-wpa2-psk-passphrase-write-spec-chars",
12871 FALSE,
12872 TRUE,
12873 TRUE,
12874 "blah`oops\"grr'$*@~!%\\");
12875 test_write_wifi_wpa_psk_adhoc ();
12876 test_write_wifi_wpa_eap_tls ();
12877 test_write_wifi_wpa_eap_ttls_tls ();
12878 test_write_wifi_wpa_eap_ttls_mschapv2 ();
12879 test_write_wifi_dynamic_wep_leap ();
12880 test_write_wifi_wpa_then_open ();
12881 test_write_wifi_wpa_then_wep_with_perms ();
12882 test_write_wired_qeth_dhcp ();
12883 test_write_wired_ctc_dhcp ();
12884 test_write_permissions ();
12885 test_write_wifi_wep_agent_keys ();
12886 test_write_infiniband ();
12887 test_write_vlan ();
12888 test_write_vlan_only_vlanid ();
12889 test_write_ethernet_missing_ipv6 ();
12890
12891 /* iSCSI / ibft */
12892 test_read_ibft_dhcp ();
12893 test_read_ibft_static ();
12894 test_read_ibft_malformed ("ibft-bad-record-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-record");
12895 test_read_ibft_malformed ("ibft-bad-entry-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-entry");
12896 test_read_ibft_malformed ("ibft-bad-ipaddr-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-ipaddr");
12897 test_read_ibft_malformed ("ibft-bad-gateway-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-gateway");
12898 test_read_ibft_malformed ("ibft-bad-dns1-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns1");
12899 test_read_ibft_malformed ("ibft-bad-dns2-read", TEST_IFCFG_DIR "/iscsiadm-test-bad-dns2");
12900
12901 /* bonding */
12902 test_read_bond_main ();
12903 test_read_bond_slave ();
12904 test_read_bond_slave_ib ();
12905 test_write_bond_main ();
12906 test_write_bond_slave ();
12907 test_write_bond_slave_ib ();
12908
12909 /* bridging */
12910 test_read_bridge_main ();
12911 test_write_bridge_main ();
12912 test_read_bridge_component ();
12913 test_write_bridge_component ();
12914 test_read_bridge_missing_stp ();
12915
12916 /* Stuff we expect to fail for now */
12917 test_write_wired_pppoe ();
12918 test_write_vpn ();
12919 test_write_mobile_broadband (TRUE);
12920 test_write_mobile_broadband (FALSE);
12921
12922 return g_test_run ();
12923 }
12924
12925