Commit ee218fa3 authored by Renato Figueiro Maia's avatar Renato Figueiro Maia
Browse files

[OPENBUS-2535] Adicionar suporte SSL no núcleo do barramento

- Copiando o branch 02_00_00 para se tornar o trunk onde será desenvolvido a nova versão do core+SDK_Lua.



git-svn-id: https://subversion.tecgraf.puc-rio.br/engdist/openbus/core/trunk@154760 ae0415b3-e90b-0410-900d-d0be9363c56b
parents b5748f30 250bdb0a
......@@ -38,7 +38,6 @@
\usepackage{html} % *always* load this for LaTeX2HTML
\begin{htmlonly}
\usepackage{verbatim}
\providecommand{\url}[1]{\texttt{#1}}
\providecommand{\codeinput}[2]{%
\textbf{\label{lst:#1}#2}%
\verbatiminput{src/#1}%
......@@ -262,11 +261,11 @@ A vers
Esse serviço tem como principais funcionalidades:
\begin{itemize}
\item criar e compartilhar uma sessão de colaboração
\item oferecer um canal de comunicação para enviar eventos para todos os membros da sessão
\item Criar e compartilhar uma sessão de colaboração.
\item Oferecer um canal de comunicação para enviar eventos para todos os membros da sessão.
\end{itemize}
Não entraremos em maiores detalhes sobre as funcionalidades e o uso do Serviço de Colaboração neste documento. Para mais informações, consulte o manual do próprio serviço~\cite{collaboration1.0}.
Não entraremos em maiores detalhes sobre as funcionalidades e o uso do Serviço de Colaboração neste documento. Para mais informações, consulte a documentação do próprio serviço~\cite{web:collaboration1.0}.
\subsection{Biblioteca de Acesso}\label{sec:library}
......@@ -313,26 +312,40 @@ Os pap
\subsection{Administradores de Sistema}
O barramento e os serviços núcleo são distribuídos em um mesmo programa, o \emph{busservice}. Logo, para disparar o barramento, basta executar o programa passando as suas configurações por linha de comando ou por arquivo de configuração.
O barramento e os serviços núcleo são distribuídos em um mesmo programa, o \emph{busservices}. Logo, para disparar o barramento, basta executar o programa passando as suas configurações por linha de comando ou por arquivo de configuração.
Se uma configuração não for explicitada, será utilizado o seu valor padrão.
As opções de configuração são:
\begin{description}
\item [-host] Endereço de rede usado pelo barramento.\\
Valor padrão é ``*", que significa que vai ouvir em todos os IPs da máquina.
Valor padrão é ``*'', que significa que vai ouvir em todos os IPs da máquina.
\item [-port] Número da porta usada pelo barramento.\\
Valor padrão é 2089.
\item [-database] Arquivo de dados do barramento.\\
Valor padrão é ``openbus.db".
Valor padrão é ``openbus.db''.
\item [-privatekey] Arquivo com chave privada do barramento.\\
Valor padrão é ``openbus.key"
Valor padrão é ``openbus.key''.
\item [-leasetime] Tempo em segundos de lease dos logins de acesso.\\
Valor padrão é 1800 segundos.
\item [-expirationgap] Tempo em segundos que os logins ficam válidos após o lease.\\
Valor padrão é 10 segundos.
\item [-badpasswordpenalty] Tempo em segundos com tentativas de login limitadas após falha de senha.\\
Após uma falha de autenticação, este é o período em que o número de falhas de autenticação por senha (ver badpasswordtries) provenientes de um mesmo IP ou entidade será limitado.\\
O valor padrão é 180 segundos.
\item [-badpasswordtries] Número máximo de tentativas durante o período de badpasswordpenalty.\\
Número máximo de falhas de autenticação por senha de um IP ou entidade.\\
O valor padrão é 3 tentativas.
\item [-badpasswordlimit] Número máximo de autenticações simultâneas com senha incorreta repassadas para os validadores de senha, ou seja, que ocorram dentro de um tempo curto (menor que 1/badpasswordrate segundos).\\
Por padrão, o controle de fluxo está desativado.
\item [-badpasswordrate] Frequência máxima de autenticações com senha incorreta repassadas para os validadores de senha em períodos longos (maiores que 2*badpasswordlimit/badpasswordrate segundos).\\
Por padrão, o controle de fluxo está desativado.
\item [-admin] Usuário com privilégio de administração.\\
Não é definido um valor padrão.
\item [-validator] Nome de pacote de validação de login.\\
......@@ -349,6 +362,7 @@ Por padr
\item [-noauthorizations] Desativa o suporte à autorizações de oferta.
\item [-nolegacy] Desativa o suporte à versão antiga do barramento.
\item [-logaddress] Exibe o endereço IP do requisitante no log do barramento.
\item [-configs] Arquivo de configurações adicionais do barramento.\\
O valor padrão é ``openbus.cfg".
......
......@@ -143,7 +143,7 @@ struct LoginAuthenticationInfo {
\end{description}
Como resultado de um login por senha bem sucedido a operação \code{loginByPassword} devolve a estrutura \code{LoginInfo} contendo o identificador do login e o identificador da entidade autenticada.
Adicionalmente, também é devolvido o tempo mínimo pelo qual o login permanecerá válido sem necessidade de renovação através do parâmetro de saída \code{lease}.
Adicionalmente, também é devolvido o tempo mínimo pelo qual o login permanecerá válido sem necessidade de renovação através do parâmetro de saída \code{validity}.
% subsection login_por_senha (end)
......@@ -159,7 +159,7 @@ Como resultado,
Para concluir o processo de login por certificado é necessário chamar a operação \code{LoginProcess::login} do objeto devolvido na etapa anterior, fornecendo uma chave pública de acesso (\code{pubkey}) e um bloco de dados encriptados (\code{encrypted}) com a chave pública do barramento, que é obtida através do atributo \code{buskey} desta mesma interface.
No caso do login por certificado, os dados desse bloco encriptado é estrutura \code{LoginAuthenticationInfo} codificada em CDR (encapsulado), onde os campos devem ser preenchidos da seguinte forma:
No caso do login por certificado, o dado encriptado é a estrutura \code{LoginAuthenticationInfo} codificada em CDR (encapsulado), onde os campos devem ser preenchidos da seguinte forma:
\begin{description}
\item[Campo \code{hash}] contém o hash SHA-256 do parâmetro \code{pubkey}.
......@@ -167,7 +167,7 @@ No caso do login por certificado, os dados desse bloco encriptado
\end{description}
Similarmente à autenticação por senha, como resultado de um login por certificado bem sucedido, a operação \code{LoginProcess::login} devolve a estrutura \code{LoginInfo} contendo o identificador do login e o identificador da entidade autenticada.
Adicionalmente, também é devolvido o tempo mínimo pelo qual o login permanecerá válido sem necessidade de renovação através do parâmetro de saída \code{lease}.
Adicionalmente, também é devolvido o tempo mínimo pelo qual o login permanecerá válido sem necessidade de renovação através do parâmetro de saída \code{validity}.
% subsection login_por_certificado (end)
......@@ -183,7 +183,7 @@ Como resultado,
Para concluir o processo de login por \term{Single Sign-On} é necessário chamar a operação \code{LoginProcess::login} do objeto devolvido na etapa anterior, fornecendo uma chave pública de acesso (\code{pubkey}) e um bloco de dados encriptados (\code{encrypted}) com a chave pública do barramento, que é obtida através do atributo \code{buskey} desta mesma interface.
No caso do login por \term{Single Sign-On}, os dados desse bloco encriptado é estrutura \code{LoginAuthenticationInfo} codificada em CDR (encapsulado), onde os campos devem ser preenchidos da seguinte forma:
No caso do login por \term{Single Sign-On}, o dado encriptado é a estrutura \code{LoginAuthenticationInfo} codificada em CDR (encapsulado), onde os campos devem ser preenchidos da seguinte forma:
\begin{description}
\item[Campo \code{hash}] contém o hash SHA-256 do parâmetro \code{pubkey}.
......@@ -191,7 +191,7 @@ No caso do login por \term{Single Sign-On}, os dados desse bloco encriptado
\end{description}
Similarmente à autenticação por certificado, como resultado de um login por \term{Single Sign-On} bem sucedido, a operação \code{LoginProcess::login} devolve a estrutura \code{LoginInfo} contendo o identificador do login e o identificador da entidade autenticada.
Adicionalmente, também é devolvido o tempo mínimo pelo qual o login permanecerá válido sem necessidade de renovação através do parâmetro de saída \code{lease}.
Adicionalmente, também é devolvido o tempo mínimo pelo qual o login permanecerá válido sem necessidade de renovação através do parâmetro de saída \code{validity}.
% subsection login_por_singlesignon (end)
......@@ -317,14 +317,14 @@ Os dados do \term{service context} consitem da seguinte estrutura deve codificad
// File: credential.idl
// Name: tecgraf::openbus::core::v2_0::credential::CredentialReset
struct CredentialReset {
Identifier login; // callee UUID
Identifier target; // callee entity
unsigned long session; // session ID
EncryptedBlock challenge; // encrypted 16-byte random value (the secret)
};
\end{samplecode}
\begin{description}
\item[Campo \code{login}] contém o identificador de login que recebeu a chamada.
\item[Campo \code{target}] contém o nome da entidade que recebeu a chamada.
\item[Campo \code{session}] contém um novo identificador da sessão de geração de credenciais correspondente ao segredo fornecido no campo \code{challenge}.
O identificador de sessão gerado deve ser diferente de qualquer sessão de geração de credenciais ativa entre o recebedor da chamada e o iniciador da chamada.
\item[Campo \code{challenge}] contém um novo segredo encriptado com a chave pública de acesso associada ao login que iniciou a chamada.
......@@ -376,15 +376,15 @@ struct SignedCallChain {
// File: access_control.idl
// Name: tecgraf::openbus::core::v2_0::services::access:control::CallChain
struct CallChain {
Identifier target; // Identificador do login a quem a cadeia se destina.
Identifier target; // Nome da entidade a quem a cadeia se destina.
LoginInfoSeq originators; // Informações de login das entidades que realizaram as chamadas em cadeia que originam essa chamada.
LoginInfo caller; // Informações de login da entidades que efetivamente fez chamada atual (última da cadeia).
LoginInfo caller; // Informações de login da entidades que efetivamente fez a chamada atual (última da cadeia).
};
\end{samplecode}
\item[Campo \code{target}] contém o identificador do login a quem a cadeia está destinada.
Ou seja, esse campo contém o mesmo identificador fornecido pelo campo \code{login} da estrutura \code{CredentialReset} descrito na seção \ref{sub:validacao_da_personalidade} que informa o login do objeto ao qual a chamada se destina.
Esse campo \code{target} da cadeia garante que a cadeia só possa ser utilizada (fazer novas chamadas dentro daquela cadeia) por quem detiver o login ao qual ela foi enviada.
\item[Campo \code{target}] contém o nome da entidade a quem a cadeia está destinada.
Ou seja, esse campo contém o mesmo identificador fornecido pelo campo \code{target} da estrutura \code{CredentialReset} descrito na seção \ref{sub:validacao_da_personalidade} que informa o nome da entidade ao qual a chamada se destina.
Esse campo \code{target} da cadeia garante que a cadeia só possa ser utilizada (fazer novas chamadas dentro daquela cadeia) por quem estiver logado como a mesma entidade a quem ela foi enviada.
\item[Campo \code{originators}] contém uma sequência de informações sobre os vários logins que realizaram as chamadas em cadeia que originam essa chamada.
......@@ -399,7 +399,7 @@ Para que a cadeia de chamada seja v
\begin{itemize}
\item O campo \code{SignedCallChain::signature} deve conter uma assinatura válida do campo \code{SignedCallChain::encoded} a ser autenticada com a chave pública do barramento.
\item O campo \code{CallChain::target} deve ser o login de quem recebe a chamada.
\item O campo \code{CallChain::target} deve ser o nome da entidade de quem recebe a chamada.
\item O campo \code{CallChain::caller} deve indicar as informações do login de quem iniciou a chamada.
\end{itemize}
......@@ -419,7 +419,7 @@ const unsigned long InvalidChainCode;
Muitas chamadas para operações das facetas fornecidas pelo barramento são feitas usando credenciais de chamada como especificadas neste documento.
Contudo, as cadeias de chamada enviadas nas credenciais em chamadas ao barramento são diferente das cadeias enviadas em outras chamadas.
A identificação de que o objeto CORBA sendo chamado reside no barramento é feita comparando o campo \code{CredentialReset::login} com o identificador do barramento, que é obtido através do atributo \code{busid} da \term{Faceta de Controle de Acesso} do barramento.
A identificação de que o objeto CORBA sendo chamado reside no barramento é feita comparando o campo \code{CredentialReset::target} com o identificador do barramento, que é obtido através do atributo \code{busid} da \term{Faceta de Controle de Acesso} do barramento.
Nas chamadas para o barramento, que são feitas fora de qualquer cadeia de chamada obtida previamente pelo iniciador da chamada, a cadeia a ser enviada na credencial é uma cadeia nula, que consiste da estrutura \code{SignedCallChain} em que o campo \code{signed} é uma sequência de zeros e o campo \code{encoded} é uma sequência vazia.
......@@ -439,7 +439,7 @@ Ou seja,
Nesse sentido, para gerar uma cadeia nova que não seja uma extensão de outra cadeia previamente recebida, é necessário enviar uma cadeia nula na credencial da chamada de \code{signChainFor}, o que está em conformidade com a regra para geração de cadeias para o barramento, uma vez que a operação \code{signChainFor} é do barramento.
Como resultado da operação \code{signChainFor} é devolvida uma nova cadeia em que o campo \code{CallChain::caller} da cadeia original será adicionado à sequência do campo \code{CallChain::originators} e o campo \code{CallChain::caller} conterá informações do login de quem chamou a operação \code{signChainFor}.
Adicionalmente, o campo \code{CallChain::target} conterá o identificador de login fornecido pelo parâmetro \code{target} da chamada de \code{signChainFor}.
Adicionalmente, o campo \code{CallChain::target} conterá o nome da entidade do identificador de login fornecido pelo parâmetro \code{target} da chamada de \code{signChainFor}.
Note que dessa forma é possível se adicionar a cadeias recebidas (processo denominado \term{join}), assim como gerar tais cadeias para quaisquer destinos para o qual seja necessário enviar credenciais.
......@@ -478,6 +478,10 @@ InvalidLoginCode
O login informado não é válido.
Isso ocorre quando o barramento informa a quem recebe a chamada que o login informado na chamada é inválido. \\
InvalidTargetCode
&
O login informado como 'target' da cadeia não é válido. \\
UnverifiedLoginCode
&
Não foi possível verificar o login informado por alguma razão.
......
%
% Documento de Instalao do OpenBus 2.0
%
% Created by Ronaldo Barbieri and Tadeu Martins on 2013-06-07.
% Copyright (c) 2012 Tecgraf/PUC-Rio. All rights reserved.
%
\documentclass[]{article}
% Use utf-8 encoding for foreign characters
\usepackage[latin1]{inputenc}
\usepackage[brazil]{babel}
% Setup for fullpage use
\usepackage{fullpage}
% Uncomment some of the following if you use the features
%
% Running Headers and footers
%\usepackage{fancyhdr}
% Multipart figures
%\usepackage{subfigure}
% More symbols
%\usepackage{amsmath}
%\usepackage{amssymb}
%\usepackage{latexsym}
\usepackage{hyperref}
% Surround parts of graphics with box
\usepackage{boxedminipage}
% Package for including code in the document
\usepackage{../mwlabinputs2}
% If you want to generate a toc for each chapter (use with book)
\usepackage{minitoc}
% This is now the recommended way for checking for PDFLaTeX:
\usepackage{ifpdf}
%% Redefines the label 'Listing' for ..
\def\lstlistingname{Cdigo}
\codestyle{colorful}
% new commands
\newcommand{\term}[1]{\textit{#1}}
\newcommand{\code}[1]{\texttt{#1}}
\newcommand{\openbus}{\textsc{OpenBus}}
\newcommand{\corba}{\textsc{CORBA}}
\newcommand{\orb}{\textsc{ORB}}
\newcommand{\scs}{\textsc{SCS}}
\newcommand{\lua}{\textsc{Lua}}
\newcommand{\oil}{\textsc{OiL}}
\newcommand{\version}{2.0.0}
%\newif\ifpdf
%\ifx\pdfoutput\undefined
%\pdffalse % we are not running PDFLaTeX
%\else
%\pdfoutput=1 % we are running PDFLaTeX
%\pdftrue
%\fi
\ifpdf
\usepackage[pdftex]{graphicx}
\else
\usepackage{graphicx}
\fi
\title{Guia de Incio Rpido do \openbus{} \version{}}
\author{Tecgraf}
\date{\today}
\begin{document}
\ifpdf
\DeclareGraphicsExtensions{.pdf, .jpg, .tif}
\else
\DeclareGraphicsExtensions{.eps, .jpg}
\fi
\maketitle
\tableofcontents
\section{Introduo}
Este documento visa prover os passos necessrios para instalar e levantar um barramento \openbus{}~\cite{web:OPENBUS} da verso \version{} e executar um demo.
Caso tenha interesse em entender melhor o que um barramento \openbus{} e os detalhes de instalao, consulte o manual de referncia~\cite{ob2.0core} e o manual de instalao~\cite{ob2.0install}. Os procedimentos a seguir descrevem a instalao em plataforma Linux (Ubuntu 12.04) utilizando comandos do Bash shell (interpretador de linguagem de comandos)~\cite{web:bash}~\cite{web:advbash}. O demo em C++, e executado na mesma mquina do barramento. Para a execuo em outras plataformas, de demos em outras linguagens, e utilizando configuraes diferentes, sugerido que se consulte os manuais acima referidos.
\section{Como instalar e levantar o barramento:}
\begin{enumerate}
\item Faa o download da verso estvel do core do OpenBus para um diretrio do Linux. Selecione o pacote mais apropriado para a sua plataforma:
\url{https://jira.tecgraf.puc-rio.br/confluence/display/OPENBUS020/Core}
\item Descompacte o pacote:
\begin{verbatim}
$ tar xvzf openbus-core-2.0.0.1-Linux26g4.tar.gz
\end{verbatim}
\item Para facilitar o processo, recomendado que se inclua as seguintes variveis de ambiente no arquivo de inicializao. No esquea de sair e entrar novamente no shell para que as variveis de ambiente sejam definidas para a sesso corrente.
\begin{verbatim}
$ cd ~
$ vi .bashrc
export OPENBUS_HOME=<caminho do openbus-core>
export PATH="${OPENBUS_HOME}/bin:.:${PATH}"
export LD_LIBRARY_PATH="/usr/lib:/lib/i386-linux-gnu:${OPENBUS_HOME}/lib: \
${LD_LIBRARY_PATH}"
export OPENSSL_HOME="${OPENBUS_HOME}/openssl"
export LUA_PATH="${OPENBUS_HOME}/?.lua;${LUA_PATH}"
\end{verbatim}
\item Gere um arquivo de chave privada (arquivo com extenso ".key") e um certificado (arquivo com extenso ".crt") utilizando o comando \verb|openssl| que acompanha o pacote. Os arquivos podem ter um nome diferente do sugerido abaixo, desde que o nome do arquivo de chave privada seja passado no parmetro \verb|-privatekey| do servidor do barramento (\verb|busservices|).
\begin{verbatim}
$ cd $OPENBUS_HOME
$ ${OPENBUS_HOME}/bin/openssl genrsa -out tmp_openssl.key 2048
$ ${OPENBUS_HOME}/bin/openssl pkcs8 -topk8 -nocrypt \
-in tmp_openssl.key -out openbus.key -outform DER
$ rm -f tmp_openssl.key
$ ${OPENBUS_HOME}/bin/openssl req -config $OPENSSL_HOME/openssl.cnf -new -x509 \
-key openbus.key -keyform DER \
-out openbus.crt -outform DER
\end{verbatim}
\item Crie um script de validao em LUA para verificar se o nome do usurio e senha utilizados para acessar o barramento so vlidos. No nosso caso, vamos utilizar um script de validao que verifica apenas se o nome do usurio igual senha:
\begin{verbatim}
$ cd $OPENBUS_HOME
$ vi validador.lua
local function validator(name, password)
if name == password then
return true
end
end
return function(configs) return validator end
\end{verbatim}
\item Levante o barramento. O nome do script de validao passado no parmetro \verb|-validator| sem a extenso ".lua". A varivel de ambiente \verb|$LUA_PATH| contm o caminho onde o servidor do barramento far a busca pelo script de validao. Caso o parmetro \verb|-privatekey| no seja passado, o servidor do barramento utilizar o nome do arquivo de chave privada padro (\verb|openbus.key|). Como no foram passados os parmetros \verb|-host| e \verb|-port|, o servidor do barramento ser levantando utilizando a mscara de host e a porta padro (\verb|host="*" port=2089|).
\begin{verbatim}
$ cd $OPENBUS_HOME
$ ./bin/busservices -privatekey openbus.key -admin admin -validator validador
\end{verbatim}
\end{enumerate}
\section{Como compilar e executar um demo:}
\begin{enumerate}
\item Faa o download de uma verso estvel de um SDK (ex: C++ - ORB Mico). Selecione o SDK mais apropriado para a sua plataforma:
\url{https://jira.tecgraf.puc-rio.br/confluence/display/OPENBUS020/SDK}
\item Descompacte o pacote:
\begin{verbatim}
$ tar xvzf openbus-cpp-mico-2.0.0.0-Linux26g4.tar.gz
\end{verbatim}
\item Instale tambm as seguintes bibliotecas no Linux (Ubuntu 12.04):
\begin{verbatim}
$ sudo apt-get install g++
$ sudo apt-get install libstdc++6
\end{verbatim}
\item Para facilitar o processo, recomendado que se inclua as seguintes variveis de ambiente no arquivo de inicializao. No esquea de sair e entrar novamente no shell para que as variveis de ambiente sejam definidas para a sesso corrente.
\begin{verbatim}
$ cd ~
$ vi .bashrc
export PATH="/<caminho do openbus-cpp-mico>/bin:.:${PATH}"
export LD_LIBRARY_PATH="/<caminho do openbus-cpp-mico>/lib:${LD_LIBRARY_PATH}"
export BOOST_ROOT="/<caminho do openbus-cpp-mico>/boost-build"
alias mico-mt='export LD_LIBRARY_PATH="/<caminho do openbus-cpp-mico>/lib/mico-mt: \
${LD_LIBRARY_PATH}";export PATH="/<caminho do openbus-cpp-mico>/bin/mico-mt:${PATH}"'
alias mico-mt-d='export LD_LIBRARY_PATH="/<caminho do openbus-cpp-mico>/lib/mico-mt-d: \
${LD_LIBRARY_PATH}";export PATH="/<caminho do openbus-cpp-mico>/bin/mico-mt-d:${PATH}"'
alias mico-st='export LD_LIBRARY_PATH="/<caminho do openbus-cpp-mico>/lib/mico-st: \
${LD_LIBRARY_PATH}";export PATH="/<caminho do openbus-cpp-mico>/bin/mico-st:${PATH}"'
alias mico-st-d='export LD_LIBRARY_PATH="/<caminho do openbus-cpp-mico>/lib/mico-st-d: \
${LD_LIBRARY_PATH}";export PATH="/<caminho do openbus-cpp-mico>/bin/mico-st-d:${PATH}"'
\end{verbatim}
\item Chame um dos aliases acima de acordo com o tipo de compilao desejado (mt-multithreading/st-single threading, d-debug):
\begin{verbatim}
$ mico-mt-d
\end{verbatim}
\item Entre no diretrio de demo que deseja compilar:
\begin{verbatim}
$ cd /<caminho do openbus-cpp-mico>/demo/hello
\end{verbatim}
\item Compile o demo selecionado utilizando os parmetros correspondente ao tipo de compilao:
\begin{verbatim}
$ b2 --layout=tagged threading=multi
\end{verbatim}
\item Excute o script LUA com um lote de comandos para cadastrar o servidor do demo no barramento. Caso o parmetro \verb|--password| no seja passado, a senha de acesso ser pedido pelo administrador do barramento (\verb|busadmin|).
\begin{verbatim}
$ cd /<caminho do openbus-cpp-mico>/demo/hello/admin
$ busadmin --login=admin --password=admin --script=busadmin.adm
[INFO] Categoria 'DemoCppHelloCategory' cadastrada com sucesso
[INFO] Entidade 'demo' cadastrada com sucesso
[INFO] Certificado da entidade 'demo' cadastrada com sucesso
[INFO] Interface 'IDL:tecgraf/openbus/interop/simple/Hello:1.0' cadastrada com sucesso.
[INFO] Autoriza??o concedida a 'demo': IDL:tecgraf/openbus/interop/simple/Hello:1.0
\end{verbatim}
\item Para listar as informaes cadastradas do servidor do demo, utilize os seguintes comandos:
\begin{verbatim}
$ busadmin --login=admin --password=admin --list-entity
-----+-------------+----------------------+-------------------------------------
| ID ENTIDADE | ID CATEGORIA | NOME
-----+-------------+----------------------+-------------------------------------
001 | demo | DemoCppHelloCategory | Entidade gerada pelo script
-----+-------------+----------------------+-------------------------------------
$ busadmin --login=admin --password=admin --list-category
-----+----------------------+---------------------------------------------------
| ID CATEGORIA | NOME
-----+----------------------+---------------------------------------------------
001 | DemoCppHelloCategory | Categoria gerada pelo script
-----+----------------------+---------------------------------------------------
$ busadmin --login=admin --password=admin --list-interface
-----+--------------------------------------------------------------------------
| INTERFACE
-----+--------------------------------------------------------------------------
001 | IDL:tecgraf/openbus/interop/simple/Hello:1.0
-----+--------------------------------------------------------------------------
$ busadmin --login=admin --password=admin --list-authorization
-----+-------------+------------------------------------------------------------
| ID ENTIDADE | INTERFACES
-----+-------------+------------------------------------------------------------
001 | demo | IDL:tecgraf/openbus/interop/simple/Hello:1.0
-----+-------------+------------------------------------------------------------
\end{verbatim}
\item Execute o servidor do demo. O caminho do binrio segue o tipo de compilao escolhido:
\begin{verbatim}
$ cd /<caminho do openbus-cpp-mico>/demo
$ ./bin/hello/gcc-4.6/debug/threading-multi/hello_server --private-key \
hello/admin/DemoCppHello.key
\end{verbatim}
\item Em um shell diferente, chame o alias correspondente ao tipo de compilao desejado (mt-multithreading/st-single threading, d-debug):
\begin{verbatim}
$ mico-mt-d
\end{verbatim}
\item Execute o cliente do demo. O caminho do binrio segue o tipo de compilao escolhido:
\begin{verbatim}
$ cd /<caminho do openbus-cpp-mico>/demo
$ ./bin/hello/gcc-4.6/debug/threading-multi/hello_client
\end{verbatim}
\item Liste as ofertas de servios disponveis no barramento:
\begin{verbatim}
$ busadmin --login=admin --password=admin --list-offer
-----+-------------+----------------------------------------------+------------+----------
| ID ENTIDADE | INTERFACES | DATA | HORA
-----+-------------+----------------------------------------------+------------+----------
001 | demo | IDL:scs/core/IComponent:1.0 | 06/06/2013 | 17:48:07
| | IDL:scs/core/IMetaInterface:1.0 | |
| | IDL:scs/core/IReceptacles:1.0 | |
| | IDL:tecgraf/openbus/interop/simple/Hello:1.0 | |
-----+-------------+----------------------------------------------+------------+----------
\end{verbatim}
\item Se o servidor do demo foi parado e reiniciado, os servios sero oferecidos novamente. Remove todos os servios oferecidos e reinicie o servidor do demo.
\begin{verbatim}
$ busadmin --login=admin --password=admin --list-offer
-----+-------------+----------------------------------------------+------------+----------
| ID ENTIDADE | INTERFACES | DATA | HORA
-----+-------------+----------------------------------------------+------------+----------
001 | demo | IDL:scs/core/IComponent:1.0 | 06/06/2013 | 17:48:07
| | IDL:scs/core/IMetaInterface:1.0 | |
| | IDL:scs/core/IReceptacles:1.0 | |
| | IDL:tecgraf/openbus/interop/simple/Hello:1.0 | |
002 | demo | IDL:scs/core/IComponent:1.0 | 06/06/2013 | 17:53:52
| | IDL:scs/core/IMetaInterface:1.0 | |
| | IDL:scs/core/IReceptacles:1.0 | |
| | IDL:tecgraf/openbus/interop/simple/Hello:1.0 | |
-----+-------------+----------------------------------------------+------------+----------
$ ./bin/hello/gcc-4.6/debug/threading-multi/hello_client
Existe mais de um servico Hello no barramento. Tentaremos encontrar uma funcional.
Erro de comunicacao. Verifique se o sistema se encontra ainda disponivel ou se sua
conexao com o mesmo foi interrompida
$ busadmin --login=admin --password=admin --del-offer --entity=demo
-----+-------------+----------------------------------------------+------------+----------
| ID ENTIDADE | INTERFACES | DATA | HORA
-----+-------------+----------------------------------------------+------------+----------
001 | demo | IDL:scs/core/IComponent:1.0 | 06/06/2013 | 17:48:07
| | IDL:scs/core/IMetaInterface:1.0 | |
| | IDL:scs/core/IReceptacles:1.0 | |
| | IDL:tecgraf/openbus/interop/simple/Hello:1.0 | |
002 | demo | IDL:scs/core/IComponent:1.0 | 06/06/2013 | 17:53:52
| | IDL:scs/core/IMetaInterface:1.0 | |
| | IDL:scs/core/IReceptacles:1.0 | |
| | IDL:tecgraf/openbus/interop/simple/Hello:1.0 | |
-----+-------------+----------------------------------------------+------------+----------
Informe o Indice da oferta que deseja remover:
002
[INFO] Oferta '2' removida com sucesso.
$ busadmin --login=admin --password=admin --del-offer --entity=demo
-----+-------------+----------------------------------------------+------------+----------
| ID ENTIDADE | INTERFACES | DATA | HORA
-----+-------------+----------------------------------------------+------------+----------
001 | demo | IDL:scs/core/IComponent:1.0 | 06/06/2013 | 17:48:07
| | IDL:scs/core/IMetaInterface:1.0 | |
| | IDL:scs/core/IReceptacles:1.0 | |
| | IDL:tecgraf/openbus/interop/simple/Hello:1.0 | |
-----+-------------+----------------------------------------------+------------+----------
Informe o Indice da oferta que deseja remover:
001
[INFO] Oferta '1' removida com sucesso.
$ cd /<caminho do openbus-cpp-mico>/demo
$ ./bin/hello/gcc-4.6/debug/threading-multi/hello_server --private-key \
hello/admin/DemoCppHello.key
\end{verbatim}
\end{enumerate}
\bibliographystyle{plain}
\bibliography{../references}
\end{document}
......@@ -86,11 +86,13 @@ year = {2008}}
howpublished = "\url{http://jira.tecgraf.puc-rio.br/confluence/x/kAXyAg}",
year = {2012}}
@MANUAL{collaboration1.0,
@misc{web:collaboration1.0,
author = {TecGraf},
title = {Manual do Servio de Colaborao 1.0},
title = {{Documentao do Servio de Colaborao 1.0}},
organization = {TecGraf},
year = {2012}}
url = {https://jira.tecgraf.puc-rio.br/confluence/pages/viewpage.action?pageId=52528899},
howpublished = "\url{https://jira.tecgraf.puc-rio.br/confluence/pages/viewpage.action?pageId=52528899}",
Year = {2013}}
@MANUAL{sdk2.0.0-java,
author = {TecGraf},
......@@ -177,3 +179,10 @@ Url = {http://www.gnu.org/software/bash/manual/bashref.html},
howpublished = "\url{http://www.gnu.org/software/bash/manual/bashref.html}",
year = {2010}}
@misc{web:advbash,
Author = {Mendel Cooper},
Lastchecked = {27 November 2012},
Title = {Advanced Bash-Scripting Guidel},
Url = {http://tldp.org/LDP/abs/html/},
howpublished = "\url{http://tldp.org/LDP/abs/html/}",
year = {2012}}
/**
* \mainpage Documentação da IDL
*/
#ifndef __TECGRAF_OPENBUS_CORE_V20_SERVICES_ACCESSCONTROL_ADMIN_V10_IDL__
#define __TECGRAF_OPENBUS_CORE_V20_SERVICES_ACCESSCONTROL_ADMIN_V10_IDL__
#include "access_control.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 do Serviço de Autenticação. */
module access_control {
/** \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 {
/****************************************************************************/
/* Faceta de Gerência de Certificados de Entidades **************************/
/****************************************************************************/
/** \brief Certificado que utilizado na autenticação de entidades. */
typedef sequence<octet> EntityCertificate;
/** \brief Indica que o certificado fornecido é inválido */
exception InvalidCertificate { string message; };
/**
* \brief Gerência de certificados de autenticação de entidades no