kubeadm: update the IsPriviligedUser preflight check on Windows

Use GetCurrentProcessToken() instead of checking the groups of a user.

The Go stdlib way of fetching the groups of an user appears
to be failing on some Windows setups. Which could be a regression
in later Go versions, or simply the code does not work on certain
setups.
This commit is contained in:
Lubomir I. Ivanov 2024-05-02 12:03:39 +03:00
parent 82cd82aa15
commit d105ddd350

View File

@ -20,34 +20,17 @@ limitations under the License.
package preflight
import (
"os/user"
"github.com/pkg/errors"
"golang.org/x/sys/windows"
)
// The "Well-known SID" of Administrator group
// https://support.microsoft.com/en-us/help/243330/well-known-security-identifiers-in-windows-operating-systems
const administratorSID = "S-1-5-32-544"
// Check validates if a user has elevated (administrator) privileges.
func (ipuc IsPrivilegedUserCheck) Check() (warnings, errorList []error) {
currUser, err := user.Current()
if err != nil {
return nil, []error{errors.Wrap(err, "cannot get current user")}
hProcessToken := windows.GetCurrentProcessToken()
if hProcessToken.IsElevated() {
return nil, nil
}
groupIds, err := currUser.GroupIds()
if err != nil {
return nil, []error{errors.Wrap(err, "cannot get group IDs for current user")}
}
for _, sid := range groupIds {
if sid == administratorSID {
return nil, nil
}
}
return nil, []error{errors.New("user is not running as administrator")}
return nil, []error{errors.New("the kubeadm process must be run by a user with elevated privileges")}
}
// Check number of memory required by kubeadm