📄 config_grammar.y
字号:
%token<num> TK_NUMBER%token<str> TK_UNQUOTED_STR%token<str> TK_PASS%token<str> TK_COMMAND%token<str> TK_QUOTED_STR%%configfile : global_section network_section { config_info = tmp_config; tmp_config = NULL; } | global_section { printf("Error: No networks defined.\n"); CLEAN_EXIT; } | network_section { printf("Error: No globals defined.\n"); cleanup_parse(); return XECONFIGPARSEFAIL; } | error { printf("General Parse error!\n"); cleanup_parse(); return XECONFIGPARSEFAIL; } ;global_section : global_section global_statement | global_statement ;network_section : network_section network_entry | network_entry ;global_statement : TK_NETWORK_LIST '=' TK_ALL { set_current_globals(); parameter_debug("network_list: all\n"); // do nothing. leave null } | TK_NETWORK_LIST '=' network_list { // done below. nothing to do here } | TK_DEFAULT_NETNAME '=' TK_UNQUOTED_STR { set_current_globals(); parameter_debug("Default network: \"%s\"\n", $3); if (tmp_config->globals->default_net) free($3); else tmp_config->globals->default_net = $3; } | TK_DEFAULT_NETNAME '=' TK_QUOTED_STR { set_current_globals(); parameter_debug("Default network: \"%s\"\n", $3); if (tmp_config->globals->default_net) free($3); else tmp_config->globals->default_net = $3; } | TK_FRIENDLY_WARNINGS '=' TK_YES { set_current_globals(); parameter_debug("Friendly Warnings: YES\n"); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_NO_FRIENDLY_WARNINGS); } | TK_FRIENDLY_WARNINGS '=' TK_NO { set_current_globals(); parameter_debug("Friendly Warnings: NO\n"); SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_NO_FRIENDLY_WARNINGS); } | TK_FRIENDLY_WARNINGS '=' TK_UNQUOTED_STR { set_current_globals(); printf("Invalid vale for \"friendly_warnings\" option! " "defaulting to YES.\n"); parameter_debug("Friendly Warnings: Defaulting to YES" " (Invalid value \"%s\")\n", $3); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_NO_FRIENDLY_WARNINGS); } | TK_ROAMING '=' TK_FIRMWARE { set_current_globals(); parameter_debug("Firmware roaming.\n"); SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_FIRMWARE_ROAM); } | TK_ROAMING '=' TK_XSUPPLICANT { set_current_globals(); parameter_debug("Xsupplicant roaming.\n"); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_FIRMWARE_ROAM); } | TK_ROAMING '=' TK_UNQUOTED_STR { set_current_globals(); parameter_debug("Xsupplicant roaming.\n"); printf("Invalid setting for 'roaming' value. " "Defaulting to Xsupplicant based roaming.\n"); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_FIRMWARE_ROAM); } | TK_PASSIVE_SCANNING '=' TK_YES { set_current_globals(); parameter_debug("Passive Scanning : Yes\n"); SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_PASSIVE_SCAN); } | TK_PASSIVE_SCANNING '=' TK_NO { set_current_globals(); parameter_debug("Passive Scanning : No\n"); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_PASSIVE_SCAN); } | TK_PASSIVE_SCANNING '=' TK_UNQUOTED_STR { set_current_globals(); parameter_debug("Passive Scanning : Yes\n"); printf("Invalid setting for 'passive_scanning'." " Defaulting to yes.\n"); SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_PASSIVE_SCAN); } | TK_USE_EAP_HINTS '=' TK_YES { set_current_globals(); parameter_debug("Use EAP Hints : Yes\n"); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_NO_EAP_HINTS); } | TK_USE_EAP_HINTS '=' TK_NO { set_current_globals(); parameter_debug("Use EAP Hints : No\n"); SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_NO_EAP_HINTS); } | TK_USE_EAP_HINTS '=' TK_UNQUOTED_STR { set_current_globals(); parameter_debug("Use EAP Hints : Yes\n"); printf("Invalid setting for 'use_eap_hints'." " Defaulting to yes.\n"); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_NO_EAP_HINTS); } | TK_PASSIVE_TIMEOUT '=' TK_NUMBER { set_current_globals(); parameter_debug("Passive Scan Timer: %d\n", $3); tmp_config->globals->passive_timeout = $3; } | TK_SCAN_TIMEOUT '=' TK_NUMBER { set_current_globals(); parameter_debug("Scan timeout: %d\n", $3); tmp_config->globals->active_timeout = $3; } | TK_LOGFILE '=' TK_UNQUOTED_STR { set_current_globals(); parameter_debug("Logfile: \"%s\"\n", $3); if (tmp_config->globals->logfile) { free($3); tmp_config->globals->logfile = NULL; } else tmp_config->globals->logfile = $3; } | TK_LOGFILE '=' TK_QUOTED_STR { set_current_globals(); parameter_debug("Logfile: \"%s\"\n", $3); if (tmp_config->globals->logfile) { free($3); tmp_config->globals->logfile = NULL; } else tmp_config->globals->logfile = $3; } | TK_DEFAULT_INT '=' TK_UNQUOTED_STR { set_current_globals(); parameter_debug("Default Interface: \"%s\"\n", $3); if (tmp_config->globals->default_int) { free($3); tmp_config->globals->default_int = NULL; } else tmp_config->globals->default_int = $3; } | TK_STALE_KEY_TIMEOUT '=' TK_NUMBER { set_current_globals(); tmp_config->globals->stale_key_timeout = $3; } | TK_STALE_KEY_TIMEOUT '=' TK_UNQUOTED_STR { set_current_globals(); printf("Invalid value for stale key " "timer. Leaving at the default of 10 minutes" "!\n"); } | TK_ASSOCIATION '=' TK_AUTO { set_current_globals(); SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_ASSOC_AUTO); } | TK_ASSOCIATION '=' TK_MANUAL { set_current_globals(); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_ASSOC_AUTO); } | TK_ASSOCIATION '=' TK_UNQUOTED_STR { set_current_globals(); printf("Invalid setting for 'association'! " "Leaving at default setting.\n"); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_ASSOC_AUTO); } | TK_ASSOC_TIMEOUT '=' TK_NUMBER { set_current_globals(); tmp_config->globals->assoc_timeout = $3; } | TK_ASSOC_TIMEOUT '=' TK_UNQUOTED_STR { set_current_globals(); printf("Invalid setting for association_timeout." " We will use the default setting.\n"); } | TK_AUTH_PERIOD '=' TK_NUMBER { set_current_globals(); if (!TEST_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_AUTH_PER)) { SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_AUTH_PER); tmp_config->globals->auth_period = $3; } } | TK_HELD_PERIOD '=' TK_NUMBER { set_current_globals(); if (!TEST_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_HELD_PER)) { SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_HELD_PER); tmp_config->globals->held_period = $3; } } | TK_MAX_STARTS '=' TK_NUMBER { set_current_globals(); if (!TEST_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_MAX_STARTS)) { SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_MAX_STARTS); tmp_config->globals->max_starts = $3; } } | TK_ALLMULTI '=' TK_YES { set_current_globals(); SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_ALLMULTI); } | TK_ALLMULTI '=' TK_NO { set_current_globals(); UNSET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_ALLMULTI); } | TK_ALLMULTI '=' TK_UNQUOTED_STR { printf("Unknown value for ALLMULTI = \"%s\"! Defaulting to YES! (Line : %d)\n", $3, config_linenum); set_current_globals(); SET_FLAG(tmp_config->globals->flags, CONFIG_GLOBALS_ALLMULTI); } | TK_IPC_GROUP '=' TK_UNQUOTED_STR { set_current_globals(); if (!tmp_config->globals->ipc_group_name) tmp_config->globals->ipc_group_name = $3; else free($3); } | TK_DESTINATION '=' TK_AUTO { set_current_globals(); tmp_config->globals->destination = DEST_AUTO; } | TK_DESTINATION '=' TK_BSSID { set_current_globals(); tmp_config->globals->destination = DEST_BSSID; } | TK_DESTINATION '=' TK_MULTICAST { set_current_globals(); tmp_config->globals->destination = DEST_MULTICAST; } | TK_DESTINATION '=' TK_SOURCE { set_current_globals(); tmp_config->globals->destination = DEST_SOURCE; } | TK_DESTINATION '=' TK_UNQUOTED_STR { printf("Invalid destination value = \"%s\"! Defaulting to AUTO! (Line : %d)\n", $3, config_linenum); set_current_globals(); tmp_config->globals->destination = DEST_AUTO; } | TK_LOG_FACILITY '=' TK_UNQUOTED_STR { set_current_globals(); if (!tmp_config->globals->log_facility) tmp_config->globals->log_facility = $3; else free($3); } ;network_list : network_list ',' TK_UNQUOTED_STR { parameter_debug("network_list: \"%s\"\n", $3); set_current_globals(); if (config_string_list_contains_string(tmp_config->globals->allowed_nets, $3)) free($3); else config_string_list_add_string(&tmp_config->globals->allowed_nets, $3); } | TK_UNQUOTED_STR { parameter_debug("network_list: \"%s\"\n", $1); set_current_globals(); if (config_string_list_contains_string(tmp_config->globals->allowed_nets, $1)) free($1); else config_string_list_add_string(&tmp_config->globals->allowed_nets, $1); } | network_list ',' TK_QUOTED_STR { parameter_debug("network_list: \"%s\"\n", $3); set_current_globals(); if (config_string_list_contains_string(tmp_config->globals->allowed_nets, $3)) free($3); else config_string_list_add_string(&tmp_config->globals->allowed_nets, $3); } | TK_QUOTED_STR { parameter_debug("network_list: \"%s\"\n", $1); set_current_globals(); if (config_string_list_contains_string(tmp_config->globals->allowed_nets, $1)) free($1); else config_string_list_add_string(&tmp_config->globals->allowed_nets, $1); } ;network_entry : TK_UNQUOTED_STR '{' network_statements '}' { set_current_config(); tmp_network->name = $1; // check if there is a networks field and that // the current tmp is not already listed if ((!tmp_config->networks || !config_network_contains_net(tmp_config->networks, tmp_network->name)) && config_allows_network(tmp_config, tmp_network->name)) { config_network_add_net(&(tmp_config->networks), tmp_network); } // if we don't need it, delete it else { delete_config_network(&tmp_network); } tmp_network = NULL; } | TK_NUMBER '{' network_statements '}' { set_current_config(); tmp_network->name = (char *)malloc(100); sprintf(tmp_network->name, "%d", $1); // check if there is a networks field and that // the current tmp is not already listed if ((!tmp_config->networks || !config_network_contains_net(tmp_config->networks, tmp_network->name)) && config_allows_network(tmp_config, tmp_network->name)) { config_network_add_net(&(tmp_config->networks), tmp_network); } // if we don't need it, delete it else { delete_config_network(&tmp_network);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -