summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/interactive_http
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2001-08-07 19:42:58 +0000
committerPascal Rigaux <pixel@mandriva.com>2001-08-07 19:42:58 +0000
commit6907585cf10bf56cc1d1124a6a909956c31e4139 (patch)
tree887178b034f92ac14aaa953ab4bafa1f488e52c2 /perl-install/standalone/interactive_http
parent99d9dfd2992113e3162d7bc259b301a355738c4b (diff)
downloaddrakx-backup-do-not-use-6907585cf10bf56cc1d1124a6a909956c31e4139.tar
drakx-backup-do-not-use-6907585cf10bf56cc1d1124a6a909956c31e4139.tar.gz
drakx-backup-do-not-use-6907585cf10bf56cc1d1124a6a909956c31e4139.tar.bz2
drakx-backup-do-not-use-6907585cf10bf56cc1d1124a6a909956c31e4139.tar.xz
drakx-backup-do-not-use-6907585cf10bf56cc1d1124a6a909956c31e4139.zip
add interactive_http
Diffstat (limited to 'perl-install/standalone/interactive_http')
-rw-r--r--perl-install/standalone/interactive_http/Makefile16
-rwxr-xr-xperl-install/standalone/interactive_http/interactive_http.cgi92
-rw-r--r--perl-install/standalone/interactive_http/miniserv.conf13
-rw-r--r--perl-install/standalone/interactive_http/miniserv.init51
-rw-r--r--perl-install/standalone/interactive_http/miniserv.pam5
-rw-r--r--perl-install/standalone/interactive_http/miniserv.pl16
-rw-r--r--perl-install/standalone/interactive_http/miniserv.users1
7 files changed, 186 insertions, 8 deletions
diff --git a/perl-install/standalone/interactive_http/Makefile b/perl-install/standalone/interactive_http/Makefile
new file mode 100644
index 000000000..535d06d99
--- /dev/null
+++ b/perl-install/standalone/interactive_http/Makefile
@@ -0,0 +1,16 @@
+NAME=libDrakX
+FNAME=$(NAME)/drakxtools_http
+PREFIX=
+DATADIR=$(PREFIX)/usr/share
+
+all:
+
+install:
+ install -D miniserv.init $(PREFIX)/etc/init.d/drakxtools_http
+ install -D -m 644 miniserv.conf $(PREFIX)/etc/drakxtools_http.conf
+ install -D -m 644 miniserv.pam $(PREFIX)/etc/pam.d/miniserv
+
+ install -d $(DATADIR)/$(FNAME)/www
+ install -m 644 miniserv.pl miniserv.pem miniserv.users $(DATADIR)/$(FNAME)
+ install -m 644 index.html $(DATADIR)/$(FNAME)/www
+ install interactive_http.cgi $(DATADIR)/$(FNAME)/www
diff --git a/perl-install/standalone/interactive_http/interactive_http.cgi b/perl-install/standalone/interactive_http/interactive_http.cgi
new file mode 100755
index 000000000..cb184300a
--- /dev/null
+++ b/perl-install/standalone/interactive_http/interactive_http.cgi
@@ -0,0 +1,92 @@
+#!/usr/bin/perl
+
+use lib qw(/usr/lib/libDrakX);
+use CGI;
+use common;
+use c;
+
+my $q = CGI->new;
+$| = 1;
+
+my $script_name = $q->url(-relative => 1);
+
+# name inversed (must be in sync with interactive_http.html)
+my $pipe_r = "/tmp/interactive_http_w";
+my $pipe_w = "/tmp/interactive_http_r";
+
+if ($q->param('state') eq 'new') {
+ force_exit_dead_prog();
+ mkfifo($pipe_r); mkfifo($pipe_w);
+
+ spawn_server($q->param('prog'));
+ first_step();
+
+} elsif ($q->param('state') eq 'next_step') {
+ next_step();
+} else {
+ error("booh...");
+}
+
+sub read_ {
+ local *F;
+ open F, "<$pipe_r" or error("Failed to connect to the prog");
+ my $t;
+ print $t while sysread F, $t, 1;
+}
+sub write_ {
+ local *F;
+ open F, ">$pipe_w" or die;
+ my $q = CGI->new;
+ $q->save(\*F);
+}
+
+sub first_step { read_() }
+sub next_step { write_(); read_() }
+
+
+sub force_exit_dead_prog {
+ -p $pipe_w or return;
+ {
+ local *F;
+ sysopen F, $pipe_w, 1 | c::O_NONBLOCK() or return;
+ syswrite F, "force_exit_dead_prog=1\n";
+ }
+
+ my $cnt = 10;
+ while (-p $pipe_w) {
+ sleep 1;
+ $cnt-- or error("Dead prog failed to exit");
+ }
+}
+
+sub spawn_server {
+ my ($prog) = @_;
+
+ fork and return;
+
+ $ENV{INTERACTIVE_HTTP} = $script_name;
+
+ open STDIN, "</dev/zero";
+ open STDOUT, ">/dev/null"; #tmp/log";
+ open STDERR, ">&STDOUT";
+
+ c::setsid();
+ exec $prog or die "prog $prog not found\n";
+}
+
+sub error {
+ my $msg = join '', @_;
+
+ print $q->header(), $q->start_html();
+ print $q->h1(_("Error")), @_;
+ print $q->end_html(), "\n";
+ exit 0;
+}
+
+sub mkfifo {
+ my ($f) = @_;
+ -p $f and return;
+ unlink $f;
+ syscall_('mknod', $f, c::S_IFIFO() | 0600, 0) or die "mkfifo failed";
+ chmod 0666, $f;
+}
diff --git a/perl-install/standalone/interactive_http/miniserv.conf b/perl-install/standalone/interactive_http/miniserv.conf
new file mode 100644
index 000000000..99f6a5172
--- /dev/null
+++ b/perl-install/standalone/interactive_http/miniserv.conf
@@ -0,0 +1,13 @@
+ssl=1
+log=1
+port=10001
+listen=10001
+forkcgis=1
+realm=Drakxtools Server
+
+addtype_cgi=internal/cgi
+logfile=/var/log/drakxtools_http.log
+pidfile=/var/run/drakxtools_http.pid
+root=/usr/share/libDrakX/drakxtools_http/www
+keyfile=/usr/share/libDrakX/drakxtools_http/miniserv.pem
+userfile=/usr/share/libDrakX/drakxtools_http/miniserv.users
diff --git a/perl-install/standalone/interactive_http/miniserv.init b/perl-install/standalone/interactive_http/miniserv.init
new file mode 100644
index 000000000..39c724dc7
--- /dev/null
+++ b/perl-install/standalone/interactive_http/miniserv.init
@@ -0,0 +1,51 @@
+#!/bin/sh
+# chkconfig: 235 99 00
+# description: Start or stop the miniserv administration server
+
+name=drakxtools_http
+server=/usr/share/libDrakX/$name/miniserv.pl
+
+case "$1" in
+'start')
+ echo -n "Starting $name: "
+ perl $server /etc/$name.conf
+ touch /var/lock/subsys/drakxtools_http
+ echo $name
+ ;;
+'stop')
+ echo -n "Shutting down $name: "
+ kill `cat /var/run/$name.pid`
+ rm -f /var/lock/subsys/drakxtools_http
+ echo $name
+ ;;
+'status')
+ if [ -s /var/run/$name.pid ]; then
+ pid=`cat /var/run/$name.pid`
+ kill -0 $pid >/dev/null 2>&1
+ if [ "$?" = "0" ]; then
+ echo "$name (pid $pid) is running"
+ else
+ echo "$name is stopped"
+ fi
+ else
+ echo "$name is stopped"
+ fi
+ ;;
+'restart')
+ $0 stop
+ $0 start
+ ;;
+'reload')
+ $0 stop
+ $0 start
+ ;;
+'condrestart')
+ if [ -f /var/lock/subsys/drakxtools_http ]; then
+ $0 restart
+ fi
+ ;;
+*)
+ echo "Usage: $0 {start|stop|restart|status|reload|condrestart}"
+ ;;
+esac
+exit 0
diff --git a/perl-install/standalone/interactive_http/miniserv.pam b/perl-install/standalone/interactive_http/miniserv.pam
new file mode 100644
index 000000000..37eae44e0
--- /dev/null
+++ b/perl-install/standalone/interactive_http/miniserv.pam
@@ -0,0 +1,5 @@
+#%PAM-1.0
+auth required /lib/security/pam_stack.so service=system-auth
+account required /lib/security/pam_stack.so service=system-auth
+password required /lib/security/pam_stack.so service=system-auth
+session required /lib/security/pam_stack.so service=system-auth
diff --git a/perl-install/standalone/interactive_http/miniserv.pl b/perl-install/standalone/interactive_http/miniserv.pl
index f866ee81a..b11ce26e2 100644
--- a/perl-install/standalone/interactive_http/miniserv.pl
+++ b/perl-install/standalone/interactive_http/miniserv.pl
@@ -58,7 +58,7 @@ if ($config{'syslog'}) {
eval "use Authen::PAM";
if (!$@) {
# check if the PAM authentication can be used by opening a handle
- if (! ref($pamh = new Authen::PAM("webmin", "root", \&pam_conv_func))) {
+ if (! ref($pamh = new Authen::PAM("miniserv", "root", \&pam_conv_func))) {
print STDERR "PAM module available, but error during init !\n";
print STDERR "Disabling PAM functions.\n";
}
@@ -159,7 +159,7 @@ if ($use_ssl) {
# Setup syslog support if possible and if requested
if ($use_syslog) {
- eval { openlog("webmin", "cons,pid,ndelay", "daemon") };
+ eval { openlog("miniserv", "cons,pid,ndelay", "daemon") };
$use_syslog = 0 if ($@);
}
@@ -268,7 +268,7 @@ die "Failed to bind port $config{port} : $!" if ($i == 5);
listen(MAIN, SOMAXCONN);
if ($config{'listen'}) {
- # Open the socket that allows other webmin servers to find this one
+ # Open the socket that allows other miniserv servers to find this one
$proto = getprotobyname('udp');
if (socket(LISTEN, PF_INET, SOCK_DGRAM, $proto)) {
setsockopt(LISTEN, SOL_SOCKET, SO_REUSEADDR, pack("l", 1));
@@ -507,7 +507,7 @@ while(1) {
}
if ($config{'listen'} && vec($rmask, fileno(LISTEN), 1)) {
- # Got UDP packet from another webmin server
+ # Got UDP packet from another miniserv server
local $rcvbuf;
local $from = recv(LISTEN, $rcvbuf, 1024, 0);
next if (!$from);
@@ -710,7 +710,7 @@ if (@deny && &ip_match($acptip, $localip, @deny) ||
if ($use_libwrap) {
# Check address with TCP-wrappers
- if (!hosts_ctl("webmin", STRING_UNKNOWN, $acptip, STRING_UNKNOWN)) {
+ if (!hosts_ctl("miniserv", STRING_UNKNOWN, $acptip, STRING_UNKNOWN)) {
&http_error(403, "Access denied for $acptip");
return 0;
}
@@ -739,8 +739,8 @@ if (%users) {
$blocked = 0;
# Session authentication is never used for connections by
- # another webmin server
- if ($header{'user-agent'} =~ /webmin/i) {
+ # another miniserv server
+ if ($header{'user-agent'} =~ /miniserv/i) {
$config{'session'} = 0;
}
@@ -1783,7 +1783,7 @@ return 0 if (!$_[0] || !$users{$_[0]});
if ($users{$_[0]} eq 'x' && $use_pam) {
$pam_username = $_[0];
$pam_password = $_[1];
- local $pamh = new Authen::PAM("webmin", $pam_username, \&pam_conv_func);
+ local $pamh = new Authen::PAM("miniserv", $pam_username, \&pam_conv_func);
if (!ref($pamh)) {
print STDERR "PAM init failed : $pamh\n";
return 0;
diff --git a/perl-install/standalone/interactive_http/miniserv.users b/perl-install/standalone/interactive_http/miniserv.users
new file mode 100644
index 000000000..f7338497a
--- /dev/null
+++ b/perl-install/standalone/interactive_http/miniserv.users
@@ -0,0 +1 @@
+root:x:0