[asl-commit] ActiveSambaLdap r28:

null at cozmixng.org null at cozmixng.org
Fri Aug 3 22:32:25 EDT 2007


retro	2007-08-04 11:32:24 +0900 (Sat, 04 Aug 2007)

  New Revision: 28

  Modified files:
    trunk/bin/asl-usermod

  Log:


  Modified: trunk/bin/asl-usermod (+67 -40)
===================================================================
--- trunk/bin/asl-usermod	2006-11-14 15:25:32 +09:00 (rev 27)
+++ trunk/bin/asl-usermod	2007-08-04 11:32:24 +09:00 (rev 28)
@@ -7,6 +7,7 @@
 require 'active_samba_ldap/command'
 
 argv, opts, options = ActiveSambaLdap::Command.parse_options do |opts, options|
+  options.computer_account = false
   options.gecos = nil
   options.home_directory = nil
   options.move_home_directory = false
@@ -37,6 +38,11 @@
 
   opts.banner += " USER_NAME"
 
+  opts.on("-c", "--[no-]computer-account",
+          "is a Windows Workstation",
+          "(otherwise, Windows user)",
+          "(#{options.computer_account})") {|options.computer_account|}
+
   opts.on("--gecos=GECOS", "gecos") {|options.gecos|}
   opts.on("-d", "--home-directory=HOME_DIR",
           "home directory") {|options.home_directory|}
@@ -139,15 +145,28 @@
   ldap_mapping
 end
 
+class Computer < ActiveSambaLdap::Computer
+  ldap_mapping
+end
+
 class Group < ActiveSambaLdap::Group
   ldap_mapping
 end
 
-unless User.exists?(name)
-  puts "user '#{name}' doesn't exist."
+options.computer_account = true if /\$$/ =~ name
+
+member_class = options.computer_account ? Computer : User
+member_type = member_class.name.downcase
+
+if options.computer_account
+  name = name.chomp("$") + "$"
+end
+
+unless member_class.exists?(name)
+  puts "#{member_type} '#{name}' doesn't exist."
   exit 1
 end
-user = User.find(name)
+member = member_class.find(name)
 
 unless Process.uid.zero?
   password = ActiveSambaLdap::Command.read_password("Enter your password: ")
@@ -155,7 +174,7 @@
   auth_class = Class.new(ActiveSambaLdap::Base)
   config = ActiveSambaLdap::Base.configurations["reference"]
   begin
