diff --git a/src/WINNT/aklog/aklog.c b/src/WINNT/aklog/aklog.c index 9b37eb8825..5bb3b0264a 100644 --- a/src/WINNT/aklog/aklog.c +++ b/src/WINNT/aklog/aklog.c @@ -196,6 +196,28 @@ void ViceIDToUsername(char *username, char *realm_of_user, char *realm_of_cell, 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 + * 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'; + } + } +#endif + strcpy(lastcell, aserver->cell); if (!pr_Initialize (0, confname, aserver->cell)) { @@ -257,6 +279,13 @@ void ViceIDToUsername(char *username, char *realm_of_user, char *realm_of_cell, return ; } + /* + * 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))) { printf("Error %d\n", status); return; diff --git a/src/aklog/aklog_main.c b/src/aklog/aklog_main.c index 8bab3b1281..709de20371 100644 --- a/src/aklog/aklog_main.c +++ b/src/aklog/aklog_main.c @@ -694,26 +694,6 @@ static int auth_to_cell(context, cell, realm) 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)) diff --git a/src/ptserver/ptuser.c b/src/ptserver/ptuser.c index 3d6d11a2e8..e33e84932d 100644 --- a/src/ptserver/ptuser.c +++ b/src/ptserver/ptuser.c @@ -73,6 +73,7 @@ pr_Initialize(IN afs_int32 secLevel, IN char *confDir, IN char *cell) 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; @@ -84,7 +85,24 @@ pr_Initialize(IN afs_int32 secLevel, IN char *confDir, IN char *cell) 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. */ @@ -93,13 +111,13 @@ pr_Initialize(IN afs_int32 secLevel, IN char *confDir, IN char *cell) 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) { @@ -109,17 +127,6 @@ pr_Initialize(IN afs_int32 secLevel, IN char *confDir, IN char *cell) 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);