Schrift
[thread]11768[/thread]

Eine Login-Shell über ein Link aufmachen (Seite 2)



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
moritz
 2008-05-07 13:49
#109346 #109346
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
D.h. der Host, auf dem das xterm läuft, baut eine eigene Verbindung zum Client auf? Das erklärt natürlich einiges... (und wird bei NAT-Routing leider nicht klappen)

Zu dem forken: Es kann sein, dass man im child noch STDOUT und STDERR schliessen muss, bevor man system oder exec aufruft, weil Apache sonst wartet.
pq
 2008-05-07 14:24
#109348 #109348
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
moritz+2008-05-07 11:49:13--
Zu dem forken: Es kann sein, dass man im child noch STDOUT und STDERR schliessen muss, bevor man system oder exec aufruft, weil Apache sonst wartet.

und STDIN.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
rewal
 2008-05-07 16:12
#109371 #109371
User since
2007-11-26
8 Artikel
BenutzerIn
[default_avatar]
@nepos: der Parent wird aber auf das Beenden des Child-Processes warten oder?
nepos
 2008-05-07 16:38
#109388 #109388
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Muss er nicht zwingend meine ich.
rewal
 2008-05-07 17:04
#109395 #109395
User since
2007-11-26
8 Artikel
BenutzerIn
[default_avatar]
Also ich habe das jetzt ausprobiert. Der Child soll das ganze mit dem "rsh " und so weiter erledigen, der Parent gibt HTML aus:
...
#! /usr/bin/perl
BEGIN { unshift @INC, '/home/bin/perl/lib'; }
use CGI::Carp qw(fatalsToBrowser);
use CGI;

# get the parameters
my $cgi=new CGI();
my $USER=$cgi->param('user');
my $HOST=$cgi->param('host');
my $IP=$cgi->param('ip_address');

my $child=fork();

if ($child == 0)
{
close STDIN;
close STDOUT;
close STDERR;
qx(rsh -l $USER $HOST xterm -sb -ls -geometry 80x24 -display $IP:0.0);
}
else
{
# get the html output here
# the site will immediately redirect to the referer site
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";

print "<html><head><title>Login $USER\@$HOST</title>\n";
print "<meta http-equiv=\"refresh\" content=\"0; URL=".$cgi->referer()."\">\n";
print "</head><body></body>\n";
print $cgi->end_html;
exit 0;
}

...
Und das funktioniert! Danke für eure Hilfe!
P.S. Inzwieschen hatte ich noch eine Möglichkeit gefunden: ich starte mit einer Javascript-Funktion mein CGI-Skript in einem neuen Fenster und schließe sofort diesen Fenster;-) Ist zwar ein bisschen schmutzug aber funktioniert auch;-)
pq
 2008-05-07 17:43
#109401 #109401
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
rewal, du hast was vergessen. im child immer ein exit machen. du hast zwar hier nur
einen else-block, nachdem nichts mehr kommt, aber das kann sich sehr schnell ändern,
und da vergisst man das fork(), da man sowas nicht im kopf hat, dass da code von
2 prozessen durchlaufen wird. deshalb sollte man sich immer angewöhnen, das
exit gleich hinzuschreiben.
oder noch besser, gleich exec() nehmen (aber auch da für den fehlerfall ein exit
hinter). das wäre jedenfalls besser als das qx(). denn qx() ist dafür gedacht, dir
den output zurückzugeben, aber du machst ja gar nix mit dem output.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
rewal
 2008-05-07 17:49
#109402 #109402
User since
2007-11-26
8 Artikel
BenutzerIn
[default_avatar]
Ja, das hat Sinn!
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2008-05-07 11:30.