diff --git a/scripts/base/frameworks/software/main.bro b/scripts/base/frameworks/software/main.bro index 7471076335..fefc465e1a 100644 --- a/scripts/base/frameworks/software/main.bro +++ b/scripts/base/frameworks/software/main.bro @@ -29,6 +29,8 @@ export { minor: count &optional; ## Minor subversion number minor2: count &optional; + ## Minor updates number + minor3: count &optional; ## Additional version string (e.g. "beta42") addl: string &optional; } &log; @@ -146,10 +148,10 @@ function parse(unparsed_version: string): Description if ( /^[\/\-\._v\(]/ in sv ) sv = strip(sub(version_parts[2], /^\(?[\/\-\._v\(]/, "")); local version_numbers = split_n(sv, /[\-\._,\[\(\{ ]/, F, 3); - if ( 4 in version_numbers && version_numbers[4] != "" ) - v$addl = strip(version_numbers[4]); + if ( 5 in version_numbers && version_numbers[5] != "" ) + v$addl = strip(version_numbers[5]); else if ( 3 in version_parts && version_parts[3] != "" && - version_parts[3] != ")" ) + version_parts[3] != ")" ) { if ( /^[[:blank:]]*\([a-zA-Z0-9\-\._[:blank:]]*\)/ in version_parts[3] ) { @@ -177,7 +179,9 @@ function parse(unparsed_version: string): Description } } - + + if ( 4 in version_numbers && version_numbers[4] != "" ) + v$minor3 = extract_count(version_numbers[4]); if ( 3 in version_numbers && version_numbers[3] != "" ) v$minor2 = extract_count(version_numbers[3]); if ( 2 in version_numbers && version_numbers[2] != "" ) @@ -332,8 +336,25 @@ function cmp_versions(v1: Version, v2: Version): int return v1?$minor2 ? 1 : -1; } + if ( v1?$minor3 && v2?$minor3 ) + { + if ( v1$minor3 < v2$minor3 ) + return -1; + if ( v1$minor3 > v2$minor3 ) + return 1; + } + else + { + if ( !v1?$minor3 && !v2?$minor3 ) + { } + else + return v1?$minor3 ? 1 : -1; + } + if ( v1?$addl && v2?$addl ) + { return strcmp(v1$addl, v2$addl); + } else { if ( !v1?$addl && !v2?$addl ) @@ -341,6 +362,9 @@ function cmp_versions(v1: Version, v2: Version): int else return v1?$addl ? 1 : -1; } + + # A catcher return that should never be reached...hopefully + return 0; } function software_endpoint_name(id: conn_id, host: addr): string @@ -351,10 +375,11 @@ function software_endpoint_name(id: conn_id, host: addr): string # Convert a version into a string "a.b.c-x". function software_fmt_version(v: Version): string { - return fmt("%d.%d.%d%s", - v?$major ? v$major : 0, - v?$minor ? v$minor : 0, - v?$minor2 ? v$minor2 : 0, + return fmt("%s%s%s%s%s", + v?$major ? fmt("%d", v$major) : "0", + v?$minor ? fmt(".%d", v$minor) : "", + v?$minor2 ? fmt(".%d", v$minor2) : "", + v?$minor3 ? fmt(".%d", v$minor3) : "", v?$addl ? fmt("-%s", v$addl) : ""); } diff --git a/testing/btest/scripts/base/frameworks/software/version-parsing.bro b/testing/btest/scripts/base/frameworks/software/version-parsing.bro index 03327a25cd..2b406f22b8 100644 --- a/testing/btest/scripts/base/frameworks/software/version-parsing.bro +++ b/testing/btest/scripts/base/frameworks/software/version-parsing.bro @@ -21,7 +21,7 @@ global matched_software: table[string] of Software::Description = { ["Java1.2.2-JDeveloper"] = [$name="Java", $version=[$major=1,$minor=2,$minor2=2,$addl="JDeveloper"], $unparsed_version=""], ["Java/1.6.0_13"] = - [$name="Java", $version=[$major=1,$minor=6,$minor2=0,$addl="13"], $unparsed_version=""], + [$name="Java", $version=[$major=1,$minor=6,$minor2=0,$minor3=13], $unparsed_version=""], ["Python-urllib/3.1"] = [$name="Python-urllib", $version=[$major=3,$minor=1], $unparsed_version=""], ["libwww-perl/5.820"] = @@ -39,9 +39,9 @@ global matched_software: table[string] of Software::Description = { ["The Bat! (v2.00.9) Personal"] = [$name="The Bat!", $version=[$major=2,$minor=0,$minor2=9,$addl="Personal"], $unparsed_version=""], ["Flash/10,2,153,1"] = - [$name="Flash", $version=[$major=10,$minor=2,$minor2=153,$addl="1"], $unparsed_version=""], + [$name="Flash", $version=[$major=10,$minor=2,$minor2=153,$minor3=1], $unparsed_version=""], ["mt2/1.2.3.967 Oct 13 2010-13:40:24 ord-pixel-x2 pid 0x35a3 13731"] = - [$name="mt2", $version=[$major=1,$minor=2,$minor2=3,$addl="967"], $unparsed_version=""], + [$name="mt2", $version=[$major=1,$minor=2,$minor2=3,$minor3=967,$addl="Oct"], $unparsed_version=""], ["CacheFlyServe v26b"] = [$name="CacheFlyServe", $version=[$major=26,$addl="b"], $unparsed_version=""], ["Apache/2.0.46 (Win32) mod_ssl/2.0.46 OpenSSL/0.9.7b mod_jk2/2.0.4"] = @@ -54,7 +54,7 @@ global matched_software: table[string] of Software::Description = { ["Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5"] = [$name="Safari", $version=[$major=5,$minor=0,$minor2=2,$addl="Mobile"], $unparsed_version=""], ["Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16"] = - [$name="Chrome", $version=[$major=10,$minor=0,$minor2=648,$addl="205"], $unparsed_version=""], + [$name="Chrome", $version=[$major=10,$minor=0,$minor2=648,$minor3=205], $unparsed_version=""], ["Opera/9.80 (Windows NT 6.1; U; sv) Presto/2.7.62 Version/11.01"] = [$name="Opera", $version=[$major=11,$minor=1], $unparsed_version=""], ["Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.11) Gecko/20101013 Lightning/1.0b2 Thunderbird/3.1.5"] = @@ -62,7 +62,7 @@ global matched_software: table[string] of Software::Description = { ["iTunes/9.0 (Macintosh; Intel Mac OS X 10.5.8) AppleWebKit/531.9"] = [$name="iTunes", $version=[$major=9,$minor=0,$addl="Macintosh"], $unparsed_version=""], ["Java1.3.1_04"] = - [$name="Java", $version=[$major=1,$minor=3,$minor2=1,$addl="04"], $unparsed_version=""], + [$name="Java", $version=[$major=1,$minor=3,$minor2=1,$minor3=4], $unparsed_version=""], ["Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"] = [$name="Safari", $version=[$major=4,$minor=0,$addl="Mobile"], $unparsed_version=""], ["Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27"] =