1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Syslog Driver: RFC 5425 Framing should be used only when protocol is TCP+TLS

Signed-off-by: Ferran Rodenas <frodenas@gmail.com>
This commit is contained in:
Ferran Rodenas 2016-06-29 08:44:00 -07:00
parent e904f58e19
commit 4039bfc917
2 changed files with 28 additions and 10 deletions

View file

@ -105,7 +105,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
return nil, err return nil, err
} }
syslogFormatter, syslogFramer, err := parseLogFormat(ctx.Config["syslog-format"]) syslogFormatter, syslogFramer, err := parseLogFormat(ctx.Config["syslog-format"], proto)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -205,7 +205,7 @@ func ValidateLogOpt(cfg map[string]string) error {
if _, err := parseFacility(cfg["syslog-facility"]); err != nil { if _, err := parseFacility(cfg["syslog-facility"]); err != nil {
return err return err
} }
if _, _, err := parseLogFormat(cfg["syslog-format"]); err != nil { if _, _, err := parseLogFormat(cfg["syslog-format"], ""); err != nil {
return err return err
} }
return nil return nil
@ -241,16 +241,22 @@ func parseTLSConfig(cfg map[string]string) (*tls.Config, error) {
return tlsconfig.Client(opts) return tlsconfig.Client(opts)
} }
func parseLogFormat(logFormat string) (syslog.Formatter, syslog.Framer, error) { func parseLogFormat(logFormat, proto string) (syslog.Formatter, syslog.Framer, error) {
switch logFormat { switch logFormat {
case "": case "":
return syslog.UnixFormatter, syslog.DefaultFramer, nil return syslog.UnixFormatter, syslog.DefaultFramer, nil
case "rfc3164": case "rfc3164":
return syslog.RFC3164Formatter, syslog.DefaultFramer, nil return syslog.RFC3164Formatter, syslog.DefaultFramer, nil
case "rfc5424": case "rfc5424":
return rfc5424formatterWithAppNameAsTag, syslog.RFC5425MessageLengthFramer, nil if proto == secureProto {
return rfc5424formatterWithAppNameAsTag, syslog.RFC5425MessageLengthFramer, nil
}
return rfc5424formatterWithAppNameAsTag, syslog.DefaultFramer, nil
case "rfc5424micro": case "rfc5424micro":
return rfc5424microformatterWithAppNameAsTag, syslog.RFC5425MessageLengthFramer, nil if proto == secureProto {
return rfc5424microformatterWithAppNameAsTag, syslog.RFC5425MessageLengthFramer, nil
}
return rfc5424microformatterWithAppNameAsTag, syslog.DefaultFramer, nil
default: default:
return nil, nil, errors.New("Invalid syslog format") return nil, nil, errors.New("Invalid syslog format")
} }

View file

@ -13,31 +13,43 @@ func functionMatches(expectedFun interface{}, actualFun interface{}) bool {
} }
func TestParseLogFormat(t *testing.T) { func TestParseLogFormat(t *testing.T) {
formatter, framer, err := parseLogFormat("rfc5424") formatter, framer, err := parseLogFormat("rfc5424", "udp")
if err != nil || !functionMatches(rfc5424formatterWithAppNameAsTag, formatter) ||
!functionMatches(syslog.DefaultFramer, framer) {
t.Fatal("Failed to parse rfc5424 format", err, formatter, framer)
}
formatter, framer, err = parseLogFormat("rfc5424", "tcp+tls")
if err != nil || !functionMatches(rfc5424formatterWithAppNameAsTag, formatter) || if err != nil || !functionMatches(rfc5424formatterWithAppNameAsTag, formatter) ||
!functionMatches(syslog.RFC5425MessageLengthFramer, framer) { !functionMatches(syslog.RFC5425MessageLengthFramer, framer) {
t.Fatal("Failed to parse rfc5424 format", err, formatter, framer) t.Fatal("Failed to parse rfc5424 format", err, formatter, framer)
} }
formatter, framer, err = parseLogFormat("rfc5424micro") formatter, framer, err = parseLogFormat("rfc5424micro", "udp")
if err != nil || !functionMatches(rfc5424microformatterWithAppNameAsTag, formatter) ||
!functionMatches(syslog.DefaultFramer, framer) {
t.Fatal("Failed to parse rfc5424 (microsecond) format", err, formatter, framer)
}
formatter, framer, err = parseLogFormat("rfc5424micro", "tcp+tls")
if err != nil || !functionMatches(rfc5424microformatterWithAppNameAsTag, formatter) || if err != nil || !functionMatches(rfc5424microformatterWithAppNameAsTag, formatter) ||
!functionMatches(syslog.RFC5425MessageLengthFramer, framer) { !functionMatches(syslog.RFC5425MessageLengthFramer, framer) {
t.Fatal("Failed to parse rfc5424 (microsecond) format", err, formatter, framer) t.Fatal("Failed to parse rfc5424 (microsecond) format", err, formatter, framer)
} }
formatter, framer, err = parseLogFormat("rfc3164") formatter, framer, err = parseLogFormat("rfc3164", "")
if err != nil || !functionMatches(syslog.RFC3164Formatter, formatter) || if err != nil || !functionMatches(syslog.RFC3164Formatter, formatter) ||
!functionMatches(syslog.DefaultFramer, framer) { !functionMatches(syslog.DefaultFramer, framer) {
t.Fatal("Failed to parse rfc3164 format", err, formatter, framer) t.Fatal("Failed to parse rfc3164 format", err, formatter, framer)
} }
formatter, framer, err = parseLogFormat("") formatter, framer, err = parseLogFormat("", "")
if err != nil || !functionMatches(syslog.UnixFormatter, formatter) || if err != nil || !functionMatches(syslog.UnixFormatter, formatter) ||
!functionMatches(syslog.DefaultFramer, framer) { !functionMatches(syslog.DefaultFramer, framer) {
t.Fatal("Failed to parse empty format", err, formatter, framer) t.Fatal("Failed to parse empty format", err, formatter, framer)
} }
formatter, framer, err = parseLogFormat("invalid") formatter, framer, err = parseLogFormat("invalid", "")
if err == nil { if err == nil {
t.Fatal("Failed to parse invalid format", err, formatter, framer) t.Fatal("Failed to parse invalid format", err, formatter, framer)
} }