From 4d7d46d8b7c1e2d1cdae9d5614229a0ff810d5c8 Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Mon, 23 Jul 2001 09:46:41 +0000 Subject: [PATCH] move common code for opening the keytab to ktutil.c git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10383 ec53bebd-3082-4978-b11e-865c3cabbd6b --- admin/add.c | 17 +---------------- admin/change.c | 17 +---------------- admin/get.c | 17 ++++------------- admin/ktutil.c | 27 ++++++++++++++++++++++++++- admin/ktutil_locl.h | 3 ++- admin/purge.c | 17 +---------------- admin/remove.c | 17 +---------------- 7 files changed, 36 insertions(+), 79 deletions(-) diff --git a/admin/add.c b/admin/add.c index 63678c4dd..540a9c3c6 100644 --- a/admin/add.c +++ b/admin/add.c @@ -78,24 +78,9 @@ kt_add(int argc, char **argv) arg_printusage(args, num_args, "ktutil add", ""); return 1; } - if (keytab_string == NULL) { - ret = krb5_kt_default_modify_name (context, keytab_buf, - sizeof(keytab_buf)); - if (ret) { - krb5_warn(context, ret, "krb5_kt_default_modify_name"); - return 1; - } - keytab_string = keytab_buf; - } - ret = krb5_kt_resolve(context, keytab_string, &keytab); - if (ret) { - krb5_warn(context, ret, "resolving keytab %s", keytab_string); + if((keytab = ktutil_open_keytab()) == NULL) return 1; - } - if (verbose_flag) - fprintf (stderr, "Using keytab %s\n", keytab_string); - memset(&entry, 0, sizeof(entry)); if(principal_string == NULL) { printf("Principal: "); diff --git a/admin/change.c b/admin/change.c index e267c5dc5..eea62d860 100644 --- a/admin/change.c +++ b/admin/change.c @@ -150,24 +150,9 @@ kt_change (int argc, char **argv) return 1; } - if (keytab_string == NULL) { - ret = krb5_kt_default_modify_name (context, keytab_buf, - sizeof(keytab_buf)); - if (ret) { - krb5_warn(context, ret, "krb5_kt_default_modify_name"); - return 1; - } - keytab_string = keytab_buf; - } - ret = krb5_kt_resolve(context, keytab_string, &keytab); - if (ret) { - krb5_warn(context, ret, "resolving keytab %s", keytab_string); + if((keytab = ktutil_open_keytab()) == NULL) return 1; - } - if (verbose_flag) - fprintf (stderr, "Using keytab %s\n", keytab_string); - j = 0; max = 10; princs = malloc (max * sizeof(*princs)); diff --git a/admin/get.c b/admin/get.c index f9fe1460e..c28c18fc5 100644 --- a/admin/get.c +++ b/admin/get.c @@ -87,20 +87,8 @@ kt_get(int argc, char **argv) return 1; } - if (keytab_string == NULL) { - ret = krb5_kt_default_modify_name (context, keytab_buf, - sizeof(keytab_buf)); - if (ret) { - krb5_warn(context, ret, "krb5_kt_default_modify_name"); - return 1; - } - keytab_string = keytab_buf; - } - ret = krb5_kt_resolve(context, keytab_string, &keytab); - if (ret) { - krb5_warn(context, ret, "resolving keytab %s", keytab_string); + if((keytab = ktutil_open_keytab()) == NULL) return 1; - } if (etype_strs.num_strings) { int i; @@ -140,6 +128,9 @@ kt_get(int argc, char **argv) conf.mask |= KADM5_CONFIG_KADMIND_PORT; } + /* should get realm from each principal, instead of doing + everything with the same (local) realm */ + ret = kadm5_init_with_password_ctx(context, principal, NULL, diff --git a/admin/ktutil.c b/admin/ktutil.c index 89a5dfa8d..dfcbe52d9 100644 --- a/admin/ktutil.c +++ b/admin/ktutil.c @@ -40,7 +40,7 @@ static int help_flag; static int version_flag; int verbose_flag; char *keytab_string; -char keytab_buf[256]; +static char keytab_buf[256]; static int help(int argc, char **argv); @@ -108,6 +108,31 @@ static int num_args = sizeof(args) / sizeof(args[0]); krb5_context context; +krb5_keytab +ktutil_open_keytab(void) +{ + krb5_error_code ret; + krb5_keytab keytab; + if (keytab_string == NULL) { + ret = krb5_kt_default_modify_name (context, keytab_buf, + sizeof(keytab_buf)); + if (ret) { + krb5_warn(context, ret, "krb5_kt_default_modify_name"); + return NULL; + } + keytab_string = keytab_buf; + } + ret = krb5_kt_resolve(context, keytab_string, &keytab); + if (ret) { + krb5_warn(context, ret, "resolving keytab %s", keytab_string); + return NULL; + } + if (verbose_flag) + fprintf (stderr, "Using keytab %s\n", keytab_string); + + return keytab; +} + static int help(int argc, char **argv) { diff --git a/admin/ktutil_locl.h b/admin/ktutil_locl.h index 462751bed..ca3d42c52 100644 --- a/admin/ktutil_locl.h +++ b/admin/ktutil_locl.h @@ -71,7 +71,8 @@ extern krb5_context context; extern int verbose_flag; extern char *keytab_string; -extern char keytab_buf[256]; + +krb5_keytab ktutil_open_keytab(void); int kt_add (int argc, char **argv); int kt_change (int argc, char **argv); diff --git a/admin/purge.c b/admin/purge.c index e6a49e37a..271b5d14a 100644 --- a/admin/purge.c +++ b/admin/purge.c @@ -132,20 +132,8 @@ kt_purge(int argc, char **argv) return 1; } - if (keytab_string == NULL) { - ret = krb5_kt_default_modify_name (context, keytab_buf, - sizeof(keytab_buf)); - if (ret) { - krb5_warn(context, ret, "krb5_kt_default_modify_name"); - return 1; - } - keytab_string = keytab_buf; - } - ret = krb5_kt_resolve(context, keytab_string, &keytab); - if (ret) { - krb5_warn(context, ret, "resolving keytab %s", keytab_string); + if((keytab = ktutil_open_keytab()) == NULL) return 1; - } ret = krb5_kt_start_seq_get(context, keytab, &cursor); if(ret){ @@ -153,9 +141,6 @@ kt_purge(int argc, char **argv) goto out; } - if (verbose_flag) - fprintf (stderr, "Using keytab %s\n", keytab_string); - while((ret = krb5_kt_next_entry(context, keytab, &entry, &cursor)) == 0) { add_entry (entry.principal, entry.vno, &head); krb5_kt_free_entry(context, &entry); diff --git a/admin/remove.c b/admin/remove.c index e119096f6..3925c0300 100644 --- a/admin/remove.c +++ b/admin/remove.c @@ -96,24 +96,9 @@ kt_remove(int argc, char **argv) return 1; } - if (keytab_string == NULL) { - ret = krb5_kt_default_modify_name (context, keytab_buf, - sizeof(keytab_buf)); - if (ret) { - krb5_warn(context, ret, "krb5_kt_default_modify_name"); - return 1; - } - keytab_string = keytab_buf; - } - ret = krb5_kt_resolve(context, keytab_string, &keytab); - if (ret) { - krb5_warn(context, ret, "resolving keytab %s", keytab_string); + if((keytab = ktutil_open_keytab()) == NULL) return 1; - } - if (verbose_flag) - fprintf (stderr, "Using keytab %s\n", keytab_string); - entry.principal = principal; entry.keyblock.keytype = enctype; entry.vno = kvno;