Pular para o conteúdo principal

Pegando senhas dos usuários do Protheus 8

Para você que é ADMIN e, numa emergência, precise de uma rotina para pegar as senhas dos seus usuários do Protheus 8, segue uma rotina que faz isso e grava tudo num arquivo texto, sem criptografia. A rotina lê o arquivo SIGAPASS.SPF e grava o arquivo DADOSU.TXT na pasta TEMP (que deve ser criada dentro da pasta do Protheus). O arquivo contém o nome reduzido, senha e mais alguns dados. Use com responsabilidade:
 user function PegaSenhas()
    local aPswDet := "",;
    cArquivo, cPswFile := "sigapss.spf", cRBSFConct := cPswId := cPswName := cPswPwd := cPswDet := cUserId := "",;
    lEncrypt := .f.,;
    nArquivo, nPswRec := 0, nRBSFrec := SPF_RecCount(cPswFile, 1)
   psworder(1)
  
   for nId := 1 to nRBSFrec
     cUserId := strzero(nId,6)
     nPswRec := spf_seek(cPswFile,"1U"+cUserId, 1)
     if nPswRec > 0
       spf_getfields(cPswFile, nPswRec, @cPswId, @cPswName, @cPswPwd, @cPswDet)
       aPswDet := str2array(cPswDet, lEncrypt)
       aPswDet[1][3] := PswEncript(aPswDet[1][3],1)
       cRBSFConct += aPswDet[1][2] +""+ aPswDet[1][3] +""+ aPswDet[1][4] +""+ aPswDet[1][13] + chr(13) + chr(10)
     endif
    next

    cArquivo := cFilant + "DADOSU.TXT"
    nArquivo := fcreate("\TEMP\" + cArquivo, 0)
    if ferror() # 0
     msgalert ("ERRO AO CRIAR O ARQUIVO, ERRO: " + str(ferror()))
    else
     fwrite(nArquivo, cRBSFConct)
     if ferror() # 0
       msgalert ("ERRO AO GRAVAR NO ARQUIVO, ERRO: " + str(ferror()))
     endif
    endif
    fclose(nArquivo)
  return nil  

Comentários

  1. Bom dia, estou com problema nesta linha
    spf_getfields(cPswFile, nPswRec, @cPswId, @cPswName, @cPswPwd, @cPswDet)

    ele não reconhece, tem algum include para funcionar??

    obrigado

    João Zabotto
    jzabotto.analista@gmail.com

    ResponderExcluir
  2. Boa tarde.
    ao executar esta função: nPswRec := spf_seek(cPswFile,"1U"+cUserId, 1)
    o retorno é sempre -1.
    Somente com o usuario 000000 (administrador) é que o retorno é igual a 1.

    Tem alguma dica?

    tt.
    alexandre

    ResponderExcluir
  3. Qual a sua versão do Protheus? Adianto que na versão 10 em diante algumas funções destas foram alteradas ou descontinuadas pela TOTVS.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Teclas de Atalhos TOTVS Developer Studio (Eclipse)

Seguem os atalhos para o TOTVS Developer Studio  (Eclipse)  : CTRL+H Localizar vários locais CTRL+F Localizar / substituir CTRL+K Localizar proximo resultado abaixo CTRL+SHIFT+K Localizar proximo resultado acima F11 Depurar F5 Percorre linha F6 Pula linha CTRL+F8 Trocar perspectiva CTRL+F7 Mudar visualização CTRL+F6 Navegar entre os fontes abertos CTRL+M Maximiza / miniminiza fonte CTRL+N Novo (wizard) CTRL+L Ir para linha CTRL+D Deleta toda linha CTRL+ALT+DOWN Duplica linha para baixo CTRL+ALT+UP Duplica linha para cima CTRL+SHIFT+L Apresenta lista de atalhos ALT+UP Move linha para cima ALT+DOWN Move linha para baixo CTRL+SHIFT+I Indenta o fonte CTRL+F9 Compilar CTRL+ESPAÇO A

Variáveis públicas do Protheus

Variáveis Públicas Disponíveis no Protheus: Nome Tipo Tamanho Descrição aEmpresas (A) Array contendo tantos elementos quanto forem as empresas e filiais cadastradas no sistema sendo que cada elemento se encontra no formato “EEFF” (Empresa + Filial) Ex.: “5501”. cAcesso (C, 128) Permissões de Acesso do Usuário. cEmpAnt (C, 2) Número da Empresa que está em uso no momento. Ex.: "55". cModulo (C, 3) Sigla do Módulo que está em uso no momento. Ex.: "EST" para o Módulo de Estoque. cNivel (N, 1) Nível de Acesso do Usuário podendo variar de 0 a 9 sendo que 9 indica um Administrador. cNumEmp (C, 4) Número da Empresa + Filial que está em uso no momento. Ex.: "9901". cSenha (C, 6) Senha do Usuário. cUserName (C, 15) Nome do Usuário sem brancos a direita. cUsuario (C, 533) Informações do usuário:de 001 a 006 – Senha do Usuário (6 dígitos)de 007 a 021 – Nome do Usuário (15 dígitos)de 022 a 533 – Permissões de Acesso (512 dígitos) dDataBa

Impressão com imagens no Protheus

Muitas vezes é necessário incluir uma imagem num relatório (uma logomarca por exemplo). Uma das maneiras de se fazer isto, é usar a classe TMSPRINTER() . O programa exemplo abaixo, ilustra bem como fazer. Este usa também a classe TFONT() (o tamanho do fonte leva o sinal de menos) : # include "PROTHEUS.CH" # include "RWMAKE.CH" user function fImprimeG() local oFont08 := tfont():New( 'Courier new' ,, -8, .t.),,; oFont09 := tfont():New( 'Courier new' ,, -9, .t.),,; oFont10 := tfont():New( 'Courier new' ,,-10, .t.) oPrint:=tmsprinter():new( "Impressao Grafica" ) oPrint:setportrait() oPrint:SetpaperSize(9) // PAPEL A4 if .not. oPrint:Setup() // MOSTRA JANELA DE CONFIGURAÇÃO DE IMPRESSAO msgalert( "IMPRESSAO CANCELADA." ) return nil endif // ESTE BLOCO PODE FICAR EM LOOP (DO WHILE, FOR..., ETC.) oPrint:StartPage() // oPrint:sayBitmap(linha, coluna, "C:\SUAPASTA\SUAIMAGEM.BMP", largura, al