#!perl
#
# Get 4.1/6.0 server information

BEGIN {
    @INC = ( '../../perl' );
}
use Cgi;
use ES40lnf;
use Magnus;
use Help;

$| = 1;
$perl = "../../perl/perl";
@cgis = ("$perl importMigParameters60");

$isNT = -d '\\';
grep { s@/@\\@g } @cgis if $isNT;       # reverse those slashes
$rootDir = $ENV{'NETSITE_ROOT'};

# Use a list of bad characters to search in input data for cross site scripting attack bug # 6234758
sub hasEvilChar {
    my $name= $_[0];
    my $val=$_[1];
    if($val =~ m/[\<\>\"\'\%\;\)\(\&\+]/) {
        print "\n<script> \n alert(\"input value '$name'  contains malicious characters $& \"); \n</script> \n";
        exit;
    }
    return 0;
}

# generate page
$title = "Migration Parameters";
ES40lnf::print_html($title);
ES40lnf::print_body();
ES40lnf::print_header($title);
print "<FORM ACTION=\"import60\" METHOD=\"get\">\n";
if(!hasEvilChar("dir", $cgiVars{'dir'})) {
    print "<INPUT TYPE=\"hidden\" NAME=\"dir\" VALUE=\"$cgiVars{'dir'}\">\n";
}
if(!hasEvilChar("server", $cgiVars{'server'})) {
    print "<INPUT TYPE=\"hidden\" NAME=\"server\" VALUE=\"$cgiVars{'server'}\">\n";
}
if(!hasEvilChar("version", $cgiVars{'version'})) {
    print "<INPUT TYPE=\"hidden\" NAME=\"version\" VALUE=\"$cgiVars{'version'}\">\n";
}
if(!hasEvilChar("javaVersion", $cgiVars{'javaVersion'})) {
    print "<INPUT TYPE=\"hidden\" NAME=\"javaVersion\" VALUE=\"$cgiVars{'javaVersion'}\">\n";
}

# general parameters
print "<TABLE CELLPADDING=\"5\">\n";
print "  <TR>\n";
ES40lnf::print_OpenTD();
print "\n   <TABLE>\n";
# server name:
print "     <TR>\n";
ES40lnf::print_OpenTD();
print "Server Name:";
ES40lnf::print_CloseTD();
ES40lnf::print_OpenTD();
$cgiVars{'server'} =~ /-/;
my $serverId = $';
my $dirNewSvr = "$rootDir/$cgiVars{'server'}";
my $serviceTaken = 0;
if ($isNT) {
    # on NT, check that the name is still available as a service id
    my $rez = `../../bin/getservice $cgiVars{'server'}`;
    if (($rez =~ /Service exists/)) {
        $serviceTaken = 1;
        $serverId .= "-new";
        $dirNewSvr = "$rootDir/$cgiVars{'server'}-new";
    }
}
if (-e $dirNewSvr) {
    $x = 1;
    $name = $dirNewSvr . "-" . $x;
    while (-e $name) {
        $x++;
        $name = $dirNewSvr . "-" . $x;
    }
    print "<INPUT TYPE=\"text\" NAME=\"name\" VALUE=\"$serverId-$x\">";
} else {
    print "<INPUT TYPE=\"text\" NAME=\"name\" VALUE=\"$serverId\">";
}
$mysname = $cgiVars{'name'};
$mysname =~ s/^\s+//; # to remove spaces in the begining and end
$mysname =~ s/\s+$//;
$cgiVars{'name'} = $mysname;

if ($cgiVars{'name'}) {
    $name = "$rootDir/https-$cgiVars{'name'}";
    if ($isNT) {
      if ($serviceTaken || (-e $name)) {
        print " <FONT COLOR=\"red\">(Server Name is either already available as a service name or a directory with this name exists)</FONT>";
      }
    } else {
      if ( -e $name) {
        print " <FONT COLOR=\"red\">(Server Name has already been taken)</FONT>";
      }
    }
}
ES40lnf::print_CloseTD();
print "     </TR>\n";
# run server as:
$dirAdmin = "$cgiVars{'dir'}/admin-serv";
$oldMagnus = new Magnus("$cgiVars{'dir'}/$cgiVars{'server'}/config/magnus.conf");
if (!$isNT) {
    print "     <TR>\n";
    ES40lnf::print_OpenTD();
    if ($oldMagnus) {
        $user = $oldMagnus->value( 'User' );
    }
    print "Run Server As:";
    ES40lnf::print_CloseTD();
    ES40lnf::print_OpenTD();
    print "<INPUT TYPE=\"text\" NAME=\"user\"";
    if ($user) {
        print " VALUE=\"$user\">";
    } else {
        print ">";
    }
    if($cgiVars{'user'}) {
     $username = $cgiVars{'user'};
     $idnum = 0;
     $idnum = getpwnam("$username");
    if ($idnum == 0 && $cgiVars{'user'} ne "root") {
        print " <FONT COLOR=\"red\">(User does not exist )</FONT>";
    }
  }

    ES40lnf::print_CloseTD();
    print "     </TR>\n";
}

# The following looks like it is for an old version of webserver as admin-serv
# directory does not exist. Hence commenting it. Need to remove this after
# review.

#if (-f "$dirAdmin/config/cron.conf") {
#    open(F, "$dirAdmin/config/cron.conf");
#    $lines = 0;
#    while (<F>) {
#        if ($lines == 0) {
#            print "     <TR>\n";
#            print "      <TD COLSPAN=\"2\">${ES40lnf::dfltFont}";
#            print "<P><FONT COLOR=\"red\"><B>Warning:</B></FONT> Cron jobs are not migrated.\n";
#            print "<XMP>";
#        }
#        print;
#        $lines++;
#    }
#    if ($lines != 0) {
#        print "</XMP>\n";
#        ES40lnf::print_CloseTD();
#        print "     </TR>\n";
#    }
#}
print "   </TABLE>\n";
print "   </TD>\n";
print "  </TR>\n";
print "</TABLE>\n";

# all other subcomponents:
print "\n<P>\n";
foreach $cgi ( @cgis ) {
    $fluff = 1;
    open(CGI, "$cgi |");
    while ( <CGI> ) {
        if ( $fluff ) {
            $fluff = 0 if /^<!-- Start Form -->/;
        } else {        # in the meat of the CGI output
            if ( /^<!-- End Form -->$/ ) {
                $fluff = 1;
            } else {
                print;
            }
        }
    }
    close( CGI );
}

    print "<P>\n<INPUT TYPE=\"submit\" VALUE=\"Migrate\">\n";
    print "<input type=button value=\"Help\" onClick=\"";
    print &helpJavaScriptForTopic("migrate-param");
    print "\">\n";
    print "</FORM>\n</BODY>\n</HTML>\n";
