/ securityd / src / authhost.cpp
authhost.cpp
 1  /*
 2   * Copyright (c) 2000-2007,2009-2010,2012 Apple Inc. All Rights Reserved.
 3   * 
 4   * @APPLE_LICENSE_HEADER_START@
 5   * 
 6   * This file contains Original Code and/or Modifications of Original Code
 7   * as defined in and that are subject to the Apple Public Source License
 8   * Version 2.0 (the 'License'). You may not use this file except in
 9   * compliance with the License. Please obtain a copy of the License at
10   * http://www.opensource.apple.com/apsl/ and read it before using this
11   * file.
12   * 
13   * The Original Code and all software distributed under the License are
14   * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15   * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16   * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17   * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18   * Please see the License for the specific language governing rights and
19   * limitations under the License.
20   * 
21   * @APPLE_LICENSE_HEADER_END@
22   */
23  
24  #include <paths.h>
25  #include <fcntl.h>
26  #include "authhost.h"
27  #include "server.h"
28  #include <security_utilities/logging.h>
29  #include <security_utilities/debugging.h>
30  #include <bsm/audit.h>
31  #include <bootstrap_priv.h>
32  
33  #include <grp.h>
34  #include <pwd.h>
35  #include <sys/types.h>
36  #include <sys/sysctl.h>
37  #include <syslog.h>
38  #include <pthread.h>
39  
40  static pthread_once_t agent_cred_init = PTHREAD_ONCE_INIT; 
41  static gid_t agent_gid = 92;
42  static uid_t agent_uid = 92;
43  
44  static void initialize_agent_creds()
45  {
46      struct passwd *agentUser = getpwnam("securityagent");
47      if (agentUser)
48      {
49          agent_uid = agentUser->pw_uid;
50          agent_gid = agentUser->pw_gid;
51          endpwent();
52      }
53  }
54    
55  AuthHostInstance::AuthHostInstance(Session &session)
56  {
57  	secinfo("authhost", "authhost born (%p)", this);
58  	referent(session);
59  	session.addReference(*this);
60  	pthread_once(&agent_cred_init, initialize_agent_creds);
61  }
62  
63  AuthHostInstance::~AuthHostInstance()
64  { 
65  	secinfo("authhost", "authhost died (%p)", this);
66  }
67  
68  Session &AuthHostInstance::session() const
69  {
70  	return referent<Session>();
71  }
72  
73  bool AuthHostInstance::inDarkWake()
74  {
75  	return session().server().inDarkWake();
76  }
77  
78  void
79  AuthHostInstance::childAction()
80  {
81  	secinfo("AuthHostInstance", "authhostinstance not supported");
82  	// Unconditional suicide follows.
83  	_exit(1);
84  }