#!/usr/local/bin/perl
# Set the Usermin session cookie to be some other user

require './usermin-lib.pl';
&ReadParse();
$access{'sessions'} || &error($text{'switch_euser'});

&get_usermin_miniserv_config(\%miniserv);
if (&check_pid_file($miniserv{'pidfile'})) {
	# Stop Usermin first, so that the DBM can be safely written
	&stop_usermin();
	$stopped = 1;
	}
&acl::open_session_db(\%miniserv);
&seed_random();
$now = time();
$sid = int(rand()*$now);
$acl::sessiondb{$sid} = "$in{'user'} $now $ENV{'REMOTE_ADDR'}";
dbmclose(%acl::sessiondb);
if ($stopped) {
	&start_usermin();
	}
&reload_usermin_miniserv();
&webmin_log("switch", undef, $in{'user'});
eval "use Net::SSLeay";
if ($@) {
	$miniserv{'ssl'} = 0;
	}
$ssl = $miniserv{'ssl'} || $miniserv{'inetd_ssl'};
$sec = $ssl ? "; secure" : "";
$sidname = $miniserv{'sidname'} || 'sid';
print "Set-Cookie: $sidname=$sid; path=/$sec\n";

# Work out redirect host
@sockets = &webmin::get_miniserv_sockets(\%miniserv);
if ($config{'host'}) {
	# Specific hostname set
	$host = $config{'host'};
	}
else {
	if ($sockets[0]->[0] ne "*") {
		# Listening on special IP
		$host = $sockets[0]->[0];
		$port = $sockets[0]->[1] if ($sockets[0]->[1] ne '*');
		}
	else {
		# Use same hostname as this server
		$host = $ENV{'HTTP_HOST'};
		$host =~ s/:.*//;
		}
	}
$port ||= $config{'port'} || $miniserv{'port'};

&redirect(($ssl ? "https://" : "http://").
	  $host.":".$port."/");



syntax highlighted by Code2HTML, v. 0.9.1