WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Linux, UNIX, Open Source (http://www.wcm.at/forum/forumdisplay.php?f=13)
-   -   perl Problem (http://www.wcm.at/forum/showthread.php?t=102693)

K@sperl 15.07.2003 17:11

perl Problem
 
Ich hab auf meiner Linux Box Zaval FileSearch installiert, mit diesem Programm kann ich im Netzwerk diverse FTP Server scannen und dann via Web-Interface nach Dateien suchen
http://www.zaval.org/products/file-search/

Nun hab ich dem Entwickler geschrieben, ob es nicht möglich sei, für jeden FTP Server User, Passwort und Port anzugeben, also in der Form ftp://user:pass@host:port

Er hat mir auch zurückgeschrieben welche Änderungen ich in der Datei, die den Hostscan macht, vornehmen soll, leider jedoch ist der Code nicht korrekt und von perl hab ich überhaupt keine Ahnung ...

Hier mal ein Ausschnitt des Quellcodes welchen mir der Entwickler geschickt hat
Code:

        my $port = '21', $login, $pwd;
        if( $host =~ /\@/ ){
            $login = $host;
            if( $host =~ /\@(.)+\:/ ){
                ($host, $port) = split(':', $host);
            }
            $login =~ s/\@(.)+$//;
            ($login,$pwd) = split(':', $login);
            $ftp = Net::FTP->new($host, Port=>$port);
            $ftp->login($login, $pwd) if (defined $ftp);
        }
        else{
            $ftp = Net::FTP->new($host);
            $ftp->login($ENV{"FTP_USER"},$ENV{"FTP_PASSWORD"}) if (defined $ftp);
        }

Es geht hier nun darum, auf den FTP zuzugreifen (mit User und Pass). Eingetragen werden die zu scannenden FTPs in eine Datei. Ich hab nun mal probiert, eine FTP einzutragen (in die Datei), in der Form ftp://IP, also müßte das Programm in den else Zweig springen, das macht es aber anscheinend nicht, da nichts ausgegeben wird (im Normalfall werden alle Dateien und Verzeichnis in ein File geschrieben, welches dann durchsucht werden kann).


Hier der Link zum gesamten File
http://www.geraldholl.cc/scan-host.pl.txt

FIREwaLKER 15.07.2003 17:57

Welche Meldung gibt der Interpreter aus wenn du das Programm startest?

K@sperl 15.07.2003 18:00

Keine, sprich kein Syntax Fehler ...

_m3 15.07.2003 18:01

Hat mich wer gerufen? ;)

Du musst den Code schon in das Script einbauen, sonst klappt es nicht! ;)

Ab Zeile 207 in deinem Code:
Code:

        # The result file has the following structure:
        # {File=>F, Dir=>D}:{date:optional}:size:full path

        $ftp = Net::FTP->new($host);
        if (defined $ftp) {
            $ftp->login($ENV{"FTP_USER"},$ENV{"FTP_PASSWORD"});

ersetzen durch
Code:

        # The result file has the following structure:
        # {File=>F, Dir=>D}:{date:optional}:size:full path

        my $port = '21', $login, $pwd;
        if( $host =~ /\@/ ){
            $login = $host;
            if( $host =~ /\@(.)+\:/ ){
                ($host, $port) = split(':', $host);
            }
            $login =~ s/\@(.)+$//;
            ($login,$pwd) = split(':', $login);
            $ftp = Net::FTP->new($host, Port=>$port);
            $ftp->login($login, $pwd) if (defined $ftp);
        }
        else{
            $ftp = Net::FTP->new($host);
            $ftp->login($ENV{"FTP_USER"},$ENV{"FTP_PASSWORD"}) if (defined $ftp);
        }

Die Umgebungsvariablen FTP_USER und FTP_PASSWORD sind gesetzt?

_m3 15.07.2003 18:10

Ich werde nie wieder gleichzeitig Perl-coden und telefonieren.
Ich werde nie wieder gleichzeitig Perl-coden und telefonieren.
Ich werde nie wieder gleichzeitig Perl-coden und telefonieren.
Ich werde nie wieder gleichzeitig Perl-coden und telefonieren.

Der richtige neue Code lautet:
Code:

        # ORI.m3: $ftp = Net::FTP->new($host);
        # ORI-m3: if (defined $ftp) {
        # ORI.m3:    $ftp->login($ENV{"FTP_USER"},$ENV{"FTP_PASSWORD"});

        my $port = '21', $login, $pwd;
        if( $host =~ /\@/ ){
            $login = $host;
            if( $host =~ /\@(.)+\:/ ){
                ($host, $port) = split(':', $host);
            }
            $login =~ s/\@(.)+$//;
            ($login,$pwd) = split(':', $login);
            $ftp = Net::FTP->new($host, Port=>$port);
            $ftp->login($login, $pwd) if (defined $ftp);
        }
        else{
            $ftp = Net::FTP->new($host);
            $ftp->login($ENV{"FTP_USER"},$ENV{"FTP_PASSWORD"}) if (defined $ftp);
        }
       
        if (defined $ftp) {
            @list=$ftp->ls("-lR");


K@sperl 15.07.2003 18:19

@m3
geht leider auch noch nicht ...

Wenn ich in der Datei keinen User und pass angebe, dann verbindet er sich zum FTP, gebe ich jedoch User und pass an, dann verbindet er sich überhaupt nicht zum Server ...

_m3 15.07.2003 18:38

Wie gibst du es denn an?

K@sperl 15.07.2003 18:40

ftp://user:pass@IP

K@sperl 15.07.2003 18:50

Ich hab jetzt mal mittels einer print Anweisung $login und $pwd ausgegeben, die sind korrekt, jedoch der Port wird noch falsch erkannt ... Aber warum erfolgt kein Login trotz korrekten Users und Passwortes?

edit: ich hab den Fehler, bei $port steht immer passwort@IP drinnen ... nur was is da falsch?

edit2: Auch die IP passt nicht, in der Var. $host steht immer der username drin

K@sperl 15.07.2003 19:22

Soda, jetzt hab ich's gelöst:

Code:

        my $port = '21', $login, $pwd;
        if( $host =~ /\@/ ){
            $login = $host;
            if( $host =~ /\@(.)+\:/ ){
                ($test, $host) = split('@', $host);
                ($host, $port) = split(':', $host);
            }
            else {
            ($test, $host) = split('@', $host); 
            }
            $login =~ s/\@(.)+$//;
            ($login,$pwd) = split(':', $login);
            $ftp = Net::FTP->new($host, Port=>$port);
            $ftp->login($login, $pwd) if (defined $ftp);
        }
        else{
            $ftp = Net::FTP->new($host);
            $ftp->login($ENV{"FTP_USER"},$ENV{"FTP_PASSWORD"}) if (defined $ftp);
        }



Alle Zeitangaben in WEZ +2. Es ist jetzt 14:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag