Commit 27ea9b9d2cf7f5a518e4e0e721effd6e980bad97

Authored by anderson.peterle@previdencia.gov.br
1 parent 3b0f426b
Exists in master

Agente Windows/srCACICsrv/srCACICcli: Reposicionamento de metodo publico, coment…

…arios, obtencao de parametro de TimeOut para conexoes e pequenas correcoes.

git-svn-id: http://svn.softwarepublico.gov.br/svn/cacic/cacic/trunk/agente-windows@829 fecfc0c7-e812-0410-ae72-849f08638ee7
col_hard/col_hard.dpr
... ... @@ -736,7 +736,7 @@ begin
736 736  
737 737 v_te_mem_ram_desc := v_te_mem_ram_desc + 'Slot '+ inttostr(i) + ': '
738 738 + v_SMBIOS.MemoryDevice[i].Manufacturer + ' '
739   - + inttostr(v_SMBIOS.MemoryDevice[i].Size) + 'Mb '
  739 + + inttostr(v_SMBIOS.MemoryDevice[i].Size) + 'MB '
740 740 + '(' + v_te_mem_ram_tipo +')';
741 741 end;
742 742 end
... ... @@ -749,7 +749,7 @@ begin
749 749 v_te_mem_ram_desc := v_te_mem_ram_desc + ' - ';
750 750 v_te_mem_ram_desc := v_te_mem_ram_desc + 'Slot '+ inttostr(i) + ': '
751 751 + v_SMBIOS.MemoryDevice[i].Manufacturer + ' '
752   - + inttostr(v_SMBIOS.MemoryModule[i].Size) + 'Mb '
  752 + + inttostr(v_SMBIOS.MemoryModule[i].Size) + 'MB '
753 753 + '(' + v_te_mem_ram_tipo +')';
754 754 end;
755 755 end;
... ... @@ -787,7 +787,7 @@ begin
787 787  
788 788 if (trim(v_te_placa_video_desc)='') then v_te_placa_video_desc := v_DISPLAY.Adapter;
789 789 v_qt_placa_video_cores := IntToStr(v_DISPLAY.ColorDepth);
790   - v_qt_placa_video_mem := IntToStr(v_DISPLAY.Memory div 1048576 ) + 'Mb';
  790 + v_qt_placa_video_mem := IntToStr(v_DISPLAY.Memory div 1048576 ) + 'MB';
791 791 v_te_placa_video_resolucao := IntToStr(v_DISPLAY.HorzRes) + 'x' + IntToStr(v_DISPLAY.VertRes);
792 792  
793 793 v_DISPLAY.Free;
... ...
srcacic/VNCViewer/AuthDialog.h
... ... @@ -36,10 +36,10 @@ public:
36 36 virtual ~AuthDialog();
37 37 int DoDialog();
38 38  
39   - TCHAR m_user[32];
40   - TCHAR m_passwd[32];
41   - TCHAR m_doc_ref[128];
42   - TCHAR m_motivo[5120];
  39 + TCHAR m_user[32]; // Usuário técnico a ser autenticado no gerente web
  40 + TCHAR m_passwd[32]; // Senha
  41 + TCHAR m_doc_ref[128]; // Documento de Referência apresentado pelo técnico.
  42 + TCHAR m_motivo[5120]; // Motivo da conexão.
