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

Status das tabelas: SPED050 e SPED052

STATUS DA TABELA SPED050: Status NFe (campo STATUS) :  1 = NFe Recebida.  2  =  NFe Assinada.  3  =  NFe com falha no schema XML.  4  =  NFe transmitida.  5  =  NFe com problemas.  6  =  NFe autorizada.  7  =  Cancelamento. Status Cancelamento/inutilização (campo STATUSCANC) :  1  =  NFe Recebida.  2  =  NFe Cancelada.  3  =  NFe com falha de cancelamento/inutilização. Status Mail (campo STATUSMAIL) :  1  =  A transmitir.  2  =  Transmitido.  3  =  Bloqueio de transmissão – cancelamento/inutilização. STATUS DO SPED052:  1  =  Lote transmitido.  2  =  Lote recebido com sucesso.  3  =  Lote com erro.

Protheus integrado ao Active Directory (Single SignOn)

Usando a integração do usuário do Protheus com o Active Directory (AD): 1) O ambiente deve estar atualizado (RPO, Update, LIB e Binário). 2) Entre no Configurador / Usuários / Senhas / Política. 3) Na primeira aba, em Parâmetros, defina no como "Habilitar single sign-on" se a integração será obrigatória ou opcional. 4) No combo "Modalidade de Single Sign-on", defina como "Active Directory". Clique em Confirmar. 5) Agora vá ao cadastro do usuário (Usuário / Senhas / Usuários), clique sobre o usuário e clique em Alterar. Na primeira aba (Usuário), selecione a aba Active Directory. 6) Clique duas vezes sobre o campo abaixo de "Domínio", e preencha o domínio da rede.  Clique duas vezes sobre o campo abaixo de "Usuário", e preencha o nome de usuário da rede que ficará vinculado a este usuário do Protheus. Clique em Confirmar. Ao entrar no Protheus, já irá aparecer por padrão o dom...

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...