open_directory_utils 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 670f73215db5f440a0e47ace7c0efb2858491816ac0ce7a2de018d02c64f5f39
4
- data.tar.gz: eff24211563c562e232ad371302dc7150221a5de41b37a0a943e7ed17701b0a4
3
+ metadata.gz: b950bf65b00895fca60d3f9e35cbc4777bc55760785bcfb2714762c4569e2126
4
+ data.tar.gz: 0302a96465860e72fd203f96c50d63fd675db9b49488e28e91fc2706105e5e98
5
5
  SHA512:
6
- metadata.gz: 180370d46964faa772fc81141ae279b5f64844da98e0da2d005b3dce4785b74b234f87c96cbde847a3c218737b2bb8cb0fcaa9ea1464c0eaad674851807ef5d3
7
- data.tar.gz: 599b339abc2e70a0aa24e154ce7cfd08ce05bc567fdca051329f11c22ac5855ccbc165730cd6ca2d5de47d8ab6439bc8a8ea9cc82a251df1513a4ed9526e4940
6
+ metadata.gz: 68c287fc687f3b4353c47b1805de579ed72670cec2c0b51ce25e8f3ad8625b86614a4f64bf1ca0312607d3db1a24c58dc7f108c3bbf9e5f37584368ac10c1649
7
+ data.tar.gz: 86e1a2d6dd44960e89ca2c5ebd3a8eababec75b575fc7c63cd4a4062bd976f4a33ef11b2cfdcf22753364aaff4bb5ecc461188d0596527c9f2273602d74f1f35
data/README.md CHANGED
@@ -9,6 +9,20 @@ One can also build custom DSCL commands and send them to the server as needed to
9
9
 
10
10
  * **v0.1.0** - 2018-06-06
11
11
  - can adjust and delete OD attributes for users and groups (pre-built ldap attributes comming soon)
12
+ * **v0.1.1** - 2018-06-07
13
+ - refactored to separate OD attribute from LDAP attribute commands (shortened methods and better organization and shorter tests)
14
+
15
+ ## ToDo
16
+
17
+ * LDAP attributes
18
+ * Verify setting Password
19
+ * Verify testing Password
20
+ * Refactor Process Results
21
+ * Test dscl direct commands
22
+ * Check Connection Unit Tests
23
+ * Learn dscl property names from LDAP
24
+ * Lock and unlock account authentication
25
+ * verify which email address is LDAP (& seen in GUI)
12
26
 
13
27
  ## Installation
14
28
 
@@ -26,5 +26,15 @@ module OpenDirectoryUtils
26
26
  return user_attrs
27
27
  end
28
28
 
29
+ def user_record_name_alternatives(attribs)
30
+ attribs[:record_name] = nil
31
+ attribs[:record_name] = attribs[:user_name]
32
+ attribs[:record_name] = attribs[:record_name] || attribs[:short_name]
33
+ attribs[:record_name] = attribs[:record_name] || attribs[:shortname]
34
+ attribs[:record_name] = attribs[:record_name] || attribs[:username]
35
+ attribs[:record_name] = attribs[:record_name] || attribs[:uid]
36
+ return attribs
37
+ end
38
+
29
39
  end
30
40
  end
@@ -38,6 +38,91 @@ module OpenDirectoryUtils
38
38
  group_get_info(attribs, dir_info)
39
39
  end
40
40
 
41
+ # add 1st user -- dscl . -read /Groups/ladmins
42
+ def user_in_group?(attribs, dir_info)
43
+ attribs = group_record_name_alternatives(attribs)
44
+ # attribs[:record_name] = attribs[:record_name] || attribs[:group_name]
45
+ # attribs[:record_name] = attribs[:record_name] || attribs[:groupname]
46
+ # attribs[:record_name] = attribs[:record_name] || attribs[:gid]
47
+
48
+ check_critical_attribute( attribs, :record_name, :groupname )
49
+ attribs = tidy_attribs(attribs)
50
+
51
+ command = {action: 'read', scope: 'Groups', attribute: nil, value: nil}
52
+ user_attrs = attribs.merge(command)
53
+
54
+ dscl( user_attrs, dir_info )
55
+ end
56
+
57
+ # http://krypted.com/mac-os-x/create-groups-using-dscl/
58
+ # https://superuser.com/questions/214004/how-to-add-user-to-a-group-from-mac-os-x-command-line?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
59
+ # sudo dseditgroup -o edit -a $username_to_add -t user admin
60
+ # sudo dseditgroup -o edit -a $username_to_add -t user wheel
61
+ # http://osxdaily.com/2007/10/29/how-to-add-a-user-from-the-os-x-command-line-works-with-leopard/
62
+ #
63
+ # add 1st user -- dscl . -create /Groups/ladmins GroupMembership localadmin
64
+ # add more users -- dscl . -append /Groups/ladmins GroupMembership 2ndlocaladmin
65
+ def user_first_in_group(attribs, dir_info)
66
+ attribs = group_record_name_alternatives(attribs)
67
+ # attribs[:record_name] = attribs[:record_name] || attribs[:group_name]
68
+ # attribs[:record_name] = attribs[:record_name] || attribs[:groupname]
69
+ # attribs[:record_name] = attribs[:record_name] || attribs[:gid]
70
+
71
+ attribs[:value] = attribs[:value] || attribs[:user_name]
72
+ attribs[:value] = attribs[:value] || attribs[:username]
73
+ attribs[:value] = attribs[:value] || attribs[:uid]
74
+
75
+ check_critical_attribute( attribs, :record_name, :groupname )
76
+ check_critical_attribute( attribs, :value, :username )
77
+ attribs = tidy_attribs(attribs)
78
+
79
+ command = {action: 'create', scope: 'Groups', attribute: 'GroupMembership'}
80
+ user_attrs = attribs.merge(command)
81
+
82
+ dscl( user_attrs, dir_info )
83
+ end
84
+ def user_append_to_group(attribs, dir_info)
85
+ attribs = group_record_name_alternatives(attribs)
86
+ # attribs[:record_name] = attribs[:record_name] || attribs[:group_name]
87
+ # attribs[:record_name] = attribs[:record_name] || attribs[:groupname]
88
+ # attribs[:record_name] = attribs[:record_name] || attribs[:gid]
89
+
90
+ attribs[:value] = attribs[:value] || attribs[:user_name]
91
+ attribs[:value] = attribs[:value] || attribs[:username]
92
+ attribs[:value] = attribs[:value] || attribs[:uid]
93
+
94
+ check_critical_attribute( attribs, :record_name, :groupname )
95
+ check_critical_attribute( attribs, :value, :username )
96
+ attribs = tidy_attribs(attribs)
97
+
98
+ command = {action: 'append', scope: 'Groups', attribute: 'GroupMembership'}
99
+ user_attrs = attribs.merge(command)
100
+
101
+ dscl( user_attrs, dir_info )
102
+ end
103
+ alias_method :user_add_to_group, :user_append_to_group
104
+
105
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -delete /Groups/$VALUE GroupMembership $shortname_USERNAME
106
+ def user_remove_from_group(attribs, dir_info)
107
+ attribs = group_record_name_alternatives(attribs)
108
+ # attribs[:record_name] = attribs[:record_name] || attribs[:group_name]
109
+ # attribs[:record_name] = attribs[:record_name] || attribs[:groupname]
110
+ # attribs[:record_name] = attribs[:record_name] || attribs[:gid]
111
+
112
+ attribs[:value] = attribs[:value] || attribs[:user_name]
113
+ attribs[:value] = attribs[:value] || attribs[:username]
114
+ attribs[:value] = attribs[:value] || attribs[:uid]
115
+
116
+ check_critical_attribute( attribs, :record_name, :groupname )
117
+ check_critical_attribute( attribs, :value, :username )
118
+ attribs = tidy_attribs(attribs)
119
+
120
+ command = {action: 'delete', scope: 'Groups', attribute: 'GroupMembership'}
121
+ user_attrs = attribs.merge(command)
122
+
123
+ dscl( user_attrs, dir_info )
124
+ end
125
+
41
126
  # add 1st user -- dscl . create /Groups/ladmins GroupMembership localadmin