-    auth_class.establish_connection(config.merge(:bind_dn => user.dn,
+    auth_class.establish_connection(config.merge(:bind_dn => member.dn,
                                                  :password => password,
                                                  :allow_anonymous => false))
   rescue ActiveLdap::AuthenticationError
@@ -168,7 +187,7 @@
 
 if options.uid
   begin
-    user.change_uid_number(options.uid, options.allow_non_unique_uid_number)
+    member.change_uid_number(options.uid, options.allow_non_unique_uid_number)
   rescue ActiveSambaLdap::UidNumberAlreadyExists
     puts $!.message
     exit 1
@@ -177,7 +196,7 @@
 
 if options.gid
   begin
-    user.primary_group = Group.find_by_name_or_gid_number(options.gid)
+    member.primary_group = Group.find_by_name_or_gid_number(options.gid)
   rescue ActiveSambaLdap::Error
     puts $!.message
     exit 1
@@ -185,32 +204,32 @@
 end
 
 if options.shell
-  user.login_shell = options.shell
+  member.login_shell = options.shell
 end
 
 if options.gecos
-  user.gecos = options.gecos
-  user.description = options.gecos
-  user.display_name = options.gecos
+  member.gecos = options.gecos
+  member.description = options.gecos
+  member.display_name = options.gecos
 end
 
 if options.home_directory
   if options.move_home_directory and !File.exist?(options.home_directory)
-    FileUtils.mv(user.home_directory, options.home_directory)
+    FileUtils.mv(member.home_directory, options.home_directory)
   end
-  user.home_directory = options.home_directory
+  member.home_directory = options.home_directory
 end
 
 if options.canonical_name
-  user.cn = options.canonical_name
+  member.cn = options.canonical_name
 end
 
 if options.surname
-  user.sn = options.surname
+  member.sn = options.surname
 end
 
 if options.given_name
-  user.given_name = options.given_name
+  member.given_name = options.given_name
 end
 
 if options.mail_addresses
@@ -222,8 +241,8 @@
 end
 
 if options.supplementary_groups
-  user.groups = [] unless options.merge_groups
-  user.groups = options.supplementary_groups.collect do |group|
+  member.groups = [] unless options.merge_groups
+  member.groups = options.supplementary_groups.collect do |group|
     begin
       Group.find_by_name_or_gid_number(group)
     rescue ActiveSambaLdap::GidNumberDoesNotExist
@@ -234,73 +253,81 @@
 end
 
 if options.expire_date
-  user.samba_kickoff_time = options.expire_date.to_i.to_s
+  member.samba_kickoff_time = options.expire_date.to_i.to_s
 end
 
 if options.samba_account_flags
-  user.samba_acct_flags = options.samba_account_flags
+  member.samba_acct_flags = options.samba_account_flags
 end
 
 unless options.can_change_password.nil?
   if options.can_change_password
-    user.enable_password_change
+    member.enable_password_change
   else
-    user.disable_password_change
+    member.disable_password_change
   end
 end
 
 unless options.must_change_password.nil?
   if options.must_change_password
-    user.enable_forcing_password_change
+    member.enable_forcing_password_change
   else
-    user.disable_forcing_password_change
+    member.disable_forcing_password_change
   end
 end
 
 if options.samba_home_path
-  user.samba_home_path = options.samba_home_path
+  member.samba_home_path = options.samba_home_path
 end
 
 if options.samba_home_drive
-  user.samba_home_drive = options.samba_home_drive.sub(/([^:])$/, "\\1:")
+  member.samba_home_drive = options.samba_home_drive.sub(/([^:])$/, "\\1:")
 end
 
 if options.samba_logon_script
-  user.samba_logon_script = options.samba_logon_script
+  member.samba_logon_script = options.samba_logon_script
 end
 
 if options.samba_profile_path
-  user.samba_profile_path = options.samba_profile_path
+  member.samba_profile_path = options.samba_profile_path
 end
 
 unless options.enable.nil?
   if options.enable
-    user.enable
+    member.enable
   else
-    user.disable
+    member.disable
   end
 end
 
-user.save!
+member.save!
 
 if options.new_user_name
-  if User.exists?(options.new_user_name)
-    puts "user '#{options.new_user_name}' always exists."
+  if options.computer_account
+    options.new_user_name = options.new_user_name.chomp("$") + "$"
+  end
+  if member_class.exists?(options.new_user_name)
+    puts "#{member_type} '#{options.new_user_name}' always exists."
     exit 1
   end
-  new_user = User.new(options.new_user_name)
+  new_member = member_class.new(options.new_user_name)
 
-  new_user.cn = options.new_user_name
-  new_user.attributes = user.attributes.reject do |key, value|
+  new_member.cn = options.new_user_name
+  new_member.attributes = member.attributes.reject do |key, value|
     %w(dn cn uid).include?(key)
   end
-  new_user.save!
-  user.groups.each do |group|
-    group.users -= [user]
-    group.users << new_user
+  new_member.save!
+  member.groups.each do |group|
+    if options.computer_account
+      group.computers -= [member]
+      group.computers << new_member
+    else
+      group.users -= [member]
+      group.users << new_member
+    end
   end
 
-  user.destroy
+  member.destroy
 end
 
 ActiveSambaLdap::Base.restart_nscd



More information about the asl-commit mailing list