summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/kadmin/load.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/kadmin/load.c')
-rw-r--r--crypto/heimdal/kadmin/load.c70
1 files changed, 59 insertions, 11 deletions
diff --git a/crypto/heimdal/kadmin/load.c b/crypto/heimdal/kadmin/load.c
index 6a95887..c53a7ad 100644
--- a/crypto/heimdal/kadmin/load.c
+++ b/crypto/heimdal/kadmin/load.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997-2000 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -34,7 +34,7 @@
#include "kadmin_locl.h"
#include <kadm5/private.h>
-RCSID("$Id: load.c,v 1.36 2000/02/16 16:05:28 assar Exp $");
+RCSID("$Id: load.c,v 1.40 2001/01/04 15:59:26 assar Exp $");
struct entry {
char *principal;
@@ -324,6 +324,13 @@ doit(const char *filename, int merge)
krb5_warn(context, errno, "fopen(%s)", filename);
return 1;
}
+ ret = kadm5_log_truncate (kadm_handle);
+ if (ret) {
+ fclose (f);
+ krb5_warn(context, ret, "kadm5_log_truncate");
+ return 1;
+ }
+
if(!merge)
flags |= O_CREAT | O_TRUNC;
ret = db->open(context, db, flags, 0600);
@@ -333,7 +340,9 @@ doit(const char *filename, int merge)
return 1;
}
line = 0;
- while(fgets(s, sizeof(s), f)){
+ ret = 0;
+ while(fgets(s, sizeof(s), f) != NULL) {
+ ret = 0;
line++;
e.principal = s;
for(p = s; *p; p++){
@@ -454,32 +463,71 @@ doit(const char *filename, int merge)
}
#endif
- db->store(context, db, HDB_F_REPLACE, &ent);
+ ret = db->store(context, db, HDB_F_REPLACE, &ent);
hdb_free_entry (context, &ent);
+ if (ret) {
+ krb5_warn(context, ret, "db_store");
+ break;
+ }
}
db->close(context, db);
fclose(f);
- return 0;
+ return ret != 0;
+}
+
+
+static struct getargs args[] = {
+ { "help", 'h', arg_flag, NULL }
+};
+
+static int num_args = sizeof(args) / sizeof(args[0]);
+
+static void
+usage(const char *name)
+{
+ arg_printusage (args, num_args, name, "file");
}
+
+
int
load(int argc, char **argv)
{
- if(argc < 2){
- krb5_warnx(context, "Usage: load filename");
+ int optind = 0;
+ int help_flag = 0;
+
+ args[0].value = &help_flag;
+
+ if(getarg(args, num_args, argc, argv, &optind)) {
+ usage ("load");
+ return 0;
+ }
+ if(argc - optind != 1 || help_flag) {
+ usage ("load");
return 0;
}
- doit(argv[1], 0);
+
+ doit(argv[optind], 0);
return 0;
}
int
merge(int argc, char **argv)
{
- if(argc < 2){
- krb5_warnx(context, "Usage: merge filename");
+ int optind = 0;
+ int help_flag = 0;
+
+ args[0].value = &help_flag;
+
+ if(getarg(args, num_args, argc, argv, &optind)) {
+ usage ("merge");
return 0;
}
- doit(argv[1], 1);
+ if(argc - optind != 1 || help_flag) {
+ usage ("merge");
+ return 0;
+ }
+
+ doit(argv[optind], 1);
return 0;
}
OpenPOWER on IntegriCloud