]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1304] Updated CA syntax
authorFrancis Dupont <fdupont@isc.org>
Sun, 12 Jul 2020 08:17:35 +0000 (10:17 +0200)
committerFrancis Dupont <fdupont@isc.org>
Sat, 12 Sep 2020 08:49:43 +0000 (10:49 +0200)
src/bin/agent/agent_lexer.ll
src/bin/agent/agent_parser.yy
src/bin/agent/parser_context.cc
src/bin/agent/parser_context.h

index c4331a5b8e3251081731c53b76812b25ef70f8ed..70805ec4b730ab53ab7ec82459cf1f72e7fc3735 100644 (file)
@@ -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.
index de1bf09212a9fc9814ca021cf6fc7fba04162102..84c435dd55a7274a2fc75bfb4f1817ad9f7d2d01 100644 (file)
@@ -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 {
index 1c48fc0cd96aa6df8b4ef2b75978fbe9c922307a..35172526457e2fc9e714b9d1351d09033c19e040 100644 (file)
@@ -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
index d03dd0e41cf51fe3ac5fffae4d58b713c31d7734..32572f669ae6eaaa62857c441300148b9129ed59 100644 (file)
@@ -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