houston-devise_ldap_authenticatable 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +8 -0
- data/MIT-LICENSE +20 -0
- data/README.md +131 -0
- data/Rakefile +16 -0
- data/devise_ldap_authenticatable.gemspec +34 -0
- data/lib/devise_ldap_authenticatable.rb +50 -0
- data/lib/devise_ldap_authenticatable/exception.rb +6 -0
- data/lib/devise_ldap_authenticatable/ldap_adapter.rb +292 -0
- data/lib/devise_ldap_authenticatable/logger.rb +11 -0
- data/lib/devise_ldap_authenticatable/model.rb +95 -0
- data/lib/devise_ldap_authenticatable/routes.rb +8 -0
- data/lib/devise_ldap_authenticatable/schema.rb +14 -0
- data/lib/devise_ldap_authenticatable/strategy.rb +19 -0
- data/lib/devise_ldap_authenticatable/version.rb +3 -0
- data/lib/generators/devise_ldap_authenticatable/install_generator.rb +62 -0
- data/lib/generators/devise_ldap_authenticatable/templates/ldap.yml +51 -0
- data/spec/ldap/.gitignore +2 -0
- data/spec/ldap/base.ldif +73 -0
- data/spec/ldap/clear.ldif +26 -0
- data/spec/ldap/local.schema +6 -0
- data/spec/ldap/openldap-data/.gitignore +2 -0
- data/spec/ldap/openldap-data/run/.gitignore +2 -0
- data/spec/ldap/openldap-data/run/.gitkeep +0 -0
- data/spec/ldap/run-server +31 -0
- data/spec/ldap/server.pem +38 -0
- data/spec/ldap/slapd-test.conf.erb +107 -0
- data/spec/rails_app/Rakefile +7 -0
- data/spec/rails_app/app/controllers/application_controller.rb +7 -0
- data/spec/rails_app/app/controllers/posts_controller.rb +15 -0
- data/spec/rails_app/app/helpers/application_helper.rb +2 -0
- data/spec/rails_app/app/helpers/posts_helper.rb +2 -0
- data/spec/rails_app/app/models/post.rb +2 -0
- data/spec/rails_app/app/models/user.rb +10 -0
- data/spec/rails_app/app/views/layouts/application.html.erb +26 -0
- data/spec/rails_app/app/views/posts/index.html.erb +2 -0
- data/spec/rails_app/config.ru +4 -0
- data/spec/rails_app/config/application.rb +46 -0
- data/spec/rails_app/config/boot.rb +13 -0
- data/spec/rails_app/config/cucumber.yml +8 -0
- data/spec/rails_app/config/database.yml +25 -0
- data/spec/rails_app/config/environment.rb +5 -0
- data/spec/rails_app/config/environments/development.rb +21 -0
- data/spec/rails_app/config/environments/production.rb +46 -0
- data/spec/rails_app/config/environments/test.rb +34 -0
- data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails_app/config/initializers/devise.rb +242 -0
- data/spec/rails_app/config/initializers/inflections.rb +10 -0
- data/spec/rails_app/config/initializers/mime_types.rb +5 -0
- data/spec/rails_app/config/initializers/secret_token.rb +7 -0
- data/spec/rails_app/config/initializers/session_store.rb +8 -0
- data/spec/rails_app/config/ldap.yml +22 -0
- data/spec/rails_app/config/ldap_with_boolean_ssl.yml +22 -0
- data/spec/rails_app/config/ldap_with_erb.yml +23 -0
- data/spec/rails_app/config/ldap_with_uid.yml +18 -0
- data/spec/rails_app/config/locales/devise.en.yml +58 -0
- data/spec/rails_app/config/locales/en.yml +5 -0
- data/spec/rails_app/config/routes.rb +64 -0
- data/spec/rails_app/config/ssl_ldap.yml +21 -0
- data/spec/rails_app/config/ssl_ldap_with_erb.yml +23 -0
- data/spec/rails_app/config/ssl_ldap_with_uid.yml +18 -0
- data/spec/rails_app/db/migrate/20100708120448_devise_create_users.rb +40 -0
- data/spec/rails_app/db/schema.rb +35 -0
- data/spec/rails_app/features/manage_logins.feature +35 -0
- data/spec/rails_app/features/step_definitions/login_steps.rb +21 -0
- data/spec/rails_app/features/step_definitions/web_steps.rb +219 -0
- data/spec/rails_app/features/support/env.rb +58 -0
- data/spec/rails_app/features/support/paths.rb +38 -0
- data/spec/rails_app/lib/tasks/.gitkeep +0 -0
- data/spec/rails_app/lib/tasks/cucumber.rake +53 -0
- data/spec/rails_app/public/404.html +26 -0
- data/spec/rails_app/public/422.html +26 -0
- data/spec/rails_app/public/500.html +26 -0
- data/spec/rails_app/public/images/rails.png +0 -0
- data/spec/rails_app/public/javascripts/application.js +2 -0
- data/spec/rails_app/public/javascripts/controls.js +965 -0
- data/spec/rails_app/public/javascripts/dragdrop.js +974 -0
- data/spec/rails_app/public/javascripts/effects.js +1123 -0
- data/spec/rails_app/public/javascripts/prototype.js +4874 -0
- data/spec/rails_app/public/javascripts/rails.js +118 -0
- data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
- data/spec/rails_app/script/cucumber +10 -0
- data/spec/rails_app/script/rails +6 -0
- data/spec/spec_helper.rb +47 -0
- data/spec/support/factories.rb +16 -0
- data/spec/unit/user_spec.rb +298 -0
- metadata +411 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'devise_ldap_authenticatable/strategy'
|
2
|
+
|
3
|
+
module Devise
|
4
|
+
module Models
|
5
|
+
# LDAP Module, responsible for validating the user credentials via LDAP.
|
6
|
+
#
|
7
|
+
# Examples:
|
8
|
+
#
|
9
|
+
# User.authenticate('email@test.com', 'password123') # returns authenticated user or nil
|
10
|
+
# User.find(1).valid_password?('password123') # returns true/false
|
11
|
+
#
|
12
|
+
module LdapAuthenticatable
|
13
|
+
extend ActiveSupport::Concern
|
14
|
+
|
15
|
+
def login_with
|
16
|
+
@login_with ||= Devise.mappings[self.class.to_s.underscore.to_sym].to.authentication_keys.first
|
17
|
+
self[@login_with]
|
18
|
+
end
|
19
|
+
|
20
|
+
def ldap_groups
|
21
|
+
Devise::LdapAdapter.get_groups(login_with)
|
22
|
+
end
|
23
|
+
|
24
|
+
def in_ldap_group?(group_name, group_attribute = LdapAdapter::DEFAULT_GROUP_UNIQUE_MEMBER_LIST_KEY)
|
25
|
+
Devise::LdapAdapter.in_ldap_group?(login_with, group_name, group_attribute)
|
26
|
+
end
|
27
|
+
|
28
|
+
def ldap_dn
|
29
|
+
Devise::LdapAdapter.get_dn(login_with)
|
30
|
+
end
|
31
|
+
|
32
|
+
def ldap_get_param(login_with, param)
|
33
|
+
Devise::LdapAdapter.get_ldap_param(login_with,param)
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# callbacks
|
38
|
+
#
|
39
|
+
|
40
|
+
# # Called before the ldap record is saved automatically
|
41
|
+
# def ldap_before_save
|
42
|
+
# end
|
43
|
+
|
44
|
+
module ClassMethods
|
45
|
+
# Authenticate a user based on configured attribute keys. Returns the
|
46
|
+
# authenticated user if it's valid or nil.
|
47
|
+
def authenticate_with_ldap(attributes={})
|
48
|
+
auth_key = self.authentication_keys.first
|
49
|
+
return nil unless attributes[auth_key].present?
|
50
|
+
|
51
|
+
auth_key_value = (self.case_insensitive_keys || []).include?(auth_key) ? attributes[auth_key].downcase : attributes[auth_key]
|
52
|
+
|
53
|
+
ldap_connection = Devise::LdapAdapter::LdapConnect.new(
|
54
|
+
login: auth_key_value,
|
55
|
+
password: attributes[:password],
|
56
|
+
ldap_auth_username_builder: ::Devise.ldap_auth_username_builder,
|
57
|
+
admin: ::Devise.ldap_use_admin_to_bind )
|
58
|
+
return nil unless ldap_connection.authorized?
|
59
|
+
|
60
|
+
entry = find_ldap_entry(ldap_connection, auth_key_value)
|
61
|
+
resource = find_for_ldap_authentication(attributes, entry)
|
62
|
+
resource = create_from_ldap_entry(attributes, entry) if resource.nil? && ::Devise.ldap_create_user
|
63
|
+
resource
|
64
|
+
end
|
65
|
+
|
66
|
+
def find_ldap_entry(ldap_connection, auth_key_value)
|
67
|
+
ldap_connection.search_for_login
|
68
|
+
end
|
69
|
+
|
70
|
+
def find_for_ldap_authentication(attributes, entry)
|
71
|
+
auth_key = self.authentication_keys.first
|
72
|
+
auth_key_value = (self.case_insensitive_keys || []).include?(auth_key) ? attributes[auth_key].downcase : attributes[auth_key]
|
73
|
+
|
74
|
+
where(auth_key => auth_key_value).first
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.create_from_ldap_entry(attributes, entry)
|
78
|
+
auth_key = self.authentication_keys.first
|
79
|
+
auth_key_value = (self.case_insensitive_keys || []).include?(auth_key) ? attributes[auth_key].downcase : attributes[auth_key]
|
80
|
+
|
81
|
+
resource = new
|
82
|
+
resource[auth_key] = auth_key_value
|
83
|
+
resource.password = attributes[:password]
|
84
|
+
resource.ldap_before_save if resources.respond_to?(:ldap_before_save)
|
85
|
+
resource.tap(&:save)
|
86
|
+
end
|
87
|
+
|
88
|
+
def update_with_password(resource)
|
89
|
+
puts "UPDATE_WITH_PASSWORD: #{resource.inspect}"
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
## No routes needed anymore since Devise.add_module with the :route parameter will take care of it.
|
2
|
+
|
3
|
+
# ActionController::Routing::RouteSet::Mapper.class_eval do
|
4
|
+
#
|
5
|
+
# protected
|
6
|
+
# # reuse the session routes and controller
|
7
|
+
# alias :ldap_authenticatable :database_authenticatable
|
8
|
+
# end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
## Using email now instead of login. Will add an option later on.
|
2
|
+
|
3
|
+
# Devise::Schema.class_eval do
|
4
|
+
# # Creates login
|
5
|
+
# #
|
6
|
+
# # == Options
|
7
|
+
# # * :null - When true, allow columns to be null.
|
8
|
+
# def ldap_authenticatable(options={})
|
9
|
+
# null = options[:null] || false
|
10
|
+
#
|
11
|
+
# apply_schema :login, String, :null => null
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'devise/strategies/authenticatable'
|
2
|
+
|
3
|
+
module Devise
|
4
|
+
module Strategies
|
5
|
+
class LdapAuthenticatable < Authenticatable
|
6
|
+
def authenticate!
|
7
|
+
resource = valid_password? && mapping.to.authenticate_with_ldap(authentication_hash.merge(password: password))
|
8
|
+
return fail(:invalid) unless resource
|
9
|
+
|
10
|
+
if validate(resource)
|
11
|
+
resource.after_ldap_authentication if resource.respond_to?(:after_ldap_authentication)
|
12
|
+
success!(resource)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable)
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module DeviseLdapAuthenticatable
|
2
|
+
class InstallGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path("../templates", __FILE__)
|
4
|
+
|
5
|
+
class_option :user_model, :type => :string, :default => "user", :desc => "Model to update"
|
6
|
+
class_option :update_model, :type => :boolean, :default => true, :desc => "Update model to change from database_authenticatable to ldap_authenticatable"
|
7
|
+
class_option :add_rescue, :type => :boolean, :default => true, :desc => "Update Application Controller with resuce_from for DeviseLdapAuthenticatable::LdapException"
|
8
|
+
class_option :advanced, :type => :boolean, :desc => "Add advanced config options to the devise initializer"
|
9
|
+
|
10
|
+
|
11
|
+
def create_ldap_config
|
12
|
+
copy_file "ldap.yml", "config/ldap.yml"
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_default_devise_settings
|
16
|
+
inject_into_file "config/initializers/devise.rb", default_devise_settings, :after => "Devise.setup do |config|\n"
|
17
|
+
end
|
18
|
+
|
19
|
+
def update_user_model
|
20
|
+
gsub_file "app/models/#{options.user_model}.rb", /:database_authenticatable/, ":ldap_authenticatable" if options.update_model?
|
21
|
+
end
|
22
|
+
|
23
|
+
def update_application_controller
|
24
|
+
inject_into_class "app/controllers/application_controller.rb", ApplicationController, rescue_from_exception if options.add_rescue?
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def default_devise_settings
|
30
|
+
settings = <<-eof
|
31
|
+
# ==> LDAP Configuration
|
32
|
+
# config.ldap_logger = true
|
33
|
+
# config.ldap_create_user = false
|
34
|
+
# config.ldap_update_password = true
|
35
|
+
# config.ldap_config = "\#{Rails.root}/config/ldap.yml"
|
36
|
+
# config.ldap_check_group_membership = false
|
37
|
+
# config.ldap_check_attributes = false
|
38
|
+
# config.ldap_use_admin_to_bind = false
|
39
|
+
# config.ldap_ad_group_check = false
|
40
|
+
|
41
|
+
eof
|
42
|
+
if options.advanced?
|
43
|
+
settings << <<-eof
|
44
|
+
# ==> Advanced LDAP Configuration
|
45
|
+
# config.ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| "\#{attribute}=\#{login},\#{ldap.base}" }
|
46
|
+
|
47
|
+
eof
|
48
|
+
end
|
49
|
+
|
50
|
+
settings
|
51
|
+
end
|
52
|
+
|
53
|
+
def rescue_from_exception
|
54
|
+
<<-eof
|
55
|
+
rescue_from DeviseLdapAuthenticatable::LdapException do |exception|
|
56
|
+
render :text => exception, :status => 500
|
57
|
+
end
|
58
|
+
eof
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
## Authorizations
|
2
|
+
# Uncomment out the merging for each environment that you'd like to include.
|
3
|
+
# You can also just copy and paste the tree (do not include the "authorizations") to each
|
4
|
+
# environment if you need something different per enviornment.
|
5
|
+
authorizations: &AUTHORIZATIONS
|
6
|
+
group_base: ou=groups,dc=test,dc=com
|
7
|
+
## Requires config.ldap_check_group_membership in devise.rb be true
|
8
|
+
# Can have multiple values, must match all to be authorized
|
9
|
+
required_groups:
|
10
|
+
# If only a group name is given, membership will be checked against "uniqueMember"
|
11
|
+
- cn=admins,ou=groups,dc=test,dc=com
|
12
|
+
- cn=users,ou=groups,dc=test,dc=com
|
13
|
+
# If an array is given, the first element will be the attribute to check against, the second the group name
|
14
|
+
- ["moreMembers", "cn=users,ou=groups,dc=test,dc=com"]
|
15
|
+
## Requires config.ldap_check_attributes in devise.rb to be true
|
16
|
+
## Can have multiple attributes and values, must match all to be authorized
|
17
|
+
require_attribute:
|
18
|
+
objectClass: inetOrgPerson
|
19
|
+
authorizationRole: postsAdmin
|
20
|
+
|
21
|
+
## Environment
|
22
|
+
|
23
|
+
development:
|
24
|
+
host: localhost
|
25
|
+
port: 389
|
26
|
+
attribute: cn
|
27
|
+
base: ou=people,dc=test,dc=com
|
28
|
+
admin_user: cn=admin,dc=test,dc=com
|
29
|
+
admin_password: admin_password
|
30
|
+
ssl: false
|
31
|
+
# <<: *AUTHORIZATIONS
|
32
|
+
|
33
|
+
test:
|
34
|
+
host: localhost
|
35
|
+
port: 3389
|
36
|
+
attribute: cn
|
37
|
+
base: ou=people,dc=test,dc=com
|
38
|
+
admin_user: cn=admin,dc=test,dc=com
|
39
|
+
admin_password: admin_password
|
40
|
+
ssl: simple_tls
|
41
|
+
# <<: *AUTHORIZATIONS
|
42
|
+
|
43
|
+
production:
|
44
|
+
host: localhost
|
45
|
+
port: 636
|
46
|
+
attribute: cn
|
47
|
+
base: ou=people,dc=test,dc=com
|
48
|
+
admin_user: cn=admin,dc=test,dc=com
|
49
|
+
admin_password: admin_password
|
50
|
+
ssl: start_tls
|
51
|
+
# <<: *AUTHORIZATIONS
|
data/spec/ldap/base.ldif
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# ldapadd -x -h localhost -p 3389 -D "cn=admin,dc=test,dc=com" -w secret -f base.ldif
|
2
|
+
|
3
|
+
dn: dc=test,dc=com
|
4
|
+
objectClass: dcObject
|
5
|
+
objectClass: organizationalUnit
|
6
|
+
dc: test
|
7
|
+
ou: Test
|
8
|
+
|
9
|
+
dn: ou=people,dc=test,dc=com
|
10
|
+
objectClass: organizationalUnit
|
11
|
+
ou: people
|
12
|
+
|
13
|
+
dn: ou=others,dc=test,dc=com
|
14
|
+
objectClass: organizationalUnit
|
15
|
+
ou: others
|
16
|
+
|
17
|
+
dn: ou=groups,dc=test,dc=com
|
18
|
+
objectClass: organizationalUnit
|
19
|
+
ou: groups
|
20
|
+
|
21
|
+
# example.user@test.com, people, test.com
|
22
|
+
dn: cn=example.user@test.com,ou=people,dc=test,dc=com
|
23
|
+
objectClass: inetOrgPerson
|
24
|
+
objectClass: authorizations
|
25
|
+
sn: User
|
26
|
+
uid: example_user
|
27
|
+
mail: example.user@test.com
|
28
|
+
cn: example.user@test.com
|
29
|
+
authorizationRole: blogUser
|
30
|
+
userPassword:: e1NTSEF9ZXRYaE9NcjRjOGFiTjlqYUxyczZKSll5MFlaZUF1NURCVWhhY0E9PQ=
|
31
|
+
=
|
32
|
+
|
33
|
+
# other.user@test.com
|
34
|
+
dn: cn=other.user@test.com,ou=others,dc=test,dc=com
|
35
|
+
objectClass: inetOrgPerson
|
36
|
+
objectClass: authorizations
|
37
|
+
objectClass: organizationalPerson
|
38
|
+
objectClass: person
|
39
|
+
objectClass: top
|
40
|
+
sn: Other
|
41
|
+
uid: other_user
|
42
|
+
cn: other.user@test.com
|
43
|
+
authorizationRole: blogUser
|
44
|
+
userPassword:: e1NIQX1IQXdtdk13RGF1ZUpyZDhwakxXMzZ6Yi9jTUU9
|
45
|
+
|
46
|
+
# example.admin@test.com, people, test.com
|
47
|
+
dn: cn=example.admin@test.com,ou=people,dc=test,dc=com
|
48
|
+
objectClass: inetOrgPerson
|
49
|
+
objectClass: authorizations
|
50
|
+
objectClass: organizationalPerson
|
51
|
+
objectClass: person
|
52
|
+
objectClass: top
|
53
|
+
sn: Admin
|
54
|
+
uid: example_admin
|
55
|
+
cn: example.admin@test.com
|
56
|
+
authorizationRole: blogAdmin
|
57
|
+
userPassword:: e1NIQX0wcUNXaERISGFwWmc3ekJxZWRRanBzNW1EUDA9
|
58
|
+
|
59
|
+
# users, groups, test.com
|
60
|
+
dn: cn=users,ou=groups,dc=test,dc=com
|
61
|
+
objectClass: authorizations
|
62
|
+
objectClass: groupOfUniqueNames
|
63
|
+
objectClass: top
|
64
|
+
uniqueMember: cn=example.user@test.com,ou=people,dc=test,dc=com
|
65
|
+
authorizationRole: cn=example.admin@test.com,ou=people,dc=test,dc=com
|
66
|
+
cn: users
|
67
|
+
|
68
|
+
# users, groups, test.com
|
69
|
+
dn: cn=admins,ou=groups,dc=test,dc=com
|
70
|
+
objectClass: groupOfUniqueNames
|
71
|
+
objectClass: top
|
72
|
+
uniqueMember: cn=example.admin@test.com,ou=people,dc=test,dc=com
|
73
|
+
cn: admins
|
@@ -0,0 +1,26 @@
|
|
1
|
+
dn: cn=admins,ou=groups,dc=test,dc=com
|
2
|
+
changetype: delete
|
3
|
+
|
4
|
+
dn: cn=users,ou=groups,dc=test,dc=com
|
5
|
+
changetype: delete
|
6
|
+
|
7
|
+
dn: cn=example.admin@test.com,ou=people,dc=test,dc=com
|
8
|
+
changetype: delete
|
9
|
+
|
10
|
+
dn: cn=example.user@test.com,ou=people,dc=test,dc=com
|
11
|
+
changetype: delete
|
12
|
+
|
13
|
+
dn: cn=other.user@test.com,ou=others,dc=test,dc=com
|
14
|
+
changetype: delete
|
15
|
+
|
16
|
+
dn: ou=groups,dc=test,dc=com
|
17
|
+
changetype: delete
|
18
|
+
|
19
|
+
dn: ou=people,dc=test,dc=com
|
20
|
+
changetype: delete
|
21
|
+
|
22
|
+
dn: ou=others,dc=test,dc=com
|
23
|
+
changetype: delete
|
24
|
+
|
25
|
+
dn: dc=test,dc=com
|
26
|
+
changetype: delete
|
File without changes
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'erb'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
FileUtils.chdir(File.dirname(__FILE__))
|
7
|
+
|
8
|
+
## For OSX:
|
9
|
+
ENV['PATH'] = "#{ENV['PATH']}:/usr/libexec"
|
10
|
+
|
11
|
+
template = File.read('slapd-test.conf.erb')
|
12
|
+
normal_out = 'slapd-test.conf'
|
13
|
+
ssl_out = 'slapd-ssl-test.conf'
|
14
|
+
|
15
|
+
File.open(normal_out, 'w') do |f|
|
16
|
+
@ssl = false
|
17
|
+
f.write ERB.new(template).result(binding)
|
18
|
+
end
|
19
|
+
File.open(ssl_out, 'w') do |f|
|
20
|
+
@ssl = true
|
21
|
+
f.write ERB.new(template).result(binding)
|
22
|
+
end
|
23
|
+
|
24
|
+
if ARGV.first == '--ssl'
|
25
|
+
cmd = "slapd -d 1 -f #{ssl_out} -h ldaps://localhost:3389"
|
26
|
+
else
|
27
|
+
cmd = "slapd -d 1 -f #{normal_out} -h ldap://localhost:3389"
|
28
|
+
end
|
29
|
+
|
30
|
+
puts(cmd)
|
31
|
+
exec(cmd)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIICXQIBAAKBgQC/hxFetCTh++3sEwchxuscH5TID0Wj2S/heBjY6RuK5rPrAcUg
|
3
|
+
rA7jFEFilEQYpfGe3LIMBkr5pP4aR1NrLuvKZaHuBvRLwOcU7SbuFQ3FQLaJA3UK
|
4
|
+
E2IOH9wMg1BMcG1WbzB1nKc650omKo7KqOAIYFFVq3gzlDRUmHF6dCAnvwIDAQAB
|
5
|
+
AoGAcOBJfGbu1cCEF/2e1mlFZu214bIeeNInRdphynSXpuUQZBBG/Vpp66qkXlTD
|
6
|
+
TUN/gwDObgfHaBm1KAehQioFC9ys1Iymlt8IeRYXH9Tkl7URe30QGAGjdIPohWpZ
|
7
|
+
xl/aMrpQVvQukaStRNoJXA32j+tuR2KbxAK6bu9iLzXvCQECQQD6AOzHVDB06ZjF
|
8
|
+
iJYB1/CyZBg0Q2aIOwGXwle1t1O7q6nJ6UWkurQF/inBdJdE5SWNEzYsI1tEP0n2
|
9
|
+
1ZBIWQxtAkEAxB8WgFjRqYdmUYGQ1k8yxMUTLbZFd6t2UZyB/LAw9CtjH9lrU0z9
|
10
|
+
81UK/ywVHkoDDPHbFyvd1jludqbz+suRWwJBAPEL9UCXfwUquf8zm5b5cv09n0y8
|
11
|
+
895ELlv5qQHvWg+oC1Q/08NptOvWTMJXPQbTfepQ7LmP+Y6LCzCwZ6YqHd0CQFiW
|
12
|
+
flB9Tj9YhNQ+RVE4twMAzhfw5FIY5joZCvI8F/DDBGRnjj4zYeafPHdkzyk+X0Bi
|
13
|
+
owdFblAM4yO/aCeZ+k8CQQDdBi+WnpaaSL0NXmAb6+7aQRZ/Gc2O9S2JL/Fxw4EQ
|
14
|
+
i7KTRdH/d6Db9SeQEc/uCbJW7fM4KbZcjFdncHFytakt
|
15
|
+
-----END RSA PRIVATE KEY-----
|
16
|
+
-----BEGIN CERTIFICATE-----
|
17
|
+
MIIDwjCCAyugAwIBAgIJAP+plC/uCHKkMA0GCSqGSIb3DQEBBQUAMIGdMQswCQYD
|
18
|
+
VQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWExEzARBgNVBAcTCkFsZXhhbmRyaWEx
|
19
|
+
DTALBgNVBAoTBFRlc3QxDTALBgNVBAsTBFRlc3QxJDAiBgNVBAMUG2RldmlzZV9s
|
20
|
+
ZGFwX2F1dGhlbnRpY2F0YWJsZTEiMCAGCSqGSIb3DQEJARYTZHBtY25ldmluQGdt
|
21
|
+
YWlsLmNvbTAeFw0xMDA4MDUyMTU1MDVaFw0xMTA4MDUyMTU1MDVaMIGdMQswCQYD
|
22
|
+
VQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWExEzARBgNVBAcTCkFsZXhhbmRyaWEx
|
23
|
+
DTALBgNVBAoTBFRlc3QxDTALBgNVBAsTBFRlc3QxJDAiBgNVBAMUG2RldmlzZV9s
|
24
|
+
ZGFwX2F1dGhlbnRpY2F0YWJsZTEiMCAGCSqGSIb3DQEJARYTZHBtY25ldmluQGdt
|
25
|
+
YWlsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAv4cRXrQk4fvt7BMH
|
26
|
+
IcbrHB+UyA9Fo9kv4XgY2Okbiuaz6wHFIKwO4xRBYpREGKXxntyyDAZK+aT+GkdT
|
27
|
+
ay7rymWh7gb0S8DnFO0m7hUNxUC2iQN1ChNiDh/cDINQTHBtVm8wdZynOudKJiqO
|
28
|
+
yqjgCGBRVat4M5Q0VJhxenQgJ78CAwEAAaOCAQYwggECMB0GA1UdDgQWBBRcCNxq
|
29
|
+
0PNXgMfYN2RQ2uIrBY03ADCB0gYDVR0jBIHKMIHHgBRcCNxq0PNXgMfYN2RQ2uIr
|
30
|
+
BY03AKGBo6SBoDCBnTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRMw
|
31
|
+
EQYDVQQHEwpBbGV4YW5kcmlhMQ0wCwYDVQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0
|
32
|
+
MSQwIgYDVQQDFBtkZXZpc2VfbGRhcF9hdXRoZW50aWNhdGFibGUxIjAgBgkqhkiG
|
33
|
+
9w0BCQEWE2RwbWNuZXZpbkBnbWFpbC5jb22CCQD/qZQv7ghypDAMBgNVHRMEBTAD
|
34
|
+
AQH/MA0GCSqGSIb3DQEBBQUAA4GBABjztpAgr6QxVCNxhgklrILH+RLxww3dgdra
|
35
|
+
J6C6pXl9lbM+XIWiUtzD3Y8z2+tkJtjWCCN7peM2OYFvdChIvRz8XoxHqNB9W8wj
|
36
|
+
xZOqBHN8MdI1g6PCD5Z8lK1TDvchTeskqCulE6tMHKaslByhfZS94uWY+NG5JY/Z
|
37
|
+
traWmtWh
|
38
|
+
-----END CERTIFICATE-----
|