plugins/python/example_*.py: document returning error string
This commit is contained in:

committed by
Todd C. Miller

parent
9c4f076f85
commit
bbbcb39334
@@ -19,6 +19,12 @@ class SudoGroupPlugin(sudo.Plugin):
|
|||||||
sudo.RC.ERROR -1
|
sudo.RC.ERROR -1
|
||||||
sudo.RC.USAGE_ERROR -2
|
sudo.RC.USAGE_ERROR -2
|
||||||
|
|
||||||
|
If the plugin encounters an error, instead of just returning sudo.RC.ERROR
|
||||||
|
result code it can also add a message describing the problem.
|
||||||
|
This can be done by raising the special exception:
|
||||||
|
raise sudo.PluginError("Message")
|
||||||
|
This added message will be used by the audit plugins.
|
||||||
|
|
||||||
If the function returns "None" (for example does not call return), it will
|
If the function returns "None" (for example does not call return), it will
|
||||||
be considered sudo.RC.OK. If an exception other than sudo.PluginError is
|
be considered sudo.RC.OK. If an exception other than sudo.PluginError is
|
||||||
raised, its backtrace will be shown to the user and the plugin function
|
raised, its backtrace will be shown to the user and the plugin function
|
||||||
|
@@ -29,6 +29,12 @@ class SudoIOPlugin(sudo.Plugin):
|
|||||||
sudo.RC.ERROR -1
|
sudo.RC.ERROR -1
|
||||||
sudo.RC.USAGE_ERROR -2
|
sudo.RC.USAGE_ERROR -2
|
||||||
|
|
||||||
|
If the plugin encounters an error, instead of just returning sudo.RC.ERROR
|
||||||
|
result code it can also add a message describing the problem.
|
||||||
|
This can be done by raising the special exception:
|
||||||
|
raise sudo.PluginError("Message")
|
||||||
|
This added message will be used by the audit plugins.
|
||||||
|
|
||||||
If the function returns "None" (for example does not call return), it will
|
If the function returns "None" (for example does not call return), it will
|
||||||
be considered sudo.RC.OK. If an exception other than sudo.PluginError is
|
be considered sudo.RC.OK. If an exception other than sudo.PluginError is
|
||||||
raised, its backtrace will be shown to the user and the plugin function
|
raised, its backtrace will be shown to the user and the plugin function
|
||||||
|
@@ -12,10 +12,6 @@ from typing import Tuple
|
|||||||
VERSION = 1.0
|
VERSION = 1.0
|
||||||
|
|
||||||
|
|
||||||
class SudoPluginError(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class SudoPolicyPlugin(sudo.Plugin):
|
class SudoPolicyPlugin(sudo.Plugin):
|
||||||
"""Example sudo policy plugin
|
"""Example sudo policy plugin
|
||||||
|
|
||||||
@@ -34,6 +30,12 @@ class SudoPolicyPlugin(sudo.Plugin):
|
|||||||
sudo.RC.ERROR -1
|
sudo.RC.ERROR -1
|
||||||
sudo.RC.USAGE_ERROR -2
|
sudo.RC.USAGE_ERROR -2
|
||||||
|
|
||||||
|
If the plugin encounters an error, instead of just returning sudo.RC.ERROR
|
||||||
|
result code it can also add a message describing the problem.
|
||||||
|
This can be done by raising the special exception:
|
||||||
|
raise sudo.PluginError("Message")
|
||||||
|
This added message will be used by the audit plugins.
|
||||||
|
|
||||||
If the function returns "None" (for example does not call return), it will
|
If the function returns "None" (for example does not call return), it will
|
||||||
be considered sudo.RC.OK. If an exception other than sudo.PluginError is
|
be considered sudo.RC.OK. If an exception other than sudo.PluginError is
|
||||||
raised, its backtrace will be shown to the user and the plugin function
|
raised, its backtrace will be shown to the user and the plugin function
|
||||||
@@ -57,7 +59,7 @@ class SudoPolicyPlugin(sudo.Plugin):
|
|||||||
in the sudo manual ("man sudo").
|
in the sudo manual ("man sudo").
|
||||||
"""
|
"""
|
||||||
if not version.startswith("1."):
|
if not version.startswith("1."):
|
||||||
raise sudo.SudoException(
|
raise sudo.PluginError(
|
||||||
"This plugin plugin is not compatible with python plugin"
|
"This plugin plugin is not compatible with python plugin"
|
||||||
"API version {}".format(version))
|
"API version {}".format(version))
|
||||||
|
|
||||||
@@ -71,18 +73,16 @@ class SudoPolicyPlugin(sudo.Plugin):
|
|||||||
sudo.log_error("You are not allowed to run this command!")
|
sudo.log_error("You are not allowed to run this command!")
|
||||||
return sudo.RC.REJECT
|
return sudo.RC.REJECT
|
||||||
|
|
||||||
|
raise sudo.PluginError("You are not allowed to run this command!")
|
||||||
|
|
||||||
# The environment the command will be executed with (we allow any here)
|
# The environment the command will be executed with (we allow any here)
|
||||||
user_env_out = sudo.options_from_dict(self.user_env) + env_add
|
user_env_out = sudo.options_from_dict(self.user_env) + env_add
|
||||||
|
|
||||||
try:
|
command_info_out = sudo.options_from_dict({
|
||||||
command_info_out = sudo.options_from_dict({
|
"command": self._find_on_path(cmd), # Absolute path of command
|
||||||
"command": self._find_on_path(cmd), # Absolute path of command
|
"runas_uid": self._runas_uid(), # The user id
|
||||||
"runas_uid": self._runas_uid(), # The user id
|
"runas_gid": self._runas_gid(), # The group id
|
||||||
"runas_gid": self._runas_gid(), # The group id
|
})
|
||||||
})
|
|
||||||
except SudoPluginError as error:
|
|
||||||
sudo.log_error(str(error))
|
|
||||||
return sudo.RC.ERROR
|
|
||||||
|
|
||||||
return (sudo.RC.ACCEPT, command_info_out, argv, user_env_out)
|
return (sudo.RC.ACCEPT, command_info_out, argv, user_env_out)
|
||||||
|
|
||||||
@@ -156,7 +156,8 @@ class SudoPolicyPlugin(sudo.Plugin):
|
|||||||
try:
|
try:
|
||||||
return pwd.getpwnam(runas_user)
|
return pwd.getpwnam(runas_user)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise SudoPluginError("Could not find user '{}'".format(runas_user))
|
raise sudo.PluginError("Could not find user "
|
||||||
|
"'{}'".format(runas_user))
|
||||||
|
|
||||||
def _runas_uid(self):
|
def _runas_uid(self):
|
||||||
return self._runas_pwd().pw_uid
|
return self._runas_pwd().pw_uid
|
||||||
@@ -169,5 +170,5 @@ class SudoPolicyPlugin(sudo.Plugin):
|
|||||||
try:
|
try:
|
||||||
return grp.getgrnam(runas_group).gr_gid
|
return grp.getgrnam(runas_group).gr_gid
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise SudoPluginError(
|
raise sudo.PluginError(
|
||||||
"Could not find group '{}'".format(runas_group))
|
"Could not find group '{}'".format(runas_group))
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
Example sudo python plugin will log to /some/not/writable/directory/sudo.log
|
Example sudo python plugin will log to /some/not/writable/directory/sudo.log
|
||||||
Traceback:
|
Traceback:
|
||||||
File "SRC_DIR/example_io_plugin.py", line 61, in __init__
|
File "SRC_DIR/example_io_plugin.py", line 67, in __init__
|
||||||
self._open_log_file(path.join(log_path, "sudo.log"))
|
self._open_log_file(path.join(log_path, "sudo.log"))
|
||||||
File "SRC_DIR/example_io_plugin.py", line 134, in _open_log_file
|
File "SRC_DIR/example_io_plugin.py", line 140, in _open_log_file
|
||||||
self._log_file = open(log_path, "a")
|
self._log_file = open(log_path, "a")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user