diff --git a/hack/vendor.sh b/hack/vendor.sh index 6f28b341fd..be86eab2d9 100755 --- a/hack/vendor.sh +++ b/hack/vendor.sh @@ -8,7 +8,7 @@ source 'hack/.vendor-helpers.sh' # the following lines are in sorted order, FYI clone git github.com/Azure/go-ansiterm 70b2c90b260171e829f1ebd7c17f600c11858dbe clone git github.com/Microsoft/hcsshim 116e0e9f5ced0cec94ae46d0aa1b3002a325f532 -clone git github.com/Microsoft/go-winio c40bf24f405ab3cc8e1383542d474e813332de6d +clone git github.com/Microsoft/go-winio f778f05015353be65d242f3fedc18695756153bb clone git github.com/Sirupsen/logrus v0.9.0 # logrus is a common dependency among multiple deps clone git github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a clone git github.com/go-check/check 11d3bc7aa68e238947792f30573146a3231fc0f1 diff --git a/vendor/src/github.com/Microsoft/go-winio/privilege.go b/vendor/src/github.com/Microsoft/go-winio/privilege.go index e87c5737d4..81f9af7b70 100644 --- a/vendor/src/github.com/Microsoft/go-winio/privilege.go +++ b/vendor/src/github.com/Microsoft/go-winio/privilege.go @@ -9,7 +9,7 @@ import ( "unicode/utf16" ) -//sys adjustTokenPrivileges(token syscall.Handle, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (err error) = advapi32.AdjustTokenPrivileges +//sys adjustTokenPrivileges(token syscall.Handle, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) [true] = advapi32.AdjustTokenPrivileges //sys impersonateSelf(level uint32) (err error) = advapi32.ImpersonateSelf //sys revertToSelf() (err error) = advapi32.RevertToSelf //sys openThreadToken(thread syscall.Handle, accessMask uint32, openAsSelf bool, token *syscall.Handle) (err error) = advapi32.OpenThreadToken @@ -21,6 +21,8 @@ import ( const ( SE_PRIVILEGE_ENABLED = 2 + ERROR_NOT_ALL_ASSIGNED syscall.Errno = 1300 + SeBackupPrivilege = "SeBackupPrivilege" SeRestorePrivilege = "SeRestorePrivilege" ) @@ -91,10 +93,11 @@ func adjustPrivileges(token syscall.Handle, privileges []uint64) error { } prevState := make([]byte, b.Len()) reqSize := uint32(0) - if err := adjustTokenPrivileges(token, false, &b.Bytes()[0], uint32(len(prevState)), &prevState[0], &reqSize); err != nil { + success, err := adjustTokenPrivileges(token, false, &b.Bytes()[0], uint32(len(prevState)), &prevState[0], &reqSize) + if !success { return err } - if int(binary.LittleEndian.Uint32(prevState[0:4])) < len(privileges) { + if err == ERROR_NOT_ALL_ASSIGNED { return &PrivilegeError{privileges} } return nil diff --git a/vendor/src/github.com/Microsoft/go-winio/zsyscall.go b/vendor/src/github.com/Microsoft/go-winio/zsyscall.go index 19d53dc305..eab955c1bb 100644 --- a/vendor/src/github.com/Microsoft/go-winio/zsyscall.go +++ b/vendor/src/github.com/Microsoft/go-winio/zsyscall.go @@ -266,15 +266,16 @@ func setFileInformationByHandle(h syscall.Handle, class uint32, buffer *byte, si return } -func adjustTokenPrivileges(token syscall.Handle, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (err error) { +func adjustTokenPrivileges(token syscall.Handle, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) { var _p0 uint32 if releaseAll { _p0 = 1 } else { _p0 = 0 } - r1, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize))) - if r1 == 0 { + r0, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize))) + success = r0 != 0 + if true { if e1 != 0 { err = error(e1) } else {