#!/usr/bin/ruby -W0
$: << "../lib"

require 'activeldap'
require 'objects/user'
require 'objects/group'
require 'password'


(printf($stderr, "Usage:\n%s name\n", $0); exit 1) if ARGV.size != 1

pwb = Proc.new { |x|
  if x.nil?
    Password.get("[#{ENV['USER']}] Password: ")
  else
    Password.get("[#{x}] Password: ")
  end
}
ActiveLDAP::Base.connect(:password_block => pwb, :allow_anonymous => false)
user = User.new(ARGV[0])
unless user.exists?
  printf($stderr, "User #{ARGV[0]} does not exist.\n\n")
  exit 1
end

puts "-- Setting new user password -- "
class PasswordMismatch < RuntimeError
end

count = 0
begin
  pw1 = pwb.call("#{ARGV[0]}")
  pw2 = pwb.call("#{ARGV[0]}")
  raise PasswordMismatch if pw1 != pw2
rescue PasswordMismatch
  puts "Password mismatch!"
  exit 1 if count == 3
  retry
end
user.userPassword = '{CRYPT}' + pw1.crypt(Password::MD5)
user.write
puts "success"
exit 0


