ÿØÿà JFIF ÿÛ „ ( %"1"%)+...383,7(-.-
![]() Server : Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.20 System : Linux st2.domain.com 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64 User : apache ( 48) PHP Version : 7.4.20 Disable Function : NONE Directory : /lib/cyrus-imapd/ |
#!/bin/sh # # Copyright (c) 1994-2008 Carnegie Mellon University. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # 3. The name "Carnegie Mellon University" must not be used to # endorse or promote products derived from this software without # prior written permission. For permission or any legal # details, please contact # Carnegie Mellon University # Center for Technology Transfer and Enterprise Creation # 4615 Forbes Avenue # Suite 302 # Pittsburgh, PA 15213 # (412) 268-7393, fax: (412) 268-7395 # innovation@andrew.cmu.edu # # 4. Redistributions of any form whatsoever must retain the following # acknowledgment: # "This product includes software developed by Computing Services # at Carnegie Mellon University (http://www.cmu.edu/computing/)." # # CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO # THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE # FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN # AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING # OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # $Id: dohash,v 1.14 2010/01/06 17:02:01 murch Exp $ exec perl -x -S $0 ${1+"$@"} # -*-perl-*- #!perl -w # script to upgrade from versions of imapd previous to 1.6.2 # make sure you run it as the cyrus user if ($] !~ /^5\..*/) { # uh-oh. this isn't perl 5. foreach (split(/:/, $ENV{PATH})) { # try to find "perl5". exec("$_/perl5", "-x", "-S", $0, @ARGV) if (-x "$_/perl5"); } # we failed. bail. die "Your perl is too old; I need perl 5.\n"; } # load the real script. this is isolated in an 'eval' so perl4 won't # choke on the perl5-isms. eval join("\n", <DATA>); if ($@) { die "$@"; } __END__ require 5; $| = 1; if ("-i" eq $ARGV[0]) { $interactive = 1; shift @ARGV; } if ("-f" eq $ARGV[0]) { $force = 1; shift @ARGV; } if ("-h" eq $ARGV[0] || $#ARGV > 0) { print "usage: dohash [-i] [-f] [imapd.conf]\n"; print " -i interactive\n"; print " -f keep going on errors\n"; exit; } sub ouch { my $msg = shift; if ($force) { print "fatal error: $msg\n"; } else { print "error: $msg\n"; exit 1; } } sub read_conf { my $file = shift; open CONF, $file or die "can't open $file"; while (<CONF>) { if (/^#/) { next; } if (/\@include:\s+(.*)$/) { push @configs, $1; } if (/^configdirectory:\s+(.*)$/) { $confdir = $1; } if (/^(?:meta)?partition-.*:\s+(.*)$/) { if (grep /$1/, @parts) { next; } push @parts, $1; } if (/^hashimapspool:\s*(1|t|yes|on)/) { $hashispool = 1; print "i will also hash partitions.\n"; } } close CONF; } $imapdconf = shift || "/etc/imapd.conf"; $yn = "y"; $hashispool = 0; push @configs, $imapdconf; while ($conf = shift @configs) { read_conf($conf); } if (! $confdir) { $confdir = "/var/imap"; } if ($interactive) { print "upgrade $confdir? "; $yn = <STDIN>; } if ($yn =~ /^y/) { print "upgrading configuration directory $confdir..."; chdir $confdir or die "couldn't change to $confdir"; # *** user subdirectory; holds subscription files print "user "; chdir "user" or die "couldn't change to user subdir"; foreach $i ("a".."z") { mkdir ("$i", 0755) or ouch "couldn't create $i"; } # any remaining sub's go into 'q' opendir (USER, "."); while ($f = readdir USER) { print; if ($f =~ /(.).*\.sub/s) { print; $h = lc($1); if (!($h =~ /[a-z]/)) { $h = 'q'; } rename ($f, "$h/$f") or ouch "couldn't move $f into $h"; } } closedir USER; chdir ".."; # *** quota subdirectory; holds quota files for each quotaroot print "quota "; chdir "quota" or die "couldn't change to quota subdir"; # first, create directories we know can't conflict with existing files foreach $i ("a".."z") { mkdir (".$i", 0755) or ouch "couldn't create .$i"; } # now for each file, move it into the appropriate directory opendir QUOTA, "."; while ($mbox = readdir QUOTA) { if ($mbox =~ /^\./s) { next; } if ($mbox =~ /^.*\.(.).*$/s) { # hash is $1 $h = lc($1); if ($h =~ /[a-z]/) { rename($mbox, ".$h/$mbox") or ouch "couldn't move $mbox into $h"; } else { rename($mbox, ".q/$mbox") or ouch "couldn't move $mbox into q"; } next; } # we should try to hash on the first letter if ($mbox =~ /(.).*/) { $h = lc($1); if ($h =~ /[a-z]/) { rename($mbox, ".$h/$mbox") or ouch "couldn't move $mbox into $h"; } else { rename($mbox, ".q/$mbox") or ouch "couldn't move $mbox into q"; } next; } print "weird mailbox '$mbox'?\n"; } closedir QUOTA; # now move each temporary directory to the right place foreach $i ("a".."z") { rename (".$i", $i) or ouch "couldn't rename $i into place"; } print "done\n"; } # *** now for each data partition while ($part = shift @parts) { if ($interactive) { print "upgrade $part? "; $yn = <STDIN>; } if ($yn =~ /^y/) { print "upgrading data partition $part..."; chdir $part or die "couldn't chdir to $part"; if ($hashispool) { foreach $i ("a".."z") { mkdir (".$i", 0755) or ouch "couldn't create .$i"; } opendir PART, "."; while ($dir = readdir PART) { if ($dir =~ /^\./s) { next; } if ($dir eq "lost+found") { next; } # process $dir print "$dir "; opendir DIR, $dir; $ismbox = 0; while ($sub = readdir DIR) { if ($sub =~ /^\./s) { next; } # if there's a dot in this, we're a mbox and # this isn't a child if ($sub =~ /(.*)\.(.*)/) { $ismbox = 1; next; } if ($sub =~ /^(.).*$/s) { $h = lc($1); if (!($h =~ /[a-z]/)) { $h = 'q'; } mkdir (".$h/$dir", 0755); # might already be there rename("$dir/$sub", ".$h/$dir/$sub") or ouch "couldn't move $dir/$sub into $h"; } else { print "weird mailbox '$dir/$sub'?\n"; } } closedir DIR; # if $ismbox is set, then $dir is a mailbox of it's own right if ($ismbox && $dir =~ /^(.).*/s) { $h = lc($1); if (!($h =~ /[a-z]/)) { $h = 'q'; } mkdir (".$h/$dir", 0755); # might already be there opendir DIR, $dir; while ($sub = readdir DIR) { if ($sub =~ /^\./s) { next; } rename("$dir/$sub", ".$h/$dir/$sub") or ouch "couldn't move $dir into $h"; } closedir DIR; } rmdir $dir or print "\ncouldn't remove '$dir'??\n"; } closedir PART; foreach $i ("a".."z") { rename (".$i", $i) or ouch "couldn't rename .$i to $i"; } } chdir $part or die "couldn't chdir to $part"; mkdir "stage.", 0755; print "done\n"; } }