Blame src/supplicant/tests/test-supplicant-config.c

Packit Service a1bd4f
/* SPDX-License-Identifier: GPL-2.0+ */
Packit 5756e2
/*
Packit 5756e2
 * Copyright (C) 2008 - 2011 Red Hat, Inc.
Packit 5756e2
 */
Packit 5756e2
Packit 5756e2
#include "nm-default.h"
Packit 5756e2
Packit 5756e2
#include <stdio.h>
Packit 5756e2
#include <stdarg.h>
Packit 5756e2
#include <unistd.h>
Packit 5756e2
#include <netinet/in.h>
Packit 5756e2
#include <arpa/inet.h>
Packit 5756e2
#include <sys/socket.h>
Packit 5756e2
#include <sys/types.h>
Packit 5756e2
#include <sys/stat.h>
Packit 5756e2
Packit 5756e2
#include "nm-core-internal.h"
Packit 5756e2
Packit 5756e2
#include "supplicant/nm-supplicant-config.h"
Packit 5756e2
#include "supplicant/nm-supplicant-settings-verify.h"
Packit 5756e2
Packit 5756e2
#include "nm-test-utils-core.h"
Packit 5756e2
Packit Service a1bd4f
#define TEST_CERT_DIR NM_BUILD_SRCDIR "/src/supplicant/tests/certs"
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
static gboolean
Packit Service a1bd4f
validate_opt(const char *   detail,
Packit Service a1bd4f
             GVariant *     config,
Packit Service a1bd4f
             const char *   key,
Packit Service a1bd4f
             NMSupplOptType val_type,
Packit Service a1bd4f
             gconstpointer  expected)
