#============================================================================# # vHost - one-step solution for all virtual hosting needs # # V30squirrelmail - squirrelmail virtualization module # # # # Copyright(c) Chaogic Systems, LLC. http://chaogic.com # # Author: Jake Fan # # # # This is Free Software; permission to use, copy, modify, and distribute # # this software and its documentation for any purpose - with or without fee # # - is hereby granted, provided that the above copyright information and # # this permission notice appear in all copies and documentations. This # # software is provided "as is" without express or implied warranty. For # # more details, see GNU General Public License as published by the Free # # Software Foundation. # # # #============================================================================# $X eq "configuration" && do { ################################################ ### EDITABLE CONFIGURATIONS ################################################## ### webmail directory name on virtual hosts. virtual users will access their # web-based mail at "http://virtual.host.name/$wmDir". # $wmDir = "webmail"; $wmDir = "webmail"; ### squirrelmail root directory on the main host. make sure it's accessible # by the httpd user. # $smRoot = "$docRoot/$wmDir"; $smRoot = "$docRoot/$wmDir"; ### DO NOT TOUCH ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING!! ### SanityChecking ########################################################### $ERR = 1, Error "$MOD: \$wmDir = '$wmDir'" if $wmDir eq $guiDir || !CheckN $wmDir; $ERR = 1, Error "$MOD: \$smRoot = '$smRoot'" if !-d "$smRoot/config"; $wmRoot = "$VHOME/$H/var/$webDir/$urlDir/$wmDir"; $EVAL{'$wmRoot;'} = 4; }; $X eq "initialization" && do { ############################################### if ($ONCFG) { my $mod; `chown -Rh 0:$GHID $smRoot/help $NERR` if !-o "$smRoot/help"; `chown -Rh 0:$GHID $smRoot/locale $NERR` if !-o "$smRoot/locale"; my $ok; my $conf = "$smRoot/src/login.php"; Flock $conf, "+<", 0 if -f $conf && !grep /^\s*$FOOT/, Cat $conf; BackupCf $conf; $mod = $ok = 1 if @FILE; $FILE[$#FILE+1] = ($FILE[-1]!~/\n/&&"\n")."\n" if $ok; $username = $_COOKIE['VHOST_USERNAME']; $password = $_COOKIE['VHOST_PASSWORD']; if ($username && $password) echo <<<_ \n _; else echo ''."\n"; # print FILE @FILE if $ok; Flock 0; my $ok; my $conf = "$smRoot/src/signout.php"; Flock $conf, "+<", 0 if -f $conf && !grep /^\s*$FOOT/, Cat $conf; BackupCf $conf; $mod = $ok = 1 if @FILE; $FILE[$#FILE+1] = ($FILE[-1]!~/\n/&&"\n")."\n" if $ok; echo ''."\n"; # print FILE @FILE if $ok; Flock 0; my $ok; my $conf = "$smRoot/functions/imap_general.php"; Flock $conf, "+<", 0 if -f $conf && !grep /^\s*$FOOT/, Cat $conf; BackupCf $conf; /^\s*\$query\b.*[\s"']LOGIN[\s"']/ && ($_ = "\n$FOOT\n".<<'#'."\n$_", $mod = $ok = 1) && last for @FILE; $username = $_COOKIE['VHOST_ALTLOGIN']; $password = $_COOKIE['VHOST_PASSWORD']; # print FILE @FILE if $ok; Flock 0; my $ok; my $conf = "$smRoot/functions/page_header.php"; # Flock $conf, "+<", 0 if -f $conf && !grep /^\s*$FOOT/, Cat $conf; BackupCf $conf; /^\s*displayInternalLink\s*\(.*["']Sign\s+Out["']/ && ($_ = "\n$FOOT\n".<<'#'."\n$_", $mod = $ok = 1) && last for @FILE; global $username, $domain, $guiDir; echo "$username@$domain  "; displayInternalLink ("../$guiDir/vhost.php?action=login", _("Main Menu"), $frame_top); echo "  "; # print FILE @FILE if $ok; Flock 0; my $ok; my $conf = "$smRoot/config/conf.pl"; Flock $conf, "+<", 0 if -f $conf && !grep /^[^#]*\\\$guiDir\s*=[\s']*\Q$guiDir\E[\s']*;/, Cat $conf; BackupCf $conf; s/^([^#]*\\\$guiDir\s*=)[^;]*;/$1 '$guiDir';/ && ($mod = $ok = 1) for @FILE; /^\s*print\s+CF\s+"\s*\\\$domain\s*=/ && ($_ = "\n$FOOT\n".<<"#"."\n", $mod = $ok = 1) for !$ok && @FILE; print CF "\\\$guiDir = '$guiDir';\\n"; print CF "\\\$domain = \\\$_COOKIE['VHOST_HOSTNAME'];\\n"; # print FILE @FILE if $ok; Flock 0; `echo "q\ny\n" | $conf $NERR` if $ok || !-f "$smRoot/config/config.php"; `chown 0:$GHID $smRoot/data $NERR` if $ok; `chmod 0775 $smRoot/data $NERR` if $ok; `touch /tmp/.vhost/.mod.squirrel $NERR` if $mod; for my $h (-f "/tmp/.vhost/.ins.squirrel" && -f "/tmp/.vhost/.mod.squirrel" && keys %PROF) { my $i = getpwnam $OWNR{$h}; my $d = "$HOME{$PROF{$h}}/$h"; next if !$h || !-d $d || (stat "$smRoot/ChangeLog")[9] != (stat "$d/var/$webDir/$urlDir/$wmDir/ChangeLog")[9]; `cp -p $smRoot/src/login.php $d/var/$webDir/$urlDir/$wmDir/src $NERR`; `cp -p $smRoot/src/signout.php $d/var/$webDir/$urlDir/$wmDir/src $NERR`; `cp -p $smRoot/functions/imap_general.php $d/var/$webDir/$urlDir/$wmDir/functions $NERR`; # `cp -p $smRoot/functions/page_header.php $d/var/$webDir/$urlDir/$wmDir/functions $NERR`; `chown $i:$GUID $d/var/$webDir/$urlDir/$wmDir/src/login.php $NERR`; `chown $i:$GUID $d/var/$webDir/$urlDir/$wmDir/src/signout.php $NERR`; `chown $i:$GUID $d/var/$webDir/$urlDir/$wmDir/functions/imap_general.php $NERR`; # `chown $i:$GUID $d/var/$webDir/$urlDir/$wmDir/functions/page_header.php $NERR`; } `rm /tmp/.vhost/.ins.squirrel $NERR` if -f "/tmp/.vhost/.ins.squirrel"; `rm /tmp/.vhost/.mod.squirrel $NERR` if -f "/tmp/.vhost/.mod.squirrel"; } }; $X eq "addhost" && do { ###################################################### `mv $VHOME/$H/INBOX.* $VHOME/home/$O $NERR` if !$LHOME; `mkdir $wmRoot $NERR`; `cp -RLp $smRoot/. $wmRoot $NERR`; `chmod 0644 $wmRoot/config/config.php $NERR`; `ln -f $wmRoot/config/config.php $VHOME/$H/etc/squirrelmail.cf $NERR`; `rm -r $wmRoot/help $NERR`; `rm -r $wmRoot/locale $NERR`; `ln -s $smRoot/help $wmRoot/help $NERR`; `ln -s $smRoot/locale $wmRoot/locale $NERR`; my ($ok, $path); Flock "$wmRoot/config/config.php", "+<", 0 if -f "$wmRoot/config/config.php"; $path = grep (/=\s*SM_PATH\s*\./, @FILE)? "SM_PATH . 'data/'" : "'../data/'"; s/^(\s*\$data_dir\s*=\s*)["']\/.*/$1$path;/ && ($ok = 1), s/^(\s*\$attachment_dir\s*=\s*)["']\/.*/$1"\$data_dir";/ && ($ok = 1) for @FILE; print FILE @FILE if $ok; Flock 0; `mkdir $wmRoot/data $NERR` if $ok; `touch $wmRoot/data/default_pref $NERR` if $ok; }; $X eq "finalization" && do { ################################################# if ($ARGV[0] eq "addhost" || $ARGV[0] eq "adduser" && $U eq $webDir) { # my $wuid = getpwnam $webUser; `chown -h 0:$GUID $wmRoot/help $NERR`; `chown -h 0:$GUID $wmRoot/locale $NERR`; `chown -Rh $O[2]:$GHID $wmRoot/data $NERR`; -f && `chmod 0664 $_ $NERR` for <$wmRoot/data/*>; `chmod 0644 $wmRoot/data/index.* $NERR`; `chmod 0644 $wmRoot/data/default_pref $NERR`; `chmod 0775 $wmRoot/data $NERR`; } }; 1;