Commit c1c2b2bd authored by Ricardo Cosme's avatar Ricardo Cosme

OPENBUS-2968 Reconfiguração dinâmica do barramento

+ Reconfiguração dos seguintes parâmetros:
 - Lista de administradores
 - Nome de pacotes de validação de login
 - Número máximo de canais de comunicação do OiL
 - Níveis de log (do busservices e do oil)
parent 9ac9f8be
......@@ -156,6 +156,7 @@ local core = $(root)/lua/openbus/core ;
make $(core)/admin/parsed.lua
: $(root)/idl/access_management.idl
$(root)/idl/offer_authorization.idl
$(root)/idl/configuration.idl
: idl2lua.compile
: <dependency>/lua//stage
<include>$(openbus-idl)/src
......
/**
* \mainpage Documentação da IDL
*/
#ifndef __TECGRAF_OPENBUS_CORE_V20_SERVICES_ADMIN_V10_IDL__
#define __TECGRAF_OPENBUS_CORE_V20_SERVICES_ADMIN_V10_IDL__
#include "core.idl"
/** \brief Módulo dos sistemas e aplicações do Tecgraf. */
module tecgraf {
/** \brief Módulo do middleware OpenBus. */
module openbus {
/** \brief Módulo de definições básicas do OpenBus. */
module core {
/* \brief Módulo de versionamento dos Serviços Básicos do OpenBus. */
module v2_0 {
/** \brief Módulo dos Serviços Básicos do OpenBus. */
module services {
/** \brief Módulo de gerência do serviço. */
module admin {
/** \brief Módulo de versionamento da gerência do serviço. */
module v1_0 {
typedef sequence<Identifier> StrSeq;
/**
* \brief Interface de administração das configurações do barramento.
*/
interface Configuration {
/**
* \brief Recarrega o arquivo de configurações do barramento.
*
* Aplica imediatamente alterações realizadas nos parâmetros de
* configuração que são passíveis a reconfiguração dinâmica. Lista
* de parâmetros suportados:
*
* + Lista de administradores.
* + Nome de pacotes de validação de login e suas configurações
* (ex: ldap_patterns, ldap_servers).
* + Número máximo de canais de comunicação do OiL.
* + Níveis de log (busservices e OiL).
*/
void reloadConfigsFile() raises (ServiceFailure);
/**
* \brief Atribui os privilégios de administração para um grupo de usuários.
*/
void grantAdminTo(in StrSeq users) raises (ServiceFailure);
/**
* \brief Revoga os privilégios de administração para um grupo de usuários.
*/
void revokeAdminFrom(in StrSeq users) raises (ServiceFailure);
/**
* \brief Recarrega um validador de login.
*
* O validador é carregado se o mesmo não existir.
*
*/
void reloadValidator(in string validator) raises (ServiceFailure);
/**
* \brief Remove um validador de login.
*/
void delValidator(in string validator) raises (ServiceFailure);
/**
* \brief Redefine o número máximo de canais de comunicação do OiL.
*/
void setMaxChannels(in long maxchannels) raises (ServiceFailure);
/**
* \brief Redefine o nível de log do barramento.
*/
void setLogLevel(in unsigned short loglevel) raises (ServiceFailure);
/**
* \brief Redefine o nível de log do OiL.
*/
void setOilLogLevel(in unsigned short oilloglevel) raises (ServiceFailure);
};
}; // version
}; // admin
}; // services
}; // core version
}; // core
}; // openbus
}; // tecgraf
......@@ -186,6 +186,24 @@ return function(...)
--shutown
* Monta um relatório sobre o estado atual do barramento:
--report
- Configuração
* Recarrega o arquivo de configurações do barramento:
--reload-configs-file
* Atribui os privilégios de administração para uma lista de usuários:
--grant-admin-to="<user1> <user2> ... <userN>"
* Revoga os privilégios de administração para uma lista de usuários:
--revoke-admin-from="<user1> <user2> ... <userN>"
* Recarrega um validador de login. Se o não existir o validador é carregado:
--reload-validator=<validator>
* Remove um validador de login:
--del-validator=<validator>
* Redefine o número máximo de canais de comunicação do OiL:
--set-max-channels=<integer>
* Redefine o nível de log do barramento:
--set-log-level=<integer>
* Redefine o nível de log do OiL.
--set-oil-log-level=<integer>
-------------------------------------------------------------------------------
]]
......@@ -331,7 +349,34 @@ return function(...)
["report"] = {
{n = 0, params = {}}
};
["reload-configs-file"] = {
{n = 0, params = {}}
};
["grant-admin-to"] = {
{n = 0, params = {}},
{n = 1, params = {users = 1}},
{n = 1, params = {}},
};
["revoke-admin-from"] = {
{n = 0, params = {}},
{n = 1, params = {users = 1}},
{n = 1, params = {}},
};
["reload-validator"] = {
{n = 1, params = {}},
};
["del-validator"] = {
{n = 1, params = {}},
};
["set-max-channels"] = {
{n = 1, params = {}},
};
["set-log-level"] = {
{n = 1, params = {}},
};
["set-oil-log-level"] = {
{n = 1, params = {}},
};
}
---
......@@ -1300,6 +1345,74 @@ return function(...)
end
return true
end
local function handleConfigurationCall(cmd, method, paramtype)
local conn = connect()
if not conn then
return false
end
local param = cmd.params[cmd.name]
param = (paramtype and paramtype == "number") and tonumber(param) or param
local ok, errmsg = pcall(conn.configuration[method],
conn.configuration, param)
if not ok then
print('[ERRO]: '..errmsg.message)
return false
end
return true
end
handlers["reload-configs-file"] = function()
local conn = connect()
if not conn then
return false
end
conn.configuration:reloadConfigsFile()
return true
end
local function list2table(list)
local t = {}
for entry in string.gmatch(list, "%S+") do
t[#t+1] = entry
end
return t
end
handlers["grant-admin-to"] = function(cmd)
cmd.params[cmd.name] = list2table(cmd.params.users)
return handleConfigurationCall(cmd, "grantAdminTo")
end
handlers["revoke-admin-from"] = function(cmd)
cmd.params[cmd.name] = list2table(cmd.params.users)
return handleConfigurationCall(cmd, "revokeAdminFrom")
end
local function handleValidator(cmd, action)
return handleConfigurationCall(cmd, action.."Validator")
end
handlers["reload-validator"] = function(cmd)
return handleValidator(cmd, "reload")
end
handlers["del-validator"] = function(cmd)
return handleValidator(cmd, "del")
end
handlers["set-max-channels"] = function(cmd)
return handleConfigurationCall(cmd, "setMaxChannels", "number")
end
handlers["set-log-level"] = function(cmd)
return handleConfigurationCall(cmd, "setLogLevel", "number")
end
handlers["set-oil-log-level"] = function(cmd)
return handleConfigurationCall(cmd, "setOilLogLevel", "number")
end
---
-- Monta um relatório sobre o estado atual do barramento
......@@ -1546,6 +1659,10 @@ return function(...)
conn.entities = OpenBusContext:getEntityRegistry()
conn.interfaces = OpenBusContext:getInterfaceRegistry()
conn.offers = OpenBusContext:getOfferRegistry()
local ref = "corbaloc::"..host..":"..port
.."/"..BusObjectKey.."/Configuration"
conn.configuration = orb:newproxy(ref, nil,
"tecgraf::openbus::core::v2_0::services::admin::v1_0::Configuration")
-- END OF TODO
connection = conn
return connection
......
......@@ -410,8 +410,8 @@ function AccessControl:loginByPassword(entity, pubkey, encrypted)
log:exception(msg.TooManyFailedValidations:tag{entity=entity,wait=wait})
NO_RESOURCES{ completed = "COMPLETED_YES", minor = 0x42555000 }
end
for _, validator in ipairs(self.passwordValidators) do
local ok, valid, errmsg = xpcall(validator.validate, traceback, entity, decoded.data)
for validator, validate in pairs(self.passwordValidators) do
local ok, valid, errmsg = xpcall(validate, traceback, entity, decoded.data)
if not ok then
ServiceFailure{
message = msg.FailedPasswordValidation:tag{
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment