escape DN attribute values
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/owncloud/ocis/v2/ocis-pkg/log"
|
||||
@@ -15,6 +16,20 @@ const (
|
||||
caCheckSleep = 2
|
||||
)
|
||||
|
||||
var (
|
||||
dnEscaper = strings.NewReplacer(
|
||||
"\\", "\\\\",
|
||||
",", "\\,",
|
||||
"+", "\\+",
|
||||
`"`, `\\"`,
|
||||
"<", "\\<",
|
||||
">", "\\>",
|
||||
";", "\\;",
|
||||
"=", "\\=",
|
||||
"\000", "\\\000",
|
||||
)
|
||||
)
|
||||
|
||||
func WaitForCA(log log.Logger, insecure bool, caCert string) error {
|
||||
if !insecure && caCert != "" {
|
||||
for i := 0; i < caCheckRetries; i++ {
|
||||
@@ -38,3 +53,20 @@ func WaitForCA(log log.Logger, insecure bool, caCert string) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// EscapeDNAttributeValue escapes special characters in an attribute value as [described in RFC4514](https://datatracker.ietf.org/doc/html/rfc4514).
|
||||
func EscapeDNAttributeValue(v string) string {
|
||||
if v == "" {
|
||||
return v
|
||||
}
|
||||
|
||||
v = dnEscaper.Replace(v)
|
||||
|
||||
if strings.HasSuffix(v, " ") {
|
||||
v = v[:len(v)-1] + "\\ "
|
||||
}
|
||||
if strings.HasPrefix(v, "#") || strings.HasPrefix(v, " ") {
|
||||
v = "\\" + v
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package ldap_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
func TestLdap(t *testing.T) {
|
||||
RegisterFailHandler(Fail)
|
||||
RunSpecs(t, "Ldap Suite")
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package ldap_test
|
||||
|
||||
import (
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
"github.com/owncloud/ocis/v2/ocis-pkg/ldap"
|
||||
)
|
||||
|
||||
var _ = Describe("ldap", func() {
|
||||
DescribeTable("EscapeDNAttributeValue should escape special characters",
|
||||
func(input, expected string) {
|
||||
escaped := ldap.EscapeDNAttributeValue(input)
|
||||
Expect(escaped).To(Equal(expected))
|
||||
},
|
||||
Entry("normal dn", "foobar", "foobar"),
|
||||
Entry("including comma", "foo,bar", "foo\\,bar"),
|
||||
Entry("including equals", "foo=bar", "foo\\=bar"),
|
||||
Entry("beginning with number sign", "#foobar", "\\#foobar"),
|
||||
Entry("beginning with space", " foobar", "\\ foobar"),
|
||||
Entry("only one space", " ", "\\ "),
|
||||
Entry("two spaces", " ", "\\ \\ "),
|
||||
Entry("ending with space", "foobar ", "foobar\\ "),
|
||||
Entry("containing multiple special chars", `f+o>o,b<a;r="\00"`, `f\+o\>o\,b\<a\;r\=\\"\\00\\"`),
|
||||
)
|
||||
})
|
||||
Reference in New Issue
Block a user