Packit 5756e2
{
Packit Service a1bd4f
    char *       config_key;
Packit Service a1bd4f
    GVariant *   config_value;
Packit Service a1bd4f
    gboolean     found = FALSE;
Packit Service a1bd4f
    GVariantIter iter;
Packit Service a1bd4f
Packit Service a1bd4f
    g_assert(g_variant_is_of_type(config, G_VARIANT_TYPE_VARDICT));
Packit Service a1bd4f
Packit Service a1bd4f
    g_variant_iter_init(&iter, config);
Packit Service a1bd4f
    while (g_variant_iter_next(&iter, "{&sv}", (gpointer) &config_key, (gpointer) &config_value)) {
Packit Service a1bd4f
        if (!strcmp(key, config_key)) {
Packit Service a1bd4f
            found = TRUE;
Packit Service a1bd4f
            switch (val_type) {
Packit Service a1bd4f
            case NM_SUPPL_OPT_TYPE_INT:
Packit Service a1bd4f
            {
Packit Service a1bd4f
                g_assert(g_variant_is_of_type(config_value, G_VARIANT_TYPE_INT32));
Packit Service a1bd4f
                g_assert_cmpint(g_variant_get_int32(config_value), ==, GPOINTER_TO_INT(expected));
Packit Service a1bd4f
                break;
Packit Service a1bd4f
            }
Packit Service a1bd4f
            case NM_SUPPL_OPT_TYPE_BYTES:
Packit Service a1bd4f
            {
Packit Service a1bd4f
                const guint8 *expected_bytes;
Packit Service a1bd4f
                gsize         expected_len = 0;
Packit Service a1bd4f
                const guint8 *config_bytes;
Packit Service a1bd4f
                gsize         config_len = 0;
Packit Service a1bd4f
Packit Service a1bd4f
                expected_bytes = g_bytes_get_data((GBytes *) expected, &expected_len);
Packit Service a1bd4f
                g_assert(g_variant_is_of_type(config_value, G_VARIANT_TYPE_BYTESTRING));
Packit Service a1bd4f
                config_bytes = g_variant_get_fixed_array(config_value, &config_len, 1);
Packit Service a1bd4f
                g_assert_cmpmem(config_bytes, config_len, expected_bytes, expected_len);
Packit Service a1bd4f
                break;
Packit Service a1bd4f
            }
Packit Service a1bd4f
            case NM_SUPPL_OPT_TYPE_KEYWORD:
Packit Service a1bd4f
            case NM_SUPPL_OPT_TYPE_STRING:
Packit Service a1bd4f
            {
Packit Service a1bd4f
                const char *expected_str = expected;
Packit Service a1bd4f
                const char *config_str;
Packit Service a1bd4f
Packit Service a1bd4f
                g_assert(g_variant_is_of_type(config_value, G_VARIANT_TYPE_STRING));
Packit Service a1bd4f
                config_str = g_variant_get_string(config_value, NULL);
Packit Service a1bd4f
                g_assert_cmpstr(config_str, ==, expected_str);
Packit Service a1bd4f
                break;
Packit Service a1bd4f
            }
Packit Service a1bd4f
            default:
Packit Service a1bd4f
                g_assert_not_reached();
Packit Service a1bd4f
                break;
Packit Service a1bd4f
            }
Packit Service a1bd4f
        }
Packit Service a1bd4f
        g_variant_unref(config_value);
Packit Service a1bd4f
    }
Packit Service a1bd4f
Packit Service a1bd4f
    return found;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static GVariant *
Packit Service a1bd4f
build_supplicant_config(NMConnection * connection,
Packit Service a1bd4f
                        guint          mtu,
Packit Service a1bd4f
                        guint          fixed_freq,
Packit Service a1bd4f
                        NMSupplCapMask capabilities)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMSupplicantConfig *config = NULL;
Packit Service a1bd4f
    gs_free_error GError *     error           = NULL;
Packit Service a1bd4f
    NMSettingWireless *        s_wifi;
Packit Service a1bd4f
    NMSettingWirelessSecurity *s_wsec;
Packit Service a1bd4f
    NMSetting8021x *           s_8021x;
Packit Service a1bd4f
    gboolean                   success;
Packit Service a1bd4f
Packit Service a1bd4f
    config = nm_supplicant_config_new(capabilities);
Packit Service a1bd4f
Packit Service a1bd4f
    s_wifi = nm_connection_get_setting_wireless(connection);
Packit Service a1bd4f
    g_assert(s_wifi);
Packit Service a1bd4f
    success = nm_supplicant_config_add_setting_wireless(config, s_wifi, fixed_freq, &error);
Packit Service a1bd4f
    g_assert_no_error(error);
Packit Service a1bd4f
    g_assert(success);
Packit Service a1bd4f
Packit Service a1bd4f
    s_wsec = nm_connection_get_setting_wireless_security(connection);
Packit Service a1bd4f
    if (s_wsec) {
Packit Service a1bd4f
        NMSettingWirelessSecurityPmf  pmf  = nm_setting_wireless_security_get_pmf(s_wsec);
Packit Service a1bd4f
        NMSettingWirelessSecurityFils fils = nm_setting_wireless_security_get_fils(s_wsec);
Packit Service a1bd4f
        s_8021x                            = nm_connection_get_setting_802_1x(connection);
Packit Service a1bd4f
        success =
Packit Service a1bd4f
            nm_supplicant_config_add_setting_wireless_security(config,
Packit Service a1bd4f
                                                               s_wsec,
Packit Service a1bd4f
                                                               s_8021x,
Packit Service a1bd4f
                                                               nm_connection_get_uuid(connection),
Packit Service a1bd4f
                                                               mtu,
Packit Service a1bd4f
                                                               pmf,
Packit Service a1bd4f
                                                               fils,
Packit Service a1bd4f
                                                               &error);
Packit Service a1bd4f
    } else {
Packit Service a1bd4f
        success = nm_supplicant_config_add_no_security(config, &error);
Packit Service a1bd4f
    }
Packit Service a1bd4f
    g_assert_no_error(error);
Packit Service a1bd4f
    g_assert(success);
Packit Service a1bd4f
Packit Service a1bd4f
    success = nm_supplicant_config_add_bgscan(config, connection, &error);
Packit Service a1bd4f
    g_assert_no_error(error);
Packit Service a1bd4f
    g_assert(success);
Packit Service a1bd4f
Packit Service a1bd4f
    return nm_supplicant_config_to_variant(config);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static NMConnection *
Packit Service a1bd4f
new_basic_connection(const char *id, GBytes *ssid, const char *bssid_str)
Packit 5756e2
{
Packit Service a1bd4f
    NMConnection *       connection;
Packit Service a1bd4f
    NMSettingConnection *s_con;
Packit Service a1bd4f
    NMSettingWireless *  s_wifi;
Packit Service a1bd4f
    NMSettingIPConfig *  s_ip4;
Packit Service a1bd4f
    gs_free char *       uuid = nm_utils_uuid_generate();
Packit Service a1bd4f
Packit Service a1bd4f
    connection = nm_simple_connection_new();
Packit Service a1bd4f
Packit Service a1bd4f
    /* Connection setting */
Packit Service a1bd4f
    s_con = (NMSettingConnection *) nm_setting_connection_new();
Packit Service a1bd4f
    nm_connection_add_setting(connection, NM_SETTING(s_con));
Packit Service a1bd4f
    g_object_set(s_con,
Packit Service a1bd4f
                 NM_SETTING_CONNECTION_ID,
Packit Service a1bd4f
                 id,
Packit Service a1bd4f
                 NM_SETTING_CONNECTION_UUID,
Packit Service a1bd4f
                 uuid,
Packit Service a1bd4f
                 NM_SETTING_CONNECTION_AUTOCONNECT,
Packit Service a1bd4f
                 TRUE,
Packit Service a1bd4f
                 NM_SETTING_CONNECTION_TYPE,
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SETTING_NAME,
Packit Service a1bd4f
                 NULL);
Packit Service a1bd4f
Packit Service a1bd4f
    /* Wifi setting */
Packit Service a1bd4f
    s_wifi = (NMSettingWireless *) nm_setting_wireless_new();
Packit Service a1bd4f
    nm_connection_add_setting(connection, NM_SETTING(s_wifi));
Packit Service a1bd4f
    g_object_set(s_wifi,
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SSID,
Packit Service a1bd4f
                 ssid,
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_BSSID,
Packit Service a1bd4f
                 bssid_str,
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_MODE,
Packit Service a1bd4f
                 "infrastructure",
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_BAND,
Packit Service a1bd4f
                 "bg",
Packit Service a1bd4f
                 NULL);
Packit Service a1bd4f
Packit Service a1bd4f
    /* IP4 setting */
Packit Service a1bd4f
    s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new();
Packit Service a1bd4f
    nm_connection_add_setting(connection, NM_SETTING(s_ip4));
Packit Service a1bd4f
    g_object_set(s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
Packit Service a1bd4f
Packit Service a1bd4f
    return connection;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_open(void)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    gs_unref_variant GVariant *config_dict   = NULL;
Packit Service a1bd4f
    gboolean                   success;
Packit Service a1bd4f
    GError *                   error       = NULL;
Packit Service a1bd4f
    const unsigned char        ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
Packit Service a1bd4f
    gs_unref_bytes GBytes *ssid            = g_bytes_new(ssid_data, sizeof(ssid_data));
Packit Service a1bd4f
    const char *           bssid_str       = "11:22:33:44:55:66";
Packit Service a1bd4f
Packit Service a1bd4f
    connection = new_basic_connection("Test Wifi Open", ssid, bssid_str);
Packit Service a1bd4f
    success    = nm_connection_verify(connection, &error);
Packit Service a1bd4f
    g_assert_no_error(error);
Packit Service a1bd4f
    g_assert(success);
Packit Service a1bd4f
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ssid' value 'Test SSID'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'scan_ssid' value '1'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'bssid' value '11:22:33:44:55:66'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'freq_list' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'key_mgmt' value 'NONE'");
Packit Service a1bd4f
    config_dict =
Packit Service a1bd4f
        build_supplicant_config(connection,
Packit Service a1bd4f
                                1500,
Packit Service a1bd4f
                                0,
Packit Service a1bd4f
                                NM_SUPPL_CAP_MASK_T_PMF_YES | NM_SUPPL_CAP_MASK_T_FILS_YES);
Packit Service a1bd4f
    g_test_assert_expected_messages();
Packit Service a1bd4f
    g_assert(config_dict);
Packit Service a1bd4f
Packit Service a1bd4f
    validate_opt("wifi-open", config_dict, "scan_ssid", NM_SUPPL_OPT_TYPE_INT, GINT_TO_POINTER(1));
Packit Service a1bd4f
    validate_opt("wifi-open", config_dict, "ssid", NM_SUPPL_OPT_TYPE_BYTES, ssid);
Packit Service a1bd4f
    validate_opt("wifi-open", config_dict, "bssid", NM_SUPPL_OPT_TYPE_KEYWORD, bssid_str);
Packit Service a1bd4f
    validate_opt("wifi-open", config_dict, "key_mgmt", NM_SUPPL_OPT_TYPE_KEYWORD, "NONE");
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_wep_key(const char *         detail,
Packit Service a1bd4f
                  gboolean             test_bssid,
Packit Service a1bd4f
                  NMWepKeyType         wep_type,
Packit Service a1bd4f
                  const char *         key_data,
Packit Service a1bd4f
                  const unsigned char *expected,
Packit Service a1bd4f
                  size_t               expected_size)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    gs_unref_variant GVariant *config_dict   = NULL;
Packit Service a1bd4f
    NMSettingWirelessSecurity *s_wsec;
Packit Service a1bd4f
    gboolean                   success;
Packit Service a1bd4f
    GError *                   error       = NULL;
Packit Service a1bd4f
    const unsigned char        ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
Packit Service a1bd4f
    gs_unref_bytes GBytes *ssid            = g_bytes_new(ssid_data, sizeof(ssid_data));
Packit Service a1bd4f
    const char *           bssid_str       = "11:22:33:44:55:66";
Packit Service a1bd4f
    gs_unref_bytes GBytes *wep_key_bytes   = g_bytes_new(expected, expected_size);
Packit Service a1bd4f
    const char *           bgscan_data     = "simple:30:-70:86400";
Packit Service a1bd4f
    gs_unref_bytes GBytes *bgscan          = g_bytes_new(bgscan_data, strlen(bgscan_data));
Packit Service a1bd4f
Packit Service a1bd4f
    connection = new_basic_connection("Test Wifi WEP Key", ssid, test_bssid ? bssid_str : NULL);
Packit Service a1bd4f
Packit Service a1bd4f
    /* Wifi Security setting */
Packit Service a1bd4f
    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
Packit Service a1bd4f
    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
Packit Service a1bd4f
    g_object_set(s_wsec,
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
Packit Service a1bd4f
                 "none",
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE,
Packit Service a1bd4f
                 wep_type,
Packit Service a1bd4f
                 NULL);
Packit Service a1bd4f
    nm_setting_wireless_security_set_wep_key(s_wsec, 0, key_data);
Packit Service a1bd4f
Packit Service a1bd4f
    success = nm_connection_verify(connection, &error);
Packit Service a1bd4f
    g_assert_no_error(error);
Packit Service a1bd4f
    g_assert(success);
Packit Service a1bd4f
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ssid' value 'Test SSID'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'scan_ssid' value '1'*");
Packit Service a1bd4f
    if (test_bssid)
Packit Service a1bd4f
        NMTST_EXPECT_NM_INFO("Config: added 'bssid' value '11:22:33:44:55:66'*");
Packit Service a1bd4f
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'freq_list' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'key_mgmt' value 'NONE'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'wep_key0' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'wep_tx_keyidx' value '0'");
Packit Service a1bd4f
    if (!test_bssid)
Packit Service a1bd4f
        NMTST_EXPECT_NM_INFO("Config: added 'bgscan' value 'simple:30:-70:86400'*");
Packit Service a1bd4f
Packit Service a1bd4f
    config_dict =
Packit Service a1bd4f
        build_supplicant_config(connection,
Packit Service a1bd4f
                                1500,
Packit Service a1bd4f
                                0,
Packit Service a1bd4f
                                NM_SUPPL_CAP_MASK_T_PMF_YES | NM_SUPPL_CAP_MASK_T_FILS_YES);
Packit Service a1bd4f
    g_test_assert_expected_messages();
Packit Service a1bd4f
    g_assert(config_dict);
Packit Service a1bd4f
Packit Service a1bd4f
    validate_opt(detail, config_dict, "scan_ssid", NM_SUPPL_OPT_TYPE_INT, GINT_TO_POINTER(1));
Packit Service a1bd4f
    validate_opt(detail, config_dict, "ssid", NM_SUPPL_OPT_TYPE_BYTES, ssid);
Packit Service a1bd4f
    if (test_bssid)
Packit Service a1bd4f
        validate_opt(detail, config_dict, "bssid", NM_SUPPL_OPT_TYPE_KEYWORD, bssid_str);
Packit Service a1bd4f
    else
Packit Service a1bd4f
        validate_opt(detail, config_dict, "bgscan", NM_SUPPL_OPT_TYPE_BYTES, bgscan);
Packit Service a1bd4f
Packit Service a1bd4f
    validate_opt(detail, config_dict, "key_mgmt", NM_SUPPL_OPT_TYPE_KEYWORD, "NONE");
Packit Service a1bd4f
    validate_opt(detail, config_dict, "wep_tx_keyidx", NM_SUPPL_OPT_TYPE_INT, GINT_TO_POINTER(0));
Packit Service a1bd4f
    validate_opt(detail, config_dict, "wep_key0", NM_SUPPL_OPT_TYPE_BYTES, wep_key_bytes);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_wep(void)
Packit 5756e2
{
Packit Service a1bd4f
    const char *        key1            = "12345";
Packit Service a1bd4f
    const unsigned char key1_expected[] = {0x31, 0x32, 0x33, 0x34, 0x35};
Packit Service a1bd4f
    const char *        key2            = "ascii test$$$";
Packit Service a1bd4f
    const unsigned char key2_expected[] =
Packit Service a1bd4f
        {0x61, 0x73, 0x63, 0x69, 0x69, 0x20, 0x74, 0x65, 0x73, 0x74, 0x24, 0x24, 0x24};
Packit Service a1bd4f
    const char *        key3            = "abcdef1234";
Packit Service a1bd4f
    const unsigned char key3_expected[] = {0xab, 0xcd, 0xef, 0x12, 0x34};
Packit Service a1bd4f
    const char *        key4            = "96aec785c6392675f87f592972";
Packit Service a1bd4f
    const unsigned char key4_expected[] =
Packit Service a1bd4f
        {0x96, 0xae, 0xc7, 0x85, 0xc6, 0x39, 0x26, 0x75, 0xf8, 0x7f, 0x59, 0x29, 0x72};
Packit Service a1bd4f
    const char *        key5 = "r34lly l33t w3p p4ssphr4s3 for t3st1ng";
Packit Service a1bd4f
    const unsigned char key5_expected[] =
Packit Service a1bd4f
        {0xce, 0x68, 0x8b, 0x35, 0xf6, 0x0a, 0x2b, 0xbf, 0xc9, 0x8f, 0xed, 0x10, 0xda};
Packit Service a1bd4f
Packit Service a1bd4f
    test_wifi_wep_key("wifi-wep-ascii-40",
Packit Service a1bd4f
                      TRUE,
Packit Service a1bd4f
                      NM_WEP_KEY_TYPE_KEY,
Packit Service a1bd4f
                      key1,
Packit Service a1bd4f
                      key1_expected,
Packit Service a1bd4f
                      sizeof(key1_expected));
Packit Service a1bd4f
    test_wifi_wep_key("wifi-wep-ascii-104",
Packit Service a1bd4f
                      TRUE,
Packit Service a1bd4f
                      NM_WEP_KEY_TYPE_KEY,
Packit Service a1bd4f
                      key2,
Packit Service a1bd4f
                      key2_expected,
Packit Service a1bd4f
                      sizeof(key2_expected));
Packit Service a1bd4f
    test_wifi_wep_key("wifi-wep-hex-40",
Packit Service a1bd4f
                      TRUE,
Packit Service a1bd4f
                      NM_WEP_KEY_TYPE_KEY,
Packit Service a1bd4f
                      key3,
Packit Service a1bd4f
                      key3_expected,
Packit Service a1bd4f
                      sizeof(key3_expected));
Packit Service a1bd4f
    test_wifi_wep_key("wifi-wep-hex-104",
Packit Service a1bd4f
                      TRUE,
Packit Service a1bd4f
                      NM_WEP_KEY_TYPE_KEY,
Packit Service a1bd4f
                      key4,
Packit Service a1bd4f
                      key4_expected,
Packit Service a1bd4f
                      sizeof(key4_expected));
Packit Service a1bd4f
    test_wifi_wep_key("wifi-wep-passphrase-104",
Packit Service a1bd4f
                      TRUE,
Packit Service a1bd4f
                      NM_WEP_KEY_TYPE_PASSPHRASE,
Packit Service a1bd4f
                      key5,
Packit Service a1bd4f
                      key5_expected,
Packit Service a1bd4f
                      sizeof(key5_expected));
Packit Service a1bd4f
Packit Service a1bd4f
    test_wifi_wep_key("wifi-wep-old-hex-104",
Packit Service a1bd4f
                      TRUE,
Packit Service a1bd4f
                      NM_WEP_KEY_TYPE_UNKNOWN,
Packit Service a1bd4f
                      key4,
Packit Service a1bd4f
                      key4_expected,
Packit Service a1bd4f
                      sizeof(key4_expected));
Packit Service a1bd4f
Packit Service a1bd4f
    /* Unlocked BSSID to test bgscan */
Packit Service a1bd4f
    test_wifi_wep_key("wifi-wep-hex-40",
Packit Service a1bd4f
                      FALSE,
Packit Service a1bd4f
                      NM_WEP_KEY_TYPE_KEY,
Packit Service a1bd4f
                      key3,
Packit Service a1bd4f
                      key3_expected,
Packit Service a1bd4f
                      sizeof(key3_expected));
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_wpa_psk(const char *                 detail,
Packit Service a1bd4f
                  NMSupplOptType               key_type,
Packit Service a1bd4f
                  const char *                 key_data,
Packit Service a1bd4f
                  const unsigned char *        expected,
Packit Service a1bd4f
                  size_t                       expected_size,
Packit Service a1bd4f
                  NMSettingWirelessSecurityPmf pmf)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    gs_unref_variant GVariant *config_dict   = NULL;
Packit Service a1bd4f
    NMSettingWirelessSecurity *s_wsec;
Packit Service a1bd4f
    gboolean                   success;
Packit Service a1bd4f
    GError *                   error       = NULL;
Packit Service a1bd4f
    const unsigned char        ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
Packit Service a1bd4f
    gs_unref_bytes GBytes *ssid            = g_bytes_new(ssid_data, sizeof(ssid_data));
Packit Service a1bd4f
    const char *           bssid_str       = "11:22:33:44:55:66";
Packit Service a1bd4f
    gs_unref_bytes GBytes *wpa_psk_bytes   = g_bytes_new(expected, expected_size);
Packit Service a1bd4f
Packit Service a1bd4f
    connection = new_basic_connection("Test Wifi WPA PSK", ssid, bssid_str);
Packit Service a1bd4f
Packit Service a1bd4f
    /* Wifi Security setting */
Packit Service a1bd4f
    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
Packit Service a1bd4f
    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
Packit Service a1bd4f
    g_object_set(s_wsec,
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
Packit Service a1bd4f
                 "wpa-psk",
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SECURITY_PSK,
Packit Service a1bd4f
                 key_data,
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SECURITY_PMF,
Packit Service a1bd4f
                 (int) pmf,
Packit Service a1bd4f
                 NULL);
Packit Service a1bd4f
    nm_setting_wireless_security_add_proto(s_wsec, "wpa");
Packit Service a1bd4f
    nm_setting_wireless_security_add_proto(s_wsec, "rsn");
Packit Service a1bd4f
    nm_setting_wireless_security_add_pairwise(s_wsec, "tkip");
Packit Service a1bd4f
    nm_setting_wireless_security_add_pairwise(s_wsec, "ccmp");
Packit Service a1bd4f
    nm_setting_wireless_security_add_group(s_wsec, "tkip");
Packit Service a1bd4f
    nm_setting_wireless_security_add_group(s_wsec, "ccmp");
Packit Service a1bd4f
Packit Service a1bd4f
    success = nm_connection_verify(connection, &error);
Packit Service a1bd4f
    g_assert_no_error(error);
Packit Service a1bd4f
    g_assert(success);
Packit Service a1bd4f
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ssid' value 'Test SSID'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'scan_ssid' value '1'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'bssid' value '11:22:33:44:55:66'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'freq_list' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'key_mgmt' value 'WPA-PSK WPA-PSK-SHA256'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'psk' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'proto' value 'WPA RSN'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'pairwise' value 'TKIP CCMP'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'group' value 'TKIP CCMP'");
Packit Service a1bd4f
    switch (pmf) {
Packit Service a1bd4f
    case NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE:
Packit Service a1bd4f
        NMTST_EXPECT_NM_INFO("Config: added 'ieee80211w' value '0'");
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case NM_SETTING_WIRELESS_SECURITY_PMF_REQUIRED:
Packit Service a1bd4f
        NMTST_EXPECT_NM_INFO("Config: added 'ieee80211w' value '2'");
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    default:
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    }
Packit Service a1bd4f
    config_dict =
Packit Service a1bd4f
        build_supplicant_config(connection,
Packit Service a1bd4f
                                1500,
Packit Service a1bd4f
                                0,
Packit Service a1bd4f
                                NM_SUPPL_CAP_MASK_T_PMF_YES | NM_SUPPL_CAP_MASK_T_FILS_YES);
Packit Service a1bd4f
Packit Service a1bd4f
    g_test_assert_expected_messages();
Packit Service a1bd4f
    g_assert(config_dict);
Packit Service a1bd4f
Packit Service a1bd4f
    validate_opt(detail, config_dict, "scan_ssid", NM_SUPPL_OPT_TYPE_INT, GINT_TO_POINTER(1));
Packit Service a1bd4f
    validate_opt(detail, config_dict, "ssid", NM_SUPPL_OPT_TYPE_BYTES, ssid);
Packit Service a1bd4f
    validate_opt(detail, config_dict, "bssid", NM_SUPPL_OPT_TYPE_KEYWORD, bssid_str);
Packit Service a1bd4f
    validate_opt(detail,
Packit Service a1bd4f
                 config_dict,
Packit Service a1bd4f
                 "key_mgmt",
Packit Service a1bd4f
                 NM_SUPPL_OPT_TYPE_KEYWORD,
Packit Service a1bd4f
                 "WPA-PSK WPA-PSK-SHA256");
Packit Service a1bd4f
    validate_opt(detail, config_dict, "proto", NM_SUPPL_OPT_TYPE_KEYWORD, "WPA RSN");
Packit Service a1bd4f
    validate_opt(detail, config_dict, "pairwise", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    validate_opt(detail, config_dict, "group", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    if (key_type == NM_SUPPL_OPT_TYPE_BYTES)
Packit Service a1bd4f
        validate_opt(detail, config_dict, "psk", key_type, wpa_psk_bytes);
Packit Service a1bd4f
    else if (key_type == NM_SUPPL_OPT_TYPE_STRING)
Packit Service a1bd4f
        validate_opt(detail, config_dict, "psk", key_type, expected);
Packit Service a1bd4f
    else
Packit Service a1bd4f
        g_assert_not_reached();
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_sae_psk(const char *psk)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    gs_unref_variant GVariant *config_dict   = NULL;
Packit Service a1bd4f
    NMSettingWirelessSecurity *s_wsec;
Packit Service a1bd4f
    gboolean                   success;
Packit Service a1bd4f
    GError *                   error       = NULL;
Packit Service a1bd4f
    const unsigned char        ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
Packit Service a1bd4f
    gs_unref_bytes GBytes *ssid            = g_bytes_new(ssid_data, sizeof(ssid_data));
Packit Service a1bd4f
    const char *           bssid_str       = "11:22:33:44:55:66";
Packit Service a1bd4f
    int                    short_psk       = strlen(psk) < 8;
Packit Service a1bd4f
Packit Service a1bd4f
    connection = new_basic_connection("Test Wifi SAE", ssid, bssid_str);
Packit Service a1bd4f
Packit Service a1bd4f
    /* Wifi Security setting */
Packit Service a1bd4f
    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
Packit Service a1bd4f
    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
Packit Service a1bd4f
    g_object_set(s_wsec,
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
Packit Service a1bd4f
                 "sae",
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SECURITY_PSK,
Packit Service a1bd4f
                 psk,
Packit Service a1bd4f
                 NULL);
Packit Service a1bd4f
    nm_setting_wireless_security_add_proto(s_wsec, "rsn");
Packit Service a1bd4f
    nm_setting_wireless_security_add_pairwise(s_wsec, "tkip");
Packit Service a1bd4f
    nm_setting_wireless_security_add_pairwise(s_wsec, "ccmp");
Packit Service a1bd4f
    nm_setting_wireless_security_add_group(s_wsec, "tkip");
Packit Service a1bd4f
    nm_setting_wireless_security_add_group(s_wsec, "ccmp");
Packit Service a1bd4f
Packit Service a1bd4f
    success = nm_connection_verify(connection, &error);
Packit Service a1bd4f
    g_assert_no_error(error);
Packit Service a1bd4f
    g_assert(success);
Packit Service a1bd4f
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ssid' value 'Test SSID'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'scan_ssid' value '1'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'bssid' value '11:22:33:44:55:66'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'freq_list' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'key_mgmt' value 'SAE'");
Packit Service a1bd4f
    if (short_psk)
Packit Service a1bd4f
        NMTST_EXPECT_NM_INFO("Config: added 'sae_password' value *");
Packit Service a1bd4f
    else
Packit Service a1bd4f
        NMTST_EXPECT_NM_INFO("Config: added 'psk' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'proto' value 'RSN'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'pairwise' value 'TKIP CCMP'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'group' value 'TKIP CCMP'");
Packit Service a1bd4f
    config_dict =
Packit Service a1bd4f
        build_supplicant_config(connection,
Packit Service a1bd4f
                                1500,
Packit Service a1bd4f
                                0,
Packit Service a1bd4f
                                NM_SUPPL_CAP_MASK_T_PMF_YES | NM_SUPPL_CAP_MASK_T_FILS_YES);
Packit Service a1bd4f
Packit Service a1bd4f
    g_test_assert_expected_messages();
Packit Service a1bd4f
    g_assert(config_dict);
Packit Service a1bd4f
Packit Service a1bd4f
    validate_opt("wifi-sae", config_dict, "scan_ssid", NM_SUPPL_OPT_TYPE_INT, GINT_TO_POINTER(1));
Packit Service a1bd4f
    validate_opt("wifi-sae", config_dict, "ssid", NM_SUPPL_OPT_TYPE_BYTES, ssid);
Packit Service a1bd4f
    validate_opt("wifi-sae", config_dict, "bssid", NM_SUPPL_OPT_TYPE_KEYWORD, bssid_str);
Packit Service a1bd4f
    validate_opt("wifi-sae", config_dict, "key_mgmt", NM_SUPPL_OPT_TYPE_KEYWORD, "SAE");
Packit Service a1bd4f
    validate_opt("wifi-sae", config_dict, "proto", NM_SUPPL_OPT_TYPE_KEYWORD, "RSN");
Packit Service a1bd4f
    validate_opt("wifi-sae", config_dict, "pairwise", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    validate_opt("wifi-sae", config_dict, "group", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    if (short_psk)
Packit Service a1bd4f
        validate_opt("wifi-sae", config_dict, "sae_password", NM_SUPPL_OPT_TYPE_KEYWORD, psk);
Packit Service a1bd4f
    else
Packit Service a1bd4f
        validate_opt("wifi-sae", config_dict, "psk", NM_SUPPL_OPT_TYPE_KEYWORD, psk);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_sae(void)
Packit 5756e2
{
Packit Service a1bd4f
    test_wifi_sae_psk("Moo");
Packit Service a1bd4f
    test_wifi_sae_psk("Hello World!");
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_wpa_psk_types(void)
Packit 5756e2
{
Packit Service a1bd4f
    const char *        key1 = "d4721e911461d3cdef9793858e977fcda091779243abb7316c2f11605a160893";
Packit Service a1bd4f
    const unsigned char key1_expected[] = {0xd4, 0x72, 0x1e, 0x91, 0x14, 0x61, 0xd3, 0xcd,
Packit Service a1bd4f
                                           0xef, 0x97, 0x93, 0x85, 0x8e, 0x97, 0x7f, 0xcd,
Packit Service a1bd4f
                                           0xa0, 0x91, 0x77, 0x92, 0x43, 0xab, 0xb7, 0x31,
Packit Service a1bd4f
                                           0x6c, 0x2f, 0x11, 0x60, 0x5a, 0x16, 0x08, 0x93};
Packit Service a1bd4f
    const char *        key2            = "r34lly l33t wp4 p4ssphr4s3 for t3st1ng";
Packit Service a1bd4f
Packit Service a1bd4f
    test_wifi_wpa_psk("wifi-wpa-psk-hex",
Packit Service a1bd4f
                      NM_SUPPL_OPT_TYPE_BYTES,
Packit Service a1bd4f
                      key1,
Packit Service a1bd4f
                      key1_expected,
Packit Service a1bd4f
                      sizeof(key1_expected),
Packit Service a1bd4f
                      NM_SETTING_WIRELESS_SECURITY_PMF_OPTIONAL);
Packit Service a1bd4f
    test_wifi_wpa_psk("wifi-wep-psk-passphrase",
Packit Service a1bd4f
                      NM_SUPPL_OPT_TYPE_STRING,
Packit Service a1bd4f
                      key2,
Packit Service a1bd4f
                      (gconstpointer) key2,
Packit Service a1bd4f
                      strlen(key2),
Packit Service a1bd4f
                      NM_SETTING_WIRELESS_SECURITY_PMF_REQUIRED);
Packit Service a1bd4f
    test_wifi_wpa_psk("pmf-disabled",
Packit Service a1bd4f
                      NM_SUPPL_OPT_TYPE_STRING,
Packit Service a1bd4f
                      key2,
Packit Service a1bd4f
                      (gconstpointer) key2,
Packit Service a1bd4f
                      strlen(key2),
Packit Service a1bd4f
                      NM_SETTING_WIRELESS_SECURITY_PMF_DISABLE);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static NMConnection *
Packit Service a1bd4f
generate_wifi_eap_connection(const char *                  id,
Packit Service a1bd4f
                             GBytes *                      ssid,
Packit Service a1bd4f
                             const char *                  bssid_str,
Packit Service a1bd4f
                             NMSettingWirelessSecurityFils fils)
Packit 5756e2
{
Packit Service a1bd4f
    NMConnection *             connection = NULL;
Packit Service a1bd4f
    NMSettingWirelessSecurity *s_wsec;
Packit Service a1bd4f
    NMSetting8021x *           s_8021x;
Packit Service a1bd4f
    gboolean                   success;
Packit Service a1bd4f
    GError *                   error = NULL;
Packit Service a1bd4f
Packit Service a1bd4f
    connection = new_basic_connection(id, ssid, bssid_str);
Packit Service a1bd4f
Packit Service a1bd4f
    /* Wifi Security setting */
Packit Service a1bd4f
    s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new();
Packit Service a1bd4f
    nm_connection_add_setting(connection, NM_SETTING(s_wsec));
Packit Service a1bd4f
    g_object_set(s_wsec,
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SECURITY_KEY_MGMT,
Packit Service a1bd4f
                 "wpa-eap",
Packit Service a1bd4f
                 NM_SETTING_WIRELESS_SECURITY_FILS,
Packit Service a1bd4f
                 (int) fils,
Packit Service a1bd4f
                 NULL);
Packit Service a1bd4f
    nm_setting_wireless_security_add_proto(s_wsec, "wpa");
Packit Service a1bd4f
    nm_setting_wireless_security_add_proto(s_wsec, "rsn");
Packit Service a1bd4f
    nm_setting_wireless_security_add_pairwise(s_wsec, "tkip");
Packit Service a1bd4f
    nm_setting_wireless_security_add_pairwise(s_wsec, "ccmp");
Packit Service a1bd4f
    nm_setting_wireless_security_add_group(s_wsec, "tkip");
Packit Service a1bd4f
    nm_setting_wireless_security_add_group(s_wsec, "ccmp");
Packit Service a1bd4f
Packit Service a1bd4f
    /* 802-1X setting */
Packit Service a1bd4f
    s_8021x = (NMSetting8021x *) nm_setting_802_1x_new();
Packit Service a1bd4f
    nm_connection_add_setting(connection, NM_SETTING(s_8021x));
Packit Service a1bd4f
    nm_setting_802_1x_add_eap_method(s_8021x, "tls");
Packit Service a1bd4f
    nm_setting_802_1x_set_client_cert(s_8021x,
Packit Service a1bd4f
                                      TEST_CERT_DIR "/test-cert.p12",
Packit Service a1bd4f
                                      NM_SETTING_802_1X_CK_SCHEME_PATH,
Packit Service a1bd4f
                                      NULL,
Packit Service a1bd4f
                                      NULL);
Packit Service a1bd4f
    g_assert(nm_setting_802_1x_set_ca_cert(s_8021x,
Packit Service a1bd4f
                                           TEST_CERT_DIR "/test-ca-cert.pem",
Packit Service a1bd4f
                                           NM_SETTING_802_1X_CK_SCHEME_PATH,
Packit Service a1bd4f
                                           NULL,
Packit Service a1bd4f
                                           NULL));
Packit Service a1bd4f
    nm_setting_802_1x_set_private_key(s_8021x,
Packit Service a1bd4f
                                      TEST_CERT_DIR "/test-cert.p12",
Packit Service a1bd4f
                                      NULL,
Packit Service a1bd4f
                                      NM_SETTING_802_1X_CK_SCHEME_PATH,
Packit Service a1bd4f
                                      NULL,
Packit Service a1bd4f
                                      NULL);
Packit Service a1bd4f
Packit Service a1bd4f
    success = nm_connection_verify(connection, &error);
Packit Service a1bd4f
    g_assert_no_error(error);
Packit Service a1bd4f
    g_assert(success);
Packit Service a1bd4f
Packit Service a1bd4f
    return connection;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_eap_locked_bssid(void)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    gs_unref_variant GVariant *config_dict   = NULL;
Packit Service a1bd4f
    const unsigned char        ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
Packit Service a1bd4f
    gs_unref_bytes GBytes *ssid            = g_bytes_new(ssid_data, sizeof(ssid_data));
Packit Service a1bd4f
    const char *           bssid_str       = "11:22:33:44:55:66";
Packit Service a1bd4f
    guint32                mtu             = 1100;
Packit Service a1bd4f
Packit Service a1bd4f
    connection = generate_wifi_eap_connection("Test Wifi EAP-TLS Locked",
Packit Service a1bd4f
                                              ssid,
Packit Service a1bd4f
                                              bssid_str,
Packit Service a1bd4f
                                              NM_SETTING_WIRELESS_SECURITY_FILS_OPTIONAL);
Packit Service a1bd4f
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ssid' value 'Test SSID'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'scan_ssid' value '1'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'bssid' value '11:22:33:44:55:66'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'freq_list' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'key_mgmt' value 'WPA-EAP'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'proto' value 'WPA RSN'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'pairwise' value 'TKIP CCMP'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'group' value 'TKIP CCMP'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'eap' value 'TLS'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'fragment_size' value '1086'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ca_cert' value '*/test-ca-cert.pem'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'private_key' value '*/test-cert.p12'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'proactive_key_caching' value '1'");
Packit Service a1bd4f
    config_dict = build_supplicant_config(connection, mtu, 0, NM_SUPPL_CAP_MASK_NONE);
Packit Service a1bd4f
    g_test_assert_expected_messages();
Packit Service a1bd4f
    g_assert(config_dict);
Packit Service a1bd4f
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "scan_ssid", NM_SUPPL_OPT_TYPE_INT, GINT_TO_POINTER(1));
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "ssid", NM_SUPPL_OPT_TYPE_BYTES, ssid);
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "bssid", NM_SUPPL_OPT_TYPE_KEYWORD, bssid_str);
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "key_mgmt", NM_SUPPL_OPT_TYPE_KEYWORD, "WPA-EAP");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "eap", NM_SUPPL_OPT_TYPE_KEYWORD, "TLS");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "proto", NM_SUPPL_OPT_TYPE_KEYWORD, "WPA RSN");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "pairwise", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "group", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    validate_opt("wifi-eap",
Packit Service a1bd4f
                 config_dict,
Packit Service a1bd4f
                 "fragment_size",
Packit Service a1bd4f
                 NM_SUPPL_OPT_TYPE_INT,
Packit Service a1bd4f
                 GINT_TO_POINTER(mtu - 14));
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_eap_unlocked_bssid(void)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    gs_unref_variant GVariant *config_dict   = NULL;
Packit Service a1bd4f
    const unsigned char        ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
Packit Service a1bd4f
    gs_unref_bytes GBytes *ssid            = g_bytes_new(ssid_data, sizeof(ssid_data));
Packit Service a1bd4f
    const char *           bgscan_data     = "simple:30:-65:300";
Packit Service a1bd4f
    gs_unref_bytes GBytes *bgscan          = g_bytes_new(bgscan_data, strlen(bgscan_data));
Packit Service a1bd4f
    guint32                mtu             = 1100;
Packit Service a1bd4f
Packit Service a1bd4f
    connection = generate_wifi_eap_connection("Test Wifi EAP-TLS Unlocked",
Packit Service a1bd4f
                                              ssid,
Packit Service a1bd4f
                                              NULL,
Packit Service a1bd4f
                                              NM_SETTING_WIRELESS_SECURITY_FILS_REQUIRED);
Packit Service a1bd4f
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ssid' value 'Test SSID'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'scan_ssid' value '1'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'freq_list' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'key_mgmt' value 'FILS-SHA256 FILS-SHA384'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'proto' value 'WPA RSN'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'pairwise' value 'TKIP CCMP'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'group' value 'TKIP CCMP'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'eap' value 'TLS'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'fragment_size' value '1086'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ca_cert' value '*/test-ca-cert.pem'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'private_key' value '*/test-cert.p12'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'proactive_key_caching' value '1'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'bgscan' value 'simple:30:-65:300'");
Packit Service a1bd4f
    config_dict = build_supplicant_config(connection, mtu, 0, NM_SUPPL_CAP_MASK_T_FILS_YES);
Packit Service a1bd4f
    g_test_assert_expected_messages();
Packit Service a1bd4f
    g_assert(config_dict);
Packit Service a1bd4f
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "scan_ssid", NM_SUPPL_OPT_TYPE_INT, GINT_TO_POINTER(1));
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "ssid", NM_SUPPL_OPT_TYPE_BYTES, ssid);
Packit Service a1bd4f
    validate_opt("wifi-eap",
Packit Service a1bd4f
                 config_dict,
Packit Service a1bd4f
                 "key_mgmt",
Packit Service a1bd4f
                 NM_SUPPL_OPT_TYPE_KEYWORD,
Packit Service a1bd4f
                 "FILS-SHA256 FILS-SHA384");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "eap", NM_SUPPL_OPT_TYPE_KEYWORD, "TLS");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "proto", NM_SUPPL_OPT_TYPE_KEYWORD, "WPA RSN");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "pairwise", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "group", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    validate_opt("wifi-eap",
Packit Service a1bd4f
                 config_dict,
Packit Service a1bd4f
                 "fragment_size",
Packit Service a1bd4f
                 NM_SUPPL_OPT_TYPE_INT,
Packit Service a1bd4f
                 GINT_TO_POINTER(mtu - 14));
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "bgscan", NM_SUPPL_OPT_TYPE_BYTES, bgscan);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_wifi_eap_fils_disabled(void)
Packit 5756e2
{
Packit Service a1bd4f
    gs_unref_object NMConnection *connection = NULL;
Packit Service a1bd4f
    gs_unref_variant GVariant *config_dict   = NULL;
Packit Service a1bd4f
    const unsigned char        ssid_data[] = {0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44};
Packit Service a1bd4f
    gs_unref_bytes GBytes *ssid            = g_bytes_new(ssid_data, sizeof(ssid_data));
Packit Service a1bd4f
    const char *           bgscan_data     = "simple:30:-65:300";
Packit Service a1bd4f
    gs_unref_bytes GBytes *bgscan          = g_bytes_new(bgscan_data, strlen(bgscan_data));
Packit Service a1bd4f
    guint32                mtu             = 1100;
Packit Service a1bd4f
Packit Service a1bd4f
    connection = generate_wifi_eap_connection("Test Wifi FILS disabled",
Packit Service a1bd4f
                                              ssid,
Packit Service a1bd4f
                                              NULL,
Packit Service a1bd4f
                                              NM_SETTING_WIRELESS_SECURITY_FILS_DISABLE);
Packit Service a1bd4f
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ssid' value 'Test SSID'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'scan_ssid' value '1'*");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'freq_list' value *");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'key_mgmt' value 'WPA-EAP WPA-EAP-SHA256'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'proto' value 'WPA RSN'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'pairwise' value 'TKIP CCMP'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'group' value 'TKIP CCMP'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'eap' value 'TLS'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'fragment_size' value '1086'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'ca_cert' value '*/test-ca-cert.pem'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'private_key' value '*/test-cert.p12'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'proactive_key_caching' value '1'");
Packit Service a1bd4f
    NMTST_EXPECT_NM_INFO("Config: added 'bgscan' value 'simple:30:-65:300'");
Packit Service a1bd4f
    config_dict =
Packit Service a1bd4f
        build_supplicant_config(connection,
Packit Service a1bd4f
                                mtu,
Packit Service a1bd4f
                                0,
Packit Service a1bd4f
                                NM_SUPPL_CAP_MASK_T_PMF_YES | NM_SUPPL_CAP_MASK_T_FILS_YES);
Packit Service a1bd4f
    g_test_assert_expected_messages();
Packit Service a1bd4f
    g_assert(config_dict);
Packit Service a1bd4f
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "scan_ssid", NM_SUPPL_OPT_TYPE_INT, GINT_TO_POINTER(1));
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "ssid", NM_SUPPL_OPT_TYPE_BYTES, ssid);
Packit Service a1bd4f
    validate_opt("wifi-eap",
Packit Service a1bd4f
                 config_dict,
Packit Service a1bd4f
                 "key_mgmt",
Packit Service a1bd4f
                 NM_SUPPL_OPT_TYPE_KEYWORD,
Packit Service a1bd4f
                 "WPA-EAP WPA-EAP-SHA256");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "eap", NM_SUPPL_OPT_TYPE_KEYWORD, "TLS");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "proto", NM_SUPPL_OPT_TYPE_KEYWORD, "WPA RSN");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "pairwise", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "group", NM_SUPPL_OPT_TYPE_KEYWORD, "TKIP CCMP");