42
127
  # add more users -- dscl . append /Groups/ladmins GroupMembership 2ndlocaladmin
43
128
  def group_add_first_user(attribs, dir_info)
@@ -0,0 +1,337 @@
1
+ require "open_directory_utils/dscl"
2
+ require "open_directory_utils/clean_check"
3
+
4
+ module OpenDirectoryUtils
5
+
6
+ # this is a long list of pre-built dscl commands affecting users to accomplish common actions
7
+ # @note - these commands were derived from the following resrouces:
8
+ # * https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/dscl.1.html
9
+ # * https://superuser.com/questions/592921/mac-osx-users-vs-dscl-command-to-list-user/621055?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
10
+ module CommandsUserAttribsLdap
11
+
12
+ include OpenDirectoryUtils::Dscl
13
+ include OpenDirectoryUtils::CleanCheck
14
+
15
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER cn "$NAME"
16
+ def user_set_common_name(attribs, dir_info)
17
+ attribs = user_record_name_alternatives(attribs)
18
+
19
+ attribs[:value] = attribs[:value] || attribs[:cn]
20
+ attribs[:value] = attribs[:value] || attribs[:realname]
21
+ attribs[:value] = attribs[:value] || attribs[:real_name]
22
+ attribs[:value] = attribs[:value] || attribs[:fullname]
23
+ attribs[:value] = attribs[:value] || attribs[:full_name]
24
+ attribs[:value] = attribs[:value] || "#{attribs[:first_name]} #{attribs[:last_name]}"
25
+
26
+ check_critical_attribute( attribs, :record_name )
27
+ check_critical_attribute( attribs, :value, :common_name )
28
+ attribs = tidy_attribs(attribs)
29
+
30
+ command = {action: 'create', scope: 'Users', attribute: 'cn'}
31
+ user_attrs = attribs.merge(command)
32
+
33
+ dscl( user_attrs, dir_info )
34
+ end
35
+ alias_method :user_set_cn, :user_set_common_name
36
+
37
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME givenName "$VALUE"
38
+ def user_set_given_name(attribs, dir_info)
39
+ attribs = user_record_name_alternatives(attribs)
40
+
41
+ attribs[:value] = attribs[:value] || attribs[:given_name]
42
+ attribs[:value] = attribs[:value] || attribs[:first_name]
43
+
44
+ check_critical_attribute( attribs, :record_name )
45
+ check_critical_attribute( attribs, :value, :given_name )
46
+ attribs = tidy_attribs(attribs)
47
+
48
+ command = {action: 'create', scope: 'Users', attribute: 'givenName'}
49
+ user_attrs = attribs.merge(command)
50
+
51
+ dscl( user_attrs, dir_info )
52
+ end
53
+
54
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME sn "$VALUE"
55
+ def user_set_surname(attribs, dir_info)
56
+ attribs = user_record_name_alternatives(attribs)
57
+
58
+ attribs[:value] = attribs[:value] || attribs[:sn]
59
+ attribs[:value] = attribs[:value] || attribs[:surname]
60
+ attribs[:value] = attribs[:value] || attribs[:last_name]
61
+
62
+ check_critical_attribute( attribs, :record_name )
63
+ check_critical_attribute( attribs, :value, :surname )
64
+ attribs = tidy_attribs(attribs)
65
+
66
+ command = {action: 'create', scope: 'Users', attribute: 'sn'}
67
+ user_attrs = attribs.merge(command)
68
+
69
+ dscl( user_attrs, dir_info )
70
+ end
71
+ alias_method :user_set_sn, :user_set_surname
72
+
73
+ # # sudo dscl . -create /Users/someuser uidnumber "1010"
74
+ def user_set_uidnumber(attribs, dir_info)
75
+ attribs = user_record_name_alternatives(attribs)
76
+
77
+ attribs[:value] = attribs[:value] || attribs[:uniqueid]
78
+ attribs[:value] = attribs[:value] || attribs[:unique_id]
79
+ attribs[:value] = attribs[:value] || attribs[:uidnumber]
80
+
81
+ check_critical_attribute( attribs, :record_name )
82
+ check_critical_attribute( attribs, :value, :unique_id )
83
+ attribs = tidy_attribs(attribs)
84
+
85
+ command = {action: 'create', scope: 'Users', attribute: 'uidnumber'}
86
+ user_attrs = attribs.merge(command)
87
+
88
+ dscl( user_attrs, dir_info )
89
+ end
90
+
91
+ # sudo dscl . -create /Users/someuser PrimaryGroupID 80
92
+ def user_set_gidnumber(attribs, dir_info)
93
+ attribs = user_record_name_alternatives(attribs)
94
+
95
+ attribs[:value] = attribs[:value] || attribs[:group_id]
96
+ attribs[:value] = attribs[:value] || attribs[:gidnumber]
97
+ attribs[:value] = attribs[:value] || attribs[:group_number]
98
+ attribs[:value] = attribs[:value] || attribs[:primary_group_id]
99
+
100
+ check_critical_attribute( attribs, :record_name )
101
+ check_critical_attribute( attribs, :value, :group_id )
102
+ attribs = tidy_attribs(attribs)
103
+
104
+ command = {action: 'create', scope: 'Users', attribute: 'gidnumber'}
105
+ user_attrs = attribs.merge(command)
106
+
107
+ dscl( user_attrs, dir_info )
108
+ end
109
+
110
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME homedirectory "$VALUE"
111
+ def user_set_home_directory(attribs, dir_info)
112
+ attribs = user_record_name_alternatives(attribs)
113
+
114
+ attribs[:value] = attribs[:value] || attribs[:home_directory]
115
+ attribs[:value] = attribs[:value] || attribs[:nfs_home_directory]
116
+ attribs[:value] = attribs[:value] || '/Volumes/Macintosh HD/Users/someone'
117
+
118
+ command = {action: 'create', scope: 'Users', attribute: 'homedirectory'}
119
+ attribs = attribs.merge(command)
120
+
121
+ check_critical_attribute( attribs, :record_name )
122
+ check_critical_attribute( attribs, :value, :home_directory )
123
+ user_attrs = tidy_attribs(attribs)
124
+
125
+ dscl( user_attrs, dir_info )
126
+ end
127
+
128
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME loginShell "$VALUE"
129
+ def user_set_login_shell(attribs, dir_info)
130
+ attribs = user_record_name_alternatives(attribs)
131
+
132
+ attribs[:value] = attribs[:value] || attribs[:user_shell]
133
+ attribs[:value] = attribs[:value] || attribs[:shell]
134
+ attribs[:value] = attribs[:value] || '/bin/bash'
135
+
136
+ check_critical_attribute( attribs, :record_name )
137
+ check_critical_attribute( attribs, :value, :shell )
138
+ attribs = tidy_attribs(attribs)
139
+
140
+ command = {action: 'create', scope: 'Users', attribute: 'loginShell'}
141
+ user_attrs = attribs.merge(command)
142
+
143
+ dscl( user_attrs, dir_info )
144
+ end
145
+
146
+
147
+ # OTHER FIELDS
148
+ #####################
149
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME mail "$VALUE"
150
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME email "$VALUE"
151
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME apple-user-mailattribute "$VALUE"
152
+ def user_set_first_email(attribs, dir_info)
153
+ attribs = user_record_name_alternatives(attribs)
154
+
155
+ attribs[:value] = attribs[:value] || attribs['apple-user-mailattribute']
156
+ attribs[:value] = attribs[:value] || attribs[:apple_user_mailattribute]
157
+ attribs[:value] = attribs[:value] || attribs[:email]
158
+ attribs[:value] = attribs[:value] || attribs[:mail]
159
+
160
+ check_critical_attribute( attribs, :record_name )
161
+ check_critical_attribute( attribs, :value, :email )
162
+ attribs = tidy_attribs(attribs)
163
+
164
+ answer = []
165
+
166
+ command = {action: 'create', scope: 'Users', attribute: 'mail'}
167
+ user_attrs = attribs.merge(command)
168
+ answer << dscl( user_attrs, dir_info )
169
+
170
+ command = {action: 'create', scope: 'Users', attribute: 'email'}
171
+ user_attrs = attribs.merge(command)
172
+ answer << dscl( user_attrs, dir_info )
173
+
174
+ command = {action: 'create', scope: 'Users', attribute: 'apple-user-mailattribute'}
175
+ user_attrs = attribs.merge(command)
176
+ answer << dscl( user_attrs, dir_info )
177
+
178
+ return answer
179
+ end
180
+ alias_method :user_set_email, :user_set_first_email
181
+
182
+ def user_append_email(attribs, dir_info)
183
+ attribs = user_record_name_alternatives(attribs)
184
+
185
+ attribs[:value] = attribs[:value] || attribs['apple-user-mailattribute']
186
+ attribs[:value] = attribs[:value] || attribs[:apple_user_mailattribute]
187
+ attribs[:value] = attribs[:value] || attribs[:email]
188
+ attribs[:value] = attribs[:value] || attribs[:mail]
189
+
190
+ check_critical_attribute( attribs, :record_name )
191
+ check_critical_attribute( attribs, :value, :email )
192
+ attribs = tidy_attribs(attribs)
193
+
194
+ answer = []
195
+
196
+ command = {action: 'append', scope: 'Users', attribute: 'mail'}
197
+ user_attrs = attribs.merge(command)
198
+ answer << dscl( user_attrs, dir_info )
199
+
200
+ command = {action: 'append', scope: 'Users', attribute: 'email'}
201
+ user_attrs = attribs.merge(command)
202
+ answer << dscl( user_attrs, dir_info )
203
+
204
+ return answer
205
+ end
206
+
207
+ # dscl . -delete /Users/yourUserName
208
+ # https://tutorialforlinux.com/2011/09/15/delete-users-and-groups-from-terminal/
209
+ def user_delete(attribs, dir_info)
210
+ attribs = user_record_name_alternatives(attribs)
211
+
212
+ check_critical_attribute( attribs, :record_name )
213
+ attribs = tidy_attribs(attribs)
214
+
215
+ command = {action: 'delete', scope: 'Users', value: nil, attribute: nil}
216
+ user_attrs = attribs.merge(command)
217
+
218
+ dscl( user_attrs, dir_info )
219
+ end
220
+
221
+ # https://images.apple.com/server/docs/Command_Line.pdf
222
+ # https://serverfault.com/questions/20702/how-do-i-create-user-accounts-from-the-terminal-in-mac-os-x-10-5?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
223
+ # https://superuser.com/questions/1154564/how-to-create-a-user-from-the-macos-command-line
224
+ def user_create_min(attribs, dir_info)
225
+ attribs = user_record_name_alternatives(attribs)
226
+
227
+ check_critical_attribute( attribs, :record_name )
228
+ attribs = tidy_attribs(attribs)
229
+
230
+ command = {action: 'create', scope: 'Users', value: nil, attribute: nil}
231
+ user_attrs = attribs.merge(command)
232
+
233
+ dscl( user_attrs, dir_info )
234
+
235
+ answer = []
236
+ attribs[:value] = nil
237
+ answer << dscl( user_attrs, dir_info )
238
+ attribs[:value] = nil
239
+ answer << user_set_password(attribs, dir_info)
240
+ attribs[:value] = nil
241
+ answer << user_set_real_name(attribs, dir_info)
242
+
243
+ return answer
244
+ end
245
+
246
+ # https://images.apple.com/server/docs/Command_Line.pdf
247
+ # https://serverfault.com/questions/20702/how-do-i-create-user-accounts-from-the-terminal-in-mac-os-x-10-5?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
248
+ # https://superuser.com/questions/1154564/how-to-create-a-user-from-the-macos-command-line
249
+ def user_create_full(attribs, dir_info)
250
+ attribs = user_record_name_alternatives(attribs)
251
+
252
+ check_critical_attribute( attribs, :record_name )
253
+ attribs = tidy_attribs(attribs).dup
254
+
255
+ answer = []
256
+ attribs[:value] = nil
257
+ answer << user_create_min(attribs, dir_info)
258
+ attribs[:value] = nil
259
+ answer << user_set_shell(attribs, dir_info)
260
+ attribs[:value] = nil
261
+ answer << user_set_first_name(attribs, dir_info)
262
+ attribs[:value] = nil
263
+ answer << user_set_last_name(attribs, dir_info)
264
+ attribs[:value] = nil
265
+ answer << user_set_unique_id(attribs, dir_info)
266
+ attribs[:value] = nil
267
+ answer << user_set_primary_group_id(attribs, dir_info)
268
+ attribs[:value] = nil
269
+ answer << user_set_nfs_home_directory(attribs, dir_info)
270
+ # skip email if non-sent
271
+ unless attribs[:email].nil? and attribs[:mail].nil? and attribs[:apple_user_mailattribute].nil?
272
+ attribs[:value] = nil
273
+ answer << user_set_email(attribs, dir_info)
274
+ end
275
+
276
+ return answer.flatten
277
+ end
278
+
279
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME mobile "$VALUE"
280
+ def user_set_mobile_phone
281
+ end
282
+
283
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME telephoneNumber "$VALUE"
284
+ def user_set_work_phone
285
+ end
286
+
287
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME homePhone "$VALUE"
288
+ def user_set_home_phone
289
+ end
290
+
291
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME title "$VALUE"
292
+ def user_set_title
293
+ end
294
+
295
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME departmentNumber "$VALUE"
296
+ def user_set_department
297
+ end
298
+
299
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME street "$VALUE"
300
+ def user_set_street
301
+ end
302
+ alias_method :las_set_dorm, :user_set_street
303
+ alias_method :las_set_housing, :user_set_street
304
+
305
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname l "$VALUE"
306
+ def user_set_city
307
+ end
308
+ alias_method :las_, :user_set_city
309
+
310
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME st "$VALUE"
311
+ def user_set_state
312
+ end
313
+ alias_method :las_cultural_trip, :user_set_state
314
+
315
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME postalCode "$VALUE"
316
+ def user_set_postcode
317
+ end
318
+ alias_method :las_faculty_family, :user_set_postcode
319
+
320
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER c "$VALUE"
321
+ def user_set_country
322
+ end
323
+
324
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME labeledURI "$VALUE"
325
+ def user_set_homepage
326
+ end
327
+ alias_method :user_set_webpage, :user_set_homepage
328
+ alias_method :las_enrollment_date, :user_set_homepage
329
+ alias_method :las_begin_date, :user_set_homepage
330
+
331
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER description "$NAME"
332
+ def user_set_comments
333
+ end
334
+ alias_method :user_set_description, :user_set_comments
335
+
336
+ end
337
+ end
@@ -7,21 +7,11 @@ module OpenDirectoryUtils
7
7
  # @note - these commands were derived from the following resrouces:
