type superuser_device, file_type, mlstrustedobject;

## Perms for the daemon

type sudaemon, domain;

userdebug_or_eng(`
  domain_trans(init, su_exec, sudaemon)

  typeattribute sudaemon domain, mlstrustedsubject;

  type_transition sudaemon socket_device:sock_file superuser_device;
  # The userspace app uses /dev sockets to control per-app access
  allow sudaemon superuser_device:dir { create rw_dir_perms setattr unlink };
  allow sudaemon superuser_device:sock_file { create setattr unlink write };

  # sudaemon is also permissive to permit setenforce.
  permissive sudaemon;

  # Add sudaemon to various domains
  net_domain(sudaemon)
  app_domain(sudaemon)

  dontaudit sudaemon self:capability_class_set *;
  dontaudit sudaemon kernel:security *;
  dontaudit sudaemon kernel:system *;
  dontaudit sudaemon self:memprotect *;
  dontaudit sudaemon domain:process *;
  dontaudit sudaemon domain:fd *;
  dontaudit sudaemon domain:dir *;
  dontaudit sudaemon domain:lnk_file *;
  dontaudit sudaemon domain:{ fifo_file file } *;
  dontaudit sudaemon domain:socket_class_set *;
  dontaudit sudaemon domain:ipc_class_set *;
  dontaudit sudaemon domain:key *;
  dontaudit sudaemon fs_type:filesystem *;
  dontaudit sudaemon {fs_type dev_type file_type}:dir_file_class_set *;
  dontaudit sudaemon node_type:node *;
  dontaudit sudaemon node_type:{ tcp_socket udp_socket rawip_socket } *;
  dontaudit sudaemon netif_type:netif *;
  dontaudit sudaemon port_type:socket_class_set *;
  dontaudit sudaemon port_type:{ tcp_socket dccp_socket } *;
  dontaudit sudaemon domain:peer *;
  dontaudit sudaemon domain:binder *;
  dontaudit sudaemon property_type:property_service *;
  dontaudit sudaemon appops_service:service_manager *;
')

## Perms for the app

userdebug_or_eng(`
  # Translate user apps to the shell domain when using su
  #
  # PR_SET_NO_NEW_PRIVS blocks this :(
  # we need to find a way to narrow this down to the actual exec.
  # typealias shell alias suclient;
  # domain_auto_trans(untrusted_app, su_exec, suclient)

  allow untrusted_app su_exec:file { execute_no_trans getattr open read execute };
  allow untrusted_app sudaemon:unix_stream_socket { connectto read write setopt ioctl };
  allow untrusted_app superuser_device:dir { r_dir_perms };
  allow untrusted_app superuser_device:sock_file { write };


  # For Settings control of access
  allow system_app superuser_device:sock_file { read write create setattr unlink getattr };
  allow system_app sudaemon:unix_stream_socket { connectto read write setopt ioctl };
  allow system_app superuser_device:dir { create rw_dir_perms setattr unlink };
')
