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
11 * Storage for common variables employed by the AFS user
16 * --------------------- Required definitions ---------------------
18 #include <afsconfig.h>
19 #include <afs/param.h>
23 #include <afs/kautils.h> /*MAXKTCREALMLEN & MAXKTCNAMELEN */
25 #include "uss_common.h" /*Interface definitions */
28 * ---------------------- Exported variables ----------------------
30 #define uss_AutoLen 300
31 #define uss_NumVars 10
33 char uss_User
[uss_UserLen
+ 1]; /*User's account name */
34 char uss_Uid
[uss_UidLen
+ 1]; /*User's uid */
35 char uss_Server
[uss_ServerLen
+ 1]; /*FileServer hosting user's volume */
36 char uss_Partition
[uss_PartitionLen
+ 1]; /*FileServer partition for above */
37 char uss_MountPoint
[uss_MountPointLen
+ 1]; /*Mountpoint for user's volume */
38 char uss_RealName
[uss_RealNameLen
+ 1]; /*User's full name */
39 char uss_Pwd
[uss_PwdLen
+ 1]; /*User password */
40 char uss_PwdPath
[uss_PwdPathLen
+ 1]; /*Curr pathname to password file */
41 char uss_PwdFormat
[uss_PwdFormatLen
+ 1]; /*Curr password entry format */
42 char uss_RestoreDir
[uss_RestoreDirLen
+ 1]; /*Curr directory for restore info */
43 char uss_Auto
[uss_AutoLen
+ 1]; /*Curr choice of AUTO value */
44 char uss_Var
[uss_NumVars
][uss_MAX_ARG_SIZE
]; /*$1, $2, ... command variables */
45 int uss_VarMax
= 0; /*Largest index in above */
46 char uss_Volume
[uss_VolumeLen
+ 1]; /*Name of user's volume */
47 afs_int32 uss_VolumeID
; /*Numerical volume ID */
48 afs_int32 uss_ServerID
; /*Numerical server ID */
49 afs_int32 uss_PartitionID
; /*Numerical partition ID */
50 char uss_DirPool
[100][uss_DirPoolLen
]; /*List of all acceptable subdirs */
54 * Values saved across invocations.
56 char uss_PwdPath_Saved
[uss_PwdPathLen
]; /*Pathname to saved pwd file */
57 char uss_PwdFormat_Saved
[uss_PwdFormatLen
]; /*Saved pwd entry format */
58 char uss_RestoreDir_Saved
[uss_RestoreDirLen
]; /*Saved dir for restore info */
60 int uss_NumGroups
= 0; /*Number of $AUTO entries */
61 int uss_SaveVolume
; /*Save current user volume? */
62 int uss_SaveVolume_Saved
; /*Saved value of above */
63 int uss_DryRun
= 0; /*Is this a dry run? */
64 int uss_SkipKaserver
= 0; /*Don't talk to kaserver */
65 int uss_Overwrite
= 0; /*Overwrite user files? */
66 int uss_OverwriteThisOne
; /*Overwrite on this pass? */
67 char uss_Administrator
[64]; /*Name of admin account */
68 char uss_AccountCreator
[MAXKTCNAMELEN
]; /*Principal running this program */
69 afs_int32 uss_DesiredUID
; /*Uid to assign the user */
70 afs_int32 uss_Expires
; /*How long between password expires */
71 char uss_Cell
[MAXKTCREALMLEN
]; /*Cell in which account lives */
72 char uss_ConfDir
[uss_PATH_SIZE
]; /*Config directory */
73 int uss_verbose
= 0; /*Are we being verbose? */
74 int uss_ignoreFlag
= 0; /*Ignore yyparse errors? */
76 char uss_whoami
[64]; /*Program name used */
77 int uss_syntax_err
= 0; /*YACC syntax error? */
78 struct uss_subdir
*uss_currentDir
= NULL
; /*Current directory */
82 * ----------------------- Private variables ----------------------
84 static int initDone
= 0; /*Have we been initialized? */
87 /*------------------------------------------------------------------------
88 * EXPORTED uss_common_Init
91 * Set up various common uss variables, especially the saved ones.
100 * We only allow an initialization once.
104 *------------------------------------------------------------------------*/
107 uss_common_Init(void)
108 { /*uss_common_Init */
110 extern int line
; /*Current template line */
115 strcpy(uss_ConfDir
, AFSDIR_CLIENT_ETC_DIRPATH
);
116 uss_PwdPath_Saved
[0] = '\0';
117 uss_PwdFormat_Saved
[0] = '\0';
118 uss_RestoreDir_Saved
[0] = '\0';
119 uss_SaveVolume_Saved
= 0;
123 } /*uss_common_Init */
126 /*------------------------------------------------------------------------
127 * EXPORTED uss_common_Reset
130 * Resets some of the common variables to their idle or
140 * Nothing interesting.
144 *------------------------------------------------------------------------*/
147 uss_common_Reset(void)
148 { /*uss_common_Reset */
150 extern int line
; /*Current template line */
151 int i
; /*Loop variable */
156 uss_currentDir
= NULL
;
161 uss_Server
[0] = '\0';
162 uss_Partition
[0] = '\0';
163 uss_MountPoint
[0] = '\0';
164 uss_RealName
[0] = '\0';
165 sprintf(uss_Pwd
, "%s", uss_DEFAULT_PASSWORD
);
166 strcpy(uss_PwdPath
, uss_PwdPath_Saved
);
167 strcpy(uss_PwdFormat
, uss_PwdFormat_Saved
);
168 strcpy(uss_RestoreDir
, uss_RestoreDir_Saved
);
169 uss_SaveVolume
= uss_SaveVolume_Saved
;
171 for (i
= 1; i
< 10; i
++)
172 uss_Var
[i
][0] = '\0';
175 * Reset the template line you think you're reading from, and
176 * remember you haven't seen any template file parsing errors
182 } /*uss_common_Reset */
185 /*------------------------------------------------------------------------
186 * EXPORTED uss_common_FieldCp
189 * Nothing interesting.
193 *------------------------------------------------------------------------*/
196 uss_common_FieldCp(char *a_to
, char *a_from
, char a_separator
,
197 int a_maxChars
, int *a_overflowP
)
198 { /*uss_common_FieldCp */
200 int chars_read
; /*Number of chars read so far */
205 * It's OK to read in the separator/null after reading a_maxChars,
206 * so we need to bump a_maxChars by one.
210 while (*a_from
!= a_separator
&& *a_from
!= '\0' && *a_from
!= '\n') {
212 if (++chars_read
>= a_maxChars
) {
214 * Bummer, we've overflowed. Remember the sad fact, and
215 * move the destination pointer back over the extra
216 * character. Also, skip over any garbage sitting after
217 * the characters that won't fit in to the given field.
222 printf("*** Skipping overflow char '%c'\n", *(a_from
- 1));
224 while (*a_from
!= a_separator
&& *a_from
!= '\0'
225 && *a_from
!= '\n') {
227 printf("*** Skipping overflow char '%c'\n", *a_from
);
230 } /*Skip over excess chars */
232 } /*Found overflow */
233 } /*Read til end of field */
236 * Make sure we return a null-terminated string.
241 * Collapse any number of blanks, should we have ended up pointing
244 if (a_separator
== ' ')
245 while ((*a_from
== ' ') && (*(a_from
+ 1) == ' '))
249 * Return the position of the next non-separator char or
250 * the position of the null, if that's what was left.
257 } /*uss_common_FieldCp */