#!/usr/bin/env python# smazani root watched a daemonize# if default daemonize, tak jak ho vypnout...import pyinotifyimport sys,os,pwd,grpimport optparse#daemonize=Falsedaemonize=Truedir='/home/ftp'user='ftp'group='users'file_perm='0460'dir_perm='0570'events = pyinotify.EventsCodes.IN_DONT_FOLLOW # comment this to follow symlinksevents = events | pyinotify.EventsCodes.IN_CREATE | pyinotify.EventsCodes.IN_MOVED_TOevents = events | pyinotify.EventsCodes.IN_ATTRIB # comment this to allow chmod/chownparser=optparse.OptionParser()parser.add_option("-D","--daemon",dest="daemonize",default=daemonize,action="store_true", help="Run in background")parser.add_option("-q","--quiet",dest="daemonize",default=daemonize,action="store_false", help="Run in foreground")parser.add_option("-d","--directory",dest="watched_directory",default=dir, help="Directory to watch, also watchs all subdirs")parser.add_option("-u","--user",dest="user",default=user, help="Set owner")parser.add_option("-g","--group",dest="group",default=group, help="Set group owner")parser.add_option("-p","--permissions",dest="file_perm",default=file_perm, help="Set permissions for files")parser.add_option("-P","--dir-permissions",dest="dir_perm",default=dir_perm, help="Set permissions for directories")(options,args)=parser.parse_args()daemonize=options.daemonizeuser=options.usergroup=options.grouptry: user=pwd.getpwnam(user)[2] group=grp.getgrnam(group)[2]except KeyError: print "Unknow user or group" os.sys.exit()watched_directory=os.path.expanduser(options.watched_directory)if os.path.exists(watched_directory)==False: print "Directory doesn't exist" os.sys.exit()try: file_perm=int(options.file_perm,8) dir_perm=int(options.dir_perm,8)except ValueError: print "File/dir permissions must be in numeric mode" os.sys.exit()if not (file_perm<=4095 and file_perm>=0): print "Invalid file permissions" os.sys.exit()if not (file_perm<=4095 and file_perm>=0): print "Invalid file permissions" os.sys.exit()if daemonize: pid=os.fork() if (pid!=0): print "Terminate daemon with 'kill -1 %i'" % pid sys.exit()def change_permissions(event): if event.event_name=="IN_IGNORED": if event.path==watched_directory: if daemonize==False: print "Root watched directory was removed! exiting!" os.sys.exit() else: if event.event_name=="IN_ATTRIB": notifier_stop() if event.is_dir==True: os.chmod(os.path.join(event.path,event.name),dir_perm) else: os.chmod(os.path.join(event.path,event.name),file_perm) os.chown(os.path.join(event.path,event.name),user,group) if event.event_name=="IN_ATTRIB": notifier_start()def notifier_start(): global notifier,wm,wmid wm=pyinotify.WatchManager() wmid=wm.add_watch(watched_directory,events,change_permissions,True,True) notifier=pyinotify.Notifier(wm)def notifier_stop(): global notifier notifier.stop()notifier_start()try: while True: notifier.process_events() if notifier.check_events(): notifier.read_events()except KeyboardInterrupt, SystemExit: notifier_stop()