8
8
  # * https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/dscl.1.html
9
9
  # * https://superuser.com/questions/592921/mac-osx-users-vs-dscl-command-to-list-user/621055?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
10
- module CommandsUser
10
+ module CommandsUserAttribsOd
11
11
 
12
12
  include OpenDirectoryUtils::Dscl
13
13
  include OpenDirectoryUtils::CleanCheck
14
14
 
15
- def user_record_name_alternatives(attribs)
16
- attribs[:record_name] = nil
17
- attribs[:record_name] = attribs[:user_name]
18
- attribs[:record_name] = attribs[:record_name] || attribs[:short_name]
19
- attribs[:record_name] = attribs[:record_name] || attribs[:shortname]
20
- attribs[:record_name] = attribs[:record_name] || attribs[:username]
21
- attribs[:record_name] = attribs[:record_name] || attribs[:uid]
22
- return attribs
23
- end
24
-
25
15
  # GET INFO
26
16
  ##########
27
17
  # get user record -- dscl . -read /Users/<username>
@@ -72,28 +62,6 @@ module OpenDirectoryUtils
72
62
 
73
63
  dscl( user_attrs, dir_info )
74
64
  end
75
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER cn "$NAME"
76
- def user_set_common_name(attribs, dir_info)
77
- attribs = user_record_name_alternatives(attribs)
78
-
79
- attribs[:value] = attribs[:value] || attribs[:cn]
80
- attribs[:value] = attribs[:value] || attribs[:realname]
81
- attribs[:value] = attribs[:value] || attribs[:real_name]
82
- attribs[:value] = attribs[:value] || attribs[:fullname]
83
- attribs[:value] = attribs[:value] || attribs[:full_name]
84
- attribs[:value] = attribs[:value] || "#{attribs[:first_name]} #{attribs[:last_name]}"
85
-
86
- check_critical_attribute( attribs, :record_name )
87
- check_critical_attribute( attribs, :value, :common_name )
88
- attribs = tidy_attribs(attribs)
89
-
90
- command = {action: 'create', scope: 'Users', attribute: 'cn'}
91
- user_attrs = attribs.merge(command)
92
-
93
- dscl( user_attrs, dir_info )
94
- end
95
- alias_method :user_set_cn, :user_set_common_name
96
-
97
65
 