43 43  
44 44 TCHAR m_domain[128];
45 45  
... ...
srcacic/VNCViewer/CACIC_Crypt.cpp
1   -/*
2   - * Classe para criptografia de dados
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para criptografia de dados.
3 5 */
4 6  
5 7 #include "CACIC_Crypt.h"
... ...
srcacic/VNCViewer/CACIC_Crypt.h
1   -/*
2   - * Classe para criptografia de dados
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para criptografia de dados.
3 5 */
4 6  
5 7 #ifndef _CACIC_CRYPT_
... ... @@ -16,17 +18,37 @@ class CACIC_Crypt {
16 18  
17 19 public:
18 20  
  21 + /**
  22 + * Remove da String de entrada os caracteres colocados pela URLEncode,
  23 + * tira do Base64 e depois decodifica usando o Rijndael.
  24 + * @param entrada String a ser decodificada.
  25 + * @return string String decodificada.
  26 + */
19 27 static string decodifica(const char* entrada);
  28 +
  29 + /**
  30 + * Codifica a String passada com o algoritmo Rijndael e coloca no Base64.
  31 + * @param entrada String a ser codificada.
  32 + * @return string String codificada.
  33 + */
20 34 static string codifica(const char* entrada);
21 35  
22 36 private:
23 37  
24   - static const unsigned int SRCACIC_BLOCK_SIZE; // tamanho padrao do bloco
25   - static const unsigned int SRCACIC_KEY_SIZE; // tamanho padrao da chave
26   - static const char SRCACIC_KEY[17]; // chave de en/dec
27   - static const char SRCACIC_IV[17]; // vetor de inicializacao
28   -
29   - virtual void ccrypt() = 0; // Truque para tornar a classe abstrata.
  38 + /** Tamanho padrão do bloco. */
  39 + static const unsigned int SRCACIC_BLOCK_SIZE;
  40 + /** Tamanho padrão da chave. */
  41 + static const unsigned int SRCACIC_KEY_SIZE;
  42 + /** Chave de codificação. */
  43 + static const char SRCACIC_KEY[17];
  44 + /** Vetor de inicialização. */
  45 + static const char SRCACIC_IV[17];
  46 +
  47 + /**
  48 + * Este método virtual puro é um truque para que a classe
  49 + * se torne abstrata e não possa ser instanciada.
  50 + */
  51 + virtual void ccrypt() = 0;
30 52 };
31 53  
32 54 #endif
... ...
srcacic/VNCViewer/CACIC_Utils.cpp
1 1 #include "CACIC_Utils.h"
2 2  
3   -// troca os caracteres da string
4   -// origem ori_str new_str
5 3 void CACIC_Utils::replaceAll(string &str, string key, string newkey)
6 4 {
7 5 int found = str.find(key, 0);
... ... @@ -13,7 +11,6 @@ void CACIC_Utils::replaceAll(string &str, string key, string newkey)
13 11 }
14 12 }
15 13  
16   -// substitui alguns caracteres especiais antes da encriptacao
17 14 void CACIC_Utils::simpleUrlEncode(string &decoded)
18 15 {
19 16 replaceAll(decoded, "+", "<MAIS>");
... ... @@ -32,7 +29,6 @@ void CACIC_Utils::simpleUrlDecode(string &amp;encoded)
32 29 replaceAll(encoded, "<BarrInv>", "\\");
33 30 }
34 31  
35   -// Fetches the MAC address and prints it
36 32 string CACIC_Utils::getMACAddress() {
37 33  
38 34 IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs
... ... @@ -44,7 +40,6 @@ string CACIC_Utils::getMACAddress() {
44 40 assert(dwStatus == ERROR_SUCCESS); // Verify return value is valid, no buffer overflow
45 41  
46 42 PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
47   - // TODO: e se houve mais de uma placa de rede, qual mac deve ir?
48 43 //do {
49 44 // PrintMACaddress(pAdapterInfo->Address); // Print MAC address
50 45 // pAdapterInfo = pAdapterInfo->Next; // Progress through linked list
... ... @@ -62,8 +57,6 @@ string CACIC_Utils::getMACAddress() {
62 57  
63 58 }
64 59  
65   -// TODO: Lembrete, quero melhorar o código:
66   -// http://www.codeguru.com/cpp/w-p/system/systeminformation/article.php/c8973__2/
67 60 string CACIC_Utils::getSOID() {
68 61 OSVERSIONINFO osver;
69 62 ZeroMemory(&osver, sizeof(OSVERSIONINFO));
... ...
srcacic/VNCViewer/CACIC_Utils.h
1 1 #ifndef _CACIC_UTILS_
2 2 #define _CACIC_UTILS_
3 3  
  4 +/**
  5 + * Copyright (C) 2009 DATAPREV-ES
  6 + * @author Vinicius Avellar Moreira
  7 + * Classe com alguns métodos utilitários.
  8 + */
  9 +
4 10 #include "stdhdrs.h"
5 11  
6 12 #include <Iphlpapi.h>
... ... @@ -17,17 +23,49 @@ class CACIC_Utils {
17 23  
18 24 public:
19 25  
  26 + /**
  27 + * Troca caracteres específicos de uma string.
  28 + * @param str String a ser modificada.
  29 + * @param key String com o caractere ou conjunto de caracteres que serão substituídos.
  30 + * @param newKey String com o caractere ou conjunto de caracteres que irão substituir.
  31 + */
20 32 static void replaceAll(string &str, string key, string newkey);
21 33  
  34 + /**
  35 + * Mesma função do urlEncode, porém os caracteres serão substituídos
  36 + * por tags específicas, e não pelo código.
  37 + * @param entrada String que será codificada.
  38 + */
22 39 static void simpleUrlEncode(string &entrada);
  40 +
  41 + /**
  42 + * Faz o inverso do simpleUrlEncode, trocando as tags específicas pelos
  43 + * respectivos caracteres.
  44 + * @param entrada String que será codificada.
  45 + */
23 46 static void simpleUrlDecode(string &entrada);
24 47  
  48 + /**
  49 + * Obtém o MAC Address da placa de rede.<br />
  50 + * TODO: Quando houver mais de uma placa de rede no pc, verificar qual
  51 + * está se comunicando com o servidor para enviar o MAC certo.
  52 + */
25 53 static string getMACAddress();
  54 +
  55 + /**
  56 + * Obtém a identificação do sistema operacional.<br />
  57 + * Artigo sobre SOID:<br />
  58 + * http://www.codeguru.com/cpp/w-p/system/systeminformation/article.php/c8973__2/
  59 + */
26 60 static string getSOID();
27 61  
28 62 private:
29 63  
30   - virtual void cutils() = 0; // Truque para tornar a classe abstrata.
  64 + /**
  65 + * Este método virtual puro é um truque para que a classe
  66 + * se torne abstrata e não possa ser instanciada.
  67 + */
  68 + virtual void cutils() = 0;
31 69  
32 70 };
33 71  
... ...
srcacic/VNCViewer/Res/vncviewer.rc
... ... @@ -312,7 +312,7 @@ BEGIN
312 312 RTEXT "Usuário:",IDC_STATIC,76,24,39,10
313 313 RTEXT "Senha:",IDC_STATIC,80,41,35,8
314 314 LTEXT "Doc. Referência:",IDC_DOC_REF,61,58,55,8
315   - LTEXT "Motivo do suporte: (tamanho máximo 5120 caracteres)",IDC_MOTIVO_SUPORTE,7,70,179,8
  315 + LTEXT "Motivo do Suporte: (tamanho máximo 5120 caracteres)",IDC_MOTIVO_SUPORTE,7,70,179,8
316 316 CONTROL 156,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_SUNKEN,7,21,50,45
317 317 LTEXT "Por favor, digite seu nome de usuário e senha no gerente web.",IDC_STATIC,7,7,203,11
318 318 LTEXT "",IDC_CHAR_COUNT,7,136,43,8,0,WS_EX_TRANSPARENT
... ... @@ -535,8 +535,8 @@ IDB_VNC32 BITMAP &quot;vnc32.BMP&quot;
535 535 //
536 536  
537 537 VS_VERSION_INFO VERSIONINFO
538   - FILEVERSION 2,5,0,800
539   - PRODUCTVERSION 2,5,0,800
  538 + FILEVERSION 2,5,0,804
  539 + PRODUCTVERSION 2,5,0,804
540 540 FILEFLAGSMASK 0x37L
541 541 #ifdef _DEBUG
542 542 FILEFLAGS 0x25L
... ... @@ -553,11 +553,11 @@ BEGIN
553 553 BEGIN
554 554 VALUE "CompanyName", "Dataprev - Unidade Regional Espírito Santo"
555 555 VALUE "FileDescription", "Visualizador do Suporte Remoto Seguro do Sistema CACIC"
556   - VALUE "FileVersion", "2, 5, 0, 800"
  556 + VALUE "FileVersion", "2, 5, 0, 804"
557 557 VALUE "InternalName", "srCACICcli"
558 558 VALUE "LegalCopyright", "Copyright © 2008 DATAPREV"
559 559 VALUE "LegalTrademarks", "srCACIC"
560   - VALUE "ProductVersion", "2, 5, 0, 800"
  560 + VALUE "ProductVersion", "2, 5, 0, 804"
561 561 END
562 562 END
563 563 BLOCK "VarFileInfo"
... ...
srcacic/WinVNC/WinVNC/CACIC_Auth.cpp
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe singleton responsável pela autenticação no gerente web.
  5 + */
  6 +
1 7 #include "CACIC_Auth.h"
2 8  
3 9 const string CACIC_Auth::GET_CONFIG_SCRIPT = "srcacic_get_config.php";
4 10 const string CACIC_Auth::SET_SESSION_SCRIPT = "srcacic_set_session.php";
5 11 const string CACIC_Auth::AUTH_CLIENT_SCRIPT = "srcacic_auth_client.php";
6 12 const unsigned int CACIC_Auth::TAMANHO_RESPOSTA = 1025;
  13 +const string CACIC_Auth::AGUARDE_FILENAME = "aguarde_srCACIC.txt";
  14 +const string CACIC_Auth::COOKIE_FILENAME = "cacic_ck.txt";
  15 +const UINT CACIC_Auth::TEMPO_IDLE = 5;
7 16  
8   -CACIC_Auth::CACIC_Auth() {}
9   -
10   -CACIC_Auth::~CACIC_Auth() {}
11   -
12   -// autentica a sessão no servidor web de acordo com os parametros passados
13 17 bool CACIC_Auth::autentica()
14 18 {
15   - string post = getPostComum();
16   -
17 19 vnclog.Print(LL_SRLOG, VNCLOG("Autenticando o usuário no gerente web.\n"));
18 20  
  21 + string post = getPostComum();
  22 +
19 23 string config_script = m_scriptsPath;
20 24 config_script += GET_CONFIG_SCRIPT;
21 25  
... ... @@ -25,65 +29,71 @@ bool CACIC_Auth::autentica()
25 29 vector<Dominio> listaDominios;
26 30 if (!verificaAuthChave(resposta, listaDominios)) return false;
27 31  
28   - vncPassDlg::EAuthCode authStat;
29   - if (listaDominios.at(0).id == "0") {
30   - authStat = vncPassDlg::SEM_AUTENTICACAO;
  32 + if (!autenticaUsuario(listaDominios)) return false;
  33 +
  34 + vnclog.Print(LL_SRLOG, VNCLOG("Autenticação OK!\n"));
  35 +
  36 + return true;
  37 +}
  38 +
  39 +bool CACIC_Auth::autenticaUsuario(vector<Dominio> &listaDominios)
  40 +{
  41 + string post;
  42 + char resposta[TAMANHO_RESPOSTA];
  43 +
  44 + vncPassDlg passDlg(listaDominios);
  45 +
  46 + if (listaDominios.at(0).id.compare("0") == 0) {
  47 + passDlg.m_authStat = vncPassDlg::SEM_AUTENTICACAO;
31 48 } else {
32   - authStat = vncPassDlg::ESPERANDO_AUTENTICACAO;
  49 + passDlg.m_authStat = vncPassDlg::ESPERANDO_AUTENTICACAO;
33 50 }
34 51  
35 52 // apresenta o dialogo de autenticação
36   - vncPassDlg passDlg(listaDominios);
37 53 do
38 54 {
39   - if (!passDlg.DoDialog(authStat, "")) return 0;
40   -
41   - string nm_nome_acesso_autenticacao;
42   - nm_nome_acesso_autenticacao = CACIC_Crypt::codifica(passDlg.m_usuario);
43   -
44   - string te_senha_acesso_autenticacao;
45   - te_senha_acesso_autenticacao = CACIC_Crypt::codifica(passDlg.m_senha);
46   -
47   - string id_servidor_autenticacao;
48   - id_servidor_autenticacao = CACIC_Crypt::codifica(passDlg.m_dominio);
49   -
  55 + if (!passDlg.DoDialog()) return false;
  56 +
  57 + post.clear();
  58 + post = getPostComum();
  59 +
50 60 post += "&nm_nome_acesso_autenticacao=";
51   - post += nm_nome_acesso_autenticacao;
  61 + post += CACIC_Crypt::codifica(passDlg.m_usuario);
52 62 post += "&te_senha_acesso_autenticacao=";
53   - post += te_senha_acesso_autenticacao;
  63 + post += CACIC_Crypt::codifica(passDlg.m_senha);
54 64 post += "&id_servidor_autenticacao=";
55   - post += id_servidor_autenticacao;
  65 + post += CACIC_Crypt::codifica(passDlg.m_dominio);
56 66  
57 67 vnclog.Print(LL_SRLOG, post.data());
58 68  
59   - string session_script = m_scriptsPath.c_str();
  69 + string session_script = m_scriptsPath;
60 70 session_script.append(SET_SESSION_SCRIPT);
61 71  
62 72 CACIC_Con::sendHtppPost(m_servidorWeb, session_script, post, resposta, TAMANHO_RESPOSTA);
63 73  
64 74 if(verificaAuthDominio(resposta)) {
65   - authStat = vncPassDlg::AUTENTICADO;
  75 + passDlg.m_authStat = vncPassDlg::AUTENTICADO;
66 76 } else {
67   - authStat = vncPassDlg::FALHA_AUTENTICACAO;
  77 + passDlg.m_authStat = vncPassDlg::FALHA_AUTENTICACAO;
68 78 }
69 79 }
70   - while (authStat != vncPassDlg::AUTENTICADO);
  80 + while (passDlg.m_authStat != vncPassDlg::AUTENTICADO);
71 81  
72 82 if (passDlg.m_authStat != vncPassDlg::SEM_AUTENTICACAO)
73 83 {
74 84 string msginfo = "Usuário Autenticado: ";
75 85 msginfo += m_usuario;
76   - if (!passDlg.DoDialog(vncPassDlg::AUTENTICADO, msginfo)) return 0;
  86 + passDlg.m_authStat = vncPassDlg::AUTENTICADO;
  87 + passDlg.m_msgInfo = msginfo;
  88 + if (!passDlg.DoDialog()) return false;
77 89 }
78 90  
79   - vnclog.Print(LL_SRLOG, VNCLOG("Autenticação OK!\n"));
80   -
81 91 return true;
82 92 }
83 93  
84   -// autentica o técnico que irá realizar o suporte remoto
85 94 bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char te_node_address_cli[],
86   - char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID)
  95 + char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[],
  96 + const vncClientId vncCID, const char peerName[])
87 97 {
88 98 string post = getPostComum();
89 99  
... ... @@ -110,7 +120,7 @@ bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char
110 120 CACIC_Con::sendHtppPost(m_servidorWeb, auth_client_script, post, resposta, TAMANHO_RESPOSTA);
111 121  
112 122 if (!verificaAuthTecnico(resposta, te_node_address_cli, te_documento_referencial,
113   - te_motivo_conexao, te_so_cli, vncCID))
  123 + te_motivo_conexao, te_so_cli, vncCID, peerName))
114 124 {
115 125 return false;
116 126 }
... ... @@ -118,35 +128,33 @@ bool CACIC_Auth::validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char
118 128 return true;
119 129 }
120 130  
121   -// Verifica o status da chave passada ao agente.
122 131 bool CACIC_Auth::verificaAuthChave(char resposta[], vector<Dominio> &listaDominios)
123 132 {
124 133 try
125 134 {
126 135 if (!verificaStatus(resposta)) throw SRCException("Falha na verificação da chave!");
127 136  
128   - // pega o conteudo da tag de resposta <DOMINIOS>..</DOMINIOS>
129 137 string dominios;
130 138 dominios = CACIC_Utils::leTag(resposta, "SERVIDORES_AUTENTICACAO");
131 139  
132 140 string dominios_dec;
133 141 dominios_dec = CACIC_Crypt::decodifica(dominios.c_str());
134 142  
135   - char* id_dominio = strtok((char*)dominios_dec.data(), ";");
  143 + char* dominios_dec_str = (char*)malloc(sizeof(char)*(dominios_dec.length() + 1));
  144 + string::traits_type::copy(dominios_dec_str, dominios_dec.c_str(), dominios_dec.length() + 1);
  145 + char* id_dominio = strtok(dominios_dec_str, ";");
136 146 char* nm_dominio = strtok(NULL, ";");
137 147  
138   - // pega a lista de dominios e decodifica, adicionando-a no vetor
139   - while (id_dominio != NULL && nm_dominio != NULL)
  148 + while (id_dominio != NULL)
140 149 {
141   - Dominio novoDominio;
142   - novoDominio.id = id_dominio;
143   - novoDominio.nome = nm_dominio;
  150 + listaDominios.push_back(Dominio(id_dominio, nm_dominio));
144 151  
145   - listaDominios.push_back(novoDominio);
146   -
147   - id_dominio = strtok (NULL, ";");
148   - nm_dominio = strtok (NULL, ";");
  152 + id_dominio = strtok(NULL, ";");
  153 + nm_dominio = strtok(NULL, ";");
149 154 }
  155 + delete dominios_dec_str;
  156 + delete id_dominio;
  157 + delete nm_dominio;
150 158  
151 159 if (listaDominios.empty()) throw SRCException("A lista de domínios está vazia.");
152 160  
... ... @@ -160,38 +168,24 @@ bool CACIC_Auth::verificaAuthChave(char resposta[], vector&lt;Dominio&gt; &amp;listaDomini
160 168 }
161 169 }
162 170  
163   -// verifica a resposta referente a antenticacao do host
164 171 bool CACIC_Auth::verificaAuthDominio(char resposta[])
165 172 {
166 173 try
167 174 {
168   - if (!verificaStatus(resposta)) throw SRCException("Falha na autenticação do usuário.");
  175 + if (!verificaStatus(resposta)) return false;//throw SRCException("Falha na autenticação do usuário.");
169 176  
170   - // pega o conteudo da tag de resposta <NM_COMPLETO>..</NM_COMPLETO>
171 177 string nm_completo;
172 178 nm_completo = CACIC_Utils::leTag(resposta, "NM_COMPLETO");
173 179  
174   - // decodifica e compara a resposta
175 180 string nome_dec;
176 181 nome_dec.append(CACIC_Crypt::decodifica(nm_completo.c_str()));
177 182  
178   - // pega o conteudo da tag de resposta <ID_SESSAO>..</ID_SESSAO>
179 183 string id_sessao;
180 184 id_sessao = CACIC_Utils::leTag(resposta, "ID_SESSAO");
181 185  
182   - string nu_timeout_srcacic;
183   - nu_timeout_srcacic = CACIC_Utils::leTag(resposta, "NU_TIMEOUT_SRCACIC");
184   -
185   - string nu_timeout_srcacic_dec;
186   - nu_timeout_srcacic_dec = CACIC_Crypt::decodifica(nu_timeout_srcacic.c_str());
187   -
188 186 m_usuario = nome_dec;
189 187 m_idSessao = id_sessao;
190 188  
191   - /*stringstream timeoutBuffer(nu_timeout_srcacic_dec);
192   - timeoutBuffer >> this->nuTimeout;
193   - m_server->SetAutoIdleDisconnectTimeout(this->nuTimeout);*/
194   -
195 189 return true;
196 190 }
197 191 catch(SRCException ex)
... ... @@ -202,16 +196,14 @@ bool CACIC_Auth::verificaAuthDominio(char resposta[])
202 196 }
203 197 }
204 198  
205   -// verifica a resposta referente a antenticacao do técnico
206 199 bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[],
207   - char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID)
  200 + char te_motivo_conexao[], char te_so_cli[], const vncClientId vncCID, const char peerName[])
