/** * nm_setting_bond_get_option_default: * @setting: the #NMSettingBond * @name: the name of the option * * Returns: the value of the bond option if not overridden by an entry in * the #NMSettingBond:options property. **/ const char * nm_setting_bond_get_option_default (NMSettingBond *setting, const char *name) { const char *mode; guint i; g_return_val_if_fail (NM_IS_SETTING_BOND (setting), NULL); g_return_val_if_fail (nm_setting_bond_validate_option (name, NULL), NULL); if (nm_streq (name, NM_SETTING_BOND_OPTION_AD_ACTOR_SYSTEM)) { /* The default value depends on the current mode */ mode = nm_setting_bond_get_option_by_name (setting, NM_SETTING_BOND_OPTION_MODE); if ( nm_streq0 (mode, "4") || nm_streq0 (mode, "802.3ad")) return "00:00:00:00:00:00"; else return ""; } for (i = 0; i < G_N_ELEMENTS (defaults); i++) { if (g_strcmp0 (defaults[i].opt, name) == 0) return defaults[i].val; } /* Any option that passes nm_setting_bond_validate_option() should also be found in defaults */ g_assert_not_reached (); }
static char * get_passwords_required (GHashTable *data, gboolean *out_need_password, gboolean *out_need_user_certpass, gboolean *out_need_machine_certpass) { const char *authtype, *val; NMSettingSecretFlags flags; *out_need_password = FALSE; *out_need_user_certpass = FALSE; *out_need_machine_certpass = FALSE; authtype = g_hash_table_lookup (data, NM_L2TP_KEY_USER_AUTH_TYPE); if (nm_streq0 (authtype, NM_L2TP_AUTHTYPE_TLS)) { /* Encrypted PKCS#12 certificate or private key password */ val = g_hash_table_lookup (data, NM_L2TP_KEY_USER_KEY); if (val) crypto_file_format (val, out_need_user_certpass, NULL); } else { /* NM_L2TP_AUTHTYPE_PASSWORD */ flags = NM_SETTING_SECRET_FLAG_NONE; nm_vpn_service_plugin_get_secret_flags (data, NM_L2TP_KEY_PASSWORD, &flags); if (!(flags & NM_SETTING_SECRET_FLAG_NOT_REQUIRED)) *out_need_password = TRUE; } authtype = g_hash_table_lookup (data, NM_L2TP_KEY_MACHINE_AUTH_TYPE); if (nm_streq0 (authtype, NM_L2TP_AUTHTYPE_TLS)) { /* Encrypted PKCS#12 certificate or private key password */ val = g_hash_table_lookup (data, NM_L2TP_KEY_MACHINE_KEY); if (val) crypto_file_format (val, out_need_machine_certpass, NULL); } return NULL; }
/** * nm_setting_bond_get_option_type: * @setting: the #NMSettingBond * @name: the name of the option * * Returns: the type of the bond option. **/ NMBondOptionType _nm_setting_bond_get_option_type (NMSettingBond *setting, const char *name) { guint i; g_return_val_if_fail (NM_IS_SETTING_BOND (setting), NM_BOND_OPTION_TYPE_INT); g_return_val_if_fail (nm_setting_bond_validate_option (name, NULL), NM_BOND_OPTION_TYPE_INT); for (i = 0; i < G_N_ELEMENTS (defaults); i++) { if (nm_streq0 (defaults[i].opt, name)) return defaults[i].opt_type; } /* Any option that passes nm_setting_bond_validate_option() should also be found in defaults */ g_assert_not_reached (); }
static gboolean compare_property (NMSetting *setting, NMSetting *other, const GParamSpec *prop_spec, NMSettingCompareFlags flags) { NMSettingClass *parent_class; if (nm_streq0 (prop_spec->name, NM_SETTING_BOND_OPTIONS)) { return options_equal (NM_SETTING_BOND (setting), NM_SETTING_BOND_GET_PRIVATE (setting)->options, NM_SETTING_BOND_GET_PRIVATE (other)->options); } /* Otherwise chain up to parent to handle generic compare */ parent_class = NM_SETTING_CLASS (nm_setting_bond_parent_class); return parent_class->compare_property (setting, other, prop_spec, flags); }
static gboolean compare_property (NMSetting *setting, NMSetting *other, const GParamSpec *prop_spec, NMSettingCompareFlags flags) { NMSettingClass *parent_class; /* If we are trying to match a connection in order to assume it (and thus * @flags contains INFERRABLE), use the "relaxed" matching for team * configuration. Otherwise, for all other purposes (including connection * comparison before an update), resort to the default string comparison. */ if ( NM_FLAGS_HAS (flags, NM_SETTING_COMPARE_FLAG_INFERRABLE) && nm_streq0 (prop_spec->name, NM_SETTING_TEAM_PORT_CONFIG)) { return _nm_utils_team_config_equal (NM_SETTING_TEAM_PORT_GET_PRIVATE (setting)->config, NM_SETTING_TEAM_PORT_GET_PRIVATE (other)->config, TRUE); } /* Otherwise chain up to parent to handle generic compare */ parent_class = NM_SETTING_CLASS (nm_setting_team_port_parent_class); return parent_class->compare_property (setting, other, prop_spec, flags); }
static NMCResultCode parse_command_line (NmCli *nmc, int argc, char **argv) { char *base; base = strrchr (argv[0], '/'); if (base == NULL) base = argv[0]; else base++; if (argc > 1 && nm_streq (argv[1], "--complete-args")) { /* We (currently?) support --complete-args for "connection" command only: * ignore any other command when this option is enabled as means we are in * autocompletion mode (so we should just quit and don't print anything). * This would help us to ensure shell autocompletion after NM package downgrade * if we ever will enable --complete-args for other commands */ if ((argc == 2) || !(nm_streq0 (argv[2], "connection") || nm_streq0 (argv[2], "device"))) return nmc->return_value; nmc->complete = TRUE; argv[1] = argv[0]; argc--; argv++; } /* parse options */ while (argc > 1) { char *opt = argv[1]; /* '--' ends options */ if (strcmp (opt, "--") == 0) { argc--; argv++; break; } if (opt[0] != '-') break; if (opt[1] == '-') opt++; if (matches (opt, "-terse") == 0) { if (nmc->print_output == NMC_PRINT_TERSE) { g_string_printf (nmc->return_text, _("Error: Option '--terse' is specified the second time.")); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } else if (nmc->print_output == NMC_PRINT_PRETTY) { g_string_printf (nmc->return_text, _("Error: Option '--terse' is mutually exclusive with '--pretty'.")); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } else nmc->print_output = NMC_PRINT_TERSE; } else if (matches (opt, "-pretty") == 0) { if (nmc->print_output == NMC_PRINT_PRETTY) { g_string_printf (nmc->return_text, _("Error: Option '--pretty' is specified the second time.")); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } else if (nmc->print_output == NMC_PRINT_TERSE) { g_string_printf (nmc->return_text, _("Error: Option '--pretty' is mutually exclusive with '--terse'.")); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } else nmc->print_output = NMC_PRINT_PRETTY; } else if (matches (opt, "-mode") == 0) { nmc->mode_specified = TRUE; next_arg (&argc, &argv); if (argc <= 1) { g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } if (matches (argv[1], "tabular") == 0) nmc->multiline_output = FALSE; else if (matches (argv[1], "multiline") == 0) nmc->multiline_output = TRUE; else { g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[1], opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } } else if (matches (opt, "-colors") == 0) { next_arg (&argc, &argv); if (argc <= 1) { g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } if (matches (argv[1], "auto") == 0) nmc->use_colors = NMC_USE_COLOR_AUTO; else if (matches (argv[1], "yes") == 0) nmc->use_colors = NMC_USE_COLOR_YES; else if (matches (argv[1], "no") == 0) nmc->use_colors = NMC_USE_COLOR_NO; else { g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[1], opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } } else if (matches (opt, "-escape") == 0) { next_arg (&argc, &argv); if (argc <= 1) { g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } if (matches (argv[1], "yes") == 0) nmc->escape_values = TRUE; else if (matches (argv[1], "no") == 0) nmc->escape_values = FALSE; else { g_string_printf (nmc->return_text, _("Error: '%s' is not valid argument for '%s' option."), argv[1], opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } } else if (matches (opt, "-fields") == 0) { next_arg (&argc, &argv); if (argc <= 1) { g_string_printf (nmc->return_text, _("Error: fields for '%s' options are missing."), opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } nmc->required_fields = g_strdup (argv[1]); } else if (matches (opt, "-nocheck") == 0) { /* ignore for backward compatibility */ } else if (matches (opt, "-ask") == 0) { nmc->ask = TRUE; } else if (matches (opt, "-show-secrets") == 0) { nmc->show_secrets = TRUE; } else if (matches (opt, "-wait") == 0) { unsigned long timeout; next_arg (&argc, &argv); if (argc <= 1) { g_string_printf (nmc->return_text, _("Error: missing argument for '%s' option."), opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } if (!nmc_string_to_uint (argv[1], TRUE, 0, G_MAXINT, &timeout)) { g_string_printf (nmc->return_text, _("Error: '%s' is not a valid timeout for '%s' option."), argv[1], opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } nmc->timeout = (int) timeout; } else if (matches (opt, "-version") == 0) { g_print (_("nmcli tool, version %s\n"), NMCLI_VERSION); return NMC_RESULT_SUCCESS; } else if (matches (opt, "-help") == 0) { usage (base); return NMC_RESULT_SUCCESS; } else { g_string_printf (nmc->return_text, _("Error: Option '%s' is unknown, try 'nmcli -help'."), opt); nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; return nmc->return_value; } argc--; argv++; } /* Now run the requested command */ return nmc_do_cmd (nmc, nmcli_cmds, argv[1], argc-1, argv+1); }