librex 0.0.65 → 0.0.66

Sign up to get free protection for your applications and to get access to all the features.
Files changed (482) hide show
  1. data/README.markdown +1 -1
  2. data/lib/rex/arch.rb +1 -0
  3. data/lib/rex/arch/sparc.rb +16 -15
  4. data/lib/rex/arch/sparc.rb.ut.rb +2 -1
  5. data/lib/rex/arch/x86.rb +1 -0
  6. data/lib/rex/arch/x86.rb.ut.rb +2 -1
  7. data/lib/rex/assembly/nasm.rb +1 -0
  8. data/lib/rex/assembly/nasm.rb.ut.rb +2 -1
  9. data/lib/rex/compat.rb +13 -0
  10. data/lib/rex/constants.rb +5 -4
  11. data/lib/rex/elfparsey.rb +3 -2
  12. data/lib/rex/elfparsey/elf.rb +2 -1
  13. data/lib/rex/elfparsey/elfbase.rb +8 -7
  14. data/lib/rex/elfparsey/exceptions.rb +3 -2
  15. data/lib/rex/elfscan.rb +3 -2
  16. data/lib/rex/elfscan/scanner.rb +2 -1
  17. data/lib/rex/elfscan/search.rb +2 -1
  18. data/lib/rex/encoder/alpha2.rb +2 -1
  19. data/lib/rex/encoder/alpha2/alpha_mixed.rb +3 -2
  20. data/lib/rex/encoder/alpha2/alpha_upper.rb +5 -4
  21. data/lib/rex/encoder/alpha2/generic.rb +37 -60
  22. data/lib/rex/encoder/alpha2/unicode_mixed.rb +4 -9
  23. data/lib/rex/encoder/alpha2/unicode_upper.rb +4 -9
  24. data/lib/rex/encoder/ndr.rb +1 -0
  25. data/lib/rex/encoder/ndr.rb.ut.rb +2 -1
  26. data/lib/rex/encoder/nonalpha.rb +1 -0
  27. data/lib/rex/encoder/nonupper.rb +1 -0
  28. data/lib/rex/encoder/xdr.rb +9 -8
  29. data/lib/rex/encoder/xdr.rb.ut.rb +2 -1
  30. data/lib/rex/encoder/xor.rb +1 -0
  31. data/lib/rex/encoder/xor/dword.rb +2 -1
  32. data/lib/rex/encoder/xor/dword_additive.rb +2 -1
  33. data/lib/rex/encoders/xor_dword.rb +1 -0
  34. data/lib/rex/encoders/xor_dword_additive.rb +2 -1
  35. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +2 -1
  36. data/lib/rex/encoding/xor.rb +2 -1
  37. data/lib/rex/encoding/xor.rb.ts.rb +2 -1
  38. data/lib/rex/encoding/xor/byte.rb +2 -1
  39. data/lib/rex/encoding/xor/byte.rb.ut.rb +2 -1
  40. data/lib/rex/encoding/xor/dword.rb +2 -1
  41. data/lib/rex/encoding/xor/dword.rb.ut.rb +2 -1
  42. data/lib/rex/encoding/xor/dword_additive.rb +1 -0
  43. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +2 -1
  44. data/lib/rex/encoding/xor/exceptions.rb +1 -0
  45. data/lib/rex/encoding/xor/generic.rb +1 -0
  46. data/lib/rex/encoding/xor/generic.rb.ut.rb +2 -1
  47. data/lib/rex/encoding/xor/qword.rb +2 -1
  48. data/lib/rex/encoding/xor/word.rb +2 -1
  49. data/lib/rex/encoding/xor/word.rb.ut.rb +2 -1
  50. data/lib/rex/exceptions.rb +1 -0
  51. data/lib/rex/exceptions.rb.ut.rb +2 -1
  52. data/lib/rex/exploitation/cmdstager.rb +2 -1
  53. data/lib/rex/exploitation/cmdstager/base.rb +1 -0
  54. data/lib/rex/exploitation/cmdstager/debug_asm.rb +2 -1
  55. data/lib/rex/exploitation/cmdstager/debug_write.rb +2 -1
  56. data/lib/rex/exploitation/cmdstager/tftp.rb +2 -1
  57. data/lib/rex/exploitation/cmdstager/vbs.rb +2 -1
  58. data/lib/rex/exploitation/egghunter.rb +12 -11
  59. data/lib/rex/exploitation/egghunter.rb.ut.rb +2 -1
  60. data/lib/rex/exploitation/encryptjs.rb +1 -0
  61. data/lib/rex/exploitation/heaplib.rb +1 -0
  62. data/lib/rex/exploitation/javascriptosdetect.js +1014 -0
  63. data/lib/rex/exploitation/javascriptosdetect.rb +4 -857
  64. data/lib/rex/exploitation/jsobfu.rb +2 -1
  65. data/lib/rex/exploitation/obfuscatejs.rb +1 -0
  66. data/lib/rex/exploitation/omelet.rb +1 -0
  67. data/lib/rex/exploitation/omelet.rb.ut.rb +1 -0
  68. data/lib/rex/exploitation/opcodedb.rb +12 -11
  69. data/lib/rex/exploitation/opcodedb.rb.ut.rb +2 -1
  70. data/lib/rex/exploitation/seh.rb +3 -2
  71. data/lib/rex/exploitation/seh.rb.ut.rb +2 -1
  72. data/lib/rex/file.rb +4 -3
  73. data/lib/rex/file.rb.ut.rb +2 -1
  74. data/lib/rex/image_source.rb +3 -2
  75. data/lib/rex/image_source/disk.rb +3 -2
  76. data/lib/rex/image_source/image_source.rb +3 -2
  77. data/lib/rex/image_source/memory.rb +3 -2
  78. data/lib/rex/io/bidirectional_pipe.rb +1 -0
  79. data/lib/rex/io/datagram_abstraction.rb +2 -1
  80. data/lib/rex/io/ring_buffer.rb +49 -44
  81. data/lib/rex/io/ring_buffer.rb.ut.rb +4 -3
  82. data/lib/rex/io/stream.rb +1 -0
  83. data/lib/rex/io/stream_abstraction.rb +1 -0
  84. data/lib/rex/io/stream_server.rb +1 -0
  85. data/lib/rex/job_container.rb +1 -0
  86. data/lib/rex/logging.rb +2 -1
  87. data/lib/rex/logging/log_dispatcher.rb +5 -4
  88. data/lib/rex/logging/log_sink.rb +2 -1
  89. data/lib/rex/logging/sinks/flatfile.rb +4 -3
  90. data/lib/rex/logging/sinks/stderr.rb +2 -1
  91. data/lib/rex/machparsey.rb +2 -1
  92. data/lib/rex/machparsey/exceptions.rb +2 -1
  93. data/lib/rex/machparsey/mach.rb +20 -19
  94. data/lib/rex/machparsey/machbase.rb +27 -26
  95. data/lib/rex/machscan.rb +2 -1
  96. data/lib/rex/machscan/scanner.rb +1 -0
  97. data/lib/rex/mime.rb +2 -1
  98. data/lib/rex/mime/header.rb +1 -0
  99. data/lib/rex/mime/message.rb +4 -1
  100. data/lib/rex/mime/part.rb +2 -1
  101. data/lib/rex/nop/opty2.rb +2 -1
  102. data/lib/rex/nop/opty2.rb.ut.rb +2 -1
  103. data/lib/rex/nop/opty2_tables.rb +1 -0
  104. data/lib/rex/ole.rb +3 -2
  105. data/lib/rex/ole/clsid.rb +3 -2
  106. data/lib/rex/ole/difat.rb +3 -2
  107. data/lib/rex/ole/directory.rb +3 -2
  108. data/lib/rex/ole/direntry.rb +3 -2
  109. data/lib/rex/ole/fat.rb +3 -2
  110. data/lib/rex/ole/header.rb +3 -2
  111. data/lib/rex/ole/minifat.rb +3 -2
  112. data/lib/rex/ole/propset.rb +4 -3
  113. data/lib/rex/ole/samples/create_ole.rb +1 -0
  114. data/lib/rex/ole/samples/dir.rb +1 -0
  115. data/lib/rex/ole/samples/dump_stream.rb +1 -0
  116. data/lib/rex/ole/samples/ole_info.rb +1 -0
  117. data/lib/rex/ole/storage.rb +3 -2
  118. data/lib/rex/ole/stream.rb +3 -2
  119. data/lib/rex/ole/substorage.rb +3 -2
  120. data/lib/rex/ole/util.rb +3 -2
  121. data/lib/rex/parser/acunetix_nokogiri.rb +13 -12
  122. data/lib/rex/parser/apple_backup_manifestdb.rb +20 -19
  123. data/lib/rex/parser/appscan_nokogiri.rb +17 -16
  124. data/lib/rex/parser/arguments.rb +2 -1
  125. data/lib/rex/parser/arguments.rb.ut.rb +2 -1
  126. data/lib/rex/parser/burp_session_nokogiri.rb +8 -7
  127. data/lib/rex/parser/ci_nokogiri.rb +4 -3
  128. data/lib/rex/parser/foundstone_nokogiri.rb +18 -17
  129. data/lib/rex/parser/fusionvm_nokogiri.rb +109 -0
  130. data/lib/rex/parser/ini.rb +1 -0
  131. data/lib/rex/parser/ini.rb.ut.rb +2 -1
  132. data/lib/rex/parser/ip360_aspl_xml.rb +1 -0
  133. data/lib/rex/parser/ip360_xml.rb +4 -3
  134. data/lib/rex/parser/mbsa_nokogiri.rb +8 -7
  135. data/lib/rex/parser/nessus_xml.rb +3 -2
  136. data/lib/rex/parser/netsparker_xml.rb +10 -9
  137. data/lib/rex/parser/nexpose_raw_nokogiri.rb +372 -52
  138. data/lib/rex/parser/nexpose_simple_nokogiri.rb +8 -7
  139. data/lib/rex/parser/nexpose_xml.rb +1 -0
  140. data/lib/rex/parser/nmap_nokogiri.rb +63 -33
  141. data/lib/rex/parser/nmap_xml.rb +1 -0
  142. data/lib/rex/parser/nokogiri_doc_mixin.rb +35 -15
  143. data/lib/rex/parser/openvas_nokogiri.rb +172 -0
  144. data/lib/rex/parser/retina_xml.rb +1 -0
  145. data/lib/rex/parser/wapiti_nokogiri.rb +105 -0
  146. data/lib/rex/payloads.rb +2 -1
  147. data/lib/rex/payloads/win32.rb +2 -1
  148. data/lib/rex/payloads/win32/common.rb +2 -1
  149. data/lib/rex/payloads/win32/kernel.rb +2 -1
  150. data/lib/rex/payloads/win32/kernel/common.rb +4 -3
  151. data/lib/rex/payloads/win32/kernel/migration.rb +2 -1
  152. data/lib/rex/payloads/win32/kernel/recovery.rb +2 -1
  153. data/lib/rex/payloads/win32/kernel/stager.rb +21 -20
  154. data/lib/rex/peparsey.rb +3 -2
  155. data/lib/rex/peparsey/exceptions.rb +2 -1
  156. data/lib/rex/peparsey/pe.rb +3 -2
  157. data/lib/rex/peparsey/pe_memdump.rb +2 -1
  158. data/lib/rex/peparsey/pebase.rb +2 -1
  159. data/lib/rex/peparsey/section.rb +2 -1
  160. data/lib/rex/pescan.rb +3 -2
  161. data/lib/rex/pescan/analyze.rb +1 -0
  162. data/lib/rex/pescan/scanner.rb +1 -0
  163. data/lib/rex/pescan/search.rb +1 -0
  164. data/lib/rex/platforms.rb +2 -1
  165. data/lib/rex/platforms/windows.rb +2 -1
  166. data/lib/rex/poly.rb +2 -1
  167. data/lib/rex/poly/block.rb +16 -15
  168. data/lib/rex/poly/register.rb +2 -1
  169. data/lib/rex/poly/register/x86.rb +2 -1
  170. data/lib/rex/post.rb +2 -2
  171. data/lib/rex/post/dir.rb +2 -1
  172. data/lib/rex/post/file.rb +1 -0
  173. data/lib/rex/post/file_stat.rb +1 -0
  174. data/lib/rex/post/io.rb +2 -1
  175. data/lib/rex/post/meterpreter.rb +2 -1
  176. data/lib/rex/post/meterpreter/channel.rb +1 -0
  177. data/lib/rex/post/meterpreter/channel_container.rb +2 -1
  178. data/lib/rex/post/meterpreter/channels/pool.rb +1 -0
  179. data/lib/rex/post/meterpreter/channels/pools/file.rb +1 -0
  180. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +3 -2
  181. data/lib/rex/post/meterpreter/channels/stream.rb +1 -0
  182. data/lib/rex/post/meterpreter/client.rb +23 -1
  183. data/lib/rex/post/meterpreter/client_core.rb +10 -5
  184. data/lib/rex/post/meterpreter/dependencies.rb +2 -1
  185. data/lib/rex/post/meterpreter/extension.rb +2 -1
  186. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +7 -6
  187. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +2 -1
  188. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +5 -4
  189. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +2 -1
  190. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +1 -0
  191. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +1 -0
  192. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +7 -6
  193. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -0
  194. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +2 -1
  195. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +2 -1
  196. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +1 -0
  197. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +2 -1
  198. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +28 -11
  199. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +1 -0
  200. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +6 -5
  201. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +1 -0
  202. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +3 -2
  203. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +1 -0
  204. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +2 -1
  205. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +39 -5
  206. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +75 -18
  207. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +18 -6
  208. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +1 -0
  209. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +1 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +1 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +1 -0
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +4 -1
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +1 -0
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +1 -0
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +1 -0
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +1 -0
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1 -0
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +1 -0
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +1 -0
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +1 -0
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +12 -0
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +1 -0
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +1 -0
  224. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +1 -0
  225. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +1 -0
  226. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +7 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +1 -0
  228. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +1 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +1 -0
  230. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +1 -0
  231. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +1 -0
  232. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +1 -0
  233. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +1 -0
  234. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +1 -0
  235. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +1 -0
  236. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +1 -0
  237. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +23 -0
  238. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +29 -0
  239. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +10 -5
  240. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +9 -0
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +1 -0
  242. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +106 -0
  243. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +128 -0
  244. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +1 -0
  245. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +27 -6
  246. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +21 -0
  247. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +1 -0
  248. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +1 -0
  249. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +1 -0
  250. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +1 -0
  251. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +2 -1
  252. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +43 -4
  253. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +1 -0
  254. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +2 -1
  255. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +1 -0
  256. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +1 -0
  257. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +1 -0
  258. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +1 -0
  259. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +1 -0
  260. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +1 -0
  261. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +1 -0
  262. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +7 -0
  263. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +14 -13
  264. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +1 -0
  265. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +2 -1
  266. data/lib/rex/post/meterpreter/object_aliases.rb +6 -5
  267. data/lib/rex/post/meterpreter/packet.rb +26 -6
  268. data/lib/rex/post/meterpreter/packet_dispatcher.rb +1 -0
  269. data/lib/rex/post/meterpreter/packet_parser.rb +1 -0
  270. data/lib/rex/post/meterpreter/packet_response_waiter.rb +1 -0
  271. data/lib/rex/post/meterpreter/ui/console.rb +1 -0
  272. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +1 -0
  273. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +103 -28
  274. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +1 -0
  275. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +1 -0
  276. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +1 -0
  277. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +3 -2
  278. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +12 -11
  279. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +2 -1
  280. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +2 -1
  281. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +53 -36
  282. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +3 -2
  283. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +87 -44
  284. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +80 -18
  285. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +77 -48
  286. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +72 -41
  287. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +24 -5
  288. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +2 -1
  289. data/lib/rex/post/permission.rb +2 -1
  290. data/lib/rex/post/process.rb +2 -1
  291. data/lib/rex/post/thread.rb +2 -1
  292. data/lib/rex/post/ui.rb +2 -1
  293. data/lib/rex/proto.rb +1 -0
  294. data/lib/rex/proto.rb.ts.rb +2 -1
  295. data/lib/rex/proto/dcerpc.rb +2 -1
  296. data/lib/rex/proto/dcerpc.rb.ts.rb +2 -1
  297. data/lib/rex/proto/dcerpc/client.rb +1 -0
  298. data/lib/rex/proto/dcerpc/client.rb.ut.rb +1 -0
  299. data/lib/rex/proto/dcerpc/exceptions.rb +2 -1
  300. data/lib/rex/proto/dcerpc/handle.rb +1 -0
  301. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +2 -1
  302. data/lib/rex/proto/dcerpc/ndr.rb +2 -1
  303. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +2 -1
  304. data/lib/rex/proto/dcerpc/packet.rb +52 -45
  305. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +12 -11
  306. data/lib/rex/proto/dcerpc/response.rb +1 -0
  307. data/lib/rex/proto/dcerpc/response.rb.ut.rb +2 -1
  308. data/lib/rex/proto/dcerpc/uuid.rb +13 -12
  309. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +2 -1
  310. data/lib/rex/proto/dhcp.rb +2 -1
  311. data/lib/rex/proto/dhcp/constants.rb +2 -1
  312. data/lib/rex/proto/dhcp/server.rb +4 -3
  313. data/lib/rex/proto/drda.rb +1 -0
  314. data/lib/rex/proto/drda.rb.ts.rb +1 -0
  315. data/lib/rex/proto/drda/constants.rb +1 -0
  316. data/lib/rex/proto/drda/constants.rb.ut.rb +1 -0
  317. data/lib/rex/proto/drda/packet.rb +11 -10
  318. data/lib/rex/proto/drda/packet.rb.ut.rb +5 -4
  319. data/lib/rex/proto/drda/utils.rb +4 -3
  320. data/lib/rex/proto/drda/utils.rb.ut.rb +3 -2
  321. data/lib/rex/proto/http.rb +2 -1
  322. data/lib/rex/proto/http.rb.ts.rb +2 -1
  323. data/lib/rex/proto/http/client.rb +29 -5
  324. data/lib/rex/proto/http/client.rb.ut.rb +1 -0
  325. data/lib/rex/proto/http/handler.rb +2 -1
  326. data/lib/rex/proto/http/handler/erb.rb +5 -4
  327. data/lib/rex/proto/http/handler/erb.rb.ut.rb +2 -1
  328. data/lib/rex/proto/http/handler/proc.rb +1 -0
  329. data/lib/rex/proto/http/handler/proc.rb.ut.rb +2 -1
  330. data/lib/rex/proto/http/header.rb +3 -3
  331. data/lib/rex/proto/http/header.rb.ut.rb +2 -1
  332. data/lib/rex/proto/http/packet.rb +1 -0
  333. data/lib/rex/proto/http/packet.rb.ut.rb +15 -14
  334. data/lib/rex/proto/http/request.rb +23 -22
  335. data/lib/rex/proto/http/request.rb.ut.rb +2 -1
  336. data/lib/rex/proto/http/response.rb +6 -5
  337. data/lib/rex/proto/http/response.rb.ut.rb +7 -6
  338. data/lib/rex/proto/http/server.rb +1 -0
  339. data/lib/rex/proto/http/server.rb.ut.rb +6 -5
  340. data/lib/rex/proto/iax2.rb +1 -0
  341. data/lib/rex/proto/iax2/call.rb +48 -47
  342. data/lib/rex/proto/iax2/client.rb +23 -22
  343. data/lib/rex/proto/iax2/codecs.rb +1 -0
  344. data/lib/rex/proto/iax2/codecs/alaw.rb +1 -0
  345. data/lib/rex/proto/iax2/codecs/g711.rb +4 -3
  346. data/lib/rex/proto/iax2/codecs/mulaw.rb +1 -0
  347. data/lib/rex/proto/iax2/constants.rb +1 -0
  348. data/lib/rex/proto/natpmp.rb +11 -0
  349. data/lib/rex/proto/natpmp/constants.rb +19 -0
  350. data/lib/rex/proto/natpmp/packet.rb +45 -0
  351. data/lib/rex/proto/ntlm.rb +1 -0
  352. data/lib/rex/proto/ntlm.rb.ut.rb +1 -0
  353. data/lib/rex/proto/ntlm/base.rb +38 -37
  354. data/lib/rex/proto/ntlm/constants.rb +1 -0
  355. data/lib/rex/proto/ntlm/crypt.rb +45 -44
  356. data/lib/rex/proto/ntlm/exceptions.rb +1 -0
  357. data/lib/rex/proto/ntlm/message.rb +30 -29
  358. data/lib/rex/proto/ntlm/utils.rb +116 -115
  359. data/lib/rex/proto/proxy/socks4a.rb +1 -0
  360. data/lib/rex/proto/rfb.rb +1 -0
  361. data/lib/rex/proto/rfb.rb.ut.rb +1 -0
  362. data/lib/rex/proto/rfb/cipher.rb +1 -0
  363. data/lib/rex/proto/rfb/client.rb +1 -0
  364. data/lib/rex/proto/rfb/constants.rb +1 -0
  365. data/lib/rex/proto/smb.rb +2 -1
  366. data/lib/rex/proto/smb.rb.ts.rb +2 -1
  367. data/lib/rex/proto/smb/client.rb +23 -22
  368. data/lib/rex/proto/smb/client.rb.ut.rb +1 -0
  369. data/lib/rex/proto/smb/constants.rb +1 -0
  370. data/lib/rex/proto/smb/constants.rb.ut.rb +2 -1
  371. data/lib/rex/proto/smb/crypt.rb +3 -2
  372. data/lib/rex/proto/smb/evasions.rb +1 -0
  373. data/lib/rex/proto/smb/exceptions.rb +6 -5
  374. data/lib/rex/proto/smb/simpleclient.rb +1 -0
  375. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +1 -0
  376. data/lib/rex/proto/smb/utils.rb +1 -0
  377. data/lib/rex/proto/smb/utils.rb.ut.rb +2 -1
  378. data/lib/rex/proto/sunrpc.rb +1 -0
  379. data/lib/rex/proto/sunrpc/client.rb +1 -0
  380. data/lib/rex/proto/tftp.rb +3 -1
  381. data/lib/rex/proto/tftp/client.rb +344 -0
  382. data/lib/rex/proto/tftp/constants.rb +2 -1
  383. data/lib/rex/proto/tftp/server.rb +2 -1
  384. data/lib/rex/proto/tftp/server.rb.ut.rb +3 -2
  385. data/lib/rex/registry.rb +14 -0
  386. data/lib/rex/registry/hive.rb +132 -0
  387. data/lib/rex/registry/lfkey.rb +51 -0
  388. data/lib/rex/registry/nodekey.rb +54 -0
  389. data/lib/rex/registry/regf.rb +25 -0
  390. data/lib/rex/registry/valuekey.rb +67 -0
  391. data/lib/rex/registry/valuelist.rb +29 -0
  392. data/lib/rex/ropbuilder.rb +2 -1
  393. data/lib/rex/ropbuilder/rop.rb +3 -2
  394. data/lib/rex/script.rb +1 -0
  395. data/lib/rex/script/base.rb +1 -0
  396. data/lib/rex/script/meterpreter.rb +1 -0
  397. data/lib/rex/script/shell.rb +1 -0
  398. data/lib/rex/service.rb +2 -1
  399. data/lib/rex/service_manager.rb +6 -5
  400. data/lib/rex/service_manager.rb.ut.rb +2 -1
  401. data/lib/rex/services/local_relay.rb +1 -0
  402. data/lib/rex/socket.rb +72 -36
  403. data/lib/rex/socket.rb.ut.rb +1 -0
  404. data/lib/rex/socket/comm.rb +1 -0
  405. data/lib/rex/socket/comm/local.rb +60 -13
  406. data/lib/rex/socket/comm/local.rb.ut.rb +2 -1
  407. data/lib/rex/socket/ip.rb +1 -0
  408. data/lib/rex/socket/parameters.rb +15 -14
  409. data/lib/rex/socket/parameters.rb.ut.rb +2 -1
  410. data/lib/rex/socket/range_walker.rb +71 -26
  411. data/lib/rex/socket/range_walker.rb.ut.rb +2 -1
  412. data/lib/rex/socket/ssl_tcp.rb +1 -0
  413. data/lib/rex/socket/ssl_tcp.rb.ut.rb +2 -1
  414. data/lib/rex/socket/ssl_tcp_server.rb +1 -0
  415. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +1 -0
  416. data/lib/rex/socket/subnet_walker.rb +1 -0
  417. data/lib/rex/socket/subnet_walker.rb.ut.rb +2 -1
  418. data/lib/rex/socket/switch_board.rb +1 -0
  419. data/lib/rex/socket/switch_board.rb.ut.rb +2 -1
  420. data/lib/rex/socket/tcp.rb +4 -3
  421. data/lib/rex/socket/tcp.rb.ut.rb +2 -1
  422. data/lib/rex/socket/tcp_server.rb +1 -0
  423. data/lib/rex/socket/tcp_server.rb.ut.rb +2 -1
  424. data/lib/rex/socket/udp.rb +2 -1
  425. data/lib/rex/socket/udp.rb.ut.rb +2 -1
  426. data/lib/rex/struct2.rb +2 -1
  427. data/lib/rex/struct2/c_struct.rb +2 -1
  428. data/lib/rex/struct2/c_struct_template.rb +2 -1
  429. data/lib/rex/struct2/constant.rb +2 -1
  430. data/lib/rex/struct2/element.rb +2 -1
  431. data/lib/rex/struct2/generic.rb +1 -0
  432. data/lib/rex/struct2/restraint.rb +2 -1
  433. data/lib/rex/struct2/s_string.rb +1 -0
  434. data/lib/rex/struct2/s_struct.rb +1 -0
  435. data/lib/rex/sync.rb +2 -1
  436. data/lib/rex/sync/event.rb +1 -0
  437. data/lib/rex/sync/read_write_lock.rb +1 -0
  438. data/lib/rex/sync/ref.rb +2 -1
  439. data/lib/rex/sync/thread_safe.rb +2 -1
  440. data/lib/rex/test.rb +2 -1
  441. data/lib/rex/text.rb +136 -19
  442. data/lib/rex/text.rb.ut.rb +1 -0
  443. data/lib/rex/thread_factory.rb +5 -4
  444. data/lib/rex/time.rb +2 -1
  445. data/lib/rex/transformer.rb +1 -0
  446. data/lib/rex/transformer.rb.ut.rb +2 -1
  447. data/lib/rex/ui.rb +2 -1
  448. data/lib/rex/ui/interactive.rb +10 -9
  449. data/lib/rex/ui/output.rb +1 -0
  450. data/lib/rex/ui/output/none.rb +2 -1
  451. data/lib/rex/ui/progress_tracker.rb +2 -1
  452. data/lib/rex/ui/subscriber.rb +9 -8
  453. data/lib/rex/ui/text/color.rb +1 -0
  454. data/lib/rex/ui/text/color.rb.ut.rb +1 -0
  455. data/lib/rex/ui/text/dispatcher_shell.rb +63 -23
  456. data/lib/rex/ui/text/input.rb +1 -0
  457. data/lib/rex/ui/text/input/buffer.rb +7 -6
  458. data/lib/rex/ui/text/input/readline.rb +14 -13
  459. data/lib/rex/ui/text/input/socket.rb +1 -0
  460. data/lib/rex/ui/text/input/stdio.rb +2 -1
  461. data/lib/rex/ui/text/irb_shell.rb +1 -0
  462. data/lib/rex/ui/text/output.rb +1 -0
  463. data/lib/rex/ui/text/output/buffer.rb +1 -0
  464. data/lib/rex/ui/text/output/file.rb +1 -0
  465. data/lib/rex/ui/text/output/socket.rb +1 -0
  466. data/lib/rex/ui/text/output/stdio.rb +1 -0
  467. data/lib/rex/ui/text/output/tee.rb +1 -0
  468. data/lib/rex/ui/text/progress_tracker.rb +2 -1
  469. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +2 -1
  470. data/lib/rex/ui/text/shell.rb +1 -0
  471. data/lib/rex/ui/text/table.rb +20 -14
  472. data/lib/rex/ui/text/table.rb.ut.rb +3 -2
  473. data/lib/rex/zip.rb +1 -0
  474. data/lib/rex/zip/archive.rb +2 -1
  475. data/lib/rex/zip/blocks.rb +3 -2
  476. data/lib/rex/zip/entry.rb +6 -7
  477. data/lib/rex/zip/jar.rb +4 -3
  478. data/lib/rex/zip/samples/comment.rb +1 -0
  479. data/lib/rex/zip/samples/mkwar.rb +1 -0
  480. data/lib/rex/zip/samples/mkzip.rb +1 -0
  481. data/lib/rex/zip/samples/recursive.rb +1 -0
  482. metadata +433 -435
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
 
