IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Per donar d'alta i baixa usuaris al Htpasswd Password Manager V1.1 es realitza per via navegador.

El programa és:

 #!/usr/bin/perl
 
 ################################################################
 #             Htpasswd Password Manager V1.1
 #
 # This program is distributed as freeware. We are not
 # responsible for any damages that the program causes
 # to your system. It may be used and modified free of
 # charge, as long as the copyright notice
 # in the program that give me credit remain intact.
 # If you find any bugs in this program. It would be thankful
 # if you can report it to us at cgifactory@cgi-factory.com.
 # However, that email address above is only for bugs reporting.
 # We will not  respond to the messages that are sent to that
 # address. If you have any trouble installing this program,
 # olease feel free to post a message on our CGI Support Forum.
 # Selling this script is absolutely forbidden and illegal.
 ##################################################################
 #
 #               COPYRIGHT NOTICE:
 #
 #         Copyright 1999-2000 CGI-Factory.com TM
 #                 A subsidiary of SiliconSoup.com LLC
 #
 #
 #      Web site: http://www.cgi-factory.com
 #      E-Mail: cgifactory@cgi-factory.com
 #      Released Date: April 1, 2000
 #
 #   Htpasswd Password Manager V1.1 is protected by the copyright
 #   laws and international copyright treaties, as well as other
 #   intellectual property laws and treaties.
 #################################################################
 
 require "cfg.pl";
 read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
 @pairs = split(/&/, $buffer);
 foreach $pair (@pairs) {
       ($name, $value) = split(/=/, $pair);
       $value =~ tr/+/ /;
       $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 
       $input{$name} = $value;
 }
 
 print "Content-type: text/html\n\n";
 # Per evitar que agafi les p�gines de la cache del navegador
 print '<META http-equiv="Cache-Control" CONTENT="no-cache, must-revalidate">';
 print '<META http-equiv="Pragma" CONTENT="no-cache">';
 print '<META http-equiv="Expires" CONTENT="Mon,26 Jul 1997 05:00:00 GMT">';
 
 $passfile = join(, $passfile, $input{'fitxer'});
 
 if ($input{'action'} eq "adduser") {
   &adduser;
 }
 if ($input{'action'} eq "deluser") {
 &deluser;
 }
 
 print <<EOF;
 
 <html>
 <head>
 <title>
 Gestor fitxers de passwords
  </title>
 </head>
 <body bgcolor="#ffffff">
 
 
<form action="htpasswd.pl" method="post">
Afegir un usuari nou?
Nom d'usuari<input type="Text" name="username" size="20" maxlength="20">
Password<input type="password" name="password1" size="20" maxlength="20">
Password repetida<input type="password" name="password2" size="20" maxlength="20">
Fitxer de passwords<input type="Text" name="fitxer" size="20" maxlength="20">
Password d'administrador<input type="password" name="apassword" size="20" maxlength="20">
<input type="hidden" name="action" value="adduser">
 <input type="submit" value="Afegir">
</form>

<form action="htpasswd.pl" method="post">
Eliminar un usuari?
Nom d'usuari<input type="Text" name="username" size="20" maxlength="20">
Fitxer de passwords<input type="Text" name="fitxer" size="20" maxlength="20">
Password d'administrador<input type="password" name="apassword" size="20" maxlength="20">
<input type="hidden" name="action" value="deluser">
 <input type="submit" value="Eliminar">
</form>

