[692] in Kerberos-V5-bugs
kdb5_edit should exit non-zero when there are errors
daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Thu Sep 1 17:46:19 1994
Date: Thu, 1 Sep 1994 17:47:20 -0400
From: "Jonathan I. Kamens" <jik@cam.ov.com>
To: krb5-bugs@MIT.EDU
The kdb5_edit function should exit with non-zero status if there are
any errors while it is running.
While this might not be all that useful when it is used interactively,
it's quite useful when it's used in a script using the "-R" option.
We fixed this under beta 2, and I tried to do what we did to beta 2 to
beta 4; an untested patch containing that effort is below.
Jonathan Kamens | OpenVision Technologies, Inc. | jik@cam.ov.com
--- /afs/gza.com/development/krb5.beta4/src/admin/edit/tcl_wrapper.c Thu Jun 9 22:31:27 1994
+++ tcl_wrapper.c Thu Sep 1 17:44:06 1994
@@ -53,6 +53,7 @@
from libtcl.a */
extern Tcl_Interp *interp; /* XXX yes, this is gross,
but we do need it for some things */
+extern int exit_status;
void show_principal PROTOTYPE((int, char **));
void add_new_key PROTOTYPE((int, char **));
@@ -88,10 +89,7 @@
return TCL_ERROR;
}
if (argc == 1) {
- if (quit())
- exit(1);
- else
- exit(0);
+ exit(quit() ? 1 : exit_status);
}
if (Tcl_GetInt(interp, argv[1], &value) != TCL_OK) {
return TCL_ERROR;
--- /afs/gza.com/development/krb5.beta4/src/admin/edit/ss_wrapper.c Thu Jun 9 22:31:19 1994
+++ ss_wrapper.c Thu Sep 1 17:42:06 1994
@@ -35,6 +35,7 @@
#include <stdio.h>
extern ss_request_table kdb5_edit_cmds;
+extern int exit_status;
int main(argc, argv)
int argc;
@@ -53,9 +54,10 @@
}
if (request) {
(void) ss_execute_line(sci_idx, request, &code);
- if (code != 0)
+ if (code != 0) {
ss_perror(sci_idx, code, request);
+ exit_status++;
} else
ss_listen(sci_idx, &retval);
- return quit();
+ return quit() ? 1 : exit_status;
}
--- /afs/gza.com/development/krb5.beta4/src/admin/edit/kdb5_edit.c Fri Jun 24 03:14:35 1994
+++ kdb5_edit.c Thu Sep 1 17:40:13 1994
@@ -66,6 +66,13 @@
static int num_instance_tokens;
static int must_be_first[2];
+/*
+ * I can't figure out any way for this not to be global, given how ss
+ * works.
+ */
+
+int exit_status = 0;
+
static void
usage(who, status)
char *who;
@@ -210,6 +217,7 @@
if (retval = krb5_db_get_principal(principal, &entry, &nprincs, &more)) {
com_err(pname, retval, "while attempting to verify principal's existence");
+ exit_status++;
return 0;
}
if (!nprincs)
@@ -276,6 +284,7 @@
&newentry.key);
if (retval) {
com_err(cmdname, retval, "while encrypting key for '%s'", newprinc);
+ exit_status++;
return;
}
newentry.principal = (krb5_principal) principal;
@@ -287,6 +296,7 @@
newentry.mod_name = master_princ;
if (retval = krb5_timeofday(&newentry.mod_date)) {
com_err(cmdname, retval, "while fetching date");
+ exit_status++;
memset((char *)newentry.key.contents, 0, newentry.key.length);
krb5_xfree(newentry.key.contents);
return;
@@ -307,10 +317,13 @@
krb5_xfree(newentry.key.contents);
if (retval) {
com_err(cmdname, retval, "while storing entry for '%s'\n", newprinc);
+ exit_status++;
return;
}
- if (one != 1)
+ if (one != 1) {
com_err(cmdname, 0, "entry not stored in database (unknown failure)");
+ exit_status++;
+ }
return;
}
@@ -324,11 +337,13 @@
if (argc < 3) {
com_err(argv[0], 0, "Too few arguments");
com_err(argv[0], 0, "Usage: %s dbpathname realmname", argv[0]);
+ exit_status++;
return;
}
if (dbactive) {
if ((retval = krb5_db_fini()) && retval != KRB5_KDB_DBNOTINITED) {
com_err(argv[0], retval, "while closing previous database");
+ exit_status++;
return;
}
if (valid_master_key) {
@@ -375,10 +390,12 @@
if (retval = krb5_db_set_name(current_dbname)) {
com_err(pname, retval, "while setting active database to '%s'",
dbname);
+ exit_status++;
return(1);
}
if (retval = krb5_db_init()) {
com_err(pname, retval, "while initializing database");
+ exit_status++;
return(1);
}
@@ -387,6 +404,7 @@
if (retval = krb5_db_setup_mkey_name(mkey_name, cur_realm, 0,
&master_princ)) {
com_err(pname, retval, "while setting up master key name");
+ exit_status++;
return(1);
}
nentries = 1;
@@ -393,15 +411,18 @@
if (retval = krb5_db_get_principal(master_princ, &master_entry, &nentries,
&more)) {
com_err(pname, retval, "while retrieving master entry");
+ exit_status++;
(void) krb5_db_fini();
return(1);
} else if (more) {
com_err(pname, KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE,
"while retrieving master entry");
+ exit_status++;
(void) krb5_db_fini();
return(1);
} else if (!nentries) {
com_err(pname, KRB5_KDB_NOENTRY, "while retrieving master entry");
+ exit_status++;
(void) krb5_db_fini();
return(1);
}
@@ -416,6 +437,7 @@
manual_mkey, FALSE, 0, &master_keyblock)) {
com_err(pname, retval, "while reading master key");
com_err(pname, 0, "Warning: proceeding without master key");
+ exit_status++;
valid_master_key = 0;
dbactive = TRUE;
return(0);
@@ -424,6 +446,7 @@
if (retval = krb5_db_verify_master_key(master_princ, &master_keyblock,
&master_encblock)) {
com_err(pname, retval, "while verifying master key");
+ exit_status++;
memset((char *)master_keyblock.contents, 0, master_keyblock.length);
krb5_xfree(master_keyblock.contents);
valid_master_key = 0;
@@ -433,6 +456,7 @@
if (retval = krb5_process_key(&master_encblock,
&master_keyblock)) {
com_err(pname, retval, "while processing master key");
+ exit_status++;
memset((char *)master_keyblock.contents, 0, master_keyblock.length);
krb5_xfree(master_keyblock.contents);
valid_master_key = 0;
@@ -443,6 +467,7 @@
&master_keyblock,
&master_random)) {
com_err(pname, retval, "while initializing random key generator");
+ exit_status++;
(void) krb5_finish_key(&master_encblock);
memset((char *)master_keyblock.contents, 0, master_keyblock.length);
krb5_xfree(master_keyblock.contents);
@@ -463,6 +488,7 @@
if (!dbactive) {
com_err(pname, 0, Err_no_database);
+ exit_status++;
return;
}
if (valid_master_key) {
@@ -477,16 +503,19 @@
if (retval = krb5_db_fetch_mkey(master_princ, &master_encblock,
TRUE, FALSE, 0, &master_keyblock)) {
com_err(pname, retval, "while reading master key");
+ exit_status++;
return;
}
if (retval = krb5_db_verify_master_key(master_princ, &master_keyblock,
&master_encblock)) {
com_err(pname, retval, "while verifying master key");
+ exit_status++;
return;
}
if (retval = krb5_process_key(&master_encblock,
&master_keyblock)) {
com_err(pname, retval, "while processing master key");
+ exit_status++;
return;
}
if (retval = krb5_init_random_key(&master_encblock,
@@ -493,6 +522,7 @@
&master_keyblock,
&master_random)) {
com_err(pname, retval, "while initializing random key generator");
+ exit_status++;
(void) krb5_finish_key(&master_encblock);
return;
}
@@ -529,14 +559,17 @@
if (argc < 3) {
com_err(argv[0], 0, "Too few arguments");
com_err(argv[0], 0, "Usage: %s instance name [name ...]", argv[0]);
+ exit_status++;
return;
}
if (!dbactive) {
com_err(argv[0], 0, Err_no_database);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(argv[0], 0, Err_no_master_msg);
+ exit_status++;
return;
}
@@ -553,6 +586,7 @@
strcat(ktname, "-new-srvtab");
if (retval = krb5_kt_resolve(ktname, &ktid)) {
com_err(argv[0], retval, "while resolving keytab name '%s'", ktname);
+ exit_status++;
return;
}
@@ -563,6 +597,7 @@
com_err(argv[0], ENOMEM,
"while preparing to extract key for %s/%s",
argv[i], argv[1]);
+ exit_status++;
continue;
}
strcpy(pname, argv[i]);
@@ -575,6 +610,7 @@
if (retval = krb5_parse_name(pname, &princ)) {
com_err(argv[0], retval, "while parsing %s", pname);
+ exit_status++;
free(pname);
continue;
}
@@ -582,15 +618,18 @@
if (retval = krb5_db_get_principal(princ, &dbentry, &nentries,
&more)) {
com_err(argv[0], retval, "while retrieving %s", pname);
+ exit_status++;
goto cleanmost;
} else if (more) {
com_err(argv[0], KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE,
"while retrieving %s", pname);
+ exit_status++;
if (nentries)
krb5_db_free_principal(&dbentry, nentries);
goto cleanmost;
} else if (!nentries) {
com_err(argv[0], KRB5_KDB_NOENTRY, "while retrieving %s", pname);
+ exit_status++;
goto cleanmost;
}
if (retval = krb5_kdb_decrypt_key(&master_encblock,
@@ -597,6 +636,7 @@
&dbentry.key,
&newentry.key)) {
com_err(argv[0], retval, "while decrypting key for '%s'", pname);
+ exit_status++;
goto cleanall;
}
newentry.principal = princ;
@@ -604,6 +644,7 @@
if (retval = krb5_kt_add_entry(ktid, &newentry)) {
com_err(argv[0], retval, "while adding key to keytab '%s'",
ktname);
+ exit_status++;
} else
printf("'%s' added to keytab '%s'\n",
pname, ktname);
@@ -615,8 +656,10 @@
free(pname);
krb5_free_principal(princ);
}
- if (retval = krb5_kt_close(ktid))
+ if (retval = krb5_kt_close(ktid)) {
com_err(argv[0], retval, "while closing keytab");
+ exit_status++;
+ }
return;
}
@@ -638,14 +681,17 @@
if (argc < 3) {
com_err(argv[0], 0, "Too few arguments");
com_err(argv[0], 0, "Usage: %s instance name [name ...]", argv[0]);
+ exit_status++;
return;
}
if (!dbactive) {
com_err(argv[0], 0, Err_no_database);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(argv[0], 0, Err_no_master_msg);
+ exit_status++;
return;
}
@@ -661,6 +707,7 @@
strcat(ktname, "-new-v4-srvtab");
if ((fout = fopen(ktname, "w")) == NULL) {
com_err(argv[0], 0, "Couldn't create file '%s'.\n", ktname);
+ exit_status++;
return;
}
for (i = 2; i < argc; i++) {
@@ -670,6 +717,7 @@
com_err(argv[0], ENOMEM,
"while preparing to extract key for %s/%s",
argv[i], argv[1]);
+ exit_status++;
continue;
}
strcpy(pname, argv[i]);
@@ -682,6 +730,7 @@
if (retval = krb5_parse_name(pname, &princ)) {
com_err(argv[0], retval, "while parsing %s", pname);
+ exit_status++;
free(pname);
continue;
}
@@ -689,15 +738,18 @@
if (retval = krb5_db_get_principal(princ, &dbentry, &nentries,
&more)) {
com_err(argv[0], retval, "while retrieving %s", pname);
+ exit_status++;
goto cleanmost;
} else if (more) {
com_err(argv[0], KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE,
"while retrieving %s", pname);
+ exit_status++;
if (nentries)
krb5_db_free_principal(&dbentry, nentries);
goto cleanmost;
} else if (!nentries) {
com_err(argv[0], KRB5_KDB_NOENTRY, "while retrieving %s", pname);
+ exit_status++;
goto cleanmost;
}
if (retval = krb5_kdb_decrypt_key(&master_encblock,
@@ -704,10 +756,12 @@
&dbentry.key,
&key)) {
com_err(argv[0], retval, "while decrypting key for '%s'", pname);
+ exit_status++;
goto cleanall;
}
if (key.keytype != 1) {
com_err(argv[0], 0, "%s does not have a DES key!", pname);
+ exit_status++;
memset((char *)key.contents, 0, key.length);
krb5_xfree(key.contents);
continue;
@@ -779,6 +833,7 @@
if (retval = krb5_unparse_name(entry->principal, &name)) {
com_err(lis->cmdname, retval, "while unparsing principal");
+ exit_status++;
return retval;
}
if (check_print(entry)) {
@@ -801,11 +856,13 @@
if (!dbactive) {
com_err(argv[0], 0, Err_no_database);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(argv[0], 0, Err_no_master_msg);
+ exit_status++;
return;
}
lis.cmdname = argv[0];
@@ -853,22 +910,27 @@
if (argc < 2) {
com_err(argv[0], 0, "Too few arguments");
com_err(argv[0], 0, "Usage: %s principal", argv[0]);
+ exit_status++;
return;
}
if (!dbactive) {
com_err(argv[0], 0, Err_no_database);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(argv[0], 0, Err_no_master_msg);
+ exit_status++;
return;
}
if (retval = krb5_parse_name(argv[1], &newprinc)) {
com_err(argv[0], retval, "while parsing '%s'", argv[1]);
+ exit_status++;
return;
}
if (princ_exists(argv[0], newprinc) == NO_PRINC) {
com_err(argv[0], 0, "principal '%s' is not in the database", argv[1]);
+ exit_status++;
krb5_free_principal(newprinc);
return;
}
@@ -883,8 +945,10 @@
printf("OK, deleting '%s'\n", argv[1]);
if (retval = krb5_db_delete_principal(newprinc, &one)) {
com_err(argv[0], retval, "while deleting '%s'", argv[1]);
+ exit_status++;
} else if (one != 1) {
com_err(argv[0], 0, "no principal deleted? unknown error");
+ exit_status++;
}
#ifdef __STDC__
printf("\a\a\aWARNING: Be sure to take '%s' off all access control lists\n\tbefore reallocating the name\n", argv[1]);
@@ -916,30 +980,37 @@
if (argc < 2) {
com_err(argv[0], 0, "Too few arguments");
com_err(argv[0], 0, "Usage: %s principal", argv[0]);
+ exit_status++;
return;
}
if (!dbactive) {
com_err(argv[0], 0, Err_no_database);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(argv[0], 0, Err_no_master_msg);
+ exit_status++;
return;
}
if (retval = krb5_parse_name(argv[1], &newprinc)) {
com_err(argv[0], retval, "while parsing '%s'", argv[1]);
+ exit_status++;
return;
}
if (retval = krb5_db_get_principal(newprinc, &entry, &nprincs, &more)) {
com_err(argv[0], retval, "while trying to get principal's database entry");
+ exit_status++;
return;
}
if (change && !nprincs) {
com_err(argv[0], 0, "No principal '%s' exists", argv[1]);
+ exit_status++;
goto errout;
}
if (!change && nprincs) {
com_err(argv[0], 0, "Principal '%s' already exists.", argv[1]);
+ exit_status++;
goto errout;
}
@@ -947,6 +1018,7 @@
retval = create_db_entry(newprinc, &entry);
if (retval) {
com_err(argv[0], retval, "While creating new db entry.");
+ exit_status++;
goto errout;
}
nprincs = 1;
@@ -954,6 +1026,7 @@
if (retval = krb5_random_key(&master_encblock, master_random, &tempkey)) {
com_err(argv[0], retval, "while generating random key");
+ exit_status++;
return;
}
@@ -986,16 +1059,20 @@
krb5_free_keyblock(tempkey);
if (retval) {
com_err(argv[0], retval, "while encrypting key for '%s'", argv[1]);
+ exit_status++;
goto errout;
}
if (retval = krb5_db_put_principal(&entry, &nprincs)) {
com_err(argv[0], retval, "while storing entry for '%s'\n", argv[1]);
+ exit_status++;
goto errout;
}
- if (nprincs != 1)
+ if (nprincs != 1) {
com_err(argv[0], 0, "entry not stored in database (unknown failure)");
+ exit_status++;
+ }
errout:
krb5_free_principal(newprinc);
@@ -1041,18 +1118,22 @@
if (argc != 2) {
com_err(cmdname, 0,
"Usage: %s [-onlyrealmsalt|-norealmsalt] principal", argv[0]);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(cmdname, 0, Err_no_master_msg);
+ exit_status++;
return;
}
if (retval = krb5_parse_name(argv[1], &newprinc)) {
com_err(cmdname, retval, "while parsing '%s'", argv[1]);
+ exit_status++;
return;
}
if (princ_exists(cmdname, newprinc) != NO_PRINC) {
com_err(cmdname, 0, "principal '%s' already exists", argv[1]);
+ exit_status++;
krb5_free_principal(newprinc);
return;
}
@@ -1071,18 +1152,22 @@
if (argc < 2) {
com_err(argv[0], 0, "Too few arguments");
com_err(argv[0], 0, "Usage: %s principal", argv[0]);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(argv[0], 0, Err_no_master_msg);
+ exit_status++;
return;
}
if (retval = krb5_parse_name(argv[1], &newprinc)) {
com_err(argv[0], retval, "while parsing '%s'", argv[1]);
+ exit_status++;
return;
}
if (princ_exists(argv[0], newprinc) != NO_PRINC) {
com_err(argv[0], 0, "principal '%s' already exists", argv[1]);
+ exit_status++;
krb5_free_principal(newprinc);
return;
}
@@ -1116,22 +1201,27 @@
if (argc != 2) {
com_err(cmdname, 0,
"Usage: %s [-onlyrealmsalt|-norealmsalt] principal", argv[0]);
+ exit_status++;
return;
}
if (!dbactive) {
com_err(cmdname, 0, Err_no_database);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(cmdname, 0, Err_no_master_msg);
+ exit_status++;
return;
}
if (retval = krb5_parse_name(argv[1], &newprinc)) {
com_err(cmdname, retval, "while parsing '%s'", argv[1]);
+ exit_status++;
return;
}
if ((vno = princ_exists(argv[0], newprinc)) == NO_PRINC) {
com_err(cmdname, 0, "No principal '%s' exists!", argv[1]);
+ exit_status++;
krb5_free_principal(newprinc);
return;
}
@@ -1151,22 +1241,27 @@
if (argc < 2) {
com_err(argv[0], 0, "Too few arguments");
com_err(argv[0], 0, "Usage: %s principal", argv[0]);
+ exit_status++;
return;
}
if (!dbactive) {
com_err(argv[0], 0, Err_no_database);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(argv[0], 0, Err_no_master_msg);
+ exit_status++;
return;
}
if (retval = krb5_parse_name(argv[1], &newprinc)) {
com_err(argv[0], retval, "while parsing '%s'", argv[1]);
+ exit_status++;
return;
}
if ((vno = princ_exists(argv[0], newprinc)) == NO_PRINC) {
com_err(argv[0], 0, "No principal '%s' exists!", argv[1]);
+ exit_status++;
krb5_free_principal(newprinc);
return;
}
@@ -1201,6 +1296,7 @@
krb5_default_pwd_prompt2,
password, &pwsize)) {
com_err(cmdname, retval, "while reading password for '%s'", newprinc);
+ exit_status++;
return;
}
pwd.data = password;
@@ -1213,6 +1309,7 @@
if (retval = krb5_principal2salt(string_princ, &salt.saltdata)) {
com_err(cmdname, retval,
"while converting principal to salt for '%s'", newprinc);
+ exit_status++;
return;
}
break;
@@ -1225,6 +1322,7 @@
&salt.saltdata)) {
com_err(cmdname, retval,
"while converting principal to salt for '%s'", newprinc);
+ exit_status++;
return;
}
break;
@@ -1235,6 +1333,7 @@
&foo)) {
com_err(cmdname, retval,
"while converting principal to salt for '%s'", newprinc);
+ exit_status++;
return;
}
salt.saltdata = *foo;
@@ -1243,6 +1342,7 @@
}
default:
com_err(cmdname, 0, "Don't know how to enter salt type %d", salttype);
+ exit_status++;
return;
}
retval = krb5_string_to_key(&master_encblock, master_keyblock.keytype,
@@ -1253,6 +1353,7 @@
if (retval) {
com_err(cmdname, retval, "while converting password to key for '%s'",
newprinc);
+ exit_status++;
krb5_xfree(salt.saltdata.data);
return;
}
@@ -1282,38 +1383,46 @@
if (argc < 2) {
com_err(argv[0], 0, "Too few arguments");
com_err(argv[0], 0, "Usage: %s principal", argv[0]);
+ exit_status++;
return;
}
if (!dbactive) {
com_err(argv[0], 0, Err_no_database);
+ exit_status++;
return;
}
if (!valid_master_key) {
com_err(argv[0], 0, Err_no_master_msg);
+ exit_status++;
return;
}
if (retval = krb5_parse_name(argv[1], &princ)) {
com_err(argv[0], retval, "while parsing '%s'", argv[1]);
+ exit_status++;
return;
}
if (retval = krb5_db_get_principal(princ, &entry, &nprincs, &more)) {
com_err(argv[0], retval, "while trying to get principal's database entry");
+ exit_status++;
goto errout;
}
if (!nprincs) {
com_err(argv[0], 0, "Principal %s not found.", argv[1]);
+ exit_status++;
goto errout;
}
if (retval = krb5_unparse_name(entry.principal, &pr_name)) {
com_err(argv[0], retval, "while unparsing principal");
+ exit_status++;
goto errout;
}
if (retval = krb5_unparse_name(entry.mod_name, &pr_mod)) {
com_err(argv[0], retval, "while unparsing 'modified by' principal");
+ exit_status++;
goto errout;
}
@@ -1324,6 +1433,7 @@
if (!nprincs) {
com_err(argv[0], 0, "Principal '%s' does not exist", argv[1]);
+ exit_status++;
goto errout;
}
@@ -1339,11 +1449,13 @@
{
if (argc != 2) {
com_err(argv[0], 0, "Usage: %s directory", argv[0]);
+ exit_status++;
return;
}
if (chdir(argv[1])) {
com_err(argv[0], errno,
"Couldn't change directory to %s", argv[1]);
+ exit_status++;
}
}
@@ -1360,6 +1472,7 @@
if (!getwd(buf)) {
com_err(argv[0], 0, "Couldn't get working directory: %s",
buf);
+ exit_status++;
return;
}
puts(buf);
@@ -1385,6 +1498,7 @@
finished = TRUE;
if (retval && retval != KRB5_KDB_DBNOTINITED) {
com_err(progname, retval, "while closing database");
+ exit_status++;
return 1;
}
return 0;
--- /afs/gza.com/development/krb5.beta4/src/admin/edit/dump.c Thu Jun 9 11:34:00 1994
+++ dump.c Thu Sep 1 17:39:45 1994
@@ -55,6 +55,7 @@
krb5_encrypt_block master_encblock;
extern char *current_dbname;
extern krb5_boolean dbactive;
+extern int exit_status;
void update_ok_file();
@@ -70,11 +71,13 @@
if (retval = krb5_unparse_name(entry->principal, &name)) {
com_err(arg->comerr_name, retval, "while unparsing principal");
+ exit_status++;
return retval;
}
if (retval = krb5_unparse_name(entry->mod_name, &mod_name)) {
free(name);
com_err(arg->comerr_name, retval, "while unparsing principal");
+ exit_status++;
return retval;
}
fprintf(arg->f, "%d\t%d\t%d\t%d\t%d\t%d\t%s\t%d\t", strlen(name),
@@ -121,10 +124,12 @@
if (argc > 2) {
com_err(argv[0], 0, "Usage: %s filename", argv[0]);
+ exit_status++;
return;
}
if (!dbactive) {
com_err(argv[0], 0, Err_no_database);
+ exit_status++;
return;
}
if (argc == 2) {
@@ -142,6 +147,7 @@
if (!(f = fopen(argv[1], "w"))) {
com_err(argv[0], errno,
"While opening file %s for writing", argv[1]);
+ exit_status++;
return;
}
} else {
@@ -170,6 +176,7 @@
== NULL) {
com_err(progname, ENOMEM,
"while allocating filename for update_ok_file");
+ exit_status++;
return;
}
strcpy(file_ok, file_name);
@@ -177,6 +184,7 @@
if ((fd = open(file_ok, O_WRONLY|O_CREAT|O_TRUNC, 0600)) < 0) {
com_err(progname, errno, "while creating 'ok' file, '%s'",
file_ok);
+ exit_status++;
free(file_ok);
return;
}
@@ -206,10 +214,12 @@
if (argc != 3) {
com_err(argv[0], 0, "Usage: %s filename dbname", argv[0]);
+ exit_status++;
return;
}
if (!(new_dbname = malloc(strlen(argv[2])+2))) {
com_err(argv[0], 0, "No room to allocate new database name!");
+ exit_status++;
return;
}
strcpy(new_dbname, argv[2]);
@@ -217,6 +227,7 @@
if (retval = krb5_db_create(new_dbname)) {
com_err(argv[0], retval, "while creating database '%s'",
new_dbname);
+ exit_status++;
return;
}
if (dbactive) {
@@ -224,6 +235,7 @@
retval != KRB5_KDB_DBNOTINITED) {
com_err(argv[0], retval,
"while closing previous database");
+ exit_status++;
return;
}
}
@@ -243,6 +255,7 @@
if (!(f = fopen(argv[1], "r"))) {
com_err(argv[0], errno,
"While opening file %s for writing", argv[1]);
+ exit_status++;
return;
}
fgets(buf, sizeof(buf), f);
@@ -452,6 +465,7 @@
}
if (load_error) {
printf("Error while loading database, aborting load.\n");
+ exit_status += load_error;
if (retval = kdb5_db_destroy(new_dbname)) {
com_err(argv[0], retval,
"while destroying temporary database '%s'",