From 27ea9b9d2cf7f5a518e4e0e721effd6e980bad97 Mon Sep 17 00:00:00 2001 From: anderson.peterle@previdencia.gov.br Date: Tue, 11 Aug 2009 16:18:19 +0000 Subject: [PATCH] Agente Windows/srCACICsrv/srCACICcli: Reposicionamento de metodo publico, comentarios, obtencao de parametro de TimeOut para conexoes e pequenas correcoes. --- col_hard/col_hard.dpr | 6 +++--- srcacic/VNCViewer/AuthDialog.h | 8 ++++---- srcacic/VNCViewer/CACIC_Crypt.cpp | 6 ++++-- srcacic/VNCViewer/CACIC_Crypt.h | 38 ++++++++++++++++++++++++++++++-------- srcacic/VNCViewer/CACIC_Utils.cpp | 7 ------- srcacic/VNCViewer/CACIC_Utils.h | 40 +++++++++++++++++++++++++++++++++++++++- srcacic/VNCViewer/Res/vncviewer.rc | 10 +++++----- srcacic/WinVNC/WinVNC/CACIC_Auth.cpp | 238 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------- srcacic/WinVNC/WinVNC/CACIC_Auth.h | 188 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------- srcacic/WinVNC/WinVNC/CACIC_Con.cpp | 24 +++++++++++------------- srcacic/WinVNC/WinVNC/CACIC_Con.h | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------- srcacic/WinVNC/WinVNC/CACIC_Crypt.cpp | 8 ++++---- srcacic/WinVNC/WinVNC/CACIC_Crypt.h | 38 ++++++++++++++++++++++++++++++-------- srcacic/WinVNC/WinVNC/CACIC_Exception.h | 24 ++++++++++++++++++++++-- srcacic/WinVNC/WinVNC/CACIC_Utils.cpp | 15 +++++++++------ srcacic/WinVNC/WinVNC/CACIC_Utils.h | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- srcacic/WinVNC/WinVNC/resource.h | 5 +++-- srcacic/WinVNC/WinVNC/supInfoDlg.cpp | 24 ++---------------------- srcacic/WinVNC/WinVNC/supInfoDlg.h | 4 +++- srcacic/WinVNC/WinVNC/vncPassDlg.cpp | 58 +++++++++++++++++----------------------------------------- srcacic/WinVNC/WinVNC/vncPassDlg.h | 23 +++++++++++++++-------- srcacic/WinVNC/WinVNC/vncclient.cpp | 3 ++- srcacic/WinVNC/WinVNC/winvnc.cpp | 13 +++++++------ srcacic/WinVNC/WinVNC/winvnc.rc | 33 ++++++++++++++++++--------------- 24 files changed, 642 insertions(+), 320 deletions(-) diff --git a/col_hard/col_hard.dpr b/col_hard/col_hard.dpr index 1809b73..556b5ea 100644 --- a/col_hard/col_hard.dpr +++ b/col_hard/col_hard.dpr @@ -736,7 +736,7 @@ begin v_te_mem_ram_desc := v_te_mem_ram_desc + 'Slot '+ inttostr(i) + ': ' + v_SMBIOS.MemoryDevice[i].Manufacturer + ' ' - + inttostr(v_SMBIOS.MemoryDevice[i].Size) + 'Mb ' + + inttostr(v_SMBIOS.MemoryDevice[i].Size) + 'MB ' + '(' + v_te_mem_ram_tipo +')'; end; end @@ -749,7 +749,7 @@ begin v_te_mem_ram_desc := v_te_mem_ram_desc + ' - '; v_te_mem_ram_desc := v_te_mem_ram_desc + 'Slot '+ inttostr(i) + ': ' + v_SMBIOS.MemoryDevice[i].Manufacturer + ' ' - + inttostr(v_SMBIOS.MemoryModule[i].Size) + 'Mb ' + + inttostr(v_SMBIOS.MemoryModule[i].Size) + 'MB ' + '(' + v_te_mem_ram_tipo +')'; end; end; @@ -787,7 +787,7 @@ begin if (trim(v_te_placa_video_desc)='') then v_te_placa_video_desc := v_DISPLAY.Adapter; v_qt_placa_video_cores := IntToStr(v_DISPLAY.ColorDepth); - v_qt_placa_video_mem := IntToStr(v_DISPLAY.Memory div 1048576 ) + 'Mb'; + v_qt_placa_video_mem := IntToStr(v_DISPLAY.Memory div 1048576 ) + 'MB'; v_te_placa_video_resolucao := IntToStr(v_DISPLAY.HorzRes) + 'x' + IntToStr(v_DISPLAY.VertRes); v_DISPLAY.Free; diff --git a/srcacic/VNCViewer/AuthDialog.h b/srcacic/VNCViewer/AuthDialog.h index 10d8ca2..513a478 100644 --- a/srcacic/VNCViewer/AuthDialog.h +++ b/srcacic/VNCViewer/AuthDialog.h @@ -36,10 +36,10 @@ public: virtual ~AuthDialog(); int DoDialog(); - TCHAR m_user[32]; - TCHAR m_passwd[32]; - TCHAR m_doc_ref[128]; - TCHAR m_motivo[5120]; + TCHAR m_user[32]; // Usuário técnico a ser autenticado no gerente web + TCHAR m_passwd[32]; // Senha + TCHAR m_doc_ref[128]; // Documento de Referência apresentado pelo técnico. + TCHAR m_motivo[5120]; // Motivo da conexão. TCHAR m_domain[128]; diff --git a/srcacic/VNCViewer/CACIC_Crypt.cpp b/srcacic/VNCViewer/CACIC_Crypt.cpp index af3af63..e751c7d 100644 --- a/srcacic/VNCViewer/CACIC_Crypt.cpp +++ b/srcacic/VNCViewer/CACIC_Crypt.cpp @@ -1,5 +1,7 @@ -/* - * Classe para criptografia de dados +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe para criptografia de dados. */ #include "CACIC_Crypt.h" diff --git a/srcacic/VNCViewer/CACIC_Crypt.h b/srcacic/VNCViewer/CACIC_Crypt.h index ec8c2ec..c8f4cc7 100644 --- a/srcacic/VNCViewer/CACIC_Crypt.h +++ b/srcacic/VNCViewer/CACIC_Crypt.h @@ -1,5 +1,7 @@ -/* - * Classe para criptografia de dados +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe para criptografia de dados. */ #ifndef _CACIC_CRYPT_ @@ -16,17 +18,37 @@ class CACIC_Crypt { public: + /** + * Remove da String de entrada os caracteres colocados pela URLEncode, + * tira do Base64 e depois decodifica usando o Rijndael. + * @param entrada String a ser decodificada. + * @return string String decodificada. + */ static string decodifica(const char* entrada); + + /** + * Codifica a String passada com o algoritmo Rijndael e coloca no Base64. + * @param entrada String a ser codificada. + * @return string String codificada. + */ static string codifica(const char* entrada); private: - static const unsigned int SRCACIC_BLOCK_SIZE; // tamanho padrao do bloco - static const unsigned int SRCACIC_KEY_SIZE; // tamanho padrao da chave - static const char SRCACIC_KEY[17]; // chave de en/dec - static const char SRCACIC_IV[17]; // vetor de inicializacao - - virtual void ccrypt() = 0; // Truque para tornar a classe abstrata. + /** Tamanho padrão do bloco. */ + static const unsigned int SRCACIC_BLOCK_SIZE; + /** Tamanho padrão da chave. */ + static const unsigned int SRCACIC_KEY_SIZE; + /** Chave de codificação. */ + static const char SRCACIC_KEY[17]; + /** Vetor de inicialização. */ + static const char SRCACIC_IV[17]; + + /** + * Este método virtual puro é um truque para que a classe + * se torne abstrata e não possa ser instanciada. + */ + virtual void ccrypt() = 0; }; #endif diff --git a/srcacic/VNCViewer/CACIC_Utils.cpp b/srcacic/VNCViewer/CACIC_Utils.cpp index c3934fa..14e4e3f 100644 --- a/srcacic/VNCViewer/CACIC_Utils.cpp +++ b/srcacic/VNCViewer/CACIC_Utils.cpp @@ -1,7 +1,5 @@ #include "CACIC_Utils.h" -// troca os caracteres da string -// origem ori_str new_str void CACIC_Utils::replaceAll(string &str, string key, string newkey) { int found = str.find(key, 0); @@ -13,7 +11,6 @@ void CACIC_Utils::replaceAll(string &str, string key, string newkey) } } -// substitui alguns caracteres especiais antes da encriptacao void CACIC_Utils::simpleUrlEncode(string &decoded) { replaceAll(decoded, "+", ""); @@ -32,7 +29,6 @@ void CACIC_Utils::simpleUrlDecode(string &encoded) replaceAll(encoded, "", "\\"); } -// Fetches the MAC address and prints it string CACIC_Utils::getMACAddress() { IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs @@ -44,7 +40,6 @@ string CACIC_Utils::getMACAddress() { assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info - // TODO: e se houve mais de uma placa de rede, qual mac deve ir? //do { // PrintMACaddress(pAdapterInfo->Address); // Print MAC address // pAdapterInfo = pAdapterInfo->Next; // Progress through linked list @@ -62,8 +57,6 @@ string CACIC_Utils::getMACAddress() { } -// TODO: Lembrete, quero melhorar o código: -// http://www.codeguru.com/cpp/w-p/system/systeminformation/article.php/c8973__2/ string CACIC_Utils::getSOID() { OSVERSIONINFO osver; ZeroMemory(&osver, sizeof(OSVERSIONINFO)); diff --git a/srcacic/VNCViewer/CACIC_Utils.h b/srcacic/VNCViewer/CACIC_Utils.h index 5454e04..2e3c4e0 100644 --- a/srcacic/VNCViewer/CACIC_Utils.h +++ b/srcacic/VNCViewer/CACIC_Utils.h @@ -1,6 +1,12 @@ #ifndef _CACIC_UTILS_ #define _CACIC_UTILS_ +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe com alguns métodos utilitários. + */ + #include "stdhdrs.h" #include @@ -17,17 +23,49 @@ class CACIC_Utils { public: + /** + * Troca caracteres específicos de uma string. + * @param str String a ser modificada. + * @param key String com o caractere ou conjunto de caracteres que serão substituídos. + * @param newKey String com o caractere ou conjunto de caracteres que irão substituir. + */ static void replaceAll(string &str, string key, string newkey); + /** + * Mesma função do urlEncode, porém os caracteres serão substituídos + * por tags específicas, e não pelo código. + * @param entrada String que será codificada. + */ static void simpleUrlEncode(string &entrada); + + /** + * Faz o inverso do simpleUrlEncode, trocando as tags específicas pelos + * respectivos caracteres. + * @param entrada String que será codificada. + */ static void simpleUrlDecode(string &entrada); + /** + * Obtém o MAC Address da placa de rede.
+ * TODO: Quando houver mais de uma placa de rede no pc, verificar qual + * está se comunicando com o servidor para enviar o MAC certo. + */ static string getMACAddress(); + + /** + * Obtém a identificação do sistema operacional.
+ * Artigo sobre SOID:
+ * http://www.codeguru.com/cpp/w-p/system/systeminformation/article.php/c8973__2/ + */ static string getSOID(); private: - virtual void cutils() = 0; // Truque para tornar a classe abstrata. + /** + * Este método virtual puro é um truque para que a classe + * se torne abstrata e não possa ser instanciada. + */ + virtual void cutils() = 0; }; diff --git a/srcacic/VNCViewer/Res/vncviewer.rc b/srcacic/VNCViewer/Res/vncviewer.rc index 08ef226..3100d3a 100644 --- a/srcacic/VNCViewer/Res/vncviewer.rc +++ b/srcacic/VNCViewer/Res/vncviewer.rc @@ -312,7 +312,7 @@ BEGIN RTEXT "Usuário:",IDC_STATIC,76,24,39,10 RTEXT "Senha:",IDC_STATIC,80,41,35,8 LTEXT "Doc. Referência:",IDC_DOC_REF,61,58,55,8 - LTEXT "Motivo do suporte: (tamanho máximo 5120 caracteres)",IDC_MOTIVO_SUPORTE,7,70,179,8 + LTEXT "Motivo do Suporte: (tamanho máximo 5120 caracteres)",IDC_MOTIVO_SUPORTE,7,70,179,8 CONTROL 156,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_SUNKEN,7,21,50,45 LTEXT "Por favor, digite seu nome de usuário e senha no gerente web.",IDC_STATIC,7,7,203,11 LTEXT "",IDC_CHAR_COUNT,7,136,43,8,0,WS_EX_TRANSPARENT @@ -535,8 +535,8 @@ IDB_VNC32 BITMAP "vnc32.BMP" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,5,0,800 - PRODUCTVERSION 2,5,0,800 + FILEVERSION 2,5,0,804 + PRODUCTVERSION 2,5,0,804 FILEFLAGSMASK 0x37L #ifdef _DEBUG FILEFLAGS 0x25L @@ -553,11 +553,11 @@ BEGIN BEGIN VALUE "CompanyName", "Dataprev - Unidade Regional Espírito Santo" VALUE "FileDescription", "Visualizador do Suporte Remoto Seguro do Sistema CACIC" - VALUE "FileVersion", "2, 5, 0, 800" + VALUE "FileVersion", "2, 5, 0, 804" VALUE "InternalName", "srCACICcli" VALUE "LegalCopyright", "Copyright © 2008 DATAPREV" VALUE "LegalTrademarks", "srCACIC" - VALUE "ProductVersion", "2, 5, 0, 800" + VALUE "ProductVersion", "2, 5, 0, 804" END END BLOCK "VarFileInfo" diff --git a/srcacic/WinVNC/WinVNC/CACIC_Auth.cpp b/srcacic/WinVNC/WinVNC/CACIC_Auth.cpp index 4175ce4..a23d98e 100644 --- a/srcacic/WinVNC/WinVNC/CACIC_Auth.cpp +++ b/srcacic/WinVNC/WinVNC/CACIC_Auth.cpp @@ -1,21 +1,25 @@ +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe singleton responsável pela autenticação no gerente web. + */ + #include "CACIC_Auth.h" const string CACIC_Auth::GET_CONFIG_SCRIPT = "srcacic_get_config.php"; const string CACIC_Auth::SET_SESSION_SCRIPT = "srcacic_set_session.php"; const string CACIC_Auth::AUTH_CLIENT_SCRIPT = "srcacic_auth_client.php"; const unsigned int CACIC_Auth::TAMANHO_RESPOSTA = 1025; +const string CACIC_Auth::AGUARDE_FILENAME = "aguarde_srCACIC.txt"; +const string CACIC_Auth::COOKIE_FILENAME = "cacic_ck.txt"; +const UINT CACIC_Auth::TEMPO_IDLE = 5; -CACIC_Auth::CACIC_Auth() {} - -CACIC_Auth::~CACIC_Auth() {} - -// autentica a sessão no servidor web de acordo com os parametros passados bool CACIC_Auth::autentica() { - string post = getPostComum(); - vnclog.Print(LL_SRLOG, VNCLOG("Autenticando o usuário no gerente web.\n")); + string post = getPostComum(); + string config_script = m_scriptsPath; config_script += GET_CONFIG_SCRIPT; @@ -25,65 +29,71 @@ bool CACIC_Auth::autentica() vector listaDominios; if (!verificaAuthChave(resposta, listaDominios)) return false; - vncPassDlg::EAuthCode authStat; - if (listaDominios.at(0).id == "0") { - authStat = vncPassDlg::SEM_AUTENTICACAO; + if (!autenticaUsuario(listaDominios)) return false; + + vnclog.Print(LL_SRLOG, VNCLOG("Autenticação OK!\n")); + + return true; +} + +bool CACIC_Auth::autenticaUsuario(vector &listaDominios) +{ + string post; + char resposta[TAMANHO_RESPOSTA]; + + vncPassDlg passDlg(listaDominios); + + if (listaDominios.at(0).id.compare("0") == 0) { + passDlg.m_authStat = vncPassDlg::SEM_AUTENTICACAO; } else { - authStat = vncPassDlg::ESPERANDO_AUTENTICACAO; + passDlg.m_authStat = vncPassDlg::ESPERANDO_AUTENTICACAO; } // apresenta o dialogo de autenticação - vncPassDlg passDlg(listaDominios); do { - if (!passDlg.DoDialog(authStat, "")) return 0; - - string nm_nome_acesso_autenticacao; - nm_nome_acesso_autenticacao = CACIC_Crypt::codifica(passDlg.m_usuario); - - string te_senha_acesso_autenticacao; - te_senha_acesso_autenticacao = CACIC_Crypt::codifica(passDlg.m_senha); - - string id_servidor_autenticacao; - id_servidor_autenticacao = CACIC_Crypt::codifica(passDlg.m_dominio); - + if (!passDlg.DoDialog()) return false; + + post.clear(); + post = getPostComum(); + post += "&nm_nome_acesso_autenticacao="; - post += nm_nome_acesso_autenticacao; + post += CACIC_Crypt::codifica(passDlg.m_usuario); post += "&te_senha_acesso_autenticacao="; - post += te_senha_acesso_autenticacao; + post += CACIC_Crypt::codifica(passDlg.m_senha); post += "&id_servidor_autenticacao="; - post += id_servidor_autenticacao; + post += CACIC_Crypt::codifica(passDlg.m_dominio); vnclog.Print(LL_SRLOG, post.data()); - string session_script = m_scriptsPath.c_str(); + string session_script = m_scriptsPath; session_script.append(SET_SESSION_SCRIPT); CACIC_Con::sendHtppPost(m_servidorWeb, session_script, post, resposta, TAMANHO_RESPOSTA); if(verificaAuthDominio(resposta)) { - authStat = vncPassDlg::AUTENTICADO; + passDlg.m_authStat = vncPassDlg::AUTENTICADO; } else { - authStat = vncPassDlg::FALHA_AUTENTICACAO; + passDlg.m_authStat = vncPassDlg::FALHA_AUTENTICACAO; } } - while (authStat != vncPassDlg::AUTENTICADO); + while (passDlg.m_authStat != vncPassDlg::AUTENTICADO); if (passDlg.m_authStat != vncPassDlg::SEM_AUTENTICACAO) { string msginfo = "Usuário Autenticado: "; msginfo += m_usuario; - if (!passDlg.DoDialog(vncPassDlg::AUTENTICADO, msginfo)) return 0; + passDlg.m_authStat = vncPassDlg::AUTENTICADO; + passDlg.m_msgInfo = msginfo; + if (!passDlg.DoDialog()) return false; } - vnclog.Print(LL_SRLOG, VNCLOG("Autenticação OK!\n")); - return true; } -// autentica o técnico que irá realizar o suporte remoto bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char te_node_address_cli[], - char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID) + char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[], + const vncClientId vncCID, const char peerName[]) { string post = getPostComum(); @@ -110,7 +120,7 @@ bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char CACIC_Con::sendHtppPost(m_servidorWeb, auth_client_script, post, resposta, TAMANHO_RESPOSTA); if (!verificaAuthTecnico(resposta, te_node_address_cli, te_documento_referencial, - te_motivo_conexao, te_so_cli, vncCID)) + te_motivo_conexao, te_so_cli, vncCID, peerName)) { return false; } @@ -118,35 +128,33 @@ bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char return true; } -// Verifica o status da chave passada ao agente. bool CACIC_Auth::verificaAuthChave(char resposta[], vector &listaDominios) { try { if (!verificaStatus(resposta)) throw SRCException("Falha na verificação da chave!"); - // pega o conteudo da tag de resposta .. string dominios; dominios = CACIC_Utils::leTag(resposta, "SERVIDORES_AUTENTICACAO"); string dominios_dec; dominios_dec = CACIC_Crypt::decodifica(dominios.c_str()); - char* id_dominio = strtok((char*)dominios_dec.data(), ";"); + char* dominios_dec_str = (char*)malloc(sizeof(char)*(dominios_dec.length() + 1)); + string::traits_type::copy(dominios_dec_str, dominios_dec.c_str(), dominios_dec.length() + 1); + char* id_dominio = strtok(dominios_dec_str, ";"); char* nm_dominio = strtok(NULL, ";"); - // pega a lista de dominios e decodifica, adicionando-a no vetor - while (id_dominio != NULL && nm_dominio != NULL) + while (id_dominio != NULL) { - Dominio novoDominio; - novoDominio.id = id_dominio; - novoDominio.nome = nm_dominio; + listaDominios.push_back(Dominio(id_dominio, nm_dominio)); - listaDominios.push_back(novoDominio); - - id_dominio = strtok (NULL, ";"); - nm_dominio = strtok (NULL, ";"); + id_dominio = strtok(NULL, ";"); + nm_dominio = strtok(NULL, ";"); } + delete dominios_dec_str; + delete id_dominio; + delete nm_dominio; if (listaDominios.empty()) throw SRCException("A lista de domínios está vazia."); @@ -160,38 +168,24 @@ bool CACIC_Auth::verificaAuthChave(char resposta[], vector &listaDomini } } -// verifica a resposta referente a antenticacao do host bool CACIC_Auth::verificaAuthDominio(char resposta[]) { try { - if (!verificaStatus(resposta)) throw SRCException("Falha na autenticação do usuário."); + if (!verificaStatus(resposta)) return false;//throw SRCException("Falha na autenticação do usuário."); - // pega o conteudo da tag de resposta .. string nm_completo; nm_completo = CACIC_Utils::leTag(resposta, "NM_COMPLETO"); - // decodifica e compara a resposta string nome_dec; nome_dec.append(CACIC_Crypt::decodifica(nm_completo.c_str())); - // pega o conteudo da tag de resposta .. string id_sessao; id_sessao = CACIC_Utils::leTag(resposta, "ID_SESSAO"); - string nu_timeout_srcacic; - nu_timeout_srcacic = CACIC_Utils::leTag(resposta, "NU_TIMEOUT_SRCACIC"); - - string nu_timeout_srcacic_dec; - nu_timeout_srcacic_dec = CACIC_Crypt::decodifica(nu_timeout_srcacic.c_str()); - m_usuario = nome_dec; m_idSessao = id_sessao; - /*stringstream timeoutBuffer(nu_timeout_srcacic_dec); - timeoutBuffer >> this->nuTimeout; - m_server->SetAutoIdleDisconnectTimeout(this->nuTimeout);*/ - return true; } catch(SRCException ex) @@ -202,16 +196,14 @@ bool CACIC_Auth::verificaAuthDominio(char resposta[]) } } -// verifica a resposta referente a antenticacao do técnico bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[], - char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID) + char te_motivo_conexao[], char te_so_cli[], const vncClientId vncCID, const char peerName[]) { try { - // pega o conteudo da tag de resposta .. string status; status = CACIC_Utils::leTag(resposta, "STATUS"); - // decodifica e compara a resposta + string status_dec; status_dec = CACIC_Crypt::decodifica(status.c_str()); @@ -219,19 +211,18 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] // para poder pegar a resposta de erro que vem na tag STATUS if (status_dec.compare("OK") != 0) throw SRCException(status_dec.c_str()); - // pega o conteudo da tag de resposta .. string id_usuario_cli; id_usuario_cli = CACIC_Utils::leTag(resposta, "ID_USUARIO_CLI"); - // pega o conteudo da tag de resposta .. string id_conexao; id_conexao = CACIC_Utils::leTag(resposta, "ID_CONEXAO"); - // pega o conteudo da tag de resposta .. string nm_usuario_completo; nm_usuario_completo = CACIC_Utils::leTag(resposta, "NM_USUARIO_COMPLETO"); - // decodifica e compara a resposta + string dt_hr_inicio_sessao; + dt_hr_inicio_sessao = CACIC_Utils::leTag(resposta, "DT_HR_INICIO_SESSAO"); + string nm_usuario_completo_dec; nm_usuario_completo_dec.append(CACIC_Crypt::decodifica(nm_usuario_completo.c_str())); @@ -241,11 +232,6 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] string te_motivo_conexao_dec; te_motivo_conexao_dec.append(CACIC_Crypt::decodifica(te_motivo_conexao)); - // pega o conteudo da tag de resposta .. - string dt_hr_inicio_sessao; - dt_hr_inicio_sessao = CACIC_Utils::leTag(resposta, "DT_HR_INICIO_SESSAO"); - - // decodifica e compara a resposta string dt_hr_inicio_sessao_dec; dt_hr_inicio_sessao_dec.append(CACIC_Crypt::decodifica(dt_hr_inicio_sessao.c_str())); @@ -260,6 +246,7 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] novoCliente.te_motivo_conexao = te_motivo_conexao_dec; novoCliente.te_so_visitante = te_so_cli; novoCliente.dt_hr_inicio_sessao = dt_hr_inicio_sessao_dec; + novoCliente.peerName = peerName; // adiciona o novo usuario a lista de usuarios visitantes m_listaClientes.push_back(novoCliente); @@ -268,6 +255,8 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] m_infoDlg.m_nomeVisitante = m_novoCliente.nm_usuario_completo; m_infoDlg.m_dataInicio = m_novoCliente.dt_hr_inicio_sessao; + m_infoDlg.m_ip = m_novoCliente.peerName; + m_infoDlg.m_documentoReferencia = m_novoCliente.te_documento_referencial; return true; } @@ -282,19 +271,19 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[] void CACIC_Auth::atualizaSessao() { - // Verifica se a palavra chave foi trocada enquanto em execução. + // Verifica, antes de atualizar a sessão, se a palavra + // chave foi trocada enquanto o servidor estava aberto. FILE *pFile; - string filePath = m_tempPath + COOKIE_FILENAME; + string filePath = m_tempPath + CACIC_Auth::COOKIE_FILENAME; pFile = fopen(filePath.data(), "r"); char newKey[256]; - // testa se o arquivo foi aberto com sucesso if(pFile != NULL) { if (fgets(newKey, 256, pFile)) m_palavraChave = newKey; - fclose(pFile); // libera o ponteiro para o arquivo + fclose(pFile); remove(filePath.data()); } @@ -316,25 +305,25 @@ void CACIC_Auth::atualizaSessao() } else { - string listaidusu = "&id_usuario_visitante="; - string listaidcon = "&id_conexao="; - string listanode = "&te_node_address_visitante="; - string listaidso = "&te_so_visitante="; + string listaIDUsuario = "&id_usuario_visitante="; + string listaIDConexao = "&id_conexao="; + string listaNodeAddress = "&te_node_address_visitante="; + string listaID_SO = "&te_so_visitante="; for (int i = 0; i < m_listaClientes.size(); i++) { - listaidusu += m_listaClientes[i].id_usuario_visitante; - if (i < m_listaClientes.size() - 1) listaidusu += ""; - listaidcon += m_listaClientes[i].id_conexao; - if (i < m_listaClientes.size() - 1) listaidcon += ""; - listanode += m_listaClientes[i].te_node_address_visitante; - if (i < m_listaClientes.size() - 1) listanode += ""; - listaidso += m_listaClientes[i].te_so_visitante; - if (i < m_listaClientes.size() - 1) listaidso += ""; + listaIDUsuario += m_listaClientes[i].id_usuario_visitante; + if (i < m_listaClientes.size() - 1) listaIDUsuario += ""; + listaIDConexao += m_listaClientes[i].id_conexao; + if (i < m_listaClientes.size() - 1) listaIDConexao += ""; + listaNodeAddress += m_listaClientes[i].te_node_address_visitante; + if (i < m_listaClientes.size() - 1) listaNodeAddress += ""; + listaID_SO += m_listaClientes[i].te_so_visitante; + if (i < m_listaClientes.size() - 1) listaID_SO += ""; } - post += listaidusu; - post += listaidcon; - post += listanode; - post += listaidso; + post += listaIDUsuario; + post += listaIDConexao; + post += listaNodeAddress; + post += listaID_SO; } string session_script = m_scriptsPath.c_str(); @@ -346,8 +335,23 @@ void CACIC_Auth::atualizaSessao() if (!verificaStatus(resposta)) { MessageBox(NULL, "Ocorreu um erro ao atualizar a sessão! O programa será fechado.", "Erro!", MB_OK | MB_ICONERROR); - ExitProcess(0); - return; + finalizaServidor(); + } + + // verifica se o servidor está sem receber conexão por + // mais tempo que o limite, caso esteja, o processo é finalizado. + if (m_listaClientes.empty()) + { + m_idleTime--; + if (m_idleTime <= 0) + { + vnclog.Print(LL_SRLOG, "Fechando o servidor por atingir o tempo máximo de idle."); + finalizaServidor(); + } + } + else + { + m_idleTime = TEMPO_IDLE; } } @@ -373,7 +377,6 @@ void CACIC_Auth::sendChatText(char te_mensagem[], char cs_origem[]) CACIC_Con::sendHtppPost(m_servidorWeb, session_script, post, resposta, TAMANHO_RESPOSTA); } -// remove o cliente com id vncid da lista de usuarios visitantes void CACIC_Auth::removeCliente(vncClientId vncCID) { // Atualiza a sessão antes de remover o cliente. @@ -394,16 +397,6 @@ void CACIC_Auth::removeCliente(vncClientId vncCID) m_novoCliente = novoCliente; } -CACIC_Auth* CACIC_Auth::getInstance() -{ - if (!m_instance) - { - m_instance = new CACIC_Auth(); - } - return m_instance; -} - -// pega os parametros comuns a todos os posts enviados string CACIC_Auth::getPostComum() { string post = ""; @@ -417,24 +410,31 @@ string CACIC_Auth::getPostComum() return post; } -// verifica se a resposta enviada na tag status esta ok bool CACIC_Auth::verificaStatus(char resposta[]) { - // pega o conteudo da tag de resposta .. string status; status = CACIC_Utils::leTag(resposta, "STATUS"); - // decodifica e compara a resposta string status_dec; status_dec = CACIC_Crypt::decodifica(status.c_str()); - if (status_dec.compare("OK") != 0) - { - string errorMsg = "Falha na autenticação do usuário no domínio.\n"; - errorMsg += status_dec; - vnclog.Print(LL_SRLOG, VNCLOG(errorMsg.c_str())); - return false; - } + if (status_dec.compare("OK") != 0) return false; return true; } + +void CACIC_Auth::finalizaServidor() +{ + static HANDLE hShutdownEvent; + hShutdownEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\SessionEventUltra"); + SetEvent(hShutdownEvent); + CloseHandle(hShutdownEvent); + HWND hservwnd; + // UVNC Default: WinVNC Tray Icon + hservwnd = FindWindow("srCACICsrv Tray Icon", NULL); + if (hservwnd != NULL) + { + PostMessage(hservwnd, WM_COMMAND, 40002, 0); + PostMessage(hservwnd, WM_CLOSE, 0, 0); + } +} diff --git a/srcacic/WinVNC/WinVNC/CACIC_Auth.h b/srcacic/WinVNC/WinVNC/CACIC_Auth.h index d60c1fd..a2c5b8f 100644 --- a/srcacic/WinVNC/WinVNC/CACIC_Auth.h +++ b/srcacic/WinVNC/WinVNC/CACIC_Auth.h @@ -1,3 +1,9 @@ +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe singleton responsável pela autenticação no gerente web. + */ + #ifndef _CACIC_AUTH_ #define _CACIC_AUTH_ @@ -21,12 +27,12 @@ using namespace std; #include "vncClient.h" -#define AGUARDE_FILENAME "aguarde_srCACIC.txt"; -#define COOKIE_FILENAME "cacic_ck.txt"; - -// struct referente a um usuario remoto +/** + * Struct referente a um usuário cliente. + */ struct ClienteSRC { vncClientId vncCID; + string peerName; string id_usuario_visitante; string id_usuario_cli; string id_conexao; @@ -44,15 +50,37 @@ class CACIC_Auth { public: - // lista de usuarios remotos + /** + * Nome do arquivo temporário de trava. + * Utilizado para que o cacic impeça a execução de coletas com o suporte ativo. + */ + static const string AGUARDE_FILENAME; + + /** + * Tempo máximo que o servidor pode ficar aberto sem conexões. (mins) + */ + static const UINT TEMPO_IDLE; + + /** Lista de usuários cliente. */ vector m_listaClientes; + /** Último usuário cliente conectado. */ ClienteSRC m_novoCliente; + /** + * Janela com informações sobre o cliente conectado. + * Exibida enquanto há suporte em andamento. + */ supInfoDlg m_infoDlg; - static CACIC_Auth* getInstance(); + /** Singleton. */ + static CACIC_Auth* getInstance() + { + if (!m_instance) m_instance = new CACIC_Auth(); + return m_instance; + } + /* MÉTODOS DE ENCAPSULAMENTO --> */ void setServidorWeb(string newServidorWeb) {m_servidorWeb = newServidorWeb;} string getServidorWeb() {return m_servidorWeb;} void setScriptsPath(string newScriptsPath) {m_scriptsPath = newScriptsPath;} @@ -62,48 +90,154 @@ public: void setPalavraChave(char* newPalavraChave) {m_palavraChave = newPalavraChave;} void setPorta(UINT newPorta) {m_porta = newPorta;} UINT getPorta() {return m_porta;} - + void setTimeout(UINT newNuTimeout) {m_nuTimeout = newNuTimeout;} + UINT getTimeout() {return m_nuTimeout;} + /* <-- MÉTODOS DE ENCAPSULAMENTO */ + + /** + * Retorna os valores padrão de post, usados na + * comunicação com o gerente web. + * te_so, te_node_address, te_palavra_chave + * @return String com o post padrão formatado. + */ string getPostComum(); + /** + * Remove o usuário cliente da lista. + * @param vncCID ID do cliente VNC, utilizado para + * diferenciar os clientes, caso haja mais de um. + */ void removeCliente(vncClientId vncCID); + /** + * Faz a comunicação com o gerente web para validar a palavra chave + * e criar uma nova sessão para o suporte remoto. + * @return bool Status da autenticação. + */ bool autentica(); + + /** + * Se comunica com o gerente web para validar o usuário cliente. + * Se o usuário for válido, ele cria uma nova sessão de conexão. + * @param nm_usuario_cli String codificada contendo o nome de usuário. + * @param te_senha_cli String codificada contendo a senha do usuário. + * @param te_node_address_cli String codificada contendo o MAC address do cliente. + * @param te_documento_referencial String codificada contendo o Documento de Referência do suporte remoto. + * @param te_motivo_conexao String codificada contendo o motivo do suporte remoto. + * @param te_so_cli String codificada contendo a identificação do SO do cliente. + * @param vncCID ID do cliente VNC. + * @param peerName String contendo o endereço ip do cliente. + */ bool validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char te_node_address_cli[], - char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID); + char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[], + const vncClientId vncCID, const char peerName[]); + + /** + * Se comunica com o gerente web para atualizar a sessão de suporte. + */ void atualizaSessao(); + + /** + * Envia o log do chat para o gerente web durante o suporte remoto. + * @param te_mensagem Mensagem recebida/enviada. + * @param cs_origem Origem da mensagem, cliente/servidor. + */ void sendChatText(char te_mensagem[], char cs_origem[]); + /** Fecha o servidor. */ + void finalizaServidor(); + private: + /** Singleton. */ static CACIC_Auth* m_instance; - CACIC_Auth(); - virtual ~CACIC_Auth(); - - string m_servidorWeb; // endereco do servidor web - string m_scriptsPath; // caminho dos scripts - string m_tempPath; // caminho completo para a pasta temp do cacic + CACIC_Auth() { + m_idleTime = TEMPO_IDLE; + } - string m_usuario; // usuario host do suporte - string m_idSessao; // id da sessao iniciada pelo usuario host - UINT m_nuTimeout; // valor do idle timeout + virtual ~CACIC_Auth() {} - string m_soVersion; // versao do sistema operacional do host - string m_nodeAdress; // mac address do host - string m_palavraChave; // palavra chave do cacic no momento da ativação do suporte remoto + /** Endereço do servidor web. */ + string m_servidorWeb; + /** Caminho dos scripts no servidor web. */ + string m_scriptsPath; + /** Caminho estático para a pasta temp do cacic. */ + string m_tempPath; - UINT m_porta; + /** Usuário host do suporte. */ + string m_usuario; + /** ID da sessão iniciada pelo usuário host. */ + string m_idSessao; - static const string GET_CONFIG_SCRIPT; // caminho para o script de configurações - static const string SET_SESSION_SCRIPT; // caminho para o script de sessões - static const string AUTH_CLIENT_SCRIPT; // caminho para o script de autenticação - static const unsigned int TAMANHO_RESPOSTA; // tamanho maximo aceito pela resposta xml + /** Versão do sistema operacional do host. */ + string m_soVersion; + /** MAC Address do host. */ + string m_nodeAdress; + /** Palavra chave. Utilizada na comunicação com o gerente web. */ + string m_palavraChave; + /** Porta de escuta. */ + UINT m_porta; + /** Tempo limite que o srcacic pode ficar ocioso antes de fechar-se. */ + UINT m_nuTimeout; + /** Tempo que o servidor está ocioso */ + UINT m_idleTime; + + /** Nome do script de configurações do gerente web. */ + static const string GET_CONFIG_SCRIPT; + /** Nome do script de sessões do gerente web. */ + static const string SET_SESSION_SCRIPT; + /** Nome do script de autenticação do gerente web. */ + static const string AUTH_CLIENT_SCRIPT; + /** Tamanho padrão da resposta recebida pela requisição http. */ + static const unsigned int TAMANHO_RESPOSTA; + /** Nome do arquivo temporário de atualização da palavra chave. */ + static const string COOKIE_FILENAME; + + /** + * Apresenta o diálogo de login do usuário host e + * valida os dados no gerente web. + * @param listaDominios Lista de domínios obtida na autenticação. + */ + bool autenticaUsuario(vector &listaDominios); + + /** + * Verifica a autenticação da chave no gerente web. + * @param resposta Resposta XML gerada na comunicação com o gerente web. + * @param listaDominios Lista de domínios obtida na autenticação. + */ bool verificaAuthChave(char resposta[], vector &listaDominios); + + /** + * Verifica se a resposta da autenticação do usuário host foi positiva. + * @param resposta Resposta XML gerada na comunicação com o gerente web. + */ bool verificaAuthDominio(char resposta[]); - bool verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[], - char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID); + /** + * Verifica se a resposta da autenticação do técnico foi positiva, + * armazena o novo cliente na lista e exibe a tela de informações do suporte. + * @param nm_usuario_cli String codificada contendo o nome de usuário. + * @param te_senha_cli String codificada contendo a senha do usuário. + * @param te_node_address_cli String codificada contendo o MAC address do cliente. + * @param te_documento_referencial String codificada contendo o Documento de Referência do suporte remoto. + * @param te_motivo_conexao String codificada contendo o motivo do suporte remoto. + * @param te_so_cli String codificada contendo a identificação do SO do cliente. + * @param vncCID ID do cliente VNC. + * @param peerName String contendo o endereço ip do cliente. + */ + bool verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[], + char te_motivo_conexao[], char te_so_cli[], + const vncClientId vncCID, const char peerName[]); + + /** + * Verifica o valor de retorno STATUS que é enviado pelo gerente web + * após cada comunicação para confirmar a operação. + * Valores retornados:
+ * OK: A operação teve êxito.
ERRO: A operação falhou. + * @param resposta Resposta XML gerada na comunicação com o gerente web. + */ bool verificaStatus(char resposta[]); }; diff --git a/srcacic/WinVNC/WinVNC/CACIC_Con.cpp b/srcacic/WinVNC/WinVNC/CACIC_Con.cpp index 057890b..61bbe64 100644 --- a/srcacic/WinVNC/WinVNC/CACIC_Con.cpp +++ b/srcacic/WinVNC/WinVNC/CACIC_Con.cpp @@ -1,17 +1,15 @@ -// Declaração da classe CACIC_Con +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe para envio de requisições html ao gerente web. + * API das funções wininet: + * http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx + */ #include "CACIC_Con.h" -CACIC_Con::CACIC_Con() {} +const TCHAR CACIC_Con::DEFAULT_HEADER[] = "Content-Type: application/x-www-form-urlencoded"; -CACIC_Con::~CACIC_Con() -{ - if(m_hSession != NULL) InternetCloseHandle(m_hSession); - if(m_hConnect != NULL) InternetCloseHandle(m_hConnect); - if(m_hRequest != NULL) InternetCloseHandle(m_hRequest); -} - -// conecta ao gerente web void CACIC_Con::conecta() { m_hSession = InternetOpen("CACIC_Con", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); @@ -32,7 +30,6 @@ void CACIC_Con::conecta() } } -// envia os parametros ao script void CACIC_Con::sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[]) { m_hRequest = HttpOpenRequest(m_hConnect, metodo, script, NULL, NULL, NULL, 0, 1); @@ -43,10 +40,11 @@ void CACIC_Con::sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[]) return; } - HttpSendRequest(m_hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata)); + HttpSendRequest(m_hRequest, CACIC_Con::DEFAULT_HEADER, + strlen(CACIC_Con::DEFAULT_HEADER), + frmdata, strlen(frmdata)); } -// pega a resposta da ultima solicitacao e armazena no buffer bool CACIC_Con::getResponse(char buff[], unsigned long sz) { if(!m_hRequest) diff --git a/srcacic/WinVNC/WinVNC/CACIC_Con.h b/srcacic/WinVNC/WinVNC/CACIC_Con.h index f716e03..74b033c 100644 --- a/srcacic/WinVNC/WinVNC/CACIC_Con.h +++ b/srcacic/WinVNC/WinVNC/CACIC_Con.h @@ -1,6 +1,10 @@ -// Classe para conexao do vnc com o gerente web do Cacic. -// API das funcoes da classe wininet.h: -// http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe para envio de requisições html ao gerente web. + * API das funções wininet: + * http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx + */ #ifndef _CACIC_CON_ #define _CACIC_CON_ @@ -17,32 +21,82 @@ using namespace std; #define HTTP_POST "POST" #define HTTP_GET "GET" -static const TCHAR hdrs[] = "Content-Type: application/x-www-form-urlencoded"; - class CACIC_Con { private: - HINTERNET m_hSession; // handle da sessao - HINTERNET m_hConnect; // handle da conexao - HINTERNET m_hRequest; // handle da resposta da requisicao + /** Header padrão das requisições. */ + static const TCHAR DEFAULT_HEADER[]; + + /** Handler da sessão. */ + HINTERNET m_hSession; + /** Handler da conexao. */ + HINTERNET m_hConnect; + /** Handler da resposta da requisição. */ + HINTERNET m_hRequest; + /** Número de bytes lidos na última requisição. */ unsigned long m_lBytesRead; + /** Nome do servidor que sofrerá a ação. */ LPCSTR m_server; public: - CACIC_Con(); - virtual ~CACIC_Con(); - + CACIC_Con() {} + + /** + * Destrutor da classe. + * Libera os handlers que estiverem abertos. + */ + virtual ~CACIC_Con() + { + if(m_hSession != NULL) InternetCloseHandle(m_hSession); + if(m_hConnect != NULL) InternetCloseHandle(m_hConnect); + if(m_hRequest != NULL) InternetCloseHandle(m_hRequest); + } + + /** + * Altera o servidor. + * @param server String com o nome do servidor. + */ void setServer(LPCSTR server){m_server = server;} + + /** + * Retorna o nome do servidor. + * @return String com o nome do servidor. + */ LPCSTR getServer(){return m_server;} - void conecta(); // conecta ao servidor - // envia uma requisicao ao script atraves de POST/GET + /** + * Efetua a conexão com o servidor. + */ + void conecta(); + + /** + * Envia uma requisição ao servidor. + * @param metodo String com o tipo da requisição. (GET/POST) + * @param script String com o nome do script que será acessado. + * @param frmdata String com os dados que irão ser passados como parâmetro ao script. + */ void sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[]); - bool getResponse(char buff[], unsigned long sz); // recebe a resposta da execucao do script + /** + * Retorna a resposta gerada pelo servidor que recebeu a requisição. + * @param buff Buffer para armazenar o resultado da requisição. + * @param sz Tamanho do buffer. + * @return bool Boleano com o estado da requisição. + */ + bool getResponse(char buff[], unsigned long sz); + + /** + * Método estático que faz uma requisição ao servidor passado e + * já retorna a resposta através do buffer "resposta". + * @param servidor String com o nome do servidor. + * @param script String com o nome do script. + * @param post String com os parãmetros a serem passados ao script. + * @param resposta Buffer de resposta da requisição. + * @param sz Tamanho da resposta. + */ static void sendHtppPost(const string &servidor, const string &script, string &post, char resposta[], unsigned long sz); diff --git a/srcacic/WinVNC/WinVNC/CACIC_Crypt.cpp b/srcacic/WinVNC/WinVNC/CACIC_Crypt.cpp index af3af63..d95310b 100644 --- a/srcacic/WinVNC/WinVNC/CACIC_Crypt.cpp +++ b/srcacic/WinVNC/WinVNC/CACIC_Crypt.cpp @@ -1,5 +1,7 @@ -/* - * Classe para criptografia de dados +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe para criptografia de dados. */ #include "CACIC_Crypt.h" @@ -9,7 +11,6 @@ const unsigned int CACIC_Crypt::SRCACIC_KEY_SIZE = 16; const char CACIC_Crypt::SRCACIC_KEY[17] = "CacicBrasil"; const char CACIC_Crypt::SRCACIC_IV[17] = "abcdefghijklmnop"; -// Tira do base64 e desencripta. string CACIC_Crypt::decodifica(const char* entrada) { string decode_base64; @@ -34,7 +35,6 @@ string CACIC_Crypt::decodifica(const char* entrada) return out; } -// Encripta e coloca no base64. string CACIC_Crypt::codifica(const char* entrada) { unsigned int entrada_len = strlen(entrada); diff --git a/srcacic/WinVNC/WinVNC/CACIC_Crypt.h b/srcacic/WinVNC/WinVNC/CACIC_Crypt.h index ec8c2ec..c8f4cc7 100644 --- a/srcacic/WinVNC/WinVNC/CACIC_Crypt.h +++ b/srcacic/WinVNC/WinVNC/CACIC_Crypt.h @@ -1,5 +1,7 @@ -/* - * Classe para criptografia de dados +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe para criptografia de dados. */ #ifndef _CACIC_CRYPT_ @@ -16,17 +18,37 @@ class CACIC_Crypt { public: + /** + * Remove da String de entrada os caracteres colocados pela URLEncode, + * tira do Base64 e depois decodifica usando o Rijndael. + * @param entrada String a ser decodificada. + * @return string String decodificada. + */ static string decodifica(const char* entrada); + + /** + * Codifica a String passada com o algoritmo Rijndael e coloca no Base64. + * @param entrada String a ser codificada. + * @return string String codificada. + */ static string codifica(const char* entrada); private: - static const unsigned int SRCACIC_BLOCK_SIZE; // tamanho padrao do bloco - static const unsigned int SRCACIC_KEY_SIZE; // tamanho padrao da chave - static const char SRCACIC_KEY[17]; // chave de en/dec - static const char SRCACIC_IV[17]; // vetor de inicializacao - - virtual void ccrypt() = 0; // Truque para tornar a classe abstrata. + /** Tamanho padrão do bloco. */ + static const unsigned int SRCACIC_BLOCK_SIZE; + /** Tamanho padrão da chave. */ + static const unsigned int SRCACIC_KEY_SIZE; + /** Chave de codificação. */ + static const char SRCACIC_KEY[17]; + /** Vetor de inicialização. */ + static const char SRCACIC_IV[17]; + + /** + * Este método virtual puro é um truque para que a classe + * se torne abstrata e não possa ser instanciada. + */ + virtual void ccrypt() = 0; }; #endif diff --git a/srcacic/WinVNC/WinVNC/CACIC_Exception.h b/srcacic/WinVNC/WinVNC/CACIC_Exception.h index d63bc34..04f37bb 100644 --- a/srcacic/WinVNC/WinVNC/CACIC_Exception.h +++ b/srcacic/WinVNC/WinVNC/CACIC_Exception.h @@ -1,19 +1,39 @@ +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe para lidar com as mensagens de erro. + */ + #ifndef _CACIC_EXCEPTION_ #define _CACIC_EXCEPTION_ #include -// exceção padrao do srCACIC class SRCException { + private: + + /** Mensagem de erro. */ string m_err; + public: + + /** + * Construtor da classe. + * @param err String com a mensagem de erro. + */ SRCException(string err) { m_err = err; } + + /** + * Retorna a mensagem de erro armazenada. + * @return string String com a mensagem de erro. + */ string getMessage() { return m_err; } + }; -#endif \ No newline at end of file +#endif diff --git a/srcacic/WinVNC/WinVNC/CACIC_Utils.cpp b/srcacic/WinVNC/WinVNC/CACIC_Utils.cpp index a2b9f34..ed5c647 100644 --- a/srcacic/WinVNC/WinVNC/CACIC_Utils.cpp +++ b/srcacic/WinVNC/WinVNC/CACIC_Utils.cpp @@ -1,7 +1,13 @@ +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe com alguns métodos utilitários. + */ + #include "CACIC_Utils.h" -// método bruto para ler -// uma tag do arquivo xml de resposta +const string CACIC_Utils::F_SANS_SERIF = "Microsoft Sans Serif"; + string CACIC_Utils::leTag(char xml[], char tagname[]) { char* tag; @@ -28,8 +34,6 @@ string CACIC_Utils::leTag(char xml[], char tagname[]) return content; } -// troca os caracteres da string -// origem ori_str new_str void CACIC_Utils::replaceAll(string &str, string key, string newkey) { int found = str.find(key, 0); @@ -95,7 +99,6 @@ void CACIC_Utils::urlDecode(string &encoded) encoded.swap(buff.str()); } -// substitui alguns caracteres especiais antes da encriptacao void CACIC_Utils::simpleUrlEncode(string &decoded) { replaceAll(decoded, "+", ""); @@ -145,7 +148,7 @@ void CACIC_Utils::changeFont(HWND dlgHandle, int dlgItem, int fontSize, string f LOGFONT lfFont; memset(&lfFont, 0x00, sizeof(lfFont)); - memcpy(lfFont.lfFaceName, fontName.data(), 16); + memcpy(lfFont.lfFaceName, fontName.c_str(), fontName.size()); lfFont.lfHeight = fontSize; lfFont.lfWeight = (fontIsBold == true) ? FW_BOLD : FW_NORMAL; diff --git a/srcacic/WinVNC/WinVNC/CACIC_Utils.h b/srcacic/WinVNC/WinVNC/CACIC_Utils.h index aa82e38..26050ab 100644 --- a/srcacic/WinVNC/WinVNC/CACIC_Utils.h +++ b/srcacic/WinVNC/WinVNC/CACIC_Utils.h @@ -1,3 +1,9 @@ +/** + * Copyright (C) 2009 DATAPREV-ES + * @author Vinicius Avellar Moreira + * Classe com alguns métodos utilitários. + */ + #ifndef _CACIC_UTILS_ #define _CACIC_UTILS_ @@ -12,26 +18,85 @@ class CACIC_Utils { public: + /** Fonte padrão usado nos diálogos. */ + static const string F_SANS_SERIF; + + /** + * Método bruto para ler uma tag específica de um arquivo xml. + * @param xml String no formato de arquivo xml. + * @param tagname String com o nome da tag a ser pesquisada. + * @return String com o conteúdo da tag pesquisada. + * @trows CACIC_Exception caso a tag não seja encontrada. + */ static string leTag(char xml[], char tagname[]); + /** + * Troca caracteres específicos de uma string. + * @param str String a ser modificada. + * @param key String com o caractere ou conjunto de caracteres que serão substituídos. + * @param newKey String com o caractere ou conjunto de caracteres que irão substituir. + */ static void replaceAll(string &str, string key, string newkey); + /** + * Codifica a string, removendo os caracteres especiais por %código dos mesmos. + * @param decoded String que será codificada. + */ static void urlEncode(string &decoded); + + /** + * Decodifica a string, retornando os códigos dos caracteres pelos próprios caracteres. + * @param encoded String que será decodificada. + */ static void urlDecode(string &encoded); + /** + * Mesma função do urlEncode, porém os caracteres serão substituídos + * por tags específicas, e não pelo código. + * @param entrada String que será codificada. + */ static void simpleUrlEncode(string &entrada); + + /** + * Faz o inverso do simpleUrlEncode, trocando as tags específicas pelos + * respectivos caracteres. + * @param entrada String que será codificada. + */ static void simpleUrlDecode(string &entrada); + /** + * Transforma o byte em codigo ascii, retornando o char correspondente. + * @param first Primeiro hexa do caractere. + * @param second Segundo hexa do caractere. + * @return Char correspondente ao código ascci encontrado. + */ static char hexToAscii(char first, char second); + + /** + * Retira os espaços em branco do começo e fim da string. + * @param str String a ser modificada. + */ static void trim(string &str); + /** + * Método para alterar a fonte de um determinado elemento de um diálogo. + * @param dlgHandle Handler do diálogo. + * @param dlgItem Item do diálogo que terá a fonte trocada. + * @param fontSize Tamanho da fonte. + * @param fontName Nome da fonte. + * @param fontIsBold Define o peso da fonte: true = bold, false = normal. + */ static void changeFont(HWND dlgHandle, int dlgItem, int fontSize, string fontName, bool fontIsBold = false); private: - virtual void cutils() = 0; // Truque para tornar a classe abstrata. + /** + * Este método virtual puro é um truque para que a classe + * se torne abstrata e não possa ser instanciada. + */ + virtual void cutils() = 0; }; diff --git a/srcacic/WinVNC/WinVNC/resource.h b/srcacic/WinVNC/WinVNC/resource.h index 7c74468..437dbd4 100644 --- a/srcacic/WinVNC/WinVNC/resource.h +++ b/srcacic/WinVNC/WinVNC/resource.h @@ -144,10 +144,11 @@ #define IDC_ATENCAO_STATIC 1147 #define IDC_ATENCAO 1147 #define IDC_SRCACIC_IMG 1148 -#define IDC_EDIT3 1150 #define IDC_INFO_NOME 1152 #define IDC_INFO_IP 1153 #define IDC_INFO_INICIO 1154 +#define IDC_STATIC_INFO_REF 1155 +#define IDC_INFO_REFERENCIA 1156 #define IDC_FINGER 9000 #define IDC_GAMMAGRAY 9001 #define IDC_STATIC_SPLIT 9002 @@ -229,7 +230,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 164 #define _APS_NEXT_COMMAND_VALUE 40019 -#define _APS_NEXT_CONTROL_VALUE 1155 +#define _APS_NEXT_CONTROL_VALUE 1157 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/srcacic/WinVNC/WinVNC/supInfoDlg.cpp b/srcacic/WinVNC/WinVNC/supInfoDlg.cpp index d457f72..aa2ba64 100644 --- a/srcacic/WinVNC/WinVNC/supInfoDlg.cpp +++ b/srcacic/WinVNC/WinVNC/supInfoDlg.cpp @@ -89,8 +89,9 @@ BOOL CALLBACK supInfoDlg::supInfoDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP SetDlgItemText(hwnd, IDC_INFO_NOME, (LPSTR) _this->m_nomeVisitante.data()); SetDlgItemText(hwnd, IDC_INFO_IP, (LPSTR) _this->m_ip.data()); SetDlgItemText(hwnd, IDC_INFO_INICIO, (LPSTR) _this->m_dataInicio.data()); + SetDlgItemText(hwnd, IDC_INFO_REFERENCIA, (LPSTR) _this->m_documentoReferencia.data()); - changeFont(hwnd, IDC_ATENCAO_STATIC); + CACIC_Utils::changeFont(hwnd, IDC_ATENCAO_STATIC, 16, CACIC_Utils::F_SANS_SERIF, true); /*WINDOWPLACEMENT wndpl; GetWindowPlacement(hwnd, &wndpl); @@ -149,24 +150,3 @@ BOOL CALLBACK supInfoDlg::supInfoDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP return FALSE; } - -void supInfoDlg::changeFont(HWND hwndDlg, int dlgItem) -{ - HFONT hFont ; - LOGFONT lfFont; - - memset(&lfFont, 0x00, sizeof(lfFont)); - memcpy(lfFont.lfFaceName, TEXT("Microsoft Sans Serif"), 16); - - lfFont.lfHeight = 16; - lfFont.lfWeight = FW_BOLD; - lfFont.lfCharSet = ANSI_CHARSET; - lfFont.lfOutPrecision = OUT_DEFAULT_PRECIS; - lfFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; - lfFont.lfQuality = DEFAULT_QUALITY; - - // Create the font from the LOGFONT structure passed. - hFont = CreateFontIndirect (&lfFont); - - SendMessage( GetDlgItem(hwndDlg, dlgItem), WM_SETFONT, (int)hFont, MAKELONG( TRUE, 0 ) ); -} diff --git a/srcacic/WinVNC/WinVNC/supInfoDlg.h b/srcacic/WinVNC/WinVNC/supInfoDlg.h index 424d89b..27e8899 100644 --- a/srcacic/WinVNC/WinVNC/supInfoDlg.h +++ b/srcacic/WinVNC/WinVNC/supInfoDlg.h @@ -10,6 +10,8 @@ #include using namespace std; +#include "CACIC_Utils.h" + #pragma once class supInfoDlg { @@ -24,13 +26,13 @@ public: string m_nomeVisitante; string m_ip; string m_dataInicio; + string m_documentoReferencia; private: HANDLE m_hInfoDlgThread; static LRESULT CALLBACK supInfoDlg::showDialog(LPVOID lpParameter); static BOOL CALLBACK supInfoDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); - static void changeFont(HWND hwndDlg, int dlgItem); }; #endif diff --git a/srcacic/WinVNC/WinVNC/vncPassDlg.cpp b/srcacic/WinVNC/WinVNC/vncPassDlg.cpp index bf5576a..aadcefa 100644 --- a/srcacic/WinVNC/WinVNC/vncPassDlg.cpp +++ b/srcacic/WinVNC/WinVNC/vncPassDlg.cpp @@ -8,22 +8,19 @@ vncPassDlg::vncPassDlg(vector &listaDominios) { m_listaDominios = listaDominios; m_authStat = vncPassDlg::ESPERANDO_AUTENTICACAO; - memset(m_usuario, 0, 32); - memset(m_senha, 0, 32); - memset(m_dominio, 0, 16); + memset(m_usuario, 0, 33); + memset(m_senha, 0, 33); + memset(m_dominio, 0, 17); } vncPassDlg::~vncPassDlg() { - memset(m_usuario, 0, 32); - memset(m_senha, 0, 32); - memset(m_dominio, 0, 16); + memset(m_usuario, 0, 33); + memset(m_senha, 0, 33); + memset(m_dominio, 0, 17); } -BOOL vncPassDlg::DoDialog(EAuthCode authStat, string msgInfo) +BOOL vncPassDlg::DoDialog() { - m_authStat = authStat; - m_msgInfo = msgInfo; - BOOL retVal; if (m_authStat == vncPassDlg::SEM_AUTENTICACAO) { @@ -71,9 +68,9 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP vrsBkColor = CreateSolidBrush(RGB(238, 215, 184)); - changeFont(hwnd, IDC_ATT_MSG); + CACIC_Utils::changeFont(hwnd, IDC_ATT_MSG, 13, CACIC_Utils::F_SANS_SERIF, true); - SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8)); + //SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8)); // Limitando o tamanho dos campos para 32 caracteres. SendMessage(GetDlgItem(hwnd, IDC_USER_EDIT), EM_LIMITTEXT, WPARAM(32), 0); @@ -101,7 +98,7 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP SetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario); SetDlgItemText(hwnd, IDC_PASS_EDIT, _this->m_senha); - SetDlgItemText(hwnd, IDC_MSG, (LPSTR) "Falha na autenticação!"); + SetDlgItemText(hwnd, IDC_MSG, (LPSTR) "Falha na Autenticação!"); } else if (_this->m_authStat == vncPassDlg::AUTENTICADO) { @@ -142,15 +139,15 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP HWND hDominios = GetDlgItem(hwnd, IDC_DOMAIN_CB); _this->m_indiceDominio = SendMessage(hDominios, CB_GETCURSEL, 0, 0); - memset(_this->m_usuario, 0, 32); - memset(_this->m_senha, 0, 32); - memset(_this->m_dominio, 0, 16); + memset(_this->m_usuario, 0, 33); + memset(_this->m_senha, 0, 33); + memset(_this->m_dominio, 0, 17); GetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario, 32); GetDlgItemText(hwnd, IDC_PASS_EDIT, _this->m_senha, 32); strcpy(_this->m_dominio, _this->m_listaDominios.at(_this->m_indiceDominio).id.c_str()); - if (_this->m_usuario[0] == '\0' || _this->m_senha[0] == '\0' || _this->m_dominio[0] == '\0') + if (_this->m_usuario[0] == 0 || _this->m_senha[0] == 0 || _this->m_dominio[0] == 0) { MessageBox(hwnd, "Os campos devem ser preenchidos!", "Erro!", MB_ICONERROR | MB_OK); return FALSE; @@ -228,7 +225,7 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, vrsBkColor = CreateSolidBrush(RGB(238, 215, 184)); - changeFont(hwnd, IDC_ATT_MSG); + CACIC_Utils::changeFont(hwnd, IDC_ATT_MSG, 13, CACIC_Utils::F_SANS_SERIF, true); SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8)); @@ -246,11 +243,11 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, { int ulen = GetWindowTextLength(GetDlgItem(hwnd, IDC_USER_EDIT)); - memset(_this->m_usuario, '\0', 32); + memset(_this->m_usuario, 0, 33); GetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario, 32); - if (_this->m_usuario[0] == '\0') + if (_this->m_usuario[0] == 0) { MessageBox(hwnd, "O campo deve ser preenchido.", "Erro!", MB_ICONERROR | MB_OK); return FALSE; @@ -297,24 +294,3 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, return FALSE; } - -void vncPassDlg::changeFont(HWND hwndDlg, int dlgItem) -{ - HFONT hFont ; - LOGFONT lfFont; - - memset(&lfFont, 0x00, sizeof(lfFont)); - memcpy(lfFont.lfFaceName, TEXT("Microsoft Sans Serif"), 24); - - lfFont.lfHeight = 13; - lfFont.lfWeight = FW_BOLD; - lfFont.lfCharSet = ANSI_CHARSET; - lfFont.lfOutPrecision = OUT_DEFAULT_PRECIS; - lfFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; - lfFont.lfQuality = DEFAULT_QUALITY; - - // Create the font from the LOGFONT structure passed. - hFont = CreateFontIndirect (&lfFont); - - SendMessage( GetDlgItem(hwndDlg, dlgItem), WM_SETFONT, (int)hFont, MAKELONG( TRUE, 0 ) ); -} diff --git a/srcacic/WinVNC/WinVNC/vncPassDlg.h b/srcacic/WinVNC/WinVNC/vncPassDlg.h index b5cb84d..9ec865b 100644 --- a/srcacic/WinVNC/WinVNC/vncPassDlg.h +++ b/srcacic/WinVNC/WinVNC/vncPassDlg.h @@ -7,20 +7,29 @@ #include "stdhdrs.h" #include "resource.h" + #include "vncPasswd.h" + #include using namespace std; #include using namespace std; +#include "CACIC_Utils.h" + //extern int MAX_VNC_CLIENTS; #define ATT_MSG "ATENÇÃO: Esta autenticação, que precede a abertura de sessão para suporte remoto, atribui ao usuário a total responsabilidade por todo e qualquer tipo de dano lógico à estação que porventura seja causado por acesso externo indevido." #pragma once -// struct referente a um domínio +/** + * Struct referente a um domínio de autenticação. + */ struct Dominio { + Dominio(string p_id, string p_nome) : id(p_id), nome(p_nome) {} + Dominio() : id(""), nome("") {} + string id; string nome; }; @@ -36,22 +45,20 @@ public: vncPassDlg(vector &listaDominios); virtual ~vncPassDlg(); - char m_usuario[32]; // nome de usuário - char m_senha[32]; // senha de usuário - char m_dominio[16]; // id do domínio selecionado + char m_usuario[33]; // nome de usuário + char m_senha[33]; // senha de usuário + char m_dominio[17]; // id do domínio selecionado vector m_listaDominios; EAuthCode m_authStat; + string m_msgInfo; - BOOL DoDialog(EAuthCode authStat, string msgInfo); + BOOL DoDialog(); private: static BOOL CALLBACK vncAuthDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); static BOOL CALLBACK vncNoAuthDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); - static void changeFont(HWND hwndDlg, int dlgItem); - - string m_msgInfo; UINT m_indiceDominio; // índice selecionado no combobox de domínios }; diff --git a/srcacic/WinVNC/WinVNC/vncclient.cpp b/srcacic/WinVNC/WinVNC/vncclient.cpp index 22e368c..17f1ecf 100644 --- a/srcacic/WinVNC/WinVNC/vncclient.cpp +++ b/srcacic/WinVNC/WinVNC/vncclient.cpp @@ -643,7 +643,8 @@ vncClientThread::InitAuthenticate() // verifica o técnico que está querendo logar e o adiciona na lista. if (!CACIC_Auth::getInstance()->validaTecnico(nm_usuario_cli, te_senha_cli, te_node_address_cli, te_documento_referencial, - te_motivo_conexao, te_so_cli, m_client->GetClientId())) + te_motivo_conexao, te_so_cli, + m_client->GetClientId(), m_socket->GetPeerName())) { auth_ok = FALSE; } diff --git a/srcacic/WinVNC/WinVNC/winvnc.cpp b/srcacic/WinVNC/WinVNC/winvnc.cpp index 2729019..b5cb93c 100644 --- a/srcacic/WinVNC/WinVNC/winvnc.cpp +++ b/srcacic/WinVNC/WinVNC/winvnc.cpp @@ -269,8 +269,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, CACIC_Auth::getInstance()->setTempPath(cmdln[5]); // Cria o arquivo temporário de travamento do CACIC - string filePath = cmdln[5]; - filePath += AGUARDE_FILENAME; + string filePath = string(cmdln[5]); + filePath += CACIC_Auth::AGUARDE_FILENAME; pFile = fopen(filePath.data(), "w+"); vnclog.Print(LL_SRLOG, VNCLOG("Criando arquivo temporário: aguarde_SRCACIC.txt!\n")); @@ -290,6 +290,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, stringstream portBuffer(cmdln[6]); portBuffer >> porta; CACIC_Auth::getInstance()->setPorta(porta); + UINT timeout; + stringstream timeoutBuffer(cmdln[7]); + timeoutBuffer >> timeout; + CACIC_Auth::getInstance()->setTimeout(timeout); if (CACIC_Auth::getInstance()->autentica()) { iniciaTimer(); @@ -524,6 +528,7 @@ int WinVNCAppMain() // Set the name and port number server.SetName(szAppName); server.SetPort(CACIC_Auth::getInstance()->getPorta()); + server.SetAutoIdleDisconnectTimeout(CACIC_Auth::getInstance()->getTimeout()); server.SockConnect(TRUE); vnclog.Print(LL_STATE, VNCLOG("Servidor inicializado com sucesso!\n")); //uninstall driver before cont @@ -531,10 +536,6 @@ int WinVNCAppMain() // sf@2007 - Set Application0 special mode server.RunningFromExternalService(fRunningFromExternalService); - // colocando uma referência do servidor na classe CACIC_Auth - // para facilitar o acesso e a mudança de propriedades posteriormente. - //CACIC_Auth::getInstance()->m_server = &server; - // sf@2007 - New impersonation thread stuff for tray icon & menu // Subscribe to shutdown event hShutdownEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\SessionEventUltra"); diff --git a/srcacic/WinVNC/WinVNC/winvnc.rc b/srcacic/WinVNC/WinVNC/winvnc.rc index 9b480e1..e671df9 100644 --- a/srcacic/WinVNC/WinVNC/winvnc.rc +++ b/srcacic/WinVNC/WinVNC/winvnc.rc @@ -95,35 +95,37 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIB CAPTION "Aceitar conexão?" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - DEFPUSHBUTTON "&Aceitar",IDACCEPT,7,142,53,21 + DEFPUSHBUTTON "&Aceitar",IDACCEPT,7,142,57,21 PUSHBUTTON "&Rejeitar",IDREJECT,178,142,53,21 CTEXT "srCACICsrv recebeu uma tentativa de conexão de:",IDC_STATIC_TEXT1,7,3,224,16,SS_CENTERIMAGE LTEXT "",IDC_ACCEPT_IP,69,28,162,10,SS_CENTERIMAGE CTEXT "Você deseja aceitar a conexão?",IDC_STATIC_TEXT,7,126,224,16,SS_CENTERIMAGE - CTEXT "Rejeitar:",IDC_ACCEPT_TIMEOUT,60,142,118,21,SS_CENTERIMAGE + CTEXT "Rejeitar:",IDC_ACCEPT_TIMEOUT,64,142,114,21,SS_CENTERIMAGE LTEXT "",IDC_UVIS_NAME,69,17,162,8 EDITTEXT IDC_MOTIVO_SUPORTE,7,64,224,62,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN LTEXT "Motivo do Suporte:",IDC_STATIC,7,54,62,8 LTEXT "Endereço IP:",IDC_STATIC,7,29,42,8 - LTEXT "Nome do Técnico:",IDC_STATIC,7,17,53,8 - LTEXT "Doc. Referência:",IDC_STATIC,7,41,55,8 + LTEXT "Nome do Técnico:",IDC_STATIC,7,17,57,8 + LTEXT "Doc. Referência:",IDC_STATIC,7,41,57,8 EDITTEXT IDC_DOC_REF,68,41,163,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER END -IDD_INFO_DLG DIALOGEX 0, 0, 261, 51 +IDD_INFO_DLG DIALOGEX 0, 0, 261, 62 STYLE DS_SYSMODAL | DS_SETFONT | DS_FIXEDSYS | WS_POPUP EXSTYLE WS_EX_PALETTEWINDOW | WS_EX_DLGMODALFRAME | WS_EX_NOPARENTNOTIFY | WS_EX_ACCEPTFILES | WS_EX_TRANSPARENT | WS_EX_MDICHILD FONT 8, "MS Shell Dlg", 400, 0, 0x0 BEGIN CTEXT "ESTAÇÃO DE TRABALHO EM SUPORTE REMOTO",IDC_AVISO_SUPORTE,54,12,205,11 CTEXT "ATENÇÃO",IDC_ATENCAO_STATIC,54,2,205,10 - CONTROL 163,IDC_SRCACIC_IMG,"Static",SS_BITMAP,0,2,51,47 LTEXT "Nome:",IDC_STATIC,54,22,24,8 LTEXT "IP:",IDC_STATIC,54,32,10,8 - LTEXT "Início:",IDC_STATIC,54,41,20,8 + LTEXT "Início:",IDC_STATIC,54,42,20,8 LTEXT "",IDC_INFO_NOME,78,23,181,8,0,WS_EX_TRANSPARENT LTEXT "",IDC_INFO_IP,78,32,181,8,0,WS_EX_TRANSPARENT LTEXT "",IDC_INFO_INICIO,78,41,181,8,0,WS_EX_TRANSPARENT + LTEXT "Doc. Referência:",IDC_STATIC_INFO_REF,54,51,57,8 + LTEXT "",IDC_INFO_REFERENCIA,111,51,148,8 + CONTROL 163,IDC_SRCACIC_IMG,"Static",SS_BITMAP,0,0,54,62 END @@ -189,7 +191,7 @@ BEGIN BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 231 - VERTGUIDE, 60 + VERTGUIDE, 64 VERTGUIDE, 69 VERTGUIDE, 178 TOPMARGIN, 7 @@ -203,8 +205,9 @@ BEGIN BEGIN VERTGUIDE, 54 VERTGUIDE, 78 + VERTGUIDE, 111 VERTGUIDE, 259 - BOTTOMMARGIN, 49 + BOTTOMMARGIN, 60 HORZGUIDE, 2 HORZGUIDE, 10 HORZGUIDE, 49 @@ -219,8 +222,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,5,0,800 - PRODUCTVERSION 2,5,0,800 + FILEVERSION 2,5,0,804 + PRODUCTVERSION 2,5,0,804 FILEFLAGSMASK 0x37L #ifdef _DEBUG FILEFLAGS 0x25L @@ -237,11 +240,11 @@ BEGIN BEGIN VALUE "CompanyName", "Dataprev - Unidade Regional Espírito Santo" VALUE "FileDescription", "Módulo Suporte Remoto Seguro do Sistema CACIC" - VALUE "FileVersion", "2, 5, 0, 800" + VALUE "FileVersion", "2, 5, 0, 804" VALUE "InternalName", "srCACICsrv" VALUE "LegalCopyright", "Copyright © 2008 DATAPREV" VALUE "LegalTrademarks", "srCACIC" - VALUE "ProductVersion", "2, 5, 0, 800" + VALUE "ProductVersion", "2, 5, 0, 804" END END BLOCK "VarFileInfo" @@ -390,7 +393,7 @@ BEGIN DEFPUSHBUTTON "OK",ID_POK,55,130,50,13 PUSHBUTTON "Cancelar",ID_PCANCELAR,117,130,50,13 COMBOBOX IDC_DOMAIN_CB,84,59,83,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - CTEXT "v2.5.0.800",IDC_AUTHDLG_VERSION,187,145,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE + CTEXT "v2.5.0.804",IDC_AUTHDLG_VERSION,187,145,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE CTEXT "Por favor, preencha as informações solicitadas abaixo, para a autenticação de seu usuário.",IDC_AUTH_INFO,3,38,216,18 EDITTEXT IDC_MSG,3,111,216,17,ES_CENTER | ES_MULTILINE | ES_READONLY | NOT WS_BORDER CTEXT "ATENÇÃO: Esta autenticação, que precede a abertura de sessão para suporte remoto, atribui ao usuário a total responsabilidade por todo e qualquer tipo de dano lógico à estação que porventura seja causado por acesso externo indevido.",IDC_ATT_MSG,3,3,216,33 @@ -406,7 +409,7 @@ BEGIN EDITTEXT IDC_USER_EDIT,69,58,83,12,ES_AUTOHSCROLL DEFPUSHBUTTON "OK",ID_POK,45,76,45,13 PUSHBUTTON "Cancelar",ID_PCANCELAR,102,76,45,13 - CTEXT "v2.5.0.800",IDC_AUTHDLG_VERSION,159,90,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE + CTEXT "v2.5.0.804",IDC_AUTHDLG_VERSION,159,90,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE CTEXT "Por favor, digite seu nome no campo abaixo.",IDC_AUTH_INFO,3,46,188,10 CTEXT "ATENÇÃO: Esta autenticação, que precede a abertura de sessão para suporte remoto, atribui ao usuário a total responsabilidade por todo e qualquer tipo de dano lógico à estação que porventura seja causado por acesso externo indevido.",IDC_ATT_MSG,3,3,188,40 END -- libgit2 0.21.2