*Majúscules i minúscules són diferents dins del nom d'usuari i password.
 </body>
 </html>
 EOF
 exit;


 # Rutina per afegir un usuari
 sub adduser {
 open (data, "<$passfile");
 # || &error("No es pot obrir el fitxer de passwords");
 if ($flock eq "y") {
   flock data, 2;
 }
 @data=;
 close(data);
 
 foreach $data(@data) {
  @datax=split(/:/, $data);
  unless ($input{'username'} ne "@datax[0]" or $input{'username'} != @datax[0]){
    print "El nom d'usuari \"$input{'username'}\" ja s'ha utilitzat.";
    exit;
   }
 }
 if (!$input{'password1'} or !$input{'password2'}) {
   print "Si us plau, no deixies la password en blanc!";
   exit;
 }
 if ($input{'password1'} ne "$input{'password2'}" or $input{'password1'} != $input{'password2'}){
  print "Has entrat dos passwords diferents. Intenta-ho una altra vegada!";
  exit;
 }
 $password = crypt($input{'password1'}, "YL");
 open (wdata, ">>$passfile") or &error("No es pot escriure en el fitxer de passwords");
 if ($flock eq "y") {
 flock wdata, 2;
 }
 print wdata "$input{'username'}:";
 print wdata "$password\n";
 close(wdata);
 print "S'ha afegit un usuari nou.";
 exit;
 }
 
 
 # Rutina per eliminar un usuari
 sub deluser {
 &vpassword;
 open (data, "<$passfile") or &error("No es pot obrir el fitxer de passwords");
 if ($flock eq "y") {
 flock data, 2;
 }
 @data=<data>;
 close(data);
 $count=0;
 foreach $data(@data) {
 $count++;
 @datax=split(/:/, $data);
 if ($input{'username'} eq "@datax[0]" and $input{'username'}== "@datax[0]") {
   $count--;
   splice (@data, $count, 1);
 open (wdata, ">$passfile") or &error("No es pot escriure en el fitxer de passwords");
   if ($flock eq "y") {
     flock wdata, 2;
   }
   print wdata @data;
   close(wdata);
 
   print "S'ha eliminat l'usuari \"$input{'username'}\" del fitxer de passwords.\n";
   exit;
 }
 }
 print "No s'ha trobat l'usuari\n";
 exit;
 }
 
 
 # Rutina per imprimir el missatge d'error
 sub error {
 print "Ha esdevingut un error: 
$_[0]
\n"; print "$!\n"; exit; }


 # Rutina per comprovar la password d'administrador
 sub vpassword{
 
 open (PASS,"pass.dat") || &error("No es pot obrir el fitxer de passwords pass.dat");
 if ($flock eq "y") {
   flock PASS, 2;
 }
 $pass = <PASS>;
 close(PASS);
 
 $input{'apassword'}=~ tr/A-Z/a-z/;
 $pass2 = crypt($input{'apassword'}, "YL");
 unless ($pass eq "$pass2") {
 $timenow=localtime();
 
       print "Logon incorrecte. Utilitza el botó Enrrera per tornar-ho a intentar.
"; print "La password que has entrat és incorrecte.
"; print "La seguent informació ha estat enviada al webmaster del web site
";
print "Les teves dades:
    $ENV{'REMOTE_HOST'}
"; print "
    Password: $input{'apassword'}
"; print "
    Hora: $timenow
";
       print "</body></html>";
 
 if ($alert eq "y") {
   if ($yourmail=~ tr/;<>*|`&$!#()[]{}:'"//) {
       print "Alerta de seguretat! Acció cancelada.
\n"; print "Si us plau, no utilitzis símbols extranys\n"; exit; } open (MAIL, "|$mailprog -t") or &error("No es pot obrir el programa de correu"); print MAIL "To: $yourmail\n"; print MAIL "From: $yourmail\n"; print MAIL "Subject: Password equivocada\n"; print MAIL "Et faig saber que algu ha introduit una password\n"; print MAIL "incorrecte en el script d'administracio d'usuaris.\n"; print MAIL "Aquestes son les seves dades:\n\n"; print MAIL "$ENV{'REMOTE_ADDR'}\n"; print MAIL "Password: $request{'password'}\n"; print MAIL "$timenow\n"; close(MAIL); exit; } exit; } }
 open (PASS,"pass.dat") || &error("No es pot obrir el fitxer de passwords pass.dat");
 if ($flock eq "y") {
   flock PASS, 2;
 }
 $pass = <PASS>;
 close(PASS);
 
 $input{'apassword'}=~ tr/A-Z/a-z/;
 $pass2 = crypt($input{'apassword'}, "YL");
 unless ($pass eq "$pass2") {
 $timenow=localtime();
 
       print "Logon incorrecte. Utilitza el botó Enrrera per tornar-ho a intentar.
"; print "La password que has entrat és incorrecte.
"; print "La seguent informació ha estat enviada al webmaster del web site
";
print "Les teves dades:
    $ENV{'REMOTE_HOST'}
"; print "
    Password: $input{'apassword'}
"; print "
    Hora: $timenow
";
       print "</body></html>";
 
 if ($alert eq "y") {
   if ($yourmail=~ tr/;<>*|`&$!#()[]{}:'"//) {
       print "Alerta de seguretat! Acció cancelada.
\n"; print "Si us plau, no utilitzis símbols extranys\n"; exit; }

Altes

Ens apareixerà un formulari on omplirem la següent informació:

  • Nom d'usuari Username. El nom que utilitzarà per entrar
  • Password La clau
  • Password repetida Validació de la clau
  • Fitxer de passwords El fitxer que es vol utilitzar per guardar la clau. Si aquest fitxer no existeix es crea.
  • Password d'administrador La clau de l'administrador que permet donar d'alta a usuaris

Anotació: Al donar d'alta, majúscules i minúscules són diferents dins del nom d'usuari i password.

Baixes

  • Nom d'usuari El nom de l'usuari que volem donar de baixa.
  • Fitxer de passwords El fitxer a on es troba aquest usuari
  • Password d'administrador La clau de l'administrador que permet donar de baixa a usuaris


Una vegada hem donat d'alta o baixa un usuari, ens apareixarà un missatge de confirmació. Si el volem tornar a executar el programa, actualitzem htpasswd.pl