Problem mit Perl Modul in CGI Script


Hallo zusammen.

Mal wieder stehe ich vor einem Problem !

Ich habe ein Modul (CONAN.pm) geschrieben für die Verwaltung von ISDN und
VPN Verbindungen aus einer LDAP Datenbank heraus. Zusätzlich gibt es
es ein Webinterface das dieses Modul benutzt, dabei werde viele HTML
Seiten aus Perl heraus generiert.

Nun Zum Problem.

Ich beutze z.B in einem kleinen Script wie diesem mein Modul:



Code:
!/usr/bin/perl 

use Net::CONAN;
use Net::LDAP;

#     Verbindung zu LDAP-Server aufbauen.
#****************************************************************
   $ldap = Net::LDAP->new("localhost");
   $mesg = $ldap->bind("cn=adin, o=Schaal", password=>"amin");
   
#  LDAP Referenz und Bais Conan übergeben.   
   $retcode = CONAN->useLDAP(ldap=>$ldap,base=>"o=Schaal");
   
   # Nach Fehlern prüfen.
   if_error($retcode);

#     Neues Verbindungsdaten-Objekt erstellen 
#****************************************************************
   $retcode = CONAN->new("isdn","verbindungsname","kunde");

   # Nach Fehlern prüfen.
   $connOBJ = if_error($retcode);


Die Methode aus dem CONAN Modul sieht wie folgt aus. Die Aufgabe ist
lediglich zum testen eine SFTP Verbindung aufzubauen.


Code:
sub set_onHost {

   my $self = shift;
   my %param = @_;
   
     
   if( $self->{type} eq "isdn" ){
      print "ok1";   
   
      $sftp = Net::SFTP->new("localhost", debug=>1, user=>"root", password=>"1983_sv_MA");
      
      print "ok2";
   
        
   }elsif( $self->{type} eq "vpn"){
      .
      .   
   }
}


Das ergebniss ist eine korret aufgebaut SFTP Verbindung mit der ich dann ganz normal
Dateie kopieren kann etc.

Jetzt aber endlich mal das eigentliche Problem:

Wenn ich das selbe Script wie oben in einem CGI Script benutze funktioniert es nicht
und das zweite "OK2" bekomme ich nicht zu gesicht (das erste aber schon.)

Zur vollständigkeit das CGI Script:



Code:
#!/usr/bin/perl 


#***************************************************************#
#                       INITIALISIERUNG                         #
#***************************************************************#


#                   Benötigte Module laden.
#****************************************************************
use CGI;
use Net::CONAN;
use Net::CONAN::Search;
use Net::LDAP;


#           Neues CGI Objekt erstellen und Vorbereiten.
#****************************************************************
$q = new CGI;

# HTML Header hinzufügen.
print $q->header;

# HTML Document beginnen.
print $q->start_html(-name=>'listConnection');


%auth_ldap = $q->cookie(-name=>'auth_ldap');

if(!defined %auth_ldap){
   print $q->h3("Es besteht noch keine LDAP Verbindung aufgebaut");
   exit;
}

#     Verbindung zu LDAP-Server aufbauen und Conan übergeben. 
#****************************************************************
$ldap = Net::LDAP->new("$auth_ldap{host}");
$mesg = $ldap->bind("$auth_ldap{user}", password=>"$auth_ldap{pass}");
 
#Conan die neue Verbindung und Suchbasis übergeben.
$retcode = CONAN->useLDAP(ldap=>$ldap,base=>"o=Schaal");
 
#Nach Fehlern prüfen.
if_error($retcode,$q);

 
#      Auslesen der vom HTTP-Client übergebenen Variablen.
#****************************************************************

# Für Baissuiche nötige Variablen auslesen.
$name     = $q->param('name')    ;
$customer = $q->param('customer');
$type     = $q->param('type')    ;
$conn_nr  = $q->param('choose')  ;
 

#***************************************************************#
#                       HAUPTPROGRAMM                           #
#***************************************************************#

#     Neues Verbindungsdaten-Objekt erstellen 
#****************************************************************
$ret = CONAN->new($type,$name,$customer);

# Nach Fehlern prüfen.
$connOBJ = if_error($ret);
   

$connOBJ->set_onHost(host=>"localhost", user=>"foo", password=>"xxx");
   
#        Anzeigen der Optionen für ein Verbindung 
#****************************************************************
$return = $connOBJ->get_option(); 
%result = $return->result;


#          Ausgeben der Tabelle mit den Optionen 
#****************************************************************
 
# Tabele einleiten und Überschrift definieren  
print   qq{<table rules=none border valign="top" align="center" hight=100% width=100%>
         <tr>
            <th colspan=2>
               <h3><br>Auflistung der Optionen f&uuml;r Nr.: $conn_nr<br></h3>
            </th>
         </tr>};

print qq{<form action="/cgi-bin/modify.pl" method="POST" target="right">};
            
foreach $type (keys %result) {
   # Optionstyp auslesen.
   $href = $result{$type};
      
   print qq{<tr>
               <td bgcolor=#E0E0E0 colspan=2>
                  Optionen f&uuml;r $type
               </td>
            </tr>};
   
   # Für jedes Attribute-Werte Paar zwei Tabellenspalten in einer
   # Tabellenzeile ausgeben .         
   foreach (keys %$href){
      $input = qq{<input name="$_" value="$result{$type}->{$_}"> };
      print "<tr>
                <td>$_</td>
                <td>$input</td>
             </tr>";
   }
      # Leere Tabellenzeile als Trennung zwischen Optionstypen.
      print "<tr ><td colspan=2>&#160</td></tr>";
   }

# Tabelle beenden.
print "</table>";


print qq{<table align="center">
         <tr>
            <td><input type="submit" name="submit" value="OK" align="right"></td>
         </tr>
         
         <input type="hidden" name="name" value="$name">
         <input type="hidden" name="customer" value="$customer">
         <input type="hidden" name="type" value="$type">
         </form>
         </table>};   

# HTML Dokument abschließen.


print $q->end_html;


 
   
#***************************************************************#
#                       SUBROUTINEN                             #
#***************************************************************#


sub if_error (){
#Prüft ob in Conan ein Fehler passiert ist. 
#Es muss 1. Das zu testende CONAN::Retcode Objekt
#und 2.das zu benutzende CGI Objekt übergeben werden.
#****************************************************************
   
   my $to_test = shift;   
   my $cgi_out = shift;
   
   # - Returncode Prüfen und bei Fehler Programm verlassen 
   if ($to_test->code != 0) {
      print $cgi_out-> h2( $to_test->error );
      exit;
   }
   return $to_test->result();   
}

exit;


Ich hoffe es kann mir jemand einen Tip geben.
 
*) Fange Fehlermeldungen ab und poste sie hier - vielleicht mal bei dem Verbindungsaufbau Net::SFTP->new() or die $!
*) verstecke das Passwort, das im Conan-Modul eingetragen ist vor der Öffentlichkeit
 

Neue Beiträge

Zurück