This is an automated email from the ASF dual-hosted git repository.

rubys pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git


The following commit(s) were added to refs/heads/master by this push:
     new d71f1df  rough in ASF::Person#rename support (untested)
d71f1df is described below

commit d71f1dffb3131c94ce6b6d5a53a8ee3e97ccb24a
Author: Sam Ruby <ru...@intertwingly.net>
AuthorDate: Fri Feb 23 19:09:53 2018 -0500

    rough in ASF::Person#rename support (untested)
---
 lib/whimsy/asf/ldap.rb | 59 +++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 49 insertions(+), 10 deletions(-)

diff --git a/lib/whimsy/asf/ldap.rb b/lib/whimsy/asf/ldap.rb
index 709b42f..f3d1e40 100644
--- a/lib/whimsy/asf/ldap.rb
+++ b/lib/whimsy/asf/ldap.rb
@@ -554,6 +554,43 @@ module ASF
       person
     end
 
+    # rename a person
+    def rename(newid, attrs={})
+      # ensure person exists in LDAP
+      raise ArgumentError(self.id) unless self.dn
+
+      # create a new person
+      new_person = ASF::Person.create(self.attrs.merge(attrs).merge(uid: 
newid))
+
+      # determine what groups the individual is a member of
+      uid_groups = ASF.search_subtree('dc=apache,dc=org', 
+        'memberUid=#{self.id}', 'dn').flatten
+      dn_groups = ASF.search_subtree('dc=apache,dc=org', 
+        'member=#{self.dn}', 'dn').flatten
+
+      # add new user to all groups
+      uid_groups.each do |dn|
+        ASF::LDAP.modify(dn, [ASF::Base.mod_add('memberUid', new_person.id)])
+      end
+      dn_groups.each do |dn|
+        ASF::LDAP.modify(dn, [ASF::Base.mod_add('member', new_person.dn)])
+      end
+
+      # remove original user from all groups
+      uid_groups.each do |dn|
+        ASF::LDAP.modify(dn, [ASF::Base.mod_delete('memberUid', self.id)])
+      end
+      dn_groups.each do |dn|
+        ASF::LDAP.modify(dn, [ASF::Base.mod_delete('member', self.dn)])
+      end
+
+      # remove original user
+      ASF::Person.remove(person.id)
+
+      # return new user
+      new_person
+    end
+
     # completely remove a committer from LDAP
     # ** DO NOT USE **
     # In almost all cases, use deregister instead
@@ -813,9 +850,19 @@ module ASF
         ASF::search_one(ASF::Person.base, 'uid=*', 'uidNumber').
           flatten.map(&:to_i).max + 1
 
-      nextgid = attrs['gidNumber'] ||
-        ASF::search_one(group_base, 'cn=*', 'gidNumber').
+      nextgid = attrs['gidNumber']
+      unless nextgid
+        nextgid = ASF::search_one(group_base, 'cn=*', 'gidNumber').
           flatten.map(&:to_i).max + 1
+
+        # create new LDAP group
+        entry = [
+          mod_add('objectClass', ['posixGroup', 'top']),
+          mod_add('cn', availid),
+          mod_add('userPassword', '{crypt}*'),
+          mod_add('gidNumber', nextgid.to_s),
+        ]
+      end
  
       # fixed attributes
       attrs.merge!({
@@ -842,14 +889,6 @@ module ASF
         end
       end
 
-      # create new LDAP group
-      entry = [
-        mod_add('objectClass', ['posixGroup', 'top']),
-        mod_add('cn', availid),
-        mod_add('userPassword', '{crypt}*'),
-        mod_add('gidNumber', nextgid.to_s),
-      ]
-
       ASF::LDAP.add("cn=#{availid},#{group_base}", entry)
 
       # create new LDAP person

-- 
To stop receiving notification emails like this one, please contact
ru...@apache.org.

Reply via email to