98
66
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME FirstName "$VALUE"
99
67
  def user_set_first_name(attribs, dir_info)
@@ -111,22 +79,6 @@ module OpenDirectoryUtils
111
79
 
112
80
  dscl( user_attrs, dir_info )
113
81
  end
114
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME givenName "$VALUE"
115
- def user_set_given_name(attribs, dir_info)
116
- attribs = user_record_name_alternatives(attribs)
117
-
118
- attribs[:value] = attribs[:value] || attribs[:given_name]
119
- attribs[:value] = attribs[:value] || attribs[:first_name]
120
-
121
- check_critical_attribute( attribs, :record_name )
122
- check_critical_attribute( attribs, :value, :given_name )
123
- attribs = tidy_attribs(attribs)
124
-
125
- command = {action: 'create', scope: 'Users', attribute: 'givenName'}
126
- user_attrs = attribs.merge(command)
127
-
128
- dscl( user_attrs, dir_info )
129
- end
130
82
 
131
83
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME LastName "$VALUE"
132
84
  def user_set_last_name(attribs, dir_info)
@@ -145,24 +97,6 @@ module OpenDirectoryUtils
145
97
 
146
98
  dscl( user_attrs, dir_info )
147
99
  end
148
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME sn "$VALUE"
149
- def user_set_surname(attribs, dir_info)
150
- attribs = user_record_name_alternatives(attribs)
151
-
152
- attribs[:value] = attribs[:value] || attribs[:sn]
153
- attribs[:value] = attribs[:value] || attribs[:surname]
154
- attribs[:value] = attribs[:value] || attribs[:last_name]
155
-
156
- check_critical_attribute( attribs, :record_name )
157
- check_critical_attribute( attribs, :value, :surname )
158
- attribs = tidy_attribs(attribs)
159
-
160
- command = {action: 'create', scope: 'Users', attribute: 'sn'}
161
- user_attrs = attribs.merge(command)
162
-
163
- dscl( user_attrs, dir_info )
164
- end
165
- alias_method :user_set_sn, :user_set_surname
166
100
 
