confname[sizeof(confname) - 2] = '\0';
}
- /*
- * Talk about DUMB! It turns out that there is a bug in
- * pr_Initialize -- even if you give a different cell name
- * to it, it still uses a connection to a previous AFS server
- * if one exists. The way to fix this is to change the
- * _filename_ argument to pr_Initialize - that forces it to
- * re-initialize the connection. We do this by adding and
- * removing a "/" on the end of the configuration directory name.
- */
-
- if (lastcell[0] != '\0' && (strcmp(lastcell, aserver->cell) != 0)) {
- int i = strlen(confname);
- if (confname[i - 1] == '/') {
- confname[i - 1] = '\0';
- } else {
- confname[i] = '/';
- confname[i + 1] = '\0';
- }
- }
-
strcpy(lastcell, aserver->cell);
if (!pr_Initialize (0, confname, aserver->cell))
strncpy(aclient->cell, realm_of_user, MAXKTCREALMLEN - 1);
if (status = ktc_SetToken(aserver, atoken, aclient, 0))
return status;
-
- /*
- * In case you're wondering, we don't need to change the
- * filename here because we're still connecting to the
- * same cell -- we're just using a different authentication
- * level
- */
-
if (status = pr_Initialize(1L, confname, aserver->cell))
return status;
if (status = pr_CreateUser(username, &id))
if (dflag)
printf("About to resolve name %s to id\n", username);
+#ifdef COMMENT
/*
* Talk about DUMB! It turns out that there is a bug in
* pr_Initialize -- even if you give a different cell name
confname[i + 1] = '\0';
}
}
+#endif
strcpy(lastcell, aserver->cell);
params.pstdout(msgbuf);
}
- /*
- * Talk about DUMB! It turns out that there is a bug in
- * pr_Initialize -- even if you give a different cell name
- * to it, it still uses a connection to a previous AFS server
- * if one exists. The way to fix this is to change the
- * _filename_ argument to pr_Initialize - that forces it to
- * re-initialize the connection. We do this by adding and
- * removing a "/" on the end of the configuration directory name.
- */
-
- if (lastcell[0] != '\0' && (strcmp(lastcell, aserver.cell) != 0)) {
- int i = strlen(confname);
- if (confname[i - 1] == '/') {
- confname[i - 1] = '\0';
- } else {
- confname[i] = '/';
- confname[i + 1] = '\0';
- }
- }
-
strcpy(lastcell, aserver.cell);
if (!pr_Initialize (0, confname, aserver.cell, 0))
struct rx_securityClass *sc[3];
static struct afsconf_dir *tdir = 0; /* only do this once */
static char tconfDir[100];
+ static char tcell[64];
struct ktc_token ttoken;
afs_int32 scIndex;
static struct afsconf_cell info;
initialize_ACFG_error_table();
initialize_KTC_error_table();
- if (strcmp(confDir, tconfDir)) {
+#if defined(UKERNEL)
+ if (!cell) {
+ cell = afs_LclCellName;
+ }
+#else /* defined(UKERNEL) */
+ if (!cell) {
+ code = afsconf_GetLocalCell(tdir, cellstr, sizeof(cellstr));
+ if (code) {
+ fprintf(stderr,
+ "vos: can't get local cell name - check %s/%s\n",
+ confDir, AFSDIR_THISCELL_FILE);
+ exit(1);
+ }
+ cell = cellstr;
+ }
+#endif /* defined(UKERNEL) */
+
+ if (strcmp(confDir, tconfDir) || strcmp(cell, tcell)) {
/*
* Different conf dir; force re-evaluation.
*/
tdir = (struct afsconf_dir *)0;
pruclient = (struct ubik_client *)0;
}
+
if (tdir == 0) {
strncpy(tconfDir, confDir, sizeof(tconfDir));
+ strncpy(tcell, cell, sizeof(tcell));
+
#if defined(UKERNEL)
tdir = afs_cdir;
- if (!cell) {
- cell = afs_LclCellName;
- }
#else /* defined(UKERNEL) */
tdir = afsconf_Open(confDir);
if (!tdir) {
confDir);
return -1;
}
-
- if (!cell) {
- code = afsconf_GetLocalCell(tdir, cellstr, sizeof(cellstr));
- if (code) {
- fprintf(stderr,
- "vos: can't get local cell name - check %s/%s\n",
- confDir, AFSDIR_THISCELL_FILE);
- exit(1);
- }
- cell = cellstr;
- }
#endif /* defined(UKERNEL) */
code = afsconf_GetCellInfo(tdir, cell, "afsprot", &info);