From d167556514f3fda19274f0304ca35f6844028831 Mon Sep 17 00:00:00 2001 From: Tomas Touceda Date: Fri, 11 Feb 2022 08:27:15 -0300 Subject: [PATCH] Make sure we handle unenrolling properly (#4158) * Make sure we handle unenrolling properly * Update failing test * Fix test --- server/datastore/mysql/hosts_test.go | 9 ++++++++- server/service/osquery_utils/queries.go | 15 +++++++-------- server/service/osquery_utils/queries_test.go | 14 ++++++++++++-- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/server/datastore/mysql/hosts_test.go b/server/datastore/mysql/hosts_test.go index b7d03b81d5..1646daaa99 100644 --- a/server/datastore/mysql/hosts_test.go +++ b/server/datastore/mysql/hosts_test.go @@ -3320,10 +3320,17 @@ func testHostMDMAndMunki(t *testing.T, ds *Datastore) { require.True(t, fleet.IsNotFound(err), err) require.NoError(t, ds.SetOrUpdateMDMData(context.Background(), 432, true, "url", false)) + + enrolled, serverURL, installedFromDep, err := ds.GetMDM(context.Background(), 432) + require.NoError(t, err) + assert.True(t, enrolled) + assert.Equal(t, "url", serverURL) + assert.False(t, installedFromDep) + require.NoError(t, ds.SetOrUpdateMDMData(context.Background(), 455, true, "url2", true)) require.NoError(t, ds.SetOrUpdateMDMData(context.Background(), 432, false, "url3", true)) - enrolled, serverURL, installedFromDep, err := ds.GetMDM(context.Background(), 432) + enrolled, serverURL, installedFromDep, err = ds.GetMDM(context.Background(), 432) require.NoError(t, err) assert.False(t, enrolled) assert.Equal(t, "url3", serverURL) diff --git a/server/service/osquery_utils/queries.go b/server/service/osquery_utils/queries.go index 1e98afadc9..3909b99bce 100644 --- a/server/service/osquery_utils/queries.go +++ b/server/service/osquery_utils/queries.go @@ -713,14 +713,13 @@ func directIngestMDM(ctx context.Context, logger log.Logger, host *fleet.Host, d if err != nil { return ctxerr.Wrap(ctx, err, "parsing enrolled") } - if !enrolled { - // A row with enrolled=false and all other columns empty is a host with the osquery - // MDM table extensions installed (e.g. Orbit) but MDM unconfigured/disabled. - return nil - } - installedFromDep, err := strconv.ParseBool(rows[0]["installed_from_dep"]) - if err != nil { - return ctxerr.Wrap(ctx, err, "parsing installed_from_dep") + installedFromDepVal := rows[0]["installed_from_dep"] + installedFromDep := false + if installedFromDepVal != "" { + installedFromDep, err = strconv.ParseBool(installedFromDepVal) + if err != nil { + return ctxerr.Wrap(ctx, err, "parsing installed_from_dep") + } } return ds.SetOrUpdateMDMData(ctx, host.ID, enrolled, rows[0]["server_url"], installedFromDep) diff --git a/server/service/osquery_utils/queries_test.go b/server/service/osquery_utils/queries_test.go index 43b8a73846..d2689b095d 100644 --- a/server/service/osquery_utils/queries_test.go +++ b/server/service/osquery_utils/queries_test.go @@ -317,12 +317,21 @@ func TestGetDetailQueries(t *testing.T) { } func TestDirectIngestMDM(t *testing.T) { + ds := new(mock.Store) + ds.SetOrUpdateMDMDataFunc = func(ctx context.Context, hostID uint, enrolled bool, serverURL string, installedFromDep bool) error { + require.False(t, enrolled) + require.False(t, installedFromDep) + require.Empty(t, serverURL) + return nil + } + var host fleet.Host - err := directIngestMDM(context.Background(), log.NewNopLogger(), &host, nil, []map[string]string{}, true) + err := directIngestMDM(context.Background(), log.NewNopLogger(), &host, ds, []map[string]string{}, true) require.NoError(t, err) + require.False(t, ds.SetOrUpdateMDMDataFuncInvoked) - err = directIngestMDM(context.Background(), log.NewNopLogger(), &host, nil, []map[string]string{ + err = directIngestMDM(context.Background(), log.NewNopLogger(), &host, ds, []map[string]string{ { "enrolled": "false", "installed_from_dep": "", @@ -330,4 +339,5 @@ func TestDirectIngestMDM(t *testing.T) { }, }, false) require.NoError(t, err) + require.True(t, ds.SetOrUpdateMDMDataFuncInvoked) }