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:
@@ -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);
|
||||||
|
}
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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*);
|
||||||
|
Reference in New Issue
Block a user