fix: harden operations and configuration recovery
This commit is contained in:
+13
-2
@@ -323,8 +323,19 @@ func (a *Adapter) disable() error {
|
||||
if metadata.OriginalScript != nil {
|
||||
restored = []byte(*metadata.OriginalScript)
|
||||
}
|
||||
if err := a.writeOwned(a.configuration.EnvironmentFile, restored); err != nil {
|
||||
return fmt.Errorf("restore Shell environment: %w", err)
|
||||
current, err := a.files.ReadFile(a.configuration.EnvironmentFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("read managed Shell environment before restore: %w", err)
|
||||
}
|
||||
switch currentFingerprint := fingerprint(current); currentFingerprint {
|
||||
case fingerprint(restored):
|
||||
// A previous recovery completed the file write but not metadata cleanup.
|
||||
case metadata.Fingerprint:
|
||||
if err := a.writeOwned(a.configuration.EnvironmentFile, restored); err != nil {
|
||||
return fmt.Errorf("restore Shell environment: %w", err)
|
||||
}
|
||||
default:
|
||||
return errors.New("Shell environment changed after proxyctl applied it; refusing to overwrite current configuration or discard recovery metadata")
|
||||
}
|
||||
if err := a.files.Remove(a.configuration.RecoveryFile); err != nil && !errors.Is(err, fs.ErrNotExist) {
|
||||
return fmt.Errorf("remove Shell recovery metadata after environment changed: %w", err)
|
||||
|
||||
Reference in New Issue
Block a user