houston-devise_ldap_authenticatable 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-----
|