Newsgroup: it.comp.lang.perl
Titolo: upload

Ciao, Uso Linux ePerl 5.004
Ora ho questo semplicissimo file .html
<html>
<form method="get"
action="
http://ziobudda.enter.it/cgi-bin/xxx.pl
">
<input type=hidden value="123dfg567hj" name="codice">
<table>
<tr>
<td>Nome file sul sito</td><td><input type=text maxsize=20
name="nome_file">
</tr>
<tr>
<td>File da immettere</td><td><input type=file
name="filetodownload"></td></tr>
</table>
<input type="submit">
<input type="reset">
<form>
che mi richiama uno script cgi in cui io voglio far si che il file passato
(type=file) sia scritto sul server.
Ma quando apro il file (open) la open mi muore (open or die "muori").
Come mai?
lo script e' un suidperl. la directory di destinazione e' /tmp
Chi mi aiuta?
ciaoz
Ho talmente fame che il mio stomaco fa tutt'uno con la spina dorsale
--
Michel <ZioBudda> Morelli		  
mic...@michel.enter.it
 
http://ziobudda.enter.it
Italian Linux FAQ                  
http://ziobudda.enter.it/FAQ/


If you think C++ is not overly complicated, just what is a protected
abstract virtual base pure virtual private destructor, and when was the last
time you needed one?
                -- Tom Cargil, C++ Journal, Fall 1990

 Chi mi aiuta?
Che ne dici di farti dare (e darci) dei messaggi di errore significativi?
open (PINCO, $pincopallo) or 
     die "Errore: Non posso aprire il file $pincopallo: $!";
Il messaggio dovrebbe cosi' finire nel log del server.
Con qualche elaborazione te lo puoi far mandare al browser.
$! dovrebbe dirti cosa e' andato storto.
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

Ora tutto funziona
Uso             
open (OUTFILE,">> $file_down") or die("Non posso aprire il file --");
            while ($bytesread=read($filetodown,$buffer,1024)) {
                  print OUTFILE $buffer;
e riesco a scrivere il file che mi viene passato tramite un form.
Pero' ora mi sorge un altro problema. Devo controllare che l'utente che mi
spedisce il file sia presente in .htpasswd (uso Apache) e che la password
datami in un form sia corretta.
Riesco a prendere l'utente, ma come faccio a controllare la password??
Ho letto HTTPD::Authen e Apache::User-Manage ma non ci ho capito nulla..
chi mi aiuta questa volta?
"Non è importante che tu sia crotalo o pavone, l'importante è che
se tu muori me lo dici prima". (Cèlv)


 Riesco a prendere l'utente, ma come faccio a controllare la password??
 Non basta l'autenticazione che fa il server?
 Se proprio vuoi confrontare tu la password e questa e' in chiaro, 
 basta che usi la funzione crypt() e confronti il risultato con quello
 del file .htpasswd
 Esempi sull'uso di crypt() dovrebbero essere nella manpage e nell'FAQ.


  Esempi sull'uso di crypt() dovrebbero essere nella manpage e nell'FAQ.
Ma non sono identiche.
Ci ho provato e non sono per nulla identiche...
Saluti al mondo intero, ed anche a quello parzialmente scremato.


  del file .htpasswd
non e' uguale.
infatti:
ifABXm8a2RvGZug -- mi6Trw90iCp0Y 
la prima e' quella salvata, mentre la seconda e' quella che creo io
con crypt("aa", $password)


On 8 Jun 1999, Maurizio M. Munafo` wrote:
[snip]
Volevo solamente correggere: uso crypt (password, salto) e non
crypt(salto, password);
Sul Grande Mazinger girava Linux, su Boss Robot un sistema operativo 
Microsoft.


 Ci ho provato e non sono per nulla identiche...
Dovrebbero.
Verifico e ti dico.


 Verifico e ti dico.
Verificato. Ricordavo che c'era un trucco nell'uso del 'salt'.
Il 'salt' sono le prime due lettere della password criptata, quindi, se la 
password criptata presa dal .htpasswd e' 
BvmNNJ1Sh1yA6
devi usare
 crypt("password_in_chiaro","Bv");
 
Questo in genere funziona sia con le password di passwd, sia con quelle di
.htpasswd, dal momento che usano lo stesso algoritmo.
Al tempo zero, la password viene creata con un salt casuale.
Questo fatto, in effetti, e' mostrato nell'esempio di crypt()
              $pwd = (getpwuid($<))[1];
              $salt = substr($pwd, 0, 2);
ma non viene chiaramente specificato.
Spero che ora sia tutto a posto


 con crypt("aa", $password)
Prova con crypt($password, "if").
Il salt va messo dopo la password in crypt() e corrisponde alle
prime due lettere della password criptata.
Quindi
$salt = substr($passwd, 0, 2);
if (crypt("pippo", $salt) eq $passwd) { print qq!La password è "pippo"!; }
Consiglio `man perlfunc'
Ciao,
Valerio
--
-------------------------------------------------------
 
http://www.livenet.it
Hosting - Housing - Accesso ad Internet
                      0815625909
         03395452296 03394733180
-------------------------------------------------------

 wrote:
: non e' uguale.
: infatti:
: ifABXm8a2RvGZug -- mi6Trw90iCp0Y 
: la prima e' quella salvata, mentre la seconda e' quella che creo io
: con crypt("aa", $password)
Deve esserci qualcosa di tremendamente sbagliato (a parte l'ordine dei
parametri della crypt :-): se cripti qualcosa usando "aa" come salt, i
primi due caratteri del risultato *devono* essere "aa".
-- 
Nando Santagata: Telemastica & infornatica
Key fingerprint = C2 D9 C0 8E D5 B7 04 97  AF E8 3F 3E AF 4E 7F 9E
finger nando (at) mail (dot) ipers (dot) net   for my PGP public key
Home: 
http://www.ipers.net/~nandos