From 9b715a6e9ef9098ac1d182b30564331266893cd6 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Mon, 27 Jul 2015 17:39:31 -0700 Subject: [PATCH] If using MySQL check for parseTime=true in DSN, if not there add it --- sa/storage-authority.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/sa/storage-authority.go b/sa/storage-authority.go index 6d2013080..2e2492def 100644 --- a/sa/storage-authority.go +++ b/sa/storage-authority.go @@ -11,6 +11,7 @@ import ( "encoding/json" "errors" "fmt" + "net/url" "sort" "strings" "time" @@ -49,22 +50,39 @@ type authzModel struct { } // NewSQLStorageAuthority provides persistence using a SQL backend for Boulder. -func NewSQLStorageAuthority(driver string, dbConnect string) (ssa *SQLStorageAuthority, err error) { +func NewSQLStorageAuthority(driver string, dbConnect string) (*SQLStorageAuthority, error) { logger := blog.GetAuditLogger() logger.Notice("Storage Authority Starting") - dbMap, err := NewDbMap(driver, dbConnect) - if err != nil { - return + if driver == "mysql" { + // Check the parseTime=true DSN is present + dbURI, err := url.Parse(dbConnect) + if err != nil { + return nil, err + } + dsnVals, err := url.ParseQuery(dbURI.RawQuery) + if err != nil { + return nil, err + } + if k := dsnVals.Get("parseTime"); k != "true" { + dsnVals.Set("parseTime", "true") + dbURI.RawQuery = dsnVals.Encode() + } + dbConnect = dbURI.String() } - ssa = &SQLStorageAuthority{ + dbMap, err := NewDbMap(driver, dbConnect) + if err != nil { + return nil, err + } + + ssa := &SQLStorageAuthority{ dbMap: dbMap, log: logger, bucket: make(map[string]interface{}), } - return + return ssa, nil } // SetSQLDebug enables/disables GORP SQL-level Debugging