github.com/SagerNet/gvisor@v0.0.0-20210707092255-7731c139d75c/test/util/uid_util.cc (about)

     1  // Copyright 2018 The gVisor Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  #include "test/util/posix_error.h"
    16  #include "test/util/save_util.h"
    17  
    18  namespace gvisor {
    19  namespace testing {
    20  
    21  PosixErrorOr<bool> IsRoot() {
    22    uid_t ruid, euid, suid;
    23    int rc = getresuid(&ruid, &euid, &suid);
    24    MaybeSave();
    25    if (rc < 0) {
    26      return PosixError(errno, "getresuid");
    27    }
    28    if (ruid != 0 || euid != 0 || suid != 0) {
    29      return false;
    30    }
    31    gid_t rgid, egid, sgid;
    32    rc = getresgid(&rgid, &egid, &sgid);
    33    MaybeSave();
    34    if (rc < 0) {
    35      return PosixError(errno, "getresgid");
    36    }
    37    if (rgid != 0 || egid != 0 || sgid != 0) {
    38      return false;
    39    }
    40    return true;
    41  }
    42  
    43  }  // namespace testing
    44  }  // namespace gvisor