167
101
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME NameSuffix "$VALUE"
168
102
  def user_set_name_suffix
@@ -171,8 +105,6 @@ module OpenDirectoryUtils
171
105
  def user_set_apple_name_suffix
172
106
  end
173
107
 
174
-
175
-
176
108
  # sudo dscl . -create /Users/someuser UniqueID "1010"
177
109
  def user_set_unique_id(attribs, dir_info)
178
110
  attribs = user_record_name_alternatives(attribs)
@@ -193,24 +125,6 @@ module OpenDirectoryUtils
193
125
  dscl( user_attrs, dir_info )
194
126
  end
195
127
 
196
- # # sudo dscl . -create /Users/someuser uidnumber "1010"
197
- def user_set_uidnumber(attribs, dir_info)
198
- attribs = user_record_name_alternatives(attribs)
199
-
200
- attribs[:value] = attribs[:value] || attribs[:uniqueid]
201
- attribs[:value] = attribs[:value] || attribs[:unique_id]
202
- attribs[:value] = attribs[:value] || attribs[:uidnumber]
203
-
204
- check_critical_attribute( attribs, :record_name )
205
- check_critical_attribute( attribs, :value, :unique_id )
206
- attribs = tidy_attribs(attribs)
207
-
208
- command = {action: 'create', scope: 'Users', attribute: 'uidnumber'}
209
- user_attrs = attribs.merge(command)
210
-
211
- dscl( user_attrs, dir_info )
212
- end
213
-
214
128
  # sudo dscl . -create /Users/someuser PrimaryGroupID 80
215
129
  def user_set_primary_group_id(attribs, dir_info)
216
130
  attribs = user_record_name_alternatives(attribs)
@@ -230,24 +144,6 @@ module OpenDirectoryUtils
230
144
 
231
145
  dscl( user_attrs, dir_info )
232
146
  end
233
- # sudo dscl . -create /Users/someuser PrimaryGroupID 80
234
- def user_set_gidnumber(attribs, dir_info)
235
- attribs = user_record_name_alternatives(attribs)
236
-
237
- attribs[:value] = attribs[:value] || attribs[:group_id]
238
- attribs[:value] = attribs[:value] || attribs[:gidnumber]
239
- attribs[:value] = attribs[:value] || attribs[:group_number]
240
- attribs[:value] = attribs[:value] || attribs[:primary_group_id]
241
-
242
- check_critical_attribute( attribs, :record_name )
243
- check_critical_attribute( attribs, :value, :group_id )
244
- attribs = tidy_attribs(attribs)
245
-
246
- command = {action: 'create', scope: 'Users', attribute: 'gidnumber'}
247
- user_attrs = attribs.merge(command)
248
-
249
- dscl( user_attrs, dir_info )
250
- end
251
147
 
252
148
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/someuser NFSHomeDirectory /Users/someuser
253
149
  def user_set_nfs_home_directory(attribs, dir_info)
@@ -266,23 +162,6 @@ module OpenDirectoryUtils
266
162
 
267
163
  dscl( user_attrs, dir_info )
268
164
  end
269
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME homedirectory "$VALUE"
270
- def user_set_home_directory(attribs, dir_info)
271
- attribs = user_record_name_alternatives(attribs)
272
-
273
- attribs[:value] = attribs[:value] || attribs[:home_directory]
274
- attribs[:value] = attribs[:value] || attribs[:nfs_home_directory]
275
- attribs[:value] = attribs[:value] || '/Volumes/Macintosh HD/Users/someone'
276
-
277
- command = {action: 'create', scope: 'Users', attribute: 'homedirectory'}
278
- attribs = attribs.merge(command)
279
-
280
- check_critical_attribute( attribs, :record_name )
281
- check_critical_attribute( attribs, :value, :home_directory )
282
- user_attrs = tidy_attribs(attribs)
283
-
284
- dscl( user_attrs, dir_info )
285
- end
286
165
 
287
166
  # /usr/bin/pwpolicy -a diradmin -p "TopSecret" -u username -setpassword "AnotherSecret"
