Skip to content

Commit b0d08ca

Browse files
committed
cleanup config param handling
1 parent 261f309 commit b0d08ca

File tree

5 files changed

+30
-24
lines changed

5 files changed

+30
-24
lines changed

connection.go

+11-13
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,17 @@ type mysqlConn struct {
3535
}
3636

3737
type config struct {
38-
user string
39-
passwd string
40-
net string
41-
addr string
42-
dbname string
43-
params map[string]string
44-
loc *time.Location
45-
timeout time.Duration
46-
tls *tls.Config
38+
user string
39+
passwd string
40+
net string
41+
addr string
42+
dbname string
43+
params map[string]string
44+
loc *time.Location
45+
timeout time.Duration
46+
tls *tls.Config
47+
allowAllFiles bool
48+
clientFoundRows bool
4749
}
4850

4951
// Handles parameters set in DSN
@@ -64,10 +66,6 @@ func (mc *mysqlConn) handleParams() (err error) {
6466
return
6567
}
6668

67-
// handled elsewhere
68-
case "allowAllFiles", "clientFoundRows":
69-
continue
70-
7169
// time.Time parsing
7270
case "parseTime":
7371
mc.parseTime = readBool(val)

infile.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (mc *mysqlConn) handleInFileRequest(name string) (err error) {
7474
}
7575
} else { // File
7676
name = strings.Trim(name, `"`)
77-
if fileRegister[name] || mc.cfg.params[`allowAllFiles`] == `true` {
77+
if mc.cfg.allowAllFiles || fileRegister[name] {
7878
rdr, err = os.Open(name)
7979
} else {
8080
err = fmt.Errorf("Local File '%s' is not registered. Use the DSN parameter 'allowAllFiles=true' to allow all files", name)

packets.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ func (mc *mysqlConn) writeAuthPacket() error {
215215
clientLocalFiles |
216216
mc.flags&clientLongFlag
217217

218-
if _, ok := mc.cfg.params["clientFoundRows"]; ok {
218+
if mc.cfg.clientFoundRows {
219219
clientFlags |= clientFoundRows
220220
}
221221

utils.go

+8
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@ func parseDSN(dsn string) (cfg *config, err error) {
124124
// cfg params
125125
switch value := param[1]; param[0] {
126126

127+
// Disable INFILE whitelist / enable all files
128+
case "allowAllFiles":
129+
cfg.allowAllFiles = readBool(value)
130+
131+
// Switch "rowsAffected" mode
132+
case "clientFoundRows":
133+
cfg.clientFoundRows = readBool(value)
134+
127135
// Time Location
128136
case "loc":
129137
cfg.loc, err = time.LoadLocation(value)

utils_test.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ func TestDSNParser(t *testing.T) {
2121
out string
2222
loc *time.Location
2323
}{
24-
{"username:password@protocol(address)/dbname?param=value", "&{user:username passwd:password net:protocol addr:address dbname:dbname params:map[param:value] loc:%p timeout:0 tls:<nil>}", time.UTC},
25-
{"user@unix(/path/to/socket)/dbname?charset=utf8", "&{user:user passwd: net:unix addr:/path/to/socket dbname:dbname params:map[charset:utf8] loc:%p timeout:0 tls:<nil>}", time.UTC},
26-
{"user:password@tcp(localhost:5555)/dbname?charset=utf8&tls=true", "&{user:user passwd:password net:tcp addr:localhost:5555 dbname:dbname params:map[charset:utf8] loc:%p timeout:0 tls:<nil>}", time.UTC},
27-
{"user:password@tcp(localhost:5555)/dbname?charset=utf8mb4,utf8&tls=skip-verify", "&{user:user passwd:password net:tcp addr:localhost:5555 dbname:dbname params:map[charset:utf8mb4,utf8] loc:%p timeout:0 tls:<nil>}", time.UTC},
28-
{"user:password@/dbname?loc=UTC&timeout=30s", "&{user:user passwd:password net:tcp addr:127.0.0.1:3306 dbname:dbname params:map[] loc:%p timeout:30000000000 tls:<nil>}", time.UTC},
29-
{"user:p@ss(word)@tcp([de:ad:be:ef::ca:fe]:80)/dbname?loc=Local", "&{user:user passwd:p@ss(word) net:tcp addr:[de:ad:be:ef::ca:fe]:80 dbname:dbname params:map[] loc:%p timeout:0 tls:<nil>}", time.Local},
30-
{"/dbname", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname:dbname params:map[] loc:%p timeout:0 tls:<nil>}", time.UTC},
31-
{"/", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p timeout:0 tls:<nil>}", time.UTC},
32-
{"user:p@/ssword@/", "&{user:user passwd:p@/ssword net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p timeout:0 tls:<nil>}", time.UTC},
24+
{"username:password@protocol(address)/dbname?param=value", "&{user:username passwd:password net:protocol addr:address dbname:dbname params:map[param:value] loc:%p timeout:0 tls:<nil> allowAllFiles:false clientFoundRows:false}", time.UTC},
25+
{"user@unix(/path/to/socket)/dbname?charset=utf8", "&{user:user passwd: net:unix addr:/path/to/socket dbname:dbname params:map[charset:utf8] loc:%p timeout:0 tls:<nil> allowAllFiles:false clientFoundRows:false}", time.UTC},
26+
{"user:password@tcp(localhost:5555)/dbname?charset=utf8&tls=true", "&{user:user passwd:password net:tcp addr:localhost:5555 dbname:dbname params:map[charset:utf8] loc:%p timeout:0 tls:<nil> allowAllFiles:false clientFoundRows:false}", time.UTC},
27+
{"user:password@tcp(localhost:5555)/dbname?charset=utf8mb4,utf8&tls=skip-verify", "&{user:user passwd:password net:tcp addr:localhost:5555 dbname:dbname params:map[charset:utf8mb4,utf8] loc:%p timeout:0 tls:<nil> allowAllFiles:false clientFoundRows:false}", time.UTC},
28+
{"user:password@/dbname?loc=UTC&timeout=30s&allowAllFiles=1&clientFoundRows=true", "&{user:user passwd:password net:tcp addr:127.0.0.1:3306 dbname:dbname params:map[] loc:%p timeout:30000000000 tls:<nil> allowAllFiles:true clientFoundRows:true}", time.UTC},
29+
{"user:p@ss(word)@tcp([de:ad:be:ef::ca:fe]:80)/dbname?loc=Local", "&{user:user passwd:p@ss(word) net:tcp addr:[de:ad:be:ef::ca:fe]:80 dbname:dbname params:map[] loc:%p timeout:0 tls:<nil> allowAllFiles:false clientFoundRows:false}", time.Local},
30+
{"/dbname", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname:dbname params:map[] loc:%p timeout:0 tls:<nil> allowAllFiles:false clientFoundRows:false}", time.UTC},
31+
{"/", "&{user: passwd: net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p timeout:0 tls:<nil> allowAllFiles:false clientFoundRows:false}", time.UTC},
32+
{"user:p@/ssword@/", "&{user:user passwd:p@/ssword net:tcp addr:127.0.0.1:3306 dbname: params:map[] loc:%p timeout:0 tls:<nil> allowAllFiles:false clientFoundRows:false}", time.UTC},
3333
}
3434

3535
var cfg *config

0 commit comments

Comments
 (0)