X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-generate;h=0f867f4b25b0b35bab6ae73f8e254bc949dd721f;hb=b56535412882ea06155eb3faaaa2357c52a4279e;hp=3cbe113fff23146e797ae222ebc274dfec50fb4e;hpb=5c58925b8883cedd82f2d3f43c6905040be4df6c;p=mirror%2Fuserdir-ldap.git diff --git a/ud-generate b/ud-generate index 3cbe113..0f867f4 100755 --- a/ud-generate +++ b/ud-generate @@ -28,6 +28,9 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +from dsa_mq.connection import Connection +from dsa_mq.config import Config + import string, re, time, ldap, optparse, sys, os, pwd, posix, socket, base64, hashlib, shutil, errno, tarfile, grp, fcntl, dbm from userdir_ldap import * from userdir_exceptions import * @@ -410,8 +413,8 @@ def GenWebPassword(accounts, File): Die(File, None, F) raise -# Generate the voipPassword list -def GenVoipPassword(accounts, File): +# Generate the rtcPassword list +def GenRtcPassword(accounts, File): F = None try: OldMask = os.umask(0077) @@ -419,15 +422,10 @@ def GenVoipPassword(accounts, File): os.umask(OldMask) for a in accounts: - if not 'voipPassword' in a: continue + if not 'rtcPassword' in a: continue if not a.pw_active(): continue - Pass = str(a['voipPassword']) - realm = 'sip.debian.org' - - HA1 = "%s:%s%:%s" : (a['uid'], realm, Pass) - hashlib.md5(HA1).hexdigest() - Line = "%s:%s:%s:AUTHORIZED" % (a['uid'], realm, Pass) + Line = "%s@debian.org:%s:rtc.debian.org:AUTHORIZED" % (a['uid'], str(a['rtcPassword'])) Line = Sanitize(Line) + "\n" F.write("%s" % (Line)) @@ -1107,7 +1105,7 @@ def get_accounts(ldap_conn): "keyFingerPrint", "privateSub", "mailDisableMessage",\ "mailGreylisting", "mailCallout", "mailRBL", "mailRHSBL",\ "mailWhitelist", "sudoPassword", "objectClass", "accountStatus",\ - "mailContentInspectionAction", "webPassword", "voipPassword"]) + "mailContentInspectionAction", "webPassword", "rtcPassword"]) if passwd_attrs is None: raise UDEmptyList, "No Users" @@ -1195,7 +1193,7 @@ def generate_all(global_dir, ldap_conn): GenMailList(accounts, global_dir + "mail-rhsbl", "mailRHSBL") GenMailList(accounts, global_dir + "mail-whitelist", "mailWhitelist") GenWebPassword(accounts, global_dir + "web-passwords") - GenVoipPassword(accounts, global_dir + "voip-passwords") + GenRtcPassword(accounts, global_dir + "rtc-passwords") GenKeyrings(global_dir) # Compatibility. @@ -1315,8 +1313,8 @@ def generate_host(host, global_dir, all_accounts, all_hosts, ssh_userkeys): if 'WEB-PASSWORDS' in ExtraList: DoLink(global_dir, OutDir, "web-passwords") - if 'VOIP-PASSWORDS' in ExtraList: - DoLink(global_dir, OutDir, "voip-passwords") + if 'RTC-PASSWORDS' in ExtraList: + DoLink(global_dir, OutDir, "rtc-passwords") if 'KEYRING' in ExtraList: for k in Keyrings: @@ -1387,12 +1385,37 @@ def getLastBuildTime(gdir): return (cache_last_ldap_mod, cache_last_unix_mod, cache_last_run) +def mq_notify(options): + options.section = 'dsa-udgenerate' + options.config = '/etc/dsa/pubsub.conf' + + config = Config(options) + conf = { + 'rabbit_userid': config.username, + 'rabbit_password': config.password, + 'rabbit_virtual_host': config.vhost, + 'rabbit_hosts': ['pubsub02.debian.org', 'pubsub01.debian.org'], + 'use_ssl': False + } + conn = None + try: + conn = Connection(conf=conf) + conn.topic_send(config.topic, + 'update', + exchange_name=config.exchange, + timeout=5) + finally: + if conn: + conn.close() + def ud_generate(): parser = optparse.OptionParser() parser.add_option("-g", "--generatedir", dest="generatedir", metavar="DIR", help="Output directory.") parser.add_option("-f", "--force", dest="force", action="store_true", help="Force generation, even if no update to LDAP has happened.") + parser.add_option("-m", "--mq", action="store_true", default=False, + help="Send update trigger over MQ") (options, args) = parser.parse_args() if len(args) > 0: @@ -1422,16 +1445,15 @@ def ud_generate(): need_update = (ldap_last_mod > cache_last_ldap_mod) or (unix_last_mod > cache_last_unix_mod) or (time_started - last_run > MAX_UD_AGE) - if not options.force and not need_update: - fd = open(os.path.join(generate_dir, "last_update.trace"), "w") - fd.write("%s\n%s\n%s\n" % (ldap_last_mod, unix_last_mod, last_run)) - fd.close() - sys.exit(0) - - tracefd = open(os.path.join(generate_dir, "last_update.trace"), "w") - generate_all(generate_dir, l) - tracefd.write("%s\n%s\n%s\n" % (ldap_last_mod, unix_last_mod, time_started)) - tracefd.close() + fd = open(os.path.join(generate_dir, "last_update.trace"), "w") + if need_update or options.force: + generate_all(generate_dir, l) + if options.mq: + mq_notify(options) + last_run = int(time.time()) + fd.write("%s\n%s\n%s\n" % (ldap_last_mod, unix_last_mod, last_run)) + fd.close() + sys.exit(0) if __name__ == "__main__":