]> git.saurik.com Git - apple/security.git/blob - securityd/src/tokencache.h
Security-57031.1.35.tar.gz
[apple/security.git] / securityd / src / tokencache.h
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 // tokencache - persistent (on-disk) hardware token directory
27 //
28 #ifndef _H_TOKENCACHE
29 #define _H_TOKENCACHE
30
31 #include <security_utilities/refcount.h>
32 #include <Security/cssm.h>
33
34
35 //
36 // A little helper
37 //
38 class Rooted {
39 public:
40 Rooted() { }
41 Rooted(const char *root) : mRoot(root) { }
42 Rooted(const string &root) : mRoot(root) { }
43
44 string root() const { return mRoot; }
45 string path(const char *sub) const;
46 string path(const string &sub) const { return path(sub.c_str()); }
47
48 protected:
49 void root(const string &s);
50
51 private:
52 string mRoot; // root of this tree
53 };
54
55
56 //
57 // An on-disk cache area.
58 // You'll only want a single one, though nothing keeps you from
59 // making multiples if you like.
60 //
61 class TokenCache : public Rooted {
62 public:
63 TokenCache(const char *root);
64 ~TokenCache();
65
66 uid_t tokendUid() const { return mTokendUid; }
67 gid_t tokendGid() const { return mTokendGid; }
68
69 public:
70 class Token : public RefCount, public Rooted {
71 public:
72 friend class TokenCache;
73 Token(TokenCache &cache, const std::string &uid);
74 Token(TokenCache &cache);
75 ~Token();
76
77 enum Type { existing, created, temporary };
78 Type type() const { return mType; }
79
80 TokenCache &cache;
81 uint32 subservice() const { return mSubservice; }
82 string workPath() const;
83 string cachePath() const;
84
85 string printName() const;
86 void printName(const string &name);
87
88 uid_t tokendUid() const { return cache.tokendUid(); }
89 gid_t tokendGid() const { return cache.tokendGid(); }
90
91 protected:
92 void init(Type type);
93
94 private:
95 uint32 mSubservice; // subservice id assigned
96 Type mType; // type of Token cache entry
97 };
98
99 public:
100 uint32 allocateSubservice();
101
102 private:
103 enum Owner { securityd, tokend };
104 void makedir(const char *path, int flags, mode_t mode, Owner owner);
105 void makedir(const string &path, int flags, mode_t mode, Owner owner)
106 { return makedir(path.c_str(), flags, mode, owner); }
107
108 private:
109 uint32 mLastSubservice; // last subservice id issued
110
111 uid_t mTokendUid; // uid of daemons accessing this token cache
112 gid_t mTokendGid; // gid of daemons accessing this token cache
113 };
114
115
116 #endif //_H_TOKENCACHE