X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=bin%2Fmailshears;h=06347fb9eafced5b8a3f5d16f331140d444ecc8a;hp=d34ce54f719749df9ceb78e5625123589b5ad2e4;hb=1511b1d4bec6c53bcdb74fe60ee3b0fc4551b104;hpb=6327411ce5538751bd5b3ae07f13da4267d6aa11 diff --git a/bin/mailshears b/bin/mailshears index d34ce54..06347fb 100755 --- a/bin/mailshears +++ b/bin/mailshears @@ -15,7 +15,7 @@ # We need Pathname to get the real filesystem path # of this script (and not, for example, the path of -# a symlink which points to it. +# a symlink which points to it). require 'pathname' # This bit of magic adds the parent directory (the @@ -44,9 +44,32 @@ pgadb = PostfixadminDb.new(Configuration::DBHOST, Configuration::DBUSER, Configuration::DBPASS) + +# First, we find out if any domains have been removed from the +# database but not from the filesystem. +begin + # Get the list of domains according to the filesystem. + fs_domains = dms.get_domains_from_filesystem() +rescue StandardError => e + puts "There was an error retrieving domains from the filesystem: #{e.to_s}" + Kernel.exit(ExitCodes::FILESYSTEM_ERROR) +end + +begin + # ...and according to the Postfixadmin database. + db_domains = pgadb.get_domains_from_db() +rescue DatabaseError => e + puts "There was an error connecting to the database: #{e.to_s}" + Kernel.exit(ExitCodes::DATABASE_ERROR) +end + + +# Then, we get the list of accounts that have been removed. We did +# the domains first so that, if a domain was removed, we can avoid +# reporting each of its accounts individually. begin # Get the list of accounts according to the filesystem. - fs_accts = dms.get_accounts_from_filesystem() + fs_accts = dms.get_accounts_from_filesystem(db_domains) rescue StandardError => e puts "There was an error retrieving accounts from the filesystem: #{e.to_s}" Kernel.exit(ExitCodes::FILESYSTEM_ERROR) @@ -61,17 +84,19 @@ rescue DatabaseError => e end -# Figure out which addresses are in the filesystem, but not in the -# database. -difference = fs_accts - db_accts +# The list of domains on the filesystem that aren't in the DB. +dom_difference = fs_domains - db_domains -# Don't output any unnecessary junk. Cron might mail it to someone. -if difference.size > 0 +# And accounts on the filesystem that aren't in the DB and don't +# belong to a domain that was removed. +acct_difference = fs_accts - db_accts +# Don't output any unnecessary junk. Cron might mail it to someone. +if dom_difference.size > 0 or acct_difference.size > 0 # The header that we output before the list of accounts. # Just the path of this script, and the current time. header = "#{$0}, " - + current_time = Time.now() if current_time.respond_to?(:iso8601) # Somehow this method is missing on some machines. @@ -80,9 +105,17 @@ if difference.size > 0 # Fall back to whatever this looks like. header += current_time.to_s end - + puts header puts '-' * header.size # Underline the header. - puts difference + + dom_difference.each do |domain| + puts domain + " (#{dms.get_domain_path(domain)})" + end + + acct_difference.each do |account| + puts account + " (#{dms.get_account_path(account)})" + end + puts "" end