Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import os
- import sys
- import DenyHosts.python_version
- import getopt
- import traceback
- import logging
- from DenyHosts.util import die, setup_logging, is_true
- from DenyHosts.lockfile import LockFile
- from DenyHosts.prefs import Prefs
- from DenyHosts.version import VERSION
- from DenyHosts.deny_hosts import DenyHosts
- from DenyHosts.denyfileutil import Purge, Migrate, UpgradeTo099
- from DenyHosts.constants import *
- from DenyHosts.sync import Sync
- #################################################################################
- def usage():
- print ("Usage:")
- print ("%s [-f logfile | --file=logfile] [ -c configfile | --config=configfile] [-i | --ignore] [-n | --noemail] [--purge] [--migrate] [--daemon] [--sync] [--version]") % sys.argv[0]
- print
- print
- print (" --file: The name of log file to parse")
- print (" --ignore: Ignore last processed offset (start processing from beginning)")
- print (" --noemail: Do not send an email report")
- print (" --unlock: if lockfile exists, remove it and run as normal")
- print (" --migrate: migrate your HOSTS_DENY file so that it is suitable for --purge")
- print (" --purge: expire entries older than your PURGE_DENY setting")
- print (" --daemon: run DenyHosts in daemon mode")
- print (" --sync: run DenyHosts synchronization mode")
- print (" --version: Prints the version of DenyHosts and exits")
- print
- print ("Note: multiple --file args can be processed. "),
- print ("If multiple files are provided, --ignore is implied")
- print
- print ("When run in --daemon mode the following flags are ignored:")
- print (" --file, --purge, --migrate, --sync, --verbose")
- #################################################################################
- #################################################################################
- if __name__ == '__main__':
- logfiles = []
- config_file = CONFIG_FILE
- ignore_offset = 0
- noemail = 0
- verbose = 0
- migrate = 0
- purge = 0
- sync_mode = 0
- daemon = 0
- enable_debug = 0
- upgrade099 = 0
- args = sys.argv[1:]
- try:
- (opts, getopts) = getopt.getopt(args, 'f:c:dinuvps?hV',
- ["file=", "ignore", "verbose", "debug",
- "help", "noemail", "config=", "version",
- "migrate", "purge", "daemon", "sync",
- "upgrade099"])
- except:
- print ("\nInvalid command line option detected.")
- usage()
- sys.exit(1)
- for opt, arg in opts:
- if opt in ('-h', '-?', '--help'):
- usage()
- sys.exit(0)
- if opt in ('-f', '--file'):
- logfiles.append(arg)
- if opt in ('-i', '--ignore'):
- ignore_offset = 1
- if opt in ('-n', '--noemail'):
- noemail = 1
- if opt in ('-v', '--verbose'):
- verbose = 1
- if opt in ('-d', '--debug'):
- enable_debug = 1
- if opt in ('-c', '--config'):
- config_file = arg
- if opt in ('-m', '--migrate'):
- migrate = 1
- if opt in ('-p', '--purge'):
- purge = 1
- if opt in ('-s', '--sync'):
- sync_mode = 1
- if opt == '--daemon':
- daemon = 1
- if opt == '--upgrade099':
- upgrade099 = 1
- if opt == '--version':
- print ("DenyHosts version:", VERSION)
- sys.exit(0)
- prefs = Prefs(config_file)
- first_time = 0
- try:
- os.makedirs(prefs.get('WORK_DIR'))
- first_time = 1
- except Exception as e:
- if e[0] != 17:
- print (e)
- sys.exit(1)
- setup_logging(prefs, enable_debug, verbose, daemon)
- if not logfiles or daemon:
- logfiles = [prefs.get('SECURE_LOG')]
- elif len(logfiles) > 1:
- ignore_offset = 1
- if not prefs.get('ADMIN_EMAIL'): noemail = 1
- lock_file = LockFile(prefs.get('LOCK_FILE'))
- lock_file.create()
- if upgrade099 and not daemon:
- if not prefs.get('PURGE_DENY'):
- lock_file.remove()
- die("You have supplied the --upgrade099 flag, however you have not set PURGE_DENY in your configuration file")
- else:
- u = UpgradeTo099(prefs.get("HOSTS_DENY"))
- if migrate and not daemon:
- if not prefs.get('PURGE_DENY'):
- lock_file.remove()
- die("You have supplied the --migrate flag however you have not set PURGE_DENY in your configuration file.")
- else:
- m = Migrate(prefs.get("HOSTS_DENY"))
- if purge and not daemon:
- purge_time = prefs.get('PURGE_DENY')
- if not purge_time:
- lock_file.remove()
- die("You have provided the --purge flag however you have not set PURGE_DENY in your configuration file.")
- else:
- try:
- p = Purge(prefs,
- purge_time)
- except Exception as e:
- lock_file.remove()
- die(str(e))
- try:
- for f in logfiles:
- dh = DenyHosts(f, prefs, lock_file, ignore_offset,
- first_time, noemail, daemon)
- except SystemExit as e:
- pass
- except Exception as e:
- traceback.print_exc(file=sys.stdout)
- print ("\nDenyHosts exited abnormally")
- if sync_mode and not daemon:
- if not prefs.get('SYNC_SERVER'):
- lock_file.remove()
- die("You have provided the --sync flag however your configuration file is missing a value for SYNC_SERVER.")
- sync_upload = is_true(prefs.get("SYNC_UPLOAD"))
- sync_download = is_true(prefs.get("SYNC_DOWNLOAD"))
- if not sync_upload and not sync_download:
- lock_file.remove()
- die("You have provided the --sync flag however your configuration file has SYNC_UPLOAD and SYNC_DOWNLOAD set to false.")
- try:
- sync = Sync(prefs)
- if sync_upload:
- timestamp = sync.send_new_hosts()
- if sync_download:
- new_hosts = sync.receive_new_hosts()
- if new_hosts:
- info("received new hosts: %s", str(new_hosts))
- sync.get_denied_hosts()
- sync.update_hosts_deny(new_hosts)
- sync.xmlrpc_disconnect()
- except Exception as e:
- lock_file.remove()
- die("Error synchronizing data", e)
- # remove lock file on exit
- lock_file.remove()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement