@@ -30,7 +30,7 @@ func AddUser(user string, uid int, gid int) {
30
30
}
31
31
}
32
32
33
- // doesFileContainEntry returns true of the entry string is contained in the given file
33
+ // doesFileContainEntry returns true if the entry string exists in the given file
34
34
func doesFileContainEntry (file string , entry string ) bool {
35
35
data , err := os .ReadFile (file )
36
36
if err != nil {
@@ -41,16 +41,19 @@ func doesFileContainEntry(file string, entry string) bool {
41
41
}
42
42
43
43
// addEntry appends an entry string to the given file
44
- func addEntry (file string , entry string ) {
44
+ func addEntry (file string , entry string ) error {
45
45
f , err := os .OpenFile (file ,
46
46
os .O_APPEND | os .O_WRONLY , 0644 )
47
47
if err != nil {
48
48
log .Errorln ("Error opening file:" , file , err )
49
+ return err
49
50
}
50
51
defer f .Close ()
51
52
if _ , err := f .WriteString (entry ); err != nil {
52
53
log .Errorln ("Error appending entry to file:" , file , err )
54
+ return err
53
55
}
56
+ return nil
54
57
}
55
58
56
59
// IsRootUser returns true if the current process is root and false otherwise.
@@ -80,32 +83,36 @@ func UserLogger() *log.Entry {
80
83
81
84
// DropPrivileges switches to another UNIX user by dropping root privileges
82
85
// Initially based on https://stackoverflow.com/a/75545491/6875981
83
- func DropPrivileges (userToSwitchTo string ) {
86
+ func DropPrivileges (userToSwitchTo string ) error {
84
87
// Lookup user and group IDs for the user we want to switch to.
85
88
userInfo , err := user .Lookup (userToSwitchTo )
86
89
if err != nil {
87
90
log .Errorln ("Error looking up user:" , userToSwitchTo , err )
91
+ return err
88
92
}
89
93
// Convert group ID and user ID from string to int.
90
94
gid , err := strconv .Atoi (userInfo .Gid )
91
95
if err != nil {
92
96
log .Errorln ("Error converting gid:" , userInfo .Gid , err )
97
+ return err
93
98
}
94
99
uid , err := strconv .Atoi (userInfo .Uid )
95
100
if err != nil {
96
101
log .Errorln ("Error converting uid:" , userInfo .Uid , err )
102
+ return err
97
103
}
98
104
99
105
// Limitation: Debugger gets stuck when stepping over these syscalls!
100
106
// No breakpoints beyond this point are hit.
101
107
// Set group ID (real and effective).
102
- err = syscall .Setgid (gid )
103
- if err != nil {
108
+ if err = syscall .Setgid (gid ); err != nil {
104
109
log .Errorln ("Failed to set group ID:" , err )
110
+ return err
105
111
}
106
112
// Set user ID (real and effective).
107
- err = syscall .Setuid (uid )
108
- if err != nil {
113
+ if err = syscall .Setuid (uid ); err != nil {
109
114
log .Errorln ("Failed to set user ID:" , err )
115
+ return err
110
116
}
117
+ return nil
111
118
}
0 commit comments