source: branches/guitools-1.0/smbusers/smbusers.VRX

Last change on this file was 926, checked in by Herwig Bauernfeind, 9 years ago

GUI-Tools: SMBUsers: Fix unknown smb.conf options break policy mods

File size: 143.5 KB
RevLine 
[287]1/*:VRX Main
2*/
3/* Main
4*/
5Main:
6/* Process the arguments.
7 Get the parent window.
8*/
9 parse source . calledAs .
10 parent = ""
11 argCount = arg()
12 argOff = 0
13 if( calledAs \= "COMMAND" )then do
14 if argCount >= 1 then do
15 parent = arg(1)
16 argCount = argCount - 1
17 argOff = 1
18 end
19 end; else do
20 call VROptions 'ImplicitNames'
21 call VROptions 'NoEchoQuit'
22 end
23 InitArgs.0 = argCount
24 if( argCount > 0 )then do i = 1 to argCount
25 InitArgs.i = arg( i + argOff )
26 end
27 drop calledAs argCount argOff
28
29/* Load the windows
30*/
31 call VRInit
32 parse source . . spec
33 _VREPrimaryWindowPath = ,
34 VRParseFileName( spec, "dpn" ) || ".VRW"
35 _VREPrimaryWindow = ,
36 VRLoad( parent, _VREPrimaryWindowPath )
37 drop parent spec
38 if( _VREPrimaryWindow == "" )then do
39 call VRMessage "", "Cannot load window:" VRError(), ,
40 "Error!"
41 _VREReturnValue = 32000
42 signal _VRELeaveMain
43 end
44
45/* Process events
46*/
47 call Init
48 signal on halt
49 do while( \ VRGet( _VREPrimaryWindow, "Shutdown" ) )
50 _VREEvent = VREvent()
51 interpret _VREEvent
52 end
53_VREHalt:
54 _VREReturnValue = Fini()
55 call VRDestroy _VREPrimaryWindow
56_VRELeaveMain:
57 call VRFini
58exit _VREReturnValue
59
60VRLoadSecondary:
61 __vrlsWait = abbrev( 'WAIT', translate(arg(2)), 1 )
62 if __vrlsWait then do
63 call VRFlush
64 end
65 __vrlsHWnd = VRLoad( VRWindow(), VRWindowPath(), arg(1) )
66 if __vrlsHWnd = '' then signal __vrlsDone
67 if __vrlsWait \= 1 then signal __vrlsDone
68 call VRSet __vrlsHWnd, 'WindowMode', 'Modal'
69 __vrlsTmp = __vrlsWindows.0
70 if( DataType(__vrlsTmp) \= 'NUM' ) then do
71 __vrlsTmp = 1
72 end
73 else do
74 __vrlsTmp = __vrlsTmp + 1
75 end
76 __vrlsWindows.__vrlsTmp = VRWindow( __vrlsHWnd )
77 __vrlsWindows.0 = __vrlsTmp
78 do while( VRIsValidObject( VRWindow() ) = 1 )
79 __vrlsEvent = VREvent()
80 interpret __vrlsEvent
81 end
82 __vrlsTmp = __vrlsWindows.0
83 __vrlsWindows.0 = __vrlsTmp - 1
84 call VRWindow __vrlsWindows.__vrlsTmp
85 __vrlsHWnd = ''
86__vrlsDone:
87return __vrlsHWnd
88
89/*:VRX __VXREXX____APPENDS__
90*/
91__VXREXX____APPENDS__:
92/*
[451]93#append U:\Develop\Samba\guitools-2.0\shared\nlv.vrs
[287]94#append U:\Develop\Samba\guitools-1.0\shared\inittempDir.vrs
95#append U:\Develop\Samba\guitools-1.0\shared\sambainit.vrs
96#append U:\Develop\Samba\guitools-1.0\shared\swat.vrs
97*/
98return
99/*:VRX _ColumnShow
100*/
101_ColumnShow:
102 userdata = VRGet(VRInfo("OBject"),"Userdata")
103 parse var userdata Container '|' fieldh '|' VisStatus
104 ok = VRMethod(Container,"SetFieldAttr", fieldh, "Visible", \VisStatus )
105return
106
107/*:VRX _ColumnsMenu
108*/
109_ColumnsMenu:
110 Container = arg(1)
111 ok = VRMethod(Container, "GetFieldList", "Fields." )
112
113 do I = 1 to 17
114 if I <= fields.0 then do
115/* say "Columns_"||right("0"||I,2)' 'VRMethod(Container, "GetFieldAttr", fields.I, "Title" ) */
116 ok = VRset("Columns_"||right("0"||I,2), "Visible", 1)
117 ok = VRset("Columns_"||right("0"||I,2), "Caption", VRMethod(Container, "GetFieldAttr", fields.I, "Title" ))
118 ok = VRset("Columns_"||right("0"||I,2), "Checked", VRMethod(Container, "GetFieldAttr", fields.I, "Visible" ))
119 ok = VRset("Columns_"||right("0"||I,2), "Userdata", Container'|'fields.I'|'VRMethod(Container, "GetFieldAttr", fields.I, "Visible" ))
120 end
121 else ok = VRset("Columns_"||right("0"||I,2), "Visible", 0)
122 end
123 ok = VRMethod( "Columns", "Popup", , , "", "" )
124return
125
126/*:VRX _ContainerPopulate
127*/
128_ContainerPopulate:
129 IF options.!debug == 1 THEN say '_ContainerPopulate() started'
130 ok = VRSet("CN_Users","Painting", 0 )
131 ok = VRMethod( "CN_Users", "GetRecordList", "Selected", "SelRH." )
132 if SelRH.0 <> 0 then SelNr = VRMethod("CN_Users", "GetFieldData", SelRH.1, NrFH)
133 else SelNr = 0
134 IF options.!debug == 1 then say ' Selected User Nr = 'SelNr
135 ok = VRMethod("CN_Users","RemoveRecord", "ALL")
136 drop RH.
137
138 do i = 1 to username.0
139 RH.i = VRMethod("CN_Users", "AddRecord", , , username.I , "#29" )
140
141 ok = VRMethod("CN_Users","SetFieldData", RH.i, NrFH, I, UsernameFH, username.I, UIDFH, Uid.I, GIDFH, GID.I, GECOSFH, GECOS.I, HomeFH, _PathStrOS2(Home.I), ShellFH, Shell.I)
142 ok = VRMethod("CN_Users","SetFieldData", RH.i, xpwFH, password.i,xlcFH,LoginClass.I,xcpwFH, pwchange.I,xDeactFH, deact.I )
143 /* smbpasswd fields */
144 ok = VRMethod("CN_Users","SetFieldData", RH.i, FLagsFH, flags.I, LMHashFH, LMHash.I,NTHashFH, NTHash.I, LCTFH, LCT.I)
145 /* smbusermap field */
146 ok = VRMethod( "CN_Users", "SetFieldData", RH.i, MapToFH, MapTo.I)
147 /* private field */
148 ok = VRMethod( "CN_Users", "SetFieldData", RH.i, StatusFH, Status.I)
149
150 if (flags.i = "" & settings.!SmbOnly) then do
151 ok = VRMethod( "CN_Users", "SetRecordAttr", RH.i, "Visible", 0)
152 end
153 end
154 RH.0 = username.0
155 if SelNr <= I & SelNr <> 0 & Username.0 > 0 then do
156 MSelNr = Min(SelNr, Username.0)
157 ok = VRMethod("CN_Users", "SetRecordAttr", RH.MSelNr, "Selected", 1)
158 end
159 ok = VRMethod("CN_users", "Arrange")
160 ok = VRSet("CN_Users","Painting", 1 )
161 IF options.!debug == 1 THEN say '_ContainerPopulate() done'
162return
163
164/*:VRX _ContainersInit
165*/
166_ContainersInit:
167 /* User */
168 NrFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(130) )
169 FlagsFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(131) ) /* smbpasswd */
170 UsernameFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(132) ) /* master.passwd and smbpasswd */
171 xpwFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(133) ) /* master.passwd, not used */
172 UIDFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(134) ) /* master.passwd and smbpasswd */
173 GeCOSFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(135) ) /* master.passwd */
174 GIDFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(136) ) /* master.passwd */
175 xlcFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(137) ) /* master.passwd, not used */
176 xcpwFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(138) ) /* master.passwd, not used */
177 xDeactFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(139) ) /* master.passwd, not used */
178 HomeFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(140) ) /* master.passwd */
179 ShellFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(141) ) /* master.passwd, not used */
180 LMHashFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(142) ) /* smbpasswd */
181 NTHashFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(143) ) /* smbpasswd */
182 LCTFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(144) ) /* smbpasswd */
183 MapToFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(145) ) /* smbusermap */
184 StatusFH = VRMethod( "CN_Users", "AddField", "String", NLVGetMessage(146) )
185
186/* ok = VRSet("CN_Users","LastSplitfield", MapToFH)
187 ok = VRSet("CN_Users","SplitBarLeft", VRGet("CN_Users","Width")*0.90) */
188
189 ok = VRMethod("CN_Users","SetfieldAttr",NrFH, "ReadOnly", 1, "Justification", "Right")
190 ok = VRMethod("CN_Users","SetfieldAttr",FlagsFH, "ReadOnly", 1)
191 ok = VRMethod("CN_Users","SetfieldAttr",UserNameFH,"ReadOnly", 1)
192 ok = VRMethod("CN_Users","SetfieldAttr",GIDFH, "Justification", "Right" )
193 ok = VRMethod("CN_Users","SetfieldAttr",UIDFH, "ReadOnly", 1, "Justification", "Right" )
194 ok = VRMethod("CN_Users","SetfieldAttr",LCTFH, "ReadOnly", 1)
195 ok = VRMethod("CN_Users","SetfieldAttr",LMHashFH, "ReadOnly", 1)
196 ok = VRMethod("CN_Users","SetfieldAttr",NTHashFH, "ReadOnly", 1)
197
198 ok = VRMethod("CN_Users","SetfieldAttr",xpwFH, "Visible", 0)
199 ok = VRMethod("CN_Users","SetfieldAttr",xlcFH, "Visible", 0)
200 ok = VRMethod("CN_Users","SetfieldAttr",xcpwFH, "Visible", 0)
201 ok = VRMethod("CN_Users","SetfieldAttr",xDeactFH, "Visible", 0)
202 ok = VRMethod("CN_Users","SetfieldAttr",LMHashFH, "Visible", 0)
203 ok = VRMethod("CN_Users","SetfieldAttr",NTHashFH, "Visible", 0)
204 ok = VRMethod("CN_Users","SetfieldAttr",ShellFH, "Visible", 0)
205 ok = VRMethod("CN_Users","SetfieldAttr",LCTFH, "Visible", 0)
206
207 if samba.!smbusermap = "" then do
208 ok = VRMethod("CN_Users","SetfieldAttr",MapToFH, "Visible", 0)
209 ok = VRMethod("CN_Users","SetfieldAttr",MapToFH, "ReadOnly", 1)
210 end
211
212
213 /* master.passwd syntax:
214 Username:password:UID:GID:Login-Class:Change pw in x seconds:Deactivate in x seconds:GECOS (Fullname):HOME:SHELL */
215
216 /* smbpasswd syntax:
217 Username:UID:Lanman Password Hash:NT Password Hash:flags:LCT (Last Change Time) */
218
219 GNrFH = VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(130) ) /* private */
220 GroupNameFH = VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(150) ) /* group */
221 NTGroupNameFH= VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(151) ) /* net group */
222 GpasswdFH = VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(152) ) /* group, not used */
223 GGIDFH = VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(153) ) /* group */
224 GUsersFH = VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(154) ) /* group */
225 SIDFH = VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(155) ) /* net group */
226 RIDFH = VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(156) ) /* net group */
227 NTCommentFH = VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(157) ) /* net group */
228 NTGroupTypeFH= VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(158) ) /* net group */
229 GStatusFH = VRMethod( "CN_Groups", "AddField", "String", NLVGetMessage(159) ) /* private */
230
231 ok = VRMethod("CN_Groups","SetfieldAttr",GNrFH,"ReadOnly", 1, "Justification", "Right")
232 ok = VRMethod("CN_Groups","SetfieldAttr",GroupnameFH,"ReadOnly", 1)
233 ok = VRMethod("CN_Groups","SetfieldAttr",NTGroupnameFH,"ReadOnly", 1)
234 ok = VRMethod("CN_Groups","SetfieldAttr",NTCommentFH,"ReadOnly", 1)
235 ok = VRMethod("CN_Groups","SetfieldAttr",NTGroupTypeFH,"ReadOnly", 1)
236 ok = VRMethod("CN_Groups","SetfieldAttr",SIDFH,"ReadOnly", 1)
237 ok = VRMethod("CN_Groups","SetfieldAttr",SIDFH,"Visible", 0)
238 ok = VRMethod("CN_Groups","SetfieldAttr",RIDFH,"ReadOnly", 1)
239 ok = VRMethod("CN_Groups","SetfieldAttr",GGIDFH,"ReadOnly", 1, "Justification", "Right")
240 ok = VRMethod("CN_Groups","SetfieldAttr",GPasswdFH, "Visible", 0)
241 ok = VRMethod("CN_Groups","SetfieldAttr",GPasswdFH, "ReadOnly", 1)
242return
243
244/*:VRX _ContGroupsPopulate
245*/
246_ContGroupsPopulate:
247 IF options.!debug == 1 then say '_ContGroupsPopulate() started.'
248 ok = VRSet("CN_Groups","Painting", 0 )
249 ok = VRMethod( "CN_Groups", "GetRecordList", "Selected", "SelGRH." )
250 if SelGRH.0 <> 0 then SelGNr = VRMethod("CN_Users", "GetFieldData", SelGRH.1, GNrFH)
251 else SelGNr = 0
252 IF options.!debug == 1 then say ' Selected Group Nr = 'SelGNr
253 ok = VRMethod("CN_Groups","RemoveRecord", "ALL")
254 drop GRH.
255
256 do i = 1 to Groupname.0
257 GRH.i = VRMethod("CN_Groups", "AddRecord", , , Groupname.I , "#50" )
258 ok = VRMethod("CN_Groups","SetFieldData", GRH.i, GNrFH, I, GroupnameFH, Groupname.I, GGIDFH, GGid.I, GUsersFH, Gusers.I )
259 /* private field */
260 ok = VRMethod( "CN_Groups", "SetFieldData", GRH.i, GpasswdFH, Gpasswd.I, NTGroupNameFH, NTGroupName.I, RIDFH, RID.I, SIDFH, SID.I,NTCommentFH, NTComment.I, NTGroupTypeFH, NTGroupType.I,GStatusFH, GStatus.I)
261 if (RID.i = "" & settings.!SmbGroupsOnly) then do
262 ok = VRMethod( "CN_Groups", "SetRecordAttr", GRH.i, "Visible", 0)
263 end
264 end
265 GRH.0 = Groupname.0
266 if SelGNr <= I & SelGNr <> 0 & Groupname.0 > 0 then ok = VRMethod("CN_Groups", "SetRecordAttr", GRH.SelGNr, "Selected", 1)
267 ok = VRMethod("CN_Groups", "Arrange")
268 ok = VRSet("CN_Groups","Painting", 1 )
269 IF options.!debug == 1 then say '_ContGroupsPopulate() done.'
270return
271
272/*:VRX _DirDialog
273*/
274_DirDialog: procedure
275 Title = arg(1)
276 InitDir = arg(2)
277 RC = RxFuncQuery("DRCtrlPickDirectory")
278 if RC = 0 then do /* use DrCtrl if available */
279 MyDir=DRCtrlPickDirectory(InitDir, Title)
280 end
281 else do
282 MyDir = VRFileDialog(VRWindow,Title, 'o', InitDir||'\dummy')
283 if MyDir <> '' then MyDir = strip(filespec('D',MyDir)||Filespec('P',MyDir),'T','\')
284 end
285return MyDir
286/*:VRX _GetNextGID
287*/
288_GetNextGID: procedure expose MinGGID GGID.
289 say "_GetNextGID() started"
290 do nextGID = minGGID to 65535 by 1
291 do i=1 to GGID.0 while GGID.i <> nextGID
292 end
293 if GGID.i <> nextGID then leave
294 end
295 say "_GetNextGID() done, returning "nextGID
296return nextGID
297/*:VRX _GetNextUID
298*/
299_GetNextUID: procedure expose MinUID UID.
300 nextusername = translate(arg(1))
301 say "_GetNextUID() started"
302 do nextUID = minUID to 65535 by 1
303 do i=1 to UID.0 while UID.i <> nextUID
304 end
305 if uid.i <> nextUID then leave
306 end
307 if translate(nextusername) = "ROOT" then NextUID = 0
308 if translate(nextusername) = "GUEST" then NextUID = 65534
309 if translate(nextusername) = "NOBODY" then NextUID = 65533
310 say "_GetNextUID() done, returning "nextUID
311return nextUID
312/*:VRX _GroupRead
313*/
314_GroupRead:
315 IF options.!debug == 1 THEN say '_GroupRead() started'
316 /* Read complete group file */
317 I = 0
318 do while lines(samba.!group) <> 0
319 groupline = strip(linein(samba.!group))
320
321 /* Skip comments */
322 if left(groupline,1) = "#" then iterate
323 if left(groupline,1) = ";" then iterate
324
325 /* parse fields into stem variables */
326 I = I + 1
327
328 parse var groupline groupname.I':'Gpasswd.I':'GGid.I':'Gusers.I
329
330 GStatus.I =""
331 if pos(',,',GUsers.I) > 0 then GStatus.I='DOUBLE COMMA FOUND'
332 if right(GUsers.I,1) <> ',' & Gusers.I <> "" then GStatus.I='MISSING TRAILING COMMA'
333 do J = 1 to I - 1
334 if translate(groupname.J) = translate(groupname.I) then do
335 gstatus.I = "DUPLICATE"
336 leave
337 end
338 end
339 blGUsers = translate(translate(Gusers.I,' ',','))
340 do J = 1 to Username.0
341 UPos = wordpos(translate(Username.J),blGusers)
342 if Upos > 0 then blGUsers = delword(BlGusers,UPos,1)
343 if GID.J = GGID.I & UPos = 0 then do
344 Gusers.I = strip(Gusers.I||Username.J,,',')','
345 GStatus.I = 'MISSING USERS ADDED'
346 end
347 end
348 if strip(BlGusers) <> "" then gstatus.I = "NONEXISTENT USER"
349 end
350 ok = stream(samba.!group,'c','close')
351
[926]352 NTGroupname. = "(klibc group)"
[287]353 NTComment. = ""
354 NTGroupType. = ""
355 RID. = ""
356 SID. = ""
357 /* set "stem roots" properly */
358 groupname.0 = I
359 gpasswd.0 = I
360 ggid.0 = I
361 gusers.0 = I
362 NTGroupname.0 = I
363 NTComment.0 = I
364 NTGroupType.0 = I
365 SID.0 = I
366 RID.0 = I
367
368 /* our private stem */
369 gstatus.0 = I
370 IF options.!debug == 1 THEN say '_GroupRead() done, read 'groupname.0' kLIBC groups'
371return
372
373/*:VRX _GroupRecWriteBackToStems
374*/
375_GroupRecWriteBackToStems:
[569]376 IF options.!debug == 1 THEN say '_GroupRecWriteBackToStems() started'
[287]377 Cur = VRMethod("CN_Groups","GetFieldData", GRH, GNrFH)
378 Groupname.Cur = VRMethod("CN_Groups","GetFieldData", GRH, GroupnameFH)
379 GGID.Cur = VRMethod("CN_Groups","GetFieldData", GRH, GGIDFH)
380 GUsers.Cur = VRMethod("CN_Groups","GetFieldData", GRH, GusersFH)
381 if Gusers.Cur = "," then Gusers.Cur = ""
[569]382 IF options.!debug == 1 THEN say '_GroupRecWriteBackToStems() done'
[287]383return
384
385/*:VRX _GroupWrite
386*/
387_GroupWrite:
388 IF options.!debug == 1 THEN say '_GroupWrite() started'
389 newgroup = TempDir'group'
390 ok = SysFileDelete(newgroup)
391 call lineout newgroup, '# Created by smbusers Version 'word(VRGet("Main", "Hinttext"),2)
392 call lineout newgroup, '# syntax:'
393 call lineout newgroup, '# groupname:password:GID:user[,user,...,]'
394 do I = 1 to groupname.0
[569]395 /* say "GUsers."I"="Gusers.I */
[287]396 if settings.!FixErrors then do
397 if Gusers.I = "," then Gusers.I = ""
398 if pos(',,',Gusers.I) > 0 then do
399 blGUsers = translate(Gusers.I,' ',',')
400 Gusers.I = ""
401 do ii = 1 to words(blGusers)
402 Gusers.I = GUsers.I||word(blGusers,II)||','
403 end
404 end
405 if Gusers.I <> "" & right(Gusers.I,1) <> ',' then GUsers.I = Gusers.I||','
406 end
407 NewUsers = ""
408 select
409 when GStatus.I = "DUPLICATE" & settings.!FixErrors then iterate
410 when GStatus.I = "NONEXISTENT USER" & settings.!FixErrors then do
411 blGUsers = translate(translate(Gusers.I,' ',','))
412 do J = 1 to Username.0
413 UPos = wordpos(translate(Username.J),blGusers)
414 if Upos > 0 then NewUsers = NewUsers||UserName.J','
415 end
416 call lineout newgroup, groupname.I':'Gpasswd.I':'GGid.I':'strip(NewUsers,'L',',')
417 end
418 otherwise call lineout newgroup, groupname.I':'Gpasswd.I':'GGid.I':'strip(GUsers.I,'L',',')
419 end
420 end
421 ok = stream(newgroup,'c','close')
422 ok = VRCopyFile( samba.!group, samba.!group'.bak' )
423 ok = VRCopyFile( newgroup, samba.!group )
[408]424 ok = SysFileDelete(newgroup)
[287]425 IF options.!debug == 1 THEN say '_GroupWrite() done'
426return
427
428/*:VRX _GUIINit
429*/
430_GUIINit:
431 IF options.!debug == 1 THEN say '_GUIInit() started'
432 ok = VRset("Main","Width",11000)
433 call Paper_Init
434
435 if datatype(Top) = 'NUM' then do
436 ok = VRset("Main","Top",Top)
437 ok = VRset("Main","Left",Left)
438 ok = VRset("Main","Width",max(Width,11000))
439 ok = VRset("Main","Height",Height)
440 end
441 ok = VRSet("Main","Font", Font_Main)
442 ok = VRSet("Main","Statusfont", Font_Status)
443 ok = VRSet("Page_1","Font", Font_Page_1)
444 ok = VRSet("Page_2","Font", Font_Page_2)
445 ok = VRSet("Page_4","Font", Font_Page_3)
446 ok = VRSet("Page_3","Font", Font_Page_4)
447 ok = VRSet("Page_5","Font", Font_Page_5)
448 Buttonwidth = VRMethod( "Screen", "PixelsToTwips", 32 )
449
[577]450 ok = VRSet("CB_SmbOnly", "set", settings.!SmbOnly )
451 ok = VRSet("CB_SmbGroupsOnly", "set", settings.!SmbGroupsOnly )
452 ok = VRSet("CB_SyncFullName", "set", settings.!SyncFullName )
453 ok = VRSet("CB_SyncPrimGID", "set", settings.!SyncPrimGID )
454 ok = VRSet("CB_WriteMasterPwd", "set", settings.!WriteMasterPwd )
[287]455
456 call _INILayoutRead "CN_Users"
457 call _INILayoutRead "CN_Groups"
458
[302]459 if _ChkTempFreeSpace() < 262144 then do
460 Msg.Type = "W"
461 Msg.Text = NLVGetMessage(180, TempDir)
462 call _ShowMsg
463 end
464
[287]465 ok = VRSet("Main", "Visible", 1)
466 IF options.!debug == 1 THEN say '_GUIInit() done'
467return
468
469/*:VRX _INILayoutRead
470*/
471_INILayoutRead:
472 Container = arg(1)
473 ok = VRMethod(Container, "GetFieldList", "Fields." )
474 Layout = VRGetIni( "Layout", Container, OurINI )
475 if Layout = "" then return
476 do I = 1 to Fields.0
477 ok = VRMethod(Container, "SetFieldAttr", fields.I,"Visible", substr(Layout,I,1))
478 end
479return
480
481/*:VRX _INILayoutWrite
482*/
483_INILayoutWrite:
484 Container = arg(1)
485 ok = VRMethod(Container, "GetFieldList", "Fields." )
486 Layout = ""
487 do I = 1 to fields.0
488 Layout = Layout||VRMethod(Container, "GetFieldAttr", fields.I, "Visible" )
489 end
490 ok = VRSetIni( "Layout", Container , Layout, OurINI, 'NoClose' )
491return
492
493/*:VRX _INIRead
494*/
495_INIRead:
496 IF options.!debug == 1 THEN say '_INIRead() started'
497 OurINI = strip(VRParseFileName(VRget("Application","Program"),'DP')'\SMBUSERS.INI',,'\')
498 ok = SysFileTree(OurINI, INIFound.,'FO')
499 if INIFound.0 = 1 then OurINI = VRParseFileName(INIFound.1,'DPNE')
500 IF options.!debug == 1 THEN say 'OurINI = "'OurINI'"'
501
502 Top = VRGetIni( "Pos", "Top", OurINI , 'NoClose')
503 Left = VRGetIni( "Pos", "Left", OurINI , 'NoClose')
504 Width = VRGetIni( "Pos", "Width", OurINI , 'NoClose')
505 Height= VRGetIni( "Pos", "Height", OurINI , 'NoClose')
506
507 Font_Page_1 = VRGetIni( "Fonts", "Page_1", OurINI , 'NoClose' )
508 Font_Page_2 = VRGetIni( "Fonts", "Page_2", OurINI , 'NoClose' )
509 Font_Page_3 = VRGetIni( "Fonts", "Page_4", OurINI , 'NoClose' )
510 Font_Page_4 = VRGetIni( "Fonts", "Page_3", OurINI , 'NoClose' )
511 Font_Page_5 = VRGetIni( "Fonts", "Page_5", OurINI , 'NoClose' )
512 Font_Main = VRGetIni( "Fonts", "Main", OurINI , 'NoClose' )
513 Font_Status = VRGetIni( "Fonts", "Statusfont", OurINI , 'NoClose' )
514
515 if Font_Page_1 = "" then Font_Page_1 = "8.Helv"
516 if Font_Page_2 = "" then Font_Page_2 = "8.Helv"
517 if Font_Page_3 = "" then Font_Page_3 = "8.Helv"
518 if Font_Page_4 = "" then Font_Page_4 = "8.Helv"
519 if Font_Page_5 = "" then Font_Page_5 = "8.Helv"
520 if Font_Main = "" then Font_Main = "8.Helv"
521 if Font_Status = "" then Font_Status = "8.Helv"
522
523 settings.!SmbOnly = VRGetIni( "Settings", "SmbOnly", OurINI)
524 if settings.!SmbOnly = "" then settings.!SmbOnly = 0
525
526 settings.!SmbGroupsOnly = VRGetIni( "Settings", "SmbGroupsOnly", OurINI)
527 if settings.!SmbGroupsOnly = "" then settings.!SmbGroupsOnly = 0
528
529 settings.!FixErrors = VRGetIni( "Settings", "FixErrors", OurINI)
530 if settings.!FixErrors = "" then settings.!FixErrors = 1
531
532 settings.!SyncFullName = VRGetIni( "Settings", "SyncFullName", OurINI)
533 if settings.!SyncFullName = "" then settings.!SyncFullName = 1
534
535 settings.!SyncPrimGID = VRGetIni( "Settings", "SyncPrimGID", OurINI)
536 if settings.!SyncPrimGID = "" then settings.!SyncPrimGID = 0
537
[569]538 settings.!WriteMasterPwd = VRGetIni( "Settings", "WriteMasterPwd", OurINI)
[926]539 if settings.!WriteMasterPwd = "" then settings.!WriteMasterPwd = 1
[569]540
[287]541 options.!debug = VRGetIni( "Options", "Debug", OurINI)
542 if options.!debug = "" then options.!debug = 0
543
544 ok = VRSet("CB_Debug","set",options.!Debug)
545 if options.!Debug then ok = VRREdirectStdIO("ON")
546 else ok = VRREdirectStdIO("OFF")
547
548 smbdoutput = 'smbd.out'
549 sambaver = ''
550
551 MinUID = 100
552 MinGGID = 3000
553 msg = ''
554 Credentials. = ''
555
556 IF options.!debug == 1 THEN say '_INIRead() done'
557return
558
559/*:VRX _INIWrite
560*/
561_INIWrite:
562 say 'start _INIWrite()'
563 ok = VRSetIni( "Pos", "Top", VRGet("Main","Top"), OurINI, 'NoClose' )
564 ok = VRSetIni( "Pos", "Left", VRGet("Main","Left"), OurINI, 'NoClose' )
565 ok = VRSetIni( "Pos", "Width", VRGet("Main","Width"), OurINI, 'NoClose' )
566 ok = VRSetIni( "Pos", "Height", VRGet("Main","Height"), OurINI, 'NoClose' )
567 ok = VRSetIni( "Settings", "SmbOnly", settings.!SmbOnly, OurINI, 'NoClose' )
568 ok = VRSetIni( "Settings", "SmbGroupsOnly", settings.!SmbGroupsOnly, OurINI, 'NoClose' )
569 ok = VRSetIni( "Settings", "FixErrors", settings.!FixErrors, OurINI, 'NoClose' )
570 ok = VRSetIni( "Settings", "SyncFullName", settings.!SyncFullName, OurINI, 'NoClose' )
571 ok = VRSetIni( "Settings", "SyncPrimGID" , settings.!SyncPrimGID , OurINI, 'NoClose' )
[569]572 ok = VRSetIni( "Settings", "WriteMasterPwd",settings.!WriteMasterPwd,OurINI, 'NoClose' )
573
[287]574 ok = VRSetIni( "Options", "Debug", options.!debug, OurINI, 'NoClose' )
575
576 if VRget("CN_Users", "Font") <> "<default>" then ok = VRset("Page_1", "Font", VRget("CN_Users", "Font"))
577 if VRget("CN_Groups", "Font") <> "<default>" then ok = VRset("Page_2", "Font", VRget("CN_Groups", "Font"))
578
579 call _INILayoutWrite "CN_Users"
580 call _INILayoutWrite "CN_Groups"
581
582 ok = VRSetIni( "Fonts", "Page_1", VRGet("Page_1","Font"), OurINI, 'NoClose' )
583 ok = VRSetIni( "Fonts", "Page_2", VRGet("Page_2","Font"), OurINI, 'NoClose' )
584 ok = VRSetIni( "Fonts", "Page_4", VRGet("Page_4","Font"), OurINI, 'NoClose' )
585 ok = VRSetIni( "Fonts", "Page_3", VRGet("Page_3","Font"), OurINI, 'NoClose' )
586 ok = VRSetIni( "Fonts", "Page_5", VRGet("Page_5","Font"), OurINI, 'NoClose' )
587 ok = VRSetIni( "Fonts", "Statusfont", VRGet("Main","Statusfont"), OurINI, 'NoClose' )
588 ok = VRSetIni( "Fonts", "Main", VRGet("Main","Font"), OurINI )
589 say 'done _INIWrite()'
590return
591
592/*:VRX _kLIBCGroupAdd
593*/
594_kLIBCGroupAdd:
595 NewGroupName = arg(1)
596 NewGroupGGID = arg(2)
597
598 nx = Groupname.0 + 1
599 Groupname.0 = nx
600 groupname.nx = NewGroupName
601 Gpasswd.nx ="*"
602 GGid.nx = NewGroupGGID
603 Gusers.nx = ""
604 NTGroupname.nx = ""
605 NTComment.nx = ""
606 RID.nx = ""
607 gstatus.nx = ""
608return
609
610/*:VRX _LoadotherFuncs
611*/
612_LoadotherFuncs:
613 IF options.!debug == 1 THEN say "_LoadotherFuncs() started"
614 ok = VRRedirectStdIO("ON")
615 /* ELSE ok = VRRedirectStdIO("OFF") */
616
617 /* what REXX script would be complete without this... */
618 call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
619 call SysLoadFuncs
620
621 call rxfuncadd 'IniLoadFuncs', 'REXXINI', 'IniLoadFuncs'
622 call IniLoadFuncs
623
[451]624 call RxFuncAdd 'PRLoadFuncs', 'PR1UTIL', 'PRLoadFuncs'
625 call PRLoadFuncs
626
[287]627 /* Deal with DRCtrlxxx */
628 RC = RxFuncQuery("DRCtrlPickDirectory")
629 if RC = 1 then do /* DRCtrlXXX not already registered */
630 /* Load DRCtrl functions */
631 ok = RxFuncAdd('DRCtrlLoadFuncs', 'drctl017', 'DRCtrlLoadFuncs')
632 if ok = 0 then CALL DRCtrlLoadFuncs
633 end
634
635 IF options.!debug == 1 THEN say "_LoadotherFuncs() done"
636return
637
638/*:VRX _Login
639*/
640_Login:
641 IF options.!debug == 1 THEN say "_Login() started"
642 if Credentials.!username <> "" then do
643 if \_UserIsValid(Credentials.!username) then do
644 Msg.Type ="E"
645 Msg.Title= VRget("Main","Caption")
646 Msg.Text = NLVGetMessage(111, Credentials.!username )
647 call _ShowMsg
[304]648 Credentials.!username = "root"
[287]649 Credentials.!password = ""
650 end
651 end
652 LoginStatus = ""
653
654EnterCredentials:
[333]655 if Credentials.!username = "" | Credentials.!password = "" then window = VRLoadSecondary( "SW_LOGIN", "W" )
[287]656
657 if pos("4OS2", value("COMSPEC",,"OS2ENVIRONMENT")) = 0
658 then UserCred = '--user='Credentials.!username'%'Credentials.!password
659 else UserCred = '--user='Credentials.!username'%%'Credentials.!password
660
661 /* Lets see if the credentials are good */
662 ok = VRSet("Main", 'Pointer', 'Wait' )
663 say ' 'samba.!netexe' rpc user 'DebugLevel' 'UserCred' 1>'samba.!msg
664 address cmd samba.!netexe' rpc user 'DebugLevel' 'UserCred' 1>'samba.!msg
665 ok = VRSet("Main", 'Pointer', '<default>' )
666 loginLine = linein(samba.!msg)
667 ok = stream(samba.!msg,'c','close')
668
669 /* If did not get a valid user back i.e. the first entry of the list, login was not successful */
670 if \_UserIsValid(strip(loginLine)) then do
671 Msg.Title = NLVGetMessage(31)': 'Credentials.!username'@'copies('*',length(Credentials.!password))
672 Msg.Text = SysGetMessage(65)
673 Msg.Type = "E"
674 call _ShowMsg
675 Credentials.!username = ""
676 Credentials.!password = ""
677 IF options.!debug == 1 THEN say '_Login() failed, credentials used were "'UserCred'"'
678 signal EnterCredentials
679 end
680
681 IF options.!debug == 1 THEN say '_Login() succeeded, credentials used are "'UserCred'"'
682return
683
684/*:VRX _MasterpasswdRead
685*/
686_MasterpasswdRead:
687 IF options.!debug == 1 THEN say '_MasterpasswdRead() started'
688 /* Read complete master.passwd */
689 I = 0
690
691 do until lines(samba.!masterpasswd) = 0
692 userline = strip(linein(samba.!masterpasswd))
693
694 /* Skip comments */
695 if left(userline,1) = "#" then iterate
696 if left(userline,1) = ";" then iterate
697
698 /* parse fields into stem variables */
699 I = I + 1
700 parse var userline username.I':'password.I':'uid.I':'gid.I':'LoginClass.I':'pwchange.I':'deact.I':'gecos.I':'home.I':'shell.I
701
702 Status.I =""
703 do J = 1 to I - 1
704 if translate(Username.J) = translate(Username.I) then do
705 status.I = "DUPLICATE"
706 leave
707 end
708 end
709 end
710 ok = stream(samba.!masterpasswd,'c','close')
711 drop userline
712
713 /* set "stem roots" properly */
714 username.0 = I
715 password.0 = I
716 uid.0 = I
717 gid.0 = I
718 loginclass.0= I
719 pwchange.0 = I
720 deact.0 = I
721 gecos.0 = I
722 home.0 = I
723 shell.0 = I
724
725 /* also smbpasswd stems */
726 lmhash. = ''
727 nthash. = ''
728 flags. = ''
729 lct. = ''
730 lmhash.0 = I
731 nthash.0 = I
732 flags.0 = I
733 lct.0 = I
734
735 /* smbusermap stem */
736 MapTo. = ''
737 MapTo.0 = I
738
739 /* our private stem */
740 status.0 = I
741 IF options.!debug == 1 THEN say '_MasterpasswdRead() done, read 'username.0' users'
742return
743
744/*:VRX _MasterpasswdWrite
745*/
746_MasterpasswdWrite:
747 IF options.!debug == 1 THEN say "_MasterpasswdWrite() started"
748 newmasterpasswd = TempDir'master.passwd'
749 ok = SysFileDelete(newmasterpasswd)
750 call lineout newmasterpasswd, '# Created by smbusers Version 'word(VRGet("Main", "Hinttext"),2)
751 call lineout newmasterpasswd, '# syntax:'
752 call lineout newmasterpasswd, '# username:passwd:UID:GID:login-class:chg pw x sec:deact x sec:GECOS:home:shell'
753 do I = 1 to username.0
754 select
755 when Status.I = "DUPLICATE" & settings.!FixErrors then iterate
756 when Status.I = "UID MISMATCH" then do
757 call lineout newmasterpasswd, username.I':'password.I':'word(uid.I,1)':'gid.I':'loginclass.I':'pwchange.I':'deact.I':'gecos.I':'home.I':'shell.I
758 end
759 when Status.I = "UNIX MISSING" & settings.!FixErrors then do
760 call lineout newmasterpasswd, username.I':'password.I':'uid.I':'gid.I':'loginclass.I':'pwchange.I':'deact.I':'gecos.I':'home.I':'shell.I
761 end
762 otherwise call lineout newmasterpasswd, username.I':'password.I':'uid.I':'gid.I':'loginclass.I':'pwchange.I':'deact.I':'gecos.I':'home.I':'shell.I
763 end
764 end
765 ok = stream(newmasterpasswd,'c','close')
766 ok = VRCopyFile( samba.!masterpasswd, samba.!masterpasswd'.bak' )
767 ok = VRCopyFile( newmasterpasswd, samba.!masterpasswd )
[408]768 ok = SysFileDelete(newmasterpasswd)
[287]769 IF options.!debug == 1 THEN say "_MasterpasswdWrite() done"
770return
771
772/*:VRX _MsgYesNo
773*/
774_MsgYesNo:
775 say "_MsgYesNo() started"
776 buttons.0 = 2
777 buttons.1 = NLVGetMessage(6)
778 buttons.2 = NLVGetMessage(7)
779 default = 2
780 buttons.default = NLVGetMessage(7)
781 esc = 2
782 buttons.esc = NLVGetMessage(7)
783 RC = VRMessage( VRWindow(), Msg.Text, Msg.Title,"Q","buttons.",default, esc )
784 say "_MsgYesNo() done, answer "RC
785return RC
786/*:VRX _NLVSetup
787*/
788_NLVSetup:
789 call NLVSetup
790 CALL NLVSetText 'Main', 'Caption', 1
791
792 CALL NLVSetText 'PB_Save', 'Caption', 10
793 CALL NLVSetText 'PB_Refresh', 'Caption', 11
794 CALL NLVSetText 'PB_Exit', 'Caption', 12
795 CALL NLVSetText 'PB_Help', 'Caption', 13
796 CALL NLVSetText 'PB_About', 'Caption', 14
797 CALL NLVSetText 'PB_RPC', 'Caption', 23
798
799 CALL NLVSetText 'PB_Save', 'Hinttext', 123
800 CALL NLVSetText 'PB_Refresh', 'Hinttext', 124
801 CALL NLVSetText 'PB_Exit', 'Hinttext', 125
802 CALL NLVSetText 'PB_Help', 'Hinttext', 126
803 CALL NLVSetText 'PB_About', 'Hinttext', 127
804 CALL NLVSetText 'PB_RPC', 'Hinttext', 128
805
806 CALL NLVSetText 'TAB_1', 'Userdata', 15
807 CALL NLVSetText 'TAB_2', 'Userdata', 16
808 CALL NLVSetText 'TAB_3', 'Userdata', 170
809 CALL NLVSetText 'TAB_4', 'Userdata', 24
810
811 CALL NLVSetText 'TAB_1', 'Hinttext', 28
812 CALL NLVSetText 'TAB_2', 'Hinttext', 29
813 CALL NLVSetText 'TAB_3', 'Hinttext', 170
814 CALL NLVSetText 'TAB_4', 'Hinttext', 30
815
816 CALL NLVSetText 'Page_1', 'Hinttext', 28
817 CALL NLVSetText 'Page_2', 'Hinttext', 29
818 CALL NLVSetText 'Page_3', 'Hinttext', 171
819 CALL NLVSetText 'Page_4', 'Hinttext', 30
820
821 CALL NLVSetText 'CB_SmbOnly', 'Caption', 17
822 CALL NLVSetText 'CB_SmbGroupsOnly', 'Caption', 21
823
824 CALL NLVSetText 'CB_SmbOnly', 'Hinttext', 121
825 CALL NLVSetText 'CB_SmbGroupsOnly', 'Hinttext', 122
826
827 CALL NLVSetText 'Contextmenu_UserDetailView', 'Caption', 118
828 CALL NLVSetText 'Contextmenu_UserSymbolView', 'Caption', 119
829 CALL NLVSetText 'ContextMenu_UserProperties', 'Caption', 120
830 CALL NLVSetText 'ContextMenu_UserAdd', 'Caption', 40
831 CALL NLVSetText 'ContextMenu_UserDel', 'Caption', 50
832
833 CALL NLVSetText 'ContextMenu_UserJoinGroup', 'Caption', 80
834 CALL NLVSetText 'ContextMenu_UserLeaveGroup', 'Caption', 85
835
836 CALL NLVSetText 'Contextmenu_GroupDetailView', 'Caption', 118
837 CALL NLVSetText 'Contextmenu_GroupSymbolView', 'Caption', 119
838 CALL NLVSetText 'ContextMenu_GroupMembers', 'Caption', 89
839 CALL NLVSetText 'ContextMenu_GroupAdd', 'Caption', 70
840 CALL NLVSetText 'ContextMenu_GroupDel', 'Caption', 75
841 CALL NLVSetText 'ContextMenu_GroupMap', 'Caption', 90
842 CALL NLVSetText 'ContextMenu_GroupUnmap','Caption', 95
843 CALL NLVSetText 'ContextMenu_GroupRebuildScript','Caption', 98
844 CALL NLVSetText 'ContextMenu_GroupWellknown','Caption', 92
845
846 CALL NLVSetText 'DT_Policy', 'Caption', 172
847 CALL NLVSetText 'DT_PolValue', 'Caption', 173
848 CALL NLVSetText 'PB_PolReset', 'Caption', 174
849 CALL NLVSetText 'PB_PolUpdate','Caption', 175
850
851 CALL NLVSetText 'CB_FixErrors', 'Caption', 25
852 CALL NLVSetText 'CB_SyncFullName', 'Caption', 26
853 CALL NLVSetText 'CB_SyncPrimGID', 'Caption', 27
[569]854 CALL NLVSetText 'CB_WriteMasterPwd','Caption', 190
[287]855
856return
857/*:VRX _OnErrorDisable
858*/
859_OnErrorDisable:
860 ok = VRSet("PB_Save","Enabled",0)
861 ok = VRSet("PB_Refresh","Enabled",0)
862 ok = VRSet("IPB_UserAdd","Enabled",0)
863 ok = VRSet("IPB_UserDel","Enabled",0)
864 ok = VRSet("IPB_UserLeaveGroup","Enabled",0)
865 ok = VRSet("IPB_UserJoinGroup","Enabled",0)
866 ok = VRSet("IPB_GroupAdd","Enabled",0)
867 ok = VRSet("IPB_GroupDel","Enabled",0)
868 ok = VRSet("IPB_GroupMap","Enabled",0)
869 ok = VRSet("IPB_GroupUnmap","Enabled",0)
870return
871
872/*:VRX _ParseCommandLine
873*/
874_ParseCommandLine:
875 IF options.!debug == 1 THEN SAY "_ParseCommandLine() started"
876 CmdLine = VRGet("Application","Commandline")
877 IF options.!debug == 1 THEN SAY ' original commandline ="'CmdLine'"'
878 upCmdLine = translate(CmdLine)
879
880 UserPos = 0
881 UserPos = pos('--USER=',upCmdLine)
882
883 if UserPos > 0 then do
884 IF options.!debug == 1 THEN SAY " --USER switch detected"
885 UserPasswd = translate(word(substr(CmdLine,UserPos+7,),1),'%','|')
886 parse var UserPasswd Credentials.!Username '%' Credentials.!password
887 end
888 else do
889 UserPos = pos('-U ',upCmdLine)
890 If UserPos > 0 then do
891 IF options.!debug == 1 THEN SAY " -U switch detected"
892 UserPasswd = translate(word(substr(CmdLine,UserPos+3,),1),'%','|')
893 parse var UserPasswd Credentials.!Username '%' Credentials.!password
894 end
895 end
896 IF options.!debug == 1 THEN say ' Username ="'Credentials.!Username'"'
897 IF options.!debug == 1 THEN say ' Password ="'Credentials.!password'"'
898
899 IF options.!debug == 1 THEN SAY "_ParseCommandLine() done"
900return
901/*:VRX _PathStrkLIBC
902*/
903_PathStrkLIBC: procedure
904 PathStr = translate(arg(1),'/','\')
905 PathStr = translate(left(PathStr,2),'$',':')||substr(PathStr,3)
906return PathStr
907
908/*:VRX _PathStrOS2
909*/
910_PathStrOS2: procedure
911 PathStr = translate(arg(1),'\','/')
912 PathStr = translate(left(PathStr,2),':','$')||substr(PathStr,3)
913return PathStr
914
915/*:VRX _PoliciesPopulate
916*/
917_PoliciesPopulate:
918 IF options.!debug == 1 THEN say '_PoliciesPopulate() started'
919 say samba.!pdbeditexe' -P -?'DebugLevel' 1>'samba.!msg' 2>'samba.!error
920 address cmd samba.!pdbeditexe' -P -?'DebugLevel' 2>'samba.!error
921
922 do until lines(samba.!error) = 0
923 PolLine = linein(samba.!error)
[569]924 /* say polline */
[287]925 select
926 when pos(":",PolLine) > 0 then iterate
927 when pos("!",PolLine) > 0 then iterate
928 otherwise ok = VRMethod("DDCB_Policy","Addstring", PolLine)
929 end
930 end
931 ok = stream(Samba.!error,'c','close')
932 IF options.!debug == 1 THEN say '_PoliciesPopulate() done'
933return
934
935/*:VRX _PolicyGet
936*/
937_PolicyGet:
938 IF options.!debug == 1 THEN say '_PoliciesGet() started'
939 address cmd samba.!pdbeditexe' -P "'arg(1)'" 'DebugLevel' 1>'samba.!msg
940 PolDesc = linein(samba.!msg)
941 PolValue = linein(samba.!msg)
942 ok = stream(Samba.!msg,'c','close')
943
944 parse var PolDesc . ':' PolDesc
945 parse var PolValue . ':' PolValue
946say strip(PolValue)
947say strip(PolDesc)
948 IF options.!debug == 1 THEN say '_PoliciesGet() done'
949return PolValue
950
951/*:VRX _PolicySet
952*/
953_PolicySet:
954 IF options.!debug == 1 THEN say '_PoliciesSet() started'
955 IF options.!debug == 1 THEN say '_PoliciesSet() done'
956return
957
958/*:VRX _Refresh
959*/
960_Refresh:
961 ok = VRSet("Main", 'Pointer', 'Wait' )
962 ok = SysSleep(0.25)
963 call _MasterPasswdRead
964 call _SmbpasswdRead
965 call _SmbUserMapRead
966 call _GroupRead
967 call _SmbGroupsRead
968
969 call _ContainerPopulate
970 call _ContGroupsPopulate
971 ok = VRSet("Main", 'Pointer', '<default>' )
972return
973
974/*:VRX _SambaGetProperties
975*/
976_SambaGetProperties: procedure expose options. samba.
977 IF options.!debug == 1 THEN say '_SambaGetProperties() started'
978 samba.!homes = ""
979
980 /* Read some values from smb.conf into samba. stem */
981 samba.!smbusermap = VRParseFileName(translate(IniGet("username map", "global",samba.!smbconf),'\','/'),'DPNE')
982 if samba.!smbusermap = 0 then samba.!smbusermap = ""
983 IF options.!debug == 1 THEN say ' Samba Usermap = "'samba.!smbusermap'"'
984
985 samba.!homes = VRParseFileName(translate(IniGet("path", "homes",samba.!smbconf),'\','/'),'DP')
986 if samba.!homes = 0 then samba.!homes = ""
987 IF options.!debug == 1 THEN say ' Samba homes = "'samba.!homes'"'
988
989 samba.!profiles = translate(IniGet("path", "profiles",samba.!smbconf),'\','/')
990 if samba.!profiles = 0 then samba.!profiles = ""
991 IF options.!debug == 1 THEN say ' Samba profiles = "'samba.!profiles'"'
992
993 samba.!netlogon = translate(IniGet("path", "netlogon",samba.!smbconf),'\','/')
994 if samba.!netlogon = 0 then samba.!netlogon = ""
995 IF options.!debug == 1 THEN say ' Samba netlogon = "'samba.!netlogon'"'
996
997 IF options.!debug == 1 THEN say '_SambaGetProperties() done'
998return
999
1000/*:VRX _SambaShowError
1001*/
1002_SambaShowError: procedure expose samba. settings. options.
1003 if stream(samba.!error,'c','query size') > 0 then do
1004 I = 0
1005 do while lines(samba.!error) <> 0
1006 I = I + 1
1007 smberr.I = linein(samba.!error)
1008 end
1009 smberr.0 = I
1010 Buttons.1 = NLVGetMessage(2)
1011 Buttons.0 = 1
1012 id = VRMessageStem( VRWindow(), "smberr.", VRGet("Main", "Caption") , "Error", "Buttons.", buttons.1, buttons.1 )
1013 end
1014 ok = stream(Samba.!error,"c","close")
1015 ok = SysFileDelete(Samba.!error)
1016return
1017
1018/*:VRX _SambaShowMsg
1019*/
1020_SambaShowMsg: procedure expose samba. settings. options.
1021 if stream(samba.!msg,'c','query size') > 0 then do
1022 skipWords = arg(1)
1023 skip.0 = words(skipWords)
1024 do J = 1 to skip.0
1025 skip.J = translate(word(skipWords,J))
1026 end
1027 I = 0
1028 do while lines(samba.!msg) <> 0
1029 msgline = linein(samba.!msg)
1030 SkipIt = 0
1031 do J = 1 to skip.0
1032 if pos(skip.J,translate(msgline)) > 0 then do
1033 skipit = 1
1034 leave
1035 end
1036 end
1037 if \SkipIt then do
1038 I = I + 1
1039 smbmsg.I = strip(MsgLine)
1040 end
1041 end
1042 smbmsg.0 = I
1043 if smbmsg.0 > 0 then do
1044 Buttons.1 = "OK" /* NLVGetMessage(2) */
1045 Buttons.0 = 1
1046 id = VRMessageStem( VRWindow(), "smbmsg.", VRGet("Main", "Caption") , "I", "Buttons.", buttons.1, buttons.1 )
1047 end
1048 end
1049 ok = stream(Samba.!msg,"c","close")
1050 ok = SysFileDelete(Samba.!msg)
1051return
1052/*:VRX _SetFlag
1053*/
1054_SetFlag: procedure
1055 FlagVar = arg(1)
1056 FlagStatus = arg(2)
1057 FlagType = arg(3)
1058 say FlagVar
1059 if FlagStatus then do
1060 FlagVar = FlagType||translate(FlagVar,' ',FlagType)
1061 end
1062 else do
1063 FlagVar = translate(FlagVar,' ',FlagType)
1064 end
1065 FlagVar = space(FlagVar,0)
1066 say FlagVar
1067return FlagVar
1068
1069/*:VRX _ShowMsg
1070*/
1071_ShowMsg:
1072 Buttons.1 = NLVGetMessage( 2 )
1073 Buttons.0 = 1
1074 id = VRMessage( VRWindow(), Msg.Text, Msg.Title, Msg.Type, "Buttons.", buttons.1, buttons.1 )
1075 IF options.!debug == 1 THEN say Msg.Text
1076return
1077
1078/*:VRX _SmbGroupMembersSync
1079*/
1080_SmbGroupMembersSync:
1081 IF options.!debug == 1 THEN say '_SmbGroupMembersSync() started'
1082 CurGID = arg(1)
1083 if datatype(CurGID) = "NUM" then do
1084 CurNTGroupName = ""
1085 do Idx = 1 to GGID.0
1086/* say '"'CurGID'" --- "'GGID.Idx'"' */
1087 if CurGID = GGID.Idx then do
1088 CurNTGroupName = NTGroupName.Idx
1089 CurGroupIdx = Idx
1090 leave
1091 end
1092 end
1093 if CurNTGroupName = "" then do
1094 say "Invalid GID "CurGID
1095 return
1096 end
1097 end
1098 else CurNTGroupName = arg(1)
1099 say samba.!netexe' rpc group members "'CurNTGroupName'" 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
1100 address cmd samba.!netexe' rpc group members "'CurNTGroupName'" 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
1101 if RC <> 0 then call _SambaShowError
1102 else do
1103 Z = 0
1104 SyncedUsers = ""
1105 do while lines(samba.!msg) <> 0
1106 Z = Z + 1
1107 smbmsg.Z = linein(samba.!msg)
1108 parse var smbmsg.Z WorkGroup'\'User
1109 SyncedUsers = SyncedUsers||User','
1110 end
1111 ok = stream(Samba.!msg,"c","close")
1112 smbmsg.0 = Z
1113 Gusers.CurGroupIdx = SyncedUsers
1114 end
1115 IF options.!debug == 1 THEN say '_SmbGroupMembersSync() done'
1116return
1117
1118/*:VRX _SmbGroupsRead
1119*/
1120_SmbGroupsRead:
1121 IF options.!debug == 1 THEN say '_SmbGroupsRead() started'
1122 groupmap = TempDir'netgroupmap.txt'
1123 ok = SysFileDelete(groupmap)
1124 say ' 'samba.!netexe' groupmap list -l --debuglevel=0 >'groupmap
1125 address cmd samba.!netexe' groupmap list -l --debuglevel=0 >'groupmap
1126
1127 gname.0 = 0
1128 do while lines(groupmap) <> 0
1129 gmline = linein(groupmap)
1130 if left(gmline,1) <> " " then do /* Found group */
1131 gname.0 = gname.0 + 1
1132 smbgname = strip(gmline)
1133 SID = substr(linein(groupmap),14)
1134 UnixGID = substr(linein(groupmap),14)
1135 Unixgroup = substr(linein(groupmap),14)
1136 GroupType = substr(linein(groupmap),14)
1137 GroupComment = substr(linein(groupmap),14)
1138 do I = 1 to Groupname.0
1139 if GGID.I = UnixGID then do
1140 NTGroupname.I = smbgname
1141 SID.I = SID
1142 RID.I = substr(SID,lastpos('-',SID)+1)
1143 NTComment.I = GroupComment
1144 NTGroupType.I = delword(GroupType,words(GroupType))
1145 GStatus.I = 'NOT FOUND' /* we set this FOR all NT groups - the variable is cleared, when an appriate LIBC group exists */
1146 leave
1147 end
1148 end
1149 end
1150 end
1151 ok = stream(groupmap,'c','close')
[408]1152 ok = SysFileDelete(groupmap)
[287]1153
1154 /* Now read the group list */
1155 grouplist = TempDir'netgrouplist.txt'
1156 ok = SysFileDelete(grouplist)
1157 GroupListError = 0
1158 say ' 'samba.!netexe' rpc group -l 'DebugLevel' 'UserCred' 1>'grouplist' 2>'samba.!error
1159 address cmd samba.!netexe' rpc group -l 'DebugLevel' 'UserCred' 1>'grouplist' 2>'samba.!error
1160 if RC <> 0 then do
1161 call _SambaShowError
1162 GroupListError = 1
1163 end
1164
1165 /* Read grouplist */
1166 dummy = linein(grouplist)
1167 dummy = linein(grouplist)
1168 dummy = linein(grouplist)
1169 i = 0
1170 do while lines(grouplist) <> 0
1171 i = i + 1
1172 gline.i = strip(linein(grouplist))
1173 end
1174 ok = stream(grouplist,'c','close')
[408]1175 ok = SysFileDelete(grouplist)
1176
[287]1177 gline.0 = i
1178
1179 do i = 1 to gline.0
1180 ngroup = strip(left(gline.i,22))
1181 ncomment = strip(substr(gline.i,23))
1182 do j=1 to groupname.0
1183 if GStatus.j = "" then iterate
1184 if ngroup = strip(left(NTGroupname.j,21)) then do
1185 nox = 0
1186 GStatus.j = ""
1187 leave
1188 end
1189 end
1190 end
1191
1192 if gname.0 <> gline.0 & GroupListError = 0 then do
1193 Msg.Title= VRGet("Main","Caption")
1194 Msg.Type = "W"
1195 Msg.Text = NLVGetMessage(112, gline.0, gname.0)
1196 call _ShowMsg
1197 end
1198 else IF options.!debug == 1 THEN say ' Samba groups appear to be workable.'
1199
1200 IF options.!debug == 1 THEN say '_SmbGroupsRead() done, 'gline.0' smbgroups read'
1201return
1202/*:VRX _SmbpasswdRead
1203*/
1204_SmbpasswdRead:
1205 IF options.!debug == 1 THEN say '_SmbpasswdRead() started'
1206
1207 /* clear existing stems */
1208 drop sline.
1209 drop sname.
1210
1211 /* create our temporary smbpasswd file */
1212 ok = SysFileDelete(TempDir'smbpasswd.tmp')
1213 address cmd samba.!pdbeditexe' --debuglevel=0 -L -w >'TempDir'smbpasswd.tmp'
1214 ok = SysFileDelete(samba.!smbpasswd)
1215
1216 do while lines(TempDir'smbpasswd.tmp') <> 0
1217 tmpline = linein(TempDir'smbpasswd.tmp')
1218 if pos(':', tmpline) = 0 then iterate
1219 if pos('corrupt', tmpline) > 0 then do
1220 parse var tmpline . 'username 'username' with uid 'uid ' is' .
1221 tmpline = username':'uid':?:?:[?'copies(' ',12)']:?:'
1222 end
1223 call lineout samba.!smbpasswd, tmpline
1224 end
1225 ok = stream(samba.!smbpasswd,'c','close')
1226 ok = stream(TempDir'smbpasswd.tmp','c','close')
1227
1228 ok = SysFileDelete(TempDir'smbpasswd.tmp')
1229
1230 /* Read smbpasswd */
1231 i = 0
1232 err = 0
1233 cmt = 0
1234 do while lines(samba.!smbpasswd) <> 0
1235 i = i + 1
1236 sline.i = strip(linein(samba.!smbpasswd))
1237
1238 select
1239 when left(sline.i,1) = '#' then do
1240 sname.i = '#'
1241 cmt = cmt + 1
1242 end
1243 when pos('UNKNOWN PARAMETER', translate(sline.i)) > 0 then do
1244 sname.i = '#'
1245 err = err + 1
1246 Msg.Title= "Broken "samba.!smbconf
1247 Msg.Text = sline.i
1248 Msg.Type = "E"
1249 call _ShowMsg
1250 end
[333]1251 when pos(':[',translate(sline.i)) > 0 & pos(']:LCT-',translate(sline.i)) > 0 then do
1252 /* we guess a valid smbdpasswd user entry here */
[287]1253 parse var sline.i name':'.
1254 sname.i = translate(name)
[333]1255 /* still something wrong - we got no name, trash this line */
1256 if sname.i = '' then i = i - 1
1257 end
1258 otherwise do
1259 /* if we did not find a valid line in the previous check this line is garbage, likely debug output.. */
[287]1260 i = i - 1
1261 end
1262 end
1263 end
1264
1265 sline.0 = i
1266 sname.0 = i
1267 ok = stream(samba.!smbpasswd,'c','close')
1268
1269 /* list each line in smbpasswd */
1270 do i=1 to sline.0
1271
1272 /* skip comments in smbpasswd */
1273 if sname.i = '#' then iterate
1274
1275 /* parse smbpasswd info */
1276 parse var sline.i name':'uid':'lmhash':'nthash':['flags']:'lct':'
1277 flags = strip(flags)
1278 ucName = translate(name)
1279
1280 /* find matching entry in master.passwd & confirm UIDs match */
1281 ok = 0
1282 bad = 0
1283 nox = 1
1284 do j=1 to username.0
1285 if translate(username.j) = ucName then do
1286 nox = 0
1287 lmhash.j = lmhash
1288 nthash.j = nthash
1289 flags.j = flags
1290 if pos('?',flags.j) > 0 then status.J = "CORRUPT SMB USER"
1291 lct.j = lct
1292 if uid.j = uid | (uid = 0 & uid.j > 65500) then
1293 ok = j
1294 else do
[577]1295 status.j = "UID MISMATCH"
1296 IF options.!debug == 1 THEN say ' UID MISMATCH: 'uid.j' from master.passwd vs 'uid' from Samba'
1297 uid.j = uid.j
[287]1298 end
1299 leave
1300 end
1301 end
1302 if nox then do /* No master.passwd entry found ! */
1303 nx = 1 + username.0
1304 username.0 = nx
1305 password.0 = nx
1306 username.nx = name
1307 uid.nx = uid
1308 gid.nx = uid
1309 password.nx = "*"
1310 loginclass.NX = '' /* dummy value */
1311 pwchange.NX = '0' /* dummy value */
1312 deact.NX = '0' /* dummy value */
1313 gecos.NX = name /* not really appropriate, but better than a dummy value */
1314 home.NX = '/nonexistent' /* dummy value */
1315 shell.NX = '/usr/sbin/nologin' /* dummy value */
1316 lmhash.NX = lmhash
1317 nthash.NX = nthash
1318 flags.NX = flags
1319 lct.NX = lct
1320 Status.nx = 'UNIX MISSING'
1321 /* we must fix this immediately! */
1322 say "WARNING! Missing master.passwd record created using defaults!!!!!!!!!!!!!!!!!"
1323 call _MasterpasswdWrite
1324 call _PasswordDBRewrite
1325 end
1326 end
1327 IF options.!debug == 1 THEN say '_SmbpasswdRead() done, read 'sname.0-cmt-err' Samba users, 'cmt' comments, 'err' errors.'
1328return
1329
1330/*:VRX _SmbUserMapRead
1331*/
1332_SmbUserMapRead:
1333 IF options.!debug == 1 THEN say '_SmbUserMapRead() started'
1334 /* Read complete smbusermap */
1335 I = 0
1336 if samba.!smbusermap <> "" then do
1337 do until lines(samba.!smbusermap) = 0
1338 usermapline = strip(linein(samba.!smbusermap))
1339
1340 /* Skip comments */
1341 if left(usermapline,1) = "#" then iterate
1342 if left(usermapline,1) = ";" then iterate
1343
1344 /* parse fields into stem variables */
1345 I = I + 1
1346 parse var usermapline usermapname.I' = 'usernamemapto.I
1347
1348 do J = 1 to Username.0
1349 if translate(Username.J) = translate(Usermapname.I) then do
1350 MapTo.J = usernamemapto.I
1351 leave
1352 end
1353 end
1354 end
1355 ok = stream(samba.!smbusermap,'c','close')
1356 drop usermapline
1357 drop usermapname.
1358 drop usernamemapto.
1359 IF options.!debug == 1 THEN say '_SmbUserMapRead() done, 'I' user mappings read'
1360 end
1361 else IF options.!debug == 1 THEN say '_SmbUserMapRead() done, not installed'
1362return
1363
1364/*:VRX _SmbUserMapWrite
1365*/
1366_SmbUserMapWrite:
1367 IF options.!debug == 1 THEN say '_SmbUserMapWrite() started'
1368 HaveMappedUser = 0
1369 do I = 1 to MapTo.0
1370 if MapTo.I <> "" then do
1371 HaveMappedUser = 1
1372 leave
1373 end
1374 end
1375 if samba.!smbusermap = "" & HaveMappedUser then do
1376 Msg.Text = NLVGetMessage(110)
1377 Msg.Type = "E"
1378 call _ShowMsg
1379 IF options.!debug == 1 THEN say '_SmbUserMapWrite() done, not installed.'
1380 return
1381 end
1382
1383 if samba.!smbusermap <> "" then do
1384 ok = VRCopyFile( samba.!smbusermap, samba.!smbusermap'.bak' )
1385 ok = SysFileDelete(samba.!smbusermap)
1386 call lineout samba.!smbusermap, '# Created by smbusers Version 'word(VRGet("Main", "Hinttext"),2)
1387 call lineout samba.!smbusermap, '# syntax:'
1388 call lineout samba.!smbusermap, '# Samba username = Windows username'
1389
1390 do I = 1 to MapTo.0
1391 if MapTo.I <> "" then do
1392 call lineout samba.!smbusermap, Username.I' = 'MapTo.I
1393 end
1394 end
1395 ok = stream(samba.!smbusermap,'c','close')
1396 IF options.!debug == 1 THEN say '_SmbUserMapWrite() done'
1397 end
1398 else IF options.!debug == 1 THEN say '_SmbUserMapWrite() done, not installed.'
1399return
1400
1401/*:VRX _SmbUsersList
1402*/
1403_SmbUsersList:
1404
1405userCnt = 0
1406
1407/* list each line in smbpasswd */
1408do i=1 to sline.0
1409
1410 /* skip comments in smbpasswd */
1411 if sname.i = '#' then
1412 iterate
1413
1414 /* parse smbpasswd info */
1415 parse var sline.i name':'uid':'.':'.':'flags':'.
1416 ucName = translate(name)
1417
1418 /* find matching entry in master.passwd & confirm UIDs match */
1419 ok = 0
1420 bad = 0
1421 do j=1 to mname.0
1422 if mname.j = ucName then do
1423 if muid.j = uid | (uid = 0 & muid.j > 65500) then
1424 ok = j
1425 else
1426 bad = j
1427 leave
1428 end
1429 end
1430
1431 /* if there was a match, show all info;
1432 otherwise, show smbpasswd info & an error message */
1433 userCnt = userCnt + 1
1434 RH = VRMethod("CN_Users","AddRecord")
1435
1436 if ok <> 0 then do
1437 parse var mline.ok .':'.':'.':'gid':'.':'.':'.':'full':'home':'.
1438 home = _PathStrOS2(home)
1439 say left(userCnt, 4) substr(flags, 2, 4) left(name, 11) left(uid, 6),
1440 left(gid, 6) left(full, 18) left(home, 23)
1441 flags = strip(substr(flags, 2, 4))
1442 ok = VRMethod("CN_Users","SetFieldData", RH, NrFH, UserCnt, SmbFH, flags, NameFH, Name, UIDFH, Uid, GIdFH, GID, FullNameFH, full, HomeFH, Home)
1443 end
1444 else do
1445 if bad <> 0 then
1446 error = "* UID should be '" || muid.bad || "' - use 'Change' to fix *"
1447 else
1448 error = "* Unix-user not found - use 'Change' to fix *"
1449 say left(userCnt, 4) substr(flags, 2, 4) left(name, 11) left(uid, 6),
1450 left(error, 50)
1451 flags = strip(substr(flags, 2, 4))
1452 ok = VRMethod("CN_Users","SetFieldData", RH, SCommentFH, error)
1453 ok = VRMethod("CN_Users","SetFieldData", RH, NrFH, UserCnt, SmbFH, flags, NameFH, Name, UIDFH, Uid )
1454 end
1455
1456
1457end
1458
1459if userCnt = 0 then
1460 say " * No Samba users have been defined - use the 'Add' command * "
1461
1462return
1463
1464/*:VRX _useraddsmb
1465*/
1466_useraddsmb:
1467 IF options.!debug == 1 THEN say '_UserAddSmb() started'
1468 select
1469 when VRGet("CB_MachineAccount","Set") then do
1470 say ' 'samba.!smbpasswdexe' -a 'VRGet("EF_Username","Value")' -m'
1471 address cmd samba.!smbpasswdexe' -a 'VRGet("EF_Username","Value")' -m 2>'samba.!error' 1>'samba.!msg
1472 smbpasswdrc = rc
1473 if rc <> 0 then call _SambaShowError
1474 else call _SambaShowMsg
1475 end
1476 when VRGet("CB_NoPassword","Set") then do
1477 say ' 'samba.!smbpasswdexe' -a 'VRGet("EF_Username","Value")' -n'
1478 address cmd samba.!smbpasswdexe' -a 'VRGet("EF_Username","Value")' -n 2>'samba.!error' 1>'samba.!msg
1479 smbpasswdrc = rc
1480 if rc <> 0 then call _SambaShowError
1481 else call _SambaShowMsg
1482 end
1483 otherwise do
1484 pwdfile = TempDir'newpwd'
1485 call lineout pwdfile, VRGet("EF_Password","value")
1486 call lineout pwdfile, VRGet("EF_Password","value")
1487 ok = stream(pwdfile,"c","close")
1488 say ' 'samba.!smbpasswdexe' -a 'VRGet("EF_Username","Value")' -s <'pwdfile' 2>'samba.!error
1489 address cmd samba.!smbpasswdexe' -a 'VRGet("EF_Username","Value")' -s <'pwdfile' 2>'samba.!error' 1>'samba.!msg
1490 smbpasswdrc = rc
1491 if rc <> 0 then call _SambaShowError
1492 else call _SambaShowMsg
1493 if swatauth & VRGet("CB_Swat_Allowed","set") then do
1494 if VRFileExists(swatusers) then cFlag = ""; else cFlag="c"
1495 say ' 'samba.!htpasswdexe' -b "'swatusers'" 'VRGet("EF_Username","Value")' 'copies("*",length(VRGet("EF_Password","value")))
1496 address cmd samba.!htpasswdexe' -b'cFlag' "'swatusers'" 'VRGet("EF_Username","Value")' 'VRGet("EF_Password","value")' 2>'samba.!error' 1>'samba.!msg
1497 if rc <> 0 then call _SambaShowError
1498 else call _SambaShowMsg
1499 end
1500 ok = SysFileDelete(pwdfile)
1501 end
1502 end
1503 IF options.!debug == 1 THEN say '_UserAddSmb() done'
1504return
1505
1506/*:VRX _UserIsValid
1507*/
1508_UserIsValid: procedure expose username.
1509 User = arg(1)
1510 HaveValidUser = 0
1511 do I = 1 to username.0
1512 if translate(username.I) = translate(User) then do
1513 HaveValiduser = 1
1514 leave
1515 end
1516 end
1517return HaveValidUser
1518
1519/*:VRX _UserPropertiesGet
1520*/
1521_UserPropertiesGet:
1522 IF options.!debug == 1 THEN say '_UserPropertiesGet() started'
1523 CurUser = arg(1)
1524
[926]1525 /* "up" is an abbreviation for UserProperties in here */
[287]1526
1527 UserProperties = TempDir'UserProperties.txt'
1528 ok = SysFileDelete(UserProperties)
1529
1530 IF options.!debug == 1 THEN say ' 'samba.!pdbeditexe' 'CurUser' -L -v 'debuglevel
1531 address cmd samba.!pdbeditexe' 'CurUser' -L -v 'DebugLevel' >'UserProperties
1532
1533 /* Read user properties */
1534 i = 0
1535 do while lines(UserProperties) <> 0
1536 i = i + 1
1537 upline.i = strip(linein(UserProperties))
1538 end
1539 ok = stream(UserProperties,'c','close')
[408]1540 ok = SysFileDelete(UserProperties)
[287]1541
1542 upline.0 = i
1543
1544 ok = VRSet("CN_UserProperties","Painting", 0 )
1545 ok = VRMethod("CN_UserProperties","RemoveRecord","ALL")
1546 do i = 1 to upline.0
1547 parse var upline.i uptype.i ':' upvalue.i
1548 uptype.i = strip(uptype.i)
1549 upvalue.i = strip(upvalue.i)
1550 CurType = translate(uptype.i)
1551 /* say CurType */
1552 select
1553 when CurType = "DOMAIN" then upCommand.i = "--domain="
1554 when CurType = "PROFILE PATH" then upCommand.i = "--profile="
1555 when CurType = "ACCOUNT DESC" then upCommand.i = "--account-desc="
1556 when CurType = "FULL NAME" then upCommand.i = "--fullname="
1557 when CurType = "LOGON SCRIPT" then upCommand.i = "--script="
1558 when CurType = "HOME DIRECTORY" then upCommand.i = "--homedir="
1559 when CurType = "HOMEDIR DRIVE" then upCommand.i = "--drive="
1560 /* when CurType = "ACCOUNT FLAGS" then upCommand.i = '-c "[NDHLX]"' */
1561 when CurType = "PRIMARY GROUP SID" then do
1562 upCommand.i = ""
1563 if Settings.!SyncPrimGID = 1 & \(translate(Username.CurUserNr) = "GUEST"|translate(Username.CurUserNr) = "NOBODY") then do
1564 NewPrimGID = substr(upvalue.i,lastpos('-',upvalue.i)+1,)
1565 IF options.!debug == 1 THEN say " NewPrimGID = "NewPrimGID
1566 If GID.CurUserNr <> NewPrimGID then do
1567 GID.CurUserNr = NewPrimGID
1568 IF options.!debug == 1 THEN say " Synced Primary GID!"
1569 SyncedPrimGID = 1
1570 end
1571 end
1572 end
1573
1574 otherwise upCommand.i = ""
1575 end
1576 uprh.i = VRMethod("CN_UserProperties","AddRecord")
1577 ok = VRMethod("CN_UserProperties","SetFieldData", uprh.i, upNrFH, i, upTypeFH, uptype.i, upValueFH, upValue.i, upCommandFH, upCommand.i )
1578 NotHaveCommand = (upCommand.i = "")
1579 ok = VRMethod("CN_UserProperties","SetRecordAttr", uprh.i, "ReadOnly", NotHaveCommand)
1580 if VRGet("CB_EditableFieldsOnly","Set") then ok = VRMethod("CN_UserProperties","SetRecordAttr", uprh.i, "Visible", \NotHaveCommand)
1581 select
1582 when CurType = "ACCOUNT FLAGS" then do
1583 /* ok = VRMethod("CN_UserProperties","SetRecordAttr", uprh.i, "Visible", 0) */
1584 parse var upvalue.I '['CurFlags']'
1585 if pos("U", CurFlags) > 0 then ok = VRSet("EF_AccountType","Value", "Regular user account")
1586 if pos("T", CurFlags) > 0 then ok = VRSet("EF_AccountType","Value", "Temporary duplicate of other account")
1587 if pos("M", CurFlags) > 0 then ok = VRSet("EF_AccountType","Value", "MNS logon user account")
1588 if pos("W", CurFlags) > 0 then ok = VRSet("EF_AccountType","Value", "Workstation Trust Account")
1589 if pos("S", CurFlags) > 0 then ok = VRSet("EF_AccountType","Value", "Server Trust Account")
1590 if pos("I", CurFlags) > 0 then ok = VRSet("EF_AccountType","Value", "Domain Trust Account")
1591
1592 ok = VRSet("CB_upNoPassword", "Set", (pos("N",CurFlags) > 0))
1593 call CB_upNoPassword_Click
1594 ok = VRSet("CB_upPassword_doesnt_expire", "Set", (pos("X",CurFlags) > 0))
1595 ok = VRSet("CB_upDeactivated", "Set", (pos("D",CurFlags) > 0))
1596 end
1597 when right(CurType,8) = "USERNAME" then do
1598 ok = VRMethod("CN_UserProperties","SetRecordAttr", uprh.i, "Visible", 0)
1599 ok = VRSet("UserProperties", "caption", NLVGetMessage(120)' "'Username.CurUserNr'"')
1600 end
1601 otherwise nop
1602 end
1603 end
1604 if SwatAuth then do
1605 ok = VRSet("CB_upSWAT_Allowed","Enabled",0)
1606 ok = VRSet("CB_upSWAT_Allowed","set",0)
1607 swatchanged = 0
1608 if VRFileExists(swatusers) then do
1609 do until lines(swatusers) = 0
1610 swatline = linein(swatusers)
1611 parse var swatline curswatuser ':' curswatpw
1612 if curswatuser = CurUser then do
1613 ok = VRSet("CB_upSWAT_Allowed","set",1)
1614 leave
1615 end
1616 end
1617 ok = stream(swatusers,'c','close')
1618 end
1619 end
1620 ok = VRSet("CN_UserProperties","Painting", 1 )
1621 IF options.!debug == 1 THEN say '_UserPropertiesGet() done'
1622return
1623
1624/*:VRX _UserRecWriteBackToStems
1625*/
[451]1626_UserRecWriteBackToStems:
[569]1627 IF options.!debug == 1 THEN say '_UserRecWriteBackToStems() started'
1628
1629 if VRMethod( "CN_Users", "ValidateRecord", RH ) then do
1630 Cur = VRMethod("CN_Users","GetFieldData", RH, NrFH)
1631 Username.Cur = VRMethod("CN_Users","GetFieldData", RH, UsernameFH)
1632 UID.Cur = VRMethod("CN_Users","GetFieldData", RH, UIDFH)
1633 GID.Cur = VRMethod("CN_Users","GetFieldData", RH, GIDFH)
1634 GECOS.Cur = VRMethod("CN_Users","GetFieldData", RH, GECOSFH)
1635 Home.Cur = _PathStrkLIBC(VRMethod("CN_Users","GetFieldData", RH, HomeFH))
1636 Shell.Cur = VRMethod("CN_Users","GetFieldData", RH, ShellFH)
1637 MapTo.Cur = VRMethod("CN_Users","GetFieldData", RH, MapToFH)
[287]1638
[569]1639 if Settings.!SyncFullName = 1 & flags.Cur <> "" then do
1640 say " Sync is enabled, therefore we must save now!"
1641 call PB_Save_Click
1642 say samba.!pdbeditexe' --user='Username.Cur' --modify --fullname="'GECOS.Cur'" 'DebugLevel' 1>NUL 2>'samba.!error
1643 address cmd samba.!pdbeditexe' --user='Username.Cur' --modify --fullname="'GECOS.Cur'" 'DebugLevel' 1>NUL 2>'samba.!error
1644 if RC <> 0 then call _SambaShowError /* ; else call _SambaShowMsg */
1645 end
1646 /* These are not editable/visible xpwFH, password.i,xlcFH,LoginClass.I,xcpwFH, pwchange.I,xDeactFH, deact.I, Status.I ) */
1647
1648 /* smbpasswd fields */
1649 /* we do not allow editing these
1650 FLagsFH, flags.I, LMHashFH, LMHash.I,NTHashFH, NTHash.I, LCTFH, LCT.I)
1651 */
[287]1652 end
[569]1653 else say RH' is no valid record!'
1654 IF options.!debug == 1 THEN say '_UserRecWriteBackToStems() done'
[287]1655return
1656
1657/*:VRX About_Close
1658*/
1659About_Close:
1660 call About_Fini
1661return
1662
1663/*:VRX About_Create
1664*/
1665About_Create:
1666 call About_Init
1667 ok = VRSet("About","Caption", NLVGetMessage(127))
1668 ok = VRSet("PB_AboutOK","Caption", NLVGetMessage(2))
[926]1669 SambaTeam.0 = 9
1670 SambaTeam.1 = 'Silvan Scherrer'
1671 SambaTeam.2 = 'Herwig Bauernfeind'
1672 SambaTeam.3 = 'Vitali Pelenyov'
1673 SambaTeam.4 = 'Paul Smedley'
1674 SambaTeam.5 = 'Yuri Dario'
1675 SambaTeam.6 = 'Alex Taylor'
1676 SambaTeam.7 = 'Nikolay Kolosov'
1677 SambaTeam.8 = 'All the Samba people'
1678 SambaTeam.9 = 'All the netlabs people'
[287]1679 ok = VRSet("About","Font", VRGet("Page_4","Font"))
1680 ok = VRMethod("LB_SambaTeam","AddStringList", "SambaTeam." )
1681 ok = VRSet("DT_SambaTeam","Caption", NLVGetMessage(129))
1682 ok = VRSet("MLE_Version","Value", NLVGetMessage(1)||'0D0A'x||VRGet("Main", "Hinttext")||'0D0A'x||'0D0A'x||SambaVer)
1683return
1684
1685/*:VRX About_Fini
1686*/
1687About_Fini:
1688 window = VRInfo( "Window" )
1689 call VRDestroy window
1690 drop window
1691return
1692/*:VRX About_Init
1693*/
1694About_Init:
1695 window = VRInfo( "Object" )
1696 if( \VRIsChildOf( window, "Notebook" ) ) then do
1697 call VRMethod window, "CenterWindow"
1698 call VRSet window, "Visible", 1
1699 call VRMethod window, "Activate"
1700 end
1701 drop window
1702return
1703
1704/*:VRX Activate
1705*/
1706Activate:
1707 parse arg Nr
1708 call PushbackAll
1709 CurrentPageNr = Nr
1710 /* ok = VRSet("PB_"Nr,"Font","9.WarpSans Bold") */
1711 ok = VRSet("TAB_"Nr,"Top", TabTop-8)
1712 ok = VRSet("TAB_"Nr,"Left",TabWidth*(Nr-1)+PageLeft)
1713 ok = VRSet("TAB_"Nr,"PicturePath", "#1"||Nr||";#1"||Nr)
1714 ok = VRset("DT_PageName", "Caption", VRGet("TAB_"Nr, "UserData"))
1715 ok = VRSet("Page_"Nr,"Visible", 1)
1716 select
1717 when Nr = 1 then ok = VRSet("IPB_paper","PicturePath","#4;#4")
1718 when Nr = Pages then ok = VRSet("IPB_paper","PicturePath","#6;#6")
1719 otherwise ok = VRSet("IPB_paper","PicturePath","#5;#5")
1720 end
1721return
1722
1723/*:VRX AddGroup_Close
1724*/
1725AddGroup_Close:
1726 call AddGroup_Fini
1727return
1728
1729/*:VRX AddGroup_Create
1730*/
1731AddGroup_Create:
1732 call AddGroup_Init
1733 CALL NLVSetText 'AddGroup', 'Caption', 70
1734 CALL NLVSetText 'PB_GroupAddOK', 'Caption', 2
1735 CALL NLVSetText 'PB_GroupAddCancel', 'Caption', 3
1736 CALL NLVSetText 'DT_GroupName', 'Caption', 71
1737 CALL NLVSetText 'DT_Comment', 'Caption', 72
1738 CALL NLVSetText 'CB_UnixGroupOnly', 'Caption', 73
1739 CALL NLVSetText 'CB_AutomaticGGID', 'Caption', 74
1740 UnixGroupOnly = 0
1741return
1742
1743/*:VRX AddGroup_Fini
1744*/
1745AddGroup_Fini:
1746 window = VRInfo( "Window" )
1747 call VRDestroy window
1748 drop window
1749return
1750/*:VRX AddGroup_Init
1751*/
1752AddGroup_Init:
1753 window = VRInfo( "Object" )
1754 if( \VRIsChildOf( window, "Notebook" ) ) then do
1755 call VRMethod window, "CenterWindow"
1756 call VRSet window, "Visible", 1
1757 call VRMethod window, "Activate"
1758 end
1759 drop window
1760return
1761
1762/*:VRX AddUser_Close
1763*/
1764AddUser_Close:
1765 call AddUser_Fini
1766return
1767
1768/*:VRX AddUser_Create
1769*/
1770AddUser_Create:
1771 call AddUser_Init
1772 CALL NLVSetText 'AddUser', 'Caption', 40
1773
1774 Msg.Title = VRGet("AddUser","Caption")
1775 CALL NLVSetText 'DT_Username', 'Caption', 41
1776 CALL NLVSetText 'DT_GECOS', 'Caption', 42
1777 CALL NLVSetText 'DT_Password_Repeat', 'Caption', 43
1778 CALL NLVSetText 'DT_GID', 'Caption', 44
1779 CALL NLVSetText 'DT_Home', 'Caption', 140
1780 CALL NLVSetText 'DT_Description', 'Caption', 52
1781 CALL NLVSetText 'CB_Must_change_password', 'Caption', 46
1782 CALL NLVSetText 'CB_Cannot_change_password','Caption', 47
1783 CALL NLVSetText 'CB_Password_doesnt_expire', 'Caption', 48
1784 CALL NLVSetText 'CB_Deactivated', 'Caption', 49
1785 CALL NLVSetText 'CB_NoHome', 'Caption', 9
1786
1787 CALL NLVSetText 'PB_AddUserOK', 'Caption', 2
1788 CALL NLVSetText 'PB_AddUserCancel', 'Caption', 3
1789 CALL NLVSetText 'CB_UnixUserOnly', 'Caption', 18
1790 CALL NLVSetText 'CB_MachineAccount', 'Caption', 19
1791 CALL NLVSetText 'CB_NoPassword', 'Caption', 20
1792 CALL NLVSetText 'DT_Password', 'Caption', 33
1793 CALL NLVSetText 'CB_SWAT_Allowed', 'Caption', 35
1794
1795 ok = VRSet("CB_SWAT_Allowed","enabled",Swatauth)
1796
1797 MinPWLength = _PolicyGet("min password length")
1798
1799 if IsUnixUser then do
1800 ok = VRSet("EF_Username","value", Username.SelNr)
1801 call EF_Username_LostFocus
1802 ok = VRMethod("EF_GECOS","SetFocus")
1803 end
1804 else do
1805 NextUID = _GetNextUID()
1806 ok = VRSet("DT_UID","Caption", "UID: "NextUID)
1807 ok = VRSet("DDCB_GID","Value", NextUID)
1808 do I = 1 to GGID.0
1809 if GGID.I = "513" then do
1810 ok = VRSet("DDCB_GID","Value", "513")
1811 leave
1812 end
1813 end
1814 ok = VRMethod( "DDCB_GID", "Reset")
1815 ok = VRMethod( "DDCB_GID", "AddString", NextUID)
1816 ok = VRMethod( "DDCB_GID", "AddStringList", "GGID.")
1817 ok = VRSet("EF_Home", "Value", Samba.!Homes'\')
1818 call EF_Home_Change
1819 end
1820 SecondStage = 0
1821return
1822
1823/*:VRX AddUser_Fini
1824*/
1825AddUser_Fini:
1826 window = VRInfo( "Window" )
1827 call VRDestroy window
1828 drop window
1829return
1830/*:VRX AddUser_Init
1831*/
1832AddUser_Init:
1833 window = VRInfo( "Object" )
1834 if( \VRIsChildOf( window, "Notebook" ) ) then do
1835 call VRMethod window, "CenterWindow"
1836 call VRSet window, "Visible", 1
1837 call VRMethod window, "Activate"
1838 end
1839 drop window
1840return
1841
1842/*:VRX CB_AutomaticGGID_Click
1843*/
1844CB_AutomaticGGID_Click:
1845 ok = VRSet("EF_GGID","Enabled", \VRget("CB_AutomaticGGID","Set"))
1846 if \VRget("CB_AutomaticGGID","Set") then ok = VRSet("EF_GGID","BackColor","<default>")
1847 else ok = VRSet("EF_GGID","BackColor","PaleGray")
1848return
1849
1850/*:VRX CB_Cannot_change_password_Click
1851*/
1852CB_Cannot_change_password_Click:
1853 SecondStage = (SecondStage | VRGet("CB_Cannot_change_password","set"))
1854return
1855
1856/*:VRX CB_Deactivated_Click
1857*/
1858CB_Deactivated_Click:
1859 SecondStage = (SecondStage | VRGet("CB_Deactivated","set"))
1860return
1861
1862/*:VRX CB_Debug_Click
1863*/
1864CB_Debug_Click:
1865 options.!Debug = VRGet("CB_Debug","set")
1866 if options.!Debug then ok = VRREdirectStdIO("ON")
1867 else ok = VRREdirectStdIO("OFF")
1868return
1869
1870/*:VRX CB_EditableFieldsOnly_Click
1871*/
1872CB_EditableFieldsOnly_Click:
1873 call _UserPropertiesGet Username.CurUserNr
1874return
1875
1876/*:VRX CB_FixErrors_Click
1877*/
1878CB_FixErrors_Click:
1879 settings.!FixErrors = VRGet("CB_FixErrors","set")
1880return
1881
1882/*:VRX CB_MachineAccount_Click
1883*/
1884CB_MachineAccount_Click:
[579]1885 IF options.!debug == 1 THEN say 'CB_MachineAccount_Click started'
[287]1886 if right(VRGet("EF_Username","Value"),1) = "$" then do
[579]1887 if VRGet("EF_Username","Value") <> translate(VRGet("EF_Username","Value")) then
1888 ok = VRSet("EF_Username","Value",translate(VRGet("EF_Username","Value")))
[287]1889 ok = VRset("CB_UnixUserOnly","set", 0)
1890 ok = VRset("CB_MachineAccount","set", 1)
1891 ok = VRSet("CB_NoPassword","set", 0)
1892 ok = VRSet("CB_NoPassword","Enabled", 0)
1893 ok = VRSet("EF_Password","BackColor", "PaleGray")
1894 ok = VRSet("EF_Password_Repeat","BackColor", "PaleGray")
1895 ok = VRSet("EF_Password","Enabled", 0)
1896 ok = VRSet("EF_Password_Repeat","Enabled", 0)
1897 ok = VRSet("CB_Must_Change_Password","Enabled", 0)
1898 ok = VRSet("CB_Cannot_change_password","Enabled", 0)
1899 ok = VRSet("CB_Password_doesnt_expire","Enabled", 0)
1900
1901 end
1902 else do
1903 ok = VRset("CB_MachineAccount","set", 0)
1904 ok = VRSet("CB_NoPassword","Enabled", 1)
1905 call CB_NoPassword_Click
1906 end
[579]1907 IF options.!debug == 1 THEN say 'CB_MachineAccount_Click done'
[287]1908return
1909
1910/*:VRX CB_Must_change_password_Click
1911*/
1912CB_Must_change_password_Click:
1913 SecondStage = (SecondStage | VRGet("CB_Must_change_password","set"))
1914 if VRGet("CB_Must_Change_Password","set") then do
1915 ok = VRSet("CB_Cannot_change_password","Set", 0)
1916 ok = VRSet("CB_Password_doesnt_expire","Set", 0)
1917 ok = VRSet("CB_Cannot_change_password","Enabled", 0)
1918 ok = VRSet("CB_Password_doesnt_expire","Enabled", 0)
1919 end
1920 else do
1921 ok = VRSet("CB_Cannot_change_password","Enabled", 1)
1922 ok = VRSet("CB_Password_doesnt_expire","Enabled", 1)
1923 end
1924return
1925
1926/*:VRX CB_NoHome_Click
1927*/
1928CB_NoHome_Click:
1929 ok = VRSet("EF_Home","Enabled",\VRGet("CB_NoHome","set"))
1930 ok = VRset("PB_CreateHome","Enabled",\VRGet("CB_NoHome","set"))
1931 ok = VRSet("PB_ChooseHome","Enabled",\VRGet("CB_NoHome","set"))
1932 if VRGet("CB_NoHome","set") then ok = VRSet("EF_HOME","Value", "\nonexistent")
1933return
1934
1935/*:VRX CB_NoPassword_Click
1936*/
1937CB_NoPassword_Click:
1938 if VRGet("CB_NoPassword","set") then do
1939 ok = VRSet("EF_Password","BackColor", "PaleGray")
1940 ok = VRSet("EF_Password_Repeat","BackColor", "PaleGray")
1941 ok = VRSet("EF_Password","Enabled", 0)
1942 ok = VRSet("EF_Password_Repeat","Enabled", 0)
1943 ok = VRSet("CB_Must_Change_Password","Enabled", 0)
1944 ok = VRSet("CB_Cannot_change_password","Enabled", 0)
1945 ok = VRSet("CB_Password_doesnt_expire","Enabled", 0)
1946 ok = VRSet("CB_SWAT_Allowed","Enabled", 0)
1947 end
1948 else do
1949 ok = VRSet("EF_Password","BackColor", "<default>")
1950 ok = VRSet("EF_Password_Repeat","BackColor", "<default>")
1951 ok = VRSet("EF_Password","Enabled", 1)
1952 ok = VRSet("EF_Password_Repeat","Enabled", 1)
1953 ok = VRSet("CB_Must_Change_Password","Enabled", 1)
1954 ok = VRSet("CB_Cannot_change_password","Enabled", 1)
1955 ok = VRSet("CB_Password_doesnt_expire","Enabled", 1)
1956 ok = VRSet("CB_SWAT_Allowed","Enabled", 1)
1957 end
1958return
1959
1960/*:VRX CB_Password_doesnt_expire_Click
1961*/
1962CB_Password_doesnt_expire_Click:
1963 SecondStage = (SecondStage | VRGet("CB_Password_doesnt_expire","set"))
1964return
1965
1966/*:VRX CB_SmbGroupsOnly_Click
1967*/
1968CB_SmbGroupsOnly_Click:
1969 settings.!SmbGroupsOnly = VRGet("CB_SmbGroupsOnly","Set")
1970 call _ContGroupsPopulate
1971return
1972
1973/*:VRX CB_SmbOnly_Click
1974*/
1975CB_SmbOnly_Click:
1976 settings.!SmbOnly = VRGet("CB_SmbOnly","Set")
1977 call _ContainerPopulate
1978return
1979
1980/*:VRX CB_SWAT_Allowed_Click
1981*/
1982CB_SWAT_Allowed_Click:
[579]1983 call CB_MachineAccount_Click
[287]1984return
1985
1986/*:VRX CB_SyncFullName_Click
1987*/
1988CB_SyncFullName_Click:
1989 settings.!SyncFullName = VRGet("CB_SyncFullName","set")
1990return
1991
1992/*:VRX CB_SyncPrimGID_Click
1993*/
1994CB_SyncPrimGID_Click:
1995 settings.!SyncPrimGID = VRGet("CB_SyncPrimGID","set")
1996return
1997
1998/*:VRX CB_UnixGroupOnly_Click
1999*/
2000CB_UnixGroupOnly_Click:
2001 UnixGroupOnly = VRGet("CB_UnixGroupOnly","set")
2002 ok = VRSet("EF_Comment","Enabled", \VRget("CB_UnixGroupOnly","Set"))
2003 if \VRget("CB_UnixGroupOnly","Set") then ok = VRSet("EF_Comment","BackColor","<default>")
2004 else ok = VRSet("EF_Comment","BackColor","PaleGray")
2005return
2006
2007/*:VRX CB_UnixUserOnly_Click
2008*/
2009CB_UnixUserOnly_Click:
2010 if VRGet("CB_UnixUserOnly","set") then do
2011 ok = VRSet("CB_NoPassword","set",1)
2012 call CB_NoPassword_Click
2013 ok = VRSet("EF_Description", "BackColor", "PaleGray")
2014 ok = VRSet("EF_Description", "Enabled", 0)
2015 end
2016 else do
2017 ok = VRSet("EF_Description", "BackColor", "<default>")
2018 ok = VRSet("EF_Description", "Enabled", 1)
2019 ok = VRSet("CB_NoPassword","set",0)
2020 call CB_NoPassword_Click
2021 end
2022return
2023
2024/*:VRX CB_upCannot_change_password_Click
2025*/
2026CB_upCannot_change_password_Click:
2027
2028return
2029
2030/*:VRX CB_upDeactivated_Click
2031*/
2032CB_upDeactivated_Click:
2033 CurFlags = _SetFlag(CurFlags, VRGet("CB_upDeactivated","set"), 'D')
2034return
2035
2036/*:VRX CB_upMust_change_password_Click
2037*/
2038CB_upMust_change_password_Click:
2039
2040return
2041
2042/*:VRX CB_upNoPassword_Click
2043*/
2044CB_upNoPassword_Click:
2045 CurFlags = _SetFlag(CurFlags, VRGet("CB_upNoPassword","set"), 'N')
2046 if VRGet("CB_upNoPassword","set") then do
2047 ok = VRSet("EF_upPassword","value","")
2048 ok = VRSet("EF_upPassword_Repeat","value","")
2049 ok = VRSet("DT_upPassword","Enabled",0)
2050 ok = VRSet("DT_upPassword_Repeat","Enabled",0)
2051 ok = VRSet("EF_upPassword","Enabled",0)
2052 ok = VRSet("EF_upPassword_Repeat","Enabled",0)
2053 ok = VRSet("EF_upPassword","BackColor", "PaleGray")
2054 ok = VRSet("EF_upPassword_Repeat","BackColor", "PaleGray")
2055 end
2056 else do
2057 ok = VRSet("DT_upPassword","Enabled",1)
2058 ok = VRSet("DT_upPassword_Repeat","Enabled",1)
2059 ok = VRSet("EF_upPassword","Enabled",1)
2060 ok = VRSet("EF_upPassword_Repeat","Enabled",1)
2061 ok = VRSet("EF_upPassword","BackColor", "<default>")
2062 ok = VRSet("EF_upPassword_Repeat","BackColor", "<default>")
2063 end
2064return
2065
2066/*:VRX CB_upPassword_doesnt_expire_Click
2067*/
2068CB_upPassword_doesnt_expire_Click:
2069 CurFlags = _SetFlag(CurFlags, VRGet("CB_upPassword_doesnt_expire","set"), 'X')
2070return
2071
2072/*:VRX CB_upSWAT_Allowed_Click
2073*/
2074CB_upSWAT_Allowed_Click:
2075 swatchanged = 1
2076return
2077
[569]2078/*:VRX CB_WriteMasterPwd_Click
2079*/
2080CB_WriteMasterPwd_Click:
2081 settings.!WriteMasterPwd = VRGet("CB_WriteMasterPwd","set")
2082return
2083
[287]2084/*:VRX CN_Groups_ContextMenu
2085*/
2086CN_Groups_ContextMenu:
2087 if VRInfo("Top") < 1325 & VRGet("CN_Groups", "View") = "Detail" then call _ColumnsMenu "CN_Groups"
2088 else ok = VRMethod( "Contextmenu_Group", "Popup", , , "", "PositionOnItem" )
2089return
2090
2091/*:VRX CN_Groups_DoubleClick
2092*/
2093CN_Groups_DoubleClick:
2094 call Contextmenu_GroupMembers_Click
2095return
2096
2097/*:VRX CN_Groups_EndEdit
2098*/
2099CN_Groups_EndEdit:
2100call beep 880, 20
2101 GRH = VRInfo("Record")
2102
2103 /* write back all editable field to the stems */
2104 call _GroupRecWritebackToStems
2105
2106return
2107
2108/*:VRX CN_UserProperties_BeginEdit
2109*/
2110CN_UserProperties_BeginEdit:
2111 drop NewupValue
2112 drop OldupValue
2113 upRH = VRInfo("Record")
2114 OldupValue = VRMethod("CN_UserProperties","GetFieldData", upRH, upValueFH)
2115 say OldupValue
2116return
2117
2118/*:VRX CN_UserProperties_EndEdit
2119*/
2120CN_UserProperties_EndEdit:
2121 upRH = VRInfo("Record")
2122 NewupValue = VRMethod("CN_UserProperties","GetFieldData", upRH, upValueFH)
2123 say NewupValue
2124 if OldUpValue <> NewupValue then do
2125 newcommand = newcommand||' 'VRMethod("CN_UserProperties","GetFieldData", upRH,upCommandFH)||'"'NewupValue'"'
2126 say "New command: "newcommand
2127 end
2128return
2129
[451]2130/*:VRX CN_Users_Click
2131*/
2132CN_Users_Click:
2133 if VRInfo("Top") < 1325 & VRGet("CN_Users", "View") = "Detail" then return
2134return
2135
[287]2136/*:VRX CN_Users_ContextMenu
2137*/
2138CN_Users_ContextMenu:
[451]2139 say VRInfo("top")
[287]2140 if VRInfo("Top") < 1325 & VRGet("CN_users", "View") = "Detail" then call _ColumnsMenu "CN_users"
2141 else do
2142 RH = VRInfo("Record")
2143 if RH <> "" then do
2144 CurFlags = VRMethod("CN_Users","GetFieldData", RH, FlagsFH)
2145 ok = VRset("Contextmenu_UserProperties", "Enabled", (CurFlags <> ""))
2146 ok = VRMethod( "Contextmenu_user", "Popup", , , "", "PositionOnItem" )
2147 end
2148 end
2149return
2150
2151/*:VRX CN_Users_DoubleClick
2152*/
2153CN_Users_DoubleClick:
[451]2154 if VRInfo("Top") < 340 & VRGet("CN_Users", "View") = "Detail" then return
[287]2155 say 'CN_Users_DoubleClick() started'
2156 RH = VRInfo("Record")
2157 CurFlags = VRMethod("CN_Users","GetFieldData", RH, FlagsFH)
2158 if CurFlags <> "" then window = VRLoadSecondary( "UserProperties", "W" )
2159 say 'CN_Users_DoubleClick() done'
2160return
2161
2162/*:VRX CN_Users_EndEdit
2163*/
2164CN_Users_EndEdit:
[451]2165 if VRInfo("Top") < 340 & VRGet("CN_Users", "View") = "Detail" then do
2166 say VRInfo("Object")
2167 return
2168 end
[287]2169 call beep 880, 20
2170 RH = VRInfo("Record")
[569]2171 say "RH="RH
[287]2172
2173 /* write back all editable field to the stems */
2174 call _UserRecWritebackToStems
2175return
2176
2177/*:VRX Columns_01_Click
2178*/
2179Columns_01_Click:
2180 call _ColumnShow
2181return
2182
2183/*:VRX Columns_02_Click
2184*/
2185Columns_02_Click:
2186 call _ColumnShow
2187return
2188
2189/*:VRX Columns_03_Click
2190*/
2191Columns_03_Click:
2192 call _ColumnShow
2193return
2194
2195/*:VRX Columns_04_Click
2196*/
2197Columns_04_Click:
2198 call _ColumnShow
2199return
2200
2201/*:VRX Columns_05_Click
2202*/
2203Columns_05_Click:
2204 call _ColumnShow
2205return
2206
2207/*:VRX Columns_06_Click
2208*/
2209Columns_06_Click:
2210 call _ColumnShow
2211return
2212
2213/*:VRX Columns_07_Click
2214*/
2215Columns_07_Click:
2216 call _ColumnShow
2217return
2218
2219/*:VRX Columns_08_Click
2220*/
2221Columns_08_Click:
2222 call _ColumnShow
2223return
2224
2225/*:VRX Columns_09_Click
2226*/
2227Columns_09_Click:
2228 call _ColumnShow
2229return
2230
2231/*:VRX Columns_10_Click
2232*/
2233Columns_10_Click:
2234 call _ColumnShow
2235return
2236
2237/*:VRX Columns_11_Click
2238*/
2239Columns_11_Click:
2240 call _ColumnShow
2241return
2242
2243/*:VRX Columns_12_Click
2244*/
2245Columns_12_Click:
2246 call _ColumnShow
2247return
2248
2249/*:VRX Columns_13_Click
2250*/
2251Columns_13_Click:
2252 call _ColumnShow
2253return
2254
2255/*:VRX Columns_14_Click
2256*/
2257Columns_14_Click:
2258 call _ColumnShow
2259return
2260
2261/*:VRX Columns_15_Click
2262*/
2263Columns_15_Click:
2264 call _ColumnShow
2265return
2266
2267/*:VRX Columns_16_Click
2268*/
2269Columns_16_Click:
2270 call _ColumnShow
2271return
2272
2273/*:VRX Columns_17_Click
2274*/
2275Columns_17_Click:
2276 call _ColumnShow
2277return
2278
2279/*:VRX Contextmenu_GroupAdd_Click
2280*/
2281Contextmenu_GroupAdd_Click:
2282 window = VRLoadSecondary( "AddGroup", "W" )
2283return
2284
2285/*:VRX Contextmenu_GroupDel_Click
2286*/
2287Contextmenu_GroupDel_Click:
2288 ok = VRMethod( "CN_Groups", "GetRecordList", "Selected", "SelGRH." )
2289 if SelGRH.0 = 0 then return
2290 SelGNr = VRMethod("CN_Groups", "GetFieldData", SelGRH.1, GNrFH)
2291say 'Selected Group Nr = ' SelGNr
2292 Msg.Title = NLVGetMessage(75)
2293 Msg.Type = "Q"
2294 Msg.Text = NLVGetMessage(76,Groupname.SelGNr,NTGroupname.SelGNr,GGID.SelGNr)
2295 ok = _MsgYesNo()
2296 if ok = 1 then do
2297 if RID.SelGNr <> "" then do
2298 say samba.!netexe' rpc group delete "'NTGroupname.SelGNr'" 'UserCred
2299 address cmd samba.!netexe' rpc group delete "'NTGroupname.SelGNr'" 'UserCred' 2>'samba.!error' 1>'samba.!msg
2300 if RC <> 0 then do
2301 call _SambaShowError
2302 return
2303 end
2304 else call _SambaShowMsg
2305 end
2306 do I = 1 to Username.0
2307 if GID.I = GGID.SelGNr then do
2308 GID.I = UID.I
2309 ok = VRMethod("CN_users","SetFieldData", RH.I, GIDFH, GID.I)
2310 end
2311 end
2312 ok = SysStemDelete("groupname.", SelGNr)
2313 ok = SysStemDelete("gpasswd.", SelGNr)
2314 ok = SysStemDelete("ggid.", SelGNr)
2315 ok = SysStemDelete("gusers.", SelGNr)
2316 ok = SysStemDelete("NTGroupname.",SelGNr)
2317 ok = SysStemDelete("RID.", SelGNr)
2318 ok = SysStemDelete("Gstatus.", SelGNr)
2319 ok = VRMethod("CN_Groups", "RemoveRecord", SelGRH.1)
2320 call PB_Save_Click
2321 call PB_Refresh_Click
2322 end
2323return
2324
2325/*:VRX Contextmenu_GroupDetailView_Click
2326*/
2327Contextmenu_GroupDetailView_Click:
2328 ok = VRSet("CN_Groups", "View", "Detail")
2329return
2330
2331/*:VRX Contextmenu_GroupMap_Click
2332*/
2333Contextmenu_GroupMap_Click:
2334 ok = VRMethod( "CN_Groups", "GetRecordList", "Selected", "SelGRH." )
2335 if SelGRH.0 = 0 then return
2336 SelGNr = VRMethod("CN_Groups", "GetFieldData", SelGRH.1, GNrFH)
2337say 'Selected Group Nr = ' SelGNr
2338 if RID.SelGnr <> "" then do
2339 Msg.Type = "E"
2340 Msg.Title = NLVGetMessage(91)
2341 Msg.Text = NLVGetMessage(114,Groupname.SelGNr)
2342 call _showMsg
2343 return
2344 end
2345 window = VRLoadSecondary( "MapGroup", "W" )
2346return
2347
2348/*:VRX Contextmenu_GroupMembers_Click
2349*/
2350Contextmenu_GroupMembers_Click:
2351 ok = VRMethod( "CN_Groups", "GetRecordList", "Selected", "SelGRH." )
2352 if SelGRH.0 = 0 then return
2353 SelGNr = VRMethod("CN_Groups", "GetFieldData", SelGRH.1, GNrFH)
2354say 'Selected Group Nr = ' SelGNr
2355 CurNTGroupName = NTGroupname.SelGNr
2356 window = VRLoadSecondary( "Group_Members", "W" )
2357return
2358
2359/*:VRX Contextmenu_GroupRebuildScript_Click
2360*/
2361Contextmenu_GroupRebuildScript_Click:
2362 RebuildScript = VRFileDialog( VRWindow(), NLVGetMessage( 99 ), "Save", samba.!bin"\RebuildGroups.CMD", , , )
2363 if RebuildScript = "" then return
2364 ok = SysFileDelete(RebuildScript)
2365 call lineout RebuildScript,'@echo off'
2366 call lineout RebuildScript, 'rem Created by SmbUsers 'VRGet("Main","Hinttext")
2367 do I = 1 to groupname.0
2368 if RID.I <> "" then do
2369 select
2370 when left(translate(NTGroupType.I),4) = "WELL" then Gtype = 'builtin'
2371 when left(translate(NTGroupType.I),4) = "LOCA" then Gtype = 'local'
2372 otherwise Gtype = 'domain'
2373 end
2374 call lineout RebuildScript, 'net groupmap add rid='RID.I' ntgroup="'NTGroupName.I'" unixgroup="'Groupname.I'" type='GType' comment="'NTComment.I'"'
2375 end
2376 end
2377 call lineout RebuildScript, 'echo Done.'
2378 Msg.Title = NLVGetMessage( 98 )
2379 Msg.Type = "I"
2380 Msg.Text = NLVGetMessage( 108, RebuildScript )
2381 call _ShowMsg
2382return
2383
2384/*:VRX Contextmenu_GroupSymbolView_Click
2385*/
2386Contextmenu_GroupSymbolView_Click:
2387 ok = VRSet("CN_Groups", "View", "Icon")
2388return
2389
2390/*:VRX Contextmenu_GroupUnmap_Click
2391*/
2392Contextmenu_GroupUnmap_Click:
2393 ok = VRMethod( "CN_Groups", "GetRecordList", "Selected", "SelGRH." )
2394 if SelGRH.0 = 0 then return
2395 SelGNr = VRMethod("CN_Groups", "GetFieldData", SelGRH.1, GNrFH)
2396say 'Selected Group Nr = ' SelGNr
2397 if RID.SelGnr = "" then do
2398 Msg.Type = "E"
2399 Msg.Title = NLVGetMessage( 95 )
2400 Msg.Text = NLVGetMessage(96, Groupname.SelGNr )
2401 call _showMsg
2402 return
2403 end
2404 Msg.Type = "E"
2405 Msg.Title = NLVGetMessage( 95 )
2406 Msg.Text = NLVGetMessage( 97, NTGroupname.SelGNr, GroupName.SelGNr )
2407 ok = _MsgYesNo()
2408 if ok = 1 then do
2409 blGusers = translate(Gusers.SelGnr,' ',',')
2410 do I = 1 to words(blGusers)
2411 address cmd samba.!netexe' rpc group delmem "'NTGroupname.SelGNr'" 'word(BlGusers,I)' 'UserCred' 2>'samba.!error' 1>'samba.!msg
2412 if RC <> 0 then call _SambaShowError
2413 else call _SambaShowMsg
2414 say samba.!netexe' RC = 'RC
2415 end
2416 say samba.!netexe' groupmap delete ntgroup="'NTGroupname.SelGNr'" 'debuglevel
2417 address cmd samba.!netexe' groupmap delete ntgroup="'NTGroupname.SelGNr'" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2418 if RC <> 0 then call _SambaShowError
2419 else call _SambaShowMsg
2420 call PB_Refresh_Click
2421 end
2422return
2423
2424/*:VRX Contextmenu_GroupWellKnown_Click
2425*/
2426Contextmenu_GroupWellKnown_Click:
2427 if Groupname.0 <> 0 then do
2428 Msg.Title = NLVGetMessage( 92 )
2429 Msg.Text = NLVGetMessage( 93 )
2430 Msg.Type = "W"
2431 call _ShowMsg
2432 return
2433 end
2434 call _kLIBCGroupADD "admins", 512
2435 call _kLIBCGroupADD "users", 513
2436 call _kLIBCGroupADD "guests", 514
2437 call _kLIBCGroupADD "machines", 515
2438 call _kLIBCGroupADD "dc", 516
2439 call _kLIBCGroupADD "certadmin", 517
2440 call _kLIBCGroupADD "schemeadmin", 518
2441 call _kLIBCGroupADD "entadmin", 519
2442 call _kLIBCGroupADD "poladmin", 520
2443 call PB_Save_Click
2444
2445 address cmd samba.!netexe' groupmap add rid=512 ntgroup="Domain Admins" unixgroup="admins" type=domain comment="Domain Administrators" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2446 if RC <> 0 then call _SambaShowError
2447
2448 address cmd samba.!netexe' groupmap add rid=513 ntgroup="Domain Users" unixgroup="users" type=domain comment="Domain Users" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2449 if RC <> 0 then call _SambaShowError
2450
2451 address cmd samba.!netexe' groupmap add rid=514 ntgroup="Domain Guests" unixgroup="guests" type=domain comment="Domain Guest Accounts" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2452 if RC <> 0 then call _SambaShowError
2453
2454 address cmd samba.!netexe' groupmap add rid=515 ntgroup="Domain Computers" unixgroup="machines" type=domain comment="Domain Computers" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2455 if RC <> 0 then call _SambaShowError
2456
2457 address cmd samba.!netexe' groupmap add rid=516 ntgroup="Domain Controllers" unixgroup="dc" type=domain comment="Domain Controllers" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2458 if RC <> 0 then call _SambaShowError
2459
2460 address cmd samba.!netexe' groupmap add rid=517 ntgroup="Domain Certificate Admins" unixgroup="certadmin" type=domain comment="Domain Certificate Administrators" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2461 if RC <> 0 then call _SambaShowError
2462
2463 address cmd samba.!netexe' groupmap add rid=518 ntgroup="Domain Scheme Admins" unixgroup="schemeadmin" type=domain comment="Domain Scheme Administrators" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2464 if RC <> 0 then call _SambaShowError
2465
2466 address cmd samba.!netexe' groupmap add rid=519 ntgroup="Domain Enterprise Admins" unixgroup="entadmin" type=domain comment="Domain Enterprise Administrators" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2467 if RC <> 0 then call _SambaShowError
2468
2469 address cmd samba.!netexe' groupmap add rid=520 ntgroup="Domain Policy Admins" unixgroup="poladmin" type=domain comment="Domain Policy Administrators" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
2470 if RC <> 0 then call _SambaShowError
2471
2472 Msg.Title = NLVGetMessage( 92 )
2473 Msg.Type = "I"
2474 Msg.Text = NLVGetMessage( 94 )
2475 call _ShowMsg
2476 call PB_Refresh_Click
2477return
2478
2479/*:VRX Contextmenu_UserAdd_Click
2480*/
2481Contextmenu_UserAdd_Click:
2482 IF options.!debug == 1 THEN say 'Contextmenu_UserAdd_Click() started'
2483 ok = VRMethod( "CN_Users", "GetRecordList", "Selected", "SelRH." )
2484 if SelRH.0 = 0 then do
2485 IF options.!debug == 1 THEN say 'Contextmenu_UserAdd_Click() done, aborted'
2486 return
2487 end
2488 SelNr = VRMethod("CN_Users", "GetFieldData", SelRH.1, NrFH)
2489/* IF options.!debug == 1 THEN say ' Flags.SelNr = "'flags.SelNr'"' */
2490 if flags.SelNr = "" then IsUnixUser = 1
2491 else IsUnixUser = 0
2492 IF options.!debug == 1 THEN say ' Selected User Nr = 'SelNr
2493 IF options.!debug == 1 THEN say ' Is kLIBC User only? 'IsUnixUser
2494 window = VRLoadSecondary( "AddUser", "W" )
2495 IF options.!debug == 1 THEN say 'Contextmenu_UserAdd_Click() done'
2496return
2497
2498/*:VRX Contextmenu_UserDel_Click
2499*/
2500Contextmenu_UserDel_Click:
2501 IF options.!debug == 1 THEN say 'Contextmenu_UserDel_Click() started'
2502 ok = VRMethod( "CN_Users", "GetRecordList", "Selected", "SelRH." )
2503 if SelRH.0 = 0 then return
2504 SelNr = VRMethod("CN_Users", "GetFieldData", SelRH.1, NrFH)
2505 IF options.!debug == 1 THEN say ' Selected User Nr = 'SelNr
2506 Msg.Title = NLVGetMessage(50)
2507 Msg.Text = NLVGetMessage(51, '"'Username.SelNr'" (UID: 'UID.SelNr')')
2508 ok = _MsgYesNo()
2509 if ok = 1 then do
2510 if flags.SelNr <> "" then do
2511 say ' 'samba.!netexe' rpc user delete "'Username.SelNr'" 'UserCred' 'Debuglevel' 2>'samba.!error' 1>'samba.!msg
2512 address cmd samba.!netexe' rpc user delete "'Username.SelNr'" 'UserCred' 'Debuglevel' 2>'samba.!error' 1>'samba.!msg
2513 if rc <> 0 then call _SambaShowError; else call _SambaShowMsg
2514 if swatauth then do
2515 say ' 'samba.!htpasswdexe' -D "'swatusers'" 'Username.SelNr
2516 address cmd samba.!htpasswdexe' -D "'swatusers'" 'Username.SelNr' 2>'samba.!error' 1>'samba.!msg
2517 if rc <> 0 then call _SambaShowError
2518 else call _SambaShowMsg
2519 end
2520 end
2521 else do /* kLIBC user only */
2522 ExUserName = Username.SelNr
2523 ExUID = UID.SelNr
2524 ExGID = GID.SelNr
2525 ok = SysStemDelete("username.",SelNr)
2526 ok = SysStemDelete("password.",SelNr)
2527 ok = SysStemDelete("uid.",SelNr)
2528 ok = SysStemDelete("gid.",SelNr)
2529 ok = SysStemDelete("loginclass.",SelNr)
2530 ok = SysStemDelete("pwchange.",SelNr)
2531 ok = SysStemDelete("deact.",SelNr)
2532 ok = SysStemDelete("gecos.",SelNr)
2533 ok = SysStemDelete("home.",SelNr)
2534 ok = SysStemDelete("shell.",SelNr)
2535 ok = SysStemDelete("status.",SelNr)
2536 ok = SysStemDelete("lmhash.",SelNr)
2537 ok = SysStemDelete("nthash.",SelNr)
2538 ok = SysStemDelete("flags.",SelNr)
2539 ok = SysStemDelete("lct.",SelNr)
2540 do I = 1 to gusers.0
2541 blGUsers = translate(Gusers.I,' ',',')
2542 UPos = wordpos(translate(ExUserName),translate(blGusers))
2543 if Upos > 0 then do
2544 blGUsers = delword(BlGusers,UPos,1)
2545 Gusers.I = translate(blGusers,',',' ')
2546 end
2547 end
2548 call PB_Save_Click
2549 Msg.Title = NLVGetMessage(50)
2550 Msg.Text = NLVGetMessage(53, '"'ExUsername'"' )
2551 Msg.Type = 'I'
2552 call _ShowMsg
2553 end
2554 call PB_Refresh_Click
2555 end
2556 IF options.!debug == 1 THEN say 'Contextmenu_UserDel_Click() done'
2557return
2558
2559/*:VRX Contextmenu_UserDetailView_Click
2560*/
2561Contextmenu_UserDetailView_Click:
2562 ok = VRSet("CN_users", "View", "Detail")
2563return
2564
2565/*:VRX Contextmenu_UserJoinGroup_Click
2566*/
2567Contextmenu_UserJoinGroup_Click:
2568 ok = VRMethod( "CN_Users", "GetRecordList", "Selected", "SelRH." )
2569 if SelRH.0 = 0 then return
2570 SelNr = VRMethod("CN_Users", "GetFieldData", SelRH.1, NrFH)
2571 say 'Selected User Nr = ' SelNr
2572 window = VRLoadSecondary( "Join_Group", "W" )
2573return
2574
2575/*:VRX Contextmenu_UserLeaveGroup_Click
2576*/
2577Contextmenu_UserLeaveGroup_Click:
2578 ok = VRMethod( "CN_Users", "GetRecordList", "Selected", "SelRH." )
2579 if SelRH.0 = 0 then return
2580 SelNr = VRMethod("CN_Users", "GetFieldData", SelRH.1, NrFH)
2581 say 'Selected User Nr = ' SelNr
2582 window = VRLoadSecondary( "Leave_Group", "W" )
2583return
2584
2585/*:VRX Contextmenu_UserProperties_Click
2586*/
2587Contextmenu_UserProperties_Click:
2588 window = VRLoadSecondary( "UserProperties", "W" )
2589return
2590
2591/*:VRX Contextmenu_UserSymbolView_Click
2592*/
2593Contextmenu_UserSymbolView_Click:
2594 ok = VRSet("CN_users", "View", "Icon")
2595return
2596
2597/*:VRX DDCB_GID_Change
2598*/
2599DDCB_GID_Change:
2600 ok = VRSet("DT_PrimaryGroupName","Caption","UID")
2601 if VRGet("DDCB_GID","Value") = NextUID then return
2602 do x = 1 to groupname.0
2603 if VRGet("DDCB_GID","Value") = GGID.x then do
2604 ok = VRSet("DT_PrimaryGroupName","Caption",groupname.x' ('NTGroupName.x')')
2605 leave
2606 end
2607 end
2608return
2609
2610/*:VRX DDCB_Policy_Change
2611*/
2612DDCB_Policy_Change:
2613 say samba.!pdbeditexe' -P "'VRGet("DDCB_Policy","Value")'" 'DebugLevel' 1>'samba.!msg' 2>'samba.!error
2614 address cmd samba.!pdbeditexe' -P "'VRGet("DDCB_Policy","Value")'" 'DebugLevel' 1>'samba.!msg
2615 PolDesc = linein(samba.!msg)
2616 PolValue = linein(samba.!msg)
2617 ok = stream(Samba.!msg,'c','close')
2618
2619 parse var PolDesc . ':' PolDesc
2620 parse var PolValue . ':' PolValue
2621say strip(PolValue)
2622say strip(PolDesc)
2623 ok = VRset("EF_PolValue","Value",strip(PolValue))
2624 ok = VRSet("GB_Policy","HintText",strip(PolDesc))
2625return
2626
2627/*:VRX EF_Comment_Change
2628*/
2629EF_Comment_Change:
2630 if pos(':',VRGet("EF_GroupName","Value")) > 0 then ok = VRset("EF_Groupname","Value",translate(VRGet("EF_GroupName","Value"),'-',':'))
2631return
2632
2633/*:VRX EF_Description_Change
2634*/
2635EF_Description_Change:
2636 if VRGet("EF_Description","value") <> "" then do
2637 SecondStage = 1
2638 end
2639 else SecondStage = (SecondStage | 0)
2640return
2641
2642/*:VRX EF_GGID_Change
2643*/
2644EF_GGID_Change:
2645 if VRGet("EF_GGID","Value") <> "" then do
2646 if datatype(VRGet("EF_GGID","Value")) <> "NUM" then ok = VRSet("EF_GGID","Value","")
2647 end
2648return
2649
2650/*:VRX EF_Groupname_Change
2651*/
2652EF_Groupname_Change:
2653 if pos(':',VRGet("EF_GroupName","Value")) > 0 then ok = VRset("EF_Groupname","Value",translate(VRGet("EF_GroupName","Value"),'-',':'))
2654return
2655
2656/*:VRX EF_Home_Change
2657*/
2658EF_Home_Change:
2659 if pos('NONEXISTENT', translate(VRGet("EF_Home", "Value"))) > 0 then do
2660 ok = VRset("PB_CreateHome","Enabled",0)
2661 return
2662 end
2663
2664 if \VRFileExists( VRGet("EF_Home", "Value") ) then do
2665 ok = VRSet("EF_Home","ForeColor", "Red")
2666 ok = VRset("PB_CreateHome","Enabled",\VRGet("CB_NoHome","set"))
2667 end
2668 else do
2669 ok = VRSet("EF_Home","ForeColor", "<default>")
2670 ok = VRset("PB_CreateHome","Enabled",0)
2671 end
2672return
2673
2674/*:VRX EF_LoginPassword_KeyPress
2675*/
2676EF_LoginPassword_KeyPress:
2677 obj = VRInfo( "Object" )
2678 keystr = VRGet( obj, "KeyString" )
2679/* say keystr */
2680 select
[333]2681 when keystr = "{Enter}" then call PB_LOGIN_OK_Click
2682 when keystr = "{Newline}" then call PB_LOGIN_OK_Click
2683 when keystr = "{Esc}" then call PB_LOGIN_CANCEL_Click
[287]2684 otherwise nop
2685 end
2686return
2687
2688/*:VRX EF_LoginUser_KeyPress
2689*/
2690EF_LoginUser_KeyPress:
2691 obj = VRInfo( "Object" )
2692 keystr = VRGet( obj, "KeyString" )
2693/* say keystr */
2694 select
2695 when keystr = "{Enter}" then ok = VRMethod( "EF_LoginPassword", "SetFocus" )
2696 when keystr = "{Newline}" then ok = VRMethod( "EF_LoginPassword", "SetFocus" )
[333]2697 when keystr = "{Esc}" then call PB_LOGIN_CANCEL_Click
[287]2698 otherwise nop
2699 end
2700return
2701
2702/*:VRX EF_upPassword_Change
2703*/
2704EF_upPassword_Change:
2705 ok = VRSet("CB_upSWAT_Allowed","Enabled",1)
2706return
2707
2708/*:VRX EF_Username_Change
2709*/
2710EF_Username_Change:
[579]2711 IF options.!debug == 1 THEN say 'EF_Username_Change started'
[287]2712 if pos(':',VRGet("EF_Username","Value")) > 0 then ok = VRset("EF_Username","Value",translate(VRGet("EF_Username","Value"),'-',':'))
2713 ok = VRSet("EF_Home","Value", Samba.!homes'\'VRGet("EF_Username","Value"))
2714 call CB_MachineAccount_Click
2715 if VRGet("EF_Username","Value") = "" then do
2716 if IsUnixUser then do
2717 IsUnixuser = 0
2718 drop UnixUserNr
2719 ok = VRSet( "DT_UID", "BackColor", "<default>")
2720 ok = VRSet( "DT_UID", "ForeColor", "<default>")
2721 NextUID = _GetNextUID(VRGet("EF_Username","value"))
2722 IsUnixUser = 0
2723 ok = VRSet("DT_UID","Caption", "UID: "NextUID)
2724 ok = VRSet("DDCB_GID","Value", NextUID)
2725 ok = VRMethod( "DDCB_GID", "Reset")
2726 ok = VRMethod( "DDCB_GID", "AddString", NextUID)
2727 ok = VRMethod( "DDCB_GID", "AddStringList", "GGID.")
2728 ok = VRSet("EF_GECOS","Value","")
2729 ok = VRSet("EF_Home","Value","")
2730 end
2731 end
2732 else do
2733 NextUID = _GetNextUID(VRGet("EF_Username","value"))
2734 ok = VRSet("DT_UID","Caption", "UID: "NextUID)
2735 if NextUID > 65000 then do
2736 ok = VRset("EF_Description","Value",NLVGetMessage(116))
2737 ok = VRset("CB_NoPassword","set", 1)
2738 call CB_NoPassword_Click
2739 ok = VRset("DDCB_GID","value",NextUID)
2740 ok = VRMethod("DDCB_GID","addString", NextUID)
2741 end
2742 else ok = VRset("DDCB_GID","value","513")
2743 end
[579]2744 IF options.!debug == 1 THEN say 'EF_Username_Change done'
[287]2745return
2746
2747/*:VRX EF_Username_LostFocus
2748*/
2749EF_Username_LostFocus:
2750 do I = 1 to Username.0
2751 if translate(Username.I) = translate(VRGet("EF_username","value")) then do
2752 if flags.I = "" then do
2753 IsUnixuser = 1
2754 UnixUserNr = I
2755 ok = VRSet( "DT_UID", "BackColor", "DarkGreen")
2756 ok = VRSet( "DT_UID", "ForeColor", "White")
2757 ok = VRSet( "DT_UID", "Caption", "UID: "UID.I)
2758 ok = VRSet( "EF_GECOS","Value", GECOS.I)
2759 ok = VRSet( "DDCB_GID","Value", GID.I)
2760 ok = VRMethod( "DDCB_GID", "Reset")
2761 ok = VRMethod( "DDCB_GID", "AddString", UID.I)
2762 ok = VRMethod( "DDCB_GID", "AddStringList", "GGID.")
2763 ok = VRSet( "EF_Home","Value", _PathStrOS2(Home.I))
2764 end
2765 else do
2766 Msg.Type = "E"
2767 Msg.Text = NLVGetMessage( 105)
2768 call _ShowMsg
2769 ok = VRSet("EF_username","value","")
2770 ok = VRMethod("EF_username","SetFocus")
2771 end
2772 leave
2773 end
2774 end
2775return
2776
2777/*:VRX Fini
2778*/
2779Fini:
2780 window = VRWindow()
2781 call VRSet window, "Visible", 0
2782 drop window
2783return 0
2784
2785/*:VRX GetBootDrive
2786*/
2787GetBootDrive:
2788/* Use SysBootDrive if possible */
2789If Rxfuncadd('SysBootDrive', 'RexxUtil', 'SysBootDrive') Then
2790 Return Left(Value('RUNWORKPLACE',,'OS2ENVIRONMENT'),2)
2791Else
2792 Return SysBootDrive()
2793
2794
2795/*:VRX Group_Members_Close
2796*/
2797Group_Members_Close:
2798 call Group_Members_Fini
2799return
2800
2801/*:VRX Group_Members_Create
2802*/
2803Group_Members_Create:
2804 call Group_Members_Init
2805 ok = VRSet("Group_Members","Caption", NLVGetMessage(89)||' "'CurNTGroupName'"')
2806 CALL NLVSetText 'PB_GroupMembersOK', 'Caption', 2
2807
2808 ok = VRMethod("LB_GroupMembers","Reset")
2809 ok = VRSet("Main", 'Pointer', 'Wait' )
2810 say samba.!netexe' rpc group members "'CurNTGroupName'" 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
2811 address cmd samba.!netexe' rpc group members "'CurNTGroupName'" 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
2812 if RC <> 0 then call _SambaShowError
2813 else do
2814 do while lines(samba.!msg) <> 0
2815 groupmember = linein(samba.!msg)
2816 say groupmember
2817 ok = VRMethod("LB_GroupMembers","AddString", groupmember)
2818 end
2819 ok = stream(Samba.!msg,"c","close")
2820 end
2821 ok = VRSet("Main", 'Pointer', '<default>' )
2822return
2823
2824/*:VRX Group_Members_Fini
2825*/
2826Group_Members_Fini:
2827 window = VRInfo( "Window" )
2828 call VRDestroy window
2829 drop window
2830return
2831/*:VRX Group_Members_Init
2832*/
2833Group_Members_Init:
2834 window = VRInfo( "Object" )
2835 if( \VRIsChildOf( window, "Notebook" ) ) then do
2836 call VRMethod window, "CenterWindow"
2837 call VRSet window, "Visible", 1
2838 call VRMethod window, "Activate"
2839 end
2840 drop window
2841return
2842
2843/*:VRX Halt
2844*/
2845Halt:
2846 signal _VREHalt
2847return
2848
2849/*:VRX Init
2850*/
2851Init:
2852window = VRWindow()
2853call VRMethod window, "CenterWindow"
2854call VRSet window, "Visible", 0
2855call VRMethod window, "Activate"
2856drop window
2857return
2858
2859/*:VRX IPB_AccountFlags_Click
2860*/
2861IPB_AccountFlags_Click:
2862 ok = VRSet("IPB_AccountFlags","PicturePath", "#16;#16")
2863 ok = VRSet("IPB_Profile","PicturePath", "#27;#27")
2864 ok = VRSet("IPB_Memberships","PicturePath", "#28;#28")
2865
2866 ok = VRSet("GB_Flags","Left", 140)
2867 ok = VRSet("GB_Flags","Top", 140)
2868 ok = VRSet("GB_Flags","Width", VRGet("GB_upOuter","Width") - 280)
2869 ok = VRSet("GB_Flags","Height",VRGet("GB_upOuter","Height") - 280)
2870 ok = VRSet("GB_GroupMemberShips","Visible", 0)
2871 ok = VRset("GB_Profile", "Visible", 0)
2872 ok = VRSet("GB_Flags","Visible", 1)
2873return
2874
2875/*:VRX IPB_GroupAdd_Click
2876*/
2877IPB_GroupAdd_Click:
2878 call Contextmenu_GroupAdd_Click
2879return
2880
2881/*:VRX IPB_GroupDel_Click
2882*/
2883IPB_GroupDel_Click:
2884 call Contextmenu_GroupDel_Click
2885return
2886
2887/*:VRX IPB_GroupMap_Click
2888*/
2889IPB_GroupMap_Click:
2890 call Contextmenu_GroupMap_Click
2891return
2892
2893/*:VRX IPB_GroupScript_Click
2894*/
2895IPB_GroupScript_Click:
2896 call Contextmenu_GroupRebuildScript_Click
2897return
2898
2899/*:VRX IPB_GroupUnMap_Click
2900*/
2901IPB_GroupUnMap_Click:
2902 call Contextmenu_GroupUnMap_Click
2903return
2904
2905/*:VRX IPB_GroupWellknown_Click
2906*/
2907IPB_GroupWellknown_Click:
2908 call Contextmenu_GroupWellKnown_Click
2909return
2910
2911/*:VRX IPB_Memberships_Click
2912*/
2913IPB_Memberships_Click:
2914 ok = VRSet("IPB_AccountFlags","PicturePath", "#26;#26")
2915 ok = VRSet("IPB_Profile","PicturePath", "#27;#27")
2916 ok = VRSet("IPB_Memberships","PicturePath", "#18;#18")
2917
2918 ok = VRSet("GB_GroupMemberShips","Left", 140)
2919 ok = VRSet("GB_GroupMemberShips","Top", 140)
2920 ok = VRSet("GB_GroupMemberShips","Width", VRGet("GB_upOuter","Width") - 280)
2921 ok = VRSet("GB_GroupMemberShips","Height",VRGet("GB_upOuter","Height") - 280)
2922 ok = VRSet("GB_GroupMemberShips","Visible", 1)
2923 ok = VRset("GB_Flags", "Visible", 0)
2924 ok = VRset("GB_Profile", "Visible", 0)
2925 ok = VRMethod("LB_upGroups","Reset")
2926 ok = VRSet("Main", 'Pointer', 'Wait' )
2927 address cmd samba.!netexe' rpc user info 'Username.CurUserNr' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
2928 if RC <> 0 then call _SambaShowError
2929 else do
2930 do while lines(samba.!msg) <> 0
2931 ok = VRMethod("LB_upGroups","AddString", linein(samba.!msg))
2932 end
2933 ok = stream(Samba.!msg,"c","close")
2934 end
2935 ok = VRSet("Main", 'Pointer', '<default>' )
2936return
2937
2938/*:VRX IPB_Paper_Click
2939*/
2940IPB_Paper_Click:
2941 if VRInfo("Left") > VRInfo("Top") then call Activate min(CurrentPageNr+1,Pages)
2942 if VRInfo("Left") <= VRInfo("Top") then call Activate max(CurrentPageNr-1,1)
2943return
2944
2945/*:VRX IPB_Profile_Click
2946*/
2947IPB_Profile_Click:
2948 ok = VRSet("IPB_AccountFlags","PicturePath", "#26;#26")
2949 ok = VRSet("IPB_Profile","PicturePath", "#17;#17")
2950 ok = VRSet("IPB_Memberships","PicturePath", "#28;#28")
2951
2952 ok = VRSet("GB_Profile","Left", 140)
2953 ok = VRSet("GB_Profile","Top", 140)
2954 ok = VRSet("GB_Profile","Width", VRGet("GB_upOuter","Width") - 280)
2955 ok = VRSet("GB_Profile","Height",VRGet("GB_upOuter","Height") - 280)
2956 ok = VRSet("CN_UserProperties","Width",VRGet("GB_Profile","Width")-240)
2957 ok = VRset("GB_Flags", "Visible", 0)
2958 ok = VRSet("GB_GroupMemberShips","Visible", 0)
2959 ok = VRSet("GB_Profile","Visible", 1)
2960return
2961
2962/*:VRX IPB_UserAdd_Click
2963*/
2964IPB_UserAdd_Click:
2965 call Contextmenu_UserAdd_Click
2966return
2967
2968/*:VRX IPB_UserDel_Click
2969*/
2970IPB_UserDel_Click:
2971 call Contextmenu_UserDel_Click
2972return
2973
2974/*:VRX IPB_UserJoinGroup_Click
2975*/
2976IPB_UserJoinGroup_Click:
2977 call Contextmenu_UserJoinGroup_Click
2978return
2979
2980/*:VRX IPB_UserLeaveGroup_Click
2981*/
2982IPB_UserLeaveGroup_Click:
2983 call Contextmenu_UserLeaveGroup_Click
2984return
2985
2986/*:VRX Join_Group_Close
2987*/
2988Join_Group_Close:
2989 call Join_Group_Fini
2990return
2991
2992/*:VRX Join_Group_Create
2993*/
2994Join_Group_Create:
2995 call Join_Group_Init
2996 CALL NLVSetText 'Join_Group', 'Caption', 80
2997 CALL NLVSetText 'DT_JoinGroup', 'Caption', 81
2998 CALL NLVSetText 'PB_JoinOK', 'Caption', 2
2999 CALL NLVSetText 'PB_JoinCancel', 'Caption', 3
3000
3001 call VRSet "LB_Groups", "Painting", 0
3002 ok = VRMethod("LB_Groups","AddStringList", "NTGroupName.")
3003 address cmd samba.!netexe' rpc user info 'Username.SelNr' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3004 if RC <> 0 then call _SambaShowError
3005 else do
3006 do while lines(samba.!msg) <> 0
3007 AlreadyMember = linein(samba.!msg)
3008 ok = VRMethod( "LB_Groups", "DeleteString", AlreadyMember )
3009 if settings.!FixErrors then do
3010 do I = 1 to NTGroupName.0
3011 if AlreadyMember = NTGroupName.I then do
3012 if pos(Username.SelNr,GUsers.I) = 0 then do
3013 Gusers.I = Username.SelNr','Gusers.I
3014 ok = VRMethod("CN_Groups", "SetFieldData", GRH.I, GUsersFH, Gusers.I)
3015 call _GroupWrite
3016 end
3017 end
3018 end
3019 end
3020 end
3021 ok = stream(Samba.!msg,"c","close")
3022 end
3023 call VRSet "LB_Groups", "Painting", 1
3024return
3025
3026/*:VRX Join_Group_Fini
3027*/
3028Join_Group_Fini:
3029 window = VRInfo( "Window" )
3030 call VRDestroy window
3031 drop window
3032return
3033/*:VRX Join_Group_Init
3034*/
3035Join_Group_Init:
3036 window = VRInfo( "Object" )
3037 if( \VRIsChildOf( window, "Notebook" ) ) then do
3038 call VRMethod window, "CenterWindow"
3039 call VRSet window, "Visible", 1
3040 call VRMethod window, "Activate"
3041 end
3042 drop window
3043return
3044
3045/*:VRX Leave_Group_Close
3046*/
3047Leave_Group_Close:
3048 call Leave_Group_Fini
3049return
3050
3051/*:VRX Leave_Group_Create
3052*/
3053Leave_Group_Create:
3054 call Leave_Group_Init
3055 CALL NLVSetText 'Leave_Group', 'Caption', 85
3056 CALL NLVSetText 'DT_LeaveGroup', 'Caption', 86
3057 CALL NLVSetText 'PB_LeaveOK', 'Caption', 2
3058 CALL NLVSetText 'PB_LeaveCancel', 'Caption', 3
3059 address cmd samba.!netexe' rpc user info 'Username.SelNr' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3060 if RC <> 0 then call _SambaShowError
3061 else do
3062 call VRSet "LB_LeaveGroups", "Painting", 0
3063 do while lines(samba.!msg) <> 0
3064 ok = VRMethod("LB_LeaveGroups","AddString", linein(samba.!msg))
3065 end
3066 ok = stream(Samba.!msg,"c","close")
3067 call VRSet "LB_LeaveGroups", "Painting", 1
3068 end
3069return
3070
3071/*:VRX Leave_Group_Fini
3072*/
3073Leave_Group_Fini:
3074 window = VRInfo( "Window" )
3075 call VRDestroy window
3076 drop window
3077return
3078/*:VRX Leave_Group_Init
3079*/
3080Leave_Group_Init:
3081 window = VRInfo( "Object" )
3082 if( \VRIsChildOf( window, "Notebook" ) ) then do
3083 call VRMethod window, "CenterWindow"
3084 call VRSet window, "Visible", 1
3085 call VRMethod window, "Activate"
3086 end
3087 drop window
3088return
3089
3090/*:VRX Main_Close
3091*/
3092Main_Close:
3093 call Quit
3094return
3095
3096/*:VRX Main_Create
3097*/
3098Main_Create:
3099 options.!debug = 0
3100 /* Default title */
3101 Msg.Title = VRGet("Main", "Caption")
3102
3103 call _LoadOtherFuncs
3104 call _IniRead
3105 call _NLVSetup
3106
3107 /* Nationalized title */
3108 Msg.Title = VRGet("Main", "Caption")
3109 call _InitTempdir
3110 call _ParseCommandLine
3111
3112 StartSamba = \_SambaRunning()
3113
3114 call _SambaInit
3115 if ErrorState then call _OnErrorDisable
[926]3116
[287]3117 if StartSamba then do
3118 address cmd samba.!smbcmd' start'
3119 end
3120 if \_SambaRunning() then do
3121 Msg.Text = NLVGetMessage(107)
3122 Msg.Type = "E"
3123 call _ShowMsg
3124 call Quit
3125 return
3126 end
3127 else if StartSamba then do
3128 Msg.Text = NLVGetMessage(109)
3129 Msg.Type = "I"
3130 call _ShowMsg
3131 end
3132
3133 call _SambaGetProperties
3134
3135 call _FindHtpasswd
3136
3137 call _ContainersInit
3138
3139 call _MasterPasswdRead
3140 call _Login
3141
3142 call _SmbpasswdRead
3143 call _SmbUserMapRead
3144 call _GroupRead
3145 call _SmbGroupsRead
3146
3147 call _GUIInit
3148
3149 call _ContainerPopulate
3150 call _ContGroupsPopulate
3151 call _PoliciesPopulate
3152
3153 ok = VRMethod("PB_Exit","SetFocus")
3154 call TAB_1_Click
3155 call Main_Resize
3156return
3157/*:VRX Main_Resize
3158*/
3159Main_Resize:
3160 IF options.!debug == 1 THEN say 'Main_Resize() started.'
3161 MainWin = "Main"
3162 ok = VRSet(MainWin,"Painting", 0)
3163/* ok = VRset(MainWin,"Visible", 0) */
3164 ok = VRSet(MainWin,"Width",max(VRget(MainWin,"Width"),Pages*TabWidth+300))
3165 ok = VRset("GB_Main","width",VRget(MainWin,"Width")-150)
3166 ok = VRset("GB_Main","Height",VRget(MainWin,"Height")-1175-240)
3167 ok = VRset("GB_Main2","width",VRget("GB_Main","Width")-260)
3168 ok = VRset("GB_Main2","Height",VRget("GB_Main","Height")-275)
3169 ok = VRset("GB_VerticalLine","Left",VRget("GB_Main2","Width")-60)
3170 ok = VRset("GB_VerticalLine","Height",VRget("GB_Main2","Height")-410)
3171 ok = VRset("IPB_Paper","Left",VRget("GB_Main2","width")-420)
3172 ok = VRset("GB_HorLineTop","Width",VRget("GB_Main2","width")-440)
3173 ok = VRset("GB_HorLineTop","Width",VRget("GB_Main2","width")-440)
3174 ok = VRset("GB_LineSubtitle","Width",VRget("GB_Main2","width")-480)
3175 do I = 1 to Pages
3176 /* say 'Page_'I'='max(PageHeight,VRget("GB_Main2","Height")-600) */
3177 ok = VRSet("Page_"I,"Height", max(PageHeight,VRget("GB_Main2","Height")-600))
3178 ok = VRSet("Page_"I,"Width", max(PageWidth,VRget("GB_Main2","Width")-450))
3179 end
3180
3181 /* Main window buttons */
3182 ok = VRSEt("PB_RPC", "top",VRGet("GB_Main","Height")+305)
3183 ok = VRSEt("PB_Help", "top",VRGet("GB_Main","Height")+305)
3184 ok = VRSEt("PB_Save", "top",VRGet("GB_Main","Height")+305)
3185 ok = VRSEt("PB_Refresh","top",VRGet("GB_Main","Height")+305)
3186 ok = VRSEt("PB_Exit", "top",VRGet("GB_Main","Height")+305)
3187 ok = VRSEt("PB_About", "top",VRGet("GB_Main","Height")+305)
3188
3189 /* Users page */
3190 ok = VRset("CN_Users","Top", 120)
3191 ok = VRset("CN_Users","Left", 20)
3192 ok = VRset("CN_Users","Width", VRGet("Page_1","Width")-600)
3193 ok = VRset("CN_Users","Height", VRGet("Page_1","Height")-360)
3194 ok = VRset("CB_SmbOnly","Left", 20)
3195 ok = VRset("CB_SmbOnly","Top", VRGet("CN_Users","Height")+120 )
3196 ok = VRSet("IPB_UserAdd", "Top", 120 )
3197 ok = VRSet("IPB_UserAdd", "Left", VRGet("CN_Users","Width") + 80 )
3198 ok = VRSet("IPB_UserDel", "Top", 720 )
3199 ok = VRSet("IPB_UserDel", "Left", VRGet("CN_Users","Width") + 80 )
3200 ok = VRSet("IPB_UserJoinGroup", "Top", 1320 )
3201 ok = VRSet("IPB_UserJoinGroup", "Left", VRGet("CN_Users","Width") + 80 )
3202 ok = VRSet("IPB_UserLeaveGroup", "Top", 1920 )
3203 ok = VRSet("IPB_UserLeaveGroup", "Left", VRGet("CN_Users","Width") + 80 )
3204
3205
3206 /* Groups page */
3207 ok = VRset("CN_Groups","Top", 120)
3208 ok = VRset("CN_Groups","Left", 20)
3209 ok = VRset("CN_Groups","Width", VRGet("Page_2","Width")-600)
3210 ok = VRset("CN_Groups","Height", VRGet("Page_2","Height")-360)
3211 ok = VRSet("IPB_GroupAdd", "Top", 120 )
3212 ok = VRSet("IPB_GroupAdd", "Left", VRGet("CN_Users","Width") + 80 )
3213 ok = VRSet("IPB_GroupMap", "Top", 720 )
3214 ok = VRSet("IPB_GroupMap", "Left", VRGet("CN_Users","Width") + 80 )
3215 ok = VRSet("IPB_GroupDel", "Top", 1320 )
3216 ok = VRSet("IPB_GroupDel", "Left", VRGet("CN_Users","Width") + 80 )
3217 ok = VRSet("IPB_GroupUnMap", "Top", 1920 )
3218 ok = VRSet("IPB_GroupUnMap", "Left", VRGet("CN_Users","Width") + 80 )
3219 ok = VRSet("IPB_GroupScript", "Top", 2520 )
3220 ok = VRSet("IPB_GroupScript", "Left", VRGet("CN_Users","Width") + 80 )
3221 ok = VRSet("IPB_GroupWellknown", "Top", 3120 )
3222 ok = VRSet("IPB_GroupWellknown", "Left", VRGet("CN_Users","Width") + 80 )
3223
3224 ok = VRset("CB_SmbGroupsOnly","Left", 20)
3225 ok = VRset("CB_SmbGroupsOnly","Top", VRGet("CN_Groups","Height")+120 )
3226
3227 ButtonDist= 1120
3228 ButtonNr = 6
3229 ButtonPos = format(max((VRget(MainWin,"Width")-ButtonDist*ButtonNr)/2,0),,0)
3230 ok = VRSEt("PB_RPC", "left",ButtonPos+ButtonDist*(ButtonNr-6))
3231 ok = VRSEt("PB_Save", "left",ButtonPos+ButtonDist*(ButtonNr-5))
3232 ok = VRSEt("PB_Refresh","left",ButtonPos+ButtonDist*(ButtonNr-4))
3233 ok = VRSEt("PB_Help", "left",ButtonPos+ButtonDist*(ButtonNr-3))
3234 ok = VRSEt("PB_About", "left",ButtonPos+ButtonDist*(ButtonNr-2))
3235 ok = VRSEt("PB_Exit", "left",ButtonPos+ButtonDist*(ButtonNr-1))
3236
3237 ok = VRSEt("PB_RPC", "width",ButtonDist-80)
3238 ok = VRSEt("PB_Save", "width",ButtonDist-80)
3239 ok = VRSEt("PB_Refresh","width",ButtonDist-80)
3240 ok = VRSEt("PB_Help", "width",ButtonDist-80)
3241 ok = VRSEt("PB_About", "width",ButtonDist-80)
3242 ok = VRSEt("PB_Exit", "width",ButtonDist-80)
3243
3244 /* check and empty event queue, trash spurious resize events */
3245 EventString = ''
3246 TrashedResize = 0
3247 do until EventString = 'nop'
3248 EventString = VREvent('N')
3249 if EventString <> 'nop' then do
3250 if EventString = 'CALL 'MainWin'_Resize' then TrashedResize = 1
3251 else interpret eventString
3252 end
3253 end
3254 if TrashedResize then CALL Main_Resize
3255 ok = VRSet(MainWin, "Painting", 1)
3256
3257 /* ok = VRset(MainWin,"Visible", 1) */
3258 IF options.!debug == 1 THEN say 'Main_Resize() done.'
3259return
3260
3261/*:VRX MapGroup_Close
3262*/
3263MapGroup_Close:
3264 call MapGroup_Fini
3265return
3266
3267/*:VRX MapGroup_Create
3268*/
3269MapGroup_Create:
3270 call MapGroup_Init
3271 CALL NLVSetText 'MapGroup', 'Caption', 60
3272 CALL NLVSetText 'PB_GroupMapOK', 'Caption', 2
3273 CALL NLVSetText 'PB_GroupMapCancel', 'Caption', 3
3274
3275 CALL NLVSetText 'DT_NTGroupname', 'Caption', 61
3276 CALL NLVSetText 'DT_NTGroupComment', 'Caption', 52
3277 CALL NLVSetText 'DT_NTRID', 'Caption', 62
3278 CALL NLVSetText 'DT_NTGroupType', 'Caption', 63
3279 CALL NLVSetText 'RB_NTGroupType_domain','Caption', 64
3280 CALL NLVSetText 'RB_NTGroupType_builtin','Caption', 65
3281 CALL NLVSetText 'RB_NTGroupType_local','Caption', 66
3282
3283 ok = VRSet("EF_NTGroupName","Value", GroupName.SelGNr)
3284 ok = VRSet("EF_NTRID","Value", GGID.SelGNr)
3285 NTGroupType = 'domain'
3286return
3287
3288/*:VRX MapGroup_Fini
3289*/
3290MapGroup_Fini:
3291 window = VRInfo( "Window" )
3292 call VRDestroy window
3293 drop window
3294return
3295/*:VRX MapGroup_Init
3296*/
3297MapGroup_Init:
3298 window = VRInfo( "Object" )
3299 if( \VRIsChildOf( window, "Notebook" ) ) then do
3300 call VRMethod window, "CenterWindow"
3301 call VRSet window, "Visible", 1
3302 call VRMethod window, "Activate"
3303 end
3304 drop window
3305return
3306
3307/*:VRX Page1_Create
3308*/
3309Page1_Create:
3310
3311Return
3312
3313/*:VRX Page1_Init
3314*/
3315Page1_Init:
3316 call _ContainerInit
3317return
3318
3319/*:VRX Page2_Create
3320*/
3321Page2_create:
3322
3323Return
3324/*:VRX Page2_init
3325*/
3326Page2_init:
3327
3328return
3329
3330/*:VRX Page3_Create
3331*/
3332Page3_create:
3333
3334Return
3335/*:VRX Page3_Init
3336*/
3337Page3_Init:
3338
3339return
3340
3341/*:VRX Page4_Create
3342*/
3343Page4_Create:
3344
3345Return
3346/*:VRX Page4_init
3347*/
3348Page4_init:
3349
3350return
3351
3352/*:VRX Page5_Create
3353*/
3354Page5_Create:
3355
3356return
3357
3358/*:VRX Page5_Init
3359*/
3360Page5_Init:
3361
3362return
3363
3364/*:VRX Paper_Init
3365*/
3366Paper_Init:
3367 ok = VRSet("IPB_Paper","Width" ,VRMethod( "Screen", "PixelsToTwips", 32 ))
3368 ok = VRSet("IPB_Paper","Height",VRMethod( "Screen", "PixelsToTwips", 32 ))
3369 ok = VRset("IPB_Paper","Left",VRget("GB_Main2","width")-420)
3370return
3371
3372/*:VRX PB_About_Click
3373*/
3374PB_About_Click:
3375 window = VRLoadSecondary( "About", "W" )
3376return
3377
3378/*:VRX PB_AboutOK_Click
3379*/
3380PB_AboutOK_Click:
3381 call About_Close
3382return
3383
3384/*:VRX PB_AddUserCancel_Click
3385*/
3386PB_AddUserCancel_Click:
3387 call AddUser_Close
3388return
3389
3390/*:VRX PB_AddUserOK_Click
3391*/
3392PB_AddUserOK_Click:
3393 IF options.!debug == 1 THEN say 'PB_AddUserOK_Click started.'
3394 if VRGet("EF_username","Value") ="" then do
3395 Msg.type = "E"
3396 Msg.Text = NLVGetMessage( 101 )
3397 call _ShowMsg
3398 IF options.!debug == 1 THEN say 'PB_AddUserOK_Click aborted.'
3399 return
3400 end
3401 if VRGet("EF_password","Value") ="" & \(VRGet("CB_NoPassword","Set") | VRGet("CB_MachineAccount","Set")) then do
3402 Msg.type = "E"
3403 Msg.Text = NLVGetMessage( 102 )
3404 call _ShowMsg
3405 IF options.!debug == 1 THEN say 'PB_AddUserOK_Click aborted.'
3406 return
3407 end
3408 if VRGet("EF_password_repeat","Value") ="" & \(VRGet("CB_NoPassword","Set") | VRGet("CB_MachineAccount","Set")) then do
3409 Msg.type = "E"
3410 Msg.Text = NLVGetMessage( 103 )
3411 call _ShowMsg
3412 IF options.!debug == 1 THEN say 'PB_AddUserOK_Click aborted.'
3413 return
3414 end
3415
3416 if VRGet("EF_password","Value") <> VRGet("EF_password_repeat","Value") then do
3417 Msg.type = "E"
3418 Msg.Text = NLVGetMessage( 104 )
3419 call _ShowMsg
3420 IF options.!debug == 1 THEN say 'PB_AddUserOK_Click aborted.'
3421 return
3422 end
3423
[333]3424 if length(VRGet("EF_password","Value")) < MinPWLength & \(VRGet("CB_NoPassword","Set") | VRGet("CB_MachineAccount","Set")) then do
[287]3425 Msg.type = "E"
3426 Msg.Text = NLVGetMessage( 117 )
3427 call _ShowMsg
3428 IF options.!debug == 1 THEN say 'PB_AddUserOK_Click aborted.'
3429 return
3430 end
3431
3432 if (substr(VRGet("DT_UID","Caption"),6) = VRGet("DDCB_GID","Value")) & (substr(VRGet("DT_UID","Caption"),6) < 65000) then do
3433 Msg.Type = "W"
3434 Msg.Text = NLVGetMessage(115)
3435 ok = _MsgYesNo()
3436 if ok = 2 then do
3437 IF options.!debug == 1 THEN say 'PB_AddUserOK_Click aborted.'
3438 return
3439 end
3440 end
3441
3442 if IsUnixUser then nx = UnixUserNr
3443 else do
3444 nx = Username.0 + 1
3445 Username.0 = nx
3446 end
3447 Username.nx = VRGet("EF_Username","Value")
3448 UID.nx = substr(VRGet("DT_UID","Caption"),6)
3449 GID.nx = VRGet("DDCB_GID","Value")
[569]3450
3451 if settings.!WriteMasterPwd = 1 then do
3452 call rxFuncAdd "Crypt", "RxCrypt", "RxCrypt"
3453 itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
3454 salt = ""
3455 do i = 1 to 8
3456 salt = salt || substr( itoa64, random( 0, 63 ) + 1, 1 )
3457 end
3458 password.nx = Crypt(VRGet("EF_password","Value"), salt )
3459 end
3460 else password.nx = "*"
[287]3461 loginclass.NX = '' /* dummy value */
3462 pwchange.NX = '0' /* dummy value */
3463 deact.NX = '0' /* dummy value */
3464 gecos.NX = VRGet("EF_GECOS","Value") /* Full name */
3465 home.NX = _PathStrkLIBC(VRGet("EF_Home","Value"))
3466 shell.NX = '/usr/sbin/nologin' /* dummy value */
3467 lmhash.NX = ""
3468 nthash.NX = ""
3469 flags.NX = ""
3470 lct.NX = ""
3471 Status.nx = ""
3472 call _MasterpasswdWrite
3473 call _PasswordDBRewrite
3474
3475 if pwd_mkdbRC = 0 then do
3476 if \VRGet("CB_UnixUserOnly","set") then do
3477 call _useraddsmb
3478 if SecondStage then do
3479 command = ""
3480 newflags = ""
3481 if VRGet("EF_Description","value") <> "" then command = ' --account-desc="'VRGet("EF_Description","value")'" '
3482 if VRGet("CB_Password_doesnt_expire","set") then newFlags = NewFlags||"X"
3483 if VRGet("CB_Deactivated","set") then newFlags = NewFlags||"D"
3484 if NewFlags <> "" then command = command||' -c "['NewFlags']"'
3485 say ' 'samba.!pdbeditexe' --user='Username.nx' --modify 'command' 'DebugLevel' 2>'samba.!error' 1>'samba.!msg
3486 address cmd samba.!pdbeditexe' --user='Username.nx' --modify 'command' 'DebugLevel' 2>'samba.!error' 1>'samba.!msg
3487
3488 if RC <> 0 then call _SambaShowError /* ; else call _SambaShowMsg */
3489 end
3490/* if GID.NX <> UID.NX then call _SmbGroupMembersSync GID.NX
3491 else call _SmbGroupMembersSync 513
3492 call _GroupWrite
3493 call _ContGroupsPopulate */
3494 end
3495 end
3496 call PB_Refresh_Click
3497
3498 call AddUser_Close
3499 IF options.!debug == 1 THEN say 'PB_AddUserOK_Click done.'
3500return
3501
3502/*:VRX PB_ChooseHome_Click
3503*/
3504PB_ChooseHome_Click:
3505 TargetDir = _DirDialog("",Samba.!homes)
3506 if TargetDir = "" then return
3507 ok = VRSet("EF_Home","value", TargetDir)
3508 drop TargetDir
3509return
3510
3511/*:VRX PB_CreateHome_Click
3512*/
3513PB_CreateHome_Click:
3514 if translate(VRGet("EF_Home","Value")) = "\NONEXISTENT" | translate(VRGet("EF_Home","Value")) = "\DEV\NULL" then return
3515 ok = SysMkDir(VRGet("EF_Home","Value"))
3516 call EF_Home_Change
3517return
3518
3519/*:VRX PB_Exit_Click
3520*/
3521PB_Exit_Click:
3522 say 'start PB_Cancel_Click'
3523 Call Quit
3524 say 'done PB_Cancel_Click'
3525return
3526
3527/*:VRX PB_GroupAddCancel_Click
3528*/
3529PB_GroupAddCancel_Click:
3530 call AddGroup_Close
3531return
3532
3533/*:VRX PB_GroupAddOK_Click
3534*/
3535PB_GroupAddOK_Click:
3536 if \UnixGroupOnly then do
3537 if VRGet("EF_Comment","Value") <> "" then Comment = ' -C "'VRGet("EF_Comment","Value")'"'
3538 else Comment = ""
3539 address cmd samba.!netexe' rpc group add "'VRGet("EF_GroupName","Value")'" 'Comment' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3540 if RC <> 0 then call _SambaShowError
3541 else call _SambaShowMsg
3542 end
3543 else do
3544 if VRGet("CB_AutomaticGGID","set")
3545 then call _kLibcGroupAdd VRGet("EF_GroupName","Value") , _GetNextGID()
3546 else call _kLibcGroupAdd VRGet("EF_GroupName","Value") , VRget("EF_GGID","Value")
3547 call PB_Save_Click
3548 end
3549 call PB_Refresh_Click
3550 call AddGroup_Close
3551return
3552
3553/*:VRX PB_GroupMapCancel_Click
3554*/
3555PB_GroupMapCancel_Click:
3556 call MapGroup_Close
3557return
3558
3559/*:VRX PB_GroupMapOK_Click
3560*/
3561PB_GroupMapOK_Click:
3562 if VRGet("EF_NTGRoupComment","value") <> "" then Comment = ' comment="'VRGet("EF_NTGRoupComment","value")'"'
3563 else Comment = ""
3564/* net groupmap add rid=512 ntgroup="Domain Admins" unixgroup="root" type=domain */
3565
3566say address cmd samba.!netexe' groupmap add rid='VRGet("EF_NTRID","Value")' ntgroup="'VRGet("EF_NTGroupName","Value")'" unixgroup="'GroupName.SelGnr'" type='NTGroupType' 'Comment' 'debuglevel
3567 address cmd samba.!netexe' groupmap add rid='VRGet("EF_NTRID","Value")' ntgroup="'VRGet("EF_NTGroupName","Value")'" unixgroup="'GroupName.SelGnr'" type='NTGroupType' 'Comment' 'debuglevel' 2>'samba.!error' 1>'samba.!msg
3568 if RC <> 0 then call _SambaShowError
3569 else do
3570 call _SambaShowMsg
3571 blGusers = translate(Gusers.SelGnr,' ',',')
3572 do I = 1 to words(blGusers)
3573 address cmd samba.!netexe' rpc group addmem "'VRGet("EF_NTGroupName","Value")'" 'word(BlGusers,I)' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3574 if RC <> 0 then call _SambaShowError
3575 else call _SambaShowMsg
3576 say samba.!netexe' RC = 'RC
3577 end
3578 end
3579 call PB_Refresh_Click
3580 call MapGroup_Close
3581return
3582
3583/*:VRX PB_GroupMembersOK_Click
3584*/
3585PB_GroupMembersOK_Click:
3586 IF options.!debug == 1 THEN say 'PB_Group_MembersOK_Click started.'
3587 call Group_Members_Close
3588 IF options.!debug == 1 THEN say 'PB_Group_MembersOK_Click done.'
3589return
3590
3591/*:VRX PB_Help_Click
3592*/
3593PB_Help_Click:
3594 Msg.Title = VRGet("Main", "Caption")
3595 Msg.Type = "I"
3596 Msg.Text = "Not implemented"
3597 call _ShowMsg
3598return
3599
3600/*:VRX PB_JoinCancel_Click
3601*/
3602PB_JoinCancel_Click:
3603 call Join_Group_Close
3604return
3605
3606/*:VRX PB_JoinOK_Click
3607*/
3608PB_JoinOK_Click:
3609 ok = VRMethod( "LB_Groups", "GetSelectedStringList", SelGroups. )
3610 if SelGroups.0 = 0 then return
3611 do I = 1 to SelGroups.0
[926]3612 if SelGroups.I = "(klibc group)" then iterate
[287]3613 ok = VRCopyFile(samba.!group, samba.!group'.bak')
3614 say samba.!netexe' rpc addmem "'SelGroups.I'" 'Username.SelNr' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3615 address cmd samba.!netexe' rpc group addmem "'SelGroups.I'" 'Username.SelNr' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3616 if RC <> 0 then do
3617 call _SambaShowError
3618 ok = VRCopyFile(samba.!group'.bak', samba.!group)
3619 end
3620 else call _SambaShowMsg
3621
3622/* call _SmbGroupMembersSync SelGroups.I
3623 call _GroupWrite */
3624 end
3625 call Join_Group_Close
3626 call PB_Refresh_Click
3627return
3628
3629/*:VRX PB_LeaveCancel_Click
3630*/
3631PB_LeaveCancel_Click:
3632 call Leave_Group_Close
3633return
3634
3635/*:VRX PB_LeaveOK_Click
3636*/
3637PB_LeaveOK_Click:
3638 ok = VRMethod( "LB_LeaveGroups", "GetSelectedStringList", SelGroups. )
3639 if SelGroups.0 = 0 then return
3640 do I = 1 to SelGroups.0
3641 ok = VRCopyFIle(samba.!group, samba.!group'.bak')
3642 say samba.!netexe' rpc delmem "'SelGroups.I'" 'Username.SelNr' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3643 address cmd samba.!netexe' rpc group delmem "'SelGroups.I'" 'Username.SelNr' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3644 if RC <> 0 then do
3645 call _SambaShowError
3646 ok = VRCopyFile(samba.!group'.bak', samba.!group)
3647 end
3648 else call _SambaShowMsg
3649/* call _SmbGroupMembersSync SelGroups.I
3650 call _GroupWrite */
3651 end
3652 call Leave_Group_Close
3653 call PB_Refresh_Click
3654return
3655
[333]3656/*:VRX PB_LOGIN_CANCEL_Click
[287]3657*/
[333]3658PB_LOGIN_CANCEL_Click:
[287]3659 say " Login Abort"
[333]3660 call SW_LOGIN_Close
[287]3661 exit 0
3662return
3663
[333]3664/*:VRX PB_LOGIN_OK_Click
[287]3665*/
[333]3666PB_LOGIN_OK_Click:
3667 IF options.!debug == 1 THEN say " SW_LOGIN OK started"
[287]3668 Credentials.!Username = VRGet("EF_LoginUser","Value")
3669 Credentials.!Password = VRGet("EF_LoginPassword","Value")
3670
3671 if pos("4OS2", value("COMSPEC",,"OS2ENVIRONMENT")) = 0
3672 then UserCred = '--user='Credentials.!username'%'Credentials.!password
3673 else UserCred = '--user='Credentials.!username'%%'Credentials.!password
3674
[333]3675 Call SW_LOGIN_Close
3676 IF options.!debug == 1 THEN say " SW_LOGIN OK done"
[287]3677return
3678
3679/*:VRX PB_pdbeditConsole_Click
3680*/
3681PB_pdbeditConsole_Click:
3682 Buttons.1 = NLVGetMessage(2)
3683 Buttons.2 = NLVGetMessage(3)
3684 Buttons.0 = 2
3685 command = ' --account-desc= --fullname --homedir= --drive= --script= --profile= --domain= -c "[NDHLX]"'
3686 id = VRPrompt( VRWindow(), 'pdbedit --user='Username.CurUserNr' --modify', "command", "pdbedit Console", "Buttons.", buttons.1, buttons.2 )
3687 if id = 2 then return
3688 say samba.!pdbeditexe' --user='Username.CurUserNr' --modify 'command' 'DebugLevel' 2>'samba.!error
3689 address cmd samba.!pdbeditexe' --user='Username.CurUserNr' --modify 'command' 'DebugLevel' 2>'samba.!error
3690 if RC <> 0 then call _SambaShowError
3691 call _UserPropertiesGet Username.CurUserNr
3692return
3693
3694/*
3695Settable account flags
3696 N: No password required
3697 D: Account disabled
3698 H: Home directory required
3699 L: Automatic Locking
3700 X: Password does not expire
3701
3702Account Types:
3703 U: Regular user account
3704 T: Temporary duplicate of other account
3705 M: MNS logon user account
3706 W: Workstation Trust Account
3707 S: Server Trust Account
3708 I: Domain Trust Account
3709
3710 */
3711/*:VRX PB_PolReset_Click
3712*/
3713PB_PolReset_Click:
3714 say samba.!pdbeditexe' --policies-reset 'DebugLevel' 1>'samba.!msg
3715 address cmd samba.!pdbeditexe' --policies-reset 'DebugLevel' 1>'samba.!msg
[926]3716 call _SambaShowMsg "description unknown parameter"
[287]3717return
3718
3719/*:VRX PB_PolUpdate_Click
3720*/
3721PB_PolUpdate_Click:
3722 say samba.!pdbeditexe' -P "'VRGet("DDCB_Policy","Value")'" -C 'VRGet("EF_PolValue","Value")' 'DebugLevel' 1>'samba.!msg
3723 address cmd samba.!pdbeditexe' -P "'VRGet("DDCB_Policy","Value")'" -C 'VRGet("EF_PolValue","Value")' 'DebugLevel' 1>'samba.!msg
[926]3724 call _SambaShowMsg "description unknown parameter"
[287]3725return
3726
3727/*:VRX PB_Refresh_Click
3728*/
3729PB_Refresh_Click:
3730 call _Refresh
3731return
3732
3733/*:VRX PB_RPC_Click
3734*/
3735PB_RPC_Click:
3736 Buttons.1 = NLVGetMessage(2)
3737 Buttons.2 = NLVGetMessage(3)
3738 Buttons.0 = 2
3739 command = 'group'
3740 id = VRPrompt( VRWindow(), "net rpc", "command", "net rpc Console", "Buttons.", buttons.1, buttons.2 )
3741 if id = 2 then return
3742 say samba.!netexe' rpc 'command' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3743 address cmd samba.!netexe' rpc 'command' 'DebugLevel' 'UserCred' 2>'samba.!error' 1>'samba.!msg
3744 if RC <> 0 then call _SambaShowError; else call _SambaShowMsg
3745 call PB_Refresh_Click
3746return
3747
3748/*:VRX PB_Save_Click
3749*/
3750PB_Save_Click:
[569]3751 IF options.!debug == 1 THEN say 'PB_Save_Click() started'
[287]3752 call _MasterpasswdWrite
3753 call _GroupWrite
3754 call _PasswordDBRewrite
3755 call _SmbUserMapWrite
[569]3756 IF options.!debug == 1 THEN say 'PB_Save_Click() done'
[287]3757return
3758
3759/*:VRX PB_upCancel_Click
3760*/
3761PB_upCancel_Click:
3762 call UserProperties_Close
3763return
3764
3765/*:VRX PB_upSave_Click
3766*/
3767PB_upSave_Click:
3768/* U: Regular user account
3769 T: Temporary duplicate of other account
3770 M: MNS logon user account
3771 W: Workstation Trust Account
3772 S: Server Trust Account
3773 I: Domain Trust Account */
3774
3775 /* we mask out flags that cannot be modified anyway here */
3776 CurFlags = translate(CurFlags,' ','UTMWSI')
3777
3778 if VRGet("CB_upResetLogonHours", "set") then newcommand = newcommand||' -Z'
3779
3780 say samba.!pdbeditexe' --user='Username.CurUserNr' --modify 'newcommand' -c "['CurFlags']" 'DebugLevel' 2>'samba.!error /* ' 1>'samba.!msg */
3781 address cmd samba.!pdbeditexe' --user='Username.CurUserNr' --modify 'newcommand' -c "['CurFlags']" 'DebugLevel' 2>'samba.!error /* ' 1>'samba.!msg */
3782 if RC <> 0 then call _SambaShowError /* ; else call _SambaShowMsg */
3783
3784 else do
3785 if VRGet("EF_upPassword","Value") <> "" | VRGet("EF_upPassword_repeat","Value") <> "" then do /* Password change! */
3786 if VRGet("EF_upPassword","Value") <> VRGet("EF_upPassword_repeat","Value") then do
3787 Msg.type = "E"
3788 Msg.Text = NLVGetMessage( 104 )
3789 call _ShowMsg
3790 return
3791 end
3792 else do
[408]3793 if length(VRGet("EF_upPassword","Value")) < MinPWLength then do
[305]3794 Msg.type = "E"
3795 Msg.Text = NLVGetMessage( 117 )
3796 call _ShowMsg
3797 return
3798 end
3799 else do
3800 pwdfile = TempDir'newpwd'
3801 call lineout pwdfile, VRGet("EF_upPassword","value")
3802 call lineout pwdfile, VRGet("EF_upPassword","value")
3803 ok = stream(pwdfile,"c","close")
3804 say samba.!smbpasswdexe' -a 'Username.CurUserNr' -s <'pwdfile' 2>'samba.!error
3805 address cmd samba.!smbpasswdexe' -a 'Username.CurUserNr' -s <'pwdfile' 2>'samba.!error' 1>'samba.!msg
3806 smbpasswdrc = rc
3807 if rc <> 0 then call _SambaShowError
3808 else call _SambaShowMsg
3809 ok = SysFileDelete(pwdfile)
3810 if SwatAuth then do
3811 /* we always remove the old swat */
3812 say ' 'samba.!htpasswdexe' -D "'swatusers'" 'Username.CurUserNr
3813 address cmd samba.!htpasswdexe' -D "'swatusers'" 'Username.CurUserNr /* ' 2>'samba.!error' 1>'samba.!msg
3814 if rc <> 0 then call _SambaShowError; else call _SambaShowMsg */
[287]3815
[305]3816 if VRGet("CB_upSWAT_Allowed","Set") then do
3817 if VRFileExists(swatusers) then cFlag = ""; else cFlag="c"
3818 say ' 'samba.!htpasswdexe' -b'cFLag' "'swatusers'" 'Username.CurUserNr' **********'
3819 address cmd samba.!htpasswdexe' -b'cFlag' "'swatusers'" 'Username.CurUserNr' 'VRGet("EF_upPassword","value")' 2>'samba.!error' 1>'samba.!msg
3820 if rc <> 0 then call _SambaShowError
3821 else call _SambaShowMsg
3822 end
[287]3823 end
[569]3824 if settings.!WriteMasterPwd = 1 then do
3825 call rxFuncAdd "Crypt", "RxCrypt", "RxCrypt"
3826 itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
3827 salt = ""
3828 do i = 1 to 8
3829 salt = salt || substr( itoa64, random( 0, 63 ) + 1, 1 )
3830 end
3831 password.CurUserNr = Crypt(VRGet("EF_upPassword","Value"), salt )
3832 call _UserRecWriteBackToStems
3833 call PB_Save_Click
3834 end
[287]3835 end
3836 end
3837 end
3838 if pos("--fullname", newcommand) > 0 & Settings.!SyncFullName = 1 then do
3839 parse var newcommand dummy '--fullname="'NewGECOS'"' dummy
3840 GECOS.CurUserNr = NewGECOS
3841 SyncedFullName = 1
3842 end
3843 call UserProperties_Close
3844 end
3845return
3846
3847/*:VRX PushbackAll
3848*/
3849PushbackAll:
3850 Pages = 4
3851 /* Tab distance from top */
3852 TabTop = 20
3853 TabWidth = VRMethod( "Screen", "PixelsToTwips", 78 )
3854 TabHeight= VRMethod( "Screen", "PixelsToTwips", 24 )
3855
3856 /* Page Position */
3857 PageLeft = 120
3858 PageTop = PageLeft + TabTop + 330
3859
3860 /* Page size */
3861 PageHeight = 3000
3862 PageWidth = 3000
3863 ok = VRset("DT_PageName", "Caption", "")
3864 ok = VRSet("GB_Main","Left", 0)
3865 ok = VRSet("GB_Main","Top", TabTop+230)
3866 do I = 1 to Pages
3867 ok = VRSet("Page_"I,"BackColor", "<default>")
3868 ok = VRSet("TAB_"I,"Top", TabTop)
3869 ok = VRSet("TAB_"I,"PicturePath","#2"||I||";#2"||I)
3870 ok = VRSet("TAB_"I,"Left",TabWidth*(I-1)+PageLeft)
3871 ok = VRSet("TAB_"I,"Width",TabWidth)
3872 ok = VRSet("TAB_"I,"Height",TabHeight)
3873 ok = VRSet("Page_"I,"Height", max(PageHeight,VRget("GB_Main2","Height")-600))
3874 ok = VRSet("Page_"I,"Width", max(PageWidth,VRget("GB_Main2","Width")-450))
3875 ok = VRSet("Page_"I,"Left", PageLeft)
3876 ok = VRSet("Page_"I,"Top", PageTop)
3877 ok = VRSet("Page_"I,"Visible", 0)
3878 end
3879return
3880
3881/*:VRX Quit
3882*/
3883Quit:
3884 if VRGet("Main","WindowState") = "Maximized"|,
3885 VRGet("Main","WindowState") = "Minimized" then ok = VRMethod("Main", "Restore")
3886 call _IniWrite
3887 ok = VRREdirectStdio("OFF")
3888 call _SambaFinish
3889 ok = SysFileDelete(smbdoutput)
3890 if VRParseFileName(samba.!smbpasswd,"DP")||'\' = TempDir then do
3891 ok = SysFileDelete(samba.!smbpasswd)
3892 end
3893 window = VRWindow()
3894 call VRSet window, "Shutdown", 1
3895 drop window
3896return
3897
3898/*:VRX RB_NTGroupType_builtin_Click
3899*/
3900RB_NTGroupType_builtin_Click:
3901 NTGroupType = 'builtin'
3902return
3903
3904/*:VRX RB_NTGroupType_domain_Click
3905*/
3906RB_NTGroupType_domain_Click:
3907 NTGroupType = 'domain'
3908return
3909
3910/*:VRX RB_NTGroupType_local_Click
3911*/
3912RB_NTGroupType_local_Click:
3913 NTGroupType = 'local'
3914return
3915
[333]3916/*:VRX SW_LOGIN_Close
3917*/
3918SW_LOGIN_Close:
3919 call SW_LOGIN_Fini
3920return
3921
3922/*:VRX SW_LOGIN_Create
3923*/
3924SW_LOGIN_Create:
3925 call SW_LOGIN_Init
3926 CALL NLVSetText 'SW_LOGIN', 'Caption', 31
3927 CALL NLVSetText 'DT_LoginUser', 'Caption', 32
3928 CALL NLVSetText 'DT_LoginPassword','Caption', 33
3929 CALL NLVSetText 'PB_LOGIN_OK', 'Caption', 2
3930 CALL NLVSetText 'PB_LOGIN_CANCEL', 'Caption', 3
3931
3932 if Credentials.!Username = ""
3933 then ok = VRSet("EF_LoginUser","Value", value("USER",,"OS2ENVIRONMENT"))
3934 else ok = VRSet("EF_LoginUser","Value", Credentials.!Username)
3935
3936 if \_UserIsValid(VRGet("EF_LoginUser","Value")) & value("USER",,"OS2ENVIRONMENT") <> "" then do
3937 Msg.Title =VRGet("Main", "caption")
3938 Msg.Type = "E"
3939 Msg.Text = NLVGetMessage(111, VRGet("EF_LoginUser","Value"))
3940 call _ShowMsg
3941 ok = VRSet("EF_LoginUser","Value","root")
3942 end
3943
3944 if VRGet("EF_LoginUser","Value") <> "" then ok = VRMethod("EF_LoginPassword","Setfocus")
3945return
3946
3947/*:VRX SW_LOGIN_Fini
3948*/
3949SW_LOGIN_Fini:
3950 window = VRInfo( "Window" )
3951 call VRDestroy window
3952 drop window
3953return
3954/*:VRX SW_LOGIN_Init
3955*/
3956SW_LOGIN_Init:
3957 window = VRInfo( "Object" )
3958 if( \VRIsChildOf( window, "Notebook" ) ) then do
3959 call VRMethod window, "CenterWindow"
3960 call VRSet window, "Visible", 1
3961 call VRMethod window, "Activate"
3962 end
3963 drop window
3964return
3965
[287]3966/*:VRX TAB_1_Click
3967*/
3968TAB_1_Click:
3969 call Activate 1
3970return
3971
3972/*:VRX TAB_2_Click
3973*/
3974TAB_2_Click:
3975 call Activate 2
3976return
3977
3978/*:VRX TAB_3_Click
3979*/
3980TAB_3_Click:
3981 call Activate 3
3982return
3983
3984/*:VRX TAB_4_Click
3985*/
3986TAB_4_Click:
3987 call Activate 4
3988return
3989
3990/*:VRX TAB_5_Click
3991*/
3992TAB_5_Click:
3993 call Activate 5
3994return
3995
3996/*:VRX UserProperties_Close
3997*/
3998UserProperties_Close:
3999 call UserProperties_Fini
4000 if SyncedFullName = 1 | SyncedPrimGID = 1 then call PB_Save_Click
4001 call PB_Refresh_Click
4002return
4003
4004/*:VRX UserProperties_Create
4005*/
4006UserProperties_Create:
4007 call UserProperties_Init
4008 CALL NLVSetText 'UserProperties', 'Caption', 120
4009
4010 upTabWidth = VRMethod( "Screen", "PixelsToTwips", 136 )
4011 upTabHeight= VRMethod( "Screen", "PixelsToTwips", 24 )
4012
4013 ok = VRset("IPB_Accountflags","Width", upTabWidth)
4014 ok = VRset("IPB_Profile","Width", upTabWidth)
4015 ok = VRset("IPB_Memberships","Width", upTabWidth)
4016
4017 ok = VRset("IPB_Accountflags","Top", 40)
4018 ok = VRset("IPB_Profile", "Top", 40)
4019 ok = VRset("IPB_Memberships", "Top", 40)
4020
4021 ok = VRset("IPB_Accountflags","Left", upTabWidth*0+40)
4022 ok = VRset("IPB_Profile", "Left", upTabWidth*1+40)
4023 ok = VRset("IPB_Memberships", "Left", upTabWidth*2+40)
4024
4025 ok = VRset("IPB_Accountflags","Height", upTabHeight)
4026 ok = VRset("IPB_Profile", "Height", upTabHeight)
4027 ok = VRset("IPB_Memberships", "Height", upTabHeight)
4028
4029 CALL NLVSetText 'PB_upSave', 'Caption', 10
4030 CALL NLVSetText 'PB_upCancel', 'Caption', 3
4031 ok = VRSet("PB_pdbeditconsole",'Caption', "pdbedit "||word(NLVGetMessage(23),2))
4032
4033 CALL NLVSetText 'DT_upAccountType', 'Caption', 55
4034 CALL NLVSetText 'CB_upNoPassword', 'Caption', 20
4035 CALL NLVSetText 'DT_upPassword', 'Caption', 33
4036 CALL NLVSetText 'DT_upPassword_Repeat', 'Caption', 43
4037
4038 CALL NLVSetText 'CB_upMust_change_password', 'Caption', 46
4039 CALL NLVSetText 'CB_upCannot_change_password', 'Caption', 47
4040 CALL NLVSetText 'CB_upPassword_doesnt_expire', 'Caption', 48
4041 CALL NLVSetText 'CB_upDeactivated', 'Caption', 49
4042 CALL NLVSetText 'CB_upResetLogonHours', 'Caption', 54
4043 CALL NLVSetText 'CB_upSWAT_Allowed', 'Caption', 35
4044
4045 ok = VRSet('CB_upSWAT_Allowed',"Enabled",swatAuth)
4046
4047 CALL NLVSetText 'DT_upGroups', 'Caption', 56
4048 CALL NLVSetText 'CB_EditableFieldsOnly', 'Caption', 45
4049
4050 upNrFH = VRMethod( "CN_UserProperties", "AddField", "String", NLVGetMessage(130))
4051 upTypeFH = VRMethod( "CN_UserProperties", "AddField", "String", NLVGetMessage(57))
4052 upValueFH = VRMethod( "CN_UserProperties", "AddField", "String", NLVGetMessage(58))
4053 upCommandFH= VRMethod( "CN_UserProperties", "AddField", "String", NLVGetMessage(59))
4054
4055 ok = VRMethod( "CN_UserProperties", "SetFieldAttr", upNrFH, "Visible", 0)
4056 ok = VRMethod( "CN_UserProperties", "SetFieldAttr", upTypeFH, "ReadOnly", 1)
4057 ok = VRMethod( "CN_UserProperties", "SetFieldAttr", upValueFH, "ReadOnly", 0)
4058 ok = VRMethod( "CN_UserProperties", "SetFieldAttr", upCommandFH, "ReadOnly", 1)
4059 ok = VRMethod( "CN_UserProperties", "SetFieldAttr", upCommandFH, "Visible", 0)
4060
4061 ok = VRMethod( "CN_Users", "GetRecordList", "Selected", "Selected." )
4062 if Selected.0 = 0 then return
4063 CurUserNr = VRMethod("CN_Users","GetFieldData", Selected.1, NrFH)
4064 call IPB_AccountFlags_Click
4065
4066 ok = VRMethod("PB_upCancel", "SetFocus" )
4067
4068 SyncedPrimGID = 0
4069 SyncedFullName = 0
[305]4070
4071 MinPWLength = _PolicyGet("min password length")
4072
[287]4073 call _UserPropertiesGet Username.CurUserNr
4074 newcommand = ""
4075return
4076
4077/*:VRX UserProperties_Fini
4078*/
4079UserProperties_Fini:
4080 window = VRInfo( "Window" )
4081 call VRDestroy window
4082 drop window
4083return
4084/*:VRX UserProperties_Init
4085*/
4086UserProperties_Init:
4087 window = VRInfo( "Object" )
4088 if( \VRIsChildOf( window, "Notebook" ) ) then do
4089 call VRMethod window, "CenterWindow"
4090 call VRSet window, "Visible", 1
4091 call VRMethod window, "Activate"
4092 end
4093 drop window
4094return
4095
Note: See TracBrowser for help on using the repository browser.