new support for specifying homedir

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@5143 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
1998-09-04 16:25:46 +00:00
parent 35d205c57c
commit d5c71ea58e
5 changed files with 88 additions and 24 deletions

View File

@@ -60,7 +60,8 @@ get_cred(kafs_data *data, const char *name, const char *inst,
} }
static int static int
afslog_uid_int(kafs_data *data, const char *cell, uid_t uid) afslog_uid_int(kafs_data *data, const char *cell, uid_t uid,
const char *homedir)
{ {
int ret; int ret;
CREDENTIALS c; CREDENTIALS c;
@@ -68,7 +69,7 @@ afslog_uid_int(kafs_data *data, const char *cell, uid_t uid)
char realm[REALM_SZ], *lrealm; char realm[REALM_SZ], *lrealm;
if (cell == 0 || cell[0] == 0) if (cell == 0 || cell[0] == 0)
return _kafs_afslog_all_local_cells (data, uid); return _kafs_afslog_all_local_cells (data, uid, homedir);
ret = krb_get_lrealm(realm , 0); ret = krb_get_lrealm(realm , 0);
if(ret == KSUCCESS && (d->realm == NULL || strcmp(d->realm, realm))) if(ret == KSUCCESS && (d->realm == NULL || strcmp(d->realm, realm)))
@@ -94,7 +95,8 @@ get_realm(kafs_data *data, const char *host)
} }
int int
krb_afslog_uid(const char *cell, const char *realm, uid_t uid) krb_afslog_uid_home(const char *cell, const char *realm, uid_t uid,
const char *homedir)
{ {
kafs_data kd; kafs_data kd;
struct krb_kafs_data d; struct krb_kafs_data d;
@@ -104,7 +106,13 @@ krb_afslog_uid(const char *cell, const char *realm, uid_t uid)
kd.get_realm = get_realm; kd.get_realm = get_realm;
kd.data = &d; kd.data = &d;
d.realm = realm; d.realm = realm;
return afslog_uid_int(&kd, cell, uid); return afslog_uid_int(&kd, cell, uid, homedir);
}
int
krb_afslog_uid(const char *cell, const char *realm, uid_t uid)
{
return krb_afslog_uid_home (cell, realm, uid, NULL);
} }
int int
@@ -112,3 +120,9 @@ krb_afslog(const char *cell, const char *realm)
{ {
return krb_afslog_uid (cell, realm, getuid()); return krb_afslog_uid (cell, realm, getuid());
} }
int
krb_afslog_home(const char *cell, const char *realm, const char *homedir)
{
return krb_afslog_uid_home (cell, realm, getuid(), homedir);
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1995, 1996, 1997 Kungliga Tekniska H<>gskolan * Copyright (c) 1995, 1996, 1997, 1998 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden). * (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved. * All rights reserved.
* *
@@ -114,8 +114,12 @@ get_realm(kafs_data *data, const char *host)
} }
krb5_error_code krb5_error_code
krb5_afslog_uid(krb5_context context, krb5_ccache id, krb5_afslog_uid_home(krb5_context context,
const char *cell, krb5_const_realm realm, uid_t uid) krb5_ccache id,
const char *cell,
krb5_const_realm realm,
uid_t uid,
const char *homedir)
{ {
kafs_data kd; kafs_data kd;
struct krb5_kafs_data d; struct krb5_kafs_data d;
@@ -126,12 +130,34 @@ krb5_afslog_uid(krb5_context context, krb5_ccache id,
d.context = context; d.context = context;
d.id = id; d.id = id;
d.realm = realm; d.realm = realm;
return afslog_uid_int(&kd, cell, uid); return afslog_uid_int(&kd, cell, uid, homedir);
} }
krb5_error_code krb5_error_code
krb5_afslog(krb5_context context, krb5_ccache id, krb5_afslog_uid(krb5_context context,
const char *cell, krb5_const_realm realm) krb5_ccache id,
const char *cell,
krb5_const_realm realm,
uid_t uid)
{
return krb5_afslog_uid_home (context, id, cell, realm, uid, NULL);
}
krb5_error_code
krb5_afslog(krb5_context context,
krb5_ccache id,
const char *cell,
krb5_const_realm realm)
{ {
return krb5_afslog_uid (context, id, cell, realm, getuid()); return krb5_afslog_uid (context, id, cell, realm, getuid());
} }
krb5_error_code
krb5_afslog_home(krb5_context context,
krb5_ccache id,
const char *cell,
krb5_const_realm realm,
const char *homedir)
{
return krb5_afslog_uid_home (context, id, cell, realm, getuid(), homedir);
}

View File

@@ -213,27 +213,28 @@ find_cells(char *file, char ***cells, int *index)
* Get tokens for all cells[] * Get tokens for all cells[]
*/ */
static int static int
afslog_cells(kafs_data *data, char **cells, int max, uid_t uid) afslog_cells(kafs_data *data, char **cells, int max, uid_t uid,
const char *homedir)
{ {
int ret = 0; int ret = 0;
int i; int i;
for(i = 0; i < max; i++) for(i = 0; i < max; i++)
ret = (*data->afslog_uid)(data, cells[i], uid); ret = (*data->afslog_uid)(data, cells[i], uid, homedir);
return ret; return ret;
} }
int int
_kafs_afslog_all_local_cells(kafs_data *data, uid_t uid) _kafs_afslog_all_local_cells(kafs_data *data, uid_t uid, const char *homedir)
{ {
int ret; int ret;
char **cells = NULL; char **cells = NULL;
int index = 0; int index = 0;
char *p; if (homedir == NULL)
homedir = getenv("HOME");
if ((p = getenv("HOME"))) { if (homedir != NULL) {
char home[MaxPathLen]; char home[MaxPathLen];
snprintf(home, sizeof(home), "%s/.TheseCells", p); snprintf(home, sizeof(home), "%s/.TheseCells", homedir);
find_cells(home, &cells, &index); find_cells(home, &cells, &index);
} }
find_cells(_PATH_THESECELLS, &cells, &index); find_cells(_PATH_THESECELLS, &cells, &index);
@@ -241,7 +242,7 @@ _kafs_afslog_all_local_cells(kafs_data *data, uid_t uid)
find_cells(_PATH_ARLA_THESECELLS, &cells, &index); find_cells(_PATH_ARLA_THESECELLS, &cells, &index);
find_cells(_PATH_ARLA_THISCELL, &cells, &index); find_cells(_PATH_ARLA_THISCELL, &cells, &index);
ret = afslog_cells(data, cells, index, uid); ret = afslog_cells(data, cells, index, uid, homedir);
while(index > 0) while(index > 0)
free(cells[--index]); free(cells[--index]);
free(cells); free(cells);

View File

@@ -118,6 +118,11 @@ int k_hasafs __P((void));
int krb_afslog __P((const char *cell, const char *realm)); int krb_afslog __P((const char *cell, const char *realm));
int krb_afslog_uid __P((const char *cell, const char *realm, uid_t uid)); int krb_afslog_uid __P((const char *cell, const char *realm, uid_t uid));
int krb_afslog_home __P((const char *cell, const char *realm,
const char *homedir));
int krb_afslog_uid_home __P((const char *cell, const char *realm, uid_t uid,
const char *homedir));
/* compat */ /* compat */
#define k_afsklog krb_afslog #define k_afsklog krb_afslog
#define k_afsklog_uid krb_afslog_uid #define k_afsklog_uid krb_afslog_uid
@@ -144,10 +149,27 @@ int kafs_settoken __P((const char*, uid_t, CREDENTIALS*));
#endif #endif
#ifdef KRB5_H_INCLUDED #ifdef KRB5_H_INCLUDED
krb5_error_code krb5_afslog_uid __P((krb5_context, krb5_ccache, krb5_error_code krb5_afslog_uid __P((krb5_context context,
const char*, krb5_const_realm, uid_t)); krb5_ccache id,
krb5_error_code krb5_afslog __P((krb5_context, krb5_ccache, const char *cell,
const char*, krb5_const_realm)); krb5_const_realm realm,
uid_t uid));
krb5_error_code krb5_afslog __P((krb5_context context,
krb5_ccache id,
const char *cell,
krb5_const_realm realm));
krb5_error_code krb5_afslog_uid_home __P((krb5_context context,
krb5_ccache id,
const char *cell,
krb5_const_realm realm,
uid_t uid,
const char *homedir));
krb5_error_code krb5_afslog_home __P((krb5_context context,
krb5_ccache id,
const char *cell,
krb5_const_realm realm,
const char *homedir));
#endif #endif

View File

@@ -106,7 +106,8 @@
#include "afssysdefs.h" #include "afssysdefs.h"
struct kafs_data; struct kafs_data;
typedef int (*afslog_uid_func_t)(struct kafs_data*, const char*, uid_t); typedef int (*afslog_uid_func_t)(struct kafs_data*, const char*, uid_t,
const char *);
typedef int (*get_cred_func_t)(struct kafs_data*, const char*, const char*, typedef int (*get_cred_func_t)(struct kafs_data*, const char*, const char*,
const char*, CREDENTIALS*); const char*, CREDENTIALS*);
@@ -120,7 +121,7 @@ typedef struct kafs_data {
void *data; void *data;
} kafs_data; } kafs_data;
int _kafs_afslog_all_local_cells(kafs_data*, uid_t); int _kafs_afslog_all_local_cells(kafs_data*, uid_t, const char*);
int _kafs_get_cred(kafs_data*, const char*, const char*, const char *, int _kafs_get_cred(kafs_data*, const char*, const char*, const char *,
CREDENTIALS*); CREDENTIALS*);