@@ -223,6 +223,8 @@ var (
223223// Custom errors.
224224var (
225225 errNoPerm = errors .New ("forbidden response from API server" )
226+ errConfig = errors .New ("unable to get cacct config" )
227+ errUser = errors .New ("unable to change user context" )
226228 errInternal = errors .New ("internal server error" )
227229)
228230
@@ -491,7 +493,7 @@ func main() {
491493 // the config file can be read as the owner of this app
492494 config , err := readConfig ()
493495 if err != nil {
494- os .Exit (checkErr (fmt .Errorf ("failed to read config file: %w" , err )))
496+ os .Exit (checkErr (fmt .Errorf ("%w: failed to read config file: %w" , errConfig , err )))
495497 }
496498
497499 // Now time to drop privileges so that rest of app will be run as regular user
@@ -503,23 +505,23 @@ func main() {
503505 // Convert UID anf GID to int
504506 uid , err := strconv .Atoi (currentUser .Uid )
505507 if err != nil {
506- os .Exit (checkErr (fmt .Errorf ("failed to get current user uid: %w" , err )))
508+ os .Exit (checkErr (fmt .Errorf ("%w: failed to get current user uid: %w" , errUser , err )))
507509 }
508510
509511 gid , err := strconv .Atoi (currentUser .Gid )
510512 if err != nil {
511- os .Exit (checkErr (fmt .Errorf ("failed to get current user gid: %w" , err )))
513+ os .Exit (checkErr (fmt .Errorf ("%w: failed to get current user gid: %w" , errUser , err )))
512514 }
513515
514516 // Set UID and GID to current user
515517 err = syscall .Setuid (uid )
516518 if err != nil {
517- os .Exit (checkErr (fmt .Errorf ("failed to set current user uid: %w" , err )))
519+ os .Exit (checkErr (fmt .Errorf ("%w: failed to set current user uid: %w" , errUser , err )))
518520 }
519521
520522 err = syscall .Setgid (gid )
521523 if err != nil {
522- os .Exit (checkErr (fmt .Errorf ("failed to set current user gid: %w" , err )))
524+ os .Exit (checkErr (fmt .Errorf ("%w: failed to set current user gid: %w" , errUser , err )))
523525 }
524526 }
525527
@@ -799,9 +801,15 @@ func checkErr(err error) int {
799801 if err != nil {
800802 switch {
801803 case errors .Is (err , errNoPerm ):
802- fmt .Fprintln (os .Stderr , "forbidden. It is likely that the user is attempting to view statistics of others" )
804+ fmt .Fprintln (os .Stderr , "error: forbidden. It is likely that the user is attempting to view statistics of others" )
803805 case errors .Is (err , errInternal ):
804- fmt .Fprintln (os .Stderr , "server did not return any data due to unknown error" )
806+ fmt .Fprintln (os .Stderr , "error: server did not return any data due to unknown error" )
807+ case errors .Is (err , errConfig ):
808+ fmt .Fprintln (os .Stderr , "error: " + errConfig .Error ())
809+ case errors .Is (err , errUser ):
810+ fmt .Fprintln (os .Stderr , "error: " + errUser .Error ())
811+ default :
812+ fmt .Fprintln (os .Stderr , err .Error ())
805813 }
806814
807815 return 1
0 commit comments