]> git.saurik.com Git - apple/security.git/blob - utilities/src/iOSforOSX.c
Security-55471.14.tar.gz
[apple/security.git] / utilities / src / iOSforOSX.c
1 //
2 // iOSforOSX.c
3 // utilities
4 //
5 // Created by J Osborne on 11/13/12.
6 // Copyright (c) 2012 Apple Inc. All rights reserved.
7 //
8
9 #include <TargetConditionals.h>
10
11 #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))
12
13 #include <CoreFoundation/CoreFoundation.h>
14 #include <AssertMacros.h>
15 #include <utilities/SecCFWrappers.h>
16
17 #include <sys/types.h>
18 #include <pwd.h>
19 #include <uuid/uuid.h>
20 #include "iOSforOSX.h"
21 #include <pwd.h>
22 #include <unistd.h>
23
24 #include ".././libsecurity_keychain/lib/SecBase64P.c"
25
26 CFURLRef SecCopyKeychainDirectoryFile(CFStringRef file)
27 {
28 struct passwd *passwd = getpwuid(getuid());
29 if (!passwd)
30 return NULL;
31
32 CFURLRef pathURL = NULL;
33 CFURLRef fileURL = NULL;
34 CFStringRef home = NULL;
35 CFStringRef filePath = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%s/%@"), "Library/Keychains", file);
36 require(filePath, xit);
37
38 if (passwd->pw_dir)
39 home = CFStringCreateWithCString(NULL, passwd->pw_dir, kCFStringEncodingUTF8);
40
41 pathURL = CFURLCreateWithFileSystemPath(NULL, home?home:CFSTR("/"), kCFURLPOSIXPathStyle, true);
42 if (pathURL)
43 fileURL = CFURLCreateCopyAppendingPathComponent(kCFAllocatorDefault, pathURL, filePath, false);
44
45 xit:
46 CFReleaseSafe(filePath);
47 CFReleaseSafe(pathURL);
48 CFReleaseSafe(home);
49 return fileURL;
50 }
51
52 // XXX: do we still need this? see securityd_files?
53 CFURLRef PortableCFCopyHomeDirectoryURL(void)
54 {
55 char *path = getenv("HOME");
56 if (!path) {
57 struct passwd *pw = getpwuid(getuid());
58 path = pw->pw_dir;
59 }
60 CFStringRef path_cf = CFStringCreateWithCStringNoCopy(NULL, path, kCFStringEncodingUTF8, kCFAllocatorNull);
61 CFURLRef path_url = CFURLCreateWithFileSystemPath(NULL, path_cf, kCFURLPOSIXPathStyle, true);
62
63 CFRelease(path_cf);
64 return path_url;
65 }
66
67 #endif