#!/usr/bin/perl

# Copyright (C) 2000 NEC Corporation
# All Rights Reserved.

# RCS: $Id: wbmcedquota2,v 1.1 2006/12/22 05:33:58 shodai Exp $

##001204 v5.1  ǥ̤edquotaˤ S.Oku
##010418 v4.0.1 饹б  S.Oku
##021026 v5.0 edquota ѹб oyama

require "/opt/nec/wbmc/lib/wbmc.pl";
$file = $ARGV[0];

$home = $ENV{'WBMC_QUOTA_HOME'};
$mail = $ENV{'WBMC_QUOTA_MAIL'};

$grp_fs   = $ENV{'WBMC_QUOTA_FS'};    ## add by kiyo 
$grp_size = $ENV{'WBMC_QUOTA_SIZE'};  ## add by kiyo 
my($i);
my $grp_chg_flag = 1;

#####################################################################
# /home -> $homedir

open(IN, $file);  ## add by kiyo
@line = <IN>;   ## add by kiyo
close(IN);      ## add by kiyo

## add by kiyo begin
# Setting User or Setting Group ?
$type_flag = 0;
@row = split(/ /,$line[0]);
#if ( $row[2] eq "user") {
if ( $row[3] eq "user") {
  $type_flag = 0;  # user
} else {
  $type_flag = 1;  # group
}
## add by kiyo end

if ( $type_flag == 0 ) { ## add by kiyo
  &readFile("/etc/default/useradd", "useradd", *lines);
  for ($i = 0; $i <= $#lines; $i++) {
    if ($lines[$i] =~ /^HOME=(.+)/) {
      $homedir = $1;
      $homedir =~ s/\s+$//;
    }
  }
  $homefs = &getQuotaFS("$homedir");
  $mailfs = &getQuotaFS("/var/spool/mail");
} ## add by kiyo

### 饹б 010417
&readFile("/etc/opt/nec/wbmc/INITCONF.INI", "INITCONF.INI", *lines);
$workmode_find = "";
$mountpoint_find = "";
for ($i = 0; $i <= $#lines; $i++) {
	if ($lines[$i] =~ /WorkMode\s*=\s*MailCluster/) {
		$workmode_find = 1;
	}
	elsif ($lines[$i] =~ /MountPoint\s*=\s*(.*)/) {
		$mountpoint_find = 1;
	}
	if($workmode_find && $mountpoint_find) {
		$homedir = $1;
		$homefs = &getQuotaFS("$homedir");
		$mailfs = &getQuotaFS("/var/spool/mail");
		$grp_fs = $homefs;
                last;
	}
}

#open(IN, $file);  ## del by kiyo
#@line = <IN>;     ## del by kiyo
#close(IN);      ## del by kiyo

for ($i = 0; $i <= $#line; $i++) {
#ѹб 20021026 oyama
 $line[$i] =~ s/^\s*//;
  $line[$i] =~ s/(\s)+/$1/g;
  @ent = split(/ /, $line[$i]);
  if ( $type_flag == 0 ) {
    if ($ent[0] eq $homefs) {
      $line[$i] =~ /\s*$homefs\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/;
      $line[$i] = "$homefs $ent[1] $ent[2] $home $ent[4] $ent[5] $ent[6]";
      $home_quota = $3;
   }
#  @ent = split(/:/, $line[$i]);
#  if ( $type_flag == 0 ) { ## add by kiyo
#    # User Setting!
#    if ($ent[0] eq $homefs) {
#      $line[$i] =~ /^$homefs: blocks in use: (\d+), limits \(soft = (\d+), hard = (\d+)\)$/;
#      $line[$i] = "$homefs: blocks in use: $1, limits (soft = $2, hard = $home)\n";
#      $home_quota = $3;
#    }

    if ($ent[0] eq $mailfs) {
#      $line[$i] =~ /^$mailfs: blocks in use: (\d+), limits \(soft = (\d+), hard = (\d+)\)$/;
#      $line[$i] = "$mailfs: blocks in use: $1, limits (soft = $2, hard = $mail)\n";
      $line[$i] =~ /\s*$mailfs\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/;
      $line[$i] = "$mailfs $ent[1] $ent[2] $mail $ent[4] $ent[5] $ent[6]";
      $mail_quota = $3;
    }
  ## add by kiyo begin
  } else {
    # Group Setting!
    if ($ent[0] eq $grp_fs) {
#      $line[$i] =~ /^$grp_fs: blocks in use: (\d+), limits \(soft = (\d+), hard = (\d+)\)$/;
#      $line[$i] = "$grp_fs: blocks in use: $1, limits (soft = $2, hard = $grp_size)\n";
      if ( $grp_size eq "" ) {
        $grp_chg_flag = 0;
        $grp_size = $ent[3];
      }
      $line[$i] =~ /\s*$grp_fs\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/;
      $line[$i] = "$grp_fs $ent[1] $ent[2] $grp_size $ent[4] $ent[5] $ent[6]";
    }
  }
  ## add by kiyo end
}

if ( $type_flag == 0 ) { ## add by kiyo
  if ($home eq "" && $mail eq "") {
    print "home=$home_quota\n";
    print "mail=$mail_quota\n";
    exit(1);
  }
} ## add by kiyo
if($grp_fs eq "" || $grp_chg_flag == 0 ){
  print "@line";
  exit(1);
}
open(OUT, ">$file");
print OUT @line;
close(OUT);
exit(1);

sub getQuotaFS
{
  my($dir) = @_;
  my($fs);

  open(IN, "/bin/df $dir 2>&1 |");
  <IN>;
  $fs = (split(/\s+/, <IN>))[0];
  close(IN);

  return ($fs);
}