2
3
  require 'msf/core'
3
4
  require 'rex/text'
@@ -6,7 +7,7 @@ require 'rex/exploitation/jsobfu'
6
7
  module Rex
7
8
  module Exploitation
8
9
 
9
- #
10
+ #
10
11
  # Provides several javascript functions for determining the OS and browser versions of a client.
11
12
  #
12
13
  # getVersion(): returns an object with the following properties
@@ -26,865 +27,11 @@ module Exploitation
26
27
  # ua_ver_eq(a, b): returns true if a == b
27
28
  #
28
29
  class JavascriptOSDetect < JSObfu
29
-
30
+
30
31
  def initialize(custom_js = '', opts = {})
31
- clients = ::Msf::HttpClients
32
- oses = ::Msf::OperatingSystems
33
32
  @js = custom_js
34
- @js = <<ENDJS + @js
35
- /**
36
- * This can reliably detect browser versions for IE and Firefox even in the
37
- * presence of a spoofed User-Agent. OS detection is more fragile and
38
- * requires truthful navigator.appVersion and navigator.userAgent strings in
39
- * order to be accurate for more than just IE on Windows.
40
- **/
41
- function getVersion(){
42
- //Default values:
43
- var os_name;
44
- var os_flavor;
45
- var os_sp;
46
- var os_lang;
47
- var ua_name;
48
- var ua_version;
49
- var arch = "";
50
- var useragent = navigator.userAgent;
51
- // Trust but verify...
52
- var ua_is_lying = false;
53
-
54
- var version = "";
55
-
56
- //--
57
- // Client
58
- //--
59
- if (window.opera) {
60
- ua_name = "#{clients::OPERA}";
61
- if (!navigator.userAgent.match(/Opera/)) {
62
- ua_is_lying = true;
63
- }
64
- // This seems to be completely accurate, e.g. "9.21" is the return
65
- // value of opera.version() when run on Opera 9.21
66
- ua_version = opera.version();
67
- if (!os_name) {
68
- // The 'inconspicuous' argument is there to give us a real value on
69
- // Opera 6 where, without it, the return value is supposedly
70
- // 'Hm, were you only as smart as Bjorn Vermo...'
71
- // though I have not verfied this claim.
72
- switch (opera.buildNumber('inconspicuous')) {
73
- case "344": // opera-9.0-20060616.1-static-qt.i386-en-344
74
- case "2091": // opera-9.52-2091.gcc3-shared-qt3.i386.rpm
75
- case "2444": // opera-9.60.gcc4-shared-qt3.i386.rpm
76
- case "6386": // 10.61
77
- os_name = "#{oses::LINUX}";
78
- break;
79
- case "8502": // "Opera 9 Eng Setup.exe"
80
- case "8679": // "Opera_9.10_Eng_Setup.exe"
81
- case "8771": // "Opera_9.20_Eng_Setup.exe"
82
- case "8776": // "Opera_9.21_Eng_Setup.exe"
83
- case "8801": // "Opera_9.22_Eng_Setup.exe"
84
- case "10108": // "Opera_952_10108_en.exe"
85
- case "10467": // "Opera_962_en_Setup.exe"
86
- case "3445": // 10.61
87
- os_name = "#{oses::WINDOWS}";
88
- break;
89
- case "6386": // 10.61
90
- os_name = "#{oses::MAC_OSX}";
91
- break;
92
- //default:
93
- // document.write(opera.buildNumber('inconspicuous'));
94
- // break;
95
- }
96
- }
97
- } else if (typeof window.onmousewheel != 'undefined') {
98
- // Then this is webkit, could be Safari or Chrome.
99
- // Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1
100
- // Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.78 Safari/532.5
101
- // Mozilla/5.0 (Linux; U; Android 2.2; en-au; GT-I9000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
102
- // Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8C148
103
- // Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405
104
- // Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
105
-
106
- // Google Chrome has window.google (older versions), window.chromium (older versions), and window.window.chrome (3+)
107
- if (window.chromium || window.google || window.chrome) {
108
- ua_name = "#{clients::CHROME}";
109
- search = "Chrome";
110
- } else {
111
- ua_name = "#{clients::SAFARI}";
112
- search = "Version";
113
- }
114
-
115
- platform = navigator.platform.toLowerCase();
116
- // Just to be a pain, iPod and iPad both leave off "Safari" and
117
- // "Version" in the UA, see example above. Grab the webkit version
118
- // instead. =/
119
- if (platform.match(/ipod/)) {
120
- os_name = "#{oses::MAC_OSX}";
121
- os_flavor = "iPod";
122
- arch = "#{ARCH_ARMLE}";
123
- search = "AppleWebKit";
124
- } else if (platform.match(/ipad/)) {
125
- os_name = "#{oses::MAC_OSX}";
126
- os_flavor = "iPad";
127
- arch = "#{ARCH_ARMLE}";
128
- search = "AppleWebKit";
129
- } else if (platform.match(/iphone/)) {
130
- os_name = "#{oses::MAC_OSX}";
131
- os_flavor = "iPhone";
132
- arch = "#{ARCH_ARMLE}";
133
- } else if (platform.match(/macintel/)) {
134
- os_name = "#{oses::MAC_OSX}";
135
- arch = "#{ARCH_X86}";
136
- } else if (platform.match(/linux/)) {
137
- os_name = "#{oses::LINUX}";
138
- if (platform.match(/x86_64/)) {
139
- arch = "#{ARCH_X86_64}";
140
- } else if (platform.match(/arm/)) {
141
- // Android and maemo
142
- arch = "#{ARCH_ARMLE}";
143
- }
144
- } else if (platform.match(/windows/)) {
145
- os_name = "#{oses::WINDOWS}";
146
- }
147
-
148
- ua_version = searchVersion(search, navigator.userAgent);
149
- if (!ua_version || 0 == ua_version.length) {
150
- ua_is_lying = true;
151
- }
152
- } else if (!document.all && navigator.taintEnabled) {
153
- // Use taintEnabled to identify FF since other recent browsers
154
- // implement window.getComputedStyle now. For some reason, checking for
155
- // taintEnabled seems to cause IE 6 to stop parsing, so make sure this
156
- // isn't IE first.
157
- //
158
- // Then this is a Gecko derivative, assume Firefox since that's the
159
- // only one we have sploits for. We may need to revisit this in the
160
- // future. This works for multi/browser/mozilla_compareto against
161
- // Firefox and Mozilla, so it's probably good enough for now.
162
- ua_name = "#{clients::FF}";
163
- if (document.readyState) {
164
- ua_version = "3.6";
165
- } else if (String.trimRight) {
166
- ua_version = "3.5";
167
- } else if (document.getElementsByClassName) {
168
- ua_version = "3";
169
- } else if (window.Iterator) {
170
- ua_version = "2";
171
- } else if (Array.every) {
172
- ua_version = "1.5";
173
- } else {
174
- ua_version = "1";
175
- }
176
-
177
- if (navigator.oscpu != navigator.platform) {
178
- ua_is_lying = true;
179
- }
180
- // oscpu is unaffected by changes in the useragent and has values like:
181
- // "Linux i686"
182
- // "Windows NT 6.0"
183
- // haven't tested on 64-bit Windows
184
- version = navigator.oscpu;
185
- if (version.match(/i.86/)) {
186
- arch = "#{ARCH_X86}";
187
- }
188
- if (version.match(/x86_64/)) {
189
- arch = "#{ARCH_X86_64}";
190
- }
191
- if (version.match(/Windows/)) {
192
- os_name = "#{oses::WINDOWS}";
193
- switch(version) {
194
- case "Windows NT 5.0": os_flavor = "2000"; break;
195
- case "Windows NT 5.1": os_flavor = "XP"; break;
196
- case "Windows NT 5.2": os_flavor = "2003"; break;
197
- case "Windows NT 6.0": os_flavor = "Vista"; break;
198
- case "Windows NT 6.1": os_flavor = "7"; break;
199
- }
200
- }
201
- if (version.match(/Linux/)) {
202
- os_name = "#{oses::LINUX}";
203
- }
204
- // end navigator.oscpu checks
205
-
206
- // buildID is unaffected by changes in the useragent and typically has
207
- // the compile date which in some cases can be used to map to specific
208
- // Version & O/S (including Distro and even Arch). Depending upon the
209
- // buildID, sometime navigator.productSub will be needed.
210
- //
211
- // This technique, and the laboriously compiled associated table,
212
- // submitted by Mark Fioravanti.
213
-
214
- var buildid = navigator.buildID;
215
-
216
- switch(buildid) {
217
- case "2008041514": ua_version = "3.0.0.b5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
218
- case "2008041515": ua_version = "3.0.0.b5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
219
- case "2008052312": ua_version = "3.0.0"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
220
- case "2008052906": ua_version = "3.0.0"; os_name = "#{oses::WINDOWS}"; break;
221
- case "2008052909": ua_version = "3.0.0.rc1"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
222
- case "2008052912": ua_version = "3.0.0"; os_name = "#{oses::LINUX}"; break;
223
- case "2008060309": ua_version = "3.0.0"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
224
- case "2008070205": ua_version = "2.0.0.16"; os_name = "#{oses::WINDOWS}"; break;
225
- case "2008070206": ua_version = "3.0.1"; os_name = "#{oses::LINUX}"; break;
226
- case "2008070208": ua_version = "3.0.1"; os_name = "#{oses::WINDOWS}"; break;
227
- case "2008071222": ua_version = "3.0.1"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
228
- case "2008072820":
229
- switch (navigator.productSub) {
230
- case "2008072820": ua_version = "3.0.1"; os_name = "#{oses::LINUX}"; break;
231
- case "2008092313": ua_version = "3.0.2"; os_name = "#{oses::LINUX}"; break;
232
- } break;
233
- case "2008082909": ua_version = "2.0.0.17"; os_name = "#{oses::WINDOWS}"; break;
234
- case "2008091618": ua_version = "3.0.2"; os_name = "#{oses::LINUX}"; break;
235
- case "2008091620": ua_version = "3.0.2"; os_name = "#{oses::WINDOWS}"; break;
236
- case "2008092313": ua_version = "3.0.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
237
- case "2008092416": ua_version = "3.0.3"; os_name = "#{oses::LINUX}"; break;
238
- case "2008092417": ua_version = "3.0.3"; os_name = "#{oses::WINDOWS}"; break;
239
- case "2008092510": ua_version = "3.0.4"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
240
- case "2008101315":
241
- switch (navigator.productSub) {
242
- case "2008101315": ua_version = "3.0.3"; os_name = "#{oses::LINUX}"; break;
243
- case "2008111318": ua_version = "3.0.4"; os_name = "#{oses::LINUX}"; arch = "#{ARCH_X86}"; break;
244
- } break;
245
- case "2008102918": ua_version = "2.0.0.18"; os_name = "#{oses::WINDOWS}"; break;
246
- case "2008102920": ua_version = "3.0.4"; break;
247
- case "2008111317": ua_version = "3.0.5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
248
- case "2008111318": ua_version = "3.0.5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
249
- case "2008120119": ua_version = "2.0.0.19"; os_name = "#{oses::WINDOWS}"; break;
250
- case "2008120121": ua_version = "3.0.5"; os_name = "#{oses::LINUX}"; break;
251
- case "2008120122": ua_version = "3.0.5"; os_name = "#{oses::WINDOWS}"; break;
252
- case "2008121709": ua_version = "2.0.0.20"; os_name = "#{oses::WINDOWS}"; break;
253
- case "2009011912": ua_version = "3.0.6"; os_name = "#{oses::LINUX}"; break;
254
- case "2009011913": ua_version = "3.0.6"; os_name = "#{oses::WINDOWS}"; break;
255
- case "2009012615": ua_version = "3.0.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
256
- case "2009012616": ua_version = "3.0.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
257
- case "2009021906": ua_version = "3.0.7"; os_name = "#{oses::LINUX}"; break;
258
- case "2009021910": ua_version = "3.0.7"; os_name = "#{oses::WINDOWS}"; break;
259
- case "2009030422": ua_version = "3.0.8"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
260
- case "2009032608": ua_version = "3.0.8"; os_name = "#{oses::LINUX}"; break;
261
- case "2009032609": ua_version = "3.0.8"; os_name = "#{oses::WINDOWS}"; break;
262
- case "2009032711": ua_version = "3.0.9"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
263
- case "2009033100":
264
- switch (navigator.productSub) {
265
- case "2009033100": ua_version = "3.0.8"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
266
- case "2009042113": ua_version = "3.0.9"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
267
- } break;
268
- case "2009040820": ua_version = "3.0.9"; os_name = "#{oses::LINUX}"; break;
269
- case "2009040821": ua_version = "3.0.9"; os_name = "#{oses::WINDOWS}"; break;
270
- case "2009042113": ua_version = "3.0.10"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
271
- case "2009042114": ua_version = "3.0.10"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
272
- case "2009042315": ua_version = "3.0.10"; os_name = "#{oses::LINUX}"; break;
273
- case "2009042316": ua_version = "3.0.10"; os_name = "#{oses::WINDOWS}"; break;
274
- case "20090427153806": ua_version = "3.5.0.b4"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
275
- case "20090427153807": ua_version = "3.5.0.b4"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
276
- case "2009060214": ua_version = "3.0.11"; os_name = "#{oses::LINUX}"; break;
277
- case "2009060215": ua_version = "3.0.11"; os_name = "#{oses::WINDOWS}"; break;
278
- case "2009060308":
279
- switch (navigator.productSub) {
280
- case "2009060308": ua_version = "3.0.11"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
281
- case "2009070811": ua_version = "3.0.12"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
282
- } break;
283
- case "2009060309":
284
- switch (navigator.productSub) {
285
- case "2009060309": ua_version = "3.0.11"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
286
- case "2009070811": ua_version = "3.0.12"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
287
- } break;
288
- case "2009060310": ua_version = "3.0.11"; os_name = "#{oses::LINUX}"; os_flavor = "BackTrack"; break;
289
- case "2009062005": ua_version = "3.0.11"; os_name = "#{oses::LINUX}"; os_flavor = "PCLunixOS"; break;
290
- case "20090624012136": ua_version = "3.5.0"; os_name = "#{oses::MAC_OSX}"; break;
291
- case "20090624012820": ua_version = "3.5.0"; os_name = "#{oses::LINUX}"; break;
292
- case "20090701234143": ua_version = "3.5.0"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
293
- case "20090702060527": ua_version = "3.5.0"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
294
- case "2009070610": ua_version = "3.0.12"; os_name = "#{oses::LINUX}"; break;
295
- case "2009070611": ua_version = "3.0.12"; os_name = "#{oses::WINDOWS}"; break;
296
- case "2009070811": ua_version = "3.0.13"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
297
- case "20090715083437": ua_version = "3.5.1"; os_name = "#{oses::MAC_OSX}"; break;
298
- case "20090715083816": ua_version = "3.5.1"; os_name = "#{oses::LINUX}"; break;
299
- case "20090715094852": ua_version = "3.5.1"; os_name = "#{oses::WINDOWS}"; break;
300
- case "2009072202": ua_version = "3.0.12"; os_name = "#{oses::LINUX}"; os_flavor = "Oracle"; break;
301
- case "2009072711": ua_version = "3.0.12"; os_name = "#{oses::LINUX}"; os_flavor = "CentOS"; break;
302
- case "20090729211433": ua_version = "3.5.2"; os_name = "#{oses::MAC_OSX}"; break;
303
- case "20090729211829": ua_version = "3.5.2"; os_name = "#{oses::LINUX}"; break;
304
- case "20090729225027": ua_version = "3.5.2"; os_name = "#{oses::WINDOWS}"; break;
305
- case "2009073021": ua_version = "3.0.13"; os_name = "#{oses::LINUX}"; break;
306
- case "2009073022": ua_version = "3.0.13"; os_name = "#{oses::WINDOWS}"; break;
307
- case "20090824085414": ua_version = "3.5.3"; os_name = "#{oses::MAC_OSX}"; break;
308
- case "20090824085743": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; break;
309
- case "20090824101458": ua_version = "3.5.3"; os_name = "#{oses::WINDOWS}"; break;
310
- case "2009082707": ua_version = "3.0.14"; break;
311
- case "2009090216": ua_version = "3.0.14"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
312
- case "20090914014745": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
313
- case "20090915065903": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86_64}"; break;
314
- case "20090915070141": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86}"; break;
315
- case "20091007090112": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
316
- case "20091007095328": ua_version = "3.5.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
317
- case "2009101600":
318
- switch (navigator.productSub) {
319
- case "2009101600": ua_version = "3.0.15"; break; // Can be either Mac or Linux
320
- case "20091016": ua_version = "3.5.4"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; arch = "#{ARCH_X86}"; break;
321
- } break;
322
- case "2009101601": ua_version = "3.0.15"; os_name = "#{oses::WINDOWS}"; break;
323
- case "20091016081620": ua_version = "3.5.4"; os_name = "#{oses::MAC_OSX}"; break;
324
- case "20091016081727": ua_version = "3.5.4"; os_name = "#{oses::LINUX}"; break;
325
- case "20091016092926": ua_version = "3.5.4"; os_name = "#{oses::WINDOWS}"; break;
326
- case "20091020122601": ua_version = "3.5.4"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
327
- case "2009102814":
328
- switch (navigator.productSub) {
329
- case "2009121601": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
330
- case "2009121602": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
331
- case "2010010604": ua_version = "3.0.17"; os_name = "#{oses::LINUX}"; os_flavor = "Mint"; break;
332
- case "2010021501": ua_version = "3.0.17;xul1.9.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Mint"; arch = "#{ARCH_X86}"; break;
333
- case "2010021502": ua_version = "3.0.17;xul1.9.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Mint"; arch = "#{ARCH_X86_64}"; break;
334
- } break;
335
- case "2009102815":
336
- switch (navigator.productSub) {
337
- case "2009102815": ua_version = "3.0.15"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
338
- case "2009121601": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
339
- } break;
340
- case "20091029152254": ua_version = "3.6.0.b1"; os_name = "#{oses::LINUX}"; break;
341
- case "20091029171059": ua_version = "3.6.0.b1"; os_name = "#{oses::WINDOWS}"; break;
342
- case "20091102134505": ua_version = "3.5.5"; os_name = "#{oses::MAC_OSX}"; break;
343
- case "20091102141836": ua_version = "3.5.5"; os_name = "#{oses::LINUX}"; break;
344
- case "20091102152451": ua_version = "3.5.5"; os_name = "#{oses::WINDOWS}"; break;
345
- case "2009110421": ua_version = "3.0.15"; os_name = "#{oses::FREEBSD}"; arch = "#{ARCH_X86}"; break;
346
- case "20091106091959": ua_version = "3.5.5"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
347
- case "20091106140514": ua_version = "3.5.5"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
348
- case "20091106145609": ua_version = "3.5.5"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
349
- case "20091108163911": ua_version = "3.6.0.b2"; os_name = "#{oses::LINUX}"; break;
350
- case "20091108181924": ua_version = "3.6.0.b2"; os_name = "#{oses::WINDOWS}"; break;
351
- case "20091109125225":
352
- switch (navigator.productSub) {
353
- case "20091109": ua_version = "3.5.5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
354
- case "20091215": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
355
- } break;
356
- case "20091109134913": ua_version = "3.5.5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
357
- case "20091115172547": ua_version = "3.6.0.b3"; os_name = "#{oses::LINUX}"; break;
358
- case "20091115182845": ua_version = "3.6.0.b3"; os_name = "#{oses::WINDOWS}"; break;
359
- case "20091124201530": ua_version = "3.6.0.b4"; os_name = "#{oses::MAC_OSX}"; break;
360
- case "20091124201751": ua_version = "3.6.0.b4"; os_name = "#{oses::LINUX}"; break;
361
- case "20091124213835": ua_version = "3.6.0.b4"; os_name = "#{oses::WINDOWS}"; break;
362
- case "2009120100": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
363
- case "20091201203240": ua_version = "3.5.6"; os_name = "#{oses::MAC_OSX}"; break;
364
- case "20091201204959": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; break;
365
- case "20091201220228": ua_version = "3.5.6"; os_name = "#{oses::WINDOWS}"; break;
366
- case "2009120206": ua_version = "3.0.16"; break; // Can be either Mac or Linux
367
- case "2009120208": ua_version = "3.0.16"; os_name = "#{oses::WINDOWS}"; break;
368
- case "20091204132459": ua_version = "3.6.0.b5"; os_name = "#{oses::LINUX}"; break;
369
- case "20091204132509": ua_version = "3.6.0.b5"; os_name = "#{oses::MAC_OSX}"; break;
370
- case "20091204143806": ua_version = "3.6.0.b5"; os_name = "#{oses::WINDOWS}"; break;
371
- case "20091215230859": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
372
- case "20091215230946": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
373
- case "20091215231400": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
374
- case "20091215231754":
375
- switch (navigator.productSub) {
376
- case "20091215": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
377
- case "20100106": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
378
- } break;
379
- case "2009121601":
380
- switch (navigator.productSub) {
381
- case "2009121601": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
382
- case "2010010604": ua_version = "3.0.17"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break; // Could also be Mint x86-64
383
- } break;
384
- case "2009121602": ua_version = "3.0.17"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
385
- case "20091216104148": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; break;
386
- case "20091216132458": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
387
- case "20091216132537": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
388
- case "20091216142458": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
389
- case "20091216142519": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
390
- case "2009121708": ua_version = "3.0.16"; os_name = "#{oses::LINUX}"; os_flavor = "CentOS"; arch = "#{ARCH_X86}"; break;
391
- case "2009122115": ua_version = "3.0.17"; break; // Can be either Mac or Linux
392
- case "2009122116": ua_version = "3.0.17"; os_name = "#{oses::WINDOWS}"; break;
393
- case "20091221151141": ua_version = "3.5.7"; os_name = "#{oses::MAC_OSX}"; break;
394
- case "20091221152502": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; break;
395
- case "20091221164558": ua_version = "3.5.7"; os_name = "#{oses::WINDOWS}"; break;
396
- case "2009122200": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
397
- case "20091223231431": ua_version = "3.5.6"; os_name = "#{oses::LINUX}"; os_flavor = "PCLunixOS"; arch = "#{ARCH_X86}"; break;
398
- case "20100105194006": ua_version = "3.6.0.rc1"; os_name = "#{oses::MAC_OSX}"; break;
399
- case "20100105194116": ua_version = "3.6.0.rc1"; os_name = "#{oses::LINUX}"; break;
400
- case "20100105212446": ua_version = "3.6.0.rc1"; os_name = "#{oses::WINDOWS}"; break;
401
- case "2010010604": ua_version = "3.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
402
- case "2010010605": ua_version = "3.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
403
- case "20100106054534": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
404
- case "20100106054634": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
405
- case "20100106211825": ua_version = "3.5.7"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
406
- case "20100106212742": ua_version = "3.5.7"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
407
- case "20100106215614": ua_version = "3.5.7"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
408
- case "20100110112429": ua_version = "3.5.7"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; break;
409
- case "20100115132715": ua_version = "3.6.0"; os_name = "#{oses::MAC_OSX}"; break;
410
- case "20100115133306": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; break;
411
- case "20100115144158": ua_version = "3.6.0"; os_name = "#{oses::WINDOWS}"; break;
412
- case "20100125074043": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
413
- case "20100125074127": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
414
- case "20100125204847": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86}"; break; // Could also be Mint x86
415
- case "20100125204903": ua_version = "3.6.0"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86_64}"; break; // Could also be Mint x86-64
416
- case "20100202152834": ua_version = "3.5.8"; os_name = "#{oses::MAC_OSX}"; break;
417
- case "20100202153512": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; break;
418
- case "20100202165920": ua_version = "3.5.8"; os_name = "#{oses::WINDOWS}"; break;
419
- case "2010020219": ua_version = "3.0.18"; os_name = "#{oses::MAC_OSX}"; break;
420
- case "2010020220": ua_version = "3.0.18"; os_name = "#{oses::WINDOWS}"; break;
421
- case "2010020400": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
422
- case "20100212131909": ua_version = "3.6.0.2"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
423
- case "20100212132013": ua_version = "3.6.0.2"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
424
- case "20100216105329": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
425
- case "20100216105348": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
426
- case "20100216105410": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
427
- case "20100216110009": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
428
- case "2010021718": ua_version = "3.0.18"; os_name = "#{oses::LINUX}"; os_flavor = "CentOS"; arch = "#{ARCH_X86}"; break;
429
- case "20100218022359": ua_version = "3.6.0.4"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
430
- case "20100218022705": ua_version = "3.6.0.4"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
431
- case "20100218112915": ua_version = "3.5.8"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
432
- case "20100222120605": ua_version = "3.6.0.5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
433
- case "20100222120717": ua_version = "3.6.0.5"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
434
- case "20100301015346": ua_version = "3.6.0"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
435
- case "20100305054927": ua_version = "3.6.0"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
436
- case "20100307204001": ua_version = "3.6.0"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
437
- case "20100308142847": ua_version = "3.6.0.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
438
- case "20100308151019": ua_version = "3.6.0.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
439
- case "2010031218": ua_version = "3.0.19"; break; // Mac OS X or Linux
440
- case "2010031422": ua_version = "3.0.19"; os_name = "#{oses::WINDOWS}"; break;
441
- case "20100315075757": ua_version = "3.5.9"; os_name = "#{oses::LINUX}"; break;
442
- case "20100315080228": ua_version = "3.5.9"; os_name = "#{oses::MAC_OSX}"; break;
443
- case "20100315083431": ua_version = "3.5.9"; os_name = "#{oses::WINDOWS}"; break;
444
- case "20100316055951": ua_version = "3.6.2"; os_name = "#{oses::MAC_OSX}"; break;
445
- case "20100316060223": ua_version = "3.6.2"; os_name = "#{oses::LINUX}"; break;
446
- case "20100316074819": ua_version = "3.6.2"; os_name = "#{oses::WINDOWS}"; break;
447
- case "2010031700": ua_version = "3.5.9"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
448
- case "20100323102218": ua_version = "3.6.2"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
449
- case "20100323102339": ua_version = "3.6.2"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
450
- case "20100323194640": ua_version = "3.6.2"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
451
- case "20100324182054": ua_version = "3.6.2"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
452
- case "20100330071911": ua_version = "3.5.9"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
453
- case "20100330072017": ua_version = "3.5.9"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
454
- case "20100330072020": ua_version = "3.5.9"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
455
- case "20100330072034": ua_version = "3.5.9"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
456
- case "20100401064631": ua_version = "3.6.3"; os_name = "#{oses::MAC_OSX}"; break;
457
- case "20100401074458": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; break;
458
- case "20100401080539": ua_version = "3.6.3"; os_name = "#{oses::WINDOWS}"; break;
459
- case "20100401144201": ua_version = "3.6.2"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
460
- case "2010040116": ua_version = "3.0.19"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
461
- case "2010040118": ua_version = "3.0.19"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
462
- case "2010040119": ua_version = "3.0.19"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
463
- case "2010040121": ua_version = "3.0.19"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
464
- case "20100401213457": ua_version = "3.5.9"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
465
- case "2010040123": ua_version = "3.0.19"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
466
- case "2010040200": ua_version = "3.0.19"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
467
- case "20100402010516": ua_version = "3.5.9"; os_name = "#{oses::LINUX}"; os_flavor = "Mint"; arch = "#{ARCH_X86_64}"; break;
468
- case "20100402041908": ua_version = "3.6.2"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
469
- case "20100403042003": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
470
- case "20100403082016": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
471
- case "20100404024515": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
472
- case "20100404024646": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
473
- case "20100404104043": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; os_flavor = "PClinuxOS"; arch = "#{ARCH_X86_64}"; break;
474
- case "20100409151117": ua_version = "3.6.3.2"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
475
- case "20100409170726": ua_version = "3.6.3.2"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
476
- case "20100412125148": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
477
- case "20100413152922": ua_version = "3.6.4.b1"; os_name = "#{oses::MAC_OSX}"; break;
478
- case "20100413154310": ua_version = "3.6.4.b1"; os_name = "#{oses::LINUX}"; break;
479
- case "20100413172113": ua_version = "3.6.4.b1"; os_name = "#{oses::WINDOWS}"; break;
480
- case "20100415062243": ua_version = "3.6.3.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
481
- case "20100415103754": ua_version = "3.6.3.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
482
- case "20100416101101": ua_version = "3.6.3.2"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
483
- case "2010041700": ua_version = "3.6.4.1"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
484
- case "20100419015333": ua_version = "3.6.3"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
485
- case "20100423043606": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86_64}"; break;
486
- case "20100423140709": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
487
- case "20100423141150": ua_version = "3.6.3"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
488
- case "20100423142835": ua_version = "3.6.3"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
489
- case "20100502202326": ua_version = "3.6.4.b2"; os_name = "#{oses::LINUX}"; break;
490
- case "20100502202401": ua_version = "3.6.4.b2"; os_name = "#{oses::MAC_OSX}"; break;
491
- case "20100502221517": ua_version = "3.6.4.b2"; os_name = "#{oses::WINDOWS}"; break;
492
- case "20100503113315": ua_version = "3.6.4.b3"; os_name = "#{oses::MAC_OSX}"; break;
493
- case "20100503113541": ua_version = "3.6.4.b3"; os_name = "#{oses::LINUX}"; break;
494
- case "20100503122926": ua_version = "3.6.4.b3"; os_name = "#{oses::WINDOWS}"; break;
495
- case "20100504085637": ua_version = "3.5.10"; os_name = "#{oses::LINUX}"; break;
496
- case "20100504085753": ua_version = "3.5.10"; os_name = "#{oses::MAC_OSX}"; break;
497
- case "20100504093643": ua_version = "3.5.10"; os_name = "#{oses::WINDOWS}"; break;
498
- case "2010050600": ua_version = "3.5.10"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
499
- case "2010051300": ua_version = "3.6.4.1"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
500
- case "20100513134853": ua_version = "3.6.4.b4"; os_name = "#{oses::MAC_OSX}"; break;
501
- case "20100513140540": ua_version = "3.6.4.b4"; os_name = "#{oses::LINUX}"; break;
502
- case "20100513144105": ua_version = "3.6.4.b4"; os_name = "#{oses::WINDOWS}"; break;
503
- case "20100513190740": ua_version = "3.6.3"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
504
- case "20100523180910": ua_version = "3.6.4.b5"; os_name = "#{oses::MAC_OSX}"; break;
505
- case "20100523181754": ua_version = "3.6.4.b5"; os_name = "#{oses::LINUX}"; break;
506
- case "20100523185824": ua_version = "3.6.4.b5"; os_name = "#{oses::WINDOWS}"; break;
507
- case "20100527084110": ua_version = "3.6.4.b6"; os_name = "#{oses::MAC_OSX}"; break;
508
- case "20100527085242": ua_version = "3.6.4.b6"; os_name = "#{oses::LINUX}"; break;
509
- case "20100527093236": ua_version = "3.6.4.b6"; os_name = "#{oses::WINDOWS}"; break;
510
- case "2010061100": ua_version = "3.6.4"; os_name = "#{oses::LINUX}"; os_flavor = "SUSE"; break;
511
- case "20100611134546": ua_version = "3.6.4.b7"; os_name = "#{oses::MAC_OSX}"; break;
512
- case "20100611135942": ua_version = "3.6.4.b7"; os_name = "#{oses::LINUX}"; break;
513
- case "20100611143157": ua_version = "3.6.4.b7"; os_name = "#{oses::WINDOWS}"; break;
514
- case "20100622203044": ua_version = "3.6.4"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
515
- case "20100622203045": ua_version = "3.6.4"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
516
- case "20100622204750": ua_version = "3.5.10"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86_64}"; break;
517
- case "20100622204830": ua_version = "3.5.10"; os_name = "#{oses::LINUX}"; os_flavor = "Fedora"; arch = "#{ARCH_X86}"; break;
518
- case "20100622205038": ua_version = "3.6.4"; os_name = "#{oses::LINUX}"; os_flavor = "PClinuxOS"; arch = "#{ARCH_X86_64}"; break;
519
- case "20100623081410": ua_version = "3.6.4"; os_name = "#{oses::LINUX}"; os_flavor = "CentOS"; arch = "#{ARCH_X86_64}"; break;
520
- case "20100623081921": ua_version = "3.6.4"; os_name = "#{oses::LINUX}"; os_flavor = "CentOS"; arch = "#{ARCH_X86}"; break;
521
- case "20100623155731": ua_version = "3.6.4.b7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
522
- case "20100623200132": ua_version = "3.6.4.b7"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
523
- case "20100625222733": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; break;
524
- case "20100625223402": ua_version = "3.6.6"; os_name = "#{oses::MAC_OSX}"; break;
525
- case "20100625231939": ua_version = "3.6.6"; os_name = "#{oses::WINDOWS}"; break;
526
- case "20100626104508": ua_version = "3.6.4"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86}"; break;
527
- case "20100627211341": ua_version = "3.6.4"; os_name = "#{oses::FREEBSD}"; os_flavor = "PC-BSD"; arch = "#{ARCH_X86_64}"; break;
528
- case "20100628082832": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; os_flavor = "PClinuxOS"; arch = "#{ARCH_X86_64}"; break;
529
- case "20100628124739": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
530
- case "20100628143222": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
531
- case "20100628232431": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
532
- case "20100629034705": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
533
- case "20100629105354": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; os_flavor = "Mandriva"; arch = "#{ARCH_X86}"; break;
534
- case "20100630130433": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
535
- case "20100630131607": ua_version = "4.0.0.b1"; os_name = "#{oses::MAC_OSX}"; break;
536
- case "20100630132217": ua_version = "4.0.0.b1"; os_name = "#{oses::LINUX}"; break;
537
- case "20100630141702": ua_version = "4.0.0.b1"; os_name = "#{oses::WINDOWS}"; break;
538
- case "20100630174226": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86_64}"; break;
539
- case "20100630180611": ua_version = "3.6.6"; os_name = "#{oses::LINUX}"; os_flavor = "Sabayon"; arch = "#{ARCH_X86}"; break;
540
- case "20100709115208": ua_version = "3.6.7.b1"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86}"; break;
541
- case "20100709183408": ua_version = "3.6.7.b1"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
542
- case "20100716093011": ua_version = "3.6.7.b2"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; arch = "#{ARCH_X86_64}"; break;
543
- case "20101203075014": ua_version = "3.6.13"; os_name = "#{oses::WINDOWS}"; break;
544
- case "20101206122825": ua_version = "3.6.13"; os_name = "#{oses::LINUX}"; os_flavor = "Ubuntu"; break;
545
- default:
546
- version = searchVersion("Firefox", navigator.userAgent);
547
- // Verify whether the ua string is lying by checking if it contains
548
- // the major version we detected using known objects above. If it
549
- // appears to be truthful, then use its more precise version number.
550
- if (version && version.split(".")[0] == ua_version.split(".")[0]) {
551
- // The version number will sometimes end with a space or end of
552
- // line, so strip off anything after a space if one exists
553
- if (-1 != version.indexOf(" ")) {
554
- version = version.substr(0,version.indexOf(" "));
555
- }
556
- ua_version = version;
557
- } else {
558
- ua_is_lying = true;
559
- }
560
- break;
561
- }
562
- //if (ua_is_lying) { alert("UA is lying"); }
563
- //alert(ua_version + " vs " + navigator.userAgent);
564
-
565
- // end navigator.buildID checks
566
-
567
- } else if (typeof ScriptEngineMajorVersion == "function") {
568
- // Then this is IE and we can very reliably detect the OS.
569
- // Need to add detection for IE on Mac. Low priority, since we
570
- // don't have any sploits for it yet and it's a very low market
571
- // share.
572
- os_name = "#{oses::WINDOWS}";
573
- ua_name = "#{clients::IE}";
574
- version = ScriptEngineMajorVersion().toString();
575
- version += ScriptEngineMinorVersion().toString();
576
- version += ScriptEngineBuildVersion().toString();
577
- //document.write("ScriptEngine: "+version+"<br />");
578
- switch (version){
579
- case "514615":
580
- // IE 5.00.2920.0000, 2000 Advanced Server SP0 English
581
- ua_version = "5.0";
582
- os_flavor = "2000";
583
- os_sp = "SP0";
584
- break;
585
- case "515907":
586
- os_flavor = "2000";
587
- os_sp = "SP3"; //or SP2: oCC.getComponentVersion('{22d6f312-b0f6-11d0-94ab-0080c74c7e95}', 'componentid') => 6,4,9,1109
588
- break;
589
- case "518513":
590
- os_flavor = "2000";
591
- os_sp = "SP4";
592
- break;
593
- case "566626":
594
- // IE 6.0.2600.0000, XP SP0 English
595
- // IE 6.0.2800.1106, XP SP1 English
596
- ua_version = "6.0";
597
- os_flavor = "XP";
598
- os_sp = "SP0";
599
- break;
600
- case "568515":
601
- // IE 6.0.3790.0, 2003 Standard SP0 English
602
- ua_version = "6.0";
603
- os_flavor = "2003";
604
- os_sp = "SP0";
605
- break;
606
- case "568820":
607
- // IE 6.0.2900.2180, xp sp2 english
608
- os_flavor = "XP";
609
- os_sp = "SP2";
610
- break;
611
- case "568827":
612
- os_flavor = "2003";
613
- os_sp = "SP1";
614
- break;
615
- case "568831": //XP SP2 -OR- 2K SP4
616
- if (os_flavor == "2000"){
617
- os_sp = "SP4";
618
- }
619
- else{
620
- os_flavor = "XP";
621
- os_sp = "SP2";
622
- }
623
- break;
624
- case "568832":
625
- os_flavor = "2003";
626
- os_sp = "SP2";
627
- break;
628
- case "568837":
629
- // IE 6.0.2900.2180, XP Professional SP2 Korean
630
- ua_version = "6.0";
631
- os_flavor = "XP";
632
- os_sp = "SP2";
633
- break;
634
- case "575730":
635
- // IE 7.0.5730.13, Server 2003 Standard SP2 English
636
- // IE 7.0.5730.13, Server 2003 Standard SP1 English
637
- // IE 7.0.5730.13, XP Professional SP2 English
638
- // Rely on the user agent matching above to determine the OS.
639
- // This will incorrectly identify 2k3 SP1 as SP2
640
- ua_version = "7.0";
641
- os_sp = "SP2";
642
- break;
643
- case "5716599":
644
- // IE 7.0.5730.13, XP Professional SP3 English
645
- case "5718066":
646
- // IE 7.0.5730.13, XP Professional SP3 English
647
- ua_version = "7.0";
648
- os_flavor = "XP";
649
- os_sp = "SP3";
650
- break;
651
- case "576000":
652
- // IE 7.0.6000.16386, Vista Ultimate SP0 English
653
- ua_version = "7.0";
654
- os_flavor = "Vista";
655
- os_sp = "SP0";
656
- break;
657
- case "5822960":
658
- // IE 8.0.6001.18702, XP Professional SP3 Greek
659
- case "5818702":
660
- // IE 8.0.6001.18702, XP Professional SP3 English
661
- ua_version = "8.0";
662
- os_flavor = "XP";
663
- os_sp = "SP3";
664
- break;
665
- case "580":
666
- // IE 8.0.7100.0, Windows 7 English
667
- // IE 8.0.7100.0, Windows 7 64-bit English
668
- case "5816385":
669
- // IE 8.0.7600.16385, Windows 7 English
670
- case "5816475":
671
- case "5816762":
672
- // IE 8.0.7600.16385, Windows 7 English
673
- ua_version = "8.0";
674
- os_flavor = "7";
675
- os_sp = "SP0";
676
- break;
677
- case "9016406":
678
- // IE 9.0.7930.16406, Windows 7 64-bit
679
- ua_version = "9.0";
680
- os_flavor = "7";
681
- os_sp = "SP0";
682
- break;
683
-
684
- //default:
685
- // document.writeln(version);
686
- // break;
687
- }
688
-
689
- if (!ua_version) {
690
- // The ScriptEngine functions failed us, try some object detection
691
- if (document.documentElement && (typeof document.documentElement.style.maxHeight)!="undefined") {
692
- // IE8 detection straight from IEBlog. Thank you Microsoft.
693
- try {
694
- ua_version = "8.0";
695
- document.documentElement.style.display = "table-cell";
696
- } catch(e) {
697
- // This executes in IE7,
698
- // but not IE8, regardless of mode
699
- ua_version = "7.0";
700
- }
701
- } else if (document.compatMode) {
702
- ua_version = "6.0";
703
- } else if (window.createPopup) {
704
- ua_version = "5.5";
705
- } else if (window.attachEvent) {
706
- ua_version = "5.0";
707
- } else {
708
- ua_version = "4.0";
709
- }
710
- switch (navigator.appMinorVersion){
711
- case ";SP2;":
712
- ua_version += ";SP2";
713
- break;
714
- }
715
- }
716
- }
717
-
718
- if (!os_name && navigator.platform == "Win32") { os_name = "#{oses::WINDOWS}"; }
719
-
720
- //--
721
- // Flavor
722
- //--
723
- if (!ua_is_lying) {
724
- version = useragent.toLowerCase();
725
- } else if (navigator.oscpu) {
726
- // Then this is Gecko and we can get at least os_name without the
727
- // useragent
728
- version = navigator.oscpu.toLowerCase();
729
- } else {
730
- // All we have left is the useragent and we know it's lying, so don't bother
731
- version = " ";
732
- }
733
- if (!os_name || 0 == os_name.length) {
734
- if (version.indexOf("windows") != -1) { os_name = "#{oses::WINDOWS}"; }
735
- else if (version.indexOf("mac") != -1) { os_name = "#{oses::MAC_OSX}"; }
736
- else if (version.indexOf("linux") != -1) { os_name = "#{oses::LINUX}"; }
737
- }
738
- if (os_name == "#{oses::WINDOWS}" && (!os_flavor || 0 == os_flavor.length)) {
739
- if (version.indexOf("windows 95") != -1) { os_flavor = "95"; }
740
- else if (version.indexOf("windows nt 4") != -1) { os_flavor = "NT"; }
741
- else if (version.indexOf("win 9x 4.9") != -1) { os_flavor = "ME"; }
742
- else if (version.indexOf("windows 98") != -1) { os_flavor = "98"; }
743
- else if (version.indexOf("windows nt 5.0") != -1) { os_flavor = "2000"; }
744
- else if (version.indexOf("windows nt 5.1") != -1) { os_flavor = "XP"; }
745
- else if (version.indexOf("windows nt 5.2") != -1) { os_flavor = "2003"; }
746
- else if (version.indexOf("windows nt 6.0") != -1) { os_flavor = "Vista"; }
747
- else if (version.indexOf("windows nt 6.1") != -1) { os_flavor = "7"; }
748
- }
749
- if (os_name == "#{oses::LINUX}" && (!os_flavor || 0 == os_flavor.length)) {
750
- if (version.indexOf("gentoo") != -1) { os_flavor = "Gentoo"; }
751
- else if (version.indexOf("ubuntu") != -1) { os_flavor = "Ubuntu"; }
752
- else if (version.indexOf("debian") != -1) { os_flavor = "Debian"; }
753
- else if (version.indexOf("rhel") != -1) { os_flavor = "RHEL"; }
754
- else if (version.indexOf("red hat") != -1) { os_flavor = "RHEL"; }
755
- else if (version.indexOf("centos") != -1) { os_flavor = "CentOS"; }
756
- else if (version.indexOf("fedora") != -1) { os_flavor = "Fedora"; }
757
- else if (version.indexOf("android") != -1) { os_flavor = "Android"; }
758
- }
759
-
760
- //--
761
- // Language
762
- //--
763
- if (navigator.systemLanguage) {
764
- // ie
765
- os_lang = navigator.systemLanguage;
766
- } else if (navigator.language) {
767
- // gecko derivatives, safari, opera
768
- os_lang = navigator.language;
769
- } else {
770
- // some other browser and we don't know how to get the language, so
771
- // just guess english
772
- os_lang = "en";
773
- }
774
-
775
- //--
776
- // Architecture
777
- //--
778
- if (typeof(navigator.cpuClass) != 'undefined') {
779
- // Then this is IE or Opera9+ and we can grab the arch directly
780
- switch (navigator.cpuClass) {
781
- case "x86":
782
- arch = "#{ARCH_X86}";
783
- break;
784
- case "x64":
785
- arch = "#{ARCH_X86_64}";
786
- break;
787
- }
788
- }
789
- if (!arch || 0 == arch.length) {
790
- // We don't have the handy-dandy navagator.cpuClass, so infer from
791
- // platform
792
- version = navigator.platform;
793
- //document.write(version + "\\n");
794
- // IE 8 does a bit of wacky user-agent switching for "Compatibility View";
795
- // 64-bit client on Windows 7, 64-bit:
796
- // Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)
797
- // 32-bit client on Windows 7, 64-bit:
798
- // Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0)
799
- // 32-bit client on Vista, 32-bit, "Compatibility View":
800
- // Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)
801
- //
802
- // Report 32-bit client on 64-bit OS as being 32 because exploits will
803
- // need to know the bittedness of the process, not the OS.
804
- if ( ("Win32" == version) || (version.match(/i.86/)) ) {
805
- arch = "#{ARCH_X86}";
806
- } else if (-1 != version.indexOf('x64') || (-1 != version.indexOf('x86_64'))) {
807
- arch = "#{ARCH_X86_64}";
808
- } else if (-1 != version.indexOf('PPC')) {
809
- arch = "#{ARCH_PPC}";
810
- }
811
- }
812
-
813
- return { os_name:os_name, os_flavor:os_flavor, os_sp:os_sp, os_lang:os_lang, arch:arch, ua_name:ua_name, ua_version:ua_version };
814
- } // function getVersion
815
- function searchVersion(needle, haystack) {
816
- var index = haystack.indexOf(needle);
817
- var found_version;
818
- if (index == -1) { return; }
819
- found_version = haystack.substring(index+needle.length+1);
820
- if (found_version.indexOf(' ') != -1) {
821
- // Strip off any junk at the end such as a CLR declaration
822
- found_version = found_version.substring(0,found_version.indexOf(' '));
823
- }
824
- return found_version;
825
- }
826
-
827
-
828
- /*
829
- * Return -1 if a < b, 0 if a == b, 1 if a > b
830
- */
831
- function ua_ver_cmp(ver_a, ver_b) {
832
- // shortcut the easy case
833
- if (ver_a == ver_b) {
834
- return 0;
835
- }
836
-
837
- a = ver_a.split(".");
838
- b = ver_b.split(".");
839
- for (var i = 0; i < Math.max(a.length, b.length); i++) {
840
- // 3.0 == 3
841
- if (!b[i]) { b[i] = "0"; }
842
- if (!a[i]) { a[i] = "0"; }
843
-
844
- if (a[i] == b[i]) { continue; }
845
-
846
- a_int = parseInt(a[i]);
847
- b_int = parseInt(b[i]);
848
- a_rest = a[i].substr(a_int.toString().length);
849
- b_rest = b[i].substr(b_int.toString().length);
850
- if (a_int < b_int) {
851
- return -1;
852
- } else if (a_int > b_int) {
853
- return 1;
854
- } else { // ==
855
- // Then we need to deal with the stuff after the ints, e.g.:
856
- // "b4pre"
857
- if (a_rest == "b" && b_rest.length == 0) {
858
- return -1;
859
- }
860
- if (b_rest == "b" && a_rest.length == 0) {
861
- return 1;
862
- }
863
- // Just give up and try a lexicographical comparison
864
- if (a_rest < b_rest) {
865
- return -1;
866
- } else if (a_rest > b_rest) {
867
- return 1;
868
- }
869
- }
870
- }
871
- // If we get here, they must be equal
872
- return 0;
873
- }
33
+ @js += ::File.read(::File.join(::File.dirname(__FILE__), "javascriptosdetect.js"))
874
34
 
875
- function ua_ver_lt(a, b) {
876
- if (-1 == ua_ver_cmp(a,b)) { return true; }
877
- return false;
878
- }
879
- function ua_ver_gt(a, b) {
880
- if (1 == ua_ver_cmp(a,b)) { return true; }
881
- return false;
882
- }
883
- function ua_ver_eq(a, b) {
884
- if (0 == ua_ver_cmp(a,b)) { return true; }
885
- return false;
886
- }
887
- ENDJS
888
35
  super @js
889
36
 
890
37
  return @js