X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-generate;h=49ef0d0905425a70548fc3dfa4d296a20cf558b7;hb=23134524a8fd012522da7f0a7a5cda0175f37720;hp=d8c394b0e8a95e5384bc6d68eb62d2723b231041;hpb=3819c3833469b12455fb1aa40c410f9bc2774b93;p=mirror%2Fuserdir-ldap.git diff --git a/ud-generate b/ud-generate index d8c394b..49ef0d0 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,39 +413,21 @@ 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) F = open(File, "w", 0600) os.umask(OldMask) - root = Element('include') - 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']) - user = Element('user') - user.attrib['id'] = "%s" % (a['uid']) - root.append(user) - params = Element('params') - user.append(params) - param = Element('param') - params.append(param) - param.attrib['name'] = "a1-hash" - param.attrib['value'] = "%s" % (Pass) - variables = Element('variables') - user.append(variables) - variable = Element('variable') - variable.attrib['name'] = "toll_allow" - variable.attrib['value'] = "domestic,international,local" - variables.append(variable) - - F.write("%s" % (prettify(root))) - + Line = "%s@debian.org:%s:rtc.debian.org:AUTHORIZED" % (a['uid'], str(a['rtcPassword'])) + Line = Sanitize(Line) + "\n" + F.write("%s" % (Line)) except: Die(File, None, F) @@ -1120,7 +1105,8 @@ def get_accounts(ldap_conn): "keyFingerPrint", "privateSub", "mailDisableMessage",\ "mailGreylisting", "mailCallout", "mailRBL", "mailRHSBL",\ "mailWhitelist", "sudoPassword", "objectClass", "accountStatus",\ - "mailContentInspectionAction", "webPassword", "voipPassword"]) + "mailContentInspectionAction", "webPassword", "rtcPassword",\ + "bATVToken"]) if passwd_attrs is None: raise UDEmptyList, "No Users" @@ -1208,7 +1194,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. @@ -1328,8 +1314,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: @@ -1400,6 +1386,34 @@ def getLastBuildTime(gdir): return (cache_last_ldap_mod, cache_last_unix_mod, cache_last_run) +def mq_notify(options, message): + 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 + } + + msg = { + 'message': message, + 'timestamp': int(time.time()) + } + conn = None + try: + conn = Connection(conf=conf) + conn.topic_send(config.topic, + json.dumps(msg), + 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", @@ -1435,16 +1449,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: + msg = 'Update forced' if options.force else 'Update needed' + generate_all(generate_dir, l) + mq_notify(options, msg) + 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__":