open_directory_utils 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7106cdd8914ddba15d1bc47057fdbeeac167d9e8d4d89b3af6f9e03675afde9
4
- data.tar.gz: 830a9e225de96ed0bb0bbca72856780b23e90b1d1b6dd0ac0ba68e4f22dc9960
3
+ metadata.gz: 6de1c571a212c010b912433a24f7a277e07c5744f65af17d9384671fd70d48ad
4
+ data.tar.gz: fc5069610163e65864a51579d095fc58cef7f4a9b6120f69013fd6a4e6ba95e7
5
5
  SHA512:
6
- metadata.gz: '0941277d11e98e26ab6a6a06e1d7e13acf745e1d91ac595437ccdd69f7a754a300eec60aa5457da622dabc208cd001ac4bcb2ba9ed4123f7626d6ae20d33b8f9'
7
- data.tar.gz: f93fb2bf7fed1c375732020193b3884b7944f1c4cabdd010ec50d188c7b69611455a843c659852cd6841527699657b814d72f7c5cc2769b6c78f4ca18fb5d232
6
+ metadata.gz: 6a12c8b2e7c1fc858d82a7b144332255fea5acca0c835d45b962fa9f4a8a7d16b741dc429851e40dcc535cda7f0dfe2403399972695f7c4e126d2e5253894005
7
+ data.tar.gz: 01217a3e336327a79a436c13701faa1d0e73bcd828416da3108f19203de68f259f8166868fc72d2fc1641a857bad2466b8572754bf6e3eebf6363ea0d12b1c6f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- open_directory_utils (0.1.5)
4
+ open_directory_utils (0.1.7)
5
5
  net-ssh (~> 4.2)
6
6
 
7
7
  GEM
@@ -34,4 +34,4 @@ DEPENDENCIES
34
34
  rspec (~> 3.7)
35
35
 
36
36
  BUNDLED WITH
37
- 1.16.1
37
+ 1.16.2
data/README.md CHANGED
@@ -7,13 +7,25 @@ One can also build custom DSCL commands and send them to the server as needed to
7
7
 
8
8
  ## Change Log
9
9
 
10
- * **v0.1.6** - 2018-06-14 - fixed EMailAddress (was incorrectly EMailAttribute)
11
- * **v0.1.5** - 2018-06-14 - add version number to connection for easy checking
12
- * **v0.1.4** - 2018-06-13 - changed the return hash to {response: xxx, status: 'success'}
13
- * **v0.1.3** - 2018-06-13 - able to sync all fields in typcial OD
10
+ * **v0.1.8** - 2018-06-??
11
+ - remove attribs[:value] side effect (return original attribs - always)
12
+ * **v0.1.7** - 2018-06-19
13
+ - add update user method
14
+ - fix unused variable warnings
15
+ - attributes separated from users_creation_delete_update
16
+ - able to create and update accounts with relationships & OrganizationInfo
17
+ * **v0.1.6** - 2018-06-18
18
+ - fixed EMailAddress (was incorrectly EMailAttribute)
19
+ * **v0.1.5**
20
+ - 2018-06-14 - add version number to connection for easy checking
21
+ * **v0.1.4** - 2018-06-13
22
+ - changed the return hash to {response: xxx, status: 'success'}
23
+ * **v0.1.3** - 2018-06-13
24
+ - able to sync all fields in typcial OD
14
25
  - refactored results code (ssh_cmds have redacted passwords)
15
26
  - finished adding pre-built od commands for users - good for syncing accounts
16
- * **v0.1.2** - 2018-06-09 - all user creation features enabled
27
+ * **v0.1.2** - 2018-06-09
28
+ - all user creation features enabled
17
29
  - user creation will add user to a group if group_name present
18
30
  - new accounts disabled by default (w/ option to enable on creation)
19
31
  - now repo includes example code (to create accounts)
@@ -31,7 +31,7 @@ ensure
31
31
  pp users
32
32
  end
33
33
 
34
- make = false
34
+ make_accts = false
35
35
  puts "Review the user data \nEnter 'Y' to create od accounts\n (otherwise you see a dry run)"
36
36
  answer = gets.chomp.downcase
37
37
  if answer.eql? 'y'