288
167
  # /usr/bin/dscl -plist -u diradmin -P #{adminpw} /LDAPv3/127.0.0.1/ -passwd /Users/#{shortname} "#{passwd}"
@@ -336,27 +215,7 @@ module OpenDirectoryUtils
336
215
 
337
216
  dscl( user_attrs, dir_info )
338
217
  end
339
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME loginShell "$VALUE"
340
- def user_set_login_shell(attribs, dir_info)
341
- attribs = user_record_name_alternatives(attribs)
342
-
343
- attribs[:value] = attribs[:value] || attribs[:user_shell]
344
- attribs[:value] = attribs[:value] || attribs[:shell]
345
- attribs[:value] = attribs[:value] || '/bin/bash'
346
-
347
- check_critical_attribute( attribs, :record_name )
348
- check_critical_attribute( attribs, :value, :shell )
349
- attribs = tidy_attribs(attribs)
350
-
351
- command = {action: 'create', scope: 'Users', attribute: 'loginShell'}
352
- user_attrs = attribs.merge(command)
353
-
354
- dscl( user_attrs, dir_info )
355
- end
356
-
357
218
 
358
- # OTHER FIELDS
359
- #####################
360
219
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME mail "$VALUE"
361
220
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME email "$VALUE"
362
221
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME apple-user-mailattribute "$VALUE"
@@ -487,108 +346,13 @@ module OpenDirectoryUtils
487
346
  return answer.flatten
488
347
  end
489
348
 
490
- # ADD USER TO GROUPS
491
- #################### #
492
- # add 1st user -- dscl . -read /Groups/ladmins
493
- def user_in_group?(attribs, dir_info)
494
- attribs[:record_name] = attribs[:record_name] || attribs[:group_name]
495
- attribs[:record_name] = attribs[:record_name] || attribs[:groupname]
496
- attribs[:record_name] = attribs[:record_name] || attribs[:gid]
497
-
498
- check_critical_attribute( attribs, :record_name, :groupname )
499
- attribs = tidy_attribs(attribs)
500
-
501
- command = {action: 'read', scope: 'Groups', attribute: nil, value: nil}
502
- user_attrs = attribs.merge(command)
503
-
504
- dscl( user_attrs, dir_info )
505
- end
506
-
507
- # http://krypted.com/mac-os-x/create-groups-using-dscl/
508
- # https://superuser.com/questions/214004/how-to-add-user-to-a-group-from-mac-os-x-command-line?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
509
- # sudo dseditgroup -o edit -a $username_to_add -t user admin
510
- # sudo dseditgroup -o edit -a $username_to_add -t user wheel
511
- # http://osxdaily.com/2007/10/29/how-to-add-a-user-from-the-os-x-command-line-works-with-leopard/
512
- #
513
- # add 1st user -- dscl . -create /Groups/ladmins GroupMembership localadmin
514
- # add more users -- dscl . -append /Groups/ladmins GroupMembership 2ndlocaladmin
515
- def user_first_in_group(attribs, dir_info)
516
- attribs[:record_name] = attribs[:record_name] || attribs[:group_name]
517
- attribs[:record_name] = attribs[:record_name] || attribs[:groupname]
518
- attribs[:record_name] = attribs[:record_name] || attribs[:gid]
519
-
520
- attribs[:value] = attribs[:value] || attribs[:user_name]
521
- attribs[:value] = attribs[:value] || attribs[:username]
522
- attribs[:value] = attribs[:value] || attribs[:uid]
523
-
524
- check_critical_attribute( attribs, :record_name, :groupname )
525
- check_critical_attribute( attribs, :value, :username )
526
- attribs = tidy_attribs(attribs)
527
-
528
- command = {action: 'create', scope: 'Groups', attribute: 'GroupMembership'}
529
- user_attrs = attribs.merge(command)
530
-
531
- dscl( user_attrs, dir_info )
532
- end
533
- def user_append_to_group(attribs, dir_info)
534
- attribs[:record_name] = attribs[:record_name] || attribs[:group_name]
535
- attribs[:record_name] = attribs[:record_name] || attribs[:groupname]
536
- attribs[:record_name] = attribs[:record_name] || attribs[:gid]
537
-
538
- attribs[:value] = attribs[:value] || attribs[:user_name]
539
- attribs[:value] = attribs[:value] || attribs[:username]
540
- attribs[:value] = attribs[:value] || attribs[:uid]
541
-
542
- check_critical_attribute( attribs, :record_name, :groupname )
543
- check_critical_attribute( attribs, :value, :username )
544
- attribs = tidy_attribs(attribs)
545
-
546
- command = {action: 'append', scope: 'Groups', attribute: 'GroupMembership'}
547
- user_attrs = attribs.merge(command)
548
-
549
- dscl( user_attrs, dir_info )
550
- end
551
- alias_method :user_add_to_group, :user_append_to_group
552
-
553
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -delete /Groups/$VALUE GroupMembership $shortname_USERNAME
554
- def user_remove_from_group(attribs, dir_info)
555
- attribs[:record_name] = attribs[:record_name] || attribs[:group_name]
556
- attribs[:record_name] = attribs[:record_name] || attribs[:groupname]
557
- attribs[:record_name] = attribs[:record_name] || attribs[:gid]
558
-
559
- attribs[:value] = attribs[:value] || attribs[:user_name]
560
- attribs[:value] = attribs[:value] || attribs[:username]
561
- attribs[:value] = attribs[:value] || attribs[:uid]
562
-
563
- check_critical_attribute( attribs, :record_name, :groupname )
564
- check_critical_attribute( attribs, :value, :username )
565
- attribs = tidy_attribs(attribs)
566
-
567
- command = {action: 'delete', scope: 'Groups', attribute: 'GroupMembership'}
568
- user_attrs = attribs.merge(command)
569
-
570
- dscl( user_attrs, dir_info )
571
- end
572
-
573
349
  # 1st keyword -- /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME apple-keyword "$VALUE"
574
350
  # other keywords -- /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$shortname_USERNAME apple-keyword "$VALUE"
575
- def user_set_keywords
351
+ def user_set_first_keyword
576
352
  end
577
353
 
