librex 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +4 -0
- data/lib/rex.rb +101 -0
- data/lib/rex.rb.ts.rb +70 -0
- data/lib/rex/LICENSE +29 -0
- data/lib/rex/arch.rb +103 -0
- data/lib/rex/arch/sparc.rb +75 -0
- data/lib/rex/arch/sparc.rb.ut.rb +18 -0
- data/lib/rex/arch/x86.rb +513 -0
- data/lib/rex/arch/x86.rb.ut.rb +93 -0
- data/lib/rex/assembly/nasm.rb +100 -0
- data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
- data/lib/rex/codepage.map +104 -0
- data/lib/rex/compat.rb +281 -0
- data/lib/rex/constants.rb +113 -0
- data/lib/rex/elfparsey.rb +11 -0
- data/lib/rex/elfparsey/elf.rb +123 -0
- data/lib/rex/elfparsey/elfbase.rb +260 -0
- data/lib/rex/elfparsey/exceptions.rb +27 -0
- data/lib/rex/elfscan.rb +12 -0
- data/lib/rex/elfscan/scanner.rb +207 -0
- data/lib/rex/elfscan/search.rb +46 -0
- data/lib/rex/encoder/alpha2.rb +31 -0
- data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
- data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
- data/lib/rex/encoder/alpha2/generic.rb +113 -0
- data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
- data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
- data/lib/rex/encoder/ndr.rb +89 -0
- data/lib/rex/encoder/ndr.rb.ut.rb +44 -0
- data/lib/rex/encoder/nonalpha.rb +61 -0
- data/lib/rex/encoder/nonupper.rb +64 -0
- data/lib/rex/encoder/xdr.rb +106 -0
- data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
- data/lib/rex/encoder/xor.rb +69 -0
- data/lib/rex/encoder/xor/dword.rb +13 -0
- data/lib/rex/encoder/xor/dword_additive.rb +13 -0
- data/lib/rex/encoders/xor_dword.rb +35 -0
- data/lib/rex/encoders/xor_dword_additive.rb +53 -0
- data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
- data/lib/rex/encoding/xor.rb +20 -0
- data/lib/rex/encoding/xor.rb.ts.rb +14 -0
- data/lib/rex/encoding/xor/byte.rb +15 -0
- data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb +21 -0
- data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/dword_additive.rb +92 -0
- data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
- data/lib/rex/encoding/xor/exceptions.rb +17 -0
- data/lib/rex/encoding/xor/generic.rb +146 -0
- data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
- data/lib/rex/encoding/xor/qword.rb +15 -0
- data/lib/rex/encoding/xor/word.rb +21 -0
- data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
- data/lib/rex/exceptions.rb +275 -0
- data/lib/rex/exceptions.rb.ut.rb +44 -0
- data/lib/rex/exploitation/cmdstager.rb +133 -0
- data/lib/rex/exploitation/egghunter.rb +143 -0
- data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
- data/lib/rex/exploitation/encryptjs.rb +77 -0
- data/lib/rex/exploitation/heaplib.js.b64 +331 -0
- data/lib/rex/exploitation/heaplib.rb +94 -0
- data/lib/rex/exploitation/javascriptosdetect.rb +735 -0
- data/lib/rex/exploitation/obfuscatejs.rb +335 -0
- data/lib/rex/exploitation/opcodedb.rb +818 -0
- data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
- data/lib/rex/exploitation/seh.rb +92 -0
- data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
- data/lib/rex/file.rb +84 -0
- data/lib/rex/file.rb.ut.rb +16 -0
- data/lib/rex/image_source.rb +12 -0
- data/lib/rex/image_source/disk.rb +60 -0
- data/lib/rex/image_source/image_source.rb +46 -0
- data/lib/rex/image_source/memory.rb +37 -0
- data/lib/rex/io/bidirectional_pipe.rb +157 -0
- data/lib/rex/io/datagram_abstraction.rb +35 -0
- data/lib/rex/io/stream.rb +313 -0
- data/lib/rex/io/stream_abstraction.rb +186 -0
- data/lib/rex/io/stream_server.rb +211 -0
- data/lib/rex/job_container.rb +202 -0
- data/lib/rex/logging.rb +4 -0
- data/lib/rex/logging/log_dispatcher.rb +179 -0
- data/lib/rex/logging/log_sink.rb +42 -0
- data/lib/rex/logging/sinks/flatfile.rb +55 -0
- data/lib/rex/logging/sinks/stderr.rb +43 -0
- data/lib/rex/machparsey.rb +9 -0
- data/lib/rex/machparsey/exceptions.rb +34 -0
- data/lib/rex/machparsey/mach.rb +209 -0
- data/lib/rex/machparsey/machbase.rb +408 -0
- data/lib/rex/machscan.rb +9 -0
- data/lib/rex/machscan/scanner.rb +217 -0
- data/lib/rex/mime.rb +9 -0
- data/lib/rex/mime/header.rb +75 -0
- data/lib/rex/mime/message.rb +112 -0
- data/lib/rex/mime/part.rb +20 -0
- data/lib/rex/nop/opty2.rb +108 -0
- data/lib/rex/nop/opty2.rb.ut.rb +23 -0
- data/lib/rex/nop/opty2_tables.rb +300 -0
- data/lib/rex/ole.rb +128 -0
- data/lib/rex/ole/clsid.rb +47 -0
- data/lib/rex/ole/difat.rb +141 -0
- data/lib/rex/ole/directory.rb +230 -0
- data/lib/rex/ole/direntry.rb +240 -0
- data/lib/rex/ole/fat.rb +99 -0
- data/lib/rex/ole/header.rb +204 -0
- data/lib/rex/ole/minifat.rb +77 -0
- data/lib/rex/ole/samples/create_ole.rb +27 -0
- data/lib/rex/ole/samples/dir.rb +35 -0
- data/lib/rex/ole/samples/dump_stream.rb +34 -0
- data/lib/rex/ole/samples/ole_info.rb +23 -0
- data/lib/rex/ole/storage.rb +395 -0
- data/lib/rex/ole/stream.rb +53 -0
- data/lib/rex/ole/substorage.rb +49 -0
- data/lib/rex/ole/util.rb +157 -0
- data/lib/rex/parser/arguments.rb +97 -0
- data/lib/rex/parser/arguments.rb.ut.rb +67 -0
- data/lib/rex/parser/ini.rb +185 -0
- data/lib/rex/parser/ini.rb.ut.rb +29 -0
- data/lib/rex/parser/nmap_xml.rb +111 -0
- data/lib/rex/payloads.rb +1 -0
- data/lib/rex/payloads/win32.rb +2 -0
- data/lib/rex/payloads/win32/common.rb +26 -0
- data/lib/rex/payloads/win32/kernel.rb +53 -0
- data/lib/rex/payloads/win32/kernel/common.rb +54 -0
- data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
- data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
- data/lib/rex/payloads/win32/kernel/stager.rb +171 -0
- data/lib/rex/peparsey.rb +12 -0
- data/lib/rex/peparsey/exceptions.rb +32 -0
- data/lib/rex/peparsey/pe.rb +188 -0
- data/lib/rex/peparsey/pe_memdump.rb +63 -0
- data/lib/rex/peparsey/pebase.rb +1655 -0
- data/lib/rex/peparsey/section.rb +136 -0
- data/lib/rex/pescan.rb +13 -0
- data/lib/rex/pescan/analyze.rb +309 -0
- data/lib/rex/pescan/scanner.rb +206 -0
- data/lib/rex/pescan/search.rb +56 -0
- data/lib/rex/platforms.rb +1 -0
- data/lib/rex/platforms/windows.rb +51 -0
- data/lib/rex/poly.rb +132 -0
- data/lib/rex/poly/block.rb +468 -0
- data/lib/rex/poly/register.rb +100 -0
- data/lib/rex/poly/register/x86.rb +40 -0
- data/lib/rex/post.rb +8 -0
- data/lib/rex/post/dir.rb +51 -0
- data/lib/rex/post/file.rb +172 -0
- data/lib/rex/post/file_stat.rb +220 -0
- data/lib/rex/post/gen.pl +13 -0
- data/lib/rex/post/io.rb +182 -0
- data/lib/rex/post/meterpreter.rb +4 -0
- data/lib/rex/post/meterpreter/channel.rb +438 -0
- data/lib/rex/post/meterpreter/channel_container.rb +54 -0
- data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
- data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
- data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
- data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
- data/lib/rex/post/meterpreter/client.rb +335 -0
- data/lib/rex/post/meterpreter/client_core.rb +274 -0
- data/lib/rex/post/meterpreter/dependencies.rb +3 -0
- data/lib/rex/post/meterpreter/extension.rb +32 -0
- data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
- data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
- data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
- data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
- data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
- data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
- data/lib/rex/post/meterpreter/extensions/priv/priv.rb +104 -0
- data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +100 -0
- data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +24 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +273 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +235 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +167 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +192 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +139 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +184 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +61 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +361 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +182 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +174 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +185 -0
- data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
- data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
- data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
- data/lib/rex/post/meterpreter/packet.rb +596 -0
- data/lib/rex/post/meterpreter/packet_dispatcher.rb +409 -0
- data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
- data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
- data/lib/rex/post/meterpreter/ui/console.rb +135 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +595 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +63 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +376 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +270 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +484 -0
- data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
- data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
- data/lib/rex/post/permission.rb +26 -0
- data/lib/rex/post/process.rb +57 -0
- data/lib/rex/post/thread.rb +57 -0
- data/lib/rex/post/ui.rb +52 -0
- data/lib/rex/proto.rb +12 -0
- data/lib/rex/proto.rb.ts.rb +8 -0
- data/lib/rex/proto/dcerpc.rb +6 -0
- data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
- data/lib/rex/proto/dcerpc/client.rb +358 -0
- data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
- data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
- data/lib/rex/proto/dcerpc/handle.rb +47 -0
- data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
- data/lib/rex/proto/dcerpc/ndr.rb +72 -0
- data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
- data/lib/rex/proto/dcerpc/packet.rb +253 -0
- data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
- data/lib/rex/proto/dcerpc/response.rb +186 -0
- data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
- data/lib/rex/proto/dcerpc/uuid.rb +84 -0
- data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
- data/lib/rex/proto/drda.rb +5 -0
- data/lib/rex/proto/drda.rb.ts.rb +17 -0
- data/lib/rex/proto/drda/constants.rb +49 -0
- data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
- data/lib/rex/proto/drda/packet.rb +252 -0
- data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
- data/lib/rex/proto/drda/utils.rb +123 -0
- data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
- data/lib/rex/proto/http.rb +5 -0
- data/lib/rex/proto/http.rb.ts.rb +12 -0
- data/lib/rex/proto/http/client.rb +817 -0
- data/lib/rex/proto/http/client.rb.ut.rb +93 -0
- data/lib/rex/proto/http/handler.rb +46 -0
- data/lib/rex/proto/http/handler/erb.rb +128 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
- data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
- data/lib/rex/proto/http/handler/proc.rb +54 -0
- data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
- data/lib/rex/proto/http/header.rb +161 -0
- data/lib/rex/proto/http/header.rb.ut.rb +46 -0
- data/lib/rex/proto/http/packet.rb +394 -0
- data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
- data/lib/rex/proto/http/request.rb +356 -0
- data/lib/rex/proto/http/request.rb.ut.rb +214 -0
- data/lib/rex/proto/http/response.rb +85 -0
- data/lib/rex/proto/http/response.rb.ut.rb +149 -0
- data/lib/rex/proto/http/server.rb +367 -0
- data/lib/rex/proto/http/server.rb.ut.rb +79 -0
- data/lib/rex/proto/smb.rb +7 -0
- data/lib/rex/proto/smb.rb.ts.rb +8 -0
- data/lib/rex/proto/smb/client.rb +1733 -0
- data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
- data/lib/rex/proto/smb/constants.rb +1062 -0
- data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
- data/lib/rex/proto/smb/crypt.rb +95 -0
- data/lib/rex/proto/smb/crypt.rb.ut.rb +20 -0
- data/lib/rex/proto/smb/evasions.rb +65 -0
- data/lib/rex/proto/smb/exceptions.rb +846 -0
- data/lib/rex/proto/smb/simpleclient.rb +292 -0
- data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
- data/lib/rex/proto/smb/utils.rb +514 -0
- data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
- data/lib/rex/proto/sunrpc.rb +1 -0
- data/lib/rex/proto/sunrpc/client.rb +195 -0
- data/lib/rex/script.rb +42 -0
- data/lib/rex/script/base.rb +59 -0
- data/lib/rex/script/meterpreter.rb +9 -0
- data/lib/rex/script/shell.rb +9 -0
- data/lib/rex/service.rb +48 -0
- data/lib/rex/service_manager.rb +141 -0
- data/lib/rex/service_manager.rb.ut.rb +32 -0
- data/lib/rex/services/local_relay.rb +423 -0
- data/lib/rex/socket.rb +586 -0
- data/lib/rex/socket.rb.ut.rb +86 -0
- data/lib/rex/socket/comm.rb +119 -0
- data/lib/rex/socket/comm/local.rb +409 -0
- data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
- data/lib/rex/socket/ip.rb +129 -0
- data/lib/rex/socket/parameters.rb +345 -0
- data/lib/rex/socket/parameters.rb.ut.rb +51 -0
- data/lib/rex/socket/range_walker.rb +295 -0
- data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
- data/lib/rex/socket/ssl_tcp.rb +184 -0
- data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
- data/lib/rex/socket/ssl_tcp_server.rb +122 -0
- data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +51 -0
- data/lib/rex/socket/subnet_walker.rb +75 -0
- data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
- data/lib/rex/socket/switch_board.rb +272 -0
- data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
- data/lib/rex/socket/tcp.rb +76 -0
- data/lib/rex/socket/tcp.rb.ut.rb +64 -0
- data/lib/rex/socket/tcp_server.rb +67 -0
- data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
- data/lib/rex/socket/udp.rb +157 -0
- data/lib/rex/socket/udp.rb.ut.rb +44 -0
- data/lib/rex/struct2.rb +5 -0
- data/lib/rex/struct2/c_struct.rb +181 -0
- data/lib/rex/struct2/c_struct_template.rb +39 -0
- data/lib/rex/struct2/constant.rb +26 -0
- data/lib/rex/struct2/element.rb +44 -0
- data/lib/rex/struct2/generic.rb +73 -0
- data/lib/rex/struct2/restraint.rb +54 -0
- data/lib/rex/struct2/s_string.rb +72 -0
- data/lib/rex/struct2/s_struct.rb +111 -0
- data/lib/rex/sync.rb +6 -0
- data/lib/rex/sync/event.rb +94 -0
- data/lib/rex/sync/read_write_lock.rb +176 -0
- data/lib/rex/sync/ref.rb +57 -0
- data/lib/rex/sync/thread_safe.rb +82 -0
- data/lib/rex/test.rb +35 -0
- data/lib/rex/text.rb +1029 -0
- data/lib/rex/text.rb.ut.rb +168 -0
- data/lib/rex/time.rb +65 -0
- data/lib/rex/transformer.rb +115 -0
- data/lib/rex/transformer.rb.ut.rb +38 -0
- data/lib/rex/ui.rb +21 -0
- data/lib/rex/ui/interactive.rb +252 -0
- data/lib/rex/ui/output.rb +80 -0
- data/lib/rex/ui/output/none.rb +18 -0
- data/lib/rex/ui/progress_tracker.rb +96 -0
- data/lib/rex/ui/subscriber.rb +149 -0
- data/lib/rex/ui/text/color.rb +97 -0
- data/lib/rex/ui/text/color.rb.ut.rb +18 -0
- data/lib/rex/ui/text/dispatcher_shell.rb +382 -0
- data/lib/rex/ui/text/input.rb +117 -0
- data/lib/rex/ui/text/input/buffer.rb +75 -0
- data/lib/rex/ui/text/input/readline.rb +129 -0
- data/lib/rex/ui/text/input/socket.rb +95 -0
- data/lib/rex/ui/text/input/stdio.rb +45 -0
- data/lib/rex/ui/text/irb_shell.rb +55 -0
- data/lib/rex/ui/text/output.rb +80 -0
- data/lib/rex/ui/text/output/buffer.rb +65 -0
- data/lib/rex/ui/text/output/file.rb +37 -0
- data/lib/rex/ui/text/output/socket.rb +43 -0
- data/lib/rex/ui/text/output/stdio.rb +40 -0
- data/lib/rex/ui/text/progress_tracker.rb +56 -0
- data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
- data/lib/rex/ui/text/shell.rb +321 -0
- data/lib/rex/ui/text/table.rb +254 -0
- data/lib/rex/ui/text/table.rb.ut.rb +55 -0
- data/lib/rex/zip.rb +93 -0
- data/lib/rex/zip/archive.rb +91 -0
- data/lib/rex/zip/blocks.rb +182 -0
- data/lib/rex/zip/entry.rb +95 -0
- data/lib/rex/zip/samples/comment.rb +32 -0
- data/lib/rex/zip/samples/mkwar.rb +138 -0
- data/lib/rex/zip/samples/mkzip.rb +19 -0
- data/lib/rex/zip/samples/recursive.rb +58 -0
- metadata +435 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class implements output against a buffer.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class Output::Buffer < Rex::Ui::Text::Output
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# Initializes an output buffer.
|
|
16
|
+
#
|
|
17
|
+
def initialize
|
|
18
|
+
self.buf = ''
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def supports_color?
|
|
22
|
+
false
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Appends the supplied message to the output buffer.
|
|
27
|
+
#
|
|
28
|
+
def print_raw(msg = '')
|
|
29
|
+
self.buf += msg || ''
|
|
30
|
+
|
|
31
|
+
if self.on_print_proc
|
|
32
|
+
self.on_print_proc.call(msg)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
msg
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# Read everything out of the buffer and reset it
|
|
41
|
+
#
|
|
42
|
+
def dump_buffer
|
|
43
|
+
self.buf ||= ''
|
|
44
|
+
buffer = self.buf.dup
|
|
45
|
+
reset()
|
|
46
|
+
buffer
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Reset the buffer to an empty string.
|
|
51
|
+
#
|
|
52
|
+
def reset
|
|
53
|
+
self.buf = ''
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
#
|
|
57
|
+
# The underlying buffer state.
|
|
58
|
+
#
|
|
59
|
+
attr_accessor :buf
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class implements output against a file
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class Output::File < Rex::Ui::Text::Output
|
|
13
|
+
|
|
14
|
+
attr_accessor :fd
|
|
15
|
+
|
|
16
|
+
def initialize(path)
|
|
17
|
+
self.fd = ::File.open(path, "wb")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def supports_color?
|
|
21
|
+
false
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# Prints the supplied message to file output.
|
|
26
|
+
#
|
|
27
|
+
def print_raw(msg = '')
|
|
28
|
+
self.fd.write(msg)
|
|
29
|
+
self.fd.flush
|
|
30
|
+
msg
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class implements the output interface against a socket.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class Output::Socket < Rex::Ui::Text::Output
|
|
13
|
+
|
|
14
|
+
def initialize(sock)
|
|
15
|
+
@sock = sock
|
|
16
|
+
super()
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def supports_color?
|
|
20
|
+
case config[:color]
|
|
21
|
+
when true
|
|
22
|
+
# Allow color if the user forces it on
|
|
23
|
+
return true
|
|
24
|
+
else
|
|
25
|
+
false
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
#
|
|
30
|
+
# Prints the supplied message to the socket.
|
|
31
|
+
#
|
|
32
|
+
def print_raw(msg = '')
|
|
33
|
+
@sock.write(msg)
|
|
34
|
+
@sock.flush
|
|
35
|
+
|
|
36
|
+
msg
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This class implements output against standard out.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class Output::Stdio < Rex::Ui::Text::Output
|
|
13
|
+
|
|
14
|
+
def supports_color?
|
|
15
|
+
case config[:color]
|
|
16
|
+
when true
|
|
17
|
+
return true
|
|
18
|
+
when false
|
|
19
|
+
return false
|
|
20
|
+
else # auto
|
|
21
|
+
term = Rex::Compat.getenv('TERM')
|
|
22
|
+
return (term and term.match(/(?:vt10[03]|xterm(?:-color)?|linux|screen|rxvt)/i) != nil)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# Prints the supplied message to standard output.
|
|
28
|
+
#
|
|
29
|
+
def print_raw(msg = '')
|
|
30
|
+
$stdout.print(msg)
|
|
31
|
+
$stdout.flush
|
|
32
|
+
|
|
33
|
+
msg
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'rex/ui/progress_tracker'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# This module implements progress tracking against a text interface.
|
|
10
|
+
#
|
|
11
|
+
###
|
|
12
|
+
class ProgressTracker < Rex::Ui::ProgressTracker
|
|
13
|
+
|
|
14
|
+
def initialize(output)
|
|
15
|
+
self.output = output
|
|
16
|
+
self.start = 0
|
|
17
|
+
self.stop = 0
|
|
18
|
+
self.pos = 0
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#
|
|
22
|
+
# Passes a generic status message that isn't necessarily associated
|
|
23
|
+
# with a step event.
|
|
24
|
+
#
|
|
25
|
+
def status(msg = '')
|
|
26
|
+
output.print_status(msg)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
#
|
|
30
|
+
# Updates the status associated with the current step.
|
|
31
|
+
#
|
|
32
|
+
def step_status(msg = '')
|
|
33
|
+
output.print_status("#{pos}: #{msg}") if (msg and msg.length > 0)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# An error occurred that may result in aborting the progress.
|
|
38
|
+
#
|
|
39
|
+
def error(msg = '')
|
|
40
|
+
output.print_error(msg)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# Progress has been aborted, the reason is supplied in msg.
|
|
45
|
+
#
|
|
46
|
+
def abort(msg = '')
|
|
47
|
+
output.print_error("fatal: #{msg}")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
attr_accessor :output
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
|
|
4
|
+
|
|
5
|
+
require 'test/unit'
|
|
6
|
+
require 'rex/ui'
|
|
7
|
+
|
|
8
|
+
class Rex::Ui::Text::ProgressTracker::UnitTest < Test::Unit::TestCase
|
|
9
|
+
|
|
10
|
+
def test_stuff
|
|
11
|
+
output = Rex::Ui::Text::Output::Buffer.new
|
|
12
|
+
pt = Rex::Ui::Text::ProgressTracker.new(output)
|
|
13
|
+
|
|
14
|
+
pt.range = 1..10
|
|
15
|
+
|
|
16
|
+
assert_equal(1, pt.start)
|
|
17
|
+
assert_equal(10, pt.stop)
|
|
18
|
+
|
|
19
|
+
pt.start = 2
|
|
20
|
+
assert_equal(2, pt.start)
|
|
21
|
+
pt.stop = 9
|
|
22
|
+
assert_equal(9, pt.stop)
|
|
23
|
+
assert_equal(2, pt.pos)
|
|
24
|
+
assert_equal('', output.buf)
|
|
25
|
+
assert_equal(3, pt.step)
|
|
26
|
+
assert_equal(4, pt.step("test"))
|
|
27
|
+
assert_equal("[*] 4: test\n", output.buf)
|
|
28
|
+
output.reset
|
|
29
|
+
assert_equal("[-] bad\n", pt.error("bad"))
|
|
30
|
+
output.reset
|
|
31
|
+
assert_equal("[-] fatal: bad\n", pt.abort("bad"))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
require 'rex/ui'
|
|
2
|
+
|
|
3
|
+
module Rex
|
|
4
|
+
module Ui
|
|
5
|
+
module Text
|
|
6
|
+
|
|
7
|
+
###
|
|
8
|
+
#
|
|
9
|
+
# The shell class provides a command-prompt style interface in a
|
|
10
|
+
# generic fashion.
|
|
11
|
+
#
|
|
12
|
+
###
|
|
13
|
+
module Shell
|
|
14
|
+
|
|
15
|
+
###
|
|
16
|
+
#
|
|
17
|
+
# This module is meant to be mixed into an input medium class instance as a
|
|
18
|
+
# means of extending it to display a prompt before each call to gets.
|
|
19
|
+
#
|
|
20
|
+
###
|
|
21
|
+
module InputShell
|
|
22
|
+
attr_accessor :prompt, :output
|
|
23
|
+
|
|
24
|
+
def pgets
|
|
25
|
+
output.print(prompt)
|
|
26
|
+
output.flush
|
|
27
|
+
|
|
28
|
+
output.prompting
|
|
29
|
+
buf = gets
|
|
30
|
+
output.prompting(false)
|
|
31
|
+
|
|
32
|
+
buf
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# Initializes a shell that has a prompt and can be interacted with.
|
|
38
|
+
#
|
|
39
|
+
def initialize(prompt, prompt_char = '>', histfile = nil)
|
|
40
|
+
# Don't initialize the UI here since it will clobber any existing tab
|
|
41
|
+
# completion routines prematurely. Instead, wait for the user to
|
|
42
|
+
# interact. See bug 1180
|
|
43
|
+
|
|
44
|
+
# Set the stop flag to false
|
|
45
|
+
self.stop_flag = false
|
|
46
|
+
self.disable_output = false
|
|
47
|
+
self.stop_count = 0
|
|
48
|
+
|
|
49
|
+
# Initialize the prompt
|
|
50
|
+
self.init_prompt = prompt
|
|
51
|
+
self.prompt_char = prompt_char
|
|
52
|
+
|
|
53
|
+
self.histfile = histfile
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
#
|
|
57
|
+
# Initializes the user interface input/output classes.
|
|
58
|
+
#
|
|
59
|
+
def init_ui(in_input = nil, in_output = nil)
|
|
60
|
+
|
|
61
|
+
# Initialize the input and output methods
|
|
62
|
+
self.input = in_input
|
|
63
|
+
self.output = in_output
|
|
64
|
+
|
|
65
|
+
if (self.input)
|
|
66
|
+
begin
|
|
67
|
+
if (self.input.supports_readline)
|
|
68
|
+
self.input = Input::Readline.new(lambda { |str| tab_complete(str) })
|
|
69
|
+
if histfile and File.exists?(histfile)
|
|
70
|
+
File.readlines(histfile).each { |e|
|
|
71
|
+
Readline::HISTORY << e.chomp
|
|
72
|
+
}
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
rescue
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Extend the input medium as an input shell if the input medium
|
|
79
|
+
# isn't intrinsicly a shell.
|
|
80
|
+
if (self.input.intrinsic_shell? == false)
|
|
81
|
+
self.input.extend(InputShell)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
self.input.output = self.output
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
update_prompt('')
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
#
|
|
91
|
+
# Resets the user interface handles.
|
|
92
|
+
#
|
|
93
|
+
def reset_ui
|
|
94
|
+
init_ui
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
#
|
|
98
|
+
# Sets the log source that should be used for logging input and output.
|
|
99
|
+
#
|
|
100
|
+
def set_log_source(log_source)
|
|
101
|
+
self.log_source = log_source
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
#
|
|
105
|
+
# Unsets the log source so that logging becomes disabled.
|
|
106
|
+
#
|
|
107
|
+
def unset_log_source
|
|
108
|
+
set_log_source(nil)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
#
|
|
112
|
+
# Performs tab completion on the supplied string.
|
|
113
|
+
#
|
|
114
|
+
def tab_complete(str)
|
|
115
|
+
return tab_complete_proc(str) if (tab_complete_proc)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
#
|
|
119
|
+
# Run the command processing loop.
|
|
120
|
+
#
|
|
121
|
+
def run(&block)
|
|
122
|
+
|
|
123
|
+
begin
|
|
124
|
+
|
|
125
|
+
while true
|
|
126
|
+
# If the stop flag was set or we've hit EOF, break out
|
|
127
|
+
break if (self.stop_flag or self.stop_count > 1)
|
|
128
|
+
|
|
129
|
+
line = input.pgets
|
|
130
|
+
log_output(input.prompt)
|
|
131
|
+
|
|
132
|
+
# If a block was passed in, pass the line to it. If it returns true,
|
|
133
|
+
# break out of the shell loop.
|
|
134
|
+
if (block)
|
|
135
|
+
break if (line == nil or block.call(line))
|
|
136
|
+
elsif(input.eof? or line == nil)
|
|
137
|
+
# If you have sessions active, this will give you a shot to exit gravefully
|
|
138
|
+
# If you really are ambitious, 2 eofs will kick this out
|
|
139
|
+
self.stop_count += 1
|
|
140
|
+
next if(self.stop_count > 1)
|
|
141
|
+
run_single("quit")
|
|
142
|
+
else
|
|
143
|
+
# Otherwise, call what should be an overriden instance method to
|
|
144
|
+
# process the line.
|
|
145
|
+
ret = run_single(line)
|
|
146
|
+
# don't bother saving lines that couldn't be found as a
|
|
147
|
+
# command, create the file if it doesn't exist
|
|
148
|
+
if ret and self.histfile
|
|
149
|
+
File.open(self.histfile, "a+") { |f|
|
|
150
|
+
f.puts(line)
|
|
151
|
+
}
|
|
152
|
+
end
|
|
153
|
+
self.stop_count = 0
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end
|
|
157
|
+
# Prevent accidental console quits
|
|
158
|
+
rescue ::Interrupt
|
|
159
|
+
output.print("Interrupt: use the 'exit' command to quit\n")
|
|
160
|
+
retry
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
#
|
|
165
|
+
# Stop processing user input.
|
|
166
|
+
#
|
|
167
|
+
def stop
|
|
168
|
+
self.stop_flag = true
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
#
|
|
172
|
+
# Checks to see if the shell has stopped.
|
|
173
|
+
#
|
|
174
|
+
def stopped?
|
|
175
|
+
self.stop_flag
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
#
|
|
179
|
+
# Change the input prompt.
|
|
180
|
+
#
|
|
181
|
+
def update_prompt(prompt = nil, new_prompt_char = nil)
|
|
182
|
+
if (self.input)
|
|
183
|
+
if (prompt)
|
|
184
|
+
new_prompt = self.init_prompt + ' ' + prompt + prompt_char + ' '
|
|
185
|
+
else
|
|
186
|
+
new_prompt = self.prompt || ''
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Save the prompt before any substitutions
|
|
190
|
+
self.prompt = new_prompt
|
|
191
|
+
|
|
192
|
+
# Set the actual prompt to the saved prompt with any substitutions
|
|
193
|
+
# or updates from our output driver, be they color or whatever
|
|
194
|
+
self.input.prompt = self.output.update_prompt(new_prompt)
|
|
195
|
+
self.prompt_char = new_prompt_char if (new_prompt_char)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
#
|
|
200
|
+
# Output shortcuts
|
|
201
|
+
#
|
|
202
|
+
|
|
203
|
+
#
|
|
204
|
+
# Prints an error message to the output handle.
|
|
205
|
+
#
|
|
206
|
+
def print_error(msg='')
|
|
207
|
+
return if (output.nil?)
|
|
208
|
+
|
|
209
|
+
# Errors are not subject to disabled output
|
|
210
|
+
log_output(output.print_error(msg))
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
#
|
|
214
|
+
# Prints a status message to the output handle.
|
|
215
|
+
#
|
|
216
|
+
def print_status(msg='')
|
|
217
|
+
return if (disable_output == true)
|
|
218
|
+
|
|
219
|
+
log_output(output.print_status(msg))
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
#
|
|
223
|
+
# Prints a good message to the output handle.
|
|
224
|
+
#
|
|
225
|
+
def print_good(msg='')
|
|
226
|
+
return if (disable_output == true)
|
|
227
|
+
|
|
228
|
+
log_output(output.print_good(msg))
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
#
|
|
232
|
+
# Prints a line of text to the output handle.
|
|
233
|
+
#
|
|
234
|
+
def print_line(msg='')
|
|
235
|
+
return if (disable_output == true)
|
|
236
|
+
|
|
237
|
+
log_output(output.print_line(msg))
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
#
|
|
241
|
+
# Prints a raw message to the output handle.
|
|
242
|
+
#
|
|
243
|
+
def print(msg='')
|
|
244
|
+
return if (disable_output == true)
|
|
245
|
+
log_output(output.print(msg))
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
#
|
|
249
|
+
# Whether or not output has been disabled.
|
|
250
|
+
#
|
|
251
|
+
attr_accessor :disable_output
|
|
252
|
+
#
|
|
253
|
+
# The input handle to read user input from.
|
|
254
|
+
#
|
|
255
|
+
attr_reader :input
|
|
256
|
+
#
|
|
257
|
+
# The output handle to write output to.
|
|
258
|
+
#
|
|
259
|
+
attr_reader :output
|
|
260
|
+
|
|
261
|
+
protected
|
|
262
|
+
|
|
263
|
+
#
|
|
264
|
+
# Parse a line into an array of arguments.
|
|
265
|
+
#
|
|
266
|
+
def parse_line(line)
|
|
267
|
+
log_input(line)
|
|
268
|
+
|
|
269
|
+
line.gsub!(/(\r|\n)/, '')
|
|
270
|
+
|
|
271
|
+
begin
|
|
272
|
+
return args = Rex::Parser::Arguments.from_s(line)
|
|
273
|
+
rescue ::ArgumentError
|
|
274
|
+
print_error("Parse error: #{$!}")
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
return []
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
#
|
|
281
|
+
# Print the prompt, but do not log it.
|
|
282
|
+
#
|
|
283
|
+
def _print_prompt(prompt)
|
|
284
|
+
output.print(prompt)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
#
|
|
288
|
+
# Writes the supplied input to the log source if one has been registered.
|
|
289
|
+
#
|
|
290
|
+
def log_input(buf)
|
|
291
|
+
rlog(buf, log_source) if (log_source)
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
#
|
|
295
|
+
# Writes the supplied output to the log source if one has been registered.
|
|
296
|
+
#
|
|
297
|
+
def log_output(buf)
|
|
298
|
+
rlog(buf, log_source) if (log_source)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
attr_writer :input, :output # :nodoc:
|
|
302
|
+
attr_accessor :stop_flag, :init_prompt # :nodoc:
|
|
303
|
+
attr_accessor :prompt # :nodoc:
|
|
304
|
+
attr_accessor :prompt_char, :tab_complete_proc # :nodoc:
|
|
305
|
+
attr_accessor :histfile # :nodoc:
|
|
306
|
+
attr_accessor :log_source, :stop_count # :nodoc:
|
|
307
|
+
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
###
|
|
311
|
+
#
|
|
312
|
+
# Pseudo-shell interface that simply includes the Shell mixin.
|
|
313
|
+
#
|
|
314
|
+
###
|
|
315
|
+
class PseudoShell
|
|
316
|
+
include Shell
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
end end end
|
|
321
|
+
|