#!/usr/bin/ruby1.8 require 'yaml' require 'mailread' require 'date' require 'logger' class StringGets def initialize(str); @arr = str.to_a end def gets; @arr.shift end end UUCP_SPOOL = "/var/spool/uucp" begin ; UUCP_SYS = YAML::load( File.open( '/etc/rbgan_stations.conf' ) ) ; rescue ; UUCP_SYS = [] ; end LOG_FILE = $DEBUG ? "/var/log/rbgan-purge-rss.log" : STDERR # add -d option to shebang to enable debug. NB_DAYS = 2 # number of days from which a RSS Mail is considered obsolete (and deleted) TOO_OLD = Date.today - NB_DAYS logger = Logger.new( LOG_FILE ) logger.info "Launching rbgan-purge-rss." UUCP_SYS.each do |sys| begin cFile=Dir.new("#{UUCP_SPOOL}/#{sys}/C.") rescue Errno::ENOENT logger.error "UUCP system #{sys} not found:\tskipping." end cFile.each do |commandFile| next if ["..","."].include? commandFile begin dataFile = File.readlines( "#{cFile.path}/#{commandFile.to_s}" )[0].to_s.strip.split(" ")[1] mailString = File.readlines( "#{UUCP_SPOOL}/#{sys}/D./#{dataFile}" ).join( "" ) mail = Mail.new( StringGets.new( mailString ) ) mailDate = Date.parse( mail.header['Date'] ) mailFlag = mail.header['X-kamillemessage-type'] rescue ArgumentError logger.error "Unable to extract date from #{sys}/D./#{dataFile}:\tskipping." next rescue logger.error "Either #{sys}/D./#{dataFile} or #{sys}/C./#{commandFile} (or both) couldn't be read:\tskipping." next end if mailFlag.to_s == "NewsReaderContext" and TOO_OLD >= mailDate logger.info "Mail #{UUCP_SPOOL}/#{sys}/D./#{dataFile}, flagged '#{mailFlag.to_s}' is dated #{mailDate.to_s}:\tsuppressing." begin File.delete( "#{UUCP_SPOOL}/#{sys}/D./#{dataFile}" ) File.delete( "#{UUCP_SPOOL}/#{sys}/C./#{commandFile}" ) rescue logger.error "Either #{sys}/D./#{dataFile} or #{sys}/C./#{commandFile} (or both) couldn't be deleted." end else logger.info "Mail #{UUCP_SPOOL}/#{sys}/D./#{dataFile}, flagged '#{mailFlag.to_s}' is dated #{mailDate.to_s}:\tno action." end end end