578
354
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$shortname_USERNAME apple-keyword "$VALUE"
579
- def user_add_keywords
580
- end
581
-
582
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME mobile "$VALUE"
583
- def user_set_mobile_phone
584
- end
585
-
586
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME telephoneNumber "$VALUE"
587
- def user_set_work_phone
588
- end
589
-
590
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME homePhone "$VALUE"
591
- def user_set_home_phone
355
+ def user_append_keyword
592
356
  end
593
357
 
594
358
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME apple-company "$VALUE"
@@ -596,38 +360,17 @@ module OpenDirectoryUtils
596
360
  end
597
361
  alias_method :las_program_info, :user_set_company
598
362
 
599
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME title "$VALUE"
600
- def user_set_title
601
- end
602
-
603
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME departmentNumber "$VALUE"
604
- def user_set_department
605
- end
606
-
607
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME street "$VALUE"
608
- def user_set_street
609
- end
610
- alias_method :las_set_dorm, :user_set_street
611
- alias_method :las_set_housing, :user_set_street
612
-
613
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname l "$VALUE"
614
- def user_set_city
615
- end
616
- alias_method :las_, :user_set_city
617
-
618
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME st "$VALUE"
619
- def user_set_state
620
- end
621
- alias_method :las_cultural_trip, :user_set_state
622
-
623
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME postalCode "$VALUE"
624
- def user_set_postcode
625
- end
626
- alias_method :las_faculty_family, :user_set_postcode
627
-
628
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER c "$VALUE"
629
- def user_set_country
363
+ # first - /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER apple-imhandle "$VALUE"
364
+ # others - /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$USER apple-imhandle "$VALUE"
365
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER apple-imhandle "AIM:created: $CREATE"
366
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$USER apple-imhandle "ICQ:start: $START"
367
+ # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$USER apple-imhandle "MSN:end: $END"
368
+ def user_set_chat
630
369
  end
370
+ alias_method :user_set_chat_channels, :user_set_chat
371
+ alias_method :las_created_date, :user_set_chat
372
+ alias_method :las_start_date, :user_set_chat
373
+ alias_method :las_end_date, :user_set_chat
631
374
 
632
375
  # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME apple-webloguri "$VALUE"
633
376
  def user_set_blog
@@ -646,35 +389,6 @@ module OpenDirectoryUtils
646
389
  end
647
390
  alias_method :las_link_parent_to_student, :user_set_relationships
648
391
 
649
- # first - /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER apple-imhandle "$VALUE"
650
- # others - /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$USER apple-imhandle "$VALUE"
651
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER apple-imhandle "AIM:created: $CREATE"
652
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$USER apple-imhandle "ICQ:start: $START"
653
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$USER apple-imhandle "MSN:end: $END"
654
- def user_set_chat
655
- end
656
- alias_method :user_set_chat_channels, :user_set_chat
657
- alias_method :las_created_date, :user_set_chat
658
- alias_method :las_start_date, :user_set_chat
659
- alias_method :las_end_date, :user_set_chat
660
-
661
-
662
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$shortname_USERNAME labeledURI "$VALUE"
663
- def user_set_homepage
664
- end
665
- alias_method :user_set_webpage, :user_set_homepage
666
- alias_method :las_enrollment_date, :user_set_homepage
667
- alias_method :las_begin_date, :user_set_homepage
668
-
669
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER description "$NAME"
670
- def user_set_comments
671
- end
672
- alias_method :user_set_description, :user_set_comments
673
-
674
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$USER description "$NAME"
675
- def user_comments
676
- end
677
- alias_method :user_description, :user_comments
678
392
 
679
393
  end
680
394
  end
@@ -1,8 +1,9 @@
1
1
  require 'net/ssh'
2
2
  require "open_directory_utils/dscl"
3
3
  require "open_directory_utils/pwpolicy"
4
- require "open_directory_utils/commands_user"
5
4
  require "open_directory_utils/commands_group"
5
+ require "open_directory_utils/commands_user_attribs_od"
6
+ require "open_directory_utils/commands_user_attribs_ldap"
6
7
 
7
8
  module OpenDirectoryUtils
8
9
  class Connection
@@ -11,8 +12,9 @@ module OpenDirectoryUtils
11
12
 
12
13
  include OpenDirectoryUtils::Dscl
13
14
  include OpenDirectoryUtils::Pwpolicy
14
- include OpenDirectoryUtils::CommandsUser
15
15
  include OpenDirectoryUtils::CommandsGroup
16
+ include OpenDirectoryUtils::CommandsUserAttribsOd
17
+ include OpenDirectoryUtils::CommandsUserAttribsLdap
16
18
 
17
19
  # configure connection with ENV_VARS (or parameters)
18
20
  # @params [Hash] - reqiured info includes: srv_hostname:, srv_username: (password: if not using ssh-keys)
@@ -1,5 +1,5 @@
1
1
  module OpenDirectoryUtils
2
2
  module Version
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_directory_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bill Tihen
@@ -89,11 +89,11 @@ files:
89
89
  - lib/open_directory_utils.rb
90
90
  - lib/open_directory_utils/clean_check.rb
91
91
  - lib/open_directory_utils/commands_group.rb
92
- - lib/open_directory_utils/commands_user.rb
92
+ - lib/open_directory_utils/commands_user_attribs_ldap.rb
93
+ - lib/open_directory_utils/commands_user_attribs_od.rb
93
94
  - lib/open_directory_utils/connection.rb
94
95
  - lib/open_directory_utils/dscl.rb
95
96
  - lib/open_directory_utils/pwpolicy.rb
96
- - lib/open_directory_utils/user_command_pattern.rb
97
97
  - lib/open_directory_utils/version.rb
98
98
  - open_directory_utils.gemspec
99
99
  homepage: https://github.com/btihen/open_directory_utils
