Skip to content

Commit 74d3911

Browse files
committed
Merge remote-tracking branch 'couchbase/trinity'
Change-Id: I8c84ac1d5c23b68bd1523dcbd46a0d3b29e026bc
2 parents 2d3456e + b81350f commit 74d3911

File tree

7 files changed

+67
-23
lines changed

7 files changed

+67
-23
lines changed

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,8 +546,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
546546
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
547547
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
548548
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
549-
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
550-
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
549+
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
550+
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
551551
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
552552
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
553553
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=

server/completed_requests.go

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -675,17 +675,7 @@ func LogRequest(request_time, service_time, transactionElapsedTime time.Duration
675675
}
676676
}
677677

678-
// MB-63043
679-
prependDollar := func(namedArgs map[string]value.Value) map[string]value.Value {
680-
prependedNamedArgs := make(map[string]value.Value, len(namedArgs))
681-
682-
for k, v := range namedArgs {
683-
prependedNamedArgs["$"+k] = v
684-
}
685-
686-
return prependedNamedArgs
687-
}
688-
re.NamedArgs = prependDollar(request.RedactedNamedArgs())
678+
re.NamedArgs = request.FormattedRedactedNamedArgs()
689679
re.PositionalArgs = request.RedactedPositionalArgs()
690680

691681
re.Users = datastore.CredsString(request.Credentials())

