def describe_policy(users, superusers, missing = [])
      normal_users = users - superusers

      audit = "#{users.size} authorized users (#{normal_users.size} normal, #{superusers.size} superuser).\n"
      audit << "Public key missing for #{missing.map { |u| u.username }.join(", ") }.\n" if missing.size > 0

      #unless normal_users.empty?
      #  audit += "\nNormal users:\n"
      #  normal_users.each do |u|
      #    audit += "  #{u.common_name.ljust(40)} #{u.username}\n"
      #  end
      #end
      #
      #unless superusers.empty?
      #  audit += "\nSuperusers:\n"
      #  superusers.each do |u|
      #    audit += "  #{u.common_name.ljust(40)} #{u.username}\n"
      #  end
      #end

      return audit
    end
def describe_policy(users, superusers, missing = [])
      normal_users = users - superusers

      audit = "#{users.size} authorized users (#{normal_users.size} normal, #{superusers.size} superuser).\n"
      audit << "Public key missing for #{missing.map { |u| u.username }.join(", ") }.\n" if missing.size > 0

      #unless normal_users.empty?
      #  audit += "\nNormal users:\n"
      #  normal_users.each do |u|
      #    audit += "  #{u.common_name.ljust(40)} #{u.username}\n"
      #  end
      #end
      #
      #unless superusers.empty?
      #  audit += "\nSuperusers:\n"
      #  superusers.each do |u|
      #    audit += "  #{u.common_name.ljust(40)} #{u.username}\n"
      #  end
      #end

      return audit
    end
Return a verbose, human-readable description of the login policy, suitable
 for appending to an audit entry. Contains formatting such as newlines and tabs.

 == Parameters:
 @param [Array<LoginUser>] All LoginUsers
 @param [Array<LoginUser>] Subset of LoginUsers who are authorized to act as superusers
 @param [LoginPolicy] Effective login policy
 @param [Array<LoginUser>] Users for which a public key could not be obtained

 == Returns:
 @return [String] description