librex 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. data/README.markdown +1 -1
  2. data/Rakefile +1 -0
  3. metadata +3 -435
  4. data/lib/rex/LICENSE +0 -29
  5. data/lib/rex/arch.rb +0 -103
  6. data/lib/rex/arch/sparc.rb +0 -75
  7. data/lib/rex/arch/sparc.rb.ut.rb +0 -18
  8. data/lib/rex/arch/x86.rb +0 -513
  9. data/lib/rex/arch/x86.rb.ut.rb +0 -93
  10. data/lib/rex/assembly/nasm.rb +0 -104
  11. data/lib/rex/assembly/nasm.rb.ut.rb +0 -22
  12. data/lib/rex/codepage.map +0 -104
  13. data/lib/rex/compat.rb +0 -311
  14. data/lib/rex/constants.rb +0 -113
  15. data/lib/rex/elfparsey.rb +0 -11
  16. data/lib/rex/elfparsey/elf.rb +0 -123
  17. data/lib/rex/elfparsey/elfbase.rb +0 -258
  18. data/lib/rex/elfparsey/exceptions.rb +0 -27
  19. data/lib/rex/elfscan.rb +0 -12
  20. data/lib/rex/elfscan/scanner.rb +0 -207
  21. data/lib/rex/elfscan/search.rb +0 -46
  22. data/lib/rex/encoder/alpha2.rb +0 -31
  23. data/lib/rex/encoder/alpha2/alpha_mixed.rb +0 -68
  24. data/lib/rex/encoder/alpha2/alpha_upper.rb +0 -79
  25. data/lib/rex/encoder/alpha2/generic.rb +0 -114
  26. data/lib/rex/encoder/alpha2/unicode_mixed.rb +0 -117
  27. data/lib/rex/encoder/alpha2/unicode_upper.rb +0 -129
  28. data/lib/rex/encoder/ndr.rb +0 -89
  29. data/lib/rex/encoder/ndr.rb.ut.rb +0 -44
  30. data/lib/rex/encoder/nonalpha.rb +0 -61
  31. data/lib/rex/encoder/nonupper.rb +0 -64
  32. data/lib/rex/encoder/xdr.rb +0 -106
  33. data/lib/rex/encoder/xdr.rb.ut.rb +0 -29
  34. data/lib/rex/encoder/xor.rb +0 -69
  35. data/lib/rex/encoder/xor/dword.rb +0 -13
  36. data/lib/rex/encoder/xor/dword_additive.rb +0 -13
  37. data/lib/rex/encoders/xor_dword.rb +0 -35
  38. data/lib/rex/encoders/xor_dword_additive.rb +0 -53
  39. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -12
  40. data/lib/rex/encoding/xor.rb +0 -20
  41. data/lib/rex/encoding/xor.rb.ts.rb +0 -14
  42. data/lib/rex/encoding/xor/byte.rb +0 -15
  43. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -21
  44. data/lib/rex/encoding/xor/dword.rb +0 -21
  45. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -15
  46. data/lib/rex/encoding/xor/dword_additive.rb +0 -92
  47. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -15
  48. data/lib/rex/encoding/xor/exceptions.rb +0 -17
  49. data/lib/rex/encoding/xor/generic.rb +0 -146
  50. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -120
  51. data/lib/rex/encoding/xor/qword.rb +0 -15
  52. data/lib/rex/encoding/xor/word.rb +0 -21
  53. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -13
  54. data/lib/rex/exceptions.rb +0 -275
  55. data/lib/rex/exceptions.rb.ut.rb +0 -44
  56. data/lib/rex/exploitation/cmdstager.rb +0 -9
  57. data/lib/rex/exploitation/cmdstager/base.rb +0 -175
  58. data/lib/rex/exploitation/cmdstager/debug_asm.rb +0 -142
  59. data/lib/rex/exploitation/cmdstager/debug_write.rb +0 -136
  60. data/lib/rex/exploitation/cmdstager/tftp.rb +0 -63
  61. data/lib/rex/exploitation/cmdstager/vbs.rb +0 -128
  62. data/lib/rex/exploitation/egghunter.rb +0 -277
  63. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -25
  64. data/lib/rex/exploitation/encryptjs.rb +0 -77
  65. data/lib/rex/exploitation/heaplib.js.b64 +0 -331
  66. data/lib/rex/exploitation/heaplib.rb +0 -94
  67. data/lib/rex/exploitation/javascriptosdetect.rb +0 -897
  68. data/lib/rex/exploitation/obfuscatejs.rb +0 -335
  69. data/lib/rex/exploitation/omelet.rb +0 -320
  70. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -13
  71. data/lib/rex/exploitation/opcodedb.rb +0 -818
  72. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -279
  73. data/lib/rex/exploitation/seh.rb +0 -92
  74. data/lib/rex/exploitation/seh.rb.ut.rb +0 -19
  75. data/lib/rex/file.rb +0 -112
  76. data/lib/rex/file.rb.ut.rb +0 -16
  77. data/lib/rex/image_source.rb +0 -12
  78. data/lib/rex/image_source/disk.rb +0 -60
  79. data/lib/rex/image_source/image_source.rb +0 -46
  80. data/lib/rex/image_source/memory.rb +0 -37
  81. data/lib/rex/io/bidirectional_pipe.rb +0 -157
  82. data/lib/rex/io/datagram_abstraction.rb +0 -35
  83. data/lib/rex/io/stream.rb +0 -319
  84. data/lib/rex/io/stream_abstraction.rb +0 -197
  85. data/lib/rex/io/stream_server.rb +0 -211
  86. data/lib/rex/job_container.rb +0 -187
  87. data/lib/rex/logging.rb +0 -4
  88. data/lib/rex/logging/log_dispatcher.rb +0 -179
  89. data/lib/rex/logging/log_sink.rb +0 -42
  90. data/lib/rex/logging/sinks/flatfile.rb +0 -55
  91. data/lib/rex/logging/sinks/stderr.rb +0 -43
  92. data/lib/rex/machparsey.rb +0 -9
  93. data/lib/rex/machparsey/exceptions.rb +0 -34
  94. data/lib/rex/machparsey/mach.rb +0 -209
  95. data/lib/rex/machparsey/machbase.rb +0 -408
  96. data/lib/rex/machscan.rb +0 -9
  97. data/lib/rex/machscan/scanner.rb +0 -217
  98. data/lib/rex/mime.rb +0 -9
  99. data/lib/rex/mime/header.rb +0 -77
  100. data/lib/rex/mime/message.rb +0 -144
  101. data/lib/rex/mime/part.rb +0 -20
  102. data/lib/rex/nop/opty2.rb +0 -108
  103. data/lib/rex/nop/opty2.rb.ut.rb +0 -23
  104. data/lib/rex/nop/opty2_tables.rb +0 -300
  105. data/lib/rex/ole.rb +0 -205
  106. data/lib/rex/ole/clsid.rb +0 -47
  107. data/lib/rex/ole/difat.rb +0 -141
  108. data/lib/rex/ole/directory.rb +0 -231
  109. data/lib/rex/ole/direntry.rb +0 -240
  110. data/lib/rex/ole/docs/dependencies.txt +0 -8
  111. data/lib/rex/ole/docs/references.txt +0 -1
  112. data/lib/rex/ole/fat.rb +0 -99
  113. data/lib/rex/ole/header.rb +0 -204
  114. data/lib/rex/ole/minifat.rb +0 -77
  115. data/lib/rex/ole/propset.rb +0 -144
  116. data/lib/rex/ole/samples/create_ole.rb +0 -27
  117. data/lib/rex/ole/samples/dir.rb +0 -35
  118. data/lib/rex/ole/samples/dump_stream.rb +0 -34
  119. data/lib/rex/ole/samples/ole_info.rb +0 -23
  120. data/lib/rex/ole/storage.rb +0 -395
  121. data/lib/rex/ole/stream.rb +0 -53
  122. data/lib/rex/ole/substorage.rb +0 -49
  123. data/lib/rex/ole/util.rb +0 -157
  124. data/lib/rex/parser/arguments.rb +0 -97
  125. data/lib/rex/parser/arguments.rb.ut.rb +0 -67
  126. data/lib/rex/parser/ini.rb +0 -185
  127. data/lib/rex/parser/ini.rb.ut.rb +0 -29
  128. data/lib/rex/parser/ip360_aspl_xml.rb +0 -102
  129. data/lib/rex/parser/ip360_xml.rb +0 -93
  130. data/lib/rex/parser/nessus_xml.rb +0 -118
  131. data/lib/rex/parser/netsparker_xml.rb +0 -94
  132. data/lib/rex/parser/nexpose_xml.rb +0 -131
  133. data/lib/rex/parser/nmap_xml.rb +0 -121
  134. data/lib/rex/parser/retina_xml.rb +0 -109
  135. data/lib/rex/payloads.rb +0 -1
  136. data/lib/rex/payloads/win32.rb +0 -2
  137. data/lib/rex/payloads/win32/common.rb +0 -26
  138. data/lib/rex/payloads/win32/kernel.rb +0 -53
  139. data/lib/rex/payloads/win32/kernel/common.rb +0 -54
  140. data/lib/rex/payloads/win32/kernel/migration.rb +0 -12
  141. data/lib/rex/payloads/win32/kernel/recovery.rb +0 -50
  142. data/lib/rex/payloads/win32/kernel/stager.rb +0 -194
  143. data/lib/rex/peparsey.rb +0 -12
  144. data/lib/rex/peparsey/exceptions.rb +0 -32
  145. data/lib/rex/peparsey/pe.rb +0 -212
  146. data/lib/rex/peparsey/pe_memdump.rb +0 -63
  147. data/lib/rex/peparsey/pebase.rb +0 -1680
  148. data/lib/rex/peparsey/section.rb +0 -136
  149. data/lib/rex/pescan.rb +0 -13
  150. data/lib/rex/pescan/analyze.rb +0 -309
  151. data/lib/rex/pescan/scanner.rb +0 -206
  152. data/lib/rex/pescan/search.rb +0 -56
  153. data/lib/rex/platforms.rb +0 -1
  154. data/lib/rex/platforms/windows.rb +0 -51
  155. data/lib/rex/poly.rb +0 -132
  156. data/lib/rex/poly/block.rb +0 -477
  157. data/lib/rex/poly/register.rb +0 -100
  158. data/lib/rex/poly/register/x86.rb +0 -40
  159. data/lib/rex/post.rb +0 -8
  160. data/lib/rex/post/dir.rb +0 -51
  161. data/lib/rex/post/file.rb +0 -172
  162. data/lib/rex/post/file_stat.rb +0 -220
  163. data/lib/rex/post/gen.pl +0 -13
  164. data/lib/rex/post/io.rb +0 -182
  165. data/lib/rex/post/meterpreter.rb +0 -4
  166. data/lib/rex/post/meterpreter/channel.rb +0 -445
  167. data/lib/rex/post/meterpreter/channel_container.rb +0 -54
  168. data/lib/rex/post/meterpreter/channels/pool.rb +0 -160
  169. data/lib/rex/post/meterpreter/channels/pools/file.rb +0 -62
  170. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +0 -103
  171. data/lib/rex/post/meterpreter/channels/stream.rb +0 -87
  172. data/lib/rex/post/meterpreter/client.rb +0 -364
  173. data/lib/rex/post/meterpreter/client_core.rb +0 -274
  174. data/lib/rex/post/meterpreter/dependencies.rb +0 -3
  175. data/lib/rex/post/meterpreter/extension.rb +0 -32
  176. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +0 -58
  177. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +0 -16
  178. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +0 -94
  179. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +0 -21
  180. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +0 -57
  181. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +0 -15
  182. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +0 -118
  183. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +0 -61
  184. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +0 -111
  185. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +0 -28
  186. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +0 -101
  187. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +0 -26
  188. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +0 -333
  189. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +0 -282
  190. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +0 -266
  191. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +0 -103
  192. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +0 -48
  193. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +0 -144
  194. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +0 -73
  195. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +0 -56
  196. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +0 -137
  197. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +0 -180
  198. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +0 -167
  199. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +0 -208
  200. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -6
  201. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +0 -38106
  202. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -31
  203. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +0 -47
  204. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -36
  205. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +0 -1818
  206. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +0 -96
  207. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +0 -3848
  208. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +0 -26
  209. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +0 -153
  210. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +0 -21
  211. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +0 -3169
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +0 -599
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +0 -318
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +0 -100
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -42
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +0 -148
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -127
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +0 -309
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +0 -204
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +0 -51
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +0 -630
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +0 -75
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -103
  224. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +0 -149
  225. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +0 -97
  226. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +0 -192
  227. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +0 -41
  228. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +0 -61
  229. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +0 -370
  230. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +0 -129
  231. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +0 -55
  232. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +0 -336
  233. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +0 -141
  234. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +0 -279
  235. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +0 -193
  236. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +0 -102
  237. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +0 -180
  238. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +0 -211
  239. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +0 -227
  240. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +0 -63
  241. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +0 -30
  242. data/lib/rex/post/meterpreter/object_aliases.rb +0 -83
  243. data/lib/rex/post/meterpreter/packet.rb +0 -688
  244. data/lib/rex/post/meterpreter/packet_dispatcher.rb +0 -431
  245. data/lib/rex/post/meterpreter/packet_parser.rb +0 -94
  246. data/lib/rex/post/meterpreter/packet_response_waiter.rb +0 -83
  247. data/lib/rex/post/meterpreter/ui/console.rb +0 -137
  248. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +0 -62
  249. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +0 -730
  250. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +0 -108
  251. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +0 -241
  252. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +0 -231
  253. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +0 -61
  254. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +0 -98
  255. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +0 -51
  256. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +0 -132
  257. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +0 -187
  258. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +0 -65
  259. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +0 -442
  260. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +0 -298
  261. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +0 -486
  262. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +0 -315
  263. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +0 -157
  264. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +0 -95
  265. data/lib/rex/post/permission.rb +0 -26
  266. data/lib/rex/post/process.rb +0 -57
  267. data/lib/rex/post/thread.rb +0 -57
  268. data/lib/rex/post/ui.rb +0 -52
  269. data/lib/rex/proto.rb +0 -13
  270. data/lib/rex/proto.rb.ts.rb +0 -8
  271. data/lib/rex/proto/dcerpc.rb +0 -6
  272. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -9
  273. data/lib/rex/proto/dcerpc/client.rb +0 -361
  274. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -491
  275. data/lib/rex/proto/dcerpc/exceptions.rb +0 -150
  276. data/lib/rex/proto/dcerpc/handle.rb +0 -47
  277. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -85
  278. data/lib/rex/proto/dcerpc/ndr.rb +0 -72
  279. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -41
  280. data/lib/rex/proto/dcerpc/packet.rb +0 -253
  281. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -56
  282. data/lib/rex/proto/dcerpc/response.rb +0 -187
  283. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -15
  284. data/lib/rex/proto/dcerpc/uuid.rb +0 -84
  285. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -46
  286. data/lib/rex/proto/dhcp.rb +0 -7
  287. data/lib/rex/proto/dhcp/constants.rb +0 -33
  288. data/lib/rex/proto/dhcp/server.rb +0 -292
  289. data/lib/rex/proto/drda.rb +0 -5
  290. data/lib/rex/proto/drda.rb.ts.rb +0 -17
  291. data/lib/rex/proto/drda/constants.rb +0 -49
  292. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -23
  293. data/lib/rex/proto/drda/packet.rb +0 -252
  294. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -109
  295. data/lib/rex/proto/drda/utils.rb +0 -123
  296. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -84
  297. data/lib/rex/proto/http.rb +0 -5
  298. data/lib/rex/proto/http.rb.ts.rb +0 -12
  299. data/lib/rex/proto/http/client.rb +0 -821
  300. data/lib/rex/proto/http/client.rb.ut.rb +0 -95
  301. data/lib/rex/proto/http/handler.rb +0 -46
  302. data/lib/rex/proto/http/handler/erb.rb +0 -128
  303. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -21
  304. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  305. data/lib/rex/proto/http/handler/proc.rb +0 -60
  306. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -24
  307. data/lib/rex/proto/http/header.rb +0 -161
  308. data/lib/rex/proto/http/header.rb.ut.rb +0 -46
  309. data/lib/rex/proto/http/packet.rb +0 -407
  310. data/lib/rex/proto/http/packet.rb.ut.rb +0 -165
  311. data/lib/rex/proto/http/request.rb +0 -356
  312. data/lib/rex/proto/http/request.rb.ut.rb +0 -214
  313. data/lib/rex/proto/http/response.rb +0 -90
  314. data/lib/rex/proto/http/response.rb.ut.rb +0 -149
  315. data/lib/rex/proto/http/server.rb +0 -369
  316. data/lib/rex/proto/http/server.rb.ut.rb +0 -79
  317. data/lib/rex/proto/ntlm.rb +0 -7
  318. data/lib/rex/proto/ntlm.rb.ut.rb +0 -177
  319. data/lib/rex/proto/ntlm/base.rb +0 -326
  320. data/lib/rex/proto/ntlm/constants.rb +0 -74
  321. data/lib/rex/proto/ntlm/crypt.rb +0 -415
  322. data/lib/rex/proto/ntlm/exceptions.rb +0 -9
  323. data/lib/rex/proto/ntlm/message.rb +0 -533
  324. data/lib/rex/proto/ntlm/utils.rb +0 -763
  325. data/lib/rex/proto/proxy/socks4a.rb +0 -440
  326. data/lib/rex/proto/rfb.rb +0 -19
  327. data/lib/rex/proto/rfb.rb.ut.rb +0 -37
  328. data/lib/rex/proto/rfb/cipher.rb +0 -84
  329. data/lib/rex/proto/rfb/client.rb +0 -207
  330. data/lib/rex/proto/rfb/constants.rb +0 -52
  331. data/lib/rex/proto/smb.rb +0 -7
  332. data/lib/rex/proto/smb.rb.ts.rb +0 -8
  333. data/lib/rex/proto/smb/client.rb +0 -1952
  334. data/lib/rex/proto/smb/client.rb.ut.rb +0 -223
  335. data/lib/rex/proto/smb/constants.rb +0 -1047
  336. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -18
  337. data/lib/rex/proto/smb/crypt.rb +0 -36
  338. data/lib/rex/proto/smb/evasions.rb +0 -66
  339. data/lib/rex/proto/smb/exceptions.rb +0 -858
  340. data/lib/rex/proto/smb/simpleclient.rb +0 -306
  341. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -128
  342. data/lib/rex/proto/smb/utils.rb +0 -103
  343. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -20
  344. data/lib/rex/proto/sunrpc.rb +0 -1
  345. data/lib/rex/proto/sunrpc/client.rb +0 -195
  346. data/lib/rex/proto/tftp.rb +0 -12
  347. data/lib/rex/proto/tftp/constants.rb +0 -39
  348. data/lib/rex/proto/tftp/server.rb +0 -497
  349. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -28
  350. data/lib/rex/script.rb +0 -42
  351. data/lib/rex/script/base.rb +0 -59
  352. data/lib/rex/script/meterpreter.rb +0 -15
  353. data/lib/rex/script/shell.rb +0 -9
  354. data/lib/rex/service.rb +0 -48
  355. data/lib/rex/service_manager.rb +0 -141
  356. data/lib/rex/service_manager.rb.ut.rb +0 -32
  357. data/lib/rex/services/local_relay.rb +0 -423
  358. data/lib/rex/socket.rb +0 -684
  359. data/lib/rex/socket.rb.ut.rb +0 -107
  360. data/lib/rex/socket/comm.rb +0 -119
  361. data/lib/rex/socket/comm/local.rb +0 -412
  362. data/lib/rex/socket/comm/local.rb.ut.rb +0 -75
  363. data/lib/rex/socket/ip.rb +0 -130
  364. data/lib/rex/socket/parameters.rb +0 -345
  365. data/lib/rex/socket/parameters.rb.ut.rb +0 -51
  366. data/lib/rex/socket/range_walker.rb +0 -346
  367. data/lib/rex/socket/range_walker.rb.ut.rb +0 -55
  368. data/lib/rex/socket/ssl_tcp.rb +0 -184
  369. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -39
  370. data/lib/rex/socket/ssl_tcp_server.rb +0 -122
  371. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -61
  372. data/lib/rex/socket/subnet_walker.rb +0 -75
  373. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -28
  374. data/lib/rex/socket/switch_board.rb +0 -278
  375. data/lib/rex/socket/switch_board.rb.ut.rb +0 -52
  376. data/lib/rex/socket/tcp.rb +0 -76
  377. data/lib/rex/socket/tcp.rb.ut.rb +0 -64
  378. data/lib/rex/socket/tcp_server.rb +0 -67
  379. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -44
  380. data/lib/rex/socket/udp.rb +0 -164
  381. data/lib/rex/socket/udp.rb.ut.rb +0 -44
  382. data/lib/rex/struct2.rb +0 -5
  383. data/lib/rex/struct2/c_struct.rb +0 -181
  384. data/lib/rex/struct2/c_struct_template.rb +0 -39
  385. data/lib/rex/struct2/constant.rb +0 -26
  386. data/lib/rex/struct2/element.rb +0 -44
  387. data/lib/rex/struct2/generic.rb +0 -73
  388. data/lib/rex/struct2/restraint.rb +0 -54
  389. data/lib/rex/struct2/s_string.rb +0 -72
  390. data/lib/rex/struct2/s_struct.rb +0 -111
  391. data/lib/rex/sync.rb +0 -6
  392. data/lib/rex/sync/event.rb +0 -94
  393. data/lib/rex/sync/read_write_lock.rb +0 -176
  394. data/lib/rex/sync/ref.rb +0 -57
  395. data/lib/rex/sync/thread_safe.rb +0 -82
  396. data/lib/rex/test.rb +0 -35
  397. data/lib/rex/text.rb +0 -1149
  398. data/lib/rex/text.rb.ut.rb +0 -190
  399. data/lib/rex/thread_factory.rb +0 -42
  400. data/lib/rex/time.rb +0 -65
  401. data/lib/rex/transformer.rb +0 -115
  402. data/lib/rex/transformer.rb.ut.rb +0 -38
  403. data/lib/rex/ui.rb +0 -21
  404. data/lib/rex/ui/interactive.rb +0 -254
  405. data/lib/rex/ui/output.rb +0 -78
  406. data/lib/rex/ui/output/none.rb +0 -18
  407. data/lib/rex/ui/progress_tracker.rb +0 -96
  408. data/lib/rex/ui/subscriber.rb +0 -149
  409. data/lib/rex/ui/text/color.rb +0 -97
  410. data/lib/rex/ui/text/color.rb.ut.rb +0 -18
  411. data/lib/rex/ui/text/dispatcher_shell.rb +0 -467
  412. data/lib/rex/ui/text/input.rb +0 -117
  413. data/lib/rex/ui/text/input/buffer.rb +0 -75
  414. data/lib/rex/ui/text/input/readline.rb +0 -129
  415. data/lib/rex/ui/text/input/socket.rb +0 -95
  416. data/lib/rex/ui/text/input/stdio.rb +0 -45
  417. data/lib/rex/ui/text/irb_shell.rb +0 -57
  418. data/lib/rex/ui/text/output.rb +0 -80
  419. data/lib/rex/ui/text/output/buffer.rb +0 -61
  420. data/lib/rex/ui/text/output/file.rb +0 -43
  421. data/lib/rex/ui/text/output/socket.rb +0 -43
  422. data/lib/rex/ui/text/output/stdio.rb +0 -40
  423. data/lib/rex/ui/text/progress_tracker.rb +0 -56
  424. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -34
  425. data/lib/rex/ui/text/shell.rb +0 -328
  426. data/lib/rex/ui/text/table.rb +0 -279
  427. data/lib/rex/ui/text/table.rb.ut.rb +0 -55
  428. data/lib/rex/zip.rb +0 -93
  429. data/lib/rex/zip/archive.rb +0 -184
  430. data/lib/rex/zip/blocks.rb +0 -182
  431. data/lib/rex/zip/entry.rb +0 -104
  432. data/lib/rex/zip/samples/comment.rb +0 -32
  433. data/lib/rex/zip/samples/mkwar.rb +0 -138
  434. data/lib/rex/zip/samples/mkzip.rb +0 -19
  435. data/lib/rex/zip/samples/recursive.rb +0 -58
