From f607d6aa30cc26beb06d378df75595156a168049 Mon Sep 17 00:00:00 2001 From: Johanna Amann Date: Thu, 20 Nov 2014 15:23:14 -0800 Subject: [PATCH 1/2] allow to specify a remote host port to use for the sftp log rotator. --- scripts/base/frameworks/logging/postprocessors/sftp.bro | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/base/frameworks/logging/postprocessors/sftp.bro b/scripts/base/frameworks/logging/postprocessors/sftp.bro index b7f6827026..8c77899864 100644 --- a/scripts/base/frameworks/logging/postprocessors/sftp.bro +++ b/scripts/base/frameworks/logging/postprocessors/sftp.bro @@ -37,6 +37,8 @@ export { user: string; ## The remote host to which to transfer logs. host: string; + ## The port to connect to. Defaults to 22 + host_port: count &default=22; ## The path/directory on the remote host to send logs. path: string; }; @@ -63,8 +65,8 @@ function sftp_postprocessor(info: Log::RotationInfo): bool { local dst = fmt("%s/%s.%s.log", d$path, info$path, strftime(Log::sftp_rotation_date_format, info$open)); - command += fmt("echo put %s %s | sftp -b - %s@%s;", info$fname, dst, - d$user, d$host); + command += fmt("echo put %s %s | sftp -P %d -b - %s@%s;", info$fname, dst, + d$host_port, d$user, d$host); } command += fmt("/bin/rm %s", info$fname); From 57501c60694aac5b82a99be69460d795f6437f4a Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Mon, 6 Apr 2015 12:14:59 -0500 Subject: [PATCH 2/2] BIT-1367: improve coercion of anonymous records in set constructor. Error messages for set constructors that fail the type check may also be more verbose than before and point out specifically the suspect types. --- src/Expr.cc | 33 +++++++++++++++++++ .../Baseline/language.set-type-checking/out | 3 ++ testing/btest/language/set-type-checking.bro | 15 +++++++++ 3 files changed, 51 insertions(+) diff --git a/src/Expr.cc b/src/Expr.cc index d2dcb1585b..049c0981dd 100644 --- a/src/Expr.cc +++ b/src/Expr.cc @@ -2599,6 +2599,39 @@ bool AssignExpr::TypeCheck(attr_list* attrs) if ( ! same_type(op1->Type(), op2->Type()) ) { + if ( bt1 == TYPE_TABLE && bt2 == TYPE_TABLE ) + { + if ( op2->Tag() == EXPR_SET_CONSTRUCTOR ) + { + // Some elements in constructor list must not match, see if + // we can create a new constructor now that the expected type + // of LHS is known and let it do coercions where possible. + SetConstructorExpr* sce = dynamic_cast(op2); + ListExpr* ctor_list = dynamic_cast(sce->Op()); + attr_list* attr_copy = 0; + + if ( sce->Attrs() ) + { + attr_list* a = sce->Attrs()->Attrs(); + attrs = new attr_list; + loop_over_list(*a, i) + attrs->append((*a)[i]); + } + + int errors_before = reporter->Errors(); + op2 = new SetConstructorExpr(ctor_list, attr_copy, op1->Type()); + int errors_after = reporter->Errors(); + + if ( errors_after > errors_before ) + { + ExprError("type clash in assignment"); + return false; + } + + return true; + } + } + ExprError("type clash in assignment"); return false; } diff --git a/testing/btest/Baseline/language.set-type-checking/out b/testing/btest/Baseline/language.set-type-checking/out index d93db19abd..707363e9c8 100644 --- a/testing/btest/Baseline/language.set-type-checking/out +++ b/testing/btest/Baseline/language.set-type-checking/out @@ -18,4 +18,7 @@ error in /Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.set-type-che error in port and /Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.set-type-checking/set-type-checking.bro, line 38: arithmetic mixed with non-arithmetic (port and 1002) error in /Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.set-type-checking/set-type-checking.bro, line 38 and port: type mismatch (1002 and port) error in /Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.set-type-checking/set-type-checking.bro, line 38: inconsistent type in set constructor (set(1002)) +error in port and /Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.set-type-checking/set-type-checking.bro, line 44: arithmetic mixed with non-arithmetic (port and 1003) +error in /Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.set-type-checking/set-type-checking.bro, line 44 and port: type mismatch (1003 and port) +error in /Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.set-type-checking/set-type-checking.bro, line 44: inconsistent type in set constructor (set(1003)) error in /Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.set-type-checking/set-type-checking.bro, line 44: type clash in assignment (lea = set(1003)) diff --git a/testing/btest/language/set-type-checking.bro b/testing/btest/language/set-type-checking.bro index bf774fb9f9..3c82a29730 100644 --- a/testing/btest/language/set-type-checking.bro +++ b/testing/btest/language/set-type-checking.bro @@ -43,3 +43,18 @@ event bro_init() { local lea: MySet = set(1003); # type clash } + +type MyRecord: record { + user: string; + host: string; + host_port: count &default=22; + path: string; +}; + +global set_of_records: set[MyRecord]; + +event bro_init() + { + # Set ctor w/ anonymous record ctor should coerce. + set_of_records = set([$user="testuser", $host="testhost", $path="testpath"]); + }