#!/usr/bin/env perl

# wbmc_ssh_server, v 1.0 2002/06/28 10:28 hata

require "/opt/nec/mail/wbmc/lib/wbmc.pl";
require "/opt/nec/mail/wbmc/bin/wbmc_msh_cmd.pl";

#chomp($localhost =`hostname`);
$umsconf_file = '/opt/nec/mail/ums.conf';
$ldapsearch_cmd = '/usr/bin/ldapsearch';

&readParam();

$service_name = $ENV{'WBMC_SERVICE_NAME'};
$updown = $ENV{'WBMC_SERVICE_UPDOWN'};

#$service_name = $FORM{'NAME'};
#$updown = $FORM{'UPDOWN'};

sub parse_structsvr_list {
    my @structsvr_list = ();
    
  # /opt/nec/mail/ums.conf ɤ߹
  # - host, port, uri, basedn, binddn, bindpw 
  #
    open(UMSCONF_FILE, $umsconf_file);
    while(<UMSCONF_FILE>) {
        $line = $_;
        chomp($line);
        if ($line =~ /^host/) {
            ($para, $host) = split(/=/, $line);
            $host =~ s/"//g;
        }
        if ($line =~ /^port/) {
            ($para, $port) = split(/=/, $line);
            $port =~ s/"//g;
        }
        if ($line =~ /^uri/) {
            ($para, $uri) = split(/=/, $line);
            $uri =~ s/"//g;
        }
        if ($line =~ /^basedn/) {
            ($para, $basedn) = split(/basedn=/, $line);
            $basedn =~ s/"//g;
        }
        if ($line =~ /^binddn/) {
            ($para, $binddn) = split(/binddn=/, $line);
            $binddn =~ s/"//g;
        }
        if ($line =~ /^bindpw/) {
            ($para, $bindpw) = split(/bindpw=/, $line);
            $bindpw =~ s/"//g;
        }
    }

  # ldapseach ޥɤǹа
  # - ldapsearch -x -LLL -D "binddn" -w "bindpw" -h "host:port" -b "basedn"
  #                         "objectClass=expresMailServerStructServer"
  #
  #   uid: hogehoge -> hogehoge get
  #
    $ldapsearch_opt = " -x -LLL -D '$binddn' -w $bindpw -H '$uri' -b 'ou=Struct Server, $basedn' ";
#    $filter = '"objectClass=expressMailServerStructServer"';
    $structsvr_search = $ldapsearch_cmd . $ldapsearch_opt;
    my $find = 0;
    open(SRCH, "$structsvr_search | ");
    while(<SRCH>) {
        $line = $_;
        chomp($line);
        if ($line !~ /^uid: /) {
            next;
        }
        ($uid, $structsvr) = split(/uid: /, $line);
        $cmd = "echo '/usr/bin/find /opt/nec/mail/inst -name mailsv' | ";
        $cmd .= "/opt/nec/mail/msh $structsvr /opt/nec/mail/mcmd/cmdexec";
        open(FIND, "$cmd | ");
        $find = <FIND>;
        close(FIND);
        chomp($find);
        if ($find ne "/opt/nec/mail/inst/mailsv") {
            next;
        }
        push(@structsvr_list, $structsvr);
    }
    close(SRCH);
    return @structsvr_list;
}

if ($service_name eq "maild")
{
    $service_name2 = "SMTP";
    $module = "smtp_detail.html";
}
elsif ($service_name eq "popd")
{
    $service_name2 = "POP";
    $module = "pop_manage.cgi";
}
elsif ($service_name eq "imapd")
{
    $service_name2 = "IMAP";
    $module = "imap_manage.cgi";
}
elsif ($service_name eq "ehttpd")
{
    $service_name2 = "HTTP";
    $module = "http_manage.cgi";
}

#------------------------------------------------------------
    print <<END_OF_DATA;
Content-type: text/html; charset=euc-jp

<html><head>
<TITLE>$service_name2</TITLE></HEAD>
<BODY>
<H4 ALIGN="center">$service_name2</H4>
<HR>
<TABLE WIDTH='100%'>
 <TR>
  <TD ALIGN='left'>
   <A HREF="$module">$service_name2ܺ</A> >
   $service_name2
  </TD>
  <TD ALIGN='right'>
   <A HREF="$module">[]</A>
   <A HREF='service_help.html' TARGET='help'>[إ]</A>
  </TD>
 </TR>
</TABLE>
<HR>
<CENTER>
<P>
<TABLE BGCOLOR="#CCCCCC" BORDER=1 WIDTH=400 CELLSPACING=0 CELLPADDING=1>
 <TR BGCOLOR="#000080">
  <TD>
   <FONT COLOR="#FFFFFF"><B>$service_name2</B></FONT>
  </TD>
 </TR>
 <TR>
  <TD>
   <TABLE BORDER=1 CELLSPACING=0 WIDTH=100%>
    <TR>
     <TH>̾</TH>
     <TH></TH>
    </TR>
END_OF_DATA
#------------------------------------------------------------

#  ꥳޥɤλư¹
#
@structsvr_list = &parse_structsvr_list;
for $structsvr (@structsvr_list)
{
    if ($updown eq "up")
    {
        # ӥư
        $cmd = "/opt/nec/mail/mcmd/$service_name start";
      # $cmd = "/etc/rc.d/init.d/$service_name start";
        @result = &wbmc_dc_rsh($structsvr, $cmd);
    }
    elsif ($updown eq "reup")
    {
        # ӥƵư
        #   ӥơǧ֤ˤ
        #     ưrunning...ˢӥƵưreload
        #     stoppedˡpopd,imapd,ehttpd
        #           is not runningˡsmtpd
        #                         ӥưstart
        #
        $cmd = "/opt/nec/mail/mcmd/$service_name status";
        @result = &wbmc_dc_rsh($structsvr, $cmd);
        for ($i = 0; $i < @result; $i++) {
            if (($result[$i]->[2] =~ /stopped/) ||
                ($result[$i]->[2] =~ /is not running/))
            {
                $cmd = "/opt/nec/mail/mcmd/$service_name start";
                @result = &wbmc_dc_rsh($structsvr, $cmd);
            }
            else
            {
                $cmd = "/opt/nec/mail/mcmd/$service_name reload";
                @result = &wbmc_dc_rsh($structsvr, $cmd);
            }
        }
    }
    elsif ($updown eq "down")
    {
        # ӥ
        $cmd = "/opt/nec/mail/mcmd/$service_name stop";
      # $cmd = "/etc/rc.d/init.d/$service_name stop";
        @result = &wbmc_dc_rsh($structsvr, $cmd);
    }
    elsif ($updown eq "stat")
    {
        # ӥơ
        $cmd = "/opt/nec/mail/mcmd/$service_name status";
      # $cmd = "/etc/rc.d/init.d/$service_name status";
        @result = &wbmc_dc_rsh($structsvr, $cmd);
    }

    print "<TR><TD>";
#   print "<A HREF=\"../service/structsvr_service.cgi?action=service_view&server=$structsvr\">$structsvr</A>";
    print "$structsvr";
    print "</TD><TD>";
    for ($i = 0; $i < @result; $i++) {
        $result[$i]->[2] =~ s/\n/<br>/g;
        print "$result[$i]->[2]";
    }
    print "</TD></TR>";
}

    print <<END_OF_DATA;
   </TABLE>
  </TD>
 </TR>
</TABLE>
<P>
</CENTER>
<HR>
 <IMG SRC="/image/nec_w.gif" WIDTH=56 HEIGHT=16>Copyright(C) NEC Corporation 2002
</body></html>
END_OF_DATA
#------------------------------------------------------------
