e-smith-devtools/additional/genfilelist

261 lines
8.1 KiB
Perl
Executable File

#!/usr/bin/perl -w
#----------------------------------------------------------------------
# copyright (C) 1999-2003 Mitel Networks Corporation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Technical support for this program is available from Mitel Networks
# Please visit our web site www.mitel.com/sme/ for details.
#----------------------------------------------------------------------
use strict;
use Errno;
use File::Find;
use File::Basename;
sub process;
sub usage
{
die "t [--ignoredir dir] [--dir dir spec] [--file file spec] root\n";
}
my @ignoredirs = ('', qw(
/etc
/etc/rc.d
/etc/cron.d
/etc/cron.daily
/etc/cron.weekly
/etc/rc6.d
/etc/rc.d/init.d
/etc/logrotate.d
/usr
/usr/local
/usr/local/lib
/usr/local/bin
/usr/local/sbin
/usr/share
/usr/share/doc
/usr/share/man
/usr/share/man/man1
/usr/share/man/man2
/usr/share/man/man3
/usr/share/man/man4
/usr/share/man/man5
/usr/share/man/man6
/usr/share/man/man7
/usr/share/man/man8
/usr/share/man/man9
/usr/share/man/mann
/usr/bin
/usr/sbin
/boot
/boot/grub2
/boot/grub2/themes
/bin
/sbin
/home
/root
/var
/var/spool
/var/tmp
/var/lock
/var/cache
/var/named
/var/qmail
/usr/lib
/usr/lib/perl5
/usr/share/perl5/vendor_perl
/var/log
));
%::ignoredirs = map { $_ => 1 } @ignoredirs;
%::dirperms = (
'/home/e-smith/files/primary' => "%attr(0755,root,root)",
'/home/e-smith/files/primary/cgi-bin' => "%attr(02750,admin,shared)",
'/home/e-smith/files/primary/files' => "%attr(02750,admin,shared)",
'/home/e-smith/files/primary/html' => "%attr(02750,admin,shared)",
'/home/e-smith/files/samba/netlogon' => "%attr(02775,admin,admin)",
'/home/e-smith/files/samba/printers' => "%attr(02775,admin,admin)",
'/home/e-smith/files/samba/printers/W32ALPHA' => "%attr(02775,admin,admin)",
'/home/e-smith/files/samba/printers/W32MIPS' => "%attr(02775,admin,admin)",
'/home/e-smith/files/samba/printers/W32PPC' => "%attr(02775,admin,admin)",
'/home/e-smith/files/samba/printers/W32X86' => "%attr(02775,admin,admin)",
'/home/e-smith/files/samba/printers/WIN40' => "%attr(02775,admin,admin)",
'/home/e-smith/files/samba/profiles' => "%attr(02750,admin,shared)",
'/home/e-smith/files/users/admin/home' => "%attr(0700,admin,admin)",
'/home/e-smith/files/users/admin' => "%attr(0500,admin,admin)",
'/etc/e-smith/web/panels' => "%attr(0550,root,admin)",
'/etc/e-smith/web/functions' => "%attr(0550,root,admin)",
'/etc/e-smith/web/common' => "%attr(0550,www,admin)",
'/home/e-smith' => "%attr(0755,admin,admin)",
'/home/e-smith/files' => "%attr(0755,root,root)",
'/home/e-smith/files/users' => "%attr(0755,root,root)",
'/home/e-smith/files/users/admin' => "%attr(0755,admin,admin)",
'/home/e-smith/Maildir' => "%attr(0700,admin,admin)",
'/home/e-smith/Maildir/tmp' => "%attr(0700,admin,admin)",
'/home/e-smith/Maildir/new' => "%attr(0700,admin,admin)",
'/home/e-smith/Maildir/cur' => "%attr(0700,admin,admin)",
'/home/httpd/html/horde/config' => "%attr(0750,root,www)",
'/home/netlogon' => "%attr(0755,admin,admin)",
'/home/dns/var/named' => "%attr(0755,dns,dns)",
'/home/dns/var/run' => "%attr(0755,dns,dns)",
'/home/dns/var/run/named' => "%attr(0755,dns,dns)",
'/root/.ssh' => "%attr(0700,root,root)",
'/var/local/fetchmail' => "%attr(0755,qmailr,qmail)",
'/var/log/faxrunqd' => "%attr(01755,qmaill,nofiles)",
'/etc/rc.d/init.d/supervise' => "%attr(0755,root,root)",
);
%::fileperms = (
'/etc/rc.d/init.d/' => "%attr(0755,root,root)",
'/etc/rc.d/init.d/supervise/' => "%attr(0755,root,root)",
'/etc/profile.d/' => "%attr(0755,root,root)",
'/etc/cron.d/' => "%attr(0644,root,root)",
'/etc/cron.daily/' => "%attr(0744,root,root)",
'/etc/cron.weekly/' => "%attr(0744,root,root)",
'/etc/diald/scripts/' => "%attr(0744,root,root)",
'/etc/e-smith/web/functions/' => "%attr(0500,root,root)",
'/etc/e-smith/web/panels/password/cgi-bin/' => "%attr(06550,root,admin)",
'/etc/e-smith/web/panels/' => "%attr(06550,root,admin)",
'/home/e-smith/files/manager/html/index.cgi' => "%attr(0755,root,root)",
'/sbin/e-smith/console' => "%attr(06550,root,root)",
'/sbin/e-smith/console.pl' => "%attr(0550,root,root)",
'/sbin/e-smith/dynamic-dns/' => "%attr(0554,root,root)",
'/sbin/e-smith/quicktest' => "%attr(0555,root,root)",
'/sbin/e-smith/smoketest' => "%attr(0555,root,root)",
'/sbin/e-smith/' => "%attr(0554,root,root)",
'/home/httpd/html/horde/config/' => "%attr(0664,root,www)",
'/home/httpd/horde-phplib/local.inc' => "%attr(0640,root,www)",
'/home/netlogon/netlogon.bat' => "%config(noreplace) %attr(0755,admin,admin)",
'/home/e-smith/files/samba/netlogon/netlogon.bat' =>
"%config(noreplace) %attr(0755,admin,admin)",
'/etc/e-smith/events/actions/create-machine-account' => "%attr(0554,root,root)",
'/etc/e-smith/events/actions/' => "%attr(0554,root,root)",
'/var/spool/fax/faxrunqd/run' => "%attr(0755,root,root)",
'/var/spool/fax/faxrunqd/log/run' => "%attr(0755,root,root)",
'/usr/lib/perl5/vendor_perl/esmith/FormMagick/Panel/' => "%attr(0644,root,root)",
'/sbin/e-smith/console-screens/' => "%attr(0750,root,root)",
);
my $startdirectory = undef;
while (my $arg = shift)
{
if ($arg eq "--ignoredir")
{
my $arg = shift;
usage() unless (defined $arg);
$::ignoredirs{$arg} = 1;
}
elsif ($arg eq "--dir")
{
my $dir = shift;
my $spec = shift;
usage() unless (defined $dir && defined $spec);
die "Can't override permissions already specified\n"
if exists $::dirperms{$dir};
$::dirperms{$dir} = '%' . $spec;
}
elsif ($arg eq "--file")
{
my $file = shift;
my $spec = shift;
usage() unless (defined $file && defined $spec);
die "Can't override permissions already specified\n"
if exists $::fileperms{$file};
$::fileperms{$file} = '%' . $spec;
}
else
{
$startdirectory = $arg;
}
}
defined $startdirectory
or die "Must give directory arg";
# Change to the build root directory
chdir $startdirectory
or die "Could not chdir to $startdirectory: $!\n";
# Now go and process all the files...
find(\&::process, '.');
exit (0);
sub process
{
my $path = $File::Find::name;
# Remove leading .
$path =~ s/^.//;
if (-l)
{
# Don't add attributes for symlinks
warn ("Invalid directory permissions for symlink: $path\n")
if (-d and defined $::dirperms{$path});
warn ("Invalid file permissions for symlink: $path\n")
if (-f and defined $::fileperms{$path});
print "\"$path\"\n";
}
elsif (-d)
{
return if (defined $::ignoredirs{$path});
# Directories get marked as such
print "%dir ";
# .. and some of them get special permissions and ownership
print defined $::dirperms{$path} ?
"$::dirperms{$path} " :
# and others just get the default
"%attr(0755,root,root) ";
print "$path\n";
}
elsif (-f)
{
# Ignore .orig files created in prep section
return if $path =~ m{\.orig$};
my (@paths) = ($path);
# Add compiled python files
push @paths, "${path}c" if $path =~ m{\.py$};
push @paths, "${path}o" if $path =~ m{\.py$};
foreach $path (@paths) {
# Some files get special permissions and ownership
my $dir = (dirname $path) . '/';
# Special permissions per file
if (defined $::fileperms{$path})
{
print "$::fileperms{$path} ";
}
# Special permissions or per containing directory
elsif (defined $::fileperms{$dir})
{
print "$::fileperms{$dir} ";
}
print "\"$path\"\n";
}
}
else
{
print "\"$path\"\n";
}
}