[FUGSPBR] Troca de senha

Clebson Derivan Ferreira Paz clebson em brfree.com.br
Qua Jun 27 20:03:00 BRT 2001


vc tem que fazer algumas adaptações.

[]'s
Clebson Derivan

----- Original Message -----
From: "Thiago Pinto Damas" <thiago em vetorialnet.com.br>
To: <fugspbr em fugspbr.org>
Sent: Wednesday, June 27, 2001 12:06 PM
Subject: Re: [FUGSPBR] Troca de senha


> Interessa sim, se puderes mandar agradeco desde jah!!
>
> []'s
>
>
> Thiago Pinto Damas - SysAdmin
> ----------------------------------------------------------------
> http://www.vetorialnet.com.br http://www.ecomp.furg.br
> thiago em vetorialnet.com.br thiago em ecomp.furg.br
>
> On Tue, 26 Jun 2001, Clebson Derivan wrote:
>
> > tenho um pronto em perl. vc só vai ter que alterar pq ta com logo da
> > empresa. interessa ??
> >
> > ----- Original Message -----
> > From: "Thiago Pinto Damas" <thiago em vetorialnet.com.br>
> > To: <fugspbr em fugspbr.org>
> > Sent: Tuesday, June 26, 2001 8:04 PM
> > Subject: [FUGSPBR] Troca de senha
> >
> >
> > > Alguem sabe algum lugar aonda ja tenha pronto um cgi para troca de
> > > senha no free?
> > > []'s
> > >
> > > Thiago Pinto Damas - SysAdmin
> > > ----------------------------------------------------------------
> > > http://www.vetorialnet.com.br http://www.ecomp.furg.br
> > > thiago em vetorialnet.com.br thiago em ecomp.furg.br
> > >
> > > ----
> > > Para sair da lista envie um e-mail para majordomo em fugspbr.org
> > > com as palavras "unsubscribe fugspbr" no corpo da mensagem.
> > >
> >
> > ----
> > Para sair da lista envie um e-mail para majordomo em fugspbr.org
> > com as palavras "unsubscribe fugspbr" no corpo da mensagem.
> >
>
> ----
> Para sair da lista envie um e-mail para majordomo em fugspbr.org
> com as palavras "unsubscribe fugspbr" no corpo da mensagem.
>
PGP Fingerprint: 87B9 6306 D469 5A11 6A57  3B2F CC04 0279 50A2 9308
-------------------------------
http://www.brfree.com.br - O primeiro provedor gratuito do Brasil
-------------- Próxima Parte ----------
#!/usr/bin/perl
# Troca de senha via web.
# by Clebson Derivan clebson em grupora.com,br


$ENV{PATH} = '/bin:/usr/bin'; 
$ENV{IFS} = ''; 

$| = 1; 

use CGI qw/:standard :html3/; 

print header, 
        start_html(-title=>'Grupo R.A. - Senha de e-mail',-bgColor=>'#cccccc'), 

import_names('Q'); 

TRY: { 
    last TRY unless $Q::user; 
    my ($rv,$msg) = valida_campos(); 
    do_error($msg),last TRY unless $rv; 


    ($rv,$msg) = troca_senha($Q::user,$Q::old,$Q::new1); 
    do_error($msg),last TRY unless $rv; 


    print $msg; 
    $OK++; 
} 


cria_tela() unless $OK; 
end_html; 


sub valida_campos { 
    return (undef,'Preencha o campo user name.') unless $Q::user; 
    return (undef,'Preencha o campo senha atual.') unless $Q::old; 
    return (undef,'Prencha os campos para nova senha.') unless $Q::new1 && $Q::new2; 
    return (undef,"A nova senha e a senha confirmada não coincidem. digiti-as novamente.") unless $Q::new1 eq $Q::new2; 
#    return (undef,"User name suspeito $Q::user.") unless $Q::user=~/^\w{3,8}$/; 
    return (undef,'Senha atual suspeita.') unless length($Q::old) < 30; 
    return (undef,'Nova senha suspeita.') unless length($Q::new1) < 30; 
    my $uid = (getpwnam($Q::user))[2]; 
    return (undef,"Usuario desconhecido $Q::user.") if $uid eq ''; 
    return (undef,"Impossivel mudar a senha do root via web.") if $uid == 0; 
    return 1; 
} 


