activesambaldap 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/NEWS.en +9 -0
  2. data/NEWS.ja +10 -0
  3. data/README.en +310 -0
  4. data/README.ja +307 -0
  5. data/Rakefile +95 -0
  6. data/bin/asl-groupadd +70 -0
  7. data/bin/asl-groupdel +58 -0
  8. data/bin/asl-groupmod +133 -0
  9. data/bin/asl-groupshow +31 -0
  10. data/bin/asl-passwd +99 -0
  11. data/bin/asl-populate +96 -0
  12. data/bin/asl-purge +24 -0
  13. data/bin/asl-samba-computeradd +94 -0
  14. data/bin/asl-samba-groupadd +55 -0
  15. data/bin/asl-samba-groupdel +53 -0
  16. data/bin/asl-samba-groupmod +98 -0
  17. data/bin/asl-samba-useradd +98 -0
  18. data/bin/asl-samba-userdel +47 -0
  19. data/bin/asl-samba-usermod +92 -0
  20. data/bin/asl-useradd +263 -0
  21. data/bin/asl-userdel +75 -0
  22. data/bin/asl-usermod +335 -0
  23. data/bin/asl-usershow +31 -0
  24. data/lib/active_samba_ldap/account.rb +199 -0
  25. data/lib/active_samba_ldap/base.rb +126 -0
  26. data/lib/active_samba_ldap/command.rb +94 -0
  27. data/lib/active_samba_ldap/computer.rb +13 -0
  28. data/lib/active_samba_ldap/computer_account.rb +34 -0
  29. data/lib/active_samba_ldap/configuration.rb +322 -0
  30. data/lib/active_samba_ldap/dc.rb +17 -0
  31. data/lib/active_samba_ldap/entry.rb +80 -0
  32. data/lib/active_samba_ldap/group.rb +182 -0
  33. data/lib/active_samba_ldap/idmap.rb +17 -0
  34. data/lib/active_samba_ldap/ou.rb +18 -0
  35. data/lib/active_samba_ldap/populate.rb +254 -0
  36. data/lib/active_samba_ldap/samba_account.rb +200 -0
  37. data/lib/active_samba_ldap/samba_computer.rb +20 -0
  38. data/lib/active_samba_ldap/samba_group.rb +126 -0
  39. data/lib/active_samba_ldap/samba_user.rb +39 -0
  40. data/lib/active_samba_ldap/unix_id_pool.rb +41 -0
  41. data/lib/active_samba_ldap/user.rb +14 -0
  42. data/lib/active_samba_ldap/user_account.rb +30 -0
  43. data/lib/active_samba_ldap/version.rb +3 -0
  44. data/lib/active_samba_ldap.rb +29 -0
  45. data/lib/samba/encrypt.rb +86 -0
  46. data/misc/rd2html.rb +42 -0
  47. data/rails/plugin/active_samba_ldap/README +30 -0
  48. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/scaffold_asl_generator.rb +28 -0
  49. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/computer.rb +3 -0
  50. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/dc.rb +3 -0
  51. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/group.rb +3 -0
  52. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/idmap.rb +3 -0
  53. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/ldap.yml +24 -0
  54. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/ou.rb +3 -0
  55. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/samba_controller.rb +12 -0
  56. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/samba_helper.rb +2 -0
  57. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/samba_index.rhtml +17 -0
  58. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/samba_populate.rhtml +15 -0
  59. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/samba_purge.rhtml +10 -0
  60. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/unix_id_pool.rb +3 -0
  61. data/rails/plugin/active_samba_ldap/generators/scaffold_asl/templates/user.rb +3 -0
  62. data/rails/plugin/active_samba_ldap/init.rb +6 -0
  63. data/test/asl-test-utils.rb +276 -0
  64. data/test/command.rb +64 -0
  65. data/test/config.yaml.sample +17 -0
  66. data/test/run-test.rb +18 -0
  67. data/test/test-unit-ext/always-show-result.rb +28 -0
  68. data/test/test-unit-ext/priority.rb +159 -0
  69. data/test/test-unit-ext.rb +2 -0
  70. data/test/test_asl_groupadd.rb +69 -0
  71. data/test/test_asl_groupdel.rb +88 -0
  72. data/test/test_asl_groupmod.rb +256 -0
  73. data/test/test_asl_groupshow.rb +21 -0
  74. data/test/test_asl_passwd.rb +125 -0
  75. data/test/test_asl_populate.rb +92 -0
  76. data/test/test_asl_purge.rb +21 -0
  77. data/test/test_asl_useradd.rb +710 -0
  78. data/test/test_asl_userdel.rb +73 -0
  79. data/test/test_asl_usermod.rb +541 -0
  80. data/test/test_asl_usershow.rb +27 -0
  81. data/test/test_group.rb +21 -0
  82. data/test/test_password.rb +51 -0
  83. data/test/test_samba_encrypt.rb +36 -0
  84. data/test/test_user_home_directory.rb +43 -0
  85. metadata +177 -0
