[FUGSPBR] Troca de senha pela browser

Augusto Fabiano Torres torres em cle.unicamp.br
Ter Set 14 11:17:52 BRT 2004


Oi Pessoal,
Farei o seguinte ... Enviarei para a lista, o melhor repositório 
intelectual que existe  ;-)
Este é um script em python que portei do Linux (feito por Helio 
Loureiro) para o FreeBSD.
Achei muito fácil de entender e pequeno.
= = = =
Instalação do poppassd
cd /usr/ports/mail/poppassd/
make install & clean
cd /etc
pico inetd.conf (ou editor preferido)
Inserir esta linha:
pop3pw  stream  tcp     nowait  root    /usr/local/libexec/poppassd     
poppassd
man poppassd (para saber mais sobre os comandos do poppassd)

Reinicialize o inetd:
maquina# ps -ax | grep inetd
maquina# kill -9 <pid> , onde <pid> e' o numero do processo
maquina# /usr/sbin/inetd

Agora faça um teste para ver se está rodando o poppassd:
maquina# telnel localhost 106
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
200 poppassd v1.2 hello, who are you?
(ok ... está rodando)

Bom agora o script:
Crie um arquivo com este script no cgi-bin
Crie um Formulário em html para coletar os dados e passar para o 
mudasenha.cgi no método post,
passando os seguintes dados (login, senha, novasenha, novasenhavrf)

Sobre a questão de segurança:
É muito importante fazer uma conexão ssl para este arquivo. Assim v. se 
assegura que este passa dados
encriptados pela rede.
Se já tem rodando então é so inrserir esta linha no httpd.conf
<VirtualHost _default_:80>
Redirect /troca-senha.htm       https://www.cle.unicamp.br/troca-senha.htm
</VirtualHost>

Para saber mais sobre o https, dá uma olhada no histórico da lista que 
tem um passo-a-passo que enviei
de como instalar via pacotes. Tem soluções através do ports também.
Boa sorte
[]'s
Augusto
------------------------------- (cut ) --------------------------

#! /usr/local/bin/python
# -*- coding: iso-latin-1 -*-
# $Id: mudasenha.cgi,2004/09/14 Augusto Torres $
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 
USA.
#################
#       Para rodar este aqui, é preciso ter o interpretador python e o
#    poppasswd na porta 106 rodando.

class Main:

       def __init__(self):
               from sys import exit,stdout
               import cgi
                      form = cgi.FieldStorage()
               if not form.has_key("login"):
                       stdout.write("Content-type: text/html\n\n")
                       stdout.write('Faltou login<P>\n')
                       stdout.write("<P>Volte e tente novamente.")
                       exit(0)
               elif not form.has_key("senha"):
                       stdout.write("Content-type: text/html\n\n")
                       stdout.write('Faltou senha\n')
                       exit(0)
               elif not form.has_key("novasenha"):
                       stdout.write("Content-type: text/html\n\n")
                       stdout.write('Faltou a nova senha\n')
                       exit(0)
               elif not form.has_key("novasenhavrf"):
                       stdout.write("Content-type: text/html\n\n")
                       stdout.write('Faltou a verificação de senha\n')
                       exit(0)
               elif form['novasenha'].value != form['novasenhavrf'].value:
                       stdout.write("Content-type: text/html\n\n")
                       stdout.write('Senha não confere com verificação\n')
                       exit(0)

               self.user=form['login'].value
               self.passwd=form['senha'].value
               self.newpass=form['novasenha'].value

# Echo client program

       def pop_socket(self):

               #from socket import *
               import socket
        import sys
               from sys import exit,stdout
               HOST = '127.0.0.1'          # poppasswd server (hostname 
or IP)
               PORT = 106                   # poppasswd port (106 default)
        s = None
        for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, 
socket.SOCK_STREAM):
               af, socktype, proto, canonname, sa = res

               try:
                       stdout.write("Content-type: text/html\n\n")
                s = socket.socket(af, socktype, proto)
                       s.connect(sa)
                       data = s.recv(1024)
                       stdout.write(data)
                       stdout.write("<br>\nEnviando login...<br>\n")
                       s.send('user '+ self.user + '\n')
                       data = s.recv(1024)
                       stdout.write(data)
                       stdout.write("\n<Br>Enviando senha antiga...<br>\n")
                       s.send('pass ' + self.passwd + '\n')
                       data = s.recv(1024)
                       stdout.write(data)
                       stdout.write("\n<br>Enviando nova senha...<br>\n")
                       s.send('newpass ' + self.newpass + '\n')
                       data = s.recv(1024)
                       stdout.write(data)
                       s.send('quit\n')
                       data = s.recv(1024)
                       s.close()
                       stdout.write("<br>")
                       stdout.write(data)
               except:
                       stdout.write("<p>")
                       stdout.write("Servidor não permitiu alteração de 
senha")
                       stdout.write("<p>Entre em contato com o 
administrador do sistema")
                       stdout.write("e informe o erro encontrado.<p>")
                       exit(1)
               exit(0)
objeto=Main()
objeto.pop_socket()

from sys import stdout

stdout.write('Content-type: text/html\n\n')
stdout.write('Teste do python\n')
------------------------------- (cut ) --------------------------


Jefferson Pereira wrote:

> Alguem possui algum script ou programa para alterar a senha pelo 
> browser ?
>
> Atenciosamente
>
> Jefferson Pereira
> jefferson em blong.com.br 
> _______________________________________________________________
> Para enviar um novo email para a lista: fugspbr em fugspbr.org
> Sair da Lista: http://lists.fugspbr.org/listinfo.cgi
> Historico: http://www4.fugspbr.org/lista/html/FUG-BR/

-- 
=================================================================
Augusto Fabiano Torres		 e-mail: torres at cle.unicamp.br
Analista de Suporte / Administrador de Redes
Centro de Logica, Epistemologia e Historia da Ciência (CLE)
Universidade Estadual de Campinas (UNICAMP)
\_______________________________________________________________/
|"   Nem sempre precisamos ser gênios em tudo que fazemos  ...  |
|algumas vezes ter um pouco de sorte já basta"(Autor - Eu mesmo)|
'==============================================================='

_______________________________________________________________
Para enviar um novo email para a lista: fugspbr em fugspbr.org
Sair da Lista: http://lists.fugspbr.org/listinfo.cgi
Historico: http://www4.fugspbr.org/lista/html/FUG-BR/



Mais detalhes sobre a lista de discussão freebsd