@@ -0,0 +1,48 @@
1
+ ---
2
+ # preferred with first name, last name, email and group membership
3
+ # by default account is disabled unless enabled: true is present
4
+ - :user_name: barrutp220
5
+ :relations: 511541
6
+ # - :user_name: albuerl430
7
+ # :relations: 557430
8
+ # - :user_name: rogersl264
9
+ # :relations: 558264
10
+ # - :user_name: miklauc283
11
+ # :relations: 558283
12
+ # - :user_name: portilc119
13
+ # :relations: 559119
14
+ # - :user_name: aguilax190
15
+ # :relations: 559190
16
+ # - :user_name: gonzalm208
17
+ # :relations: 559208
18
+ #
19
+ # milesm866 | 564866
20
+ # galvanj568 | 565568
21
+ # tiradob869 | 565869
22
+ # changt870 | 566870
23
+ # nohm396 | 570396
24
+ # grigoli979 | 571979
25
+ # bedoyac063 | 573063
26
+ # mariglm633 | 575633
27
+ # yudinm437 | 576437
28
+ # fijogai896 | 577896
29
+ # zunzunj443 | 579443
30
+ # zhouw300 | 583300
31
+ # canavej018 | 585018
32
+ # xuz906 | 588906
33
+ # benetor857 | 590857
34
+ # flaskaa617 | 592617
35
+ # berengd044 | 593044
36
+ # guow690 | 593690
37
+ # lacerdm840 | 593840
38
+ # mussina201 | 599201
39
+ # binzegj915 | 599915
40
+ # borowyk252 | 600252
41
+ # mussina288 | 600288
42
+ # linj671 | 603671
43
+ # rizoorm894 | 603894
44
+ # gonzalg934 | 603934
45
+ # pieribe687 | 611687
46
+ # shukshm297 | 615297
47
+ # elizarf803 | 622803
48
+ # zuoj861 | 602861
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby -w
2
+
3
+ require 'yaml'
4
+ require 'open_directory_utils'
5
+
6
+ # setup server connection
7
+ srv_info = {}
8
+ begin
9
+ srv_info = YAML.load_file( File.open('connection.yml') )
10
+ rescue Errno::ENOENT, LoadError, Psych::Error, Psych::SyntaxError
11
+ srv_info = {srv_hostname: 'od.example.com', srv_username: 'odsshlogin',
12
+ dir_username: 'diradmin', dir_password: 'T0p-S3cret' }
13
+ end
14
+
15
+ od = OpenDirectoryUtils::Connection.new( srv_info )
16
+ puts "\nSERVER SETTINGS:"
17
+ pp od
18
+
19
+
20
+ # get users
21
+ users = []
22
+ begin
23
+ users = YAML.load( File.open('relations.yml') )
24
+ rescue Errno::ENOENT, LoadError, Psych::SyntaxError, YAML::Error
25
+ users = [
26
+ {username: 'odtest1', usernumber: '87654321', primary_group_id: 1031},
27
+ {username: 'odtest2', usernumber: '87654322', primary_group_id: 1031},
28
+ ]
29
+ ensure
30
+ pp "USERS:"
31
+ pp users
32
+ end
33
+
34
+ make_accts = false
35
+ puts "Review the user data \nEnter 'Y' to create od accounts\n (otherwise you see a dry run)"
36
+ answer = gets.chomp.downcase
37
+ if answer.eql? 'y'
38
+ make_accts = true
39
+ end
40
+
41
+ # create accounts
42
+ puts "\nCreating OD Accounts:"
43
+ Array(users).each do |person|
44
+ # show commands
45
+ pp od.send(:user_set_relationships, person, od.dir_info)
46
+ # Make Account
47
+ pp od.run(command: :user_set_relationships, params: person ) if make_accts.eql? true
48
+ end
@@ -16,16 +16,16 @@ module OpenDirectoryUtils
16
16
  assert{not attrib[key].eql? '{}'}
17
17
  assert{not attrib[key].include? ' '} if key.eql? :scope
18
18
  assert{not attrib[key].include? ' '} if [:uid, :username, :record_name].include? key
19
- rescue NoMethodError, ArgumentError => error
19
+ rescue NoMethodError, ArgumentError # => error
20
20
  message = "#{key}: '#{attrib[key].inspect}' invalid"
21
21
  message += ", value_name: :#{value}" unless value.nil?
22
22
  raise ArgumentError, message
23
23
  end
24
24
 
25
25
  def tidy_attribs(attribs)
26
- user_attrs = {}
27
- attribs.each{ |k,v| user_attrs[k] = v.to_s.strip }
28
- return user_attrs
26
+ user_attribs = {}
27
+ attribs.each{ |k,v| user_attribs[k] = v.to_s.strip }
28
+ return user_attribs
29
29
  end
30
30
 
31
31
  def user_record_name_alternatives(attribs)
@@ -45,17 +45,18 @@ module OpenDirectoryUtils
45
45
  end
46
46
 
47
47
  # /usr/bin/pwpolicy -a diradmin -p "BigSecret" -u username -setpolicy "isDisabled=0"
