ruby-activeldap 0.8.1 → 0.8.2
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.
- data/CHANGES +5 -0
- data/Manifest.txt +91 -25
- data/README +22 -0
- data/Rakefile +41 -8
- data/TODO +1 -6
- data/examples/config.yaml.example +5 -0
- data/examples/example.der +0 -0
- data/examples/example.jpg +0 -0
- data/examples/groupadd +41 -0
- data/examples/groupdel +35 -0
- data/examples/groupls +49 -0
- data/examples/groupmod +42 -0
- data/examples/lpasswd +55 -0
- data/examples/objects/group.rb +13 -0
- data/examples/objects/ou.rb +4 -0
- data/examples/objects/user.rb +20 -0
- data/examples/ouadd +38 -0
- data/examples/useradd +45 -0
- data/examples/useradd-binary +50 -0
- data/examples/userdel +34 -0
- data/examples/userls +50 -0
- data/examples/usermod +42 -0
- data/examples/usermod-binary-add +47 -0
- data/examples/usermod-binary-add-time +51 -0
- data/examples/usermod-binary-del +48 -0
- data/examples/usermod-lang-add +43 -0
- data/lib/active_ldap.rb +213 -214
- data/lib/active_ldap/adapter/base.rb +461 -0
- data/lib/active_ldap/adapter/ldap.rb +232 -0
- data/lib/active_ldap/adapter/ldap_ext.rb +69 -0
- data/lib/active_ldap/adapter/net_ldap.rb +288 -0
- data/lib/active_ldap/adapter/net_ldap_ext.rb +29 -0
- data/lib/active_ldap/association/belongs_to.rb +3 -1
- data/lib/active_ldap/association/belongs_to_many.rb +5 -6
- data/lib/active_ldap/association/has_many.rb +9 -17
- data/lib/active_ldap/association/has_many_wrap.rb +4 -5
- data/lib/active_ldap/attributes.rb +4 -0
- data/lib/active_ldap/base.rb +201 -56
- data/lib/active_ldap/configuration.rb +11 -1
- data/lib/active_ldap/connection.rb +15 -9
- data/lib/active_ldap/distinguished_name.rb +246 -0
- data/lib/active_ldap/ldap_error.rb +74 -0
- data/lib/active_ldap/object_class.rb +9 -5
- data/lib/active_ldap/schema.rb +50 -9
- data/lib/active_ldap/validations.rb +11 -13
- data/rails/plugin/active_ldap/generators/scaffold_al/scaffold_al_generator.rb +7 -0
- data/rails/plugin/active_ldap/generators/scaffold_al/templates/ldap.yml +21 -0
- data/rails/plugin/active_ldap/init.rb +10 -4
- data/test/al-test-utils.rb +46 -3
- data/test/run-test.rb +16 -4
- data/test/test-unit-ext/always-show-result.rb +28 -0
- data/test/test-unit-ext/priority.rb +163 -0
- data/test/test_adapter.rb +81 -0
- data/test/test_attributes.rb +8 -1
- data/test/test_base.rb +132 -3
- data/test/test_base_per_instance.rb +14 -3
- data/test/test_connection.rb +19 -0
- data/test/test_dn.rb +161 -0
- data/test/test_find.rb +24 -0
- data/test/test_object_class.rb +15 -2
- data/test/test_schema.rb +108 -1
- metadata +111 -41
- data/lib/active_ldap/adaptor/base.rb +0 -29
- data/lib/active_ldap/adaptor/ldap.rb +0 -466
- data/lib/active_ldap/ldap.rb +0 -113
data/CHANGES
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
0.8.2:
|
2
|
+
* Added Net::LDAP support!
|
3
|
+
* Loads of bug fixes and enhancements -- see SVN for a complete history!
|
1
4
|
0.8.1:
|
2
5
|
* used Dependencies.load_paths.
|
3
6
|
* check whether attribute name is available or not.
|
@@ -28,6 +31,8 @@
|
|
28
31
|
* API TRANSITION: Base#write is now deprecated. Please use Base#save
|
29
32
|
* API TRANSITION: Added SaveError exception (which is a subclass of WriteError for now)
|
30
33
|
* API TRANSITION: Base.connect() is now deprecated. Please use Base.establish_connection()
|
34
|
+
* API TRANSITION: Base.close() is now deprecated. Please use Base.remove_connection()
|
35
|
+
* API TRANSITION: :bind_format and :user of Base.establish_connection() are now deprecated. Please use :bind_dn
|
31
36
|
* Added update_attribute(name, value) to update one attribute and save immediately
|
32
37
|
* #delete -> #destroy
|
33
38
|
* Base.destroy_all
|
data/Manifest.txt
CHANGED
@@ -1,33 +1,99 @@
|
|
1
|
-
Rakefile
|
2
|
-
LICENSE
|
3
|
-
TODO
|
4
|
-
COPYING
|
5
1
|
CHANGES
|
6
|
-
|
2
|
+
COPYING
|
3
|
+
LICENSE
|
7
4
|
Manifest.txt
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
README
|
6
|
+
Rakefile
|
7
|
+
TODO
|
8
|
+
benchmark/bench-al.rb
|
9
|
+
examples/config.yaml.example
|
10
|
+
examples/example.der
|
11
|
+
examples/example.jpg
|
12
|
+
examples/groupadd
|
13
|
+
examples/groupdel
|
14
|
+
examples/groupls
|
15
|
+
examples/groupmod
|
16
|
+
examples/lpasswd
|
17
|
+
examples/objects/group.rb
|
18
|
+
examples/objects/ou.rb
|
19
|
+
examples/objects/user.rb
|
20
|
+
examples/ouadd
|
21
|
+
examples/useradd
|
22
|
+
examples/useradd-binary
|
23
|
+
examples/userdel
|
24
|
+
examples/userls
|
25
|
+
examples/usermod
|
26
|
+
examples/usermod-binary-add
|
27
|
+
examples/usermod-binary-add-time
|
28
|
+
examples/usermod-binary-del
|
29
|
+
examples/usermod-lang-add
|
30
|
+
lib/active_ldap.rb
|
31
|
+
lib/active_ldap/adapter/base.rb
|
32
|
+
lib/active_ldap/adapter/ldap.rb
|
33
|
+
lib/active_ldap/adapter/ldap_ext.rb
|
34
|
+
lib/active_ldap/adapter/net_ldap.rb
|
35
|
+
lib/active_ldap/adapter/net_ldap_ext.rb
|
36
|
+
lib/active_ldap/association/belongs_to.rb
|
13
37
|
lib/active_ldap/association/belongs_to_many.rb
|
14
38
|
lib/active_ldap/association/collection.rb
|
15
|
-
lib/active_ldap/association/
|
16
|
-
lib/active_ldap/
|
17
|
-
lib/active_ldap/
|
18
|
-
lib/active_ldap/
|
19
|
-
lib/active_ldap/ldap.rb
|
20
|
-
lib/active_ldap/timeout_stub.rb
|
21
|
-
lib/active_ldap/timeout.rb
|
39
|
+
lib/active_ldap/association/has_many.rb
|
40
|
+
lib/active_ldap/association/has_many_wrap.rb
|
41
|
+
lib/active_ldap/association/proxy.rb
|
42
|
+
lib/active_ldap/associations.rb
|
22
43
|
lib/active_ldap/attributes.rb
|
23
|
-
lib/active_ldap/
|
44
|
+
lib/active_ldap/base.rb
|
45
|
+
lib/active_ldap/callbacks.rb
|
46
|
+
lib/active_ldap/command.rb
|
47
|
+
lib/active_ldap/configuration.rb
|
24
48
|
lib/active_ldap/connection.rb
|
25
|
-
lib/active_ldap/
|
26
|
-
lib/active_ldap/
|
49
|
+
lib/active_ldap/distinguished_name.rb
|
50
|
+
lib/active_ldap/ldap_error.rb
|
51
|
+
lib/active_ldap/object_class.rb
|
27
52
|
lib/active_ldap/schema.rb
|
28
|
-
lib/active_ldap/
|
29
|
-
lib/active_ldap/
|
30
|
-
lib/active_ldap.rb
|
31
|
-
|
32
|
-
rails/plugin/active_ldap/init.rb
|
53
|
+
lib/active_ldap/timeout.rb
|
54
|
+
lib/active_ldap/timeout_stub.rb
|
55
|
+
lib/active_ldap/user_password.rb
|
56
|
+
lib/active_ldap/validations.rb
|
33
57
|
rails/plugin/active_ldap/README
|
58
|
+
rails/plugin/active_ldap/generators/scaffold_al/scaffold_al_generator.rb
|
59
|
+
rails/plugin/active_ldap/generators/scaffold_al/templates/ldap.yml
|
60
|
+
rails/plugin/active_ldap/init.rb
|
61
|
+
test/TODO
|
62
|
+
test/al-test-utils.rb
|
63
|
+
test/command.rb
|
64
|
+
test/config.yaml.sample
|
65
|
+
test/run-test.rb
|
66
|
+
test/test-unit-ext.rb
|
67
|
+
test/test-unit-ext/always-show-result.rb
|
68
|
+
test/test-unit-ext/priority.rb
|
69
|
+
test/test_adapter.rb
|
70
|
+
test/test_associations.rb
|
71
|
+
test/test_attributes.rb
|
72
|
+
test/test_base.rb
|
73
|
+
test/test_base_per_instance.rb
|
74
|
+
test/test_bind.rb
|
75
|
+
test/test_callback.rb
|
76
|
+
test/test_connection.rb
|
77
|
+
test/test_connection_per_class.rb
|
78
|
+
test/test_dn.rb
|
79
|
+
test/test_find.rb
|
80
|
+
test/test_groupadd.rb
|
81
|
+
test/test_groupdel.rb
|
82
|
+
test/test_groupls.rb
|
83
|
+
test/test_groupmod.rb
|
84
|
+
test/test_lpasswd.rb
|
85
|
+
test/test_object_class.rb
|
86
|
+
test/test_reflection.rb
|
87
|
+
test/test_schema.rb
|
88
|
+
test/test_user.rb
|
89
|
+
test/test_user_password.rb
|
90
|
+
test/test_useradd-binary.rb
|
91
|
+
test/test_useradd.rb
|
92
|
+
test/test_userdel.rb
|
93
|
+
test/test_userls.rb
|
94
|
+
test/test_usermod-binary-add-time.rb
|
95
|
+
test/test_usermod-binary-add.rb
|
96
|
+
test/test_usermod-binary-del.rb
|
97
|
+
test/test_usermod-lang-add.rb
|
98
|
+
test/test_usermod.rb
|
99
|
+
test/test_validation.rb
|
data/README
CHANGED
@@ -40,6 +40,28 @@ INSTALL
|
|
40
40
|
- Run -
|
41
41
|
sudo rake install
|
42
42
|
|
43
|
+
RAILS
|
44
|
+
|
45
|
+
There is a small rails plugin included that allows the use of a file named
|
46
|
+
'ldap.yml' in the config directory of your rails app. This file has a similar
|
47
|
+
function to the 'database.yml' file that allows you to set your database
|
48
|
+
connection settings per environment. Similarly, the ldap.yml file allows
|
49
|
+
settings to be set for development, test, and production environments. For
|
50
|
+
instance, the development entry would look something like the following:
|
51
|
+
|
52
|
+
development:
|
53
|
+
host: 127.0.0.1
|
54
|
+
port: 389
|
55
|
+
base: dc=localhost
|
56
|
+
bind_dn: cn=admin,dc=localhost
|
57
|
+
password: secret
|
58
|
+
|
59
|
+
|
60
|
+
To install, simply copy the rails/plugin/active_ldap folder into the
|
61
|
+
vendor/plugins directory of your rails application and create config/ldap.yml.
|
62
|
+
When your application starts up, the plugin will call #establish_connection
|
63
|
+
using the parameters specified for your current environment.
|
64
|
+
|
43
65
|
|
44
66
|
LICENCE
|
45
67
|
|
data/Rakefile
CHANGED
@@ -2,21 +2,22 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'hoe'
|
5
|
-
|
5
|
+
$LOAD_PATH.unshift('./lib')
|
6
6
|
require 'active_ldap'
|
7
7
|
|
8
|
-
Hoe.new('ruby-activeldap', ActiveLdap::VERSION) do |project|
|
8
|
+
project = Hoe.new('ruby-activeldap', ActiveLdap::VERSION) do |project|
|
9
9
|
project.rubyforge_name = 'ruby-activeldap'
|
10
10
|
project.author = ['Will Drewry', 'Kouhei Sutou']
|
11
11
|
project.email = ['will@alum.bu.edu', 'kou@cozmixng.org']
|
12
12
|
project.summary = 'Ruby/ActiveLdap is a object-oriented API to LDAP'
|
13
13
|
project.url = 'http://rubyforge.org/projects/ruby-activeldap/'
|
14
|
-
project.test_globs = ['test
|
14
|
+
project.test_globs = ['test/test_*.rb']
|
15
15
|
project.changes = project.paragraphs_of('CHANGES', 0..1).join("\n\n")
|
16
|
-
project.extra_deps = [['log4r','>= 1.0.4'], 'activerecord']
|
16
|
+
project.extra_deps = [['log4r', '>= 1.0.4'], 'activerecord']
|
17
17
|
project.spec_extras = {
|
18
18
|
:requirements => ['ruby-ldap >= 0.8.2', '(Open)LDAP server'],
|
19
|
-
:autorequire => 'active_ldap'
|
19
|
+
:autorequire => 'active_ldap',
|
20
|
+
:executables => [],
|
20
21
|
}
|
21
22
|
project.description = String.new(<<-EOF)
|
22
23
|
'Ruby/ActiveLdap' is a ruby extension library which provides a clean
|
@@ -27,11 +28,43 @@ Hoe.new('ruby-activeldap', ActiveLdap::VERSION) do |project|
|
|
27
28
|
EOF
|
28
29
|
end
|
29
30
|
|
31
|
+
# fix Hoe's incorrect guess.
|
32
|
+
project.spec.executables.clear
|
33
|
+
project.bin_files = project.spec.files.grep(/^bin/)
|
34
|
+
|
35
|
+
# fix Hoe's install and uninstall task.
|
36
|
+
task(:install).instance_variable_get("@actions").clear
|
37
|
+
task(:uninstall).instance_variable_get("@actions").clear
|
38
|
+
|
39
|
+
task :install do
|
40
|
+
[
|
41
|
+
[project.lib_files, "lib", Hoe::RUBYLIB, 0444],
|
42
|
+
[project.bin_files, "bin", File.join(Hoe::PREFIX, 'bin'), 0555]
|
43
|
+
].each do |files, prefix, dest, mode|
|
44
|
+
FileUtils.mkdir_p dest unless test ?d, dest
|
45
|
+
files.each do |file|
|
46
|
+
base = File.dirname(file.sub(/^#{prefix}#{File::SEPARATOR}/, ''))
|
47
|
+
_dest = File.join(dest, base)
|
48
|
+
FileUtils.mkdir_p _dest unless test ?d, _dest
|
49
|
+
install file, _dest, :mode => mode
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
desc 'Uninstall the package.'
|
55
|
+
task :uninstall do
|
56
|
+
Dir.chdir Hoe::RUBYLIB do
|
57
|
+
rm_f project.lib_files.collect {|f| f.sub(/^lib#{File::SEPARATOR}/, '')}
|
58
|
+
end
|
59
|
+
Dir.chdir File.join(Hoe::PREFIX, 'bin') do
|
60
|
+
rm_f project.bin_files.collect {|f| f.sub(/^bin#{File::SEPARATOR}/, '')}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
30
65
|
desc 'Tag the repository for release.'
|
31
66
|
task :tag do
|
32
67
|
system "svn copy -m 'New release tag' https://ruby-activeldap.googlecode.com/svn/trunk https://ruby-activeldap.googlecode.com/svn/tags/r#{ActiveLdap::VERSION}"
|
33
68
|
end
|
34
69
|
|
35
|
-
|
36
|
-
|
37
|
-
# vim: syntax=Ruby
|
70
|
+
# vim: syntax=ruby
|
data/TODO
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
-
|
1
|
+
- Test SASL bind.
|
2
2
|
- Add result pagination via LDAP::Controls
|
3
3
|
- serialize & serialized_attributes
|
4
4
|
- schema mgmt - how does AR handle it?
|
@@ -9,9 +9,6 @@ http://api.rubyonrails.com/classes/ActiveRecord/Base.html#M000865
|
|
9
9
|
ActiveLdap exception. I think we need to develop an
|
10
10
|
application using ActiveLdap.
|
11
11
|
- support Ruby/GetText.
|
12
|
-
- support Net::LDAP as LDAP backend after Net::LDAP
|
13
|
-
supports START_TLS. (I made a patch and submitted to the
|
14
|
-
bug tracker of Net::LDAP)
|
15
12
|
- Add locking around Timeout.alarm() to ensure a multithreaded ruby
|
16
13
|
app doesn't hit any race conditions
|
17
14
|
- Add AR matching exceptions:
|
@@ -24,5 +21,3 @@ http://api.rubyonrails.com/classes/ActiveRecord/Base.html#M000865
|
|
24
21
|
* MultiparameterAssignmentErrors
|
25
22
|
* AttributeAssignmentError
|
26
23
|
* RecordNotSaved
|
27
|
-
|
28
|
-
|
Binary file
|
Binary file
|
data/examples/groupadd
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/ruby -W0
|
2
|
+
|
3
|
+
base = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
4
|
+
$LOAD_PATH << File.join(base, "lib")
|
5
|
+
$LOAD_PATH << File.join(base, "examples")
|
6
|
+
|
7
|
+
require 'active_ldap'
|
8
|
+
require 'objects/user'
|
9
|
+
require 'objects/group'
|
10
|
+
|
11
|
+
argv, opts, options = ActiveLdap::Command.parse_options do |opts, options|
|
12
|
+
opts.banner += " GROUP_NAME"
|
13
|
+
end
|
14
|
+
|
15
|
+
if argv.size == 1
|
16
|
+
name = argv.shift
|
17
|
+
else
|
18
|
+
$stderr.puts opts
|
19
|
+
exit 1
|
20
|
+
end
|
21
|
+
|
22
|
+
pwb = Proc.new do |user|
|
23
|
+
ActiveLdap::Command.read_password("[#{user}] Password: ")
|
24
|
+
end
|
25
|
+
|
26
|
+
ActiveLdap::Base.establish_connection(:password_block => pwb,
|
27
|
+
:allow_anonymous => false)
|
28
|
+
|
29
|
+
if Group.exists?(name)
|
30
|
+
$stderr.puts("Group #{name} already exists.")
|
31
|
+
exit 1
|
32
|
+
end
|
33
|
+
|
34
|
+
group = Group.new(name)
|
35
|
+
group.gid_number = 9000
|
36
|
+
|
37
|
+
unless group.save
|
38
|
+
puts "failed"
|
39
|
+
puts group.errors.full_messages
|
40
|
+
exit 1
|
41
|
+
end
|
data/examples/groupdel
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/ruby -W0
|
2
|
+
|
3
|
+
base = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
4
|
+
$LOAD_PATH << File.join(base, "lib")
|
5
|
+
$LOAD_PATH << File.join(base, "examples")
|
6
|
+
|
7
|
+
require 'active_ldap'
|
8
|
+
require 'objects/user'
|
9
|
+
require 'objects/group'
|
10
|
+
|
11
|
+
argv, opts, options = ActiveLdap::Command.parse_options do |opts, options|
|
12
|
+
opts.banner += " GROUP_NAME"
|
13
|
+
end
|
14
|
+
|
15
|
+
if argv.size == 1
|
16
|
+
name = argv.shift
|
17
|
+
else
|
18
|
+
$stderr.puts opts
|
19
|
+
exit 1
|
20
|
+
end
|
21
|
+
|
22
|
+
pwb = Proc.new do |user|
|
23
|
+
ActiveLdap::Command.read_password("[#{user}] Password: ")
|
24
|
+
end
|
25
|
+
|
26
|
+
ActiveLdap::Base.establish_connection(:password_block => pwb,
|
27
|
+
:allow_anonymous => false)
|
28
|
+
|
29
|
+
|
30
|
+
unless Group.exists?(name)
|
31
|
+
$stderr.puts("Group #{name} doesn't exist.")
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
|
35
|
+
Group.destroy(name)
|
data/examples/groupls
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/ruby -W0
|
2
|
+
|
3
|
+
base = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
4
|
+
$LOAD_PATH << File.join(base, "lib")
|
5
|
+
$LOAD_PATH << File.join(base, "examples")
|
6
|
+
|
7
|
+
require 'active_ldap'
|
8
|
+
require 'objects/user'
|
9
|
+
require 'objects/group'
|
10
|
+
|
11
|
+
argv, opts, options = ActiveLdap::Command.parse_options do |opts, options|
|
12
|
+
opts.banner += " GROUP_NAME"
|
13
|
+
end
|
14
|
+
|
15
|
+
if argv.size == 1
|
16
|
+
name = argv.shift
|
17
|
+
else
|
18
|
+
$stderr.puts opts
|
19
|
+
exit 1
|
20
|
+
end
|
21
|
+
|
22
|
+
pwb = Proc.new do |user|
|
23
|
+
ActiveLdap::Command.read_password("[#{user}] Password: ")
|
24
|
+
end
|
25
|
+
|
26
|
+
ActiveLdap::Base.establish_connection(:password_block => pwb,
|
27
|
+
:allow_anonymous => false)
|
28
|
+
|
29
|
+
unless Group.exists?(name)
|
30
|
+
$stderr.puts("Group #{name} doesn't exist.")
|
31
|
+
exit 1
|
32
|
+
end
|
33
|
+
|
34
|
+
group = Group.find(name)
|
35
|
+
|
36
|
+
members = []
|
37
|
+
group.primary_members.each do |mem|
|
38
|
+
members << "#{mem.uid}[#{mem.uidNumber}]"
|
39
|
+
end
|
40
|
+
|
41
|
+
group.members.each do |mem|
|
42
|
+
if mem.new_entry?
|
43
|
+
members << "#{mem.uid}[????]"
|
44
|
+
else
|
45
|
+
members << "#{mem.uid}[#{mem.uidNumber}]"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
puts("#{group.id}(#{group.gid_number}): #{members.join(', ')}")
|
data/examples/groupmod
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/ruby -W0
|
2
|
+
|
3
|
+
base = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
4
|
+
$LOAD_PATH << File.join(base, "lib")
|
5
|
+
$LOAD_PATH << File.join(base, "examples")
|
6
|
+
|
7
|
+
require 'active_ldap'
|
8
|
+
require 'objects/user'
|
9
|
+
require 'objects/group'
|
10
|
+
|
11
|
+
argv, opts, options = ActiveLdap::Command.parse_options do |opts, options|
|
12
|
+
opts.banner += " GROUP_NAME GID_NUMBER"
|
13
|
+
end
|
14
|
+
|
15
|
+
if argv.size == 2
|
16
|
+
name, gid = argv
|
17
|
+
else
|
18
|
+
$stderr.puts opts
|
19
|
+
exit 1
|
20
|
+
end
|
21
|
+
|
22
|
+
pwb = Proc.new do |user|
|
23
|
+
ActiveLdap::Command.read_password("[#{user}] Password: ")
|
24
|
+
end
|
25
|
+
|
26
|
+
ActiveLdap::Base.establish_connection(:password_block => pwb,
|
27
|
+
:allow_anonymous => false)
|
28
|
+
|
29
|
+
|
30
|
+
unless Group.exists?(name)
|
31
|
+
$stderr.puts("Group #{name} doesn't exist.")
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
|
35
|
+
group = Group.find(name)
|
36
|
+
group.gid_number = gid
|
37
|
+
|
38
|
+
unless group.save
|
39
|
+
puts "failed"
|
40
|
+
puts group.errors.full_messages
|
41
|
+
exit 1
|
42
|
+
end
|