| Lines 45-50
          import time
      
      
        Link Here | 
        
          | 45 | import errno | 45 | import errno | 
        
          | 46 | import signal | 46 | import signal | 
        
          | 47 | import grp | 47 | import grp | 
            
              |  |  | 48 | import re | 
        
          | 48 |  | 49 |  | 
        
          | 49 | name = 'bind' | 50 | name = 'bind' | 
        
          | 50 | description = 'Update BIND zones' | 51 | description = 'Update BIND zones' | 
  
    | Lines 62-67
          SIGNAL = dict([(getattr(signal, _), _) for _ in dir(signal) if _.startswith('SIG
      
      
        Link Here | 
        
          | 62 |  | 63 |  | 
        
          | 63 | __zone_created_or_removed = False | 64 | __zone_created_or_removed = False | 
        
          | 64 |  | 65 |  | 
            
              |  |  | 66 | reZoneName = re.compile('^([a-zA-Z0-9]([a-zA-Z0-9-]{0,63}[a-zA-Z0-9])?)([.]([a-zA-Z0-9]([a-zA-Z0-9-]{0,63}[a-zA-Z0-9])?))*$') | 
        
          | 65 |  | 67 |  | 
        
          | 66 | def initialize(): | 68 | def initialize(): | 
        
          | 67 | 	"""Initialize module on first run.""" | 69 | 	"""Initialize module on first run.""" | 
  
    | Lines 92-109
          def handler(dn, new, old):
      
      
        Link Here | 
        
          | 92 | 	try: | 94 | 	try: | 
        
          | 93 | 		if new and not old: | 95 | 		if new and not old: | 
        
          | 94 | 			# Add | 96 | 			# Add | 
          
            
              | 95 | 			_new_zone(listener.configRegistry, new['zoneName'][0], dn) | 97 | 			if reZoneName.match(new['zoneName'][0]): | 
            
              |  |  | 98 | 				_new_zone(listener.configRegistry, new['zoneName'][0], dn) | 
            
              | 99 | 			else: | 
            
              | 100 | 				ud.debug(ud.LISTENER, ud.WARN, 'Ignoring addition of invalid zoneName %r' % (new['zoneName'][0], )) | 
        
          | 96 | 		elif old and not new: | 101 | 		elif old and not new: | 
        
          | 97 | 			# Remove | 102 | 			# Remove | 
          
            
              | 98 | 			_remove_zone(old['zoneName'][0]) | 103 | 			if reZoneName.match(old['zoneName'][0]): | 
            
              |  |  | 104 | 				_remove_zone(old['zoneName'][0]) | 
            
              | 105 | 			else: | 
            
              | 106 | 				ud.debug(ud.LISTENER, ud.WARN, 'Ignoring removal of invalid zoneName %r' % (old['zoneName'][0], )) | 
        
          | 99 | 		if new.get('zoneName'): | 107 | 		if new.get('zoneName'): | 
        
          | 100 | 			# Change | 108 | 			# Change | 
          
            
              | 101 | 			# Create an empty file to trigger the postrun() | 109 | 			if reZoneName.match(new.get('zoneName')[0]): | 
            
              | 102 | 			zonefile = os.path.join(PROXY_CACHE_DIR, "%s.zone" % (new['zoneName'][0],)) | 110 | 				# Create an empty file to trigger the postrun() | 
            
              | 103 | 			proxy_cache = open(zonefile, 'w') | 111 | 				zonefile = os.path.join(PROXY_CACHE_DIR, "%s.zone" % (new['zoneName'][0],)) | 
            
              | 104 | 			proxy_cache.close() | 112 | 				proxy_cache = open(zonefile, 'w') | 
            
              | 105 | 			os.chmod(zonefile, 0o640) | 113 | 				proxy_cache.close() | 
            
              | 106 | 			chgrp_bind(zonefile) | 114 | 				os.chmod(zonefile, 0o640) | 
            
              |  |  | 115 | 				chgrp_bind(zonefile) | 
            
              | 116 | 			else: | 
            
              | 117 | 				ud.debug(ud.LISTENER, ud.WARN, 'Ignoring change of invalid zoneName %r' % (new.get('zoneName')[0], )) | 
        
          | 107 | 	finally: | 118 | 	finally: | 
        
          | 108 | 		listener.unsetuid() | 119 | 		listener.unsetuid() | 
        
          | 109 |  | 120 |  |