Packit Service a1bd4f
    validate_opt("wifi-eap",
Packit Service a1bd4f
                 config_dict,
Packit Service a1bd4f
                 "fragment_size",
Packit Service a1bd4f
                 NM_SUPPL_OPT_TYPE_INT,
Packit Service a1bd4f
                 GINT_TO_POINTER(mtu - 14));
Packit Service a1bd4f
    validate_opt("wifi-eap", config_dict, "bgscan", NM_SUPPL_OPT_TYPE_BYTES, bgscan);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
test_suppl_cap_mask(void)
Packit 5756e2
{
Packit Service a1bd4f
    NMSupplCapType type;
Packit Service a1bd4f
Packit Service a1bd4f
    g_assert_cmpint(NM_SUPPL_CAP_MASK_GET(NM_SUPPL_CAP_MASK_T_AP_NO, NM_SUPPL_CAP_TYPE_AP),
Packit Service a1bd4f
                    ==,
Packit Service a1bd4f
                    NM_TERNARY_FALSE);
Packit Service a1bd4f
    g_assert_cmpint(NM_SUPPL_CAP_MASK_GET(NM_SUPPL_CAP_MASK_T_AP_YES, NM_SUPPL_CAP_TYPE_AP),
Packit Service a1bd4f
                    ==,
Packit Service a1bd4f
                    NM_TERNARY_TRUE);
Packit Service a1bd4f
    g_assert_cmpint(NM_SUPPL_CAP_MASK_GET(NM_SUPPL_CAP_MASK_NONE, NM_SUPPL_CAP_TYPE_AP),
Packit Service a1bd4f
                    ==,
Packit Service a1bd4f
                    NM_TERNARY_DEFAULT);
Packit Service a1bd4f
Packit Service a1bd4f
    g_assert_cmpint(NM_SUPPL_CAP_MASK_GET(NM_SUPPL_CAP_MASK_T_FILS_NO, NM_SUPPL_CAP_TYPE_FILS),
Packit Service a1bd4f
                    ==,
Packit Service a1bd4f
                    NM_TERNARY_FALSE);
Packit Service a1bd4f
    g_assert_cmpint(NM_SUPPL_CAP_MASK_GET(NM_SUPPL_CAP_MASK_T_FILS_YES, NM_SUPPL_CAP_TYPE_FILS),
Packit Service a1bd4f
                    ==,
Packit Service a1bd4f
                    NM_TERNARY_TRUE);
Packit Service a1bd4f
    g_assert_cmpint(NM_SUPPL_CAP_MASK_GET(NM_SUPPL_CAP_MASK_NONE, NM_SUPPL_CAP_TYPE_FILS),
Packit Service a1bd4f
                    ==,
Packit Service a1bd4f
                    NM_TERNARY_DEFAULT);
Packit Service a1bd4f
Packit Service a1bd4f
    for (type = 0; type < _NM_SUPPL_CAP_TYPE_NUM; type++) {
Packit Service a1bd4f
        NMTernary      value;
Packit Service a1bd4f
        NMSupplCapMask feature;
Packit Service a1bd4f
        NMSupplCapMask feature2;
Packit Service a1bd4f
Packit Service a1bd4f
        feature = nmtst_get_rand_bool() ? 0u : nmtst_get_rand_uint64();
Packit Service a1bd4f
        feature &= NM_SUPPL_CAP_MASK_ALL;
Packit Service a1bd4f
Packit Service a1bd4f
        value = nmtst_rand_select(NM_TERNARY_DEFAULT, NM_TERNARY_FALSE, NM_TERNARY_TRUE);
Packit Service a1bd4f
Packit Service a1bd4f
        feature2 = NM_SUPPL_CAP_MASK_SET(feature, type, value);
Packit Service a1bd4f
Packit Service a1bd4f
        g_assert_cmpint(NM_SUPPL_CAP_MASK_GET(feature2, type), ==, value);
Packit Service a1bd4f
        g_assert_cmpint(feature & ~NM_SUPPL_CAP_MASK_MASK(type),
Packit Service a1bd4f
                        ==,
Packit Service a1bd4f
                        feature2 & ~NM_SUPPL_CAP_MASK_MASK(type));
Packit Service a1bd4f
    }
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit Service a1bd4f
NMTST_DEFINE();
Packit 5756e2
Packit Service a1bd4f
int
Packit Service a1bd4f
main(int argc, char **argv)
Packit 5756e2
{
Packit Service a1bd4f
    nmtst_init_assert_logging(&argc, &argv, "INFO", "DEFAULT");
Packit Service a1bd4f
Packit Service a1bd4f
    g_test_add_func("/supplicant-config/wifi-open", test_wifi_open);
Packit Service a1bd4f
    g_test_add_func("/supplicant-config/wifi-wep", test_wifi_wep);
Packit Service a1bd4f
    g_test_add_func("/supplicant-config/wifi-wpa-psk-types", test_wifi_wpa_psk_types);
Packit Service a1bd4f
    g_test_add_func("/supplicant-config/wifi-eap/locked-bssid", test_wifi_eap_locked_bssid);
Packit Service a1bd4f
    g_test_add_func("/supplicant-config/wifi-eap/unlocked-bssid", test_wifi_eap_unlocked_bssid);
Packit Service a1bd4f
    g_test_add_func("/supplicant-config/wifi-eap/fils-disabled", test_wifi_eap_fils_disabled);
Packit Service a1bd4f
    g_test_add_func("/supplicant-config/wifi-sae", test_wifi_sae);
Packit Service a1bd4f
    g_test_add_func("/supplicant-config/test_suppl_cap_mask", test_suppl_cap_mask);
Packit Service a1bd4f
Packit Service a1bd4f
    return g_test_run();
Packit 5756e2
}