Proper way to check if current user can sudo

Marc Cornellà via sudo-users <[email protected]> Sat, 26 Mar 2022 21:47:57 +0100
Newsgroups gmane.comp.tools.sudo.user
Message-ID <CACn48NrqO03LSfizEU+Qo4sVEgxszti6PPar+a4k7PGa9z49wA@mail.gmail.com>
Hi everyone,

I'm reposting the query I made in the GitHub repository:
https://github.com/sudo-project/sudo/issues/130.

I'm trying to write a check to see if the user can run `sudo`, in a way
that is portable and compatible with old versions of `sudo`, and doesn't
ask the user for a password.
This is what I came up with, but can this be done better? I really hate
having to check for the correct wording in the error message, since that
seems to be very brittle.

user_can_sudo() {
  # The following command has 3 parts:
  #
  # 1. Run `sudo` with `-v`. Does the following:
  #    • with privilege: asks for a password immediately.
  #    • without privilege: exits with error code 1 and prints the message:
  #      Sorry, user <username> may not run sudo on <hostname>
  #
  # 2. Pass `-n` to `sudo` to tell it to not ask for a password. If the
  #    password is not required, the command will finish with exit code 0.
  #    If one is required, sudo will exit with error code 1 and print the
  #    message:
  #    sudo: a password is required
  #
  # 3. Check for the words "may not run sudo" in the output to really tell
  #    whether the user has privileges or not. For that we have to make sure
  #    to run `sudo` in the default locale (with `LANG=`) so that the
message
  #    stays consistent regardless of the user's locale.
  #
  LANG= sudo -n -v 2>&1 | grep -q "may not run sudo"
}

Thanks,

Marc Cornellà
____________________________________________________________
sudo-users mailing list <[email protected]>
For list information, options, or to unsubscribe, visit:
https://www.sudo.ws/mailman/listinfo/sudo-users