sub troca_senha ($$$) { 
    use Expect; 

    $Expect::Log_Stdout = 0; 
#    $Expect::Debug = 1; 
#    $Expect::Exp_Internal = 1; 

    my $TIMEOUT = 2; 
    my $DELAY = 1;
    my $PASSWD = "/usr/bin/passwd"; 
    my $SU = '/bin/su'; 

    my($user,$old,$new) = @_; 

#   essa linha muda de acordo com o sitemas operacional
    my $passwd = Expect->spawn("$SU $user -c \"$PASSWD $user\"") || return (undef,"Impossivel executar $SU $user -c $PASSWD");

    my $rv = $passwd->expect($TIMEOUT, 
                        "Password:", 
                        "Sorry", 
                        "Unknown id: $user"); 
    $rv || return (undef,"Senha atual incorreta."); 
    $rv == 2 && return (undef,"Senha atual incorreta."); 
    $rv == 3 && return (undef,"Usuario $user desconhecido."); 

    sleep($DELAY);
    print $passwd "$old\r";
	
    $rv = $passwd->expect($TIMEOUT,
			"Changing password for $user\r\n(current) UNIX password:","Sorry");
    $rv == 2 && return (undef,"Senha atual incorreta."); 

    sleep($DELAY);
    print $passwd "$old\r";
	
    $rv = $passwd->expect($TIMEOUT, "Enter new UNIX password:", "Sorry.");
    $rv || return (undef,"interno: 0001, contate o administrador de rede."); 
    $rv == 2 && return (undef,"Senha atual incorreta."); 

    sleep($DELAY);
    print $passwd "$new\r";
	    
    $rv = $passwd->expect($TIMEOUT, "Retype new UNIX password:");
    $rv || return (undef,"interno: 0002, contate o administrador de rede."); 

    sleep($DELAY);
    print $passwd "$new\r";
	    
    $rv = $passwd->expect($TIMEOUT, "passwd: password updated successfully",
    "Bad: new and old password are too similar",
    "Bad: new password is too short",
    "Bad: new password is too simple");
    
    $rv || return (undef,"interno: 0003, contate o administrador de rede."); 
    $rv == 2 && return (undef,"A nova e a senha anterior são muito parecidas.");
    $rv == 3 && return (undef,"A nova senha é muito pequena.");
    $rv == 4 && return (undef,"A nova senha é muito simples.");
  
    $passwd->hard_close(); 
    return (1,"Senha trocada com sucesso para o usuario: $Q::user."); 
} 


sub cria_tela { 
  print 
  table({-height=>'100%',-width=>'100%',-cellSpacing=>0,-cellPadding=>0,-border=>0,-valign=>'center'},
    TR({-align=>'center'},
      td({-aling=>'middle'},
          table({-border=>3,-width=>'470',-bqColor=>'white',-cellSpacing=>0,-cellPadding=>0},
            TR(
              td({-bgColor=>'white'},
                table({-border=>0,-bqColor=>'white',-cellSpacing=>0,-cellPadding=>5},
        	  TR(
                    td({-align=>'left',-bgColor=>'#11375e',-colSpan=>2},
		    font({-face=>'helvetica,arial',-color=>'white',-size=>'+1'},'Senha de e-mail')),
	          ),
        	  TR(
		    td(img {src=>'/ralogo.gif',width=>180}),
		    td({-vAlign=>'top'},
		      font({-face=>'helvetica,arial', -size=>'1'}, 'Caro Usuário,<br>A Senha para o e-mail deve ter 8 dígitos<br>Não utilize senhas fáceis, pois isso pode comprometer sua privacidade. Não divulgue sua senha a terceiros.'),
            	      table({-border=>0,-bgColor=>'white'},
		        start_form, 
			TR(  
			  TR(
                            TR(
			        td({-bqColor=>'white'},font({-face=>'helvetica,arial',-size=>'1'},'Nome Usuário')), 
				td({-bqColor=>'white'},textfield(-name=>'user'))
			      ),
                            TR(
			        td({-bqColor=>'white'},font({-face=>'helvetica,arial',-size=>'1'},'Senha atual')),
			        td({-bqColor=>'white'},password_field(-name=>'old'))
			      ), 
                            TR(
			        td({-bqColor=>'white'},font({-face=>'helvetica,arial',-size=>'1'},'Nova Senha')),
				td({-bqColor=>'white'},password_field(-name=>'new1'))
			      ), 
                            TR(
			        td({-bqColor=>'white'},font({-face=>'helvetica,arial',-size=>'1'},'Confirme nova senha')),
				td({-bqColor=>'white'},password_field(-name=>'new2'))
			      ),
        		    hidden(-name=>'referer',-value=>referer()), 
              		    TR(td({-align=>'LEFT',-COLSPAN=>2, -ALIGN=>'RIGHT',-BGCOLOR=>'white'},font({-face=>'helvetica,arial'}, submit('Trocar')))), 
			    
    			end_form,

 		          ),
 		        ),
 		      ),
 		    ),
		  ),
		),
	      ), 
	    ),
	  ),
       ),
    ),
  ),
} 

sub do_error ($) { 
    print "<CENTER><FONT COLOR='red' SIZE='+1' face='helvetica,arial'>"; 
    print b('Error: '),shift," A senha não foi modificada."; 
    print "</FONT></CENTER>"; 
} 

 



Mais detalhes sobre a lista de discussão freebsd