server/http/service_request.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ func newHttpRequest(rv *httpRequest, resp http.ResponseWriter, req *http.Request
251251
data["statement"] = rv.EventStatement()
252252
data["natural"] = rv.Natural()
253253
data["query_context"] = rv.QueryContext()
254-
data["named_args"] = httpArgs.getNamedArgs()
254+
data["named_args"] = httpArgs.getFormattedNamedArgs()
255255
data["client_context_id"] = rv.ClientContextId()
256256
// only include fields not already processed in args
257257
a := make(map[string]interface{})
@@ -1333,6 +1333,7 @@ type httpRequestArgs interface {
13331333
getTristateVal(field string, v interface{}) (value.Tristate, errors.Error)
13341334
getPreparedName(field string, v interface{}) (string, errors.Error)
13351335
getNamedArgs() map[string]value.Value
1336+
getFormattedNamedArgs() map[string]value.Value
13361337
getPositionalArgs(parm string, val interface{}) (value.Values, errors.Error)
13371338
getCredentials() (*auth.Credentials, errors.Error)
13381339
getScanVector() (timestamp.Vector, errors.Error)
@@ -1446,6 +1447,18 @@ func (this *urlArgs) getNamedArgs() map[string]value.Value {
14461447
return this.named
14471448
}
14481449

1450+
func (this *urlArgs) getFormattedNamedArgs() map[string]value.Value {
1451+
fnamedArgs := make(map[string]value.Value, len(this.named))
1452+
for k, v := range this.named {
1453+
if server.IsSpecialNamedParam(k) {
1454+
fnamedArgs[k] = server.REDACTED_VALUE
1455+
} else {
1456+
fnamedArgs[k] = v
1457+
}
1458+
}
1459+
return fnamedArgs
1460+
}
1461+
14491462
func getJsonDecoder(r io.Reader) (*json.Decoder, errors.Error) {
14501463
if r == nil {
14511464
return nil, errors.NewServiceErrorDecodeNil()
@@ -1838,6 +1851,18 @@ func (this *jsonArgs) getNamedArgs() map[string]value.Value {
18381851
return this.named
18391852
}
18401853

1854+
func (this *jsonArgs) getFormattedNamedArgs() map[string]value.Value {
1855+
fnamedArgs := make(map[string]value.Value, len(this.named))
1856+
for k, v := range this.named {
1857+
if server.IsSpecialNamedParam(k) {
1858+
fnamedArgs[k] = server.REDACTED_VALUE
1859+
} else {
1860+
fnamedArgs[k] = v
1861+
}
1862+
}
1863+
return fnamedArgs
1864+
}
1865+
18411866
func (this *jsonArgs) getPositionalArgs(parm string, val interface{}) (value.Values, errors.Error) {
18421867
var positionalArgs value.Values
18431868

server/http/service_response.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,7 +1039,7 @@ func (this *httpRequest) writeControls(controls bool, prefix, indent string) boo
10391039
return true
10401040
}
10411041

1042-
namedArgs := this.NamedArgs()
1042+
namedArgs := this.FormattedRedactedNamedArgs()
10431043
positionalArgs := this.PositionalArgs()
10441044

10451045
if prefix != "" {
@@ -1165,7 +1165,7 @@ func (this *httpRequest) writeControlsXML(controls bool, prefix string, indent s
11651165
return true
11661166
}
11671167

1168-
namedArgs := this.NamedArgs()
1168+
namedArgs := this.FormattedRedactedNamedArgs()
11691169
positionalArgs := this.PositionalArgs()
11701170

11711171
var newPrefix string

server/request.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ type Request interface {
234234

235235
Sensitive() bool
236236
RedactedStatement() string
237-
RedactedNamedArgs() map[string]value.Value
237+
FormattedRedactedNamedArgs() map[string]value.Value
238238
RedactedPositionalArgs() value.Values
239239

240240
SessionMemory() uint64
@@ -628,16 +628,33 @@ func (this *BaseRequest) IsPrepare() bool {
628628
return this.isPrepare
629629
}
630630

631+
var REDACTED_VALUE = value.NewValue(map[string]interface{}{"redacted": true})
632+
633+
func IsSpecialNamedParam(param string) bool {
634+
return len(param) > 2 && param[0] == '_' && param[len(param)-1] == '_'
635+
}
636+
631637
func (this *BaseRequest) NamedArgs() map[string]value.Value {
632638
return this.namedArgs
633639
}
634640

635641
var _REDACTED_VALUE = value.NewValue(map[string]interface{}{"redacted": true})
636642

637-
func (this *BaseRequest) RedactedNamedArgs() map[string]value.Value {
643+
func (this *BaseRequest) FormattedRedactedNamedArgs() map[string]value.Value {
644+
638645
if !this.Sensitive() {
639-
return this.namedArgs
646+
prependedNamedArgs := make(map[string]value.Value, len(this.namedArgs))
647+
648+
for k, v := range this.namedArgs {
649+
if IsSpecialNamedParam(k) {
650+
prependedNamedArgs["$"+k] = REDACTED_VALUE
651+
} else {
652+
prependedNamedArgs["$"+k] = v
653+
}
654+
}
655+
return prependedNamedArgs
640656
}
657+
641658
rv := make(map[string]value.Value, len(this.namedArgs))
642659
for k, _ := range this.namedArgs {
643660
rv[k] = _REDACTED_VALUE
@@ -1581,7 +1598,7 @@ func (this *BaseRequest) EventUsers() []string {
15811598

15821599
// For audit.Auditable interface.
15831600
func (this *BaseRequest) EventNamedArgs() map[string]interface{} {
1584-
argsMap := this.RedactedNamedArgs()
1601+
argsMap := this.FormattedRedactedNamedArgs()
15851602
ret := make(map[string]interface{}, len(argsMap))
15861603
for name, argValue := range argsMap {
15871604
ret[name] = argValue.Actual()
@@ -1840,7 +1857,7 @@ func (this *BaseRequest) Format(durStyle util.DurationStyle, controls bool, prof
18401857
}
18411858

18421859
if controls {
1843-
na := this.RedactedNamedArgs()
1860+
na := this.FormattedRedactedNamedArgs()
18441861
if na != nil {
18451862
item["namedArgs"] = util.InterfaceRedacted(na, redact)
18461863
}

shell/cbq/command/set.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,15 @@ func (this *Set) ExecCommand(args []string) (errors.ErrorCode, string) {
123123
for i := range names {
124124
name := names[i]
125125
value := NamedParam[name]
126-
werr = printSET(name, fmt.Sprintf("%v", *value))
126+
if len(name) > 2 && name[0] == '_' && name[len(name)-1] == '_' {
127+
vals := make([]string, len(*value))
128+
for i := range vals {
129+
vals[i] = "***"
130+
}
131+
werr = printSET(name, fmt.Sprintf("%v", vals))
132+
} else {
133+
werr = printSET(name, fmt.Sprintf("%v", *value))
134+
}
127135
if werr != nil {
128136
return processOutputError(werr)
129137
}

shell/cbq/history.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package main
1111
import (
1212
"bufio"
1313
"os"
14+
"regexp"
1415
"strings"
1516

1617
"github.com/couchbase/query/errors"
@@ -35,8 +36,11 @@ func LoadHistory(liner *liner.State, dir string) (errors.ErrorCode, string) {
3536
return 0, ""
3637
}
3738

39+
var redactSpecialNamedParamRegex = regexp.MustCompile(`(\s+-[\$@]_\w+_\s+).*?;`)
40+
3841
func UpdateHistory(liner *liner.State, dir, line string) (errors.ErrorCode, string) {
39-
liner.AppendHistory(line)
42+
rline := redactSpecialNamedParamRegex.ReplaceAllString(line, "$1***;")
43+
liner.AppendHistory(rline)
4044
if dir != "" {
4145
path := command.GetPath(dir, command.HISTFILE)
4246
err_code, err_str := WriteHistoryToFile(liner, path)

0 commit comments

Comments
 (0)