From: Francis Dupont Date: Sun, 12 Jul 2020 08:17:35 +0000 (+0200) Subject: [#1304] Updated CA syntax X-Git-Tag: Kea-1.9.0~150 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b6ed7b23f46a7d925d6f2f4cff15f444886c5e27;p=thirdparty%2Fkea.git [#1304] Updated CA syntax --- diff --git a/src/bin/agent/agent_lexer.ll b/src/bin/agent/agent_lexer.ll index c4331a5b8e..70805ec4b7 100644 --- a/src/bin/agent/agent_lexer.ll +++ b/src/bin/agent/agent_lexer.ll @@ -200,11 +200,21 @@ 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: return AgentParser::make_USER_CONTEXT(driver.loc_); default: return AgentParser::make_STRING("user-context", driver.loc_); @@ -216,6 +226,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} case ParserContext::AGENT: case ParserContext::SERVER: case ParserContext::LOGGERS: + case ParserContext::BASIC_AUTHENTICATIONS: return AgentParser::make_COMMENT(driver.loc_); default: return AgentParser::make_STRING("comment", driver.loc_); @@ -402,6 +413,33 @@ 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 de1bf09212..84c435dd55 100644 --- a/src/bin/agent/agent_parser.yy +++ b/src/bin/agent/agent_parser.yy @@ -51,6 +51,7 @@ 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" @@ -63,6 +64,10 @@ 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" @@ -260,7 +265,9 @@ global_params: global_param // Dhcp6. global_param: http_host | http_port + | basic_authentication_realm | control_sockets + | basic_authentications | hooks_libraries | loggers | user_context @@ -281,6 +288,14 @@ 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 { @@ -481,6 +496,63 @@ socket_type_value : UNIX { $$ = ElementPtr(new StringElement("unix", ctx.loc2pos // --- control-sockets end here ------------------------------------------------ +// --- basic-authentications starts here ----------------------------------------------------- + +basic_authentications: BASIC_AUTHENTICATIONS { + ElementPtr l(new ListElement(ctx.loc2pos(@1))); + ctx.stack_.back()->set("basic-authentications", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.BASIC_AUTHENTICATIONS); +} COLON LSQUARE_BRACKET basic_auth_list RSQUARE_BRACKET { + ctx.stack_.pop_back(); + ctx.leave(); +}; + +basic_auth_list: %empty + | not_empty_basic_auth_list + ; + +not_empty_basic_auth_list: basic_auth + | not_empty_basic_auth_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 { + ctx.stack_.pop_back(); +}; + +basic_auth_params: basic_auth_param + | basic_auth_params COMMA basic_auth_param + ; + +basic_auth_param: user + | password + | user_context + | comment + | unknown_map_entry + ; + +user: USER { + ctx.enter(ctx.NO_KEYWORDS); +} COLON STRING { + ElementPtr user(new StringElement($4, ctx.loc2pos(@4))); + ctx.stack_.back()->set("user", user); + ctx.leave(); +}; + +password: PASSWORD { + ctx.enter(ctx.NO_KEYWORDS); +} COLON STRING { + ElementPtr password(new StringElement($4, ctx.loc2pos(@4))); + ctx.stack_.back()->set("password", password); + ctx.leave(); +}; + +// --- basic-authentications end here ----------------------------------------------------- + // --- Loggers starts here ----------------------------------------------------- loggers: LOGGERS { diff --git a/src/bin/agent/parser_context.cc b/src/bin/agent/parser_context.cc index 1c48fc0cd9..3517252645 100644 --- a/src/bin/agent/parser_context.cc +++ b/src/bin/agent/parser_context.cc @@ -135,10 +135,12 @@ ParserContext::contextName() return ("loggers"); case OUTPUT_OPTIONS: return ("output-options"); + case BASIC_AUTHENTICATIONS: + return ("basic-authentications"); default: return ("__unknown__"); } } -}; -}; +} // end of isc::eval namespace +} // end of isc namespace diff --git a/src/bin/agent/parser_context.h b/src/bin/agent/parser_context.h index d03dd0e41c..32572f669a 100644 --- a/src/bin/agent/parser_context.h +++ b/src/bin/agent/parser_context.h @@ -174,7 +174,10 @@ public: LOGGERS, ///< Used while parsing Control-agent/loggers/output_options structures. - OUTPUT_OPTIONS + OUTPUT_OPTIONS, + + ///< Used while parsing Control-agent/basic-authentications. + BASIC_AUTHENTICATIONS } LexerContext; @@ -258,7 +261,7 @@ public: isc::data::ElementPtr parseCommon(); }; -}; // end of isc::eval namespace -}; // end of isc namespace +} // end of isc::eval namespace +} // end of isc namespace #endif