@@ -59,7 +59,7 @@ Examples:
59
59
},
60
60
},
61
61
Handler : func (inv * serpent.Invocation ) error {
62
- return Run (config , inv .Args )
62
+ return Run (inv . Context (), config , inv .Args )
63
63
},
64
64
}
65
65
}
@@ -89,7 +89,9 @@ func setupLogging(logLevel string) *slog.Logger {
89
89
}
90
90
91
91
// Run executes the jail command with the given configuration and arguments
92
- func Run (config Config , args []string ) error {
92
+ func Run (ctx context.Context , config Config , args []string ) error {
93
+ ctx , cancel := context .WithCancel (ctx )
94
+ defer cancel ()
93
95
logger := setupLogging (config .LogLevel )
94
96
95
97
// Get command arguments
@@ -113,7 +115,7 @@ func Run(config Config, args []string) error {
113
115
ruleEngine := rules .NewRuleEngine (allowRules , logger )
114
116
115
117
// Create auditor
116
- // auditor := audit.NewLoggingAuditor(logger)
118
+ auditor := audit .NewLoggingAuditor (logger )
117
119
118
120
// Create certificate manager
119
121
certManager , err := tls .NewCertificateManager (logger )
@@ -123,53 +125,32 @@ func Run(config Config, args []string) error {
123
125
}
124
126
125
127
// Create jail instance
126
- jailInstance , err := jail .New (context . Background () , jail.Config {
128
+ jailInstance , err := jail .New (ctx , jail.Config {
127
129
RuleEngine : ruleEngine ,
128
- Auditor : audit .NewLoggingAuditor (logger ),
129
- Logger : logger ,
130
+ Auditor : auditor ,
130
131
CertManager : certManager ,
132
+ Logger : logger ,
131
133
})
132
134
if err != nil {
133
- logger .Error ("Failed to create jail instance" , "error" , err )
134
135
return fmt .Errorf ("failed to create jail instance: %v" , err )
135
136
}
136
137
137
138
// Setup signal handling BEFORE any setup
138
139
sigChan := make (chan os.Signal , 1 )
139
140
signal .Notify (sigChan , syscall .SIGINT , syscall .SIGTERM )
140
141
141
- // Handle signals immediately in background
142
- go func () {
143
- sig := <- sigChan
144
- logger .Info ("Received signal during setup, cleaning up..." , "signal" , sig )
145
- err := jailInstance .Close ()
146
- if err != nil {
147
- logger .Error ("Emergency cleanup failed" , "error" , err )
148
- }
149
- os .Exit (1 )
150
- }()
151
-
152
- // Ensure cleanup happens no matter what
153
- defer func () {
154
- logger .Debug ("Starting cleanup process" )
155
- err := jailInstance .Close ()
156
- if err != nil {
157
- logger .Error ("Failed to cleanup jail" , "error" , err )
158
- } else {
159
- logger .Debug ("Cleanup completed successfully" )
160
- }
161
- }()
162
-
163
142
// Open jail (starts network namespace and proxy server)
164
143
err = jailInstance .Start ()
165
144
if err != nil {
166
- logger .Error ("Failed to open jail" , "error" , err )
167
145
return fmt .Errorf ("failed to open jail: %v" , err )
168
146
}
169
-
170
- // Create context for graceful shutdown
171
- ctx , cancel := context .WithCancel (context .Background ())
172
- defer cancel ()
147
+ defer func () {
148
+ logger .Info ("Closing jail..." )
149
+ err := jailInstance .Close ()
150
+ if err != nil {
151
+ logger .Error ("Failed to close jail" , "error" , err )
152
+ }
153
+ }()
173
154
174
155
// Execute command in jail
175
156
go func () {
0 commit comments