def unix2_chkpwd(login, passwd)
log_name = login && login.size == 20 && (passwd == "" || passwd == "X") ? "[FILTERED]" : login
Rails.logger.info "*** UNIX2_CHKPWD: checking password for user #{log_name.inspect}"
success = nil
if RUBY_VERSION.match /^1.8/
Open3.popen3("/sbin/unix2_chkpwd passwd '#{escape_quotes login}'; echo $?") do |stdin, stdout, stderr|
stdin.write passwd
stdin.close
error = stderr.read
Rails.logger.error "*** UNIX2_CHKPWD: Password check failed: #{error}" unless error.empty?
success = stdout.read == "0\n"
end
else
Open3.popen3("/sbin/unix2_chkpwd", "passwd", login) do |stdin, stdout, stderr, wait_thr|
stdin.write passwd
stdin.close
error = stderr.read
Rails.logger.error "*** UNIX2_CHKPWD: Password check failed: #{error}" unless error.empty?
success = wait_thr.value.exitstatus == 0
end
end
return success
end