@@ -1,149 +0,0 @@
1
- module Rex
2
- module Ui
3
-
4
- ###
5
- #
6
- # This module provides a subscriber interface to input/output.
7
- #
8
- ###
9
- module Subscriber
10
-
11
- ##
12
- #
13
- # Subscribes to the output half of the user interface.
14
- #
15
- ##
16
- module Output
17
-
18
- #
19
- # Wraps user_output.print_line
20
- #
21
- def print_line(msg='')
22
- if (user_output)
23
- print_blank_line if user_output.prompting?
24
- user_output.print_line(msg)
25
- end
26
- end
27
-
28
- #
29
- # Wraps user_output.print_status
30
- #
31
- def print_status(msg='')
32
- if (user_output)
33
- print_blank_line if user_output.prompting?
34
- user_output.print_status(msg)
35
- end
36
- end
37
-
38
- #
39
- # Wraps user_output.print_error
40
- #
41
- def print_error(msg='')
42
- if (user_output)
43
- print_blank_line if user_output.prompting?
44
- user_output.print_error(msg)
45
- end
46
- end
47
-
48
- #
49
- # Wraps user_output.print_good
50
- #
51
- def print_good(msg='')
52
- if (user_output)
53
- print_blank_line if user_output.prompting?
54
- user_output.print_good(msg)
55
- end
56
- end
57
-
58
- #
59
- # Wraps user_output.print_debug
60
- #
61
- def print_debug(msg='')
62
- if (user_output)
63
- print_blank_line if user_output.prompting?
64
- user_output.print_debug(msg)
65
- end
66
- end
67
-
68
- #
69
- # Wraps user_output.print
70
- #
71
- def print(msg='')
72
- user_output.print(msg) if (user_output)
73
- end
74
-
75
- #
76
- # Wraps user_output.flush
77
- #
78
- def flush
79
- user_output.flush if (user_output)
80
- end
81
-
82
- #
83
- # The user output handle.
84
- #
85
- attr_accessor :user_output
86
-
87
- protected
88
-
89
- #
90
- # Prints a blank line. Used when the input is prompting.
91
- #
92
- def print_blank_line
93
- user_output.prompting(false)
94
- user_output.print_line
95
- end
96
-
97
- end
98
-
99
- ##
100
- #
101
- # Subscribes to the input half of the user interface.
102
- #
103
- ##
104
- module Input
105
-
106
- #
107
- # Gets a line of input from the user_input handle by calling gets.
108
- #
109
- def gets
110
- user_input.gets if (user_input)
111
- end
112
-
113
- #
114
- # The user intput handle.
115
- #
116
- attr_accessor :user_input
117
-
118
- end
119
-
120
- include Output
121
- include Input
122
-
123
- #
124
- # Sets the input and output handles.
125
- #
126
- def init_ui(input = nil, output = nil)
127
- self.user_input = input
128
- self.user_output = output
129
- end
130
-
131
- #
132
- # Disables input/output
133
- #
134
- def reset_ui
135
- self.user_input = nil
136
- self.user_output = nil
137
- end
138
-
139
- #
140
- # Copy the user input and output handles from the supplied subscriber.
141
- #
142
- def copy_ui(subscriber)
143
- init_ui(subscriber.user_input, subscriber.user_output)
144
- end
145
-
146
- end
147
-
148
- end
149
- end
@@ -1,97 +0,0 @@
1
- module Rex
2
- module Ui
3
- module Text
4
-
5
- ###
6
- #
7
- # This module provides an interface to getting ANSI color codes.
8
- # It's taken mostly from perl's Term::ANSIColor by Russ Allbery
9
- # <rra@stanford.edu> and Zenin <zenin@best.com>.
10
- #
11
- ###
12
- module Color
13
-
14
- AnsiAttributes =
15
- {
16
- 'clear' => 0,
17
- 'reset' => 0,
18
- 'bold' => 1,
19
- 'dark' => 2,
20
- 'underline' => 4,
21
- 'underscore' => 4,
22
- 'blink' => 5,
23
- 'reverse' => 7,
24
- 'concealed' => 8,
25
- 'black' => 30, 'on_black' => 40,
26
- 'red' => 31, 'on_red' => 41,
27
- 'green' => 32, 'on_green' => 42,
28
- 'yellow' => 33, 'on_yellow' => 43,
29
- 'blue' => 34, 'on_blue' => 44,
30
- 'magenta' => 35, 'on_magenta' => 45,
31
- 'cyan' => 36, 'on_cyan' => 46,
32
- 'white' => 37, 'on_white' => 47
33
- }
34
-
35
- #
36
- # Return a string with ANSI codes substituted. Derived from code
37
- # written by The FaerieMUD Consortium.
38
- #
39
- def ansi(*attrs)
40
- attr = attrs.collect {|a| AnsiAttributes[a] ? AnsiAttributes[a] : nil}.compact.join(';')
41
- attr = "\e[%sm" % attr if (attr.empty? == false)
42
- return attr
43
- end
44
-
45
- #
46
- # Colorize if this shell supports it
47
- #
48
- def colorize(*color)
49
- supports_color?() ? ansi(*color) : ''
50
- end
51
-
52
- def substitute_colors(msg, in_prompt = nil)
53
- str = msg.dup
54
- pre_color = post_color = ''
55
- if (in_prompt)
56
- pre_color = "\x01" # RL_PROMPT_START_IGNORE
57
- post_color = "\x02" # RL_PROMPT_END_IGNORE
58
- end
59
- str.gsub!(/%cya/, pre_color+colorize('cyan')+post_color)
60
- str.gsub!(/%red/, pre_color+colorize('red')+post_color)
61
- str.gsub!(/%grn/, pre_color+colorize('green')+post_color)
62
- str.gsub!(/%blu/, pre_color+colorize('blue')+post_color)
63
- str.gsub!(/%yel/, pre_color+colorize('yellow')+post_color)
64
- str.gsub!(/%whi/, pre_color+colorize('white')+post_color)
65
- str.gsub!(/%mag/, pre_color+colorize('magenta')+post_color)
66
- str.gsub!(/%blk/, pre_color+colorize('black')+post_color)
67
- str.gsub!(/%dred/, pre_color+colorize('dark', 'red')+post_color)
68
- str.gsub!(/%dgrn/, pre_color+colorize('dark', 'green')+post_color)
69
- str.gsub!(/%dblu/, pre_color+colorize('dark', 'blue')+post_color)
70
- str.gsub!(/%dyel/, pre_color+colorize('dark', 'yellow')+post_color)
71
- str.gsub!(/%dcya/, pre_color+colorize('dark', 'cyan')+post_color)
72
- str.gsub!(/%dwhi/, pre_color+colorize('dark', 'white')+post_color)
73
- str.gsub!(/%dmag/, pre_color+colorize('dark', 'magenta')+post_color)
74
- str.gsub!(/%und/, pre_color+colorize('underline')+post_color)
75
- str.gsub!(/%bld/, pre_color+colorize('bold')+post_color)
76
- str.gsub!(/%clr/, pre_color+colorize('clear')+post_color)
77
-
78
- str
79
- end
80
-
81
- #
82
- # Resets coloring so that it's back to normal.
83
- #
84
- def reset_color
85
- return if not supports_color?
86
- print(colorize('clear'))
87
- end
88
-
89
- #
90
- # Colorize if this shell supports it
91
- #
92
- def do_colorize(*color)
93
- supports_color?() ? ansi(*color) : ''
94
- end
95
- end
96
-
97
- end end end
@@ -1,18 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
-
5
- require 'test/unit'
6
- require 'rex/ui/text/color'
7
-
8
- class Rex::Ui::Text::Color::UnitTest < Test::Unit::TestCase
9
-
10
- def test_color
11
- color = Rex::Ui::Text::Color.new.ansi('bold', 'red')
12
- color += 'hey sup'
13
- color += Rex::Ui::Text::Color.new.ansi('clear')
14
-
15
- assert_equal("\e[1;31mhey sup\e[0m", color)
16
- end
17
-
18
- end
@@ -1,467 +0,0 @@
1
- require 'rex/ui'
2
- require 'pp'
3
-
4
- module Rex
5
- module Ui
6
- module Text
7
-
8
- ###
9
- #
10
- # The dispatcher shell class is designed to provide a generic means
11
- # of processing various shell commands that may be located in
12
- # different modules or chunks of codes. These chunks are referred
13
- # to as command dispatchers. The only requirement for command dispatchers is
14
- # that they prefix every method that they wish to be mirrored as a command
15
- # with the cmd_ prefix.
16
- #
17
- ###
18
- module DispatcherShell
19
-
20
- ###
21
- #
22
- # Empty template base class for command dispatchers.
23
- #
24
- ###
25
- module CommandDispatcher
26
-
27
- #
28
- # Initializes the command dispatcher mixin.
29
- #
30
- def initialize(shell)
31
- self.shell = shell
32
- self.tab_complete_items = []
33
- end
34
-
35
- #
36
- # Returns nil for an empty set of commands.
37
- #
38
- def commands
39
- end
40
-
41
- #
42
- # Wraps shell.print_error
43
- #
44
- def print_error(msg = '')
45
- shell.print_error(msg)
46
- end
47
-
48
- #
49
- # Wraps shell.print_status
50
- #
51
- def print_status(msg = '')
52
- shell.print_status(msg)
53
- end
54
-
55
- #
56
- # Wraps shell.print_line
57
- #
58
- def print_line(msg = '')
59
- shell.print_line(msg)
60
- end
61
-
62
- #
63
- # Wraps shell.print_good
64
- #
65
- def print_good(msg = '')
66
- shell.print_good(msg)
67
- end
68
-
69
- #
70
- # Wraps shell.print
71
- #
72
- def print(msg = '')
73
- shell.print(msg)
74
- end
75
-
76
- #
77
- # Wraps shell.update_prompt
78
- #
79
- def update_prompt(prompt=nil)
80
- shell.update_prompt(prompt)
81
- end
82
-
83
- #
84
- # Displays the help banner. With no arguments, this is just a list of
85
- # all commands grouped by dispatcher. Otherwise, tries to use a method
86
- # named cmd_#{+cmd+}_help for the first dispatcher that has a command
87
- # named +cmd+.
88
- #
89
- def cmd_help(cmd=nil, *ignored)
90
- if cmd
91
- help_found = false
92
- cmd_found = false
93
- shell.dispatcher_stack.each do |dispatcher|
94
- next unless dispatcher.respond_to?(:commands)
95
- next if (dispatcher.commands.nil?)
96
- next if (dispatcher.commands.length == 0)
97
-
98
- if dispatcher.respond_to?("cmd_#{cmd}")
99
- cmd_found = true
100
- break unless dispatcher.respond_to? "cmd_#{cmd}_help"
101
- dispatcher.send("cmd_#{cmd}_help")
102
- help_found = true
103
- break
104
- end
105
- end
106
- print_error("No help for #{cmd}, try -h") if cmd_found and not help_found
107
- print_error("No such command") if not cmd_found
108
- else
109
- print(shell.help_to_s)
110
- end
111
- end
112
-
113
- #
114
- # Tab completion for the help command
115
- #
116
- # By default just returns a list of all commands in all dispatchers.
117
- #
118
- def cmd_help_tabs(str, words)
119
- return [] if words.length > 1
120
-
121
- tabs = []
122
- shell.dispatcher_stack.each { |dispatcher|
123
- tabs += dispatcher.commands.keys
124
- }
125
- return tabs
126
- end
127
-
128
- alias cmd_? cmd_help
129
-
130
-
131
- #
132
- # No tab completion items by default
133
- #
134
- attr_accessor :shell, :tab_complete_items
135
-
136
- #
137
- # Provide a generic tab completion for file names.
138
- #
139
- # If the only completion is a directory, this descends into that directory
140
- # and continues completions with filenames contained within.
141
- #
142
- def tab_complete_filenames(str, words)
143
- matches = ::Readline::FILENAME_COMPLETION_PROC.call(str)
144
- if matches and matches.length == 1 and File.directory?(matches[0])
145
- dir = matches[0]
146
- dir += File::SEPARATOR if dir[-1,1] != File::SEPARATOR
147
- matches = ::Readline::FILENAME_COMPLETION_PROC.call(dir)
148
- end
149
- matches
150
- end
151
-
152
- end
153
-
154
- #
155
- # DispatcherShell derives from shell.
156
- #
157
- include Shell
158
-
159
- #
160
- # Initialize the dispatcher shell.
161
- #
162
- def initialize(prompt, prompt_char = '>', histfile = nil)
163
- super
164
-
165
- # Initialze the dispatcher array
166
- self.dispatcher_stack = []
167
-
168
- # Initialize the tab completion array
169
- self.tab_words = []
170
- self.on_command_proc = nil
171
- end
172
-
173
- #
174
- # This method accepts the entire line of text from the Readline
175
- # routine, stores all completed words, and passes the partial
176
- # word to the real tab completion function. This works around
177
- # a design problem in the Readline module and depends on the
178
- # Readline.basic_word_break_characters variable being set to \x00
179
- #
180
- def tab_complete(str)
181
- # Check trailing whitespace so we can tell 'x' from 'x '
182
- str_match = str.match(/\s+$/)
183
- str_trail = (str_match.nil?) ? '' : str_match[0]
184
-
185
- # Split the line up by whitespace into words
186
- str_words = str.split(/[\s\t\n]+/)
187
-
188
- # Append an empty word if we had trailing whitespace
189
- str_words << '' if str_trail.length > 0
190
-
191
- # Place the word list into an instance variable
192
- self.tab_words = str_words
193
-
194
- # Pop the last word and pass it to the real method
195
- tab_complete_stub(self.tab_words.pop)
196
- end
197
-
198
- # Performs tab completion of a command, if supported
199
- # Current words can be found in self.tab_words
200
- #
201
- def tab_complete_stub(str)
202
- items = []
203
-
204
- return nil if not str
205
-
206
- # puts "Words(#{tab_words.join(", ")}) Partial='#{str}'"
207
-
208
- # Next, try to match internal command or value completion
209
- # Enumerate each entry in the dispatcher stack
210
- dispatcher_stack.each { |dispatcher|
211
-
212
- # If no command is set and it supports commands, add them all
213
- if (tab_words.empty? and dispatcher.respond_to?('commands'))
214
- items.concat(dispatcher.commands.keys)
215
- end
216
-
217
- # If the dispatcher exports a tab completion function, use it
218
- if(dispatcher.respond_to?('tab_complete_helper'))
219
- res = dispatcher.tab_complete_helper(str, tab_words)
220
- else
221
- res = tab_complete_helper(dispatcher, str, tab_words)
222
- end
223
-
224
- if (res.nil?)
225
- # A nil response indicates no optional arguments
226
- return [''] if items.empty?
227
- else
228
- # Otherwise we add the completion items to the list
229
- items.concat(res)
230
- end
231
- }
232
-
233
- # Verify that our search string is a valid regex
234
- begin
235
- Regexp.compile(str)
236
- rescue RegexpError
237
- str = Regexp.escape(str)
238
- end
239
-
240
- # XXX - This still doesn't fix some Regexp warnings:
241
- # ./lib/rex/ui/text/dispatcher_shell.rb:171: warning: regexp has `]' without escape
242
-
243
- # Match based on the partial word
244
- items.find_all { |e|
245
- e =~ /^#{str}/
246
- # Prepend the rest of the command (or it gets replaced!)
247
- }.map { |e|
248
- tab_words.dup.push(e).join(' ')
249
- }
250
- end
251
-
252
- #
253
- # Provide command-specific tab completion
254
- #
255
- def tab_complete_helper(dispatcher, str, words)
256
- items = []
257
-
258
- tabs_meth = "cmd_#{words[0]}_tabs"
259
- # Is the user trying to tab complete one of our commands?
260
- if (dispatcher.commands.include?(words[0]) and dispatcher.respond_to?(tabs_meth))
261
- res = dispatcher.send(tabs_meth, str, words)
262
- return [] if res.nil?
263
- items.concat(res)
264
- else
265
- # Avoid the default completion list for known commands
266
- return []
267
- end
268
-
269
- return items
270
- end
271
-
272
- #
273
- # Run a single command line.
274
- #
275
- def run_single(line)
276
- arguments = parse_line(line)
277
- method = arguments.shift
278
- found = false
279
- error = false
280
-
281
- # If output is disabled output will be nil
282
- output.reset_color if (output)
283
-
284
- if (method)
285
- entries = dispatcher_stack.length
286
-
287
- dispatcher_stack.each { |dispatcher|
288
- next if not dispatcher.respond_to?('commands')
289
-
290
- begin
291
- if (dispatcher.commands.has_key?(method))
292
- self.on_command_proc.call(line.strip) if self.on_command_proc
293
- run_command(dispatcher, method, arguments)
294
- found = true
295
- end
296
- rescue
297
- error = $!
298
-
299
- print_error(
300
- "Error while running command #{method}: #{$!}" +
301
- "\n\nCall stack:\n#{$@.join("\n")}")
302
- rescue ::Exception
303
- error = $!
304
-
305
- print_error(
306
- "Error while running command #{method}: #{$!}")
307
- end
308
-
309
- # If the dispatcher stack changed as a result of this command,
310
- # break out
311
- break if (dispatcher_stack.length != entries)
312
- }
313
-
314
- if (found == false and error == false)
315
- unknown_command(method, line)
316
- end
317
- end
318
-
319
- return found
320
- end
321
-
322
- #
323
- # Runs the supplied command on the given dispatcher.
324
- #
325
- def run_command(dispatcher, method, arguments)
326
- self.busy = true
327
-
328
- if(blocked_command?(method))
329
- print_error("The #{method} command has been disabled.")
330
- else
331
- dispatcher.send('cmd_' + method, *arguments)
332
- end
333
- self.busy = false
334
- end
335
-
336
- #
337
- # If the command is unknown...
338
- #
339
- def unknown_command(method, line)
340
- print_error("Unknown command: #{method}.")
341
- end
342
-
343
- #
344
- # Push a dispatcher to the front of the stack.
345
- #
346
- def enstack_dispatcher(dispatcher)
347
- self.dispatcher_stack.unshift(inst = dispatcher.new(self))
348
-
349
- inst
350
- end
351
-
352
- #
353
- # Pop a dispatcher from the front of the stacker.
354
- #
355
- def destack_dispatcher
356
- self.dispatcher_stack.shift
357
- end
358
-
359
- #
360
- # Adds the supplied dispatcher to the end of the dispatcher stack so that
361
- # it doesn't affect any enstack'd dispatchers.
362
- #
363
- def append_dispatcher(dispatcher)
364
- inst = dispatcher.new(self)
365
- self.dispatcher_stack.each { |disp|
366
- if (disp.name == inst.name)
367
- raise RuntimeError.new("Attempting to load already loaded dispatcher #{disp.name}")
368
- end
369
- }
370
- self.dispatcher_stack.push(inst)
371
-
372
- inst
373
- end
374
-
375
- #
376
- # Removes the supplied dispatcher instance.
377
- #
378
- def remove_dispatcher(name)
379
- self.dispatcher_stack.delete_if { |inst|
380
- (inst.name == name)
381
- }
382
- end
383
-
384
- #
385
- # Returns the current active dispatcher
386
- #
387
- def current_dispatcher
388
- self.dispatcher_stack[0]
389
- end
390
-
391
- #
392
- # Return a readable version of a help banner for all of the enstacked
393
- # dispatchers.
394
- #
395
- def help_to_s(opts = {})
396
- str = ''
397
-
398
- dispatcher_stack.reverse.each { |dispatcher|
399
- # No commands? Suckage.
400
- next if ((dispatcher.respond_to?('commands') == false) or
401
- (dispatcher.commands == nil) or
402
- (dispatcher.commands.length == 0))
403
-
404
- # Display the commands
405
- tbl = Table.new(
406
- 'Header' => "#{dispatcher.name} Commands",
407
- 'Indent' => opts['Indent'] || 4,
408
- 'Columns' =>
409
- [
410
- 'Command',
411
- 'Description'
412
- ],
413
- 'ColProps' =>
414
- {
415
- 'Command' =>
416
- {
417
- 'MaxWidth' => 12
418
- }
419
- })
420
-
421
- dispatcher.commands.sort.each { |c|
422
- tbl << c
423
- }
424
-
425
- str << "\n" + tbl.to_s + "\n"
426
- }
427
-
428
- return str
429
- end
430
-
431
-
432
-
433
- #
434
- # Returns nil for an empty set of blocked commands.
435
- #
436
- def blocked_command?(cmd)
437
- return false if not self.blocked
438
- self.blocked.has_key?(cmd)
439
- end
440
-
441
- #
442
- # Block a specific command
443
- #
444
- def block_command(cmd)
445
- self.blocked ||= {}
446
- self.blocked[cmd] = true
447
- end
448
-
449
- #
450
- # Unblock a specific command
451
- #
452
- def unblock_command(cmd)
453
- self.blocked || return
454
- self.blocked.delete(cmd)
455
- end
456
-
457
-
458
- attr_accessor :dispatcher_stack # :nodoc:
459
- attr_accessor :tab_words # :nodoc:
460
- attr_accessor :busy # :nodoc:
461
- attr_accessor :blocked # :nodoc:
462
-
463
- end
464
-
465
- end
466
- end
467
- end