When the password is changed from the UI, a lot of correct things happen, but not enough of them.
In general, when it receives a UiChangePasswordRequest, the Configurator actor sends a NewPasswordMessage to each of the actors listed in its new_password_subs field. That's good.
The problem is that when the Configurator receives a BindMessage, it populates the new_password_subs field with only the Neighborhood's recipient. This means that when the password changes, only the Neighborhood finds out about the change, and every other actor that needs encrypted data from the PersistentConfiguration keeps the old password. That means the Node goes crazy and has to be restarted whenever the password is changed.
Tasks:
- Look through the
PersistentConfiguration and find all the methods that require a password.
- Find all the actors that call any of those methods.
- Implement a handler for the
NewPassword message in each of those actors, and make sure the BindMessage contains a NewPassword recipient for each of those actors.
- In the
Configurator's BindMessage handler, add those new recipients to the Configurator's new_password_subs list.
- Write a test (probably a single-hop
_integration test) that changes a Node's database password and then verifies that every actor that uses the database password is using the new password properly to access the database.
When the password is changed from the UI, a lot of correct things happen, but not enough of them.
In general, when it receives a
UiChangePasswordRequest, theConfiguratoractor sends aNewPasswordMessageto each of the actors listed in itsnew_password_subsfield. That's good.The problem is that when the
Configuratorreceives aBindMessage, it populates thenew_password_subsfield with only theNeighborhood's recipient. This means that when the password changes, only theNeighborhoodfinds out about the change, and every other actor that needs encrypted data from thePersistentConfigurationkeeps the old password. That means the Node goes crazy and has to be restarted whenever the password is changed.Tasks:
PersistentConfigurationand find all the methods that require a password.NewPasswordmessage in each of those actors, and make sure theBindMessagecontains aNewPasswordrecipient for each of those actors.Configurator'sBindMessagehandler, add those new recipients to theConfigurator'snew_password_subslist._integrationtest) that changes a Node's database password and then verifies that every actor that uses the database password is using the new password properly to access the database.