All pastes #103512 Raw Copy code Copy link Edit

Something

public unlisted python v1 · immutable
#103512 ·published 2006-07-28 10:17 UTC
rendered paste body
#!/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()