}
}
-\"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_);
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:
}
}
-\"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.
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"
SOCKET_TYPE "socket-type"
UNIX "unix"
- BASIC_AUTHENTICATIONS "basic-authentications"
- USER "user"
- PASSWORD "password"
-
HOOKS_LIBRARIES "hooks-libraries"
LIBRARY "library"
PARAMETERS "parameters"
// Dhcp6.
global_param: http_host
| http_port
- | basic_authentication_realm
+ | authentication
| control_sockets
- | basic_authentications
| hooks_libraries
| loggers
| user_context
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 {
// --- 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);
ctx.leave();
};
-// --- basic-authentications end here -----------------------------------------------------
+// --- authentication end here -----------------------------------------------------
// --- Loggers starts here -----------------------------------------------------
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:
return ("loggers");
case OUTPUT_OPTIONS:
return ("output-options");
- case BASIC_AUTHENTICATIONS:
- return ("basic-authentications");
default:
return ("__unknown__");
}
///< 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,
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