Skip to content

Commit 0d588ad

Browse files
blink-so[bot]f0ssel
andcommitted
fix: resolve certificate manager and environment handling issues
Fixed two critical runtime issues: ## Certificate Manager Fix - NewCertificateManager now auto-determines config directory when empty string passed - Resolves 'mkdir : no such file or directory' error - CLI passes empty configDir expecting internal determination ## Environment Handling Fix - Initialize preparedEnv map in constructors (newLinux, newMacOSJail) - Prevents 'assignment to entry in nil map' panic - SetEnv can now be called before Open() safely - Simplified environment preservation logic ## Technical Details - preparedEnv map now created in constructors - Open() respects existing SetEnv values (doesn't overwrite) - Cleaner, simpler code without complex preservation logic Tested: Build succeeds, certificate errors resolved, ready for jail testing. Co-authored-by: f0ssel <[email protected]>
1 parent f20cc35 commit 0d588ad

File tree

3 files changed

+22
-7
lines changed

3 files changed

+22
-7
lines changed

namespace/linux.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ type Linux struct {
2727
// newLinux creates a new Linux network jail instance
2828
func newLinux(config Config, logger *slog.Logger) (*Linux, error) {
2929
return &Linux{
30-
config: config,
31-
namespace: newNamespaceName(),
32-
logger: logger,
30+
config: config,
31+
namespace: newNamespaceName(),
32+
logger: logger,
33+
preparedEnv: make(map[string]string),
3334
}, nil
3435
}
3536

@@ -64,12 +65,14 @@ func (l *Linux) Open() error {
6465

6566
// Prepare environment once during setup
6667
l.logger.Debug("Preparing environment")
67-
l.preparedEnv = make(map[string]string)
6868

6969
// Start with current environment
7070
for _, envVar := range os.Environ() {
7171
if parts := strings.SplitN(envVar, "=", 2); len(parts) == 2 {
72-
l.preparedEnv[parts[0]] = parts[1]
72+
// Only set if not already set by SetEnv
73+
if _, exists := l.preparedEnv[parts[0]]; !exists {
74+
l.preparedEnv[parts[0]] = parts[1]
75+
}
7376
}
7477
}
7578

namespace/macos.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func newMacOSJail(config Config, logger *slog.Logger) (*MacOSNetJail, error) {
4040
pfRulesPath: pfRulesPath,
4141
mainRulesPath: mainRulesPath,
4242
logger: logger,
43+
preparedEnv: make(map[string]string),
4344
}, nil
4445
}
4546

@@ -63,12 +64,14 @@ func (m *MacOSNetJail) Open() error {
6364

6465
// Prepare environment once during setup
6566
m.logger.Debug("Preparing environment")
66-
m.preparedEnv = make(map[string]string)
6767

6868
// Start with current environment
6969
for _, envVar := range os.Environ() {
7070
if parts := strings.SplitN(envVar, "=", 2); len(parts) == 2 {
71-
m.preparedEnv[parts[0]] = parts[1]
71+
// Only set if not already set by SetEnv
72+
if _, exists := m.preparedEnv[parts[0]]; !exists {
73+
m.preparedEnv[parts[0]] = parts[1]
74+
}
7275
}
7376
}
7477

tls/tls.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ type CertificateManager struct {
3131

3232
// NewCertificateManager creates a new certificate manager
3333
func NewCertificateManager(configDir string, logger *slog.Logger) (*CertificateManager, error) {
34+
// If no configDir provided, determine it automatically
35+
if configDir == "" {
36+
var err error
37+
configDir, err = getConfigDir()
38+
if err != nil {
39+
return nil, fmt.Errorf("failed to determine config directory: %v", err)
40+
}
41+
}
42+
3443
cm := &CertificateManager{
3544
certCache: make(map[string]*tls.Certificate),
3645
logger: logger,

0 commit comments

Comments
 (0)