@@ -1,188 +0,0 @@
1
- module OpenDirectoryUtils
2
- # command pattern
3
- # https://makandracards.com/alexander-m/43748-command-pattern
4
- # https://stackoverflow.com/questions/43535421/command-pattern-in-ruby?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
5
- #
6
- # DSCL
7
- # https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/dscl.1.html
8
- # https://superuser.com/questions/592921/mac-osx-users-vs-dscl-command-to-list-user/621055?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
9
- class Commands
10
- class Error < StandardError; end
11
-
12
- def initialize(params)
13
- end
14
-
15
- def execute
16
- raise NotYetImplemented
17
- end
18
- end
19
-
20
- # # get all usernames -- dscl . -list /Users
21
- # # get all user details -- dscl . -readall /Users
22
- # def user_exists?
23
- # end
24
- class UserGetInfo
25
- # get user record -- dscl . -read /Users/<username>
26
- # get user value -- dscl . -read /Users/<username> <key>
27
- # search od user -- dscl . -search /Users RealName "Andrew Garrett"
28
- # return as xml -- dscl -plist . -search /Users RealName "Andrew Garrett"
29
- def user_get_info
30
- end
31
- end
32
-
33
- # https://images.apple.com/server/docs/Command_Line.pdf
34
- # https://serverfault.com/questions/20702/how-do-i-create-user-accounts-from-the-terminal-in-mac-os-x-10-5?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
35
- # https://superuser.com/questions/1154564/how-to-create-a-user-from-the-macos-command-line
36
- # There are a few steps to create a user account from the command line. The good news is that you're using the right tool, dscl. What you're missing are the separate components that comprise a user account. You have to create these manually.
37
- # sudo dscl . -create /Users/someuser
38
- # sudo dscl . -create /Users/someuser UserShell /bin/bash
39
- # sudo dscl . -create /Users/someuser RealName "Lucius Q. User"
40
- # sudo dscl . -create /Users/someuser UniqueID "1010" #use something not already in use
41
- # sudo dscl . -create /Users/someuser PrimaryGroupID 80
42
- # sudo dscl . -create /Users/someuser NFSHomeDirectory /Users/soemuser
43
- #
44
- # You can then use passwd to change the user's password, or use:
45
- # sudo dscl . -passwd /Users/someuser password
46
-
47
- # You'll also have to create the user's home directory and change ownership so the user can access it. And be sure that the UniqueID is, in fact, unique.
48
- #
49
- # This line will add the user to the administrator's group:
50
- # sudo dscl . -append /Groups/admin GroupMembership someuser
51
- def user_create
52
- end
53
-
54
- # add 1st user -- dscl . create /Groups/ladmins GroupMembership localadmin
55
- # add more users -- dscl . append /Groups/ladmins GroupMembership 2ndlocaladmin
56
- def user_add_to_group
57
- end
58
-
59
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -delete /Groups/$VALUE GroupMembership $UID_USERNAME
60
- def user_remove_from_group
61
- end
62
-
63
- # dscl . -delete /Users/yourUserName
64
- # https://tutorialforlinux.com/2011/09/15/delete-users-and-groups-from-terminal/
65
- def user_delete
66
- end
67
-
68
- # /usr/bin/dscl -plist -u diradmin -P #{adminpw} /LDAPv3/127.0.0.1/ -passwd /Users/#{uid} #{passwd}
69
- def user_set_password
70
- end
71
-
72
- # /usr/bin/dscl /LDAPv3/127.0.0.1 auth #{uid} #{passwd}
73
- def user_test_password
74
- end
75
-
76
- # /usr/bin/pwpolicy -a diradmin -p A-B1g-S3cret -u $UID_USERNAME -setpolicy "isDisabled=0"
77
- def user_enable_login
78
- end
79
-
80
- # /usr/bin/pwpolicy -a diradmin -p A-B1g-S3cret -u $UID_USERNAME -setpolicy "isDisabled=1"
81
- def user_disable_login
82
- end
83
-
84
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME gidnumber "$VALUE"
85
- def user_set_groupnumber
86
- end
87
-
88
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME givenName "$VALUE"
89
- def user_set_first_name
90
- end
91
-
92
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME sn "$VALUE"
93
- def user_set_last_name
94
- end
95
-
96
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME apple-namesuffix "$VALUE"
97
- def user_set_name_suffix
98
- end
99
-
100
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME mail "$VALUE"
101
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME email "$VALUE"
102
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME apple-user-mailattribute "$VALUE"
103
- def user_set_email
104
- end
105
-
106
- # create first keyword
107
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME apple-keyword "$VALUE"
108
- # add a keyword
109
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$UID_USERNAME apple-keyword "$VALUE"
110
- def user_set_keywords
111
- end
112
-
113
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -append /Users/$UID_USERNAME apple-keyword "$VALUE"
114
- def user_add_keywords
115
- end
116
-
117
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME mobile "$VALUE"
118
- def user_set_mobile_phone
119
- end
120
-
121
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME telephoneNumber "$VALUE"
122
- def user_set_work_phone
123
- end
124
-
125
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME homePhone "$VALUE"
126
- def user_set_home_phone
127
- end
128
-
129
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME title "$VALUE"
130
- def user_set_title
131
- end
132
-
133
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME homedirectory "$VALUE"
134
- def user_set_home_directoy
135
- end
136
-
137
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME loginShell "$VALUE"
138
- def user_set_shell
139
- end
140
-
141
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME apple-company "$VALUE"
142
- def user_set_company
143
- end
144
- alias_method :las_program_info, :user_set_company
145
-
146
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME street "$VALUE"
147
- def user_set_street
148
- end
149
- alias_method :las_, :user_set_street
150
-
151
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID l "$VALUE"
152
- def user_set_city
153
- end
154
- alias_method :las_, :user_set_city
155
-
156
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME st "$VALUE"
157
- def user_set_state
158
- end
159
- alias_method :las_cultural_trip, :user_set_state
160
-
161
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME postalCode "$VALUE"
162
- def user_set_postcode
163
- end
164
- alias_method :las_faculty_family, :user_set_postcode
165
-
166
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME apple-webloguri "$VALUE"
167
- def user_set_blog
168
- end
169
- alias_method :las_, :user_set_blog
170
-
171
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME apple-organizationinfo "$VALUE"
172
- def user_organizational_info
173
- end
174
- alias_method :las_link_student_to_parent, :user_organizational_info
175
-
176
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME apple-relationships "$VALUE"
177
- def user_relationships
178
- end
179
- alias_method :las_link_parent_to_student, :user_relationships
180
-
181
- # /usr/bin/dscl -u diradmin -P A-B1g-S3cret /LDAPv3/127.0.0.1/ -create /Users/$UID_USERNAME labeledURI "$VALUE"
182
- def user_set_homepage
183
- end
184
- alias_method :las_enrollment_date, :user_set_homepage
185
- alias_method :las_start_date, :user_set_homepage
186
-
187
- end
188
- end