k_afsklog_all_local_cells: new function. Called when cell == NULL.
Tries to obtain tokens for all cells in /usr/vice/etc/TheseCells or /usr/vice/etc/ThisCell. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@384 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -46,26 +46,6 @@ foldup(char *a, char *b)
|
|||||||
*a = '\0';
|
*a = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _PATH_VICE "/usr/vice/etc/"
|
|
||||||
#define _PATH_THISCELL _PATH_VICE "ThisCell"
|
|
||||||
#define _PATH_CELLSERVDB _PATH_VICE "CellServDB"
|
|
||||||
|
|
||||||
static char *
|
|
||||||
k_cell(void)
|
|
||||||
{
|
|
||||||
static char cell[64];
|
|
||||||
|
|
||||||
FILE *f = fopen(_PATH_THISCELL, "r");
|
|
||||||
if (f == 0)
|
|
||||||
return 0;
|
|
||||||
fscanf(f, "%s\n", cell);
|
|
||||||
fclose(f);
|
|
||||||
if (cell[0] != 0)
|
|
||||||
return cell;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_cred(char *princ, char *inst, char *krealm, CREDENTIALS *c, KTEXT_ST *tkt)
|
get_cred(char *princ, char *inst, char *krealm, CREDENTIALS *c, KTEXT_ST *tkt)
|
||||||
{
|
{
|
||||||
@@ -142,6 +122,33 @@ realm_of_cell(char *cell)
|
|||||||
return realm;
|
return realm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try to find the cells we should try to klog to. Look at
|
||||||
|
* /usr/vice/etc/TheseCells and /usr/vice/etc/ThisCell,
|
||||||
|
* in that order.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
k_afsklog_all_local_cells (char *krealm)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
char cell[64];
|
||||||
|
int err;
|
||||||
|
|
||||||
|
f = fopen(_PATH_THESECELLS, "r");
|
||||||
|
if (f == NULL)
|
||||||
|
f = fopen(_PATH_THISCELL, "r");
|
||||||
|
if (f == NULL)
|
||||||
|
return KSUCCESS;
|
||||||
|
err = KSUCCESS;
|
||||||
|
while(fgets(cell, sizeof(cell), f) && err == KSUCCESS) {
|
||||||
|
cell[strlen(cell) - 1] = '\0';
|
||||||
|
err = k_afsklog (cell, krealm);
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
k_afsklog(char *cell, char *krealm)
|
k_afsklog(char *cell, char *krealm)
|
||||||
{
|
{
|
||||||
@@ -153,15 +160,11 @@ k_afsklog(char *cell, char *krealm)
|
|||||||
char *lrealm; /* local realm */
|
char *lrealm; /* local realm */
|
||||||
char CELL[64];
|
char CELL[64];
|
||||||
|
|
||||||
char *realms[4], **r;
|
|
||||||
|
|
||||||
if (!k_hasafs())
|
if (!k_hasafs())
|
||||||
return KSUCCESS;
|
return KSUCCESS;
|
||||||
|
|
||||||
if (cell == 0 || cell[0] == 0)
|
if (cell == 0 || cell[0] == 0)
|
||||||
cell = k_cell();
|
return k_afsklog_all_local_cells (krealm);
|
||||||
if (cell == 0)
|
|
||||||
return KSUCCESS; /* Not running AFS */
|
|
||||||
foldup(CELL, cell);
|
foldup(CELL, cell);
|
||||||
|
|
||||||
vl_realm = realm_of_cell(cell);
|
vl_realm = realm_of_cell(cell);
|
||||||
|
Reference in New Issue
Block a user