208 201 {
209 202 try
210 203 {
211   - // pega o conteudo da tag de resposta <STATUS>..</STATUS>
212 204 string status;
213 205 status = CACIC_Utils::leTag(resposta, "STATUS");
214   - // decodifica e compara a resposta
  206 +
215 207 string status_dec;
216 208 status_dec = CACIC_Crypt::decodifica(status.c_str());
217 209  
... ... @@ -219,19 +211,18 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
219 211 // para poder pegar a resposta de erro que vem na tag STATUS
220 212 if (status_dec.compare("OK") != 0) throw SRCException(status_dec.c_str());
221 213  
222   - // pega o conteudo da tag de resposta <ID_USUARIO_CLI>..</ID_USUARIO_CLI>
223 214 string id_usuario_cli;
224 215 id_usuario_cli = CACIC_Utils::leTag(resposta, "ID_USUARIO_CLI");
225 216  
226   - // pega o conteudo da tag de resposta <ID_CONEXAO>..</ID_CONEXAO>
227 217 string id_conexao;
228 218 id_conexao = CACIC_Utils::leTag(resposta, "ID_CONEXAO");
229 219  
230   - // pega o conteudo da tag de resposta <NM_COMPLETO>..</NM_COMPLETO>
231 220 string nm_usuario_completo;
232 221 nm_usuario_completo = CACIC_Utils::leTag(resposta, "NM_USUARIO_COMPLETO");
233 222  
234   - // decodifica e compara a resposta
  223 + string dt_hr_inicio_sessao;
  224 + dt_hr_inicio_sessao = CACIC_Utils::leTag(resposta, "DT_HR_INICIO_SESSAO");
  225 +
235 226 string nm_usuario_completo_dec;
236 227 nm_usuario_completo_dec.append(CACIC_Crypt::decodifica(nm_usuario_completo.c_str()));
237 228  
... ... @@ -241,11 +232,6 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
241 232 string te_motivo_conexao_dec;
242 233 te_motivo_conexao_dec.append(CACIC_Crypt::decodifica(te_motivo_conexao));
243 234  
244   - // pega o conteudo da tag de resposta <DT_HR_INICIO_SESSAO>..</DT_HR_INICIO_SESSAO>
245   - string dt_hr_inicio_sessao;
246   - dt_hr_inicio_sessao = CACIC_Utils::leTag(resposta, "DT_HR_INICIO_SESSAO");
247   -
248   - // decodifica e compara a resposta
249 235 string dt_hr_inicio_sessao_dec;
250 236 dt_hr_inicio_sessao_dec.append(CACIC_Crypt::decodifica(dt_hr_inicio_sessao.c_str()));
251 237  
... ... @@ -260,6 +246,7 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
260 246 novoCliente.te_motivo_conexao = te_motivo_conexao_dec;
261 247 novoCliente.te_so_visitante = te_so_cli;
262 248 novoCliente.dt_hr_inicio_sessao = dt_hr_inicio_sessao_dec;
  249 + novoCliente.peerName = peerName;
263 250  
264 251 // adiciona o novo usuario a lista de usuarios visitantes
265 252 m_listaClientes.push_back(novoCliente);
... ... @@ -268,6 +255,8 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
268 255  
269 256 m_infoDlg.m_nomeVisitante = m_novoCliente.nm_usuario_completo;
270 257 m_infoDlg.m_dataInicio = m_novoCliente.dt_hr_inicio_sessao;
  258 + m_infoDlg.m_ip = m_novoCliente.peerName;
  259 + m_infoDlg.m_documentoReferencia = m_novoCliente.te_documento_referencial;
271 260  
272 261 return true;
273 262 }
... ... @@ -282,19 +271,19 @@ bool CACIC_Auth::verificaAuthTecnico(char resposta[], char te_node_address_cli[]
282 271  
283 272 void CACIC_Auth::atualizaSessao()
284 273 {
285   - // Verifica se a palavra chave foi trocada enquanto em execução.
  274 + // Verifica, antes de atualizar a sessão, se a palavra
  275 + // chave foi trocada enquanto o servidor estava aberto.
286 276 FILE *pFile;
287   - string filePath = m_tempPath + COOKIE_FILENAME;
  277 + string filePath = m_tempPath + CACIC_Auth::COOKIE_FILENAME;
288 278 pFile = fopen(filePath.data(), "r");
289 279 char newKey[256];
290 280  
291   - // testa se o arquivo foi aberto com sucesso
292 281 if(pFile != NULL)
293 282 {
294 283 if (fgets(newKey, 256, pFile))
295 284 m_palavraChave = newKey;
296 285  
297   - fclose(pFile); // libera o ponteiro para o arquivo
  286 + fclose(pFile);
298 287 remove(filePath.data());
299 288 }
300 289  
... ... @@ -316,25 +305,25 @@ void CACIC_Auth::atualizaSessao()
316 305 }
317 306 else
318 307 {
319   - string listaidusu = "&id_usuario_visitante=";
320   - string listaidcon = "&id_conexao=";
321   - string listanode = "&te_node_address_visitante=";
322   - string listaidso = "&te_so_visitante=";
  308 + string listaIDUsuario = "&id_usuario_visitante=";
  309 + string listaIDConexao = "&id_conexao=";
  310 + string listaNodeAddress = "&te_node_address_visitante=";
  311 + string listaID_SO = "&te_so_visitante=";
323 312 for (int i = 0; i < m_listaClientes.size(); i++)
324 313 {
325   - listaidusu += m_listaClientes[i].id_usuario_visitante;
326   - if (i < m_listaClientes.size() - 1) listaidusu += "<REG>";
327   - listaidcon += m_listaClientes[i].id_conexao;
328   - if (i < m_listaClientes.size() - 1) listaidcon += "<REG>";
329   - listanode += m_listaClientes[i].te_node_address_visitante;
330   - if (i < m_listaClientes.size() - 1) listanode += "<REG>";
331   - listaidso += m_listaClientes[i].te_so_visitante;
332   - if (i < m_listaClientes.size() - 1) listaidso += "<REG>";
  314 + listaIDUsuario += m_listaClientes[i].id_usuario_visitante;
  315 + if (i < m_listaClientes.size() - 1) listaIDUsuario += "<REG>";
  316 + listaIDConexao += m_listaClientes[i].id_conexao;
  317 + if (i < m_listaClientes.size() - 1) listaIDConexao += "<REG>";
  318 + listaNodeAddress += m_listaClientes[i].te_node_address_visitante;
  319 + if (i < m_listaClientes.size() - 1) listaNodeAddress += "<REG>";
  320 + listaID_SO += m_listaClientes[i].te_so_visitante;
  321 + if (i < m_listaClientes.size() - 1) listaID_SO += "<REG>";
333 322 }
334   - post += listaidusu;
335   - post += listaidcon;
336   - post += listanode;
337   - post += listaidso;
  323 + post += listaIDUsuario;
  324 + post += listaIDConexao;
  325 + post += listaNodeAddress;
  326 + post += listaID_SO;
338 327 }
339 328  
340 329 string session_script = m_scriptsPath.c_str();
... ... @@ -346,8 +335,23 @@ void CACIC_Auth::atualizaSessao()
346 335 if (!verificaStatus(resposta))
347 336 {
348 337 MessageBox(NULL, "Ocorreu um erro ao atualizar a sessão! O programa será fechado.", "Erro!", MB_OK | MB_ICONERROR);
349   - ExitProcess(0);
350   - return;
  338 + finalizaServidor();
  339 + }
  340 +
  341 + // verifica se o servidor está sem receber conexão por
  342 + // mais tempo que o limite, caso esteja, o processo é finalizado.
  343 + if (m_listaClientes.empty())
  344 + {
  345 + m_idleTime--;
  346 + if (m_idleTime <= 0)
  347 + {
  348 + vnclog.Print(LL_SRLOG, "Fechando o servidor por atingir o tempo máximo de idle.");
  349 + finalizaServidor();
  350 + }
  351 + }
  352 + else
  353 + {
  354 + m_idleTime = TEMPO_IDLE;
351 355 }
352 356 }
353 357  
... ... @@ -373,7 +377,6 @@ void CACIC_Auth::sendChatText(char te_mensagem[], char cs_origem[])
373 377 CACIC_Con::sendHtppPost(m_servidorWeb, session_script, post, resposta, TAMANHO_RESPOSTA);
374 378 }
375 379  
376   -// remove o cliente com id vncid da lista de usuarios visitantes
377 380 void CACIC_Auth::removeCliente(vncClientId vncCID)
378 381 {
379 382 // Atualiza a sessão antes de remover o cliente.
... ... @@ -394,16 +397,6 @@ void CACIC_Auth::removeCliente(vncClientId vncCID)
394 397 m_novoCliente = novoCliente;
395 398 }
396 399  
397   -CACIC_Auth* CACIC_Auth::getInstance()
398   -{
399   - if (!m_instance)
400   - {
401   - m_instance = new CACIC_Auth();
402   - }
403   - return m_instance;
404   -}
405   -
406   -// pega os parametros comuns a todos os posts enviados
407 400 string CACIC_Auth::getPostComum()
408 401 {
409 402 string post = "";
... ... @@ -417,24 +410,31 @@ string CACIC_Auth::getPostComum()
417 410 return post;
418 411 }
419 412  
420   -// verifica se a resposta enviada na tag status esta ok
421 413 bool CACIC_Auth::verificaStatus(char resposta[])
422 414 {
423   - // pega o conteudo da tag de resposta <STATUS>..</STATUS>
424 415 string status;
425 416 status = CACIC_Utils::leTag(resposta, "STATUS");
426 417  
427   - // decodifica e compara a resposta
428 418 string status_dec;
429 419 status_dec = CACIC_Crypt::decodifica(status.c_str());
430 420  
431   - if (status_dec.compare("OK") != 0)
432   - {
433   - string errorMsg = "Falha na autenticação do usuário no domínio.\n";
434   - errorMsg += status_dec;
435   - vnclog.Print(LL_SRLOG, VNCLOG(errorMsg.c_str()));
436   - return false;
437   - }
  421 + if (status_dec.compare("OK") != 0) return false;
438 422  
439 423 return true;
440 424 }
  425 +
  426 +void CACIC_Auth::finalizaServidor()
  427 +{
  428 + static HANDLE hShutdownEvent;
  429 + hShutdownEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\SessionEventUltra");
  430 + SetEvent(hShutdownEvent);
  431 + CloseHandle(hShutdownEvent);
  432 + HWND hservwnd;
  433 + // UVNC Default: WinVNC Tray Icon
  434 + hservwnd = FindWindow("srCACICsrv Tray Icon", NULL);
  435 + if (hservwnd != NULL)
  436 + {
  437 + PostMessage(hservwnd, WM_COMMAND, 40002, 0);
  438 + PostMessage(hservwnd, WM_CLOSE, 0, 0);
  439 + }
  440 +}
