From 2bc6b41743594e2f012a9f5ec8a74c4cc1711e5a Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Wed, 27 Aug 1997 23:17:27 +0000 Subject: [PATCH] re-done git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@3192 ec53bebd-3082-4978-b11e-865c3cabbd6b --- admin/ank.c | 188 ++++++++-------------------------------------------- 1 file changed, 27 insertions(+), 161 deletions(-) diff --git a/admin/ank.c b/admin/ank.c index c9a24914c..ebe1eea38 100644 --- a/admin/ank.c +++ b/admin/ank.c @@ -41,185 +41,51 @@ RCSID("$Id$"); static void -doit2(HDB *db, hdb_entry *ent, int mod) -{ - int ret; - hdb_entry def; - int32_t tmp; - char buf[1024]; - int i; - - ret = db->fetch(context, db, ent); - - switch(ret){ - case HDB_ERR_NOENTRY: - if(mod){ - fprintf(stderr, "Entry not found in database\n"); - return; - }else{ - krb5_realm *realm; - krb5_principal def_principal; - - realm = krb5_princ_realm(context, ent->principal); - krb5_build_principal(context, &def_principal, - strlen(*realm), - *realm, - "default", - NULL); - def.principal = def_principal; - if(db->fetch(context, db, &def)){ - /* XXX */ - } - krb5_free_principal (context, def_principal); - memset(&ent->flags, 0, sizeof(ent->flags)); - ent->flags.client = 1; - ent->flags.server = 1; - ent->flags.forwardable = 1; - ent->flags.proxiable = 1; - ent->flags.renewable = 1; - ent->flags.postdate = 1; - ent->max_life = malloc(sizeof(*ent->max_life)); - *ent->max_life = *def.max_life; - ent->max_renew = malloc(sizeof(*ent->max_renew)); - *ent->max_renew = *def.max_renew; - hdb_free_entry(context, &def); - break; - } - case 0: - if(!mod){ - warnx("Principal exists"); - return; - } - break; - default: - errx(1, "dbget: %s", krb5_get_err_text(context, ret)); - } - { - time_t t; - if(ent->max_life){ - char buf[128]; - unparse_time (*ent->max_life, buf, sizeof(buf)); - t = gettime ("Max ticket life", buf); - }else{ - t = gettime ("Max ticket life", "unlimited"); - } - if(t){ - if(ent->max_life == NULL) - ent->max_life = malloc(sizeof(*ent->max_life)); - *ent->max_life = t; - }else if(ent->max_life){ - free(ent->max_life); - ent->max_life = NULL; - } - if(ent->max_renew){ - char buf[128]; - unparse_time (*ent->max_renew, buf, sizeof(buf)); - t = gettime ("Max renewable life", buf); - }else{ - t = gettime ("Max renewable life", "unlimited"); - } - if(t){ - if(ent->max_renew == NULL) - ent->max_renew = malloc(sizeof(*ent->max_renew)); - *ent->max_renew = t; - }else if(ent->max_renew){ - free(ent->max_renew); - ent->max_renew = NULL; - } - } - while(mod){ - fprintf(stderr, "Change password? (y/n) "); - fgets(buf, sizeof(buf), stdin); - if(buf[0] == 'n' || buf[0] == 'y') - break; - fprintf(stderr, "Please answer yes or no.\n"); - } - if(mod == 0 || buf[0] == 'y'){ - krb5_data salt; - des_read_pw_string(buf, sizeof(buf), "Password:", 1); - for (i = 0; i < ent->keys.len; ++i) - free_Key (&ent->keys.val[i]); - free (ent->keys.val); - if(strcasecmp(buf, "random") == 0) { - ent->keys.len = 0; - ent->keys.val = NULL; - init_des_key(ent); - } else{ - ent->keys.len = 1; - ent->keys.val = calloc(1, sizeof(*ent->keys.val)); - set_keys(ent, buf); - } - } - { - Event *ev; - krb5_realm *realm; - ev = malloc(sizeof(*ev)); - ev->time = time(NULL); - realm = krb5_princ_realm(context, ent->principal); - - krb5_build_principal(context, &ev->principal, - strlen(*realm), - *realm, - "kadmin", - NULL); - if(mod){ - if(ent->modified_by){ - free_Event(ent->modified_by); - free(ent->modified_by); - } - ent->modified_by = ev; - }else{ - ent->created_by = *ev; - free(ev); - } - } - ret = db->store(context, db, ent); - if(ret == -1){ - perror("dbput"); - exit(1); - } -} - -void -doit(const char *principal, int mod) +doit(const char *principal) { HDB *db; hdb_entry ent; krb5_error_code ret; + memset(&ent, 0, sizeof(ent)); - if((ret = hdb_open(context, &db, database, O_RDWR, 0600))){ - fprintf(stderr, "hdb_open: %s\n", krb5_get_err_text(context, ret)); + if((ret = hdb_open(context, &db, database, O_RDWR, 0600))) { + krb5_warn(context, ret, "hdb_open"); return; } krb5_parse_name(context, principal, &ent.principal); - doit2(db, &ent, mod); + ret = db->fetch(context, db, &ent); + + switch(ret){ + case HDB_ERR_NOENTRY: + break; + case 0: + krb5_warnx(context, "Principal exists"); + return; + default: + krb5_err(context, 1, ret, "dbget"); + } + init_entry (db, &ent); + edit_entry (&ent); + set_password (&ent); + set_created_by (&ent); + + ret = db->store(context, db, &ent); + if(ret) + krb5_err(context, 1, ret, "db->store"); + db->close(context, db); hdb_free_entry(context, &ent); } - - int add_new_key(int argc, char **argv) { - if(argc != 2){ - fprintf(stderr, "Usage: add_new_key principal\n"); + if(argc != 2) { + krb5_warnx(context, "Usage: add_new_key principal"); return 0; } - doit(argv[1], 0); - return 0; -} - -int -mod_entry(int argc, char **argv) -{ - if(argc != 2){ - fprintf(stderr, "Usage: mod_entry principal\n"); - return 0; - } - - doit(argv[1], 1); + doit(argv[1]); return 0; }