diff --git a/pkg/ldif_parser_test.go b/pkg/ldif_parser_test.go index 16db26c..9118834 100644 --- a/pkg/ldif_parser_test.go +++ b/pkg/ldif_parser_test.go @@ -4,6 +4,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestBuildEntities(t *testing.T) { @@ -30,3 +31,15 @@ func TestBuildEntities(t *testing.T) { assert.Equal(t, 3, counter.c) }) } + +func TestBuildEntityWithEscapeChar(t *testing.T) { + rq := require.New(t) + var parser = NewLdifParser("../testdata/test_user_escape_char.ldif") + + user, err := parser.BuildEntity("sAMAccountName", "myuser") + rq.NoError(err) + rq.False(user.IsEmpty()) + + _, worked := user.GetDN() + rq.True(worked) +} diff --git a/pkg/title_builder.go b/pkg/title_builder.go index b6014c7..b3a47bf 100644 --- a/pkg/title_builder.go +++ b/pkg/title_builder.go @@ -36,13 +36,25 @@ func buildTitleObj(objParts []string) (string, error) { return strings.Join(objComponents, ", "), nil } +func splitDN(dnStr string) []string { + escSeq := "++" + dnClean := strings.ReplaceAll(dnStr, `\,`, escSeq) + dnParts := strings.Split(dnClean, ",") + + for i := range dnParts { + dnParts[i] = strings.ReplaceAll(dnParts[i], escSeq, `\,`) + } + + return dnParts +} + func BuildTitleLine(entity Entity) (string, error) { dn, dnFound := entity.GetDN() if !dnFound { return "", errors.New("Unable to find DN in entity") } - dnParts := strings.Split(dn.Value.GetSingleValue(), ",") + dnParts := splitDN(dn.Value.GetSingleValue()) domainParts := []string{} objParts := []string{} diff --git a/pkg/title_builder_test.go b/pkg/title_builder_test.go new file mode 100644 index 0000000..79983db --- /dev/null +++ b/pkg/title_builder_test.go @@ -0,0 +1,19 @@ +package ldsview + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestBuildTitles(t *testing.T) { + rq := require.New(t) + var parser = NewLdifParser("../testdata/test_user_escape_char.ldif") + + user, err := parser.BuildEntity("sAMAccountName", "myuser") + rq.NoError(err) + + title, err := BuildTitleLine(user) + rq.NoError(err) + rq.NotEmpty(title) +}