1/* 2 * Copyright (c) 2004 Apple Computer, 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 25// 26// CodeRepository - directory search paths for bundles 27// 28#include <security_utilities/coderepository.h> 29#include <security_utilities/debugging.h> 30 31 32namespace Security { 33 34 35PathList::PathList() 36{ 37} 38 39 40PathList::PathList(const string &subPath, 41 const char *suffix /* = NULL */, 42 const char *envar /* = NULL */, 43 bool forUser /* = true */) 44 : mSuffix(suffix) 45{ 46 if (envar) 47 if (const char *envPath = getenv(envar)) { 48#if !defined(NDEBUG) 49 if (envPath[0] == '!') { 50 // envar="!path" -> single-item override (debugging only) 51 mDebugOverride = envPath + 1; 52 secdebug("pathlist", "%p env(\"%s\") overrides to \"%s\"", 53 this, envar, mDebugOverride.c_str()); 54 return; 55 } 56#endif //NDEBUG 57 58 // treat envPath as a classic colon-separated list of directories 59 secdebug("pathlist", "%p configuring from env(\"%s\")", this, envar); 60 while (const char *p = strchr(envPath, ':')) { 61 addDirectory(string(envPath, p - envPath)); 62 envPath = p + 1; 63 } 64 addDirectory(envPath); 65 return; 66 } 67 68 // no joy from environment variables 69 secdebug("pathlist", "%p configuring from default path set \"%s\"", this, subPath.c_str()); 70 if (forUser) 71 secdebug("pathlist", "user search list not yet implemented"); 72 addDirectory("/Library/" + subPath); 73 addDirectory("/System/Library/" + subPath); 74} 75 76 77PathList::~PathList() 78{ 79 // virtual 80} 81 82 83void PathList::addDirectory(const string &dirPath) 84{ 85 //@@@ validate dirPath? 86 mPaths.push_back(dirPath); 87} 88 89 90} // end namespace Security 91