... ...
srcacic/WinVNC/WinVNC/CACIC_Auth.h
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe singleton responsável pela autenticação no gerente web.
  5 + */
  6 +
1 7 #ifndef _CACIC_AUTH_
2 8 #define _CACIC_AUTH_
3 9  
... ... @@ -21,12 +27,12 @@ using namespace std;
21 27  
22 28 #include "vncClient.h"
23 29  
24   -#define AGUARDE_FILENAME "aguarde_srCACIC.txt";
25   -#define COOKIE_FILENAME "cacic_ck.txt";
26   -
27   -// struct referente a um usuario remoto
  30 +/**
  31 + * Struct referente a um usuário cliente.
  32 + */
28 33 struct ClienteSRC {
29 34 vncClientId vncCID;
  35 + string peerName;
30 36 string id_usuario_visitante;
31 37 string id_usuario_cli;
32 38 string id_conexao;
... ... @@ -44,15 +50,37 @@ class CACIC_Auth {
44 50  
45 51 public:
46 52  
47   - // lista de usuarios remotos
  53 + /**
  54 + * Nome do arquivo temporário de trava.
  55 + * Utilizado para que o cacic impeça a execução de coletas com o suporte ativo.
  56 + */
  57 + static const string AGUARDE_FILENAME;
  58 +
  59 + /**
  60 + * Tempo máximo que o servidor pode ficar aberto sem conexões. (mins)
  61 + */
  62 + static const UINT TEMPO_IDLE;
  63 +
  64 + /** Lista de usuários cliente. */
48 65 vector<ClienteSRC> m_listaClientes;
49 66  
  67 + /** Último usuário cliente conectado. */
50 68 ClienteSRC m_novoCliente;
51 69  
  70 + /**
  71 + * Janela com informações sobre o cliente conectado.
  72 + * Exibida enquanto há suporte em andamento.
  73 + */
52 74 supInfoDlg m_infoDlg;
53 75  
54   - static CACIC_Auth* getInstance();
  76 + /** Singleton. */
  77 + static CACIC_Auth* getInstance()
  78 + {
  79 + if (!m_instance) m_instance = new CACIC_Auth();
  80 + return m_instance;
  81 + }
55 82  
  83 + /* MÉTODOS DE ENCAPSULAMENTO --> */
56 84 void setServidorWeb(string newServidorWeb) {m_servidorWeb = newServidorWeb;}
57 85 string getServidorWeb() {return m_servidorWeb;}
58 86 void setScriptsPath(string newScriptsPath) {m_scriptsPath = newScriptsPath;}
... ... @@ -62,48 +90,154 @@ public:
62 90 void setPalavraChave(char* newPalavraChave) {m_palavraChave = newPalavraChave;}
63 91 void setPorta(UINT newPorta) {m_porta = newPorta;}
64 92 UINT getPorta() {return m_porta;}
65   -
  93 + void setTimeout(UINT newNuTimeout) {m_nuTimeout = newNuTimeout;}
  94 + UINT getTimeout() {return m_nuTimeout;}
  95 + /* <-- MÉTODOS DE ENCAPSULAMENTO */
  96 +
  97 + /**
  98 + * Retorna os valores padrão de post, usados na
  99 + * comunicação com o gerente web.
  100 + * te_so, te_node_address, te_palavra_chave
  101 + * @return String com o post padrão formatado.
  102 + */
66 103 string getPostComum();
67 104  
  105 + /**
  106 + * Remove o usuário cliente da lista.
  107 + * @param vncCID ID do cliente VNC, utilizado para
  108 + * diferenciar os clientes, caso haja mais de um.
  109 + */
68 110 void removeCliente(vncClientId vncCID);
69 111  
  112 + /**
  113 + * Faz a comunicação com o gerente web para validar a palavra chave
  114 + * e criar uma nova sessão para o suporte remoto.
  115 + * @return bool Status da autenticação.
  116 + */
70 117 bool autentica();
  118 +
  119 + /**
  120 + * Se comunica com o gerente web para validar o usuário cliente.
  121 + * Se o usuário for válido, ele cria uma nova sessão de conexão.
  122 + * @param nm_usuario_cli String codificada contendo o nome de usuário.
  123 + * @param te_senha_cli String codificada contendo a senha do usuário.
  124 + * @param te_node_address_cli String codificada contendo o MAC address do cliente.
  125 + * @param te_documento_referencial String codificada contendo o Documento de Referência do suporte remoto.
  126 + * @param te_motivo_conexao String codificada contendo o motivo do suporte remoto.
  127 + * @param te_so_cli String codificada contendo a identificação do SO do cliente.
  128 + * @param vncCID ID do cliente VNC.
  129 + * @param peerName String contendo o endereço ip do cliente.
  130 + */
71 131 bool validaTecnico(char nm_usuario_cli[], char te_senha_cli[], char te_node_address_cli[],
72   - char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID);
  132 + char te_documento_referencial[], char te_motivo_conexao[], char te_so_cli[],
  133 + const vncClientId vncCID, const char peerName[]);
  134 +
  135 + /**
  136 + * Se comunica com o gerente web para atualizar a sessão de suporte.
  137 + */
73 138 void atualizaSessao();
  139 +
  140 + /**
  141 + * Envia o log do chat para o gerente web durante o suporte remoto.
  142 + * @param te_mensagem Mensagem recebida/enviada.
  143 + * @param cs_origem Origem da mensagem, cliente/servidor.
  144 + */
74 145 void sendChatText(char te_mensagem[], char cs_origem[]);
75 146  
  147 + /** Fecha o servidor. */
  148 + void finalizaServidor();
  149 +
76 150 private:
77 151  
  152 + /** Singleton. */
78 153 static CACIC_Auth* m_instance;
79 154  
80   - CACIC_Auth();
81   - virtual ~CACIC_Auth();
82   -
83   - string m_servidorWeb; // endereco do servidor web
84   - string m_scriptsPath; // caminho dos scripts
85   - string m_tempPath; // caminho completo para a pasta temp do cacic
  155 + CACIC_Auth() {
  156 + m_idleTime = TEMPO_IDLE;
  157 + }
86 158  
87   - string m_usuario; // usuario host do suporte
88   - string m_idSessao; // id da sessao iniciada pelo usuario host
89   - UINT m_nuTimeout; // valor do idle timeout
  159 + virtual ~CACIC_Auth() {}
90 160  
91   - string m_soVersion; // versao do sistema operacional do host
92   - string m_nodeAdress; // mac address do host
93   - string m_palavraChave; // palavra chave do cacic no momento da ativação do suporte remoto
  161 + /** Endereço do servidor web. */
  162 + string m_servidorWeb;
  163 + /** Caminho dos scripts no servidor web. */
  164 + string m_scriptsPath;
  165 + /** Caminho estático para a pasta temp do cacic. */
  166 + string m_tempPath;
94 167  
95   - UINT m_porta;
  168 + /** Usuário host do suporte. */
  169 + string m_usuario;
  170 + /** ID da sessão iniciada pelo usuário host. */
  171 + string m_idSessao;
96 172  
97   - static const string GET_CONFIG_SCRIPT; // caminho para o script de configurações
98   - static const string SET_SESSION_SCRIPT; // caminho para o script de sessões
99   - static const string AUTH_CLIENT_SCRIPT; // caminho para o script de autenticação
100   - static const unsigned int TAMANHO_RESPOSTA; // tamanho maximo aceito pela resposta xml
  173 + /** Versão do sistema operacional do host. */
  174 + string m_soVersion;
  175 + /** MAC Address do host. */
  176 + string m_nodeAdress;
  177 + /** Palavra chave. Utilizada na comunicação com o gerente web. */
  178 + string m_palavraChave;
101 179  
  180 + /** Porta de escuta. */
  181 + UINT m_porta;
  182 + /** Tempo limite que o srcacic pode ficar ocioso antes de fechar-se. */
  183 + UINT m_nuTimeout;
  184 + /** Tempo que o servidor está ocioso */
  185 + UINT m_idleTime;
  186 +
  187 + /** Nome do script de configurações do gerente web. */
  188 + static const string GET_CONFIG_SCRIPT;
  189 + /** Nome do script de sessões do gerente web. */
  190 + static const string SET_SESSION_SCRIPT;
  191 + /** Nome do script de autenticação do gerente web. */
  192 + static const string AUTH_CLIENT_SCRIPT;
  193 + /** Tamanho padrão da resposta recebida pela requisição http. */
  194 + static const unsigned int TAMANHO_RESPOSTA;
  195 + /** Nome do arquivo temporário de atualização da palavra chave. */
  196 + static const string COOKIE_FILENAME;
  197 +
  198 + /**
  199 + * Apresenta o diálogo de login do usuário host e
  200 + * valida os dados no gerente web.
  201 + * @param listaDominios Lista de domínios obtida na autenticação.
  202 + */
  203 + bool autenticaUsuario(vector<Dominio> &listaDominios);
  204 +
  205 + /**
  206 + * Verifica a autenticação da chave no gerente web.
  207 + * @param resposta Resposta XML gerada na comunicação com o gerente web.
  208 + * @param listaDominios Lista de domínios obtida na autenticação.
  209 + */
102 210 bool verificaAuthChave(char resposta[], vector<Dominio> &listaDominios);
  211 +
  212 + /**
  213 + * Verifica se a resposta da autenticação do usuário host foi positiva.
  214 + * @param resposta Resposta XML gerada na comunicação com o gerente web.
  215 + */
103 216 bool verificaAuthDominio(char resposta[]);
104   - bool verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[],
105   - char te_motivo_conexao[], char te_so_cli[], vncClientId vncCID);
106 217  
  218 + /**
  219 + * Verifica se a resposta da autenticação do técnico foi positiva,
  220 + * armazena o novo cliente na lista e exibe a tela de informações do suporte.
  221 + * @param nm_usuario_cli String codificada contendo o nome de usuário.
  222 + * @param te_senha_cli String codificada contendo a senha do usuário.
  223 + * @param te_node_address_cli String codificada contendo o MAC address do cliente.
  224 + * @param te_documento_referencial String codificada contendo o Documento de Referência do suporte remoto.
  225 + * @param te_motivo_conexao String codificada contendo o motivo do suporte remoto.
  226 + * @param te_so_cli String codificada contendo a identificação do SO do cliente.
  227 + * @param vncCID ID do cliente VNC.
  228 + * @param peerName String contendo o endereço ip do cliente.
  229 + */
  230 + bool verificaAuthTecnico(char resposta[], char te_node_address_cli[], char te_documento_referencial[],
  231 + char te_motivo_conexao[], char te_so_cli[],
  232 + const vncClientId vncCID, const char peerName[]);
  233 +
  234 + /**
  235 + * Verifica o valor de retorno STATUS que é enviado pelo gerente web
  236 + * após cada comunicação para confirmar a operação.
  237 + * <b>Valores retornados:</b><br />
  238 + * OK: A operação teve êxito.<br />ERRO: A operação falhou.
  239 + * @param resposta Resposta XML gerada na comunicação com o gerente web.
  240 + */
