Add options to allow select principal or credential cache when doing afslog.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16438 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -49,9 +49,6 @@ RCSID("$Id$");
|
|||||||
|
|
||||||
static int help_flag;
|
static int help_flag;
|
||||||
static int version_flag;
|
static int version_flag;
|
||||||
#if 0
|
|
||||||
static int create_user;
|
|
||||||
#endif
|
|
||||||
static getarg_strings cells;
|
static getarg_strings cells;
|
||||||
static char *realm;
|
static char *realm;
|
||||||
static getarg_strings files;
|
static getarg_strings files;
|
||||||
@@ -61,6 +58,8 @@ static int verbose;
|
|||||||
static int use_krb4 = 1;
|
static int use_krb4 = 1;
|
||||||
#endif
|
#endif
|
||||||
#ifdef KRB5
|
#ifdef KRB5
|
||||||
|
static char *client_string;
|
||||||
|
static char *cache_string;
|
||||||
static int use_krb5 = 1;
|
static int use_krb5 = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -73,10 +72,9 @@ struct getargs args[] = {
|
|||||||
{ "v4", 0, arg_negative_flag, &use_krb4, "don't use Kerberos 4" },
|
{ "v4", 0, arg_negative_flag, &use_krb4, "don't use Kerberos 4" },
|
||||||
#endif
|
#endif
|
||||||
#ifdef KRB5
|
#ifdef KRB5
|
||||||
|
{ "principal",'P',arg_string,&client_string,"principal to use","principal"},
|
||||||
|
{ "cache", 0, arg_string, &cache_string, "ccache to use", "cache"},
|
||||||
{ "v5", 0, arg_negative_flag, &use_krb5, "don't use Kerberos 5" },
|
{ "v5", 0, arg_negative_flag, &use_krb5, "don't use Kerberos 5" },
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
{ "create-user", 0, arg_flag, &create_user, "create user if not found" },
|
|
||||||
#endif
|
#endif
|
||||||
{ "verbose",'v', arg_flag, &verbose },
|
{ "verbose",'v', arg_flag, &verbose },
|
||||||
{ "version", 0, arg_flag, &version_flag },
|
{ "version", 0, arg_flag, &version_flag },
|
||||||
@@ -131,43 +129,6 @@ expand_cell_name(const char *cell)
|
|||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
static int
|
|
||||||
createuser (char *cell)
|
|
||||||
{
|
|
||||||
char cellbuf[64];
|
|
||||||
char name[ANAME_SZ];
|
|
||||||
char instance[INST_SZ];
|
|
||||||
char realm[REALM_SZ];
|
|
||||||
char cmd[1024];
|
|
||||||
|
|
||||||
if (cell == NULL) {
|
|
||||||
FILE *f;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
f = fopen (_PATH_THISCELL, "r");
|
|
||||||
if (f == NULL)
|
|
||||||
err (1, "open(%s)", _PATH_THISCELL);
|
|
||||||
if (fgets (cellbuf, sizeof(cellbuf), f) == NULL)
|
|
||||||
err (1, "read cellname from %s", _PATH_THISCELL);
|
|
||||||
len = strlen(cellbuf);
|
|
||||||
if (cellbuf[len-1] == '\n')
|
|
||||||
cellbuf[len-1] = '\0';
|
|
||||||
cell = cellbuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(krb_get_default_principal(name, instance, realm))
|
|
||||||
errx (1, "Could not even figure out who you are");
|
|
||||||
|
|
||||||
snprintf (cmd, sizeof(cmd),
|
|
||||||
"pts createuser %s%s%s@%s -cell %s",
|
|
||||||
name, *instance ? "." : "", instance, strlwr(realm),
|
|
||||||
cell);
|
|
||||||
DEBUG("Executing %s", cmd);
|
|
||||||
return system(cmd);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
usage(int ecode)
|
usage(int ecode)
|
||||||
{
|
{
|
||||||
@@ -234,14 +195,14 @@ do_afslog(const char *cell)
|
|||||||
|
|
||||||
#ifdef KRB5
|
#ifdef KRB5
|
||||||
if(context != NULL && id != NULL && use_krb5) {
|
if(context != NULL && id != NULL && use_krb5) {
|
||||||
k5ret = krb5_afslog(context, id, cell, NULL);
|
k5ret = krb5_afslog(context, id, cell, realm);
|
||||||
if(k5ret == 0)
|
if(k5ret == 0)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if KRB4
|
#if KRB4
|
||||||
if (use_krb4) {
|
if (use_krb4) {
|
||||||
k4ret = krb_afslog(cell, NULL);
|
k4ret = krb_afslog(cell, realm);
|
||||||
if(k4ret == 0)
|
if(k4ret == 0)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -297,11 +258,29 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
#ifdef KRB5
|
#ifdef KRB5
|
||||||
ret = krb5_init_context(&context);
|
ret = krb5_init_context(&context);
|
||||||
if (ret)
|
if (ret) {
|
||||||
context = NULL;
|
context = NULL;
|
||||||
else
|
} else {
|
||||||
|
if (client_string) {
|
||||||
|
krb5_principal client;
|
||||||
|
|
||||||
|
ret = krb5_parse_name(context, client_string, &client);
|
||||||
|
if (ret == 0)
|
||||||
|
ret = krb5_cc_cache_match(context, client, NULL, &id);
|
||||||
|
if (ret)
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
|
if (id == NULL && cache_string) {
|
||||||
|
if(krb5_cc_resolve(context, cache_string, &id) != 0) {
|
||||||
|
krb5_warnx(context, "failed to open kerberos 5 cache '%s'",
|
||||||
|
cache_string);
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (id == NULL)
|
||||||
if(krb5_cc_default(context, &id) != 0)
|
if(krb5_cc_default(context, &id) != 0)
|
||||||
id = NULL;
|
id = NULL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
|
Reference in New Issue
Block a user