@@ -0,0 +1,126 @@
1
+ require 'active_samba_ldap/group'
2
+
3
+ module ActiveSambaLdap
4
+ class SambaGroup < Group
5
+ include Reloadable::Subclasses
6
+
7
+ # from librpc/ndr/security.h in Samba
8
+ SID_BUILTIN = "S-1-5-32"
9
+
10
+ # from source/include/rpc_misc.c in Samba
11
+ DOMAIN_ADMINS_RID = 0x00000200
12
+ DOMAIN_USERS_RID = 0x00000201
13
+ DOMAIN_GUESTS_RID = 0x00000202
14
+ DOMAIN_COMPUTERS_RID = 0x00000203
15
+
16
+ LOCAL_ADMINS_RID = 0x00000220
17
+ LOCAL_USERS_RID = 0x00000221
18
+ LOCAL_GUESTS_RID = 0x00000222
19
+ LOCAL_POWER_USERS_RID = 0x00000223
20
+
21
+ LOCAL_ACCOUNT_OPERATORS_RID = 0x00000224
22
+ LOCAL_SYSTEM_OPERATORS_RID = 0x00000225
23
+ LOCAL_PRINT_OPERATORS_RID = 0x00000226
24
+ LOCAL_BACKUP_OPERATORS_RID = 0x00000227
25
+
26
+ LOCAL_REPLICATORS_RID = 0x00000228
27
+
28
+
29
+ # from source/rpc_server/srv_util.c in Samba
30
+ DOMAIN_ADMINS_NAME = "Domain Administrators"
31
+ DOMAIN_USERS_NAME = "Domain Users"
32
+ DOMAIN_GUESTS_NAME = "Domain Guests"
33
+ DOMAIN_COMPUTERS_NAME = "Domain Computers"
34
+
35
+
36
+ WELL_KNOWN_RIDS = []
37
+ WELL_KNOWN_NAMES = []
38
+ constants.each do |name|
39
+ case name
40
+ when /_RID$/
41
+ WELL_KNOWN_RIDS << const_get(name)
42
+ when /_NAME$/
43
+ WELL_KNOWN_NAMES << const_get(name)
44
+ end
45
+ end
46
+
47
+
48
+ # from source/librpc/idl/lsa.idl in Samba
49
+ TYPES = {
50
+ "domain" => 2,
51
+ "local" => 4,
52
+ "builtin" => 5,
53
+ }
54
+
55
+ class << self
56
+ def gid2rid(gid)
57
+ gid = Integer(gid)
58
+ if WELL_KNOWN_RIDS.include?(gid)
59
+ gid
60
+ else
61
+ 2 * gid + 1001
62
+ end
63
+ end
64
+
65
+ def rid2gid(rid)
66
+ rid = Integer(rid)
67
+ if WELL_KNOWN_RIDS.include?(rid)
68
+ rid
69
+ else
70
+ (rid - 1001) / 2
71
+ end
72
+ end
73
+
74
+ def start_rid
75
+ gid2rid(start_gid)
76
+ end
77
+
78
+ private
79
+ def default_classes
80
+ super + ["sambaGroupMapping"]
81
+ end
82
+ end
83
+
84
+ def fill_default_values(options={})
85
+ change_type(options[:group_type] || "domain") unless samba_group_type
86
+ self.display_name ||= options[:display_name] || cn
87
+ super
88
+ end
89
+
90
+ def change_gid_number(gid, allow_non_unique=false)
91
+ super
92
+ rid = self.class.gid2rid(gid_number.to_s)
93
+ change_sid(rid, allow_non_unique)
94
+ end
95
+
96
+ def change_gid_number_by_rid(rid, allow_non_unique=false)
97
+ change_gid_number(self.class.rid2gid(rid), allow_non_unique)
98
+ end
99
+
100
+ def change_sid(rid, allow_non_unique=false)
101
+ if (LOCAL_ADMINS_RID..LOCAL_REPLICATORS_RID).include?(rid.to_i)
102
+ sid = "#{SID_BUILTIN}-#{rid}"
103
+ else
104
+ sid = "#{self.class.configuration[:sid]}-#{rid}"
105
+ end
106
+ # check_unique_sid_number(sid) unless allow_non_unique
107
+ self.samba_sid = sid
108
+ end
109
+
110
+ def rid
111
+ Integer(samba_sid.split(/-/).last)
112
+ end
113
+
114
+ def change_type(type)
115
+ normalized_type = type.to_s.downcase
116
+ if TYPES.has_key?(normalized_type)
117
+ type = TYPES[normalized_type]
118
+ elsif TYPES.values.include?(type.to_i)
119
+ # pass
120
+ else
121
+ raise ArgumentError, "invalid type: #{type}"
122
+ end
123
+ self.samba_group_type = type.to_s
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,39 @@
1
+ require 'active_samba_ldap/entry'
2
+ require 'active_samba_ldap/account'
3
+ require 'active_samba_ldap/user_account'
4
+ require 'active_samba_ldap/samba_account'
5
+
6
+ module ActiveSambaLdap
7
+ class SambaUser < Base
8
+ include Reloadable::Subclasses
9
+
10
+ include Entry
11
+
12
+ include Account
13
+ include UserAccount
14
+ include SambaAccount
15
+
16
+ def fill_default_values(options={})
17
+ super
18
+
19
+ subst = Proc.new do |key|
20
+ value = options[key]
21
+ if value
22
+ substitute_template(value)
23
+ else
24
+ substituted_value(key)
25
+ end
26
+ end
27
+
28
+ self.samba_home_path ||= subst[:user_home_unc]
29
+ self.samba_home_drive ||= subst[:user_home_drive].sub(/([^:])$/, "\\1:")
30
+ self.samba_profile_path ||= subst[:user_profile]
31
+ self.samba_logon_script ||= subst[:user_logon_script]
32
+ end
33
+
34
+ private
35
+ def default_account_flags
36
+ "[UH]"
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,41 @@
1
+ module ActiveSambaLdap
2
+ class UnixIdPool < Base
3
+ include Reloadable::Subclasses
4
+
5
+ class << self
6
+ def ldap_mapping(options={})
7
+ default_options = {
8
+ :dn_attribute => "sambaDomainName",
9
+ :prefix => "",
10
+ :classes => ["top", "sambaDomain", "sambaUnixIdPool"],
11
+ }
12
+ options = default_options.merge(options)
13
+ super options
14
+ end
15
+ end
16
+
17
+ def find_available_uid_number(account_class)
18
+ find_available_number(account_class, "uidNumber", uid_number) do
19
+ account_class.configuration[:start_uid]
20
+ end
21
+ end
22
+
23
+ def find_available_gid_number(group_class)
24
+ find_available_number(group_class, "gidNumber", gid_number) do
25
+ group_class.configuration[:start_gid]
26
+ end
27
+ end
28
+
29
+ private
30
+ def find_available_number(klass, key, start_value)
31
+ number = Integer(start_value || yield)
32
+
33
+ 100.times do |i|
34
+ return number if klass.search(:filter => "(#{key}=#{number})").empty?
35
+ number += 1
36
+ end
37
+
38
+ nil
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,14 @@
1
+ require 'active_samba_ldap/entry'
2
+ require 'active_samba_ldap/account'
3
+ require 'active_samba_ldap/user_account'
4
+
5
+ module ActiveSambaLdap
6
+ class User < Base
7
+ include Reloadable::Subclasses
8
+
9
+ include Entry
10
+
11
+ include Account
12
+ include UserAccount
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ module ActiveSambaLdap
2
+ module UserAccount
3
+ NAME_RE = /\A#{Account::NAME_RE_SRC}\z/
4
+
5
+ def self.included(base)
6
+ super
7
+ base.extend(ClassMethods)
8
+ base.validates_format_of :uid, :with => NAME_RE
9
+ end
10
+
11
+ module ClassMethods
12
+ def valid_name?(name)
13
+ NAME_RE =~ name ? true : false
14
+ end
15
+
16
+ private
17
+ def default_prefix
18
+ configuration[:users_suffix]
19
+ end
20
+ end
21
+
22
+ def remove_from_group(group)
23
+ group.users.delete(self)
24
+ end
25
+
26
+ def default_gid_number
27
+ self.class.configuration[:default_user_gid]
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveSambaLdap
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,29 @@
1
+ require_gem_if_need = Proc.new do |library_name, gem_name, *options|
2
+ begin
3
+ require library_name
4
+ rescue LoadError
5
+ require 'rubygems'
6
+ require_gem gem_name, *options
7
+ require library_name
8
+ end
9
+ end
10
+
11
+ require_gem_if_need.call("active_ldap", "activeldap", ">= 0.8.0")
12
+
13
+ require 'active_samba_ldap/version'
14
+ require 'active_samba_ldap/base'
15
+ require "active_samba_ldap/configuration"
16
+ require 'active_samba_ldap/populate'
17
+
18
+ ActiveSambaLdap::Base.class_eval do
19
+ include ActiveSambaLdap::Configuration
20
+ include ActiveSambaLdap::Populate
21
+ end
22
+
23
+ require 'active_samba_ldap/user'
24
+ require 'active_samba_ldap/group'
25
+ require 'active_samba_ldap/computer'
26
+ require 'active_samba_ldap/idmap'
27
+ require 'active_samba_ldap/unix_id_pool'
28
+ require 'active_samba_ldap/ou'
29
+ require 'active_samba_ldap/dc'
@@ -0,0 +1,86 @@
1
+ require 'openssl'
2
+
3
+ module Samba
4
+ module Encrypt
5
+ module_function
6
+ def lm_hash(password, encoding=nil)
7
+ dos_password = Private.convert_encoding("ISO-8859-1",
8
+ encoding || "UTF-8",
9
+ password.upcase)
10
+ if dos_password.size > 14
11
+ warn("password is truncated to 14 characters")
12
+ dos_password = dos_password[0, 14]
13
+ end
14
+ Private.encrypt_14characters(dos_password).unpack("C*").collect do |char|
15
+ "%02X" % char
16
+ end.join
17
+ end
18
+
19
+ def ntlm_hash(password, encoding=nil)
20
+ ucs2_password = Private.convert_encoding("UCS-2",
21
+ encoding || "UTF-8",
22
+ password)
23
+ if ucs2_password.size > 256
24
+ raise ArgumentError.new("must be <= 256 characters in UCS-2")
25
+ end
26
+ hex = OpenSSL::Digest::MD4.new(ucs2_password).hexdigest.upcase
27
+ hex
28
+ end
29
+
30
+ module Private
31
+ module_function
32
+ def convert_encoding(to, from, str)
33
+ if same_encoding?(to, from)
34
+ str
35
+ else
36
+ require 'iconv'
37
+ Iconv.iconv(to, from, str).join
38
+ end
39
+ end
40
+
41
+ def normalize_encoding(encoding)
42
+ encoding.downcase.gsub(/-/, "_")
43
+ end
44
+
45
+ def same_encoding?(a, b)
46
+ na = normalize_encoding(a)
47
+ nb = normalize_encoding(b)
48
+ na == nb or na.gsub(/_/, '') == nb.gsub(/_/, '')
49
+ end
50
+
51
+ def str_to_key(str)
52
+ key = "\000" * 8
53
+ key[0] = str[0] >> 1;
54
+ key[1] = ((str[0] & 0x01) << 6) | (str[1] >> 2);
55
+ key[2] = ((str[1] & 0x03) << 5) | (str[2] >> 3);
56
+ key[3] = ((str[2] & 0x07) << 4) | (str[3] >> 4);
57
+ key[4] = ((str[3] & 0x0F) << 3) | (str[4] >> 5);
58
+ key[5] = ((str[4] & 0x1F) << 2) | (str[5] >> 6);
59
+ key[6] = ((str[5] & 0x3F) << 1) | (str[6] >> 7);
60
+ key[7] = str[6] & 0x7F;
61
+
62
+ key.size.times do |i|
63
+ key[i] = (key[i] << 1);
64
+ end
65
+
66
+ key
67
+ end
68
+
69
+ def des_crypt56(input, key_str, forward_only)
70
+ key = str_to_key(key_str)
71
+ encoder = OpenSSL::Cipher::DES.new
72
+ encoder.encrypt
73
+ encoder.key = key
74
+ encoder.update(input)
75
+ end
76
+
77
+ LM_MAGIC = "KGS!@\#$%"
78
+ def encrypt_14characters(chars)
79
+ raise ArgumentError.new("must be <= 14 characters") if chars.size > 14
80
+ chars = chars.to_s.ljust(14, "\000")
81
+ des_crypt56(LM_MAGIC, chars[0, 7], true) +
82
+ des_crypt56(LM_MAGIC, chars[7, 7], true)
83
+ end
84
+ end
85
+ end
86
+ end
data/misc/rd2html.rb ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ top = File.expand_path(File.join(File.dirname(__FILE__), ".."))
4
+ html_dir = File.join(top, "html")
5
+
6
+ require "fileutils"
7
+
8
+ css = "base.css"
9
+ kcode = "utf8"
10
+
11
+ options = [
12
+ "-I#{File.join(top, 'misc')}",
13
+ "-S",
14
+ "rd2",
15
+ "-rrd/rd2html-lib",
16
+ "--out-code=#{kcode}",
17
+ proc do |f|
18
+ "--html-title=#{File.basename(f)}"
19
+ end,
20
+ # proc do |f|
21
+ # "--with-css=#{css}"
22
+ # end,
23
+ proc do |f|
24
+ f
25
+ end
26
+ ]
27
+
28
+ Dir[File.join(top, "*.{ja,en}")].each do |f|
29
+ if /(README|NEWS)\.(ja|en)\z/ =~ f
30
+ args = options.collect do |x|
31
+ if x.respond_to?(:call)
32
+ x.call(f)
33
+ else
34
+ x
35
+ end
36
+ end
37
+ output_base = File.basename(f).sub(/(ja|en)\z/, "html.\\1")
38
+ File.open(File.join(html_dir, output_base), "w") do |out|
39
+ out.puts(`ruby #{args.flatten.join(' ')}`)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,30 @@
1
+ = ActiveSambaLdap plugin for Ruby on Rails
2
+
3
+ == Setup
4
+
5
+ You need to write RAILS_ROOT/config/ldap.yml like the following:
6
+
7
+ development:
8
+ host: 127.0.0.1
9
+ port: 389
10
+ base: dc=devel,dc=local,dc=net
11
+ bind_dn: cn=admin,dc=local,dc=net
12
+ password: secret
13
+ sid: S-1-5-21-915876905-2926214379-2876160357
14
+
15
+ test:
16
+ host: 127.0.0.1
17
+ port: 389
18
+ base: dc=test,dc=local,dc=net
19
+ bind_dn: cn=admin,dc=local,dc=net
20
+ password: secret
21
+ sid: S-1-5-21-915876905-2926214379-2876160357
22
+
23
+ production:
24
+ host: 127.0.0.1
25
+ port: 389
26
+ method: :tls
27
+ base: dc=production,dc=local,dc=net
28
+ bind_dn: cn=admin,dc=local,dc=net
29
+ password: secret
30
+ sid: S-1-5-21-915876905-2926214379-2876160357
@@ -0,0 +1,28 @@
1
+ class ScaffoldAslGenerator < Rails::Generator::Base
2
+ def manifest
3
+ record do |m|
4
+
5
+ m.template("ldap.yml", File.join("config", "ldap.yml"))
6
+
7
+ %w(user computer group unix_id_pool idmap ou dc).each do |component|
8
+ m.template("#{component}.rb",
9
+ File.join("app", "models", "#{component}.rb"))
10
+ end
11
+
12
+ component = "samba"
13
+ controller_class_name = "#{Inflector.camelize(component)}Controller"
14
+ options = {:assigns => {:controller_class_name => controller_class_name}}
15
+
16
+ m.template("#{component}_controller.rb",
17
+ File.join("app", "controllers", "#{component}_controller.rb"))
18
+ m.template("#{component}_helper.rb",
19
+ File.join("app", "helpers", "#{component}_helper.rb"))
20
+ m.directory(File.join("app", "views", component))
21
+ %w(index populate purge).each do |action|
22
+ m.template("#{component}_#{action}.rhtml",
23
+ File.join("app", "views", component, "#{action}.rhtml"),
24
+ options)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ class Computer < ActiveSambaLdap::SambaComputer
2
+ ldap_mapping
3
+ end
@@ -0,0 +1,3 @@
1
+ class Dc < ActiveSambaLdap::Dc
2
+ ldap_mapping
3
+ end
@@ -0,0 +1,3 @@
1
+ class Group < ActiveSambaLdap::SambaGroup
2
+ ldap_mapping
3
+ end
@@ -0,0 +1,3 @@
1
+ class Idmap < ActiveSambaLdap::Idmap
2
+ ldap_mapping
3
+ end
@@ -0,0 +1,24 @@
1
+ development:
2
+ host: 127.0.0.1
3
+ port: 389
4
+ base: dc=devel,dc=local,dc=net
5
+ bind_dn: cn=admin,dc=local,dc=net
6
+ password: secret
7
+ sid: S-1-5-21-915876905-2926214379-2876160357
8
+
9
+ test:
10
+ host: 127.0.0.1
11
+ port: 389
12
+ base: dc=test,dc=local,dc=net
13
+ bind_dn: cn=admin,dc=local,dc=net
14
+ password: secret
15
+ sid: S-1-5-21-915876905-2926214379-2876160357
16
+
17
+ production:
18
+ host: 127.0.0.1
19
+ port: 389
20
+ method: :tls
21
+ base: dc=production,dc=local,dc=net
22
+ bind_dn: cn=admin,dc=local,dc=net
23
+ password: secret
24
+ sid: S-1-5-21-915876905-2926214379-2876160357
@@ -0,0 +1,3 @@
1
+ class Ou < ActiveSambaLdap::Ou
2
+ ldap_mapping
3
+ end
@@ -0,0 +1,12 @@
1
+ class SambaController < ApplicationController
2
+ def index
3
+ end
4
+
5
+ def populate
6
+ @entries, options = ActiveSambaLdap::Base.populate
7
+ end
8
+
9
+ def purge
10
+ ActiveSambaLdap::Base.purge
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ <html>
2
+ <head>
3
+ <title><%= controller_class_name %>: <%%= controller.action_name %></title>
4
+ </head>
5
+ <body>
6
+ <h1>Samba + LDAP Management</h1>
7
+ <ul>
8
+ <li>
9
+ <%%= link_to "Populate Samba + LDAP environment",
10
+ :action => :populate %>
11
+ </li>
12
+ <li>
13
+ <%%= link_to "Purge Samba + LDAP environment", :action => :purge %>
14
+ </li>
15
+ </ul>
16
+ </body>
17
+ </html>
@@ -0,0 +1,15 @@
1
+ <html>
2
+ <head>
3
+ <title><%= controller_class_name %>: <%%= controller.action_name %></title>
4
+ </head>
5
+ <body>
6
+ <h1>Samba + LDAP Management</h1>
7
+ <p>Populated.</p>
8
+ <ul>
9
+ <%% @entries.each do |entry| %>
10
+ <li><%%= h entry.dn %></li>
11
+ <%% end %>
12
+ </ul>
13
+ <%%= link_to "Back", :action => nil %>
14
+ </body>
15
+ </html>
@@ -0,0 +1,10 @@
1
+ <html>
2
+ <head>
3
+ <title><%= controller_class_name %>: <%%= controller.action_name %></title>
4
+ </head>
5
+ <body>
6
+ <h1>Samba + LDAP Management</h1>
7
+ <p>Purged.</p>
8
+ <%%= link_to "Back", :action => nil %>
9
+ </body>
10
+ </html>
@@ -0,0 +1,3 @@
1
+ class UnixIdPool < ActiveSambaLdap::UnixIdPool
2
+ ldap_mapping
3
+ end
@@ -0,0 +1,3 @@
1
+ class User < ActiveSambaLdap::SambaUser
2
+ ldap_mapping
3
+ end
@@ -0,0 +1,6 @@
1
+ require_dependency 'active_samba_ldap'
2
+ ActiveSambaLdap::Base.logger ||= RAILS_DEFAULT_LOGGER
3
+ ldap_configuration_file = File.join(RAILS_ROOT, 'config', 'ldap.yml')
4
+ ActiveSambaLdap::Base.configurations =
5
+ ActiveSambaLdap::Configuration.read(ldap_configuration_file)
6
+ ActiveSambaLdap::Base.establish_connection