From: Francis Dupont Date: Sat, 12 Sep 2020 16:14:44 +0000 (+0200) Subject: [#1304] Checkpoint before regen X-Git-Tag: Kea-1.9.0~135 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b4ed2764e0f940578b8d4c31c19b746d6d2d928;p=thirdparty%2Fkea.git [#1304] Checkpoint before regen --- diff --git a/src/bin/agent/agent_lexer.ll b/src/bin/agent/agent_lexer.ll index 70805ec4b7..962abf0c1c 100644 --- a/src/bin/agent/agent_lexer.ll +++ b/src/bin/agent/agent_lexer.ll @@ -200,21 +200,12 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } -\"basic-authentication-realm\" { - switch(driver.ctx_) { - case ParserContext::AGENT: - return AgentParser::make_BASIC_AUTHENTICATION_REALM(driver.loc_); - default: - return AgentParser::make_STRING("basic-authentication-realm", driver.loc_); - } -} - \"user-context\" { switch(driver.ctx_) { case ParserContext::AGENT: case ParserContext::SERVER: case ParserContext::LOGGERS: - case ParserContext::BASIC_AUTHENTICATIONS: + case ParserContext::CLIENTS: return AgentParser::make_USER_CONTEXT(driver.loc_); default: return AgentParser::make_STRING("user-context", driver.loc_); @@ -226,13 +217,76 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} case ParserContext::AGENT: case ParserContext::SERVER: case ParserContext::LOGGERS: - case ParserContext::BASIC_AUTHENTICATIONS: + case ParserContext::CLIENTS: return AgentParser::make_COMMENT(driver.loc_); default: return AgentParser::make_STRING("comment", driver.loc_); } } +\"authentication\" { + switch(driver.ctx_) { + case ParserContext::AGENT: + return AgentParser::make_AUTHENTICATION(driver.loc_); + default: + return AgentParser::make_STRING("authentication", driver.loc_); + } +} + +\"type\" { + switch(driver.ctx_) { + case ParserContext::AUTHENTICATION: + return AgentParser::make_TYPE(driver.loc_); + default: + return AgentParser::make_STRING("type", driver.loc_); + } +} + +\"basic\" { + switch(driver.ctx_) { + case ParserContext::AUTH_TYPE: + return AgentParser::make_BASIC(driver.loc_); + default: + return AgentParser::make_STRING("basic", driver.loc_); + } +} + +\"realm\" { + switch(driver.ctx_) { + case ParserContext::AUTHENTICATION: + return AgentParser::make_REALM(driver.loc_); + default: + return AgentParser::make_STRING("authentication", driver.loc_); + } +} + +\"clients\" { + switch(driver.ctx_) { + case ParserContext::AUTHENTICATION: + return AgentParser::make_CLIENTS(driver.loc_); + default: + return AgentParser::make_STRING("clients", driver.loc_); + } +} + +\"user\" { + switch(driver.ctx_) { + case ParserContext::CLIENTS: + return AgentParser::make_USER(driver.loc_); + default: + return AgentParser::make_STRING("user", driver.loc_); + } +} + +\"password\" { + switch(driver.ctx_) { + case ParserContext::CLIENTS: + return AgentParser::make_PASSWORD(driver.loc_); + default: + return AgentParser::make_STRING("password", driver.loc_); + } +} + \"control-sockets\" { switch(driver.ctx_) { case ParserContext::AGENT: @@ -413,33 +467,6 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } -\"basic-authentications\" { - switch(driver.ctx_) { - case ParserContext::AGENT: - return AgentParser::make_BASIC_AUTHENTICATIONS(driver.loc_); - default: - return AgentParser::make_STRING("basic-authentications", driver.loc_); - } -} - -\"user\" { - switch(driver.ctx_) { - case ParserContext::BASIC_AUTHENTICATIONS: - return AgentParser::make_USER(driver.loc_); - default: - return AgentParser::make_STRING("user", driver.loc_); - } -} - -\"password\" { - switch(driver.ctx_) { - case ParserContext::BASIC_AUTHENTICATIONS: - return AgentParser::make_PASSWORD(driver.loc_); - default: - return AgentParser::make_STRING("password", driver.loc_); - } -} - {JSONString} { /* A string has been matched. It contains the actual string and single quotes. We need to get those quotes out of the way and just use its content, e.g. diff --git a/src/bin/agent/agent_parser.yy b/src/bin/agent/agent_parser.yy index 84c435dd55..5f8c981b81 100644 --- a/src/bin/agent/agent_parser.yy +++ b/src/bin/agent/agent_parser.yy @@ -51,11 +51,18 @@ using namespace std; CONTROL_AGENT "Control-agent" HTTP_HOST "http-host" HTTP_PORT "http-port" - BASIC_AUTHENTICATION_REALM "basic-authentication-realm" USER_CONTEXT "user-context" COMMENT "comment" + AUTHENTICATION "authentication" + TYPE "type" + BASIC "basic" + REALM "realm" + CLIENTS "clients" + USER "user" + PASSWORD "password" + CONTROL_SOCKETS "control-sockets" DHCP4_SERVER "dhcp4" DHCP6_SERVER "dhcp6" @@ -64,10 +71,6 @@ using namespace std; SOCKET_TYPE "socket-type" UNIX "unix" - BASIC_AUTHENTICATIONS "basic-authentications" - USER "user" - PASSWORD "password" - HOOKS_LIBRARIES "hooks-libraries" LIBRARY "library" PARAMETERS "parameters" @@ -265,9 +268,8 @@ global_params: global_param // Dhcp6. global_param: http_host | http_port - | basic_authentication_realm + | authentication | control_sockets - | basic_authentications | hooks_libraries | loggers | user_context @@ -288,14 +290,6 @@ http_port: HTTP_PORT COLON INTEGER { ctx.stack_.back()->set("http-port", prf); }; -basic_authentication_realm: BASIC_AUTHENTICATION_REALM { - ctx.enter(ctx.NO_KEYWORDS); -} COLON STRING { - ElementPtr realm(new StringElement($4, ctx.loc2pos(@4))); - ctx.stack_.back()->set("basic-authentication-realm", realm); - ctx.leave(); -}; - user_context: USER_CONTEXT { ctx.enter(ctx.NO_KEYWORDS); } COLON map_value { @@ -496,44 +490,87 @@ socket_type_value : UNIX { $$ = ElementPtr(new StringElement("unix", ctx.loc2pos // --- control-sockets end here ------------------------------------------------ -// --- basic-authentications starts here ----------------------------------------------------- +// --- authentication starts here ----------------------------------------------------- + +authentication: AUTHENTICATION { + // Add unique here + ElementPtr m(new MapElement(ctx.loc2pos(@1))); + ctx.stack_.back()->set("authentication", m); + ctx.stack_.push_back(m); + ctx.enter(ctx.AUTHENTICATION); +} COLON LCURLY_BRACKET auth_params RCURLY_BRACKET { + // The type parameter is required + ctx.require("type", ctx.loc2pos(@4), ctx.loc2pos(@6)); + ctx.stack_.pop_back(); + ctx.leave(); +}; -basic_authentications: BASIC_AUTHENTICATIONS { +auth_params: auth_param + | auth_params COMMA auth_param + ; + +auth_param: type + | realm + | clients + ; + +type: TYPE { + // Add unique here + ctx.enter(ctx.AUTH_TYPE); +} COLON auth_type { + ctx.stack_.back()->set("type", $4); + ctx.leave(); +}; + +auth_type: BASIC { $$ = ElementPtr(new StringElement("basic", ctx.loc2pos(@1))); } + ; + +realm: REALM { + // Add unique here + ctx.enter(ctx.NO_KEYWORD); +} COLON STRING { + ElementPtr realm(new StringElement($4, ctx.loc2pos(@4))); + ctx.stack_.back()->set("realm", realm); + ctx.leave(); +}; + +clients: CLIENTS { + // Add unique here ElementPtr l(new ListElement(ctx.loc2pos(@1))); - ctx.stack_.back()->set("basic-authentications", l); + ctx.stack_.back()->set("clients", l); ctx.stack_.push_back(l); - ctx.enter(ctx.BASIC_AUTHENTICATIONS); -} COLON LSQUARE_BRACKET basic_auth_list RSQUARE_BRACKET { + ctx.enter(ctx.CLIENTS); +} COLON LSQUARE_BRACKET clients_list RSQUARE_BRACKET { ctx.stack_.pop_back(); ctx.leave(); }; -basic_auth_list: %empty - | not_empty_basic_auth_list - ; +clients_list: %empty + | not_empty_clients_list + ; -not_empty_basic_auth_list: basic_auth - | not_empty_basic_auth_list COMMA basic_auth - ; +not_empty_clients_list: basic_auth + | not_empty_clients_list COMMA basic_auth + ; basic_auth: LCURLY_BRACKET { ElementPtr m(new MapElement(ctx.loc2pos(@1))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); -} basic_auth_params RCURLY_BRACKET { +} clients_params RCURLY_BRACKET { ctx.stack_.pop_back(); }; -basic_auth_params: basic_auth_param - | basic_auth_params COMMA basic_auth_param - ; +clients_params: clients_param + | clients_params COMMA clients_param + ; -basic_auth_param: user - | password - | user_context - | comment - | unknown_map_entry - ; +clients_param: user + | password + | user_context + | comment + | unknown_map_entry + ; user: USER { ctx.enter(ctx.NO_KEYWORDS); @@ -551,7 +588,7 @@ password: PASSWORD { ctx.leave(); }; -// --- basic-authentications end here ----------------------------------------------------- +// --- authentication end here ----------------------------------------------------- // --- Loggers starts here ----------------------------------------------------- diff --git a/src/bin/agent/parser_context.cc b/src/bin/agent/parser_context.cc index 3517252645..c0a1a4aa5e 100644 --- a/src/bin/agent/parser_context.cc +++ b/src/bin/agent/parser_context.cc @@ -123,6 +123,12 @@ ParserContext::contextName() return ("toplevel"); case AGENT: return ("Control-agent"); + case AUTHENTICATION: + return ("authentication"); + case AUTH_TYPE: + return ("auth-type"); + case CLIENTS: + return ("clients"); case CONTROL_SOCKETS: return ("control-sockets"); case SERVER: @@ -135,8 +141,6 @@ ParserContext::contextName() return ("loggers"); case OUTPUT_OPTIONS: return ("output-options"); - case BASIC_AUTHENTICATIONS: - return ("basic-authentications"); default: return ("__unknown__"); } diff --git a/src/bin/agent/parser_context.h b/src/bin/agent/parser_context.h index 32572f669a..ffcd8e3530 100644 --- a/src/bin/agent/parser_context.h +++ b/src/bin/agent/parser_context.h @@ -158,6 +158,15 @@ public: ///< Used while parsing content of Agent. AGENT, + ///< Used while parsing Control-agent/Authentication. + AUTHENTICATION, + + ///< Used while parsing Control-agent/Authentication/type. + AUTH_TYPE, + + ///< Used while parsing Control-agent/Authentication/clients. + CLIENTS, + ///< Used while parsing Control-agent/control-sockets. CONTROL_SOCKETS, @@ -174,11 +183,7 @@ public: LOGGERS, ///< Used while parsing Control-agent/loggers/output_options structures. - OUTPUT_OPTIONS, - - ///< Used while parsing Control-agent/basic-authentications. - BASIC_AUTHENTICATIONS - + OUTPUT_OPTIONS } LexerContext; /// @brief File name