107 241 bool verificaStatus(char resposta[]);
108 242 };
109 243  
... ...
srcacic/WinVNC/WinVNC/CACIC_Con.cpp
1   -// Declaração da classe CACIC_Con
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para envio de requisições html ao gerente web.
  5 + * API das funções wininet:
  6 + * http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx
  7 + */
2 8  
3 9 #include "CACIC_Con.h"
4 10  
5   -CACIC_Con::CACIC_Con() {}
  11 +const TCHAR CACIC_Con::DEFAULT_HEADER[] = "Content-Type: application/x-www-form-urlencoded";
6 12  
7   -CACIC_Con::~CACIC_Con()
8   -{
9   - if(m_hSession != NULL) InternetCloseHandle(m_hSession);
10   - if(m_hConnect != NULL) InternetCloseHandle(m_hConnect);
11   - if(m_hRequest != NULL) InternetCloseHandle(m_hRequest);
12   -}
13   -
14   -// conecta ao gerente web
15 13 void CACIC_Con::conecta()
16 14 {
17 15 m_hSession = InternetOpen("CACIC_Con", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
... ... @@ -32,7 +30,6 @@ void CACIC_Con::conecta()
32 30 }
33 31 }
34 32  
35   -// envia os parametros ao script
36 33 void CACIC_Con::sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[])
37 34 {
38 35 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[])
43 40 return;
44 41 }
45 42  
46   - HttpSendRequest(m_hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));
  43 + HttpSendRequest(m_hRequest, CACIC_Con::DEFAULT_HEADER,
  44 + strlen(CACIC_Con::DEFAULT_HEADER),
  45 + frmdata, strlen(frmdata));
