2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
13 /* Dirpath package: Rationale and Usage
15 * With the port of AFS to Windows NT, it becomes necessary to support
16 * storing AFS system files (binaries, logs, etc.) in a user-specified
17 * installation directory. This breaks from the traditional notion of
18 * all AFS system files being stored under /usr/afs or /usr/vice.
20 * The core concept is that there is a dynamically determined installation
21 * directory that is the prefix to a well-known AFS tree. The structure
22 * of this well-known AFS tree remains unchanged. For example, AFS server
23 * binaries reside in <install dir>/usr/afs/bin, server configuration files
24 * reside in <install dir>/usr/afs/etc, etcetera. This scheme allows the
25 * flexibility required by NT, without requiring file-location changes
26 * on Unix (for which <install dir> can simply be null).
28 * Thus file paths can no longer be hard-coded; rather, all file paths are
29 * specified via the macros provided by this package.
31 * Utilizing a dynamically determined installation directory forces the
32 * notion of local versus canonical (wire-format) paths. A local path is
33 * fully qualified (with a syntax determined by the native filesystem type)
34 * whereas a canonical path specifies location only within the well-known AFS
35 * tree. Supporting the notion of canonical paths allows the same path to
36 * be sent to servers on different machines, having different installation
37 * directories, with the desired result.
39 * For example, 'bos create <mach> kaserver simple /usr/afs/bin/kasever' will
40 * work both on a Unix machine, where the kaserver executable actually resides
41 * in /usr/afs/bin, and on a NT machine, where the kaserver may reside in
42 * C:/Program Files/Transarc/AFS Server/usr/afs/bin.
44 * Conversion functions are provided that translate canonical (wire-format)
45 * paths to fully qualified local paths; see the documentation in dirpath.c
46 * for details. Note that these conversion functions also accomodate fully
47 * qualified paths on the wire, for exceptional cases where this feature
48 * may be required. Again, these conversion functions have been implemented
49 * such that no file-location changes are required on Unix.
51 * The path macros provided here are divided into local (AFSDIR_*) and
52 * canonical (AFSDIR_CANONICAL_*). The canonical macros MUST be used by
53 * commands that send a non-user-specified path to a server (i.e., over
54 * the wire). The local macros MUST be used in all other cases.
59 #include <afs/param.h>
66 /* Max dir path size for afs install dirs */
68 #define AFSDIR_PATH_MAX MAX_PATH
70 #define AFSDIR_PATH_MAX _POSIX_PATH_MAX
74 /* --------------------- Exported functions ---------------------- */
77 #define AFSDIR_CLIENT_PATHS_OK 0x1 /* client paths initialized correctly */
78 #define AFSDIR_SERVER_PATHS_OK 0x2 /* server paths initialized correctly */
79 extern unsigned int initAFSDirPath(void);
82 ConstructLocalPath(const char *cpath, const char *relativeTo,
85 ConstructLocalBinPath(const char *cpath, char **fullPathBufp);
87 ConstructLocalLogPath(const char *cpath, char **fullPathBufp);
91 /* ----------------- Directory/file name macros ------------------ */
93 /* afs installation dir names */
94 #define AFSDIR_ETC_DIR "etc"
95 #define AFSDIR_BIN_DIR "bin"
96 #define AFSDIR_SERVER_ETC_DIR "etc"
97 #define AFSDIR_SERVER_BIN_DIR "bin"
98 #define AFSDIR_CLIENT_ETC_DIR "etc"
99 #define AFSDIR_CORES_DIR "cores"
100 #define AFSDIR_DB_DIR "db"
101 #define AFSDIR_LOGS_DIR "logs"
102 #define AFSDIR_LOCAL_DIR "local"
103 #define AFSDIR_BACKUP_DIR "backup"
104 #define AFSDIR_MIGR_DIR "local/migrate"
105 #define AFSDIR_BIN_FILE_DIR "local/migrate/bin_files"
106 #define AFSDIR_BOSCONFIG_DIR "local"
107 #define AFSDIR_BOSSERVER_DIR "bin"
110 #define AFSDIR_THISCELL_FILE "ThisCell"
111 #define AFSDIR_CELLSERVDB_FILE "CellServDB"
112 #define AFSDIR_CELLALIAS_FILE "CellAlias"
113 #define AFSDIR_KEY_FILE "KeyFile"
114 #define AFSDIR_ULIST_FILE "UserList"
115 #define AFSDIR_NOAUTH_FILE "NoAuth"
116 #define AFSDIR_BUDBLOG_FILE "BackupLog"
117 #define AFSDIR_TAPECONFIG_FILE "tapeconfig"
118 #define AFSDIR_KALOGDB_FILE "AuthLog"
119 #define AFSDIR_KALOG_FILE "AuthLog"
120 #define AFSDIR_KADB_FILE "kaserver"
121 #define AFSDIR_NTPD_FILE "ntpd"
122 #define AFSDIR_PRDB_FILE "prdb"
123 #define AFSDIR_PTLOG_FILE "PtLog"
124 #define AFSDIR_KCONF_FILE "krb.conf"
125 #define AFSDIR_VLDB_FILE "vldb"
126 #define AFSDIR_VLOG_FILE "VLLog"
127 #define AFSDIR_CORE_FILE "core"
128 #define AFSDIR_SLVGLOG_FILE "SalvageLog"
129 #define AFSDIR_SALVAGER_FILE "salvager"
130 #define AFSDIR_SLVGLOCK_FILE "salvage.lock"
131 #define AFSDIR_BOZCONF_FILE "BosConfig"
132 #define AFSDIR_BOZCONFNEW_FILE "BosConfig.new"
133 #define AFSDIR_BOZINIT_FILE "BozoInit"
134 #define AFSDIR_BOZLOG_FILE "BosLog"
135 #define AFSDIR_BOSVR_FILE "bosserver"
136 #define AFSDIR_VOLSERLOG_FILE "VolserLog"
137 #define AFSDIR_AUDIT_FILE "Audit"
139 #define AFSDIR_ROOTVOL_FILE "RootVolume"
140 #define AFSDIR_HOSTDUMP_FILE "hosts.dump"
141 #define AFSDIR_CLNTDUMP_FILE "client.dump"
142 #define AFSDIR_CBKDUMP_FILE "callback.dump"
143 #define AFSDIR_OLDSYSID_FILE "sysid.old"
144 #define AFSDIR_SYSID_FILE "sysid"
145 #define AFSDIR_FILELOG_FILE "FileLog"
146 #define AFSDIR_MIGRATE_LOGNAME "wtlog."
148 #define AFSDIR_CELLSERVDB_FILE_NTCLIENT "afsdcell.ini"
150 #define AFSDIR_NETINFO_FILE "NetInfo"
151 #define AFSDIR_NETRESTRICT_FILE "NetRestrict"
153 #define AFSDIR_LOCALRESIDENCY_FILE "LocalResidency"
154 #define AFSDIR_WEIGHTINGCONST_FILE "Weight.LocalConstants"
155 #define AFSDIR_THRESHOLDCONST_FILE "Thershold.LocalConstants"
157 /* -------------- Canonical (wire-format) path macros -------------- */
159 /* Each of the following is a canonical form of the corresponding
160 * local (AFSDIR_*) path macro.
163 #define AFSDIR_CANONICAL_USR_DIRPATH "/usr"
164 #define AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/usr/afs"
165 #define AFSDIR_CANONICAL_CLIENT_VICE_DIRPATH "/usr/vice"
166 #ifdef AFS_DARWIN_ENV
167 #define AFSDIR_ALTERNATE_CLIENT_VICE_DIRPATH "/var/db/openafs"
170 #define AFSDIR_CANONICAL_SERVER_BIN_DIRPATH \
171 AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/" AFSDIR_BIN_DIR
173 #define AFSDIR_CANONICAL_SERVER_ETC_DIRPATH \
174 AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/" AFSDIR_ETC_DIR
176 #define AFSDIR_CANONICAL_SERVER_LOGS_DIRPATH \
177 AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/" AFSDIR_LOGS_DIR
179 #define AFSDIR_CANONICAL_SERVER_LOCAL_DIRPATH \
180 AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/" AFSDIR_LOCAL_DIR
183 #define AFSDIR_CANONICAL_SERVER_SALVAGER_FILEPATH \
184 AFSDIR_CANONICAL_SERVER_BIN_DIRPATH "/" AFSDIR_SALVAGER_FILE
186 #define AFSDIR_CANONICAL_SERVER_SLVGLOG_FILEPATH \
187 AFSDIR_CANONICAL_SERVER_LOGS_DIRPATH "/" AFSDIR_SLVGLOG_FILE
190 /* --------------------- Local path macros ---------------------- */
192 /* Note: On NT, these should be used only after calling initAFSDirPath().
193 * On Unix, the paths are implicitly initialized.
196 /* enums for indexes into the pathname array */
197 typedef enum afsdir_id {
198 AFSDIR_USR_DIRPATH_ID,
199 AFSDIR_SERVER_AFS_DIRPATH_ID,
200 AFSDIR_SERVER_ETC_DIRPATH_ID,
201 AFSDIR_SERVER_BIN_DIRPATH_ID,
202 AFSDIR_SERVER_CORES_DIRPATH_ID,
203 AFSDIR_SERVER_DB_DIRPATH_ID,
204 AFSDIR_SERVER_LOGS_DIRPATH_ID,
205 AFSDIR_SERVER_LOCAL_DIRPATH_ID,
206 AFSDIR_SERVER_BACKUP_DIRPATH_ID,
207 AFSDIR_CLIENT_VICE_DIRPATH_ID,
208 AFSDIR_CLIENT_ETC_DIRPATH_ID,
209 AFSDIR_SERVER_THISCELL_FILEPATH_ID,
210 AFSDIR_SERVER_CELLSERVDB_FILEPATH_ID,
211 AFSDIR_SERVER_NOAUTH_FILEPATH_ID,
212 AFSDIR_SERVER_KEY_FILEPATH_ID,
213 AFSDIR_SERVER_ULIST_FILEPATH_ID,
214 AFSDIR_SERVER_BUDBLOG_FILEPATH_ID,
215 AFSDIR_SERVER_TAPECONFIG_FILEPATH_ID,
216 AFSDIR_SERVER_KALOGDB_FILEPATH_ID,
217 AFSDIR_SERVER_KALOG_FILEPATH_ID,
218 AFSDIR_SERVER_KADB_FILEPATH_ID,
219 AFSDIR_SERVER_NTPD_FILEPATH_ID,
220 AFSDIR_SERVER_PRDB_FILEPATH_ID,
221 AFSDIR_SERVER_PTLOG_FILEPATH_ID,
222 AFSDIR_SERVER_KCONF_FILEPATH_ID,
223 AFSDIR_SERVER_VLDB_FILEPATH_ID,
224 AFSDIR_SERVER_VLOG_FILEPATH_ID,
225 AFSDIR_SERVER_CORELOG_FILEPATH_ID,
226 AFSDIR_SERVER_SLVGLOG_FILEPATH_ID,
227 AFSDIR_SERVER_SALVAGER_FILEPATH_ID,
228 AFSDIR_SERVER_BOZCONF_FILEPATH_ID,
229 AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID,
230 AFSDIR_SERVER_BOZINIT_FILEPATH_ID,
231 AFSDIR_SERVER_BOZLOG_FILEPATH_ID,
232 AFSDIR_SERVER_BOSVR_FILEPATH_ID,
233 AFSDIR_SERVER_SLVGLOCK_FILEPATH_ID,
234 AFSDIR_SERVER_VOLSERLOG_FILEPATH_ID,
235 AFSDIR_SERVER_ROOTVOL_FILEPATH_ID,
236 AFSDIR_SERVER_HOSTDUMP_FILEPATH_ID,
237 AFSDIR_SERVER_CLNTDUMP_FILEPATH_ID,
238 AFSDIR_SERVER_CBKDUMP_FILEPATH_ID,
239 AFSDIR_SERVER_OLDSYSID_FILEPATH_ID,
240 AFSDIR_SERVER_SYSID_FILEPATH_ID,
241 AFSDIR_SERVER_FILELOG_FILEPATH_ID,
242 AFSDIR_SERVER_AUDIT_FILEPATH_ID,
243 AFSDIR_CLIENT_THISCELL_FILEPATH_ID,
244 AFSDIR_CLIENT_CELLSERVDB_FILEPATH_ID,
245 AFSDIR_CLIENT_NETINFO_FILEPATH_ID,
246 AFSDIR_CLIENT_NETRESTRICT_FILEPATH_ID,
247 AFSDIR_SERVER_NETINFO_FILEPATH_ID,
248 AFSDIR_SERVER_NETRESTRICT_FILEPATH_ID,
249 AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH_ID,
250 AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH_ID,
251 AFSDIR_SERVER_MIGRATE_DIRPATH_ID,
252 AFSDIR_SERVER_MIGRATELOG_FILEPATH_ID,
253 AFSDIR_SERVER_BIN_FILE_DIRPATH_ID,
254 AFSDIR_CLIENT_CELLALIAS_FILEPATH_ID,
255 AFSDIR_PATHSTRING_MAX
258 /* getDirPath() returns a pointer to a string from an internal array of path strings
260 const char *getDirPath(afsdir_id_t string_id);
262 /* Top level usr dir */
263 #define AFSDIR_USR_DIRPATH getDirPath(AFSDIR_USR_DIRPATH_ID)
265 /* server subdir paths */
266 #define AFSDIR_SERVER_AFS_DIRPATH getDirPath(AFSDIR_SERVER_AFS_DIRPATH_ID)
267 #define AFSDIR_SERVER_ETC_DIRPATH getDirPath(AFSDIR_SERVER_ETC_DIRPATH_ID)
268 #define AFSDIR_SERVER_BIN_DIRPATH getDirPath(AFSDIR_SERVER_BIN_DIRPATH_ID)
269 #define AFSDIR_SERVER_CORES_DIRPATH getDirPath(AFSDIR_SERVER_CORES_DIRPATH_ID)
270 #define AFSDIR_SERVER_DB_DIRPATH getDirPath(AFSDIR_SERVER_DB_DIRPATH_ID)
271 #define AFSDIR_SERVER_LOGS_DIRPATH getDirPath(AFSDIR_SERVER_LOGS_DIRPATH_ID)
272 #define AFSDIR_SERVER_LOCAL_DIRPATH getDirPath(AFSDIR_SERVER_LOCAL_DIRPATH_ID)
273 #define AFSDIR_SERVER_BACKUP_DIRPATH getDirPath(AFSDIR_SERVER_BACKUP_DIRPATH_ID)
274 #define AFSDIR_SERVER_LOCAL_DIRPATH getDirPath(AFSDIR_SERVER_LOCAL_DIRPATH_ID)
275 #define AFSDIR_SERVER_MIGRATE_DIRPATH getDirPath(AFSDIR_SERVER_MIGRATE_DIRPATH_ID)
276 #define AFSDIR_SERVER_MIGRATE_DIRPATH getDirPath(AFSDIR_SERVER_MIGRATE_DIRPATH_ID)
278 /* client subdir paths */
279 #define AFSDIR_CLIENT_VICE_DIRPATH getDirPath(AFSDIR_CLIENT_VICE_DIRPATH_ID)
280 #define AFSDIR_CLIENT_ETC_DIRPATH getDirPath(AFSDIR_CLIENT_ETC_DIRPATH_ID)
281 #define AFSDIR_SERVER_BIN_FILE_DIRPATH getDirPath(AFSDIR_SERVER_BIN_FILE_DIRPATH_ID)
283 /* server file paths */
284 #define AFSDIR_SERVER_THISCELL_FILEPATH getDirPath(AFSDIR_SERVER_THISCELL_FILEPATH_ID)
285 #define AFSDIR_SERVER_CELLSERVDB_FILEPATH getDirPath(AFSDIR_SERVER_CELLSERVDB_FILEPATH_ID)
286 #define AFSDIR_SERVER_NOAUTH_FILEPATH getDirPath(AFSDIR_SERVER_NOAUTH_FILEPATH_ID)
287 #define AFSDIR_SERVER_KEY_FILEPATH getDirPath(AFSDIR_SERVER_KEY_FILEPATH_ID)
288 #define AFSDIR_SERVER_ULIST_FILEPATH getDirPath(AFSDIR_SERVER_ULIST_FILEPATH_ID)
289 #define AFSDIR_SERVER_BUDBLOG_FILEPATH getDirPath(AFSDIR_SERVER_BUDBLOG_FILEPATH_ID)
290 #define AFSDIR_SERVER_TAPECONFIG_FILEPATH getDirPath(AFSDIR_SERVER_TAPECONFIG_FILEPATH_ID)
291 #define AFSDIR_SERVER_KALOGDB_FILEPATH getDirPath(AFSDIR_SERVER_KALOGDB_FILEPATH_ID)
292 #define AFSDIR_SERVER_KALOG_FILEPATH getDirPath(AFSDIR_SERVER_KALOG_FILEPATH_ID)
293 #define AFSDIR_SERVER_KADB_FILEPATH getDirPath(AFSDIR_SERVER_KADB_FILEPATH_ID)
294 #define AFSDIR_SERVER_NTPD_FILEPATH getDirPath(AFSDIR_SERVER_NTPD_FILEPATH_ID)
295 #define AFSDIR_SERVER_PRDB_FILEPATH getDirPath(AFSDIR_SERVER_PRDB_FILEPATH_ID)
296 #define AFSDIR_SERVER_PTLOG_FILEPATH getDirPath(AFSDIR_SERVER_PTLOG_FILEPATH_ID)
297 #define AFSDIR_SERVER_KCONF_FILEPATH getDirPath(AFSDIR_SERVER_KCONF_FILEPATH_ID)
298 #define AFSDIR_SERVER_VLDB_FILEPATH getDirPath(AFSDIR_SERVER_VLDB_FILEPATH_ID)
299 #define AFSDIR_SERVER_VLOG_FILEPATH getDirPath(AFSDIR_SERVER_VLOG_FILEPATH_ID)
300 #define AFSDIR_SERVER_CORELOG_FILEPATH getDirPath(AFSDIR_SERVER_CORELOG_FILEPATH_ID)
301 #define AFSDIR_SERVER_SLVGLOG_FILEPATH getDirPath(AFSDIR_SERVER_SLVGLOG_FILEPATH_ID)
302 #define AFSDIR_SERVER_SALVAGER_FILEPATH getDirPath(AFSDIR_SERVER_SALVAGER_FILEPATH_ID)
303 #define AFSDIR_SERVER_BOZCONF_FILEPATH getDirPath(AFSDIR_SERVER_BOZCONF_FILEPATH_ID)
304 #define AFSDIR_SERVER_BOZCONFNEW_FILEPATH getDirPath(AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID)
305 #define AFSDIR_SERVER_BOZINIT_FILEPATH getDirPath(AFSDIR_SERVER_BOZINIT_FILEPATH_ID)
306 #define AFSDIR_SERVER_BOZLOG_FILEPATH getDirPath(AFSDIR_SERVER_BOZLOG_FILEPATH_ID)
307 #define AFSDIR_SERVER_BOSVR_FILEPATH getDirPath(AFSDIR_SERVER_BOSVR_FILEPATH_ID)
308 #define AFSDIR_SERVER_SLVGLOCK_FILEPATH getDirPath(AFSDIR_SERVER_SLVGLOCK_FILEPATH_ID)
309 #define AFSDIR_SERVER_VOLSERLOG_FILEPATH getDirPath(AFSDIR_SERVER_VOLSERLOG_FILEPATH_ID)
310 #define AFSDIR_SERVER_ROOTVOL_FILEPATH getDirPath(AFSDIR_SERVER_ROOTVOL_FILEPATH_ID)
311 #define AFSDIR_SERVER_HOSTDUMP_FILEPATH getDirPath(AFSDIR_SERVER_HOSTDUMP_FILEPATH_ID)
312 #define AFSDIR_SERVER_CLNTDUMP_FILEPATH getDirPath(AFSDIR_SERVER_CLNTDUMP_FILEPATH_ID)
313 #define AFSDIR_SERVER_CBKDUMP_FILEPATH getDirPath(AFSDIR_SERVER_CBKDUMP_FILEPATH_ID)
314 #define AFSDIR_SERVER_OLDSYSID_FILEPATH getDirPath(AFSDIR_SERVER_OLDSYSID_FILEPATH_ID)
315 #define AFSDIR_SERVER_SYSID_FILEPATH getDirPath(AFSDIR_SERVER_SYSID_FILEPATH_ID)
316 #define AFSDIR_SERVER_FILELOG_FILEPATH getDirPath(AFSDIR_SERVER_FILELOG_FILEPATH_ID)
317 #define AFSDIR_SERVER_AUDIT_FILEPATH getDirPath(AFSDIR_SERVER_AUDIT_FILEPATH_ID)
318 #define AFSDIR_SERVER_NETINFO_FILEPATH getDirPath(AFSDIR_SERVER_NETINFO_FILEPATH_ID)
319 #define AFSDIR_SERVER_NETRESTRICT_FILEPATH getDirPath(AFSDIR_SERVER_NETRESTRICT_FILEPATH_ID)
320 #define AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH getDirPath(AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH_ID)
321 #define AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH getDirPath(AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH_ID)
322 #define AFSDIR_SERVER_MIGRATELOG_FILEPATH getDirPath(AFSDIR_SERVER_MIGRATELOG_FILEPATH_ID)
324 /* client file paths */
325 #define AFSDIR_CLIENT_THISCELL_FILEPATH getDirPath(AFSDIR_CLIENT_THISCELL_FILEPATH_ID)
326 #define AFSDIR_CLIENT_CELLSERVDB_FILEPATH getDirPath(AFSDIR_CLIENT_CELLSERVDB_FILEPATH_ID)
327 #define AFSDIR_CLIENT_NETINFO_FILEPATH getDirPath(AFSDIR_CLIENT_NETINFO_FILEPATH_ID)
328 #define AFSDIR_CLIENT_NETRESTRICT_FILEPATH getDirPath(AFSDIR_CLIENT_NETRESTRICT_FILEPATH_ID)
330 #endif /* _DIRPATH_H */