]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/Kernel/RootDomainUserClient.cpp
xnu-1504.9.37.tar.gz
[apple/xnu.git] / iokit / Kernel / RootDomainUserClient.cpp
index 8dbb20b0eb246d5f18761826d01175efe9f88415..69c0dfa1a797754d69db54401d75237fedef8116 100644 (file)
@@ -194,6 +194,23 @@ IOReturn RootDomainUserClient::secureSetMaintenanceWakeCalendar(
 #endif
 }
 
 #endif
 }
 
+IOReturn RootDomainUserClient::secureSetUserAssertionLevels(
+    uint32_t assertBits )
+{
+    int                     admin_priv = 0;
+    IOReturn                ret = kIOReturnNotPrivileged;
+    
+    ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
+    admin_priv = (kIOReturnSuccess == ret);
+
+    if (admin_priv && fOwner) {
+        ret = fOwner->setPMAssertionUserLevels(assertBits);
+    } else {
+        ret = kIOReturnNotPrivileged;
+    }
+    return kIOReturnSuccess;
+}
+
 IOReturn RootDomainUserClient::clientClose( void )
 {
     detach(fOwner);
 IOReturn RootDomainUserClient::clientClose( void )
 {
     detach(fOwner);
@@ -238,6 +255,10 @@ RootDomainUserClient::getTargetAndMethodForIndex( IOService ** targetP, UInt32 i
         {   // kPMSetMaintenanceWakeCalendar, 8
             (IOService *)1, (IOMethod)&RootDomainUserClient::secureSetMaintenanceWakeCalendar,
             kIOUCStructIStructO, sizeof(IOPMCalendarStruct), sizeof(uint32_t)
         {   // kPMSetMaintenanceWakeCalendar, 8
             (IOService *)1, (IOMethod)&RootDomainUserClient::secureSetMaintenanceWakeCalendar,
             kIOUCStructIStructO, sizeof(IOPMCalendarStruct), sizeof(uint32_t)
+        },
+        {   // kPMSetUserAssertionLevels, 9
+            (IOService *)1, (IOMethod)&RootDomainUserClient::secureSetUserAssertionLevels,
+            kIOUCScalarIScalarO, 1, 0
         }
     };
     
         }
     };