47 46 }
48 47  
49   -// pega a resposta da ultima solicitacao e armazena no buffer
50 48 bool CACIC_Con::getResponse(char buff[], unsigned long sz)
51 49 {
52 50 if(!m_hRequest)
... ...
srcacic/WinVNC/WinVNC/CACIC_Con.h
1   -// Classe para conexao do vnc com o gerente web do Cacic.
2   -// API das funcoes da classe wininet.h:
3   -// http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para envio de requisições html ao gerente web.
  5 + * API das funções wininet:
  6 + * http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx
  7 + */
4 8  
5 9 #ifndef _CACIC_CON_
6 10 #define _CACIC_CON_
... ... @@ -17,32 +21,82 @@ using namespace std;
17 21 #define HTTP_POST "POST"
18 22 #define HTTP_GET "GET"
19 23  
20   -static const TCHAR hdrs[] = "Content-Type: application/x-www-form-urlencoded";
21   -
22 24 class CACIC_Con {
23 25  
24 26 private:
25 27  
26   - HINTERNET m_hSession; // handle da sessao
27   - HINTERNET m_hConnect; // handle da conexao
28   - HINTERNET m_hRequest; // handle da resposta da requisicao
  28 + /** Header padrão das requisições. */
  29 + static const TCHAR DEFAULT_HEADER[];
  30 +
  31 + /** Handler da sessão. */
  32 + HINTERNET m_hSession;
  33 + /** Handler da conexao. */
  34 + HINTERNET m_hConnect;
  35 + /** Handler da resposta da requisição. */
  36 + HINTERNET m_hRequest;
29 37  
  38 + /** Número de bytes lidos na última requisição. */
30 39 unsigned long m_lBytesRead;
  40 + /** Nome do servidor que sofrerá a ação. */
31 41 LPCSTR m_server;
32 42  
33 43 public:
34 44  
35   - CACIC_Con();
36   - virtual ~CACIC_Con();
37   -
  45 + CACIC_Con() {}
  46 +
  47 + /**
  48 + * Destrutor da classe.
  49 + * Libera os handlers que estiverem abertos.
  50 + */
  51 + virtual ~CACIC_Con()
  52 + {
  53 + if(m_hSession != NULL) InternetCloseHandle(m_hSession);
  54 + if(m_hConnect != NULL) InternetCloseHandle(m_hConnect);
  55 + if(m_hRequest != NULL) InternetCloseHandle(m_hRequest);
  56 + }
  57 +
  58 + /**
  59 + * Altera o servidor.
  60 + * @param server String com o nome do servidor.
  61 + */
38 62 void setServer(LPCSTR server){m_server = server;}
  63 +
  64 + /**
  65 + * Retorna o nome do servidor.
  66 + * @return String com o nome do servidor.
  67 + */
39 68 LPCSTR getServer(){return m_server;}
40 69  
41   - void conecta(); // conecta ao servidor
42   - // envia uma requisicao ao script atraves de POST/GET
  70 + /**
  71 + * Efetua a conexão com o servidor.
  72 + */
  73 + void conecta();
  74 +
  75 + /**
  76 + * Envia uma requisição ao servidor.
  77 + * @param metodo String com o tipo da requisição. (GET/POST)
  78 + * @param script String com o nome do script que será acessado.
  79 + * @param frmdata String com os dados que irão ser passados como parâmetro ao script.
  80 + */
43 81 void sendRequest(LPCTSTR metodo, LPCTSTR script, TCHAR frmdata[]);
44   - bool getResponse(char buff[], unsigned long sz); // recebe a resposta da execucao do script
45 82  
  83 + /**
  84 + * Retorna a resposta gerada pelo servidor que recebeu a requisição.
  85 + * @param buff Buffer para armazenar o resultado da requisição.
  86 + * @param sz Tamanho do buffer.
  87 + * @return bool Boleano com o estado da requisição.
  88 + */
  89 + bool getResponse(char buff[], unsigned long sz);
  90 +
  91 + /**
  92 + * Método estático que faz uma requisição ao servidor passado e
  93 + * já retorna a resposta através do buffer "resposta".
  94 + * @param servidor String com o nome do servidor.
  95 + * @param script String com o nome do script.
  96 + * @param post String com os parãmetros a serem passados ao script.
  97 + * @param resposta Buffer de resposta da requisição.
  98 + * @param sz Tamanho da resposta.
  99 + */
46 100 static void sendHtppPost(const string &servidor, const string &script, string &post,
47 101 char resposta[], unsigned long sz);
48 102  
... ...
srcacic/WinVNC/WinVNC/CACIC_Crypt.cpp
1   -/*
2   - * Classe para criptografia de dados
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para criptografia de dados.
3 5 */
4 6  
5 7 #include "CACIC_Crypt.h"
... ... @@ -9,7 +11,6 @@ const unsigned int CACIC_Crypt::SRCACIC_KEY_SIZE = 16;
9 11 const char CACIC_Crypt::SRCACIC_KEY[17] = "CacicBrasil";
10 12 const char CACIC_Crypt::SRCACIC_IV[17] = "abcdefghijklmnop";
11 13  
12   -// Tira do base64 e desencripta.
13 14 string CACIC_Crypt::decodifica(const char* entrada)
14 15 {
15 16 string decode_base64;
... ... @@ -34,7 +35,6 @@ string CACIC_Crypt::decodifica(const char* entrada)
34 35 return out;
35 36 }
36 37  
37   -// Encripta e coloca no base64.
38 38 string CACIC_Crypt::codifica(const char* entrada)
39 39 {
40 40 unsigned int entrada_len = strlen(entrada);
... ...
srcacic/WinVNC/WinVNC/CACIC_Crypt.h
1   -/*
2   - * Classe para criptografia de dados
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para criptografia de dados.
3 5 */
4 6  
5 7 #ifndef _CACIC_CRYPT_
... ... @@ -16,17 +18,37 @@ class CACIC_Crypt {
16 18  
17 19 public:
18 20  
  21 + /**
  22 + * Remove da String de entrada os caracteres colocados pela URLEncode,
  23 + * tira do Base64 e depois decodifica usando o Rijndael.
  24 + * @param entrada String a ser decodificada.
  25 + * @return string String decodificada.
  26 + */
19 27 static string decodifica(const char* entrada);
  28 +
  29 + /**
  30 + * Codifica a String passada com o algoritmo Rijndael e coloca no Base64.
  31 + * @param entrada String a ser codificada.
  32 + * @return string String codificada.
  33 + */
20 34 static string codifica(const char* entrada);
21 35  
22 36 private:
23 37  
24   - static const unsigned int SRCACIC_BLOCK_SIZE; // tamanho padrao do bloco
25   - static const unsigned int SRCACIC_KEY_SIZE; // tamanho padrao da chave
26   - static const char SRCACIC_KEY[17]; // chave de en/dec
27   - static const char SRCACIC_IV[17]; // vetor de inicializacao
28   -
29   - virtual void ccrypt() = 0; // Truque para tornar a classe abstrata.
  38 + /** Tamanho padrão do bloco. */
  39 + static const unsigned int SRCACIC_BLOCK_SIZE;
  40 + /** Tamanho padrão da chave. */
  41 + static const unsigned int SRCACIC_KEY_SIZE;
  42 + /** Chave de codificação. */
  43 + static const char SRCACIC_KEY[17];
  44 + /** Vetor de inicialização. */
  45 + static const char SRCACIC_IV[17];
  46 +
  47 + /**
  48 + * Este método virtual puro é um truque para que a classe
  49 + * se torne abstrata e não possa ser instanciada.
  50 + */
  51 + virtual void ccrypt() = 0;
30 52 };
31 53  
32 54 #endif
... ...
srcacic/WinVNC/WinVNC/CACIC_Exception.h
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe para lidar com as mensagens de erro.
  5 + */
  6 +
1 7 #ifndef _CACIC_EXCEPTION_
2 8 #define _CACIC_EXCEPTION_
3 9  
4 10 #include <windows.h>
5 11  
6   -// exceção padrao do srCACIC
7 12 class SRCException {
  13 +
8 14 private:
  15 +
  16 + /** Mensagem de erro. */
9 17 string m_err;
  18 +
10 19 public:
  20 +
  21 + /**
  22 + * Construtor da classe.
  23 + * @param err String com a mensagem de erro.
  24 + */
11 25 SRCException(string err) {
12 26 m_err = err;
13 27 }
  28 +
  29 + /**
  30 + * Retorna a mensagem de erro armazenada.
  31 + * @return string String com a mensagem de erro.
  32 + */
14 33 string getMessage() {
15 34 return m_err;
16 35 }
  36 +
17 37 };
18 38  
19   -#endif
20 39 \ No newline at end of file
  40 +#endif
... ...
srcacic/WinVNC/WinVNC/CACIC_Utils.cpp
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe com alguns métodos utilitários.
  5 + */
  6 +
1 7 #include "CACIC_Utils.h"
2 8  
3   -// método bruto para ler
4   -// uma tag do arquivo xml de resposta
  9 +const string CACIC_Utils::F_SANS_SERIF = "Microsoft Sans Serif";
  10 +
5 11 string CACIC_Utils::leTag(char xml[], char tagname[])
6 12 {
7 13 char* tag;
... ... @@ -28,8 +34,6 @@ string CACIC_Utils::leTag(char xml[], char tagname[])
28 34 return content;
29 35 }
30 36  
31   -// troca os caracteres da string
32   -// origem ori_str new_str
33 37 void CACIC_Utils::replaceAll(string &str, string key, string newkey)
34 38 {
35 39 int found = str.find(key, 0);
... ... @@ -95,7 +99,6 @@ void CACIC_Utils::urlDecode(string &amp;encoded)
95 99 encoded.swap(buff.str());
96 100 }
97 101  
98   -// substitui alguns caracteres especiais antes da encriptacao
99 102 void CACIC_Utils::simpleUrlEncode(string &decoded)
100 103 {
101 104 replaceAll(decoded, "+", "<MAIS>");
... ... @@ -145,7 +148,7 @@ void CACIC_Utils::changeFont(HWND dlgHandle, int dlgItem, int fontSize, string f
145 148 LOGFONT lfFont;
146 149  
147 150 memset(&lfFont, 0x00, sizeof(lfFont));
148   - memcpy(lfFont.lfFaceName, fontName.data(), 16);
  151 + memcpy(lfFont.lfFaceName, fontName.c_str(), fontName.size());
149 152  
150 153 lfFont.lfHeight = fontSize;
151 154 lfFont.lfWeight = (fontIsBold == true) ? FW_BOLD : FW_NORMAL;
... ...
srcacic/WinVNC/WinVNC/CACIC_Utils.h
  1 +/**
  2 + * Copyright (C) 2009 DATAPREV-ES
  3 + * @author Vinicius Avellar Moreira
  4 + * Classe com alguns métodos utilitários.
  5 + */
  6 +
1 7 #ifndef _CACIC_UTILS_
2 8 #define _CACIC_UTILS_
3 9  
... ... @@ -12,26 +18,85 @@ class CACIC_Utils {
12 18  
13 19 public:
14 20  
  21 + /** Fonte padrão usado nos diálogos. */
  22 + static const string F_SANS_SERIF;
  23 +
  24 + /**
  25 + * Método bruto para ler uma tag específica de um arquivo xml.
  26 + * @param xml String no formato de arquivo xml.
  27 + * @param tagname String com o nome da tag a ser pesquisada.
  28 + * @return String com o conteúdo da tag pesquisada.
  29 + * @trows CACIC_Exception caso a tag não seja encontrada.
  30 + */
15 31 static string leTag(char xml[], char tagname[]);
16 32  
  33 + /**
  34 + * Troca caracteres específicos de uma string.
  35 + * @param str String a ser modificada.
  36 + * @param key String com o caractere ou conjunto de caracteres que serão substituídos.
  37 + * @param newKey String com o caractere ou conjunto de caracteres que irão substituir.
  38 + */
17 39 static void replaceAll(string &str, string key, string newkey);
18 40  
  41 + /**
  42 + * Codifica a string, removendo os caracteres especiais por %código dos mesmos.
  43 + * @param decoded String que será codificada.
  44 + */
19 45 static void urlEncode(string &decoded);
  46 +
  47 + /**
  48 + * Decodifica a string, retornando os códigos dos caracteres pelos próprios caracteres.
  49 + * @param encoded String que será decodificada.
  50 + */
20 51 static void urlDecode(string &encoded);
21 52  
  53 + /**
  54 + * Mesma função do urlEncode, porém os caracteres serão substituídos
  55 + * por tags específicas, e não pelo código.
  56 + * @param entrada String que será codificada.
  57 + */
22 58 static void simpleUrlEncode(string &entrada);
  59 +
  60 + /**
  61 + * Faz o inverso do simpleUrlEncode, trocando as tags específicas pelos
  62 + * respectivos caracteres.
  63 + * @param entrada String que será codificada.
  64 + */
23 65 static void simpleUrlDecode(string &entrada);
24 66  
  67 + /**
  68 + * Transforma o byte em codigo ascii, retornando o char correspondente.
  69 + * @param first Primeiro hexa do caractere.
  70 + * @param second Segundo hexa do caractere.
  71 + * @return Char correspondente ao código ascci encontrado.
  72 + */
25 73 static char hexToAscii(char first, char second);
  74 +
  75 + /**
  76 + * Retira os espaços em branco do começo e fim da string.
  77 + * @param str String a ser modificada.
  78 + */
26 79 static void trim(string &str);
27 80  
  81 + /**
  82 + * Método para alterar a fonte de um determinado elemento de um diálogo.
  83 + * @param dlgHandle Handler do diálogo.
  84 + * @param dlgItem Item do diálogo que terá a fonte trocada.
  85 + * @param fontSize Tamanho da fonte.
  86 + * @param fontName Nome da fonte.
  87 + * @param fontIsBold Define o peso da fonte: true = bold, false = normal.
  88 + */
28 89 static void changeFont(HWND dlgHandle, int dlgItem,
29 90 int fontSize, string fontName,
30 91 bool fontIsBold = false);
31 92  
32 93 private:
33 94  
34   - virtual void cutils() = 0; // Truque para tornar a classe abstrata.
  95 + /**
  96 + * Este método virtual puro é um truque para que a classe
  97 + * se torne abstrata e não possa ser instanciada.
  98 + */
  99 + virtual void cutils() = 0;
35 100  
36 101 };
37 102  
... ...
srcacic/WinVNC/WinVNC/resource.h
... ... @@ -144,10 +144,11 @@
144 144 #define IDC_ATENCAO_STATIC 1147
145 145 #define IDC_ATENCAO 1147
146 146 #define IDC_SRCACIC_IMG 1148
147   -#define IDC_EDIT3 1150
148 147 #define IDC_INFO_NOME 1152
149 148 #define IDC_INFO_IP 1153
150 149 #define IDC_INFO_INICIO 1154
  150 +#define IDC_STATIC_INFO_REF 1155
  151 +#define IDC_INFO_REFERENCIA 1156
151 152 #define IDC_FINGER 9000
152 153 #define IDC_GAMMAGRAY 9001
153 154 #define IDC_STATIC_SPLIT 9002
... ... @@ -229,7 +230,7 @@
229 230 #ifndef APSTUDIO_READONLY_SYMBOLS
230 231 #define _APS_NEXT_RESOURCE_VALUE 164
231 232 #define _APS_NEXT_COMMAND_VALUE 40019
232   -#define _APS_NEXT_CONTROL_VALUE 1155
  233 +#define _APS_NEXT_CONTROL_VALUE 1157
233 234 #define _APS_NEXT_SYMED_VALUE 101
234 235 #endif
235 236 #endif
... ...
srcacic/WinVNC/WinVNC/supInfoDlg.cpp
... ... @@ -89,8 +89,9 @@ BOOL CALLBACK supInfoDlg::supInfoDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
89 89 SetDlgItemText(hwnd, IDC_INFO_NOME, (LPSTR) _this->m_nomeVisitante.data());
90 90 SetDlgItemText(hwnd, IDC_INFO_IP, (LPSTR) _this->m_ip.data());
91 91 SetDlgItemText(hwnd, IDC_INFO_INICIO, (LPSTR) _this->m_dataInicio.data());
  92 + SetDlgItemText(hwnd, IDC_INFO_REFERENCIA, (LPSTR) _this->m_documentoReferencia.data());
92 93  
93   - changeFont(hwnd, IDC_ATENCAO_STATIC);
  94 + CACIC_Utils::changeFont(hwnd, IDC_ATENCAO_STATIC, 16, CACIC_Utils::F_SANS_SERIF, true);
94 95  
95 96 /*WINDOWPLACEMENT wndpl;
96 97 GetWindowPlacement(hwnd, &wndpl);
... ... @@ -149,24 +150,3 @@ BOOL CALLBACK supInfoDlg::supInfoDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
149 150  
150 151 return FALSE;
151 152 }
152   -
153   -void supInfoDlg::changeFont(HWND hwndDlg, int dlgItem)
154   -{
155   - HFONT hFont ;
156   - LOGFONT lfFont;
157   -
158   - memset(&lfFont, 0x00, sizeof(lfFont));
159   - memcpy(lfFont.lfFaceName, TEXT("Microsoft Sans Serif"), 16);
160   -
161   - lfFont.lfHeight = 16;
162   - lfFont.lfWeight = FW_BOLD;
163   - lfFont.lfCharSet = ANSI_CHARSET;
164   - lfFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
165   - lfFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
166   - lfFont.lfQuality = DEFAULT_QUALITY;
167   -
168   - // Create the font from the LOGFONT structure passed.
169   - hFont = CreateFontIndirect (&lfFont);
170   -
171   - SendMessage( GetDlgItem(hwndDlg, dlgItem), WM_SETFONT, (int)hFont, MAKELONG( TRUE, 0 ) );
172   -}
... ...
srcacic/WinVNC/WinVNC/supInfoDlg.h
... ... @@ -10,6 +10,8 @@
10 10 #include <string>
11 11 using namespace std;
12 12  
  13 +#include "CACIC_Utils.h"
  14 +
13 15 #pragma once
14 16  
15 17 class supInfoDlg {
... ... @@ -24,13 +26,13 @@ public:
24 26 string m_nomeVisitante;
25 27 string m_ip;
26 28 string m_dataInicio;
  29 + string m_documentoReferencia;
27 30  
28 31 private:
29 32 HANDLE m_hInfoDlgThread;
30 33  
31 34 static LRESULT CALLBACK supInfoDlg::showDialog(LPVOID lpParameter);
32 35 static BOOL CALLBACK supInfoDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
33   - static void changeFont(HWND hwndDlg, int dlgItem);
34 36 };
35 37  
36 38 #endif
... ...
srcacic/WinVNC/WinVNC/vncPassDlg.cpp
... ... @@ -8,22 +8,19 @@ vncPassDlg::vncPassDlg(vector&lt;Dominio&gt; &amp;listaDominios) {
8 8 m_listaDominios = listaDominios;
9 9 m_authStat = vncPassDlg::ESPERANDO_AUTENTICACAO;
10 10  
11   - memset(m_usuario, 0, 32);
12   - memset(m_senha, 0, 32);
13   - memset(m_dominio, 0, 16);
  11 + memset(m_usuario, 0, 33);
  12 + memset(m_senha, 0, 33);
  13 + memset(m_dominio, 0, 17);
14 14 }
15 15  
16 16 vncPassDlg::~vncPassDlg() {
17   - memset(m_usuario, 0, 32);
18   - memset(m_senha, 0, 32);
19   - memset(m_dominio, 0, 16);
  17 + memset(m_usuario, 0, 33);
  18 + memset(m_senha, 0, 33);
  19 + memset(m_dominio, 0, 17);
20 20 }
21 21  
22   -BOOL vncPassDlg::DoDialog(EAuthCode authStat, string msgInfo)
  22 +BOOL vncPassDlg::DoDialog()
23 23 {
24   - m_authStat = authStat;
25   - m_msgInfo = msgInfo;
26   -
27 24 BOOL retVal;
28 25 if (m_authStat == vncPassDlg::SEM_AUTENTICACAO)
29 26 {
... ... @@ -71,9 +68,9 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
71 68  
72 69 vrsBkColor = CreateSolidBrush(RGB(238, 215, 184));
73 70  
74   - changeFont(hwnd, IDC_ATT_MSG);
  71 + CACIC_Utils::changeFont(hwnd, IDC_ATT_MSG, 13, CACIC_Utils::F_SANS_SERIF, true);
75 72  
76   - SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8));
  73 + //SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8));
77 74  
78 75 // Limitando o tamanho dos campos para 32 caracteres.
79 76 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
101 98 SetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario);
102 99 SetDlgItemText(hwnd, IDC_PASS_EDIT, _this->m_senha);
103 100  
104   - SetDlgItemText(hwnd, IDC_MSG, (LPSTR) "Falha na autenticação!");
  101 + SetDlgItemText(hwnd, IDC_MSG, (LPSTR) "Falha na Autenticação!");
105 102 }
106 103 else if (_this->m_authStat == vncPassDlg::AUTENTICADO)
107 104 {
... ... @@ -142,15 +139,15 @@ BOOL CALLBACK vncPassDlg::vncAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
142 139 HWND hDominios = GetDlgItem(hwnd, IDC_DOMAIN_CB);
143 140 _this->m_indiceDominio = SendMessage(hDominios, CB_GETCURSEL, 0, 0);
144 141  
145   - memset(_this->m_usuario, 0, 32);
146   - memset(_this->m_senha, 0, 32);
147   - memset(_this->m_dominio, 0, 16);
  142 + memset(_this->m_usuario, 0, 33);
  143 + memset(_this->m_senha, 0, 33);
  144 + memset(_this->m_dominio, 0, 17);
148 145  
149 146 GetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario, 32);
150 147 GetDlgItemText(hwnd, IDC_PASS_EDIT, _this->m_senha, 32);
151 148 strcpy(_this->m_dominio, _this->m_listaDominios.at(_this->m_indiceDominio).id.c_str());
152 149  
153   - if (_this->m_usuario[0] == '\0' || _this->m_senha[0] == '\0' || _this->m_dominio[0] == '\0')
  150 + if (_this->m_usuario[0] == 0 || _this->m_senha[0] == 0 || _this->m_dominio[0] == 0)
154 151 {
155 152 MessageBox(hwnd, "Os campos devem ser preenchidos!", "Erro!", MB_ICONERROR | MB_OK);
156 153 return FALSE;
... ... @@ -228,7 +225,7 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam,
228 225  
229 226 vrsBkColor = CreateSolidBrush(RGB(238, 215, 184));
230 227  
231   - changeFont(hwnd, IDC_ATT_MSG);
  228 + CACIC_Utils::changeFont(hwnd, IDC_ATT_MSG, 13, CACIC_Utils::F_SANS_SERIF, true);
232 229  
233 230 SendMessage (hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG (8, 8));
234 231  
... ... @@ -246,11 +243,11 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam,
246 243 {
247 244 int ulen = GetWindowTextLength(GetDlgItem(hwnd, IDC_USER_EDIT));
248 245  
249   - memset(_this->m_usuario, '\0', 32);
  246 + memset(_this->m_usuario, 0, 33);
250 247  
251 248 GetDlgItemText(hwnd, IDC_USER_EDIT, _this->m_usuario, 32);
252 249  
253   - if (_this->m_usuario[0] == '\0')
  250 + if (_this->m_usuario[0] == 0)
254 251 {
255 252 MessageBox(hwnd, "O campo deve ser preenchido.", "Erro!", MB_ICONERROR | MB_OK);
256 253 return FALSE;
... ... @@ -297,24 +294,3 @@ BOOL CALLBACK vncPassDlg::vncNoAuthDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam,
297 294  
298 295 return FALSE;
299 296 }
300   -
301   -void vncPassDlg::changeFont(HWND hwndDlg, int dlgItem)
302   -{
303   - HFONT hFont ;
304   - LOGFONT lfFont;
305   -
306   - memset(&lfFont, 0x00, sizeof(lfFont));
307   - memcpy(lfFont.lfFaceName, TEXT("Microsoft Sans Serif"), 24);
308   -
309   - lfFont.lfHeight = 13;
310   - lfFont.lfWeight = FW_BOLD;
311   - lfFont.lfCharSet = ANSI_CHARSET;
312   - lfFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
313   - lfFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
314   - lfFont.lfQuality = DEFAULT_QUALITY;
315   -
316   - // Create the font from the LOGFONT structure passed.
317   - hFont = CreateFontIndirect (&lfFont);
318   -
319   - SendMessage( GetDlgItem(hwndDlg, dlgItem), WM_SETFONT, (int)hFont, MAKELONG( TRUE, 0 ) );
320   -}
... ...
srcacic/WinVNC/WinVNC/vncPassDlg.h
... ... @@ -7,20 +7,29 @@
7 7  
8 8 #include "stdhdrs.h"
9 9 #include "resource.h"
  10 +
10 11 #include "vncPasswd.h"
  12 +
11 13 #include <vector>
12 14 using namespace std;
13 15 #include <string>
14 16 using namespace std;
15 17  
  18 +#include "CACIC_Utils.h"
  19 +
16 20 //extern int MAX_VNC_CLIENTS;
17 21  
18 22 #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."
19 23  
20 24 #pragma once
21 25  
22   -// struct referente a um domínio
  26 +/**
  27 + * Struct referente a um domínio de autenticação.
  28 + */
23 29 struct Dominio {
  30 + Dominio(string p_id, string p_nome) : id(p_id), nome(p_nome) {}
  31 + Dominio() : id(""), nome("") {}
  32 +
24 33 string id;
25 34 string nome;
26 35 };
... ... @@ -36,22 +45,20 @@ public:
36 45 vncPassDlg(vector<Dominio> &listaDominios);
37 46 virtual ~vncPassDlg();
38 47  
39   - char m_usuario[32]; // nome de usuário
40   - char m_senha[32]; // senha de usuário
41   - char m_dominio[16]; // id do domínio selecionado
  48 + char m_usuario[33]; // nome de usuário
  49 + char m_senha[33]; // senha de usuário
  50 + char m_dominio[17]; // id do domínio selecionado
42 51  
43 52 vector<Dominio> m_listaDominios;
44 53  
45 54 EAuthCode m_authStat;
  55 + string m_msgInfo;
46 56  
47   - BOOL DoDialog(EAuthCode authStat, string msgInfo);
  57 + BOOL DoDialog();
48 58  
49 59 private:
50 60 static BOOL CALLBACK vncAuthDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
51 61 static BOOL CALLBACK vncNoAuthDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
52   - static void changeFont(HWND hwndDlg, int dlgItem);
53   -
54   - string m_msgInfo;
55 62  
56 63 UINT m_indiceDominio; // índice selecionado no combobox de domínios
57 64 };
... ...
srcacic/WinVNC/WinVNC/vncclient.cpp
... ... @@ -643,7 +643,8 @@ vncClientThread::InitAuthenticate()
643 643 // verifica o técnico que está querendo logar e o adiciona na lista.
644 644 if (!CACIC_Auth::getInstance()->validaTecnico(nm_usuario_cli, te_senha_cli,
645 645 te_node_address_cli, te_documento_referencial,
646   - te_motivo_conexao, te_so_cli, m_client->GetClientId()))
  646 + te_motivo_conexao, te_so_cli,
  647 + m_client->GetClientId(), m_socket->GetPeerName()))
647 648 {
648 649 auth_ok = FALSE;
649 650 }
... ...
srcacic/WinVNC/WinVNC/winvnc.cpp
... ... @@ -269,8 +269,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
269 269 CACIC_Auth::getInstance()->setTempPath(cmdln[5]);
270 270  
271 271 // Cria o arquivo temporário de travamento do CACIC
272   - string filePath = cmdln[5];
273   - filePath += AGUARDE_FILENAME;
  272 + string filePath = string(cmdln[5]);
  273 + filePath += CACIC_Auth::AGUARDE_FILENAME;
274 274 pFile = fopen(filePath.data(), "w+");
275 275 vnclog.Print(LL_SRLOG, VNCLOG("Criando arquivo temporário: aguarde_SRCACIC.txt!\n"));
276 276  
... ... @@ -290,6 +290,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
290 290 stringstream portBuffer(cmdln[6]);
291 291 portBuffer >> porta;
292 292 CACIC_Auth::getInstance()->setPorta(porta);
  293 + UINT timeout;
  294 + stringstream timeoutBuffer(cmdln[7]);
  295 + timeoutBuffer >> timeout;
  296 + CACIC_Auth::getInstance()->setTimeout(timeout);
293 297  
294 298 if (CACIC_Auth::getInstance()->autentica()) {
295 299 iniciaTimer();
... ... @@ -524,6 +528,7 @@ int WinVNCAppMain()
524 528 // Set the name and port number
525 529 server.SetName(szAppName);
526 530 server.SetPort(CACIC_Auth::getInstance()->getPorta());
  531 + server.SetAutoIdleDisconnectTimeout(CACIC_Auth::getInstance()->getTimeout());
527 532 server.SockConnect(TRUE);
528 533 vnclog.Print(LL_STATE, VNCLOG("Servidor inicializado com sucesso!\n"));
529 534 //uninstall driver before cont
... ... @@ -531,10 +536,6 @@ int WinVNCAppMain()
531 536 // sf@2007 - Set Application0 special mode
532 537 server.RunningFromExternalService(fRunningFromExternalService);
533 538  
534   - // colocando uma referência do servidor na classe CACIC_Auth
535   - // para facilitar o acesso e a mudança de propriedades posteriormente.
536   - //CACIC_Auth::getInstance()->m_server = &server;
537   -
538 539 // sf@2007 - New impersonation thread stuff for tray icon & menu
539 540 // Subscribe to shutdown event
540 541 hShutdownEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\SessionEventUltra");
... ...
srcacic/WinVNC/WinVNC/winvnc.rc
... ... @@ -95,35 +95,37 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIB
95 95 CAPTION "Aceitar conexão?"
96 96 FONT 8, "MS Shell Dlg", 0, 0, 0x0
97 97 BEGIN
98   - DEFPUSHBUTTON "&Aceitar",IDACCEPT,7,142,53,21
  98 + DEFPUSHBUTTON "&Aceitar",IDACCEPT,7,142,57,21
99 99 PUSHBUTTON "&Rejeitar",IDREJECT,178,142,53,21
100 100 CTEXT "srCACICsrv recebeu uma tentativa de conexão de:",IDC_STATIC_TEXT1,7,3,224,16,SS_CENTERIMAGE
101 101 LTEXT "<desconhecido>",IDC_ACCEPT_IP,69,28,162,10,SS_CENTERIMAGE
102 102 CTEXT "Você deseja aceitar a conexão?",IDC_STATIC_TEXT,7,126,224,16,SS_CENTERIMAGE
103   - CTEXT "Rejeitar:",IDC_ACCEPT_TIMEOUT,60,142,118,21,SS_CENTERIMAGE
  103 + CTEXT "Rejeitar:",IDC_ACCEPT_TIMEOUT,64,142,114,21,SS_CENTERIMAGE
104 104 LTEXT "<desconhecido>",IDC_UVIS_NAME,69,17,162,8
105 105 EDITTEXT IDC_MOTIVO_SUPORTE,7,64,224,62,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN
106 106 LTEXT "Motivo do Suporte:",IDC_STATIC,7,54,62,8
107 107 LTEXT "Endereço IP:",IDC_STATIC,7,29,42,8
108   - LTEXT "Nome do Técnico:",IDC_STATIC,7,17,53,8
109   - LTEXT "Doc. Referência:",IDC_STATIC,7,41,55,8
  108 + LTEXT "Nome do Técnico:",IDC_STATIC,7,17,57,8
  109 + LTEXT "Doc. Referência:",IDC_STATIC,7,41,57,8
110 110 EDITTEXT IDC_DOC_REF,68,41,163,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
111 111 END
112 112  
113   -IDD_INFO_DLG DIALOGEX 0, 0, 261, 51
  113 +IDD_INFO_DLG DIALOGEX 0, 0, 261, 62
114 114 STYLE DS_SYSMODAL | DS_SETFONT | DS_FIXEDSYS | WS_POPUP
115 115 EXSTYLE WS_EX_PALETTEWINDOW | WS_EX_DLGMODALFRAME | WS_EX_NOPARENTNOTIFY | WS_EX_ACCEPTFILES | WS_EX_TRANSPARENT | WS_EX_MDICHILD
116 116 FONT 8, "MS Shell Dlg", 400, 0, 0x0
117 117 BEGIN
118 118 CTEXT "ESTAÇÃO DE TRABALHO EM SUPORTE REMOTO",IDC_AVISO_SUPORTE,54,12,205,11
119 119 CTEXT "ATENÇÃO",IDC_ATENCAO_STATIC,54,2,205,10
120   - CONTROL 163,IDC_SRCACIC_IMG,"Static",SS_BITMAP,0,2,51,47
121 120 LTEXT "Nome:",IDC_STATIC,54,22,24,8
122 121 LTEXT "IP:",IDC_STATIC,54,32,10,8
123   - LTEXT "Início:",IDC_STATIC,54,41,20,8
  122 + LTEXT "Início:",IDC_STATIC,54,42,20,8
124 123 LTEXT "",IDC_INFO_NOME,78,23,181,8,0,WS_EX_TRANSPARENT
125 124 LTEXT "",IDC_INFO_IP,78,32,181,8,0,WS_EX_TRANSPARENT
126 125 LTEXT "",IDC_INFO_INICIO,78,41,181,8,0,WS_EX_TRANSPARENT
  126 + LTEXT "Doc. Referência:",IDC_STATIC_INFO_REF,54,51,57,8
  127 + LTEXT "",IDC_INFO_REFERENCIA,111,51,148,8
  128 + CONTROL 163,IDC_SRCACIC_IMG,"Static",SS_BITMAP,0,0,54,62
127 129 END
128 130  
129 131  
... ... @@ -189,7 +191,7 @@ BEGIN
189 191 BEGIN
190 192 LEFTMARGIN, 7
191 193 RIGHTMARGIN, 231
192   - VERTGUIDE, 60
  194 + VERTGUIDE, 64
193 195 VERTGUIDE, 69
194 196 VERTGUIDE, 178
195 197 TOPMARGIN, 7
... ... @@ -203,8 +205,9 @@ BEGIN
203 205 BEGIN
204 206 VERTGUIDE, 54
205 207 VERTGUIDE, 78
  208 + VERTGUIDE, 111
206 209 VERTGUIDE, 259
207   - BOTTOMMARGIN, 49
  210 + BOTTOMMARGIN, 60
208 211 HORZGUIDE, 2
209 212 HORZGUIDE, 10
210 213 HORZGUIDE, 49
... ... @@ -219,8 +222,8 @@ END
219 222 //
220 223  
221 224 VS_VERSION_INFO VERSIONINFO
222   - FILEVERSION 2,5,0,800
223   - PRODUCTVERSION 2,5,0,800
  225 + FILEVERSION 2,5,0,804
  226 + PRODUCTVERSION 2,5,0,804
224 227 FILEFLAGSMASK 0x37L
225 228 #ifdef _DEBUG
226 229 FILEFLAGS 0x25L
... ... @@ -237,11 +240,11 @@ BEGIN
237 240 BEGIN
238 241 VALUE "CompanyName", "Dataprev - Unidade Regional Espírito Santo"
239 242 VALUE "FileDescription", "Módulo Suporte Remoto Seguro do Sistema CACIC"
240   - VALUE "FileVersion", "2, 5, 0, 800"
  243 + VALUE "FileVersion", "2, 5, 0, 804"
241 244 VALUE "InternalName", "srCACICsrv"
242 245 VALUE "LegalCopyright", "Copyright © 2008 DATAPREV"
243 246 VALUE "LegalTrademarks", "srCACIC"
244   - VALUE "ProductVersion", "2, 5, 0, 800"
  247 + VALUE "ProductVersion", "2, 5, 0, 804"
245 248 END
246 249 END
247 250 BLOCK "VarFileInfo"
... ... @@ -390,7 +393,7 @@ BEGIN
390 393 DEFPUSHBUTTON "OK",ID_POK,55,130,50,13
391 394 PUSHBUTTON "Cancelar",ID_PCANCELAR,117,130,50,13
392 395 COMBOBOX IDC_DOMAIN_CB,84,59,83,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
393   - CTEXT "v2.5.0.800",IDC_AUTHDLG_VERSION,187,145,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE
  396 + CTEXT "v2.5.0.804",IDC_AUTHDLG_VERSION,187,145,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE
394 397 CTEXT "Por favor, preencha as informações solicitadas abaixo, para a autenticação de seu usuário.",IDC_AUTH_INFO,3,38,216,18
395 398 EDITTEXT IDC_MSG,3,111,216,17,ES_CENTER | ES_MULTILINE | ES_READONLY | NOT WS_BORDER
396 399 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
406 409 EDITTEXT IDC_USER_EDIT,69,58,83,12,ES_AUTOHSCROLL
407 410 DEFPUSHBUTTON "OK",ID_POK,45,76,45,13
408 411 PUSHBUTTON "Cancelar",ID_PCANCELAR,102,76,45,13
409   - CTEXT "v2.5.0.800",IDC_AUTHDLG_VERSION,159,90,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE
  412 + CTEXT "v2.5.0.804",IDC_AUTHDLG_VERSION,159,90,36,8,SS_CENTERIMAGE,WS_EX_STATICEDGE
410 413 CTEXT "Por favor, digite seu nome no campo abaixo.",IDC_AUTH_INFO,3,46,188,10
411 414 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
412 415 END
... ...