AccessControl.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (C) 2017 The Android Open Source Project
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include <string>
  17. #include <selinux/android.h>
  18. #include <selinux/avc.h>
  19. namespace android {
  20. class AccessControl {
  21. public:
  22. AccessControl();
  23. struct CallingContext {
  24. bool sidPresent;
  25. std::string sid;
  26. pid_t pid;
  27. };
  28. static CallingContext getCallingContext(pid_t sourcePid);
  29. bool canAdd(const std::string& fqName, const CallingContext& callingContext);
  30. bool canGet(const std::string& fqName, const CallingContext& callingContext);
  31. bool canList(const CallingContext& callingContext);
  32. private:
  33. bool checkPermission(const CallingContext& source, const char *targetContext, const char *perm, const char *interface);
  34. bool checkPermission(const CallingContext& source, const char *perm, const char *interface);
  35. static int auditCallback(void *data, security_class_t cls, char *buf, size_t len);
  36. char* mSeContext;
  37. struct selabel_handle* mSeHandle;
  38. union selinux_callback mSeCallbacks;
  39. };
  40. } // namespace android