Fix HDB rename/close order in iprop slave
This commit is contained in:
		| @@ -155,24 +155,24 @@ get_creds(krb5_context context, const char *keytab_str, | ||||
| } | ||||
|  | ||||
| static krb5_error_code | ||||
| ihave (krb5_context context, krb5_auth_context auth_context, | ||||
|        int fd, uint32_t version) | ||||
| ihave(krb5_context context, krb5_auth_context auth_context, | ||||
|       int fd, uint32_t version) | ||||
| { | ||||
|     int ret; | ||||
|     u_char buf[8]; | ||||
|     krb5_storage *sp; | ||||
|     krb5_data data; | ||||
|  | ||||
|     sp = krb5_storage_from_mem (buf, 8); | ||||
|     krb5_store_int32 (sp, I_HAVE); | ||||
|     krb5_store_int32 (sp, version); | ||||
|     krb5_storage_free (sp); | ||||
|     sp = krb5_storage_from_mem(buf, 8); | ||||
|     krb5_store_int32(sp, I_HAVE); | ||||
|     krb5_store_int32(sp, version); | ||||
|     krb5_storage_free(sp); | ||||
|     data.length = 8; | ||||
|     data.data   = buf; | ||||
|  | ||||
|     ret = krb5_write_priv_message(context, auth_context, &fd, &data); | ||||
|     if (ret) | ||||
| 	krb5_warn (context, ret, "krb5_write_message"); | ||||
| 	krb5_warn(context, ret, "krb5_write_message"); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| @@ -345,24 +345,24 @@ reinit_log(krb5_context context, | ||||
| { | ||||
|     krb5_error_code ret; | ||||
|  | ||||
|     ret = kadm5_log_reinit (server_context); | ||||
|     ret = kadm5_log_reinit(server_context); | ||||
|     if (ret) | ||||
| 	krb5_err(context, 1, ret, "kadm5_log_reinit"); | ||||
|  | ||||
|     ret = kadm5_log_set_version (server_context, vno - 1); | ||||
|     ret = kadm5_log_set_version(server_context, vno - 1); | ||||
|     if (ret) | ||||
| 	krb5_err (context, 1, ret, "kadm5_log_set_version"); | ||||
| 	krb5_err(context, 1, ret, "kadm5_log_set_version"); | ||||
|  | ||||
|     ret = kadm5_log_nop (server_context); | ||||
|     ret = kadm5_log_nop(server_context); | ||||
|     if (ret) | ||||
| 	krb5_err (context, 1, ret, "kadm5_log_nop"); | ||||
| 	krb5_err(context, 1, ret, "kadm5_log_nop"); | ||||
| } | ||||
|  | ||||
|  | ||||
| static krb5_error_code | ||||
| receive_everything (krb5_context context, int fd, | ||||
| 		    kadm5_server_context *server_context, | ||||
| 		    krb5_auth_context auth_context) | ||||
| receive_everything(krb5_context context, int fd, | ||||
| 		   kadm5_server_context *server_context, | ||||
| 		   krb5_auth_context auth_context) | ||||
| { | ||||
|     int ret; | ||||
|     krb5_data data; | ||||
| @@ -383,8 +383,8 @@ receive_everything (krb5_context context, int fd, | ||||
| 	krb5_err(context,1, ret, "hdb_create"); | ||||
|     free(dbname); | ||||
|  | ||||
|     ret = hdb_set_master_keyfile (context, | ||||
| 				  mydb, server_context->config.stash_file); | ||||
|     ret = hdb_set_master_keyfile(context, | ||||
| 				 mydb, server_context->config.stash_file); | ||||
|     if(ret) | ||||
| 	krb5_err(context,1, ret, "hdb_set_master_keyfile"); | ||||
|  | ||||
| @@ -392,7 +392,7 @@ receive_everything (krb5_context context, int fd, | ||||
|        up on error, I won't */ | ||||
|     ret = mydb->hdb_open(context, mydb, O_RDWR | O_CREAT | O_TRUNC, 0600); | ||||
|     if (ret) | ||||
| 	krb5_err (context, 1, ret, "db->open"); | ||||
| 	krb5_err(context, 1, ret, "db->open"); | ||||
|  | ||||
|     sp = NULL; | ||||
|     krb5_data_zero(&data); | ||||
| @@ -400,14 +400,14 @@ receive_everything (krb5_context context, int fd, | ||||
| 	ret = krb5_read_priv_message(context, auth_context, &fd, &data); | ||||
|  | ||||
| 	if (ret) { | ||||
| 	    krb5_warn (context, ret, "krb5_read_priv_message"); | ||||
| 	    krb5_warn(context, ret, "krb5_read_priv_message"); | ||||
| 	    goto cleanup; | ||||
| 	} | ||||
|  | ||||
| 	sp = krb5_storage_from_data (&data); | ||||
| 	sp = krb5_storage_from_data(&data); | ||||
| 	if (sp == NULL) | ||||
| 	    krb5_errx (context, 1, "krb5_storage_from_data"); | ||||
| 	krb5_ret_int32 (sp, &opcode); | ||||
| 	    krb5_errx(context, 1, "krb5_storage_from_data"); | ||||
| 	krb5_ret_int32(sp, &opcode); | ||||
| 	if (opcode == ONE_PRINC) { | ||||
| 	    krb5_data fake_data; | ||||
| 	    hdb_entry_ex entry; | ||||
| @@ -419,45 +419,52 @@ receive_everything (krb5_context context, int fd, | ||||
|  | ||||
| 	    memset(&entry, 0, sizeof(entry)); | ||||
|  | ||||
| 	    ret = hdb_value2entry (context, &fake_data, &entry.entry); | ||||
| 	    ret = hdb_value2entry(context, &fake_data, &entry.entry); | ||||
| 	    if (ret) | ||||
| 		krb5_err (context, 1, ret, "hdb_value2entry"); | ||||
| 		krb5_err(context, 1, ret, "hdb_value2entry"); | ||||
| 	    ret = mydb->hdb_store(server_context->context, | ||||
| 				  mydb, | ||||
| 				  0, &entry); | ||||
| 	    if (ret) | ||||
| 		krb5_err (context, 1, ret, "hdb_store"); | ||||
| 		krb5_err(context, 1, ret, "hdb_store"); | ||||
|  | ||||
| 	    hdb_free_entry (context, &entry); | ||||
| 	    krb5_data_free (&data); | ||||
| 	    hdb_free_entry(context, &entry); | ||||
| 	    krb5_data_free(&data); | ||||
| 	} else if (opcode == NOW_YOU_HAVE) | ||||
| 	    ; | ||||
| 	else | ||||
| 	    krb5_errx (context, 1, "strange opcode %d", opcode); | ||||
| 	    krb5_errx(context, 1, "strange opcode %d", opcode); | ||||
|     } while (opcode == ONE_PRINC); | ||||
|  | ||||
|     if (opcode != NOW_YOU_HAVE) | ||||
| 	krb5_errx (context, 1, "receive_everything: strange %d", opcode); | ||||
| 	krb5_errx(context, 1, "receive_everything: strange %d", opcode); | ||||
|  | ||||
|     krb5_ret_int32 (sp, &vno); | ||||
|     krb5_ret_int32(sp, &vno); | ||||
|     krb5_storage_free(sp); | ||||
|  | ||||
|     reinit_log(context, server_context, vno); | ||||
|  | ||||
|     ret = mydb->hdb_rename (context, mydb, server_context->db->hdb_name); | ||||
|     ret = mydb->hdb_close(context, mydb); | ||||
|     if (ret) | ||||
| 	krb5_err (context, 1, ret, "db->rename"); | ||||
| 	krb5_err(context, 1, ret, "db->close"); | ||||
|  | ||||
|     ret = mydb->hdb_rename(context, mydb, server_context->db->hdb_name); | ||||
|     if (ret) | ||||
| 	krb5_err(context, 1, ret, "db->rename"); | ||||
|  | ||||
|     server_context->log_context.version = vno; | ||||
|  | ||||
|     return 0; | ||||
|  | ||||
|  cleanup: | ||||
|     krb5_data_free (&data); | ||||
|     krb5_data_free(&data); | ||||
|  | ||||
|     ret = mydb->hdb_close (context, mydb); | ||||
|     if (ret) | ||||
| 	krb5_err (context, 1, ret, "db->close"); | ||||
| 	krb5_err(context, 1, ret, "db->close"); | ||||
|  | ||||
|     ret = mydb->hdb_destroy (context, mydb); | ||||
|     ret = mydb->hdb_destroy(context, mydb); | ||||
|     if (ret) | ||||
| 	krb5_err (context, 1, ret, "db->destroy"); | ||||
| 	krb5_err(context, 1, ret, "db->destroy"); | ||||
|  | ||||
|     krb5_warnx(context, "receive complete database, version %ld", (long)vno); | ||||
|     return ret; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicolas Williams
					Nicolas Williams