krb5 commit: De-indent process_k5beta6_record()
Greg Hudson
ghudson at MIT.EDU
Mon Jul 30 19:11:47 EDT 2012
https://github.com/krb5/krb5/commit/ee25c0b2fed9647e826698f7b2f3c0f250c244bf
commit ee25c0b2fed9647e826698f7b2f3c0f250c244bf
Author: Nicolas Williams <nico at cryptonector.com>
Date: Mon Jul 23 16:14:52 2012 -0500
De-indent process_k5beta6_record()
src/kadmin/dbutil/dump.c | 457 +++++++++++++++++++++-------------------------
1 files changed, 210 insertions(+), 247 deletions(-)
diff --git a/src/kadmin/dbutil/dump.c b/src/kadmin/dbutil/dump.c
index 326635f..2d817df 100644
--- a/src/kadmin/dbutil/dump.c
+++ b/src/kadmin/dbutil/dump.c
@@ -220,6 +220,8 @@ static const char null_mprinc_name[] = "kdb5_dump at MISSING";
#define oflock_error _("%s: cannot lock %s (%s)\n")
#define dumprec_err _("%s: error performing %s dump (%s)\n")
#define trash_end_fmt _("%s(%d): ignoring trash at end of line: ")
+#define read_nomem _("entry (out of memory)")
+#define read_header _("dump entry header")
#define read_name_string _("name string")
#define read_key_type _("key type")
#define read_key_data _("key data")
@@ -1796,291 +1798,252 @@ process_k5beta_record(fname, kcontext, filep, flags, linenop)
* Returns -1 for end of file, 0 for success and 1 for failure.
*/
static int
-process_k5beta6_record(fname, kcontext, filep, flags, linenop)
- char *fname;
- krb5_context kcontext;
- FILE *filep;
- int flags;
- int *linenop;
+process_k5beta6_record(char *fname, krb5_context kcontext, FILE *filep,
+ int flags, int *linenop)
{
- int retval;
+ int retval = 1;
krb5_db_entry *dbentry;
krb5_int32 t1, t2, t3, t4, t5, t6, t7, t8, t9;
int nread;
- int error;
+ int error = 1;
int i, j;
char *name;
krb5_key_data *kp, *kdatap;
krb5_tl_data **tlp, *tl;
krb5_octet *op;
krb5_error_code kret;
- const char *try2read;
+ const char *try2read = read_header;
- try2read = (char *) NULL;
dbentry = krb5_db_alloc(kcontext, NULL, sizeof(*dbentry));
if (dbentry == NULL)
- return(1);
+ return 1;
memset(dbentry, 0, sizeof(*dbentry));
(*linenop)++;
- retval = 1;
- name = (char *) NULL;
- kp = (krb5_key_data *) NULL;
- op = (krb5_octet *) NULL;
- error = 0;
- kret = 0;
+ name = NULL;
+ kp = NULL;
+ op = NULL;
nread = fscanf(filep, "%d\t%d\t%d\t%d\t%d\t", &t1, &t2, &t3, &t4, &t5);
- if (nread == 5) {
- /* Get memory for flattened principal name */
- if (!(name = (char *) malloc((size_t) t2 + 1)))
- error++;
-
- /* Get memory for and form tagged data linked list */
- tlp = &dbentry->tl_data;
- for (i=0; i<t3; i++) {
- if ((*tlp = (krb5_tl_data *) malloc(sizeof(krb5_tl_data)))) {
- memset(*tlp, 0, sizeof(krb5_tl_data));
- tlp = &((*tlp)->tl_data_next);
- dbentry->n_tl_data++;
- }
- else {
- error++;
- break;
- }
- }
+ if (nread == EOF) {
+ error = 0;
+ retval = -1;
+ goto cleanup;
+ }
+ if (nread != 5)
+ goto cleanup;
+
+ /* Get memory for flattened principal name */
+ if ((name = malloc(t2 + 1)) == NULL)
+ goto cleanup;
+
+ /* Get memory for and form tagged data linked list */
+ tlp = &dbentry->tl_data;
+ for (i = 0; i < t3; i++) {
+ if (!(*tlp = malloc(sizeof(krb5_tl_data))))
+ goto cleanup;
+ memset(*tlp, 0, sizeof(krb5_tl_data));
+ tlp = &((*tlp)->tl_data_next);
+ dbentry->n_tl_data++;
+ }
+
+ /* Get memory for key list */
+ if (t4 && (kp = malloc(t4*sizeof(krb5_key_data))) == NULL)
+ goto cleanup;
- /* Get memory for key list */
- if (t4 && !(kp = (krb5_key_data *) malloc((size_t)
- (t4*sizeof(krb5_key_data)))))
- error++;
-
- /* Get memory for extra data */
- if (t5 && !(op = (krb5_octet *) malloc((size_t) t5)))
- error++;
-
- if (!error) {
- dbentry->len = t1;
- dbentry->n_key_data = t4;
- dbentry->e_length = t5;
- if (kp) {
- memset(kp, 0, (size_t) (t4*sizeof(krb5_key_data)));
- dbentry->key_data = kp;
- kp = (krb5_key_data *) NULL;
+ /* Get memory for extra data */
+ if (t5 && !(op = malloc(t5)))
+ goto cleanup;
+
+ dbentry->len = t1;
+ dbentry->n_key_data = t4;
+ dbentry->e_length = t5;
+
+ if (kp != NULL) {
+ memset(kp, 0, t4*sizeof(krb5_key_data));
+ dbentry->key_data = kp;
+ kp = NULL;
+ }
+ if (op != NULL) {
+ memset(op, 0, t5);
+ dbentry->e_data = op;
+ op = NULL;
+ }
+
+ /* Read in and parse the principal name */
+ if (read_string(filep, name, t2, linenop)) {
+ try2read = no_mem_fmt;
+ goto cleanup;
+ }
+ if ((kret = krb5_parse_name(kcontext, name, &dbentry->princ))) {
+ fprintf(stderr, parse_err_fmt,
+ fname, *linenop, name, error_message(kret));
+ try2read = read_name_string;
+ goto cleanup;
+ }
+
+ /* Get the fixed principal attributes */
+ nread = fscanf(filep, "%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t",
+ &t2, &t3, &t4, &t5, &t6, &t7, &t8, &t9);
+ if (nread != 8) {
+ try2read = read_nint_data;
+ goto cleanup;
+ }
+ dbentry->attributes = (krb5_flags) t2;
+ dbentry->max_life = (krb5_deltat) t3;
+ dbentry->max_renewable_life = (krb5_deltat) t4;
+ dbentry->expiration = (krb5_timestamp) t5;
+ dbentry->pw_expiration = (krb5_timestamp) t6;
+ dbentry->last_success = (krb5_timestamp) t7;
+ dbentry->last_failed = (krb5_timestamp) t8;
+ dbentry->fail_auth_count = (krb5_kvno) t9;
+ dbentry->mask = KADM5_LOAD | KADM5_PRINCIPAL | KADM5_ATTRIBUTES |
+ KADM5_MAX_LIFE | KADM5_MAX_RLIFE |
+ KADM5_PRINC_EXPIRE_TIME | KADM5_LAST_SUCCESS |
+ KADM5_LAST_FAILED | KADM5_FAIL_AUTH_COUNT;
+
+ /*
+ * Get the tagged data.
+ *
+ * Really, this code ought to discard tl data types
+ * that it knows are special to the current version
+ * and were not supported in the previous version.
+ * But it's a pain to implement that here, and doing
+ * it at dump time has almost as good an effect, so
+ * that's what I did. [krb5-admin/89]
+ */
+ if (dbentry->n_tl_data) {
+ for (tl = dbentry->tl_data; tl; tl = tl->tl_data_next) {
+ nread = fscanf(filep, "%d\t%d\t", &t1, &t2);
+ if (nread != 2) {
+ try2read = read_ttypelen;
+ goto cleanup;
}
- if (op) {
- memset(op, 0, (size_t) t5);
- dbentry->e_data = op;
- op = (krb5_octet *) NULL;
+ tl->tl_data_type = (krb5_int16) t1;
+ tl->tl_data_length = (krb5_int16) t2;
+ if (!tl->tl_data_length) {
+ /* Should be a null field */
+ nread = fscanf(filep, "%d", &t9);
+ if ((nread != 1) || (t9 != -1)) {
+ try2read = read_tcontents;
+ goto cleanup;
+ }
+ continue;
+ }
+ if (!(tl->tl_data_contents = malloc(t2 + 1)) ||
+ read_octet_string(filep, tl->tl_data_contents, t2)) {
+ try2read = read_nomem;
+ goto cleanup;
}
- /* Read in and parse the principal name */
- if (!read_string(filep, name, t2, linenop) &&
- !(kret = krb5_parse_name(kcontext, name, &dbentry->princ))) {
-
- /* Get the fixed principal attributes */
- nread = fscanf(filep, "%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t",
- &t2, &t3, &t4, &t5, &t6, &t7, &t8, &t9);
- if (nread == 8) {
- dbentry->attributes = (krb5_flags) t2;
- dbentry->max_life = (krb5_deltat) t3;
- dbentry->max_renewable_life = (krb5_deltat) t4;
- dbentry->expiration = (krb5_timestamp) t5;
- dbentry->pw_expiration = (krb5_timestamp) t6;
- dbentry->last_success = (krb5_timestamp) t7;
- dbentry->last_failed = (krb5_timestamp) t8;
- dbentry->fail_auth_count = (krb5_kvno) t9;
- dbentry->mask = KADM5_LOAD | KADM5_PRINCIPAL | KADM5_ATTRIBUTES |
- KADM5_MAX_LIFE | KADM5_MAX_RLIFE |
- KADM5_PRINC_EXPIRE_TIME | KADM5_LAST_SUCCESS |
- KADM5_LAST_FAILED | KADM5_FAIL_AUTH_COUNT;
- } else {
- try2read = read_nint_data;
- error++;
- }
+ /* test to set mask fields */
+ if (t1 == KRB5_TL_KADM_DATA) {
+ XDR xdrs;
+ osa_princ_ent_rec osa_princ_ent;
/*
- * Get the tagged data.
- *
- * Really, this code ought to discard tl data types
- * that it knows are special to the current version
- * and were not supported in the previous version.
- * But it's a pain to implement that here, and doing
- * it at dump time has almost as good an effect, so
- * that's what I did. [krb5-admin/89]
+ * Assuming aux_attributes will always be
+ * there
*/
- if (!error && dbentry->n_tl_data) {
- for (tl = dbentry->tl_data; tl; tl = tl->tl_data_next) {
- nread = fscanf(filep, "%d\t%d\t", &t1, &t2);
- if (nread == 2) {
- tl->tl_data_type = (krb5_int16) t1;
- tl->tl_data_length = (krb5_int16) t2;
- if (tl->tl_data_length) {
- if (!(tl->tl_data_contents =
- (krb5_octet *) malloc((size_t) t2+1)) ||
- read_octet_string(filep,
- tl->tl_data_contents,
- t2)) {
- try2read = read_tcontents;
- error++;
- break;
- }
- /* test to set mask fields */
- if (t1 == KRB5_TL_KADM_DATA) {
- XDR xdrs;
- osa_princ_ent_rec osa_princ_ent;
-
- /*
- * Assuming aux_attributes will always be
- * there
- */
- dbentry->mask |= KADM5_AUX_ATTRIBUTES;
-
- /* test for an actual policy reference */
- memset(&osa_princ_ent, 0, sizeof(osa_princ_ent));
- xdrmem_create(&xdrs, (char *)tl->tl_data_contents,
- tl->tl_data_length, XDR_DECODE);
- if (xdr_osa_princ_ent_rec(&xdrs, &osa_princ_ent) &&
- (osa_princ_ent.aux_attributes & KADM5_POLICY) &&
- osa_princ_ent.policy != NULL) {
-
- dbentry->mask |= KADM5_POLICY;
- kdb_free_entry(NULL, NULL, &osa_princ_ent);
- }
- xdr_destroy(&xdrs);
- }
- }
- else {
- /* Should be a null field */
- nread = fscanf(filep, "%d", &t9);
- if ((nread != 1) || (t9 != -1)) {
- error++;
- try2read = read_tcontents;
- break;
- }
- }
- }
- else {
- try2read = read_ttypelen;
- error++;
- break;
- }
- }
- if (!error)
- dbentry->mask |= KADM5_TL_DATA;
+ dbentry->mask |= KADM5_AUX_ATTRIBUTES;
+
+ /* test for an actual policy reference */
+ memset(&osa_princ_ent, 0, sizeof(osa_princ_ent));
+ xdrmem_create(&xdrs, (char *)tl->tl_data_contents,
+ tl->tl_data_length, XDR_DECODE);
+ if (xdr_osa_princ_ent_rec(&xdrs, &osa_princ_ent) &&
+ (osa_princ_ent.aux_attributes & KADM5_POLICY) &&
+ osa_princ_ent.policy != NULL) {
+
+ dbentry->mask |= KADM5_POLICY;
+ kdb_free_entry(NULL, NULL, &osa_princ_ent);
}
+ xdr_destroy(&xdrs);
+ }
+ }
+ dbentry->mask |= KADM5_TL_DATA;
+ }
- /* Get the key data */
- if (!error && dbentry->n_key_data) {
- for (i=0; !error && (i<dbentry->n_key_data); i++) {
- kdatap = &dbentry->key_data[i];
- nread = fscanf(filep, "%d\t%d\t", &t1, &t2);
- if (nread == 2) {
- kdatap->key_data_ver = (krb5_int16) t1;
- kdatap->key_data_kvno = (krb5_int16) t2;
-
- for (j=0; j<t1; j++) {
- nread = fscanf(filep, "%d\t%d\t", &t3, &t4);
- if (nread == 2) {
- kdatap->key_data_type[j] = t3;
- kdatap->key_data_length[j] = t4;
- if (t4) {
- if (!(kdatap->key_data_contents[j] =
- (krb5_octet *)
- malloc((size_t) t4+1)) ||
- read_octet_string(filep,
- kdatap->key_data_contents[j],
- t4)) {
- try2read = read_kcontents;
- error++;
- break;
- }
- }
- else {
- /* Should be a null field */
- nread = fscanf(filep, "%d", &t9);
- if ((nread != 1) || (t9 != -1)) {
- error++;
- try2read = read_kcontents;
- break;
- }
- }
- }
- else {
- try2read = read_ktypelen;
- error++;
- break;
- }
- }
- }
- }
- if (!error)
- dbentry->mask |= KADM5_KEY_DATA;
- }
+ /* Get the key data */
+ if (dbentry->n_key_data) {
+ for (i = 0; i < dbentry->n_key_data; i++) {
+ kdatap = &dbentry->key_data[i];
+ nread = fscanf(filep, "%d\t%d\t", &t1, &t2);
+ if (nread != 2) {
+ try2read = read_kcontents;
+ goto cleanup;
+ }
- /* Get the extra data */
- if (!error && dbentry->e_length) {
- if (read_octet_string(filep,
- dbentry->e_data,
- (int) dbentry->e_length)) {
- try2read = read_econtents;
- error++;
- }
+ kdatap->key_data_ver = (krb5_int16) t1;
+ kdatap->key_data_kvno = (krb5_int16) t2;
+
+ for (j = 0; j < t1; j++) {
+ nread = fscanf(filep, "%d\t%d\t", &t3, &t4);
+ if (nread != 2) {
+ try2read = read_ktypelen;
+ goto cleanup;
}
- else {
+ kdatap->key_data_type[j] = t3;
+ kdatap->key_data_length[j] = t4;
+ if (!t4) {
+ /* Should be a null field */
nread = fscanf(filep, "%d", &t9);
if ((nread != 1) || (t9 != -1)) {
- error++;
- try2read = read_econtents;
+ try2read = read_kcontents;
+ goto cleanup;
}
+ continue;
}
-
- /* Finally, find the end of the record. */
- if (!error)
- find_record_end(filep, fname, *linenop);
-
- /*
- * We have either read in all the data or choked.
- */
- if (!error) {
- if ((kret = krb5_db_put_principal(kcontext, dbentry))) {
- fprintf(stderr, store_err_fmt,
- fname, *linenop,
- name, error_message(kret));
- }
- else {
- if (flags & FLAG_VERBOSE)
- fprintf(stderr, add_princ_fmt, name);
- retval = 0;
- }
- }
- else {
- fprintf(stderr, read_err_fmt, fname, *linenop, try2read);
+ if ((kdatap->key_data_contents[j] = malloc(t4 + 1)) == NULL ||
+ read_octet_string(filep, kdatap->key_data_contents[j],
+ t4)) {
+ try2read = read_kcontents;
+ goto cleanup;
}
}
- else {
- if (kret)
- fprintf(stderr, parse_err_fmt,
- fname, *linenop, name, error_message(kret));
- else
- fprintf(stderr, no_mem_fmt, fname, *linenop);
- }
- }
- else {
- fprintf(stderr, rhead_err_fmt, fname, *linenop);
}
+ dbentry->mask |= KADM5_KEY_DATA;
+ }
- if (op)
- free(op);
- if (kp)
- free(kp);
- if (name)
- free(name);
- krb5_db_free_principal(kcontext, dbentry);
+ /* Get the extra data */
+ if (dbentry->e_length) {
+ if (read_octet_string(filep,
+ dbentry->e_data,
+ (int) dbentry->e_length)) {
+ try2read = read_econtents;
+ goto cleanup;
+ }
}
else {
- if (nread == EOF)
- retval = -1;
+ nread = fscanf(filep, "%d", &t9);
+ if ((nread != 1) || (t9 != -1)) {
+ try2read = read_econtents;
+ goto cleanup;
+ }
}
- return(retval);
+
+ /* Finally, find the end of the record. */
+ find_record_end(filep, fname, *linenop);
+
+ if ((kret = krb5_db_put_principal(kcontext, dbentry))) {
+ fprintf(stderr, store_err_fmt, fname, *linenop, name,
+ error_message(kret));
+ goto cleanup;
+ }
+
+ if (flags & FLAG_VERBOSE)
+ fprintf(stderr, add_princ_fmt, name);
+ retval = 0;
+ error = 0;
+
+cleanup:
+ if (error)
+ fprintf(stderr, read_err_fmt, fname, *linenop, try2read);
+
+ free(op);
+ free(kp);
+ free(name);
+ krb5_db_free_principal(kcontext, dbentry);
+
+ return retval;
}
static int
More information about the cvs-krb5
mailing list