]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1304] Checkpoint before regen
authorFrancis Dupont <fdupont@isc.org>
Sat, 12 Sep 2020 16:14:44 +0000 (18:14 +0200)
committerFrancis Dupont <fdupont@isc.org>
Sat, 12 Sep 2020 16:14:44 +0000 (18:14 +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 70805ec4b730ab53ab7ec82459cf1f72e7fc3735..962abf0c1c3f032b59f0b2d5e7d6fc405bf8be18 100644 (file)
@@ -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.
index 84c435dd55a7274a2fc75bfb4f1817ad9f7d2d01..5f8c981b8126b18222ca4706198dd38b1926302c 100644 (file)
@@ -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 -----------------------------------------------------
 
index 35172526457e2fc9e714b9d1351d09033c19e040..c0a1a4aa5e1f8df98cda22c56f8b1dfc3d942411 100644 (file)
@@ -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__");
     }
index 32572f669ae6eaaa62857c441300148b9129ed59..ffcd8e3530d3aaa68f1fdd6b860f6ed850e8758c 100644 (file)
@@ -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