use-consistent-data-typing-for-hosts-20010404
[openafs.git] / src / util / dirpath.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
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
8  */
9
10 #ifndef _DIRPATH_H
11 #define _DIRPATH_H
12
13 /* Dirpath package: Rationale and Usage
14  *
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.
19  *
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).
27  *
28  * Thus file paths can no longer be hard-coded; rather, all file paths are
29  * specified via the macros provided by this package.
30  *
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.
38  *
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.
43  *
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.
50  *
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.
55  */
56
57
58
59 #include <afs/param.h>
60
61 #ifdef AFS_NT40_ENV
62 #include <windef.h>
63 #endif
64 #include <limits.h>
65
66 /* Max dir path size for afs install dirs */
67 #ifdef AFS_NT40_ENV
68 #define AFSDIR_PATH_MAX MAX_PATH
69 #else /* unices */
70 #define AFSDIR_PATH_MAX    _POSIX_PATH_MAX
71 #endif
72  
73
74 /* ---------------------  Exported functions ---------------------- */
75
76
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);
80
81 extern int
82 ConstructLocalPath(const char *cpath,
83                    const char *relativeTo,
84                    char **fullPathBufp);
85 extern int
86 ConstructLocalBinPath(const char *cpath,
87                       char **fullPathBufp);
88 extern int
89 ConstructLocalLogPath(const char *cpath,
90                       char **fullPathBufp);
91
92
93
94 /* -----------------  Directory/file name macros ------------------ */
95
96 /* afs installation dir names */
97 #define AFSDIR_ETC_DIR   "etc"
98 #define AFSDIR_BIN_DIR   "bin"
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
107 /* file names */ 
108 #define AFSDIR_THISCELL_FILE    "ThisCell"
109 #define AFSDIR_CELLSERVDB_FILE  "CellServDB"
110 #define AFSDIR_KEY_FILE         "KeyFile"
111 #define AFSDIR_ULIST_FILE       "UserList"
112 #define AFSDIR_NOAUTH_FILE      "NoAuth"
113 #define AFSDIR_BUDBLOG_FILE     "BackupLog"
114 #define AFSDIR_TAPECONFIG_FILE  "tapeconfig"
115 #define AFSDIR_KALOGDB_FILE     "AuthLog"
116 #define AFSDIR_KALOG_FILE       "AuthLog"
117 #define AFSDIR_KADB_FILE        "kaserver"
118 #define AFSDIR_NTPD_FILE        "ntpd"
119 #define AFSDIR_PRDB_FILE        "prdb"
120 #define AFSDIR_PTLOG_FILE       "PtLog"
121 #define AFSDIR_KCONF_FILE       "krb.conf"
122 #define AFSDIR_VLDB_FILE        "vldb"
123 #define AFSDIR_VLOG_FILE        "VLLog"
124 #define AFSDIR_CORE_FILE        "core"
125 #define AFSDIR_SLVGLOG_FILE     "SalvageLog"
126 #define AFSDIR_SALVAGER_FILE    "salvager"
127 #define AFSDIR_SLVGLOCK_FILE    "salvage.lock"
128 #define AFSDIR_BOZCONF_FILE     "BosConfig"
129 #define AFSDIR_BOZCONFNEW_FILE  "BosConfig.new"
130 #define AFSDIR_BOZINIT_FILE     "BozoInit"
131 #define AFSDIR_BOZLOG_FILE      "BosLog"
132 #define AFSDIR_BOSVR_FILE       "bosserver"
133 #define AFSDIR_VOLSERLOG_FILE   "VolserLog"
134 #define AFSDIR_AUDIT_FILE       "Audit"
135
136 #define AFSDIR_ROOTVOL_FILE     "RootVolume"
137 #define AFSDIR_HOSTDUMP_FILE    "hosts.dump"
138 #define AFSDIR_CLNTDUMP_FILE    "client.dump"
139 #define AFSDIR_CBKDUMP_FILE     "callback.dump"
140 #define AFSDIR_OLDSYSID_FILE    "sysid.old"
141 #define AFSDIR_SYSID_FILE       "sysid"
142 #define AFSDIR_FILELOG_FILE     "FileLog"
143 #define AFSDIR_MIGRATE_LOGNAME  "wtlog."
144
145 #define AFSDIR_CELLSERVDB_FILE_NTCLIENT  "afsdcell.ini"
146
147 #define AFSDIR_NETINFO_FILE     "NetInfo"
148 #define AFSDIR_NETRESTRICT_FILE "NetRestrict"
149
150 #define AFSDIR_LOCALRESIDENCY_FILE "LocalResidency"
151 #define AFSDIR_WEIGHTINGCONST_FILE "Weight.LocalConstants"
152 #define AFSDIR_THRESHOLDCONST_FILE "Thershold.LocalConstants"
153
154 /* -------------- Canonical (wire-format) path macros -------------- */
155
156 /* Each of the following is a canonical form of the corresponding
157  * local (AFSDIR_*) path macro.
158  */
159
160 #define AFSDIR_CANONICAL_USR_DIRPATH            "/usr"
161 #define AFSDIR_CANONICAL_SERVER_AFS_DIRPATH     "/usr/afs"
162 #define AFSDIR_CANONICAL_CLIENT_VICE_DIRPATH    "/usr/vice"
163 #ifdef AFS_DARWIN_ENV
164 #define AFSDIR_ALTERNATE_CLIENT_VICE_DIRPATH    "/var/db/openafs"
165 #endif
166
167 #define AFSDIR_CANONICAL_SERVER_BIN_DIRPATH \
168 AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/" AFSDIR_BIN_DIR
169
170 #define AFSDIR_CANONICAL_SERVER_ETC_DIRPATH \
171 AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/" AFSDIR_ETC_DIR
172
173 #define AFSDIR_CANONICAL_SERVER_LOGS_DIRPATH \
174 AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/" AFSDIR_LOGS_DIR
175
176 #define AFSDIR_CANONICAL_SERVER_LOCAL_DIRPATH \
177 AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/" AFSDIR_LOCAL_DIR
178
179
180 #define AFSDIR_CANONICAL_SERVER_SALVAGER_FILEPATH \
181 AFSDIR_CANONICAL_SERVER_BIN_DIRPATH "/" AFSDIR_SALVAGER_FILE
182
183 #define AFSDIR_CANONICAL_SERVER_SLVGLOG_FILEPATH \
184 AFSDIR_CANONICAL_SERVER_LOGS_DIRPATH "/" AFSDIR_SLVGLOG_FILE
185
186
187 /* ---------------------  Local path macros ---------------------- */
188
189 /* Note: On NT, these should be used only after calling initAFSDirPath().
190  *       On Unix, the paths are implicitly initialized.
191  */
192
193 /* enums for indexes into the pathname array */
194 typedef enum afsdir_id { 
195       AFSDIR_USR_DIRPATH_ID,
196       AFSDIR_SERVER_AFS_DIRPATH_ID,
197       AFSDIR_SERVER_ETC_DIRPATH_ID,
198       AFSDIR_SERVER_BIN_DIRPATH_ID,
199       AFSDIR_SERVER_CORES_DIRPATH_ID,
200       AFSDIR_SERVER_DB_DIRPATH_ID,
201       AFSDIR_SERVER_LOGS_DIRPATH_ID,
202       AFSDIR_SERVER_LOCAL_DIRPATH_ID,
203       AFSDIR_SERVER_BACKUP_DIRPATH_ID,
204       AFSDIR_CLIENT_VICE_DIRPATH_ID,
205       AFSDIR_CLIENT_ETC_DIRPATH_ID,
206       AFSDIR_SERVER_THISCELL_FILEPATH_ID,
207       AFSDIR_SERVER_CELLSERVDB_FILEPATH_ID,
208       AFSDIR_SERVER_NOAUTH_FILEPATH_ID,
209       AFSDIR_SERVER_KEY_FILEPATH_ID,
210       AFSDIR_SERVER_ULIST_FILEPATH_ID,
211       AFSDIR_SERVER_BUDBLOG_FILEPATH_ID,
212       AFSDIR_SERVER_TAPECONFIG_FILEPATH_ID,
213       AFSDIR_SERVER_KALOGDB_FILEPATH_ID,
214       AFSDIR_SERVER_KALOG_FILEPATH_ID,
215       AFSDIR_SERVER_KADB_FILEPATH_ID,
216       AFSDIR_SERVER_NTPD_FILEPATH_ID,
217       AFSDIR_SERVER_PRDB_FILEPATH_ID,
218       AFSDIR_SERVER_PTLOG_FILEPATH_ID,
219       AFSDIR_SERVER_KCONF_FILEPATH_ID,
220       AFSDIR_SERVER_VLDB_FILEPATH_ID,
221       AFSDIR_SERVER_VLOG_FILEPATH_ID,
222       AFSDIR_SERVER_CORELOG_FILEPATH_ID,
223       AFSDIR_SERVER_SLVGLOG_FILEPATH_ID,
224       AFSDIR_SERVER_SALVAGER_FILEPATH_ID,
225       AFSDIR_SERVER_BOZCONF_FILEPATH_ID,
226       AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID,
227       AFSDIR_SERVER_BOZINIT_FILEPATH_ID,
228       AFSDIR_SERVER_BOZLOG_FILEPATH_ID,
229       AFSDIR_SERVER_BOSVR_FILEPATH_ID,
230       AFSDIR_SERVER_SLVGLOCK_FILEPATH_ID,
231       AFSDIR_SERVER_VOLSERLOG_FILEPATH_ID,
232       AFSDIR_SERVER_ROOTVOL_FILEPATH_ID,
233       AFSDIR_SERVER_HOSTDUMP_FILEPATH_ID,
234       AFSDIR_SERVER_CLNTDUMP_FILEPATH_ID,
235       AFSDIR_SERVER_CBKDUMP_FILEPATH_ID,
236       AFSDIR_SERVER_OLDSYSID_FILEPATH_ID,
237       AFSDIR_SERVER_SYSID_FILEPATH_ID,
238       AFSDIR_SERVER_FILELOG_FILEPATH_ID,
239       AFSDIR_SERVER_AUDIT_FILEPATH_ID,
240       AFSDIR_CLIENT_THISCELL_FILEPATH_ID,
241       AFSDIR_CLIENT_CELLSERVDB_FILEPATH_ID,
242       AFSDIR_CLIENT_NETINFO_FILEPATH_ID,
243       AFSDIR_CLIENT_NETRESTRICT_FILEPATH_ID,
244       AFSDIR_SERVER_NETINFO_FILEPATH_ID,
245       AFSDIR_SERVER_NETRESTRICT_FILEPATH_ID,
246       AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH_ID,
247       AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH_ID,
248       AFSDIR_SERVER_MIGRATE_DIRPATH_ID,
249       AFSDIR_SERVER_MIGRATELOG_FILEPATH_ID,
250       AFSDIR_SERVER_BIN_FILE_DIRPATH_ID,
251       AFSDIR_PATHSTRING_MAX } afsdir_id_t;
252
253 /* getDirPath() returns a pointer to a string from an internal array of path strings 
254  */
255 const char *getDirPath(afsdir_id_t string_id);
256
257 /* Top level usr dir */
258 #define AFSDIR_USR_DIRPATH getDirPath(AFSDIR_USR_DIRPATH_ID)
259
260 /* server subdir paths */
261 #define AFSDIR_SERVER_AFS_DIRPATH getDirPath(AFSDIR_SERVER_AFS_DIRPATH_ID)
262 #define AFSDIR_SERVER_ETC_DIRPATH getDirPath(AFSDIR_SERVER_ETC_DIRPATH_ID)
263 #define AFSDIR_SERVER_BIN_DIRPATH getDirPath(AFSDIR_SERVER_BIN_DIRPATH_ID)
264 #define AFSDIR_SERVER_CORES_DIRPATH getDirPath(AFSDIR_SERVER_CORES_DIRPATH_ID)
265 #define AFSDIR_SERVER_DB_DIRPATH getDirPath(AFSDIR_SERVER_DB_DIRPATH_ID)
266 #define AFSDIR_SERVER_LOGS_DIRPATH getDirPath(AFSDIR_SERVER_LOGS_DIRPATH_ID)
267 #define AFSDIR_SERVER_LOCAL_DIRPATH getDirPath(AFSDIR_SERVER_LOCAL_DIRPATH_ID)
268 #define AFSDIR_SERVER_BACKUP_DIRPATH getDirPath(AFSDIR_SERVER_BACKUP_DIRPATH_ID)
269 #define AFSDIR_SERVER_LOCAL_DIRPATH getDirPath(AFSDIR_SERVER_LOCAL_DIRPATH_ID)
270 #define AFSDIR_SERVER_MIGRATE_DIRPATH getDirPath(AFSDIR_SERVER_MIGRATE_DIRPATH_ID)
271 #define AFSDIR_SERVER_MIGRATE_DIRPATH getDirPath(AFSDIR_SERVER_MIGRATE_DIRPATH_ID)
272
273 /* client subdir paths */
274 #define AFSDIR_CLIENT_VICE_DIRPATH getDirPath(AFSDIR_CLIENT_VICE_DIRPATH_ID)
275 #define AFSDIR_CLIENT_ETC_DIRPATH getDirPath(AFSDIR_CLIENT_ETC_DIRPATH_ID)
276 #define AFSDIR_SERVER_BIN_FILE_DIRPATH getDirPath(AFSDIR_SERVER_BIN_FILE_DIRPATH_ID)
277
278 /* server file paths */
279 #define AFSDIR_SERVER_THISCELL_FILEPATH getDirPath(AFSDIR_SERVER_THISCELL_FILEPATH_ID)
280 #define AFSDIR_SERVER_CELLSERVDB_FILEPATH getDirPath(AFSDIR_SERVER_CELLSERVDB_FILEPATH_ID)
281 #define AFSDIR_SERVER_NOAUTH_FILEPATH getDirPath(AFSDIR_SERVER_NOAUTH_FILEPATH_ID)
282 #define AFSDIR_SERVER_KEY_FILEPATH getDirPath(AFSDIR_SERVER_KEY_FILEPATH_ID)
283 #define AFSDIR_SERVER_ULIST_FILEPATH getDirPath(AFSDIR_SERVER_ULIST_FILEPATH_ID)
284 #define AFSDIR_SERVER_BUDBLOG_FILEPATH getDirPath(AFSDIR_SERVER_BUDBLOG_FILEPATH_ID)
285 #define AFSDIR_SERVER_TAPECONFIG_FILEPATH getDirPath(AFSDIR_SERVER_TAPECONFIG_FILEPATH_ID)
286 #define AFSDIR_SERVER_KALOGDB_FILEPATH getDirPath(AFSDIR_SERVER_KALOGDB_FILEPATH_ID)
287 #define AFSDIR_SERVER_KALOG_FILEPATH getDirPath(AFSDIR_SERVER_KALOG_FILEPATH_ID)
288 #define AFSDIR_SERVER_KADB_FILEPATH getDirPath(AFSDIR_SERVER_KADB_FILEPATH_ID)
289 #define AFSDIR_SERVER_NTPD_FILEPATH getDirPath(AFSDIR_SERVER_NTPD_FILEPATH_ID)
290 #define AFSDIR_SERVER_PRDB_FILEPATH getDirPath(AFSDIR_SERVER_PRDB_FILEPATH_ID)
291 #define AFSDIR_SERVER_PTLOG_FILEPATH getDirPath(AFSDIR_SERVER_PTLOG_FILEPATH_ID)
292 #define AFSDIR_SERVER_KCONF_FILEPATH getDirPath(AFSDIR_SERVER_KCONF_FILEPATH_ID)
293 #define AFSDIR_SERVER_VLDB_FILEPATH getDirPath(AFSDIR_SERVER_VLDB_FILEPATH_ID)
294 #define AFSDIR_SERVER_VLOG_FILEPATH getDirPath(AFSDIR_SERVER_VLOG_FILEPATH_ID)
295 #define AFSDIR_SERVER_CORELOG_FILEPATH getDirPath(AFSDIR_SERVER_CORELOG_FILEPATH_ID)
296 #define AFSDIR_SERVER_SLVGLOG_FILEPATH getDirPath(AFSDIR_SERVER_SLVGLOG_FILEPATH_ID)
297 #define AFSDIR_SERVER_SALVAGER_FILEPATH getDirPath(AFSDIR_SERVER_SALVAGER_FILEPATH_ID)
298 #define AFSDIR_SERVER_BOZCONF_FILEPATH getDirPath(AFSDIR_SERVER_BOZCONF_FILEPATH_ID)
299 #define AFSDIR_SERVER_BOZCONFNEW_FILEPATH getDirPath(AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID)
300 #define AFSDIR_SERVER_BOZINIT_FILEPATH getDirPath(AFSDIR_SERVER_BOZINIT_FILEPATH_ID)
301 #define AFSDIR_SERVER_BOZLOG_FILEPATH getDirPath(AFSDIR_SERVER_BOZLOG_FILEPATH_ID)
302 #define AFSDIR_SERVER_BOSVR_FILEPATH getDirPath(AFSDIR_SERVER_BOSVR_FILEPATH_ID)
303 #define AFSDIR_SERVER_SLVGLOCK_FILEPATH getDirPath(AFSDIR_SERVER_SLVGLOCK_FILEPATH_ID)
304 #define AFSDIR_SERVER_VOLSERLOG_FILEPATH getDirPath(AFSDIR_SERVER_VOLSERLOG_FILEPATH_ID)
305 #define AFSDIR_SERVER_ROOTVOL_FILEPATH getDirPath(AFSDIR_SERVER_ROOTVOL_FILEPATH_ID)
306 #define AFSDIR_SERVER_HOSTDUMP_FILEPATH getDirPath(AFSDIR_SERVER_HOSTDUMP_FILEPATH_ID)
307 #define AFSDIR_SERVER_CLNTDUMP_FILEPATH getDirPath(AFSDIR_SERVER_CLNTDUMP_FILEPATH_ID)
308 #define AFSDIR_SERVER_CBKDUMP_FILEPATH getDirPath(AFSDIR_SERVER_CBKDUMP_FILEPATH_ID)
309 #define AFSDIR_SERVER_OLDSYSID_FILEPATH getDirPath(AFSDIR_SERVER_OLDSYSID_FILEPATH_ID)
310 #define AFSDIR_SERVER_SYSID_FILEPATH getDirPath(AFSDIR_SERVER_SYSID_FILEPATH_ID)
311 #define AFSDIR_SERVER_FILELOG_FILEPATH getDirPath(AFSDIR_SERVER_FILELOG_FILEPATH_ID)
312 #define AFSDIR_SERVER_AUDIT_FILEPATH getDirPath(AFSDIR_SERVER_AUDIT_FILEPATH_ID)
313 #define AFSDIR_SERVER_NETINFO_FILEPATH getDirPath(AFSDIR_SERVER_NETINFO_FILEPATH_ID)
314 #define AFSDIR_SERVER_NETRESTRICT_FILEPATH getDirPath(AFSDIR_SERVER_NETRESTRICT_FILEPATH_ID)
315 #define AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH getDirPath(AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH_ID)
316 #define AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH getDirPath(AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH_ID)
317 #define AFSDIR_SERVER_MIGRATELOG_FILEPATH getDirPath(AFSDIR_SERVER_MIGRATELOG_FILEPATH_ID)
318
319 /* client file paths */
320 #define AFSDIR_CLIENT_THISCELL_FILEPATH getDirPath(AFSDIR_CLIENT_THISCELL_FILEPATH_ID)
321 #define AFSDIR_CLIENT_CELLSERVDB_FILEPATH getDirPath(AFSDIR_CLIENT_CELLSERVDB_FILEPATH_ID)  
322 #define AFSDIR_CLIENT_NETINFO_FILEPATH getDirPath(AFSDIR_CLIENT_NETINFO_FILEPATH_ID)
323 #define AFSDIR_CLIENT_NETRESTRICT_FILEPATH getDirPath(AFSDIR_CLIENT_NETRESTRICT_FILEPATH_ID)
324
325 #endif /* _DIRPATH_H */