From 9812c10d1dabf59ca00dd64410dbed290012ec72 Mon Sep 17 00:00:00 2001 From: Marcos Oviedo Date: Thu, 14 Dec 2023 15:05:00 -0300 Subject: [PATCH] Fixing Syncml cmd nested command data (#15632) This relates to #15107 # Checklist for submitter If some of the following don't apply, delete the relevant line. - [X] Changes file added for user-visible changes in `changes/` or `orbit/changes/`. - [X] Manual QA for all new/changed functionality --- changes/issue-15107-windows-automatic-enrollment | 1 + server/fleet/microsoft_mdm.go | 15 ++++++++++----- server/mdm/microsoft/profile_verifier_test.go | 3 +-- server/service/integration_mdm_test.go | 4 ++-- server/service/microsoft_mdm.go | 9 ++++++++- 5 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 changes/issue-15107-windows-automatic-enrollment diff --git a/changes/issue-15107-windows-automatic-enrollment b/changes/issue-15107-windows-automatic-enrollment new file mode 100644 index 0000000000..5ed4430042 --- /dev/null +++ b/changes/issue-15107-windows-automatic-enrollment @@ -0,0 +1 @@ +* Syncml cmd data now supports raw data diff --git a/server/fleet/microsoft_mdm.go b/server/fleet/microsoft_mdm.go index c910f37911..1ad124cf42 100644 --- a/server/fleet/microsoft_mdm.go +++ b/server/fleet/microsoft_mdm.go @@ -1001,10 +1001,15 @@ func (cmd SyncMLCmd) DataType() SyncMLDataType { } type CmdItem struct { - Source *string `xml:"Source>LocURI,omitempty"` - Target *string `xml:"Target>LocURI,omitempty"` - Meta *Meta `xml:"Meta,omitempty"` - Data *string `xml:"Data"` + Source *string `xml:"Source>LocURI,omitempty"` + Target *string `xml:"Target>LocURI,omitempty"` + Meta *Meta `xml:"Meta,omitempty"` + Data *RawXmlData `xml:"Data"` +} + +type RawXmlData struct { + Attrs []xml.Attr `xml:",any,attr"` + Content string `xml:",innerxml"` } type Meta struct { @@ -1334,7 +1339,7 @@ func (cmd *SyncMLCmd) GetTargetData() string { } if cmd.Items[0].Data != nil { - return *cmd.Items[0].Data + return cmd.Items[0].Data.Content } return "" diff --git a/server/mdm/microsoft/profile_verifier_test.go b/server/mdm/microsoft/profile_verifier_test.go index 4d4ff72f18..5246112c65 100644 --- a/server/mdm/microsoft/profile_verifier_test.go +++ b/server/mdm/microsoft/profile_verifier_test.go @@ -53,7 +53,6 @@ func TestLoopHostMDMLocURIs(t *testing.T) { }, got, ) - } func TestHashLocURI(t *testing.T) { @@ -257,7 +256,7 @@ func TestVerifyHostMDMProfilesHappyPaths(t *testing.T) { CmdID: uuid.NewString(), CmdRef: &ref, Items: []fleet.CmdItem{ - {Target: ptr.String(p.LocURI), Data: ptr.String(p.Data)}, + {Target: ptr.String(p.LocURI), Data: &fleet.RawXmlData{Content: p.Data}}, }, }) } diff --git a/server/service/integration_mdm_test.go b/server/service/integration_mdm_test.go index 25602ffd58..2ce082bf43 100644 --- a/server/service/integration_mdm_test.go +++ b/server/service/integration_mdm_test.go @@ -1010,7 +1010,7 @@ func (s *integrationMDMTestSuite) TestWindowsProfileRetries() { CmdID: uuid.NewString(), CmdRef: &ref, Items: []mdm_types.CmdItem{ - {Target: ptr.String(p.LocURI), Data: ptr.String(p.Data)}, + {Target: ptr.String(p.LocURI), Data: &fleet.RawXmlData{Content: p.Data}}, }, }) } @@ -7876,7 +7876,7 @@ func (s *integrationMDMTestSuite) TestWindowsMDM() { Items: []fleet.CmdItem{ { Source: ptr.String("./Device/Vendor/MSFT/DMClient/Provider/DEMO%20MDM/SignedEntDMID"), - Data: ptr.String("0"), + Data: &fleet.RawXmlData{Content: "0"}, }, }, CmdID: cmdTwoRespUUID, diff --git a/server/service/microsoft_mdm.go b/server/service/microsoft_mdm.go index 85a0a0dcd9..37292cb50d 100644 --- a/server/service/microsoft_mdm.go +++ b/server/service/microsoft_mdm.go @@ -1848,6 +1848,7 @@ func newSyncMLItem(cmdSource *string, cmdTarget *string, cmdDataType *string, cm var metaFormat *mdm_types.MetaAttr var metaType *mdm_types.MetaAttr var meta *mdm_types.Meta + var data *mdm_types.RawXmlData if cmdDataFormat != nil && len(*cmdDataFormat) > 0 { metaFormat = &mdm_types.MetaAttr{ @@ -1870,9 +1871,15 @@ func newSyncMLItem(cmdSource *string, cmdTarget *string, cmdDataType *string, cm } } + if cmdDataValue != nil { + data = &mdm_types.RawXmlData{ + Content: *cmdDataValue, + } + } + return &mdm_types.CmdItem{ Meta: meta, - Data: cmdDataValue, + Data: data, Target: cmdTarget, Source: cmdSource, }