From 1a512b27920375e34fe10240b3bec9d3da01e3de Mon Sep 17 00:00:00 2001 From: Lucas Manuel Rodriguez Date: Mon, 22 Jul 2024 14:26:03 -0300 Subject: [PATCH] Do not set `last_enrolled_at` when re-enrolling orbit (#20620) Server fix for #20397. (I incorrectly added that `last_enrolled_at = NOW()` on the first iOS/iPadOS support PR.) - [X] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://fleetdm.com/docs/contributing/committing-changes#changes-files) for more information. - [x] Added/updated tests. - [ ] Manual QA for all new/changed functionality. --- .../20397-do-not-set-last_enrolled_at-when-enrolling-orbit | 1 + server/datastore/mysql/hosts.go | 1 - server/datastore/mysql/hosts_test.go | 4 +++- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 changes/20397-do-not-set-last_enrolled_at-when-enrolling-orbit diff --git a/changes/20397-do-not-set-last_enrolled_at-when-enrolling-orbit b/changes/20397-do-not-set-last_enrolled_at-when-enrolling-orbit new file mode 100644 index 0000000000..c8f305c4d1 --- /dev/null +++ b/changes/20397-do-not-set-last_enrolled_at-when-enrolling-orbit @@ -0,0 +1 @@ +* Fixed a bug that set `last_enrolled_at` during orbit re-enrollment, which caused osquery enroll failures when `FLEET_OSQUERY_ENROLL_COOLDOWN` is set . diff --git a/server/datastore/mysql/hosts.go b/server/datastore/mysql/hosts.go index 8c671787a4..a37dd0ac8b 100644 --- a/server/datastore/mysql/hosts.go +++ b/server/datastore/mysql/hosts.go @@ -1874,7 +1874,6 @@ func (ds *Datastore) EnrollOrbit(ctx context.Context, isMDMEnabled bool, hostInf uuid = COALESCE(NULLIF(uuid, ''), ?), osquery_host_id = COALESCE(NULLIF(osquery_host_id, ''), ?), hardware_serial = COALESCE(NULLIF(hardware_serial, ''), ?), - last_enrolled_at = NOW(), team_id = ? WHERE id = ?` _, err := tx.ExecContext(ctx, sqlUpdate, diff --git a/server/datastore/mysql/hosts_test.go b/server/datastore/mysql/hosts_test.go index 5d5bcf7746..fb37661ccf 100644 --- a/server/datastore/mysql/hosts_test.go +++ b/server/datastore/mysql/hosts_test.go @@ -8258,7 +8258,9 @@ func testHostsEnrollOrbit(t *testing.T, ds *Datastore) { require.NoError(t, err) h2OrbitFetched, err := ds.Host(ctx, h2Orbit.ID) require.NoError(t, err) - require.NotEqual(t, h1OsqueryFetched.LastEnrolledAt, h2OrbitFetched.LastEnrolledAt) + // orbit should not update last_enrolled_at if re-enrolling (because last_enrolled_at + // is to be set by osquery only). + require.Equal(t, h1OsqueryFetched.LastEnrolledAt, h2OrbitFetched.LastEnrolledAt) time.Sleep(1 * time.Second) // to test the update of last_enrolled_at h2Osquery, err := ds.EnrollHost(ctx, false, dupUUID, dupUUID, dupHWSerial, uuid.New().String(), nil, 0) require.NoError(t, err)