diff --git a/unipoly-mlmmj-sync.rb b/unipoly-mlmmj-sync.rb index 9df06a5..f4ed83f 100755 --- a/unipoly-mlmmj-sync.rb +++ b/unipoly-mlmmj-sync.rb @@ -34,10 +34,6 @@ def connect_ldap(conf) end end -def ldap_connect(ldap) - ldap.bind -end - def main conf = read_configuration(@configuration_file) conn = connect_ldap(conf) @@ -49,14 +45,27 @@ def main match = conn.search(:base => basetree, :filter => filter) unless (match.size < 1) entry = match.first - puts "Found: #{entry.dn} with #{entry.uniquemember.size} entries" + members = entry.uniquemember.map { |dn| /mail=([^,]+),/.match(dn).values_at(1).first } + puts "Found: #{entry.dn} with #{members.size} entries" mlmmj_list_binary = conf["mlmmj"]["list_binary"] mlmmj_basepath = conf["mlmmj"]["basepath"] if (File.executable?(mlmmj_list_binary)) - subscribers = %x(#{mlmmj_list_binary} -L #{mlmmj_basepath}/#{cn}@#{domain} -s) - unless ($?.exitstatus == 0) - puts "Got #{subscribers.split("\n").size} subscribers from mlmmj". + raw = %x(#{mlmmj_list_binary} -L #{mlmmj_basepath}/#{cn}@#{domain} -s) + if ($?.exitstatus == 0) + subscribers = raw.split("\n") + puts "Got #{subscribers.size} subscribers from mlmmj for #{cn}@#{domain}" + + members.each do |member| + if (subscribers.include?(member)) + subscribers.delete(member) + else + puts "#{member} is to be added to #{cn}" + end + end + print "There are #{subscribers.size} addesses to remove:" + subscribers.each { |s| print " " + s} + print "\n" else puts "Failed to get the subscribers of #{cn}@#{domain}" end