Skip to content

Commit 01be95f

Browse files
committed
Update merge.go
Signed-off-by: Teoh Suh Haw <suh.haw.teoh@intel.com>
1 parent f0ebfb9 commit 01be95f

1 file changed

Lines changed: 49 additions & 20 deletions

File tree

internal/config/merge.go

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -137,29 +137,14 @@ func MergeConfigurations(userTemplate, defaultTemplate *ImageTemplate) (*ImageTe
137137
// Validate immutability configuration and fix if needed
138138
validateAndFixImmutabilityConfig(&mergedTemplate)
139139

140-
// Debug mode: Pretty print the merged template
140+
// Debug mode: Pretty print the merged template with sensitive data redacted
141141
if IsDebugMode() {
142-
// pretty, err := json.MarshalIndent(mergedTemplate, "", " ")
143-
// Build a redacted debug view of the merged template that avoids sensitive fields
144-
debugView := struct {
145-
ImageName string `json:"imageName"`
146-
SystemConfigName string `json:"systemConfigName"`
147-
Immutability bool `json:"immutability"`
148-
Packages []string `json:"packages"`
149-
}{
150-
ImageName: mergedTemplate.Image.Name,
151-
SystemConfigName: mergedTemplate.SystemConfig.Name,
152-
Immutability: mergedTemplate.IsImmutabilityEnabled(),
153-
Packages: mergedTemplate.SystemConfig.Packages,
154-
}
155-
156-
pretty, err := json.MarshalIndent(debugView, "", " ")
142+
redactedTemplate := redactSensitiveData(&mergedTemplate)
143+
pretty, err := json.MarshalIndent(redactedTemplate, "", " ")
157144
if err != nil {
158-
// log.Warnf("Failed to pretty print merged template: %v", err)
159-
log.Warnf("Failed to pretty print merged template debug view: %v", err)
145+
log.Warnf("Failed to pretty print merged template: %v", err)
160146
} else {
161-
// log.Debugf("Merged Template:\n%s", string(pretty))
162-
log.Debugf("Merged Template (redacted):\n%s", string(pretty))
147+
log.Debugf("Merged Template (sensitive data redacted):\n%s", string(pretty))
163148
}
164149
}
165150

@@ -169,6 +154,50 @@ func MergeConfigurations(userTemplate, defaultTemplate *ImageTemplate) (*ImageTe
169154
return &mergedTemplate, nil
170155
}
171156

157+
// redactSensitiveData creates a copy of the template with sensitive data redacted for safe logging.
158+
// This prevents passwords, keys, and other sensitive information from appearing in logs.
159+
func redactSensitiveData(template *ImageTemplate) *ImageTemplate {
160+
// Create a deep copy
161+
redacted := *template
162+
redacted.SystemConfig = redactSensitiveSystemConfig(template.SystemConfig)
163+
return &redacted
164+
}
165+
166+
// redactSensitiveSystemConfig creates a copy of SystemConfig with sensitive fields redacted
167+
func redactSensitiveSystemConfig(config SystemConfig) SystemConfig {
168+
redacted := config
169+
170+
// Redact user passwords and sensitive user data
171+
if len(config.Users) > 0 {
172+
redacted.Users = make([]UserConfig, len(config.Users))
173+
for i, user := range config.Users {
174+
redactedUser := user
175+
// Redact password if present
176+
if user.Password != "" {
177+
redactedUser.Password = "[REDACTED]"
178+
}
179+
// Redact hash algorithm to prevent revealing password security details
180+
if user.HashAlgo != "" {
181+
redactedUser.HashAlgo = "[REDACTED]"
182+
}
183+
redacted.Users[i] = redactedUser
184+
}
185+
}
186+
187+
// Redact secure boot keys/certificates (sensitive file paths that could reveal security setup)
188+
if config.Immutability.SecureBootDBKey != "" {
189+
redacted.Immutability.SecureBootDBKey = "[REDACTED]"
190+
}
191+
if config.Immutability.SecureBootDBCrt != "" {
192+
redacted.Immutability.SecureBootDBCrt = "[REDACTED]"
193+
}
194+
if config.Immutability.SecureBootDBCer != "" {
195+
redacted.Immutability.SecureBootDBCer = "[REDACTED]"
196+
}
197+
198+
return redacted
199+
}
200+
172201
// mergeSystemConfig merges a single system configuration
173202
func mergeSystemConfig(defaultConfig, userConfig SystemConfig) SystemConfig {
174203
merged := defaultConfig // Start with default

0 commit comments

Comments
 (0)