def handle(self, *args, **options): self.options = options try: load_configuration_file(self.options['config']) if settings.config.has_key('username'): if settings.config['username'].endswith(DebianUser.base_dn): settings.DATABASES['ldap']['USER'] = settings.config[ 'username'] else: settings.DATABASES['ldap']['USER'] = '******' % ( settings.config['username'], DebianUser.base_dn) else: raise CommandError( _('configuration file must specify username parameter')) if settings.config.has_key('password'): settings.DATABASES['ldap']['PASSWORD'] = settings.config[ 'password'] else: raise CommandError( _('configuration file must specify password parameter')) message = email.message_from_file(sys.stdin) result = self.process_message(message) self.generate_reply(message, result) except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options logged_in_uid = '' try: load_configuration_file(options['config']) except Exception as err: raise CommandError(err) if not options['binddn']: options['binddn'] = getpass.getuser() if options['binddn'].endswith(DebianUser.base_dn): settings.DATABASES['ldap']['USER'] = options['binddn'] logged_in_uid = options['binddn'].split(',')[0].split('=')[0] else: settings.DATABASES['ldap']['USER'] = '******' % ( options['binddn'], DebianUser.base_dn) logged_in_uid = options['binddn'] if not options['passwd']: try: options['passwd'] = getpass.getpass() except EOFError: self.stdout.write('\n') return if not options['passwd']: raise CommandError(_('must specify password')) settings.DATABASES['ldap']['PASSWORD'] = options['passwd'] try: logged_in_user = DebianUser.objects.get(uid=logged_in_uid) self.error = False if args: for looked_up_uid in args: try: looked_up_user = DebianUser.objects.get( uid__exact=looked_up_uid) self.validate_user(looked_up_user) except ObjectDoesNotExist: self.error = True if options['verbosity'] > '0': self.stdout.write( _('nak:%s:uid does not exist\n' % (uid))) else: looked_up_users = DebianUser.objects.all() for looked_up_user in looked_up_users: self.validate_user(looked_up_user) if self.error: raise CommandError(_('validation errors detected')) except ObjectDoesNotExist: raise CommandError(_('user not found')) except ldap.INVALID_CREDENTIALS: raise CommandError(_('invalid credentials')) except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options logged_in_uid = '' try: load_configuration_file(options['config']) except Exception as err: raise CommandError(err) if not options['binddn']: options['binddn'] = getpass.getuser() if options['binddn'].endswith(User.base_dn): settings.DATABASES['ldap']['USER'] = options['binddn'] logged_in_uid = options['binddn'].split(',')[0].split('=')[0] else: settings.DATABASES['ldap']['USER'] = '******' % (options['binddn'], User.base_dn) logged_in_uid = options['binddn'] if not options['passwd']: try: options['passwd'] = getpass.getpass() except EOFError: self.stdout.write('\n') return if not options['passwd']: raise CommandError('must specify password') settings.DATABASES['ldap']['PASSWORD'] = options['passwd'] try: logged_in_user = User.objects.get(uid=logged_in_uid) self.error = False if args: for looked_up_uid in args: try: looked_up_user = User.objects.get(uid__exact=looked_up_uid) self.validate_user(looked_up_user) except ObjectDoesNotExist: self.error = True if options['verbosity'] > '0': self.stdout.write('nak:%s:uid does not exist\n' % (uid)) else: looked_up_users = User.objects.all() for looked_up_user in looked_up_users: self.validate_user(looked_up_user) if self.error: raise CommandError('validation errors detected') except ObjectDoesNotExist: raise CommandError('user not found') except ldap.INVALID_CREDENTIALS: raise CommandError('invalid credentials') except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options try: load_configuration_file(self.options['config']) if settings.config.has_key('username'): if settings.config['username'].endswith(DebianUser.base_dn): settings.DATABASES['ldap']['USER'] = settings.config[ 'username'] else: settings.DATABASES['ldap']['USER'] = '******' % ( settings.config['username'], DebianUser.base_dn) else: raise CommandError( _('configuration file must specify username parameter')) if settings.config.has_key('password'): settings.DATABASES['ldap']['PASSWORD'] = settings.config[ 'password'] else: raise CommandError( _('configuration file must specify password parameter')) message = email.message_from_file(sys.stdin) user = None key = '' val = '[%s]' % (time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime(time.time()))) if not key: # determine user from signature try: (fingerprint, content, timestamp) = verify_message(message) user = get_user_from_fingerprint(fingerprint) key = 'activityPGP' val += ' "%s" ' % (fingerprint) except: pass if not key: # determine user from headers try: user = get_user_from_headers(message) key = 'activityFrom' val += ' "%s" ' % (message.get('From')) except: pass if user: val += ' "%s" "%s"' % (message.get('X-Mailing-List'), message.get('Message-ID')) if self.options['dryrun']: sys.stdout.write('%s: %s\n' % (key, val)) else: user.do_update(key, val) user.save() except Exception as err: raise CommandError(err)
def handle(self, *args, **options): logged_in_uid = '' looked_up_uid = '' if len(args) == 0: looked_up_uid = getpass.getuser() elif len(args) == 1: looked_up_uid = args[0] else: raise CommandError(_('must specify at most one uid as argument')) try: load_configuration_file(options['config']) except Exception as err: raise CommandError(err) if not options['binddn']: options['binddn'] = getpass.getuser() if options['binddn'].endswith(DebianUser.base_dn): settings.DATABASES['ldap']['USER'] = options['binddn'] logged_in_uid = options['binddn'].split(',')[0].split('=')[0] else: settings.DATABASES['ldap']['USER'] = '******' % ( options['binddn'], DebianUser.base_dn) logged_in_uid = options['binddn'] if not options['passwd']: try: options['passwd'] = getpass.getpass() except EOFError: self.stdout.write('\n') return if not options['passwd']: raise CommandError(_('must specify password')) settings.DATABASES['ldap']['PASSWORD'] = options['passwd'] try: logged_in_user = DebianUser.objects.get(uid=logged_in_uid) looked_up_user = DebianUser.objects.get(uid=looked_up_uid) if logged_in_user.dn is looked_up_user.dn or 'adm' in logged_in_user.supplementaryGid: Handler(self.stdout, looked_up_user, logged_in_user).cmdloop() else: raise CommandError(_('insufficient privileges')) except ObjectDoesNotExist: raise CommandError(_('user not found')) except ldap.INVALID_CREDENTIALS: raise CommandError(_('invalid credentials')) except Exception as err: raise CommandError(err)
def handle(self, *args, **options): logged_in_uid = '' looked_up_uid = '' if len(args) == 0: looked_up_uid = getpass.getuser() elif len(args) == 1: looked_up_uid = args[0] else: raise CommandError(_('must specify at most one uid as argument')) try: load_configuration_file(options['config']) except Exception as err: raise CommandError(err) if not options['binddn']: options['binddn'] = getpass.getuser() if options['binddn'].endswith(DebianUser.base_dn): settings.DATABASES['ldap']['USER'] = options['binddn'] logged_in_uid = options['binddn'].split(',')[0].split('=')[0] else: settings.DATABASES['ldap']['USER'] = '******' % (options['binddn'], DebianUser.base_dn) logged_in_uid = options['binddn'] if not options['passwd']: try: options['passwd'] = getpass.getpass() except EOFError: self.stdout.write('\n') return if not options['passwd']: raise CommandError(_('must specify password')) settings.DATABASES['ldap']['PASSWORD'] = options['passwd'] try: logged_in_user = DebianUser.objects.get(uid=logged_in_uid) looked_up_user = DebianUser.objects.get(uid=looked_up_uid) if logged_in_user.dn is looked_up_user.dn or 'adm' in logged_in_user.supplementaryGid: Handler(self.stdout, looked_up_user, logged_in_user).cmdloop() else: raise CommandError(_('insufficient privileges')) except ObjectDoesNotExist: raise CommandError(_('user not found')) except ldap.INVALID_CREDENTIALS: raise CommandError(_('invalid credentials')) except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options try: load_configuration_file(self.options['config']) if settings.config.has_key('username'): if settings.config['username'].endswith(DebianUser.base_dn): settings.DATABASES['ldap']['USER'] = settings.config['username'] else: settings.DATABASES['ldap']['USER'] = '******' % (settings.config['username'], DebianUser.base_dn) else: raise CommandError(_('configuration file must specify username parameter')) if settings.config.has_key('password'): settings.DATABASES['ldap']['PASSWORD'] = settings.config['password'] else: raise CommandError(_('configuration file must specify password parameter')) except Exception as err: raise CommandError(err) self.dstdir = os.path.join(settings.CACHE_DIR, 'hosts') self.makedirs(self.dstdir) self.tpldir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'templates')) self.finder = TemplateLookup(directories=[self.tpldir], encoding_errors='ignore', output_encoding='utf-8') try: with open(os.path.join(self.dstdir, 'ud-generate.lock'), 'w') as f: lock_acquired = False lock_time_out = time.time() + 300 while not lock_acquired: try: fcntl.lockf(f, fcntl.LOCK_EX | fcntl.LOCK_NB) lock_acquired = True except IOError: if time.time() > lock_time_out: raise Exception(_('unable to acquire lock')) time.sleep(2) if self.options['force'] or self.need_update() : with open(os.path.join(self.dstdir, 'last_update.trace'), 'w') as f: self.marshall() self.generate() last_generate = datetime.utcnow().strftime('%Y%m%d%H%M%S.%fZ') if not hasattr(self, 'last_file_mod') : self.last_file_mod = last_generate if not hasattr(self, 'last_ldap_mod') : self.last_ldap_mod = last_generate f.write(yaml.dump({'last_file_mod': self.last_file_mod, 'last_ldap_mod': self.last_ldap_mod, 'last_generate': last_generate})) if self.options['mq']: notify_via_mq(self.options, 'Update forced' if self.options['force'] else 'Update needed') except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options try: load_configuration_file(self.options['config']) if settings.config.has_key('username'): if settings.config['username'].endswith(DebianUser.base_dn): settings.DATABASES['ldap']['USER'] = settings.config['username'] else: settings.DATABASES['ldap']['USER'] = '******' % (settings.config['username'], DebianUser.base_dn) else: raise CommandError(_('configuration file must specify username parameter')) if settings.config.has_key('password'): settings.DATABASES['ldap']['PASSWORD'] = settings.config['password'] else: raise CommandError(_('configuration file must specify password parameter')) message = email.message_from_file(sys.stdin) user = None key = '' val = '[%s]' % ( time.strftime("%a, %d %b %Y %H:%M:%S",time.gmtime(time.time())) ) if not key: # determine user from signature try: (fingerprint, content, timestamp) = verify_message(message) user = get_user_from_fingerprint(fingerprint) key = 'activityPGP' val += ' "%s" ' % (fingerprint) except: pass if not key: # determine user from headers try: user = get_user_from_headers(message) key = 'activityFrom' val += ' "%s" ' % (message.get('From')) except: pass if user: val += ' "%s" "%s"' % (message.get('X-Mailing-List'), message.get('Message-ID')) if self.options['dryrun']: sys.stdout.write('%s: %s\n' % (key, val)) else: user.do_update(key, val) user.save() except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options try: load_configuration_file(self.options['config']) if settings.config.has_key('username'): if settings.config['username'].endswith(User.base_dn): settings.DATABASES['ldap']['USER'] = settings.config['username'] else: settings.DATABASES['ldap']['USER'] = '******' % (settings.config['username'], User.base_dn) else: raise CommandError('configuration file must specify username parameter') if settings.config.has_key('password'): settings.DATABASES['ldap']['PASSWORD'] = settings.config['password'] else: raise CommandError('configuration file must specify password parameter') message = email.message_from_file(sys.stdin) result = self.process_message(message) self.generate_reply(message, result) except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options try: load_configuration_file(self.options['config']) if self.options['inetd']: try: handler = GenericHandler() uid = sys.stdin.readline(512).strip() sys.stdout.write(handler.handle(uid).encode('utf-8')) except Exception as err: sys.stdout.write(u'error has occured\n'.encode('utf-8')) finally: sys.stdout.flush() else: # run as daemon server = FingerServer(('', 79), FingerHandler) if self.options['foreground']: server.serve_forever() else: with daemon.DaemonContext(uid=pwd.getpwnam('nobody').pw_uid, gid=grp.getgrnam('nogroup').gr_gid): server.serve_forever() except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options try: load_configuration_file(self.options['config']) if settings.config.has_key('username'): if settings.config['username'].endswith(User.base_dn): settings.DATABASES['ldap']['USER'] = settings.config['username'] else: settings.DATABASES['ldap']['USER'] = '******' % (settings.config['username'], User.base_dn) else: raise CommandError('configuration file must specify username parameter') if settings.config.has_key('password'): settings.DATABASES['ldap']['PASSWORD'] = settings.config['password'] else: raise CommandError('configuration file must specify password parameter') server = FingerServer(('', 79), FingerHandler) if self.options['foreground']: server.serve_forever() else: with daemon.DaemonContext(): # TODO drop root server.serve_forever() except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options try: load_configuration_file(self.options['config']) if self.options['inetd']: try: handler = GenericHandler() uid = sys.stdin.readline(512).strip() sys.stdout.write(handler.handle(uid).encode('utf-8')) except Exception as err: sys.stdout.write(u'error has occurred\n'.encode('utf-8')) finally: sys.stdout.flush() else: # run as daemon server = FingerServer(('', 79), FingerHandler) if self.options['foreground']: server.serve_forever() else: with daemon.DaemonContext( uid=pwd.getpwnam('nobody').pw_uid, gid=grp.getgrnam('nogroup').gr_gid): server.serve_forever() except Exception as err: raise CommandError(err)
def handle(self, *args, **options): self.options = options try: load_configuration_file(self.options['config']) if settings.config.has_key('username'): if settings.config['username'].endswith(DebianUser.base_dn): settings.DATABASES['ldap']['USER'] = settings.config[ 'username'] else: settings.DATABASES['ldap']['USER'] = '******' % ( settings.config['username'], DebianUser.base_dn) else: raise CommandError( _('configuration file must specify username parameter')) if settings.config.has_key('password'): settings.DATABASES['ldap']['PASSWORD'] = settings.config[ 'password'] else: raise CommandError( _('configuration file must specify password parameter')) except Exception as err: raise CommandError(err) self.dstdir = os.path.join(settings.CACHE_DIR, 'hosts') self.makedirs(self.dstdir) self.tpldir = os.path.abspath( os.path.join(os.path.dirname(__file__), 'templates')) self.finder = TemplateLookup(directories=[self.tpldir], encoding_errors='ignore', output_encoding='utf-8') try: with open(os.path.join(self.dstdir, 'ud-generate.lock'), 'w') as f: lock_acquired = False lock_time_out = time.time() + 300 while not lock_acquired: try: fcntl.lockf(f, fcntl.LOCK_EX | fcntl.LOCK_NB) lock_acquired = True except IOError: if time.time() > lock_time_out: raise Exception(_('unable to acquire lock')) time.sleep(2) if self.options['force'] or self.need_update(): with open(os.path.join(self.dstdir, 'last_update.trace'), 'w') as f: self.marshall() self.generate() last_generate = datetime.utcnow().strftime( '%Y%m%d%H%M%S.%fZ') if not hasattr(self, 'last_file_mod'): self.last_file_mod = last_generate if not hasattr(self, 'last_ldap_mod'): self.last_ldap_mod = last_generate f.write( yaml.dump({ 'last_file_mod': self.last_file_mod, 'last_ldap_mod': self.last_ldap_mod, 'last_generate': last_generate })) if self.options['mq']: notify_via_mq( self.options, 'Update forced' if self.options['force'] else 'Update needed') except Exception as err: raise CommandError(err)