diff options
Diffstat (limited to 'crypto/heimdal/kadmin/dump.c')
-rw-r--r-- | crypto/heimdal/kadmin/dump.c | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/crypto/heimdal/kadmin/dump.c b/crypto/heimdal/kadmin/dump.c index a57309c..97ec667 100644 --- a/crypto/heimdal/kadmin/dump.c +++ b/crypto/heimdal/kadmin/dump.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 1998, 1999 Kungliga Tekniska Högskolan + * Copyright (c) 1997-2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -32,49 +32,48 @@ */ #include "kadmin_locl.h" +#include "kadmin-commands.h" #include <kadm5/private.h> -RCSID("$Id: dump.c,v 1.26 1999/12/02 17:04:58 joda Exp $"); +RCSID("$Id: dump.c 14518 2005-01-19 17:09:56Z lha $"); + +extern int local_flag; int -dump(int argc, char **argv) +dump(struct dump_options *opt, int argc, char **argv) { krb5_error_code ret; FILE *f; - HDB *db = _kadm5_s_get_db(kadm_handle); - int decrypt = 0; - int optind = 0; - - struct getargs args[] = { - { "decrypt", 'd', arg_flag, NULL, "decrypt keys" } - }; - args[0].value = &decrypt; - - if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optind)) { - arg_printusage(args, sizeof(args) / sizeof(args[0]), "kadmin dump", - "[dump-file]"); + HDB *db = NULL; + + if(!local_flag) { + krb5_warnx(context, "dump is only available in local (-l) mode"); return 0; } - argc -= optind; - argv += optind; - if(argc < 1) + db = _kadm5_s_get_db(kadm_handle); + + if(argc == 0) f = stdout; else f = fopen(argv[0], "w"); - ret = db->open(context, db, O_RDONLY, 0600); - if(ret){ + if(f == NULL) { + krb5_warn(context, errno, "open: %s", argv[0]); + goto out; + } + ret = db->hdb_open(context, db, O_RDONLY, 0600); + if(ret) { krb5_warn(context, ret, "hdb_open"); - if(f != stdout) - fclose(f); - return 0; + goto out; } - hdb_foreach(context, db, decrypt ? HDB_F_DECRYPT : 0, hdb_print_entry, f); + hdb_foreach(context, db, opt->decrypt_flag ? HDB_F_DECRYPT : 0, + hdb_print_entry, f); - if(f != stdout) + db->hdb_close(context, db); +out: + if(f && f != stdout) fclose(f); - db->close(context, db); return 0; } |