source: trunk/guitools/shared/rxrpclib.vrs@ 689

Last change on this file since 689 was 675, checked in by Herwig Bauernfeind, 14 years ago

GUI-Tools: EVFSGUI 2.5.x: Several fixes and additions (including fix for Ticket #185)

File size: 16.9 KB
Line 
1/* REXX Function Library for RPC calls */
2
3/* Currently implemented functions: */
4/* _rpcenumdomgroups(server,username,password) */
5/* _rpcenumdomusers(server,username,password) */
6/* _rpcenumprinters(server,username,password) */
7/* _rpcnetshareenum(server,username,password) */
8/* _rpcnetsharegetinfo(server,username,password,share) */
9/* _rpcquerygroupmem(server,username,password,grouprid) */
10/* _rpcqueryuser(server,username,password,userrid) */
11/* _rpcsrvinfo(server,username,password) */
12
13/*:VRX _rpcenumdomgroups
14*/
15_rpcenumdomgroups: procedure expose rpc. samba. options. debuglevel
16 IF options.!debug == 1 THEN SAY time()" _rpcenumdomgroups() started"
17 server = arg(1)
18 username = arg(2)
19 password = arg(3)
20
21 say ' 'samba.!rpcclientexe' 'server' --user='username'%'password' --command="enumdomgroups" 'debuglevel' '
22 address cmd samba.!rpcclientexe' 'server' --user='username'%'password' --command="enumdomgroups" 'debuglevel' >'samba.!msg
23
24 rpc.enumdomgroups. = ""
25
26 Failure = 0
27
28 count = 0
29 SIGNAL ON SYNTAX NAME RPCERROR
30 do until lines(samba.!msg) = 0
31 rpcline = linein(samba.!msg)
32 if pos("creating default valid table",rpcline) <> 0 then iterate
33
34 if pos("LOGON_FAILURE", rpcline) > 0 then do
35 Failure = 1
36 leave
37 end
38 parse var rpcline 'group:['tuser'] rid:['trid']'
39
40 token = translate(strip(strip(translate(token),'L','09'x)),'_',' ')
41 tvalue= strip(strip(tvalue,'L','09'x))
42 count = count + 1
43
44 dyn = 'rpc.enumdomgroups.'count'.GROUP = "'Tuser'"'
45 say " "dyn
46 interpret dyn
47
48 dyn = 'rpc.enumdomgroups.'count'.RID = "'Trid'"'
49 say " "dyn
50 interpret dyn
51
52 end
53 SIGNAL OFF SYNTAX
54 ok = stream(samba.!msg,'c','close')
55 ok = SysFileDelete(samba.!msg)
56 rpc.enumdomgroups.0 = count
57
58 if Failure = 0 then do
59 retval = 1
60 rpc.enumdomgroups.LOGONSTATUS="OK"
61 end
62 else do
63 retval = 0
64 rpc.enumdomgroups.LOGONSTATUS=substr(rpcline,pos("NT_STATUS",rpcline),)
65 end
66 IF options.!debug == 1 THEN SAY time()" _rpcenumdomgroups() done, "retval" "rpc.enumdomgroups.LOGONSTATUS
67return retval
68
69/*:VRX _rpcenumdomusers
70*/
71_rpcenumdomusers: procedure expose rpc. samba. options. debuglevel
72 IF options.!debug == 1 THEN SAY time()" _rpcenumdomusers() started"
73 server = arg(1)
74 username = arg(2)
75 password = arg(3)
76
77 say ' 'samba.!rpcclientexe' 'server' --user='username'%'password' --command="enumdomusers" 'debuglevel' '
78 address cmd samba.!rpcclientexe' 'server' --user='username'%'password' --command="enumdomusers" 'debuglevel' >'samba.!msg
79
80 rpc.enumdomusers. = ""
81
82 Failure = 0
83
84 count = 0
85 SIGNAL ON SYNTAX NAME RPCERROR
86 do until lines(samba.!msg) = 0
87 rpcline = linein(samba.!msg)
88 if pos("creating default valid table",rpcline) <> 0 then iterate
89
90 if pos("LOGON_FAILURE", rpcline) > 0 then do
91 Failure = 1
92 leave
93 end
94 parse var rpcline 'user:['tuser'] rid:['trid']'
95
96 token = translate(strip(strip(translate(token),'L','09'x)),'_',' ')
97 tvalue= strip(strip(tvalue,'L','09'x))
98 count = count + 1
99
100 dyn = 'rpc.enumdomusers.'count'.USER = "'Tuser'"'
101 say " "dyn
102 interpret dyn
103
104 dyn = 'rpc.enumdomusers.'count'.RID = "'Trid'"'
105 say " "dyn
106 interpret dyn
107
108 end
109 SIGNAL OFF SYNTAX
110 ok = stream(samba.!msg,'c','close')
111 ok = SysFileDelete(samba.!msg)
112 rpc.enumdomusers.0 = count
113
114 if Failure = 0 then do
115 retval = 1
116 rpc.enumdomusers.LOGONSTATUS="OK"
117 end
118 else do
119 retval = 0
120 rpc.enumdomusers.LOGONSTATUS=substr(rpcline,pos("NT_STATUS",rpcline),)
121 end
122 IF options.!debug == 1 THEN SAY time()" _rpcenumdomusers() done, "retval" "rpc.enumdomusers.LOGONSTATUS
123return retval
124
125/*:VRX _rpcenumprinters
126*/
127_rpcenumprinters: procedure expose rpc. samba. options. debuglevel
128 IF options.!debug == 1 THEN SAY time()" _rpcenumprinters() started"
129 server = arg(1)
130 username = arg(2)
131 password = arg(3)
132
133 usercred = '--user='username'%'password
134
135 say ' 'samba.!rpcclientexe' 'server' 'usercred' --command="enumprinters" 'debuglevel' '
136 address cmd samba.!rpcclientexe' 'server' 'usercred' --command="enumprinters" 'debuglevel' >'samba.!msg
137
138 rpc.enumprinters. = ""
139
140 Failure = 0
141
142 count = 0
143 SIGNAL ON SYNTAX NAME RPCERROR
144 do until lines(samba.!msg) = 0
145 rpcline = linein(samba.!msg)
146 if pos("creating default valid table",rpcline) <> 0 then iterate
147
148 if pos("LOGON_FAILURE", rpcline) > 0 then do
149 Failure = 1
150 leave
151 end
152 parse var rpcline token ':[' tvalue']' .
153 token = translate(strip(strip(translate(token),'L','09'x)),'_',' ')
154 if Token = "FLAGS" then count = count + 1
155 tvalue= strip(strip(tvalue,'L','09'x))
156 if pos('[',Token) = 0 & pos('TABLE',Token) = 0 & Token <> "" then do
157 dyn = 'rpc.enumprinters.'count'.'Token' = "'Tvalue'"'
158 say " "dyn
159 interpret dyn
160 end
161 end
162 SIGNAL OFF SYNTAX
163 ok = stream(samba.!msg,'c','close')
164 ok = SysFileDelete(samba.!msg)
165 rpc.enumprinters.0 = count
166
167 if Failure = 0 then do
168 retval = 1
169 rpc.enumprinters.LOGONSTATUS="OK"
170 end
171 else do
172 retval = 0
173 rpc.enumprinters.LOGONSTATUS=substr(rpcline,pos("NT_STATUS",rpcline),)
174 end
175 IF options.!debug == 1 THEN SAY time()" _rpcenumprinters() done, "retval" "rpc.enumprinters.LOGONSTATUS
176return retval
177/*:VRX _rpcnetshareenum
178*/
179_rpcnetshareenum: procedure expose rpc. samba. options. debuglevel
180 IF options.!debug == 1 THEN SAY time()" _rpcnetshareenum() started"
181 server = arg(1)
182 username = arg(2)
183 password = arg(3)
184
185 say ' 'samba.!rpcclientexe' 'server' --user='username'%'password' --command="netshareenum" 'debuglevel' '
186 address cmd samba.!rpcclientexe' 'server' --user='username'%'password' --command="netshareenum" 'debuglevel' >'samba.!msg
187
188 rpc.netshareenum. = ""
189
190 Failure = 0
191
192 count = 0
193 SIGNAL ON SYNTAX NAME RPCERROR
194 do until lines(samba.!msg) = 0
195 rpcline = linein(samba.!msg)
196 if pos("creating default valid table",rpcline) <> 0 then iterate
197
198 if pos("LOGON_FAILURE", rpcline) > 0 then do
199 Failure = 1
200 leave
201 end
202 parse var rpcline token ':' tvalue
203 token = translate(strip(strip(translate(token),'L','09'x)),'_',' ')
204 if Token = "NETNAME" then count = count + 1
205 tvalue= strip(strip(tvalue,'L','09'x))
206 if pos('[',Token) = 0 & pos('TABLE',Token) = 0 & Token <> "" then do
207 dyn = 'rpc.netshareenum.'count'.'Token' = "'Tvalue'"'
208 say " "dyn
209 interpret dyn
210 end
211 end
212 SIGNAL OFF SYNTAX
213 ok = stream(samba.!msg,'c','close')
214 ok = SysFileDelete(samba.!msg)
215 rpc.netshareenum.0 = count
216
217 if Failure = 0 then do
218 retval = 1
219 rpc.netshareenum.LOGONSTATUS="OK"
220 end
221 else do
222 retval = 0
223 rpc.netshareenum.LOGONSTATUS=substr(rpcline,pos("NT_STATUS",rpcline),)
224 end
225 IF options.!debug == 1 THEN SAY time()" _rpcnetshareenum() done, "retval" "rpc.netshareenum.LOGONSTATUS
226return retval
227
228/*:VRX _rpcnetsharegetinfo
229*/
230_rpcnetsharegetinfo: procedure expose rpc. samba. options. debuglevel
231 IF options.!debug == 1 THEN SAY time()" _rpcnetsharegetinfo() started"
232 server = arg(1)
233 username = arg(2)
234 password = arg(3)
235 share = arg(4)
236
237 say ' 'samba.!rpcclientexe' 'server' --user='username'%'password' --command="netsharegetinfo 'share'" 'debuglevel' '
238 address cmd samba.!rpcclientexe' 'server' --user='username'%'password' --command="netsharegetinfo 'share'" 'debuglevel' >'samba.!msg
239
240 rpc.netsharegetinfo. = ""
241
242 Failure = 0
243 SIGNAL ON SYNTAX NAME RPCERROR
244 do until lines(samba.!msg) = 0
245 rpcline = linein(samba.!msg)
246 if pos("creating default valid table",rpcline) <> 0 then iterate
247
248 if pos("LOGON_FAILURE", rpcline) > 0 then do
249 Failure = 1
250 leave
251 end
252 parse var rpcline token ':' tvalue
253 token = translate(strip(strip(translate(token),'L','09'x)),'_',' ')
254 tvalue= strip(strip(tvalue,'L','09'x))
255 if pos('ACL',Token) = 0 & pos('ACE',Token) = 0 & pos('---',Token) = 0 & Token <> "" then do
256
257 if Token = "TYPE" & left(Tvalue,2) = "0x" & length(Tvalue) = 3 then Token = "SHARETYPE"
258 if Token = "TYPE" & pos("SEC",Tvalue) > 1 then Token = "SECTYPE"
259
260 dyn = 'rpc.netsharegetinfo.'Token' = "'Tvalue'"'
261 say " "dyn
262 interpret dyn
263 end
264 end
265 SIGNAL OFF SYNTAX
266 ok = stream(samba.!msg,'c','close')
267 ok = SysFileDelete(samba.!msg)
268
269 if Failure = 0 then do
270 retval = '1'
271 rpc.netsharegetinfo.LOGONSTATUS="OK"
272 end
273 else do
274 retval = '0 '
275 rpc.netsharegetinfo.LOGONSTATUS=substr(rpcline,pos("NT_STATUS",rpcline),)
276 end
277 IF options.!debug == 1 THEN SAY time()" _rpcnetsharegetinfo() done, "retval" "rpc.netsharegetinfo.LOGONSTATUS
278return retval
279
280/*:VRX _rpcquerygroupmem
281*/
282_rpcquerygroupmem: procedure expose rpc. samba. options. debuglevel
283 IF options.!debug == 1 THEN SAY time()" _rpcquerygroupmem() started"
284 server = arg(1)
285 username = arg(2)
286 password = arg(3)
287 grouprid = arg(4)
288
289 say ' 'samba.!rpcclientexe' 'server' --user='username'%'password' --command="querygroupmem 'grouprid'" 'debuglevel' '
290 address cmd samba.!rpcclientexe' 'server' --user='username'%'password' --command="querygroupmem 'grouprid'" 'debuglevel' >'samba.!msg
291
292 rpc.querygroupmem. = ""
293
294 Failure = 0
295
296 count = 0
297 SIGNAL ON SYNTAX NAME RPCERROR
298 do until lines(samba.!msg) = 0
299 rpcline = linein(samba.!msg)
300 if pos("creating default valid table",rpcline) <> 0 then iterate
301
302 if pos("LOGON_FAILURE", rpcline) > 0 then do
303 Failure = 1
304 leave
305 end
306 parse var rpcline 'rid:['trid'] attr:['tattr']'
307
308 token = translate(strip(strip(translate(token),'L','09'x)),'_',' ')
309 tvalue= strip(strip(tvalue,'L','09'x))
310 count = count + 1
311
312 dyn = 'rpc.querygroupmem.'count'.RID = "'Trid'"'
313 say " "dyn
314 interpret dyn
315
316 dyn = 'rpc.querygroupmem.'count'.ATTR = "'Tattr'"'
317 say " "dyn
318 interpret dyn
319
320 end
321 SIGNAL OFF SYNTAX
322 ok = stream(samba.!msg,'c','close')
323 ok = SysFileDelete(samba.!msg)
324 rpc.querygroupmem.0 = count
325
326 if Failure = 0 then do
327 retval = 1
328 rpc.querygroupmem.LOGONSTATUS="OK"
329 end
330 else do
331 retval = 0
332 rpc.querygroupmem.LOGONSTATUS=substr(rpcline,pos("NT_STATUS",rpcline),)
333 end
334 IF options.!debug == 1 THEN SAY time()" _rpcquerygroupmem() done, "retval" "rpc.querygroupmem.LOGONSTATUS
335return retval
336/*:VRX _rpcqueryuser
337*/
338_rpcqueryuser: procedure expose rpc. samba. options. debuglevel
339 IF options.!debug == 1 THEN SAY time()" _rpcqueryuser() started"
340 server = arg(1)
341 username = arg(2)
342 password = arg(3)
343 userrid = arg(4)
344
345 say ' 'samba.!rpcclientexe' 'server' --user='username'%'password' --command="queryuser 'userrid'" 'debuglevel' '
346 address cmd samba.!rpcclientexe' 'server' --user='username'%'password' --command="queryuser 'userrid'" 'debuglevel' >'samba.!msg
347
348 rpc.queryuser. = ""
349
350 Failure = 0
351 SIGNAL ON SYNTAX NAME RPCERROR
352 do until lines(samba.!msg) = 0
353 rpcline = linein(samba.!msg)
354 if pos("creating default valid table",rpcline) <> 0 then iterate
355
356 if pos("NT_STATUS", rpcline) > 0 then do
357 Failure = 1
358 leave
359 end
360 if pos("TDB(", translate(rpcline)) > 0 then do
361 Failure = 1
362 /* provide a fake NT_STATUS */
363 rpcline = 'NT_STATUS_TDBERROR 'rpcline
364 leave
365 end
366
367 parse var rpcline token ':' tvalue
368 token = translate(strip(strip(translate(token),'L','09'x)),'_',' ')
369 tvalue= strip(strip(tvalue,'L','09'x))
370 if pos('[',Token) = 0 & pos('TABLE',Token) = 0 & Token <> "" then do
371 dyn = 'rpc.queryuser.'Token' = "'Tvalue'"'
372 say " "dyn
373 interpret dyn
374 end
375 end
376 SIGNAL OFF SYNTAX
377 ok = stream(samba.!msg,'c','close')
378 ok = SysFileDelete(samba.!msg)
379
380 if Failure = 0 then do
381 retval = 1
382 rpc.queryuser.LOGONSTATUS="OK"
383 end
384 else do
385 retval = '0 '
386 rpc.queryuser.LOGONSTATUS=substr(rpcline,pos("NT_STATUS",rpcline),)
387 end
388 IF options.!debug == 1 THEN SAY time()" _rpcqueryuser() done, "retval" "rpc.queryuser.LOGONSTATUS
389return retval
390/*:VRX _rpcsrvinfo
391*/
392_rpcsrvinfo: procedure expose rpc. samba. options. debuglevel
393 IF options.!debug == 1 THEN SAY time()" _rpcsrvinfo() started"
394 server = arg(1)
395 username = arg(2)
396 password = arg(3)
397
398 usercred = '--user='username'%'password
399 if UserCred = 'USERCRED' | UserCred = '' | UserCred = '--user=%' then UserCred = '-N'
400
401 say ' 'samba.!rpcclientexe' 'server' 'usercred' --command="srvinfo" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
402 address cmd samba.!rpcclientexe' 'server' 'usercred' --command="srvinfo" 'debuglevel' 2>'samba.!error' 1>'samba.!msg
403
404 rpc.srvinfo. = ""
405
406 Failure = 0
407 do while lines(samba.!error) > 0
408 rpcline = linein(samba.!error)
409 say " "samba.!error":"rpcline
410 if pos("UNSUCCESSFUL", rpcline) > 0 then do
411 ok = stream(samba.!error,'c','close')
412 ok = SysFileDelete(samba.!error)
413 Failure = 1
414 retval = 0
415 rpc.srvinfo. = ""
416 rpc.srvinfo.LOGONSTATUS=substr(rpcline,pos("NT_STATUS",rpcline),)
417 IF options.!debug == 1 THEN SAY time()" _rpcsrvinfo() aborted, "retval
418 return retval
419 end
420 end
421
422 SIGNAL ON SYNTAX NAME RPCERROR
423 do until lines(samba.!msg) = 0
424 rpcline = linein(samba.!msg)
425 if pos("creating default valid table",rpcline) <> 0 then iterate
426
427 if pos("LOGON_FAILURE", rpcline) > 0 then do
428 Failure = 1
429 leave
430 end
431 if pos(':',rpcline) <> 0 then do
432 parse var rpcline token ':' tvalue
433 token = translate(strip(strip(translate(token),'L','09'x)),'_',' ')
434 tvalue= strip(strip(tvalue,'L','09'x))
435 dyn = 'rpc.srvinfo.'Token' = "'Tvalue'"'
436 say " "dyn
437 interpret dyn
438 end
439 else do
440 parse var rpcline '09'x rpc.srvinfo.NETBIOSNAME' 'rpc.srvinfo.SERVERSTRING
441 rpc.srvinfo.SERVERSTRING = strip(rpc.srvinfo.SERVERSTRING)
442 say ' rpc.srvinfo.NETBIOSNAME = "'rpc.srvinfo.NETBIOSNAME'"'
443 say ' rpc.srvinfo.SERVERSTRING = "'rpc.srvinfo.SERVERSTRING'"'
444 rpc.srvinfo.CAPABILITIES = ""
445 do I = 1 to words(rpc.srvinfo.SERVERSTRING)
446 say "Word "I":"word(rpc.srvinfo.SERVERSTRING,I)
447 if length(word(rpc.srvinfo.SERVERSTRING,I)) >=4 then leave
448 if length(word(rpc.srvinfo.SERVERSTRING,I)) = 2 | length(word(rpc.srvinfo.SERVERSTRING,I)) = 3 then do
449 rpc.srvinfo.CAPABILITIES = rpc.srvinfo.CAPABILITIES||word(rpc.srvinfo.SERVERSTRING,I)||' '
450 end
451 end
452 if rpc.srvinfo.CAPABILITIES <> "" then do
453 rpc.srvinfo.SERVERSTRING = strip(substr(rpc.srvinfo.SERVERSTRING,length(rpc.srvinfo.CAPABILITIES),))
454 rpc.srvinfo.CAPABILITIES = strip(rpc.srvinfo.CAPABILITIES)
455 end
456 say ' rpc.srvinfo.CAPABILITIES = "'rpc.srvinfo.CAPABILITIES'"'
457 say ' rpc.srvinfo.SERVERSTRING = "'rpc.srvinfo.SERVERSTRING'"'
458 end
459 end
460 SIGNAL OFF SYNTAX
461
462 ok = stream(samba.!msg,'c','close')
463 ok = SysFileDelete(samba.!msg)
464
465 if Failure = 0 then do
466 retval = 1
467 rpc.srvinfo.LOGONSTATUS="OK"
468 end
469 else do
470 retval = 0
471 rpc.srvinfo. = ""
472 rpc.srvinfo.LOGONSTATUS=substr(rpcline,pos("NT_STATUS",rpcline),)
473 end
474 say ' rpc.srvinfo.LOGONSTATUS = "'rpc.srvinfo.LOGONSTATUS'"'
475 IF options.!debug == 1 THEN SAY time()" _rpcsrvinfo() done, "retval
476return retval
477
478RPCERROR:
479 ok = stream(samba.!msg,'c','close')
480 ok = SysFileDelete(samba.!msg)
481 say " rpc parsing error in line "sigl": "strip(sourceline(sigl))
482 retval = -1
483 IF options.!debug == 1 THEN SAY time()" _rpclibrary aborted, "retval
484return retval
Note: See TracBrowser for help on using the repository browser.