48
- def build_pwpolicy_command(params, dir_info)
48
+ def build_pwpolicy_command(attribs, dir_info)
49
49
  ans = %Q[#{dir_info[:pwpol]}]
50
50
  ans += %Q[ -a #{dir_info[:username]}] unless dir_info[:username].nil? or
51
51
  dir_info[:username].empty?
52
52
  ans += %Q[ -p "#{dir_info[:password]}"] unless dir_info[:password].nil? or
53
53
  dir_info[:password].empty?
54
54
  ans += %Q[ -n #{dir_info[:data_path]}]
55
- ans += %Q[ -u #{params[:record_name]}]
56
- ans += %Q[ -#{params[:attribute]}]
57
- ans += %Q[ "#{params[:value]}"] unless params[:value].nil? or
58
- params[:value].empty?
55
+ ans += %Q[ -u #{attribs[:record_name]}]
56
+ ans += %Q[ -#{attribs[:attribute]}]
57
+ ans += %Q[ "#{attribs[:value]}"] unless attribs[:value].nil? or
58
+ attribs[:value].empty?
59
+ attribs[:value] = nil
59
60
  return ans
60
61
  end
61
62
 
@@ -86,6 +87,7 @@ module OpenDirectoryUtils
86
87
  attribs[:attribute].empty?
87
88
  ans += %Q[ "#{attribs[:value]}"] unless attribs[:value].nil? or
88
89
  attribs[:value].empty?
90
+ attribs[:value] = nil
89
91
  return ans
90
92
  end
91
93
 
@@ -119,6 +121,8 @@ module OpenDirectoryUtils
119
121
  ans += %Q[ -t #{params[:type]}] # type can be user or group
120
122
  end
121
123
  ans += %Q[ #{params[:value]}] # the group to be manipulated
124
+ params[:value] = nil
125
+ return ans
122
126
  end
123
127
 
124
128
  end
@@ -8,7 +8,7 @@ module OpenDirectoryUtils
8
8
  # @note - these commands were derived from the following resrouces:
9
9
  # * http://krypted.com/mac-os-x/create-groups-using-dscl/
10
10
  # * https://apple.stackexchange.com/questions/307173/creating-a-group-via-users-groups-in-command-line?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
11
- module CommandsGroupCreateRemove
11
+ module CommandsGroups
12
12
 
13
13
  # include OpenDirectoryUtils::Dscl
14
14
  include OpenDirectoryUtils::CleanCheck
@@ -44,7 +44,7 @@ module OpenDirectoryUtils
44
44
  # pp attribs
45
45
 
46
46
  attribs = group_record_name_alternatives(attribs)
47
- groupname = attribs[:record_name]
47
+ # groupname = attribs[:record_name]
48
48
  attribs[:value] = username
49
49
  # pp attribs
50
50
 
@@ -58,26 +58,6 @@ module OpenDirectoryUtils
58
58
  dscl( cmd_attribs, dir_info )
59
59
  end
60
60
 
61
- # def user_remove_from_group(attribs, dir_info)
62
- # attribs = user_record_name_alternatives(attribs)
63
- #
64
- # attribs[:value] = attribs[:group_membership]
65
- # attribs[:value] = attribs[:value] || attribs[:groupmembership]
66
- # attribs[:value] = attribs[:value] || attribs[:group_name]
67
- # attribs[:value] = attribs[:value] || attribs[:groupname]
68
- # attribs[:value] = attribs[:value] || attribs[:gid]
69
- #
70
- # check_critical_attribute( attribs, :record_name, :username )
71
- # check_critical_attribute( attribs, :value, :groupname )
72
- # attribs = tidy_attribs(attribs)
73
- # command = { operation: 'edit', action: 'delete', type: 'user'}
74
- # user_attrs = attribs.merge(command)
75
- #
76
- # dseditgroup( user_attrs, dir_info )
77
- # end
78
- # # module_function :user_remove_from_group
79
- # # alias_method :user_remove_group_memebership, :user_remove_from_group
80
-
81
61
  # dscl . -delete /Groups/yourGroupName
82
62
  # https://tutorialforlinux.com/2011/09/15/delete-users-and-groups-from-terminal/
83
63
  def group_delete(attribs, dir_info)
@@ -143,27 +123,6 @@ module OpenDirectoryUtils
143
123
  dscl( user_attrs, dir_info )
144
124
  end
145
125
 
146
- # # probably can't create password for group?
147
- # # /usr/bin/dscl -u diradmin -P liaP-meD-Aj-pHi-hOb-en-c /LDAPv3/127.0.0.1 -create /Groups/odgrouptest passwd "*"
148
- # # "<main> attribute status: eDSNoStdMappingAvailable\n" +
149
- # # "<dscl_cmd> DS Error: -14140 (eDSNoStdMappingAvailable)"]
150
- # def group_set_passwd(attribs, dir_info)
151
- # attribs = group_record_name_alternatives(attribs)
152
- #
153
- # attribs[:value] = attribs[:value] || attribs[:password]
154
- # attribs[:value] = attribs[:value] || attribs[:passwd]
155
- # attribs[:value] = attribs[:value] || '*'
156
- #
157
- # check_critical_attribute( attribs, :record_name )
158
- # check_critical_attribute( attribs, :value, :password )
159
- #
160
- # command = {action: 'passwd', scope: 'Groups', attribute: nil}
161
- # user_attrs = attribs.merge(command)
162
- #
163
- # dscl( user_attrs, dir_info )
164
- # end
165
- # alias_method :group_set_password, :group_set_passwd
166
-
167
126
  # create group -- dscl . -create /Groups/ladmins
168
127
  # add group passwd -- dscl . -create /Groups/ladmins passwd “*”
169
128
  # add group name -- dscl . -create /Groups/ladmins RealName “Local Admins”