/ src / launchd / SystemStarter / StartupItems.h
StartupItems.h
  1  /**
  2   * StartupItems.h - Startup Item management routines
  3   * Wilfredo Sanchez | wsanchez@opensource.apple.com
  4   * Kevin Van Vechten | kevinvv@uclink4.berkeley.edu
  5   * $Apple$
  6   **
  7   * Copyright (c) 1999-2002 Apple Computer, Inc. All rights reserved.
  8   *
  9   * @APPLE_APACHE_LICENSE_HEADER_START@
 10   * 
 11   * Licensed under the Apache License, Version 2.0 (the "License");
 12   * you may not use this file except in compliance with the License.
 13   * You may obtain a copy of the License at
 14   * 
 15   *     http://www.apache.org/licenses/LICENSE-2.0
 16   * 
 17   * Unless required by applicable law or agreed to in writing, software
 18   * distributed under the License is distributed on an "AS IS" BASIS,
 19   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 20   * See the License for the specific language governing permissions and
 21   * limitations under the License.
 22   * 
 23   * @APPLE_APACHE_LICENSE_HEADER_END@
 24   **/
 25  
 26  #ifndef _StartupItems_H_
 27  #define _StartupItems_H_
 28  
 29  #include <NSSystemDirectories.h>
 30  
 31  #include <CoreFoundation/CFArray.h>
 32  #include <CoreFoundation/CFDictionary.h>
 33  
 34  #include "SystemStarter.h"
 35  
 36  #define kProvidesKey        CFSTR("Provides")
 37  #define kRequiresKey        CFSTR("Requires")
 38  #define kDescriptionKey     CFSTR("Description")
 39  #define kUsesKey            CFSTR("Uses")
 40  #define kErrorKey           CFSTR("Error")
 41  #define kBundlePathKey      CFSTR("PathToBundle")
 42  #define kPIDKey             CFSTR("ProcessID")
 43  #define kDomainKey          CFSTR("Domain")
 44  
 45  
 46  #define kErrorPermissions   CFSTR("incorrect permissions")
 47  #define kErrorInternal      CFSTR("SystemStarter internal error")
 48  #define kErrorReturnNonZero CFSTR("execution of Startup script failed")
 49  #define kErrorFork          CFSTR("could not fork() StartupItem")
 50  
 51  
 52  /*
 53   * Find all available startup items in NSDomains specified by aMask.
 54   */
 55  CFMutableArrayRef StartupItemListCreateWithMask (NSSearchPathDomainMask aMask);
 56  
 57  /*
 58   * Returns the item responsible for providing aService.
 59   */
 60  CFMutableDictionaryRef StartupItemListGetProvider (CFArrayRef anItemList, CFStringRef aService);
 61  
 62  /*
 63   * Creates a list of items in anItemList which depend on anItem, given anAction.
 64   */
 65  CFMutableArrayRef StartupItemListCreateDependentsList (CFMutableArrayRef anItemList,
 66  						       CFStringRef       aService  ,
 67  						       Action            anAction  );
 68  
 69  /*
 70   * Given aWaitingList of startup items, and aStatusDict describing the current
 71   * startup state, returns the next startup item to run, if any. Returns nil if
 72   * none is available.
 73   * Note that this is not necessarily deterministic; if more than one startup
 74   * item is ready to run, which item gets returned is not specified. An item is
 75   * not ready to run if the specified dependencies are not satisfied yet.
 76   */
 77  CFMutableDictionaryRef StartupItemListGetNext (CFArrayRef      aWaitingList,
 78                                                 CFDictionaryRef aStatusDict ,
 79  					       Action          anAction    );
 80  
 81  CFMutableDictionaryRef StartupItemWithPID (CFArrayRef anItemList, pid_t aPID);
 82  pid_t StartupItemGetPID(CFDictionaryRef anItem);
 83  
 84  CFStringRef StartupItemCreateDescription(CFMutableDictionaryRef anItem);
 85  
 86  /*
 87   * Returns a list of currently executing startup items.
 88   */
 89  CFArrayRef StartupItemListCreateFromRunning(CFArrayRef anItemList);
 90  
 91  /*
 92   * Returns the total number of "Provides" entries of all loaded items.
 93   */
 94  CFIndex StartupItemListCountServices (CFArrayRef anItemList);
 95  
 96  
 97  /*
 98   * Utility functions
 99   */
100  void RemoveItemFromWaitingList(StartupContext aStartupContext, CFMutableDictionaryRef anItem); 
101  void AddItemToFailedList(StartupContext aStartupContext, CFMutableDictionaryRef anItem);
102  
103  /*
104   * Run the startup item.
105   */
106  int StartupItemRun   (CFMutableDictionaryRef aStatusDict, CFMutableDictionaryRef anItem, Action  anAction);
107  void StartupItemExit (CFMutableDictionaryRef aStatusDict, CFMutableDictionaryRef anItem, Boolean aSuccess);		     
108  void StartupItemSetStatus(CFMutableDictionaryRef aStatusDict, CFMutableDictionaryRef anItem, CFStringRef aServiceName, Boolean aSuccess, Boolean aReplaceFlag);
109  
110  /*
111   * Check whether file was created before boot and has proper permissions to run.
112   */
113  bool StartupItemSecurityCheck(const char *aPath);
114  
115  #endif /* _StartupItems_H_ */