6
6
"log/slog"
7
7
"os"
8
8
"os/signal"
9
- "os/user"
10
- "path/filepath"
11
- "strconv"
12
9
"strings"
13
10
"syscall"
14
11
@@ -17,6 +14,7 @@ import (
17
14
"github.com/coder/boundary/jail"
18
15
"github.com/coder/boundary/rules"
19
16
"github.com/coder/boundary/tls"
17
+ "github.com/coder/boundary/util"
20
18
"github.com/coder/serpent"
21
19
)
22
20
@@ -90,7 +88,7 @@ func Run(ctx context.Context, config Config, args []string) error {
90
88
ctx , cancel := context .WithCancel (ctx )
91
89
defer cancel ()
92
90
logger := setupLogging (config .LogLevel )
93
- username , uid , gid , homeDir , configDir := getUserInfo ()
91
+ username , uid , gid , homeDir , configDir := util . GetUserInfo ()
94
92
95
93
// Get command arguments
96
94
if len (args ) == 0 {
@@ -205,42 +203,6 @@ func Run(ctx context.Context, config Config, args []string) error {
205
203
return nil
206
204
}
207
205
208
- // getUserInfo returns information about the current user, handling sudo scenarios
209
- func getUserInfo () (string , int , int , string , string ) {
210
- // Only consider SUDO_USER if we're actually running with elevated privileges
211
- // In environments like Coder workspaces, SUDO_USER may be set to 'root'
212
- // but we're not actually running under sudo
213
- if sudoUser := os .Getenv ("SUDO_USER" ); sudoUser != "" && os .Geteuid () == 0 && sudoUser != "root" {
214
- // We're actually running under sudo with a non-root original user
215
- user , err := user .Lookup (sudoUser )
216
- if err != nil {
217
- return getCurrentUserInfo () // Fallback to current user
218
- }
219
-
220
- uid , _ := strconv .Atoi (os .Getenv ("SUDO_UID" ))
221
- gid , _ := strconv .Atoi (os .Getenv ("SUDO_GID" ))
222
-
223
- // If we couldn't get UID/GID from env, parse from user info
224
- if uid == 0 {
225
- if parsedUID , err := strconv .Atoi (user .Uid ); err == nil {
226
- uid = parsedUID
227
- }
228
- }
229
- if gid == 0 {
230
- if parsedGID , err := strconv .Atoi (user .Gid ); err == nil {
231
- gid = parsedGID
232
- }
233
- }
234
-
235
- configDir := getConfigDir (user .HomeDir )
236
-
237
- return sudoUser , uid , gid , user .HomeDir , configDir
238
- }
239
-
240
- // Not actually running under sudo, use current user
241
- return getCurrentUserInfo ()
242
- }
243
-
244
206
// setupLogging creates a slog logger with the specified level
245
207
func setupLogging (logLevel string ) * slog.Logger {
246
208
var level slog.Level
@@ -265,31 +227,6 @@ func setupLogging(logLevel string) *slog.Logger {
265
227
return slog .New (handler )
266
228
}
267
229
268
- // getCurrentUserInfo gets information for the current user
269
- func getCurrentUserInfo () (string , int , int , string , string ) {
270
- currentUser , err := user .Current ()
271
- if err != nil {
272
- // Fallback with empty values if we can't get user info
273
- return "" , 0 , 0 , "" , ""
274
- }
275
-
276
- uid , _ := strconv .Atoi (currentUser .Uid )
277
- gid , _ := strconv .Atoi (currentUser .Gid )
278
-
279
- configDir := getConfigDir (currentUser .HomeDir )
280
-
281
- return currentUser .Username , uid , gid , currentUser .HomeDir , configDir
282
- }
283
-
284
- // getConfigDir determines the config directory based on XDG_CONFIG_HOME or fallback
285
- func getConfigDir (homeDir string ) string {
286
- // Use XDG_CONFIG_HOME if set, otherwise fallback to ~/.config/coder_boundary
287
- if xdgConfigHome := os .Getenv ("XDG_CONFIG_HOME" ); xdgConfigHome != "" {
288
- return filepath .Join (xdgConfigHome , "coder_boundary" )
289
- }
290
- return filepath .Join (homeDir , ".config" , "coder_boundary" )
291
- }
292
-
293
230
// createJailer creates a new jail instance for the current platform
294
231
func createJailer (config jail.Config , unprivileged bool ) (jail.Jailer , error ) {
295
232
if unprivileged {
0 commit comments