summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 23fc090)
raw | patch | inline | side by side (parent: 23fc090)
author | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Thu, 29 Jul 2010 12:21:20 +0000 (12:21 +0000) | ||
committer | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Thu, 29 Jul 2010 12:21:20 +0000 (12:21 +0000) |
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@19231 594d385d-05f5-0310-b6e9-bd551577e9d8
gosa-plugins/sudo/admin/sudo/class_sudoOption.inc | patch | blob | history |
diff --git a/gosa-plugins/sudo/admin/sudo/class_sudoOption.inc b/gosa-plugins/sudo/admin/sudo/class_sudoOption.inc
index 562df21032b075d6a8984d3e18576362a8888c9a..09b8cb23f82825e3015699bf6027a21f5d0a9bdb 100644 (file)
/*! \brief Sudo option class.
- Allows setting flags/options for a sudo role.
+ Allows setting flags/options for a sudo role.
*/
class sudoOption extends plugin
{
- /* Group attributes */
- protected $sudoOption = array();
- public $attributes = array("sudoOption");
- private $options = array();
- public $ignore_account = TRUE;
-
- /*! \brief Initializes this class
- @param Object $config The GOsa configuration object.
- @param String $dn The object dn.
- */
- function sudoOption(&$config, $dn= NULL)
- {
- plugin::plugin ($config, $dn);
-
- /****
- Create a list of known options
- ****/
- $options = array();
- $option['long_otp_prompt']= array('NAME' =>'long_otp_prompt' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['ignore_dot']= array('NAME' =>'ignore_dot' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
- $option['mail_always']= array('NAME' =>'mail_always' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['mail_badpass']= array('NAME' =>'mail_badpass' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['mail_no_user']= array('NAME' =>'mail_no_user' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
- $option['mail_no_host']= array('NAME' =>'mail_no_host' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['mail_no_perms']= array('NAME' =>'mail_no_perms' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['tty_tickets']= array('NAME' =>'tty_tickets' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
- $option['authenticate']= array('NAME' =>'authenticate' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
- $option['root_sudo']= array('NAME' =>'root_sudo' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
- $option['log_host']= array('NAME' =>'log_host' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['log_year']= array('NAME' =>'log_year' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['shell_noargs']= array('NAME' =>'shell_noargs' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['set_home']= array('NAME' =>'set_home' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['always_set_home']= array('NAME' =>'always_set_home' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['path_info']= array('NAME' =>'path_info' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['preserve_groups']= array('NAME' =>'preserve_groups' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['fqdn']= array('NAME' =>'fqdn' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['insults']= array('NAME' =>'insults' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['requiretty']= array('NAME' =>'requiretty' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['env_editor']= array('NAME' =>'env_editor' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
- $option['rootpw']= array('NAME' =>'rootpw' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['runaspw']= array('NAME' =>'runaspw' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['targetpw']= array('NAME' =>'targetpw' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['set_logname']= array('NAME' =>'set_logname' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
- $option['stay_setuid']= array('NAME' =>'stay_setuid' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
- $option['env_reset']= array('NAME' =>'env_reset' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
- $option['use_loginclass']= array('NAME' =>'use_loginclass' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['noexec']= array('NAME' =>'noexec' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['ignore_local_sudoers']= array('NAME' =>'ignore_local_sudoers' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
- $option['passwd_tries']= array('NAME' =>'passwd_tries' , 'TYPE' => 'INTEGER' , 'DEFAULT' => 3);
- $option['loglinelen']= array('NAME' =>'loglinelen' , 'TYPE' => 'BOOL_INTEGER' , 'DEFAULT' => 80);
- $option['timestamp_timeout']= array('NAME' =>'timestamp_timeout' , 'TYPE' => 'BOOL_INTEGER' , 'DEFAULT' => 0);
- $option['passwd_timeout']= array('NAME' =>'passwd_timeout' , 'TYPE' => 'BOOL_INTEGER' , 'DEFAULT' => 15);
- $option['umask']= array('NAME' =>'umask' , 'TYPE' => 'BOOL_INTEGER' , 'DEFAULT' => "0022");
- $option['mailsub']= array('NAME' =>'mailsub' , 'TYPE' => 'STRING' , 'DEFAULT' => '*** SECURITY information for %h ***');
- $option['badpass_message']= array('NAME' =>'badpass_message' , 'TYPE' => 'STRING' , 'DEFAULT' => 'Sorry, try again');
- $option['timestampdir']= array('NAME' =>'timestampdir' , 'TYPE' => 'STRING' , 'DEFAULT' => '/var/run/sudo');
- $option['timestampowner']= array('NAME' =>'timestampowner' , 'TYPE' => 'STRING' , 'DEFAULT' => 'root');
- $option['passprompt']= array('NAME' =>'passprompt' , 'TYPE' => 'STRING' , 'DEFAULT' => '[sudo] password for %p: ');
- $option['runas_default']= array('NAME' =>'runas_default' , 'TYPE' => 'STRING' , 'DEFAULT' => 'root');
- $option['syslog_goodpri']= array('NAME' =>'syslog_goodpri' , 'TYPE' => 'STRING' , 'DEFAULT' => 'notice');
- $option['syslog_badpri']= array('NAME' =>'syslog_badpri' , 'TYPE' => 'STRING' , 'DEFAULT' => 'alert');
- $option['editor']= array('NAME' =>'editor' , 'TYPE' => 'STRING' , 'DEFAULT' => '/usr/bin/vi');
- $option['noexec_file']= array('NAME' =>'noexec_file' , 'TYPE' => 'STRING' , 'DEFAULT' => '/usr/lib/sudo/sudo_noexec.so');
- $option['lecture']= array('NAME' =>'lecture' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'once');
- $option['lecture_file']= array('NAME' =>'lecture_file' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => '');
- $option['logfile']= array('NAME' =>'logfile' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'syslog');
- $option['syslog']= array('NAME' =>'syslog' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'authpriv');
- $option['mailerpath']= array('NAME' =>'mailerpath' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => '');
- $option['mailerflags']= array('NAME' =>'mailerflags' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => '-t');
- $option['mailto']= array('NAME' =>'mailto' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'root');
- $option['exempt_group']= array('NAME' =>'exempt_group' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'root');
- $option['verifypw']= array('NAME' =>'verifypw' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'all');
- $option['listpw']= array('NAME' =>'listpw' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'any');
- $option['env_check']= array('NAME' =>'env_check' , 'TYPE' => 'LISTS' , 'DEFAULT' => '');
- $option['env_delete']= array('NAME' =>'env_delete' , 'TYPE' => 'LISTS' , 'DEFAULT' => '');
- $option['env_keep']= array('NAME' =>'env_keep' , 'TYPE' => 'LISTS' , 'DEFAULT' => '');
- ksort($option);
- $this->options = $option;
-
- $this->load_options();
- }
-
-
- private function load_options()
- {
-
- /****
- Parse given sudoOption attributes
- ****/
- $this->sudoOption = array();
- if(isset($this->attrs['sudoOption'])){
- for($i = 0 ; $i < $this->attrs['sudoOption']['count']; $i++){
+ /* Group attributes */
+ protected $sudoOption = array();
+ public $attributes = array("sudoOption");
+ private $options = array();
+ public $ignore_account = TRUE;
+
+ /*! \brief Initializes this class
+ @param Object $config The GOsa configuration object.
+ @param String $dn The object dn.
+ */
+ function sudoOption(&$config, $dn= NULL)
+ {
+ plugin::plugin ($config, $dn);
/****
- Detect attribute name/value/negation
+ Create a list of known options
****/
- $opt = $this->attrs['sudoOption'][$i];
+ $options = array();
+ $option['long_otp_prompt']= array('NAME' =>'long_otp_prompt' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['ignore_dot']= array('NAME' =>'ignore_dot' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
+ $option['mail_always']= array('NAME' =>'mail_always' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['mail_badpass']= array('NAME' =>'mail_badpass' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['mail_no_user']= array('NAME' =>'mail_no_user' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
+ $option['mail_no_host']= array('NAME' =>'mail_no_host' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['mail_no_perms']= array('NAME' =>'mail_no_perms' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['tty_tickets']= array('NAME' =>'tty_tickets' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
+ $option['authenticate']= array('NAME' =>'authenticate' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
+ $option['root_sudo']= array('NAME' =>'root_sudo' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
+ $option['log_host']= array('NAME' =>'log_host' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['log_year']= array('NAME' =>'log_year' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['shell_noargs']= array('NAME' =>'shell_noargs' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['set_home']= array('NAME' =>'set_home' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['always_set_home']= array('NAME' =>'always_set_home' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['path_info']= array('NAME' =>'path_info' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['preserve_groups']= array('NAME' =>'preserve_groups' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['fqdn']= array('NAME' =>'fqdn' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['insults']= array('NAME' =>'insults' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['requiretty']= array('NAME' =>'requiretty' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['env_editor']= array('NAME' =>'env_editor' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
+ $option['rootpw']= array('NAME' =>'rootpw' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['runaspw']= array('NAME' =>'runaspw' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['targetpw']= array('NAME' =>'targetpw' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['set_logname']= array('NAME' =>'set_logname' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
+ $option['stay_setuid']= array('NAME' =>'stay_setuid' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
+ $option['env_reset']= array('NAME' =>'env_reset' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'TRUE');
+ $option['use_loginclass']= array('NAME' =>'use_loginclass' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['noexec']= array('NAME' =>'noexec' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['ignore_local_sudoers']= array('NAME' =>'ignore_local_sudoers' , 'TYPE' => 'BOOLEAN' , 'DEFAULT' => 'FALSE');
+ $option['passwd_tries']= array('NAME' =>'passwd_tries' , 'TYPE' => 'INTEGER' , 'DEFAULT' => 3);
+ $option['loglinelen']= array('NAME' =>'loglinelen' , 'TYPE' => 'BOOL_INTEGER' , 'DEFAULT' => 80);
+ $option['timestamp_timeout']= array('NAME' =>'timestamp_timeout' , 'TYPE' => 'BOOL_INTEGER' , 'DEFAULT' => 0);
+ $option['passwd_timeout']= array('NAME' =>'passwd_timeout' , 'TYPE' => 'BOOL_INTEGER' , 'DEFAULT' => 15);
+ $option['umask']= array('NAME' =>'umask' , 'TYPE' => 'BOOL_INTEGER' , 'DEFAULT' => "0022");
+ $option['mailsub']= array('NAME' =>'mailsub' , 'TYPE' => 'STRING' , 'DEFAULT' => '*** SECURITY information for %h ***');
+ $option['badpass_message']= array('NAME' =>'badpass_message' , 'TYPE' => 'STRING' , 'DEFAULT' => 'Sorry, try again');
+ $option['timestampdir']= array('NAME' =>'timestampdir' , 'TYPE' => 'STRING' , 'DEFAULT' => '/var/run/sudo');
+ $option['timestampowner']= array('NAME' =>'timestampowner' , 'TYPE' => 'STRING' , 'DEFAULT' => 'root');
+ $option['passprompt']= array('NAME' =>'passprompt' , 'TYPE' => 'STRING' , 'DEFAULT' => '[sudo] password for %p: ');
+ $option['runas_default']= array('NAME' =>'runas_default' , 'TYPE' => 'STRING' , 'DEFAULT' => 'root');
+ $option['syslog_goodpri']= array('NAME' =>'syslog_goodpri' , 'TYPE' => 'STRING' , 'DEFAULT' => 'notice');
+ $option['syslog_badpri']= array('NAME' =>'syslog_badpri' , 'TYPE' => 'STRING' , 'DEFAULT' => 'alert');
+ $option['editor']= array('NAME' =>'editor' , 'TYPE' => 'STRING' , 'DEFAULT' => '/usr/bin/vi');
+ $option['noexec_file']= array('NAME' =>'noexec_file' , 'TYPE' => 'STRING' , 'DEFAULT' => '/usr/lib/sudo/sudo_noexec.so');
+ $option['lecture']= array('NAME' =>'lecture' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'once');
+ $option['lecture_file']= array('NAME' =>'lecture_file' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => '');
+ $option['logfile']= array('NAME' =>'logfile' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'syslog');
+ $option['syslog']= array('NAME' =>'syslog' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'authpriv');
+ $option['mailerpath']= array('NAME' =>'mailerpath' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => '');
+ $option['mailerflags']= array('NAME' =>'mailerflags' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => '-t');
+ $option['mailto']= array('NAME' =>'mailto' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'root');
+ $option['exempt_group']= array('NAME' =>'exempt_group' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'root');
+ $option['verifypw']= array('NAME' =>'verifypw' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'all');
+ $option['listpw']= array('NAME' =>'listpw' , 'TYPE' => 'STRING_BOOL' , 'DEFAULT' => 'any');
+ $option['env_check']= array('NAME' =>'env_check' , 'TYPE' => 'LISTS' , 'DEFAULT' => '');
+ $option['env_delete']= array('NAME' =>'env_delete' , 'TYPE' => 'LISTS' , 'DEFAULT' => '');
+ $option['env_keep']= array('NAME' =>'env_keep' , 'TYPE' => 'LISTS' , 'DEFAULT' => '');
+ ksort($option);
+ $this->options = $option;
+
+ $this->load_options();
+ }
- /* Get negation */
- $negation = FALSE;
- if(preg_match("/^!/",$opt)){
- $negation = TRUE;
- $opt = preg_replace("/^!/","",$opt);
- }
- /* Get value / name*/
- $value = "";
- if(preg_match("/=/",$opt)){
- $value = preg_replace("/^[^=]*+=/","",$opt);
- $opt = preg_replace("/=.*$/","",$opt);
- }
+ private function load_options()
+ {
- /* Special chars are escaped, remove escape char now.
- \\ => \
- \: => :
- \, => ,
- \= => =
- */
- $value = $this->unescape_command($value);
-
- /* Check if the given value is part of our options list.
- If it is not, add it as type STRING and display a warning.
- */
- if(!isset($this->options[$opt])){
- $this->options[$opt]=array('NAME'=>$opt,'TYPE'=>'STRING','DEFAULT' => '');
- msg_dialog::display(_("Unknown option"),
- sprintf(_("The sudo option '%s' is invalid!"),
- $opt),WARNING_DIALOG);
- }
+ /****
+ Parse given sudoOption attributes
+ ****/
+ $this->sudoOption = array();
+ if(isset($this->attrs['sudoOption'])){
+ for($i = 0 ; $i < $this->attrs['sudoOption']['count']; $i++){
+
+ /****
+ Detect attribute name/value/negation
+ ****/
+ $opt = $this->attrs['sudoOption'][$i];
+
+ /* Get negation */
+ $negation = FALSE;
+ if(preg_match("/^!/",$opt)){
+ $negation = TRUE;
+ $opt = preg_replace("/^!/","",$opt);
+ }
- /* Create internal sudoOption object */
- $option = array();
- $option['NAME'] = $opt;
- $option['VALUE'] = $value;
- $option['NEGATE'] = $negation;
+ /* Get value / name*/
+ $value = "";
+ if(preg_match("/=/",$opt)){
+ $value = preg_replace("/^[^=]*+=/","",$opt);
+ $opt = preg_replace("/=.*$/","",$opt);
+ }
- /* Special handling for mixed flag types.
- Some attributes like (BOOL_INTEGER) can be TRUE/FALSE and INTEGER.
- This means, if the value is empty it is BOOL and $negation defines its boolean value.
- */
- if(in_array($this->options[$opt]['TYPE'],array("BOOL_INTEGER","STRING_BOOL"))){
- if(empty($value)){
- $option['NEGATE'] = FALSE;
- if($negation){
- $option['VALUE'] = "FALSE";
- }else{
- $option['VALUE'] = "TRUE";
- }
- }
- }
+ /* Special chars are escaped, remove escape char now.
+ \\ => \
+ \: => :
+ \, => ,
+ \= => =
+ */
+ $value = $this->unescape_command($value);
+
+ /* Check if the given value is part of our options list.
+ If it is not, add it as type STRING and display a warning.
+ */
+ if(!isset($this->options[$opt])){
+ $this->options[$opt]=array('NAME'=>$opt,'TYPE'=>'STRING','DEFAULT' => '');
+ msg_dialog::display(_("Unknown option"),
+ sprintf(_("The sudo option '%s' is invalid!"),
+ $opt),WARNING_DIALOG);
+ }
- /* Special handling for BOOLEAN values */
- if(in_array($this->options[$opt]['TYPE'],array("BOOLEAN"))){
- $option['NEGATE'] = FALSE;
- if($negation){
- $option['VALUE'] = "FALSE";
- }else{
- $option['VALUE'] = "TRUE";
- }
- }
+ /* Create internal sudoOption object */
+ $option = array();
+ $option['NAME'] = $opt;
+ $option['VALUE'] = $value;
+ $option['NEGATE'] = $negation;
+
+ /* Special handling for mixed flag types.
+ Some attributes like (BOOL_INTEGER) can be TRUE/FALSE and INTEGER.
+ This means, if the value is empty it is BOOL and $negation defines its boolean value.
+ */
+ if(in_array($this->options[$opt]['TYPE'],array("BOOL_INTEGER","STRING_BOOL"))){
+ if(empty($value)){
+ $option['NEGATE'] = FALSE;
+ if($negation){
+ $option['VALUE'] = "FALSE";
+ }else{
+ $option['VALUE'] = "TRUE";
+ }
+ }
+ }
- /* Append values */
- $this->sudoOption[$opt][] = $option;
- }
+ /* Special handling for BOOLEAN values */
+ if(in_array($this->options[$opt]['TYPE'],array("BOOLEAN"))){
+ $option['NEGATE'] = FALSE;
+ if($negation){
+ $option['VALUE'] = "FALSE";
+ }else{
+ $option['VALUE'] = "TRUE";
+ }
+ }
+
+ /* Append values */
+ $this->sudoOption[$opt][] = $option;
+ }
+ }
}
- }
- /*! \brief Create HTML output for this plugin
+ /*! \brief Create HTML output for this plugin
@return String HTML output for this plugin.
- */
- function execute()
- {
- /* Call parent execute */
- plugin::execute();
-
- /*****
- Handle Posts
- *****/
- if($this->acl_is_writeable("")){
-
- foreach($_POST as $name => $value){
-
- if(preg_match("/^negOption_/",$name)){
-
- $opt = preg_replace("/^negOption_(.*)_[0-9]*$/","\\1", $name);
- $id = preg_replace("/^negOption_.*_([0-9])*$/","\\1", $name);
-
- if(isset($this->sudoOption[$opt][$id])){
- $val = $this->sudoOption[$opt][$id]["VALUE"];
-
- /*****
- Negate STRING_BOOL && BOOL_INTEGER
- *****/
- if(in_array($this->options[$opt]['TYPE'],array('STRING_BOOL','BOOL_INTEGER'))){
- if(in_array($val, array("TRUE","FALSE"))){
- if($val == "TRUE"){
- $this->sudoOption[$opt][$id]["VALUE"] = "FALSE";
- }else{
- $this->sudoOption[$opt][$id]["VALUE"] = "TRUE";
- }
- }else{
- $this->sudoOption[$opt][$id]['NEGATE'] = !$this->sudoOption[$opt][$id]['NEGATE'];
- }
- }
+ */
+ function execute()
+ {
+ /* Call parent execute */
+ plugin::execute();
- /*****
- Negate STRING / INTEGER
- *****/
- if(in_array($this->options[$opt]['TYPE'],array('STRING','INTEGER','LISTS'))){
- $this->sudoOption[$opt][$id]['NEGATE'] = !$this->sudoOption[$opt][$id]['NEGATE'];
- }
+ /*****
+ Handle Posts
+ *****/
+ if($this->acl_is_writeable("")){
+
+ foreach($_POST as $name => $value){
+
+ $value = get_post($name);
+
+ if(preg_match("/^negOption_/",$name)){
+
+ $opt = preg_replace("/^negOption_(.*)_[0-9]*$/","\\1", $name);
+ $id = preg_replace("/^negOption_.*_([0-9])*$/","\\1", $name);
+
+ if(isset($this->sudoOption[$opt][$id])){
+ $val = $this->sudoOption[$opt][$id]["VALUE"];
+
+ /*****
+ Negate STRING_BOOL && BOOL_INTEGER
+ *****/
+ if(in_array($this->options[$opt]['TYPE'],array('STRING_BOOL','BOOL_INTEGER'))){
+ if(in_array($val, array("TRUE","FALSE"))){
+ if($val == "TRUE"){
+ $this->sudoOption[$opt][$id]["VALUE"] = "FALSE";
+ }else{
+ $this->sudoOption[$opt][$id]["VALUE"] = "TRUE";
+ }
+ }else{
+ $this->sudoOption[$opt][$id]['NEGATE'] = !$this->sudoOption[$opt][$id]['NEGATE'];
+ }
+ }
+
+ /*****
+ Negate STRING / INTEGER
+ *****/
+ if(in_array($this->options[$opt]['TYPE'],array('STRING','INTEGER','LISTS'))){
+ $this->sudoOption[$opt][$id]['NEGATE'] = !$this->sudoOption[$opt][$id]['NEGATE'];
+ }
+
+ /*****
+ Negate BOOLEAN
+ *****/
+ if(in_array($this->options[$opt]['TYPE'],array('BOOLEAN'))){
+ if($val == "TRUE"){
+ $this->sudoOption[$opt][$id]["VALUE"] = "FALSE";
+ }else{
+ $this->sudoOption[$opt][$id]["VALUE"] = "TRUE";
+ }
+ }
+ }
+ break;
+ }
- /*****
- Negate BOOLEAN
- *****/
- if(in_array($this->options[$opt]['TYPE'],array('BOOLEAN'))){
- if($val == "TRUE"){
- $this->sudoOption[$opt][$id]["VALUE"] = "FALSE";
- }else{
- $this->sudoOption[$opt][$id]["VALUE"] = "TRUE";
- }
+ /*****
+ Remove options
+ *****/
+ if(preg_match("/^delOption/",$name)){
+ $opt = preg_replace("/^delOption_/","",$name);
+ $opt = preg_replace("/_[^_]*$/","",$opt);
+ $id = preg_replace("/^.*_([0-9])*$/","\\1",$opt);
+ $opt = preg_replace("/_[0-9]*$/","",$opt);
+
+ if(isset($this->sudoOption[$opt][$id])){
+ unset($this->sudoOption[$opt][$id]);
+ }
+ if(!count($this->sudoOption[$opt])){
+ unset($this->sudoOption[$opt]);
+ }
+ break;
+ }
}
- }
- break;
}
- /*****
- Remove options
- *****/
- if(preg_match("/^delOption/",$name)){
- $opt = preg_replace("/^delOption_/","",$name);
- $opt = preg_replace("/_[^_]*$/","",$opt);
- $id = preg_replace("/^.*_([0-9])*$/","\\1",$opt);
- $opt = preg_replace("/_[0-9]*$/","",$opt);
-
- if(isset($this->sudoOption[$opt][$id])){
- unset($this->sudoOption[$opt][$id]);
- }
- if(!count($this->sudoOption[$opt])){
- unset($this->sudoOption[$opt]);
- }
- break;
- }
- }
- }
-
- $smarty = get_smarty();
- $smarty->assign("ACL",$this->getacl(""));
- $smarty->assign("map", array("STRING" => _("string"), "BOOLEAN" => _("bool"),
- "INTEGER" => _("integer") , "BOOL_INTEGER" => _("integer")."-"._("bool") ,
- "STRING_BOOL" => _("string")."-"._("bool"),"LISTS" => _("list")));
- $smarty->assign("sudoOption",$this->prepare_for_html($this->sudoOption));
- $smarty->assign("options",$this->options);
- return($smarty->fetch(get_template_path('options.tpl', TRUE)));
- }
+ $smarty = get_smarty();
+ $smarty->assign("ACL",$this->getacl(""));
+ $smarty->assign("map",
+ set_post( array(
+ "STRING" => _("string"), "BOOLEAN" => _("bool"),
+ "INTEGER" => _("integer") , "BOOL_INTEGER" => _("integer")."-"._("bool") ,
+ "STRING_BOOL" => _("string")."-"._("bool"),"LISTS" => _("list"))));
+ $smarty->assign("sudoOption",$this->prepare_for_html($this->sudoOption));
+ $smarty->assign("options",$this->options);
+ return($smarty->fetch(get_template_path('options.tpl', TRUE)));
+ }
- /*! \brief Prepare options array to be used in HTML.
+ /*! \brief Prepare options array to be used in HTML.
@param Array The options array ($this->sudoOption)
@return Array HTML ready sudoOption. Can now be used in smarty templates
- */
- function prepare_for_html($a_options)
- {
- foreach($a_options as $name => $options){
- foreach($options as $key => $option){
- $a_options[$name][$key]['VALUE'] = htmlentities($option['VALUE']);
- }
+ */
+ function prepare_for_html($a_options)
+ {
+ foreach($a_options as $name => $options){
+ foreach($options as $key => $option){
+ $a_options[set_post($name)][$key]['VALUE'] = set_post($option['VALUE']);
+ }
+ }
+ return($a_options);
}
- return($a_options);
- }
- /*! \brief Removes this plugin
- */
- function remove_from_parent()
- {
- }
-
-
- /*! \brief Saves all relevant HTML post values for this plugin
- */
- function save_object()
- {
- if($this->acl_is_writeable("")){
- plugin::save_object();
-
- if(isset($_POST['add_option']) && isset($_POST['option'])){
- $opt = get_post("option");
-
- /* Append attribute only once, lists are handled below */
- if(isset($this->options[$opt])){
- $type = $this->options[$opt]['TYPE'];
- $val = $this->options[$opt]['DEFAULT'];
- $option = array("NAME" => $opt, "VALUE" => $val , "NEGATE" => FALSE);
- $this->sudoOption[$opt][] = $option;
- }
- }
+ /*! \brief Removes this plugin
+ */
+ function remove_from_parent()
+ {
+ }
- foreach($this->sudoOption as $name => $opts){
- foreach($opts as $id => $opt){
- /****
- Get posted value for BOOLEAN
- ****/
- if(in_array($this->options[$name]['TYPE'],array("BOOLEAN"))){
- if(isset($_POST['option_value__'.$name.'_'.$id])){
- $this->sudoOption[$name][$id]["VALUE"] = get_post('option_value__'.$name.'_'.$id);
- }
- }
-
- /****
- Get posted value for STRING / INTEGER
- ****/
- if(in_array($this->options[$name]['TYPE'],array("STRING","INTEGER"))){
- if(isset($_POST['option_value__'.$name.'_'.$id])){
- $this->sudoOption[$name][$id]["VALUE"] = get_post('option_value__'.$name.'_'.$id);
+ /*! \brief Saves all relevant HTML post values for this plugin
+ */
+ function save_object()
+ {
+ if($this->acl_is_writeable("")){
+ plugin::save_object();
+
+ if(isset($_POST['add_option']) && isset($_POST['option'])){
+ $opt = get_post("option");
+
+ /* Append attribute only once, lists are handled below */
+ if(isset($this->options[$opt])){
+ $type = $this->options[$opt]['TYPE'];
+ $val = $this->options[$opt]['DEFAULT'];
+ $option = array("NAME" => $opt, "VALUE" => $val , "NEGATE" => FALSE);
+ $this->sudoOption[$opt][] = $option;
+ }
}
- }
-
- /****
- Get posted value for STRING_BOOL / BOOL_INTEGER
- ****/
- if(in_array($this->options[$name]['TYPE'],array("BOOL_INTEGER","STRING_BOOL"))){
- if(isset($_POST['option_selection__'.$name.'_'.$id])){
- $sel = get_post('option_selection__'.$name.'_'.$id);
- $val = "";
- if(isset($_POST['option_value__'.$name.'_'.$id])){
- $val = get_post('option_value__'.$name.'_'.$id);
- }
-
- if($sel == "FALSE" || $sel == "TRUE"){
- $this->sudoOption[$name][$id]['VALUE'] = $sel;
- $this->sudoOption[$name][$id]['NEGATE'] = FALSE;
- }else{
- $this->sudoOption[$name][$id]['VALUE'] = $val;
- }
+
+ foreach($this->sudoOption as $name => $opts){
+ foreach($opts as $id => $opt){
+
+ /****
+ Get posted value for BOOLEAN
+ ****/
+ if(in_array($this->options[$name]['TYPE'],array("BOOLEAN"))){
+ if(isset($_POST['option_value__'.$name.'_'.$id])){
+ $this->sudoOption[$name][$id]["VALUE"] = get_post('option_value__'.$name.'_'.$id);
+ }
+ }
+
+ /****
+ Get posted value for STRING / INTEGER
+ ****/
+ if(in_array($this->options[$name]['TYPE'],array("STRING","INTEGER"))){
+ if(isset($_POST['option_value__'.$name.'_'.$id])){
+ $this->sudoOption[$name][$id]["VALUE"] = get_post('option_value__'.$name.'_'.$id);
+ }
+ }
+
+ /****
+ Get posted value for STRING_BOOL / BOOL_INTEGER
+ ****/
+ if(in_array($this->options[$name]['TYPE'],array("BOOL_INTEGER","STRING_BOOL"))){
+ if(isset($_POST['option_selection__'.$name.'_'.$id])){
+ $sel = get_post('option_selection__'.$name.'_'.$id);
+ $val = "";
+ if(isset($_POST['option_value__'.$name.'_'.$id])){
+ $val = get_post('option_value__'.$name.'_'.$id);
+ }
+
+ if($sel == "FALSE" || $sel == "TRUE"){
+ $this->sudoOption[$name][$id]['VALUE'] = $sel;
+ $this->sudoOption[$name][$id]['NEGATE'] = FALSE;
+ }else{
+ $this->sudoOption[$name][$id]['VALUE'] = $val;
+ }
+ }
+ }
+
+ /****
+ Get posted value for LISTS
+ ****/
+ if(in_array($this->options[$name]['TYPE'],array("LISTS"))){
+ foreach($this->sudoOption[$name] as $entry_key => $entry){
+ if(isset($_POST['list_value__'.$name.'_'.$entry_key])){
+ $val = get_post('list_value__'.$name.'_'.$entry_key);
+ $this->sudoOption[$name][$entry_key]["VALUE"] = $val;
+ }
+ }
+ }
+ }
}
- }
-
- /****
- Get posted value for LISTS
- ****/
- if(in_array($this->options[$name]['TYPE'],array("LISTS"))){
- foreach($this->sudoOption[$name] as $entry_key => $entry){
- if(isset($_POST['list_value__'.$name.'_'.$entry_key])){
- $val = get_post('list_value__'.$name.'_'.$entry_key);
- $this->sudoOption[$name][$entry_key]["VALUE"] = $val;
- }
- }
- }
}
- }
}
- }
-
- /*! \brief Save changes to ldap
- */
- function save()
- {
- plugin::save();
- $this->attrs['sudoOption'] = array();
- foreach($this->sudoOption as $name => $opts){
- foreach($opts as $id => $opt){
+ /*! \brief Save changes to ldap
+ */
+ function save()
+ {
+ plugin::save();
+
+ $this->attrs['sudoOption'] = array();
+ foreach($this->sudoOption as $name => $opts){
+ foreach($opts as $id => $opt){
+
+ $type = $this->options[$name]['TYPE'];
+ $neg = $opt['NEGATE'];
+ $value = $opt['VALUE'];
+ $option = "";
+
+ /* Escape special chars */
+ $value = $this->escape_command($value);
+
+ /****
+ Save LISTS
+ ****/
+ if($type=="LISTS"){
+ if($value == ""){
+ $option = $name;
+ }else{
+ $option = $name."=".$value;
+ }
+ if($neg){
+ $option = "!".$option;
+ }
+ }
- $type = $this->options[$name]['TYPE'];
- $neg = $opt['NEGATE'];
- $value = $opt['VALUE'];
- $option = "";
+ /****
+ Save BOOLEAN
+ ****/
+ if(in_array($type,array("BOOLEAN"))){
+ $option = $name;
+ if($value == "FALSE"){
+ $option = "!".$option;
+ }
+ }
- /* Escape special chars */
- $value = $this->escape_command($value);
+ /****
+ Save STRING / INTEGER
+ ****/
+ if(in_array($type,array("STRING","INTEGER"))){
+ if($value != ""){
+ $option = $name."=".$value;
+ }else{
+ $option = $name;
+ }
+ if($neg){
+ $option = "!".$option;
+ }
+ }
- /****
- Save LISTS
- ****/
- if($type=="LISTS"){
- if($value == ""){
- $option = $name;
- }else{
- $option = $name."=".$value;
- }
- if($neg){
- $option = "!".$option;
- }
- }
+ /****
+ Save STRING_BOOL / BOOL_INTEGER
+ ****/
+ if(in_array($type,array("STRING_BOOL","BOOL_INTEGER"))){
+ if($value == "FALSE"){
+ $option = "!".$name;
+ }elseif($value == "TRUE"){
+ $option = $name;
+ }else{
+ if($value != ""){
+ $option = $name."=".$value;
+ }else{
+ $option = $name;
+ }
+ if($neg){
+ $option = "!".$option;
+ }
+ }
+ }
- /****
- Save BOOLEAN
- ****/
- if(in_array($type,array("BOOLEAN"))){
- $option = $name;
- if($value == "FALSE"){
- $option = "!".$option;
- }
+ $this->attrs['sudoOption'][] = $option;
+ }
}
+ $this->cleanup();
+ $ldap = $this->config->get_ldap_link();
+ $ldap->cd($this->dn);
+ $ldap->modify($this->attrs);;
+ }
- /****
- Save STRING / INTEGER
- ****/
- if(in_array($type,array("STRING","INTEGER"))){
- if($value != ""){
- $option = $name."=".$value;
- }else{
- $option = $name;
- }
- if($neg){
- $option = "!".$option;
- }
- }
- /****
- Save STRING_BOOL / BOOL_INTEGER
- ****/
- if(in_array($type,array("STRING_BOOL","BOOL_INTEGER"))){
- if($value == "FALSE"){
- $option = "!".$name;
- }elseif($value == "TRUE"){
- $option = $name;
- }else{
- if($value != ""){
- $option = $name."=".$value;
- }else{
- $option = $name;
- }
- if($neg){
- $option = "!".$option;
+ /*! \brief Checks input validity
+ */
+ function check()
+ {
+ $message = plugin::check();
+
+ foreach($this->sudoOption as $name => $options){
+ foreach($options as $id => $option){
+ switch($this->options[$name]['TYPE']){
+
+ /* Check for a valid integer value */
+ case 'INTEGER' :
+ {
+ if(!preg_match("/^[0-9]*$/",$option['VALUE'])){
+ $message[] = msgPool::invalid($name,$option['VALUE'],"/[0-9]/");
+ }
+ } break;
+ }
}
- }
- }
-
- $this->attrs['sudoOption'][] = $option;
- }
- }
- $this->cleanup();
- $ldap = $this->config->get_ldap_link();
- $ldap->cd($this->dn);
- $ldap->modify($this->attrs);;
- }
-
-
- /*! \brief Checks input validity
- */
- function check()
- {
- $message = plugin::check();
-
- foreach($this->sudoOption as $name => $options){
- foreach($options as $id => $option){
- switch($this->options[$name]['TYPE']){
-
- /* Check for a valid integer value */
- case 'INTEGER' :
- {
- if(!preg_match("/^[0-9]*$/",$option['VALUE'])){
- $message[] = msgPool::invalid($name,$option['VALUE'],"/[0-9]/");
- }
- } break;
}
- }
+ return ($message);
}
- return ($message);
- }
- /*! \brief This function will be called if an object gets copied.
- This function adapts attributes from the source object.
+ /*! \brief This function will be called if an object gets copied.
+ This function adapts attributes from the source object.
@param Array The source object.
- */
- function PrepareForCopyPaste($source)
- {
- plugin::PrepareForCopyPaste($source);
- if(isset($source['sudoOption'])){
- $this->attrs['sudoOption'] = $source['sudoOption'];
- $this->load_options();
+ */
+ function PrepareForCopyPaste($source)
+ {
+ plugin::PrepareForCopyPaste($source);
+ if(isset($source['sudoOption'])){
+ $this->attrs['sudoOption'] = $source['sudoOption'];
+ $this->load_options();
+ }
}
- }
- /*! \brief Escape special chars in function parameters.
- @param String the string to that must be escaped.
- */
- private function escape_command($str)
- {
- /* Check if given value is a command (/[a-z]/ ..)
+ /*! \brief Escape special chars in function parameters.
+ @param String the string to that must be escaped.
*/
- if(preg_match("/^\//",$str)){
- $cmd = preg_replace("/^([^ ]*).*$/","\\1",$str);
- $val = preg_replace("/^[^ ]*(.*)$/","\\1",$str);
- $str = $cmd.addcslashes($val,":.,\\");
+ private function escape_command($str)
+ {
+ /* Check if given value is a command (/[a-z]/ ..)
+ */
+ if(preg_match("/^\//",$str)){
+ $cmd = preg_replace("/^([^ ]*).*$/","\\1",$str);
+ $val = preg_replace("/^[^ ]*(.*)$/","\\1",$str);
+ $str = $cmd.addcslashes($val,":.,\\");
+ }
+ return($str);
}
- return($str);
- }
- /*! \brief Add ACL object
+ /*! \brief Add ACL object
@return Returns the ACL object.
- */
- static function plInfo()
- {
- return (array(
- "plShortName" => _("Options"),
- "plDescription" => _("Sudo options"),
- "plSelfModify" => FALSE,
- "plDepends" => array(),
- "plPriority" => 2,
- "plSection" => array("administration"),
- "plCategory" => array("sudo"),
- "plProvidedAcls" => array(
- "sudoOption" => _("Sudo options")
- )
- ));
- }
-
- /*! \brief Unescape special chars in function parameters.
- @param String the string to that must be unescaped.
- */
- private function unescape_command($str)
- {
- /* Check if given value is a command (/[a-z]/ ..)
*/
- if(preg_match("/^\//",$str)){
- $cmd = preg_replace("/^([^ ]*).*$/","\\1",$str);
- $val = preg_replace("/^[^ ]*(.*)$/","\\1",$str);
- $val = preg_replace(array("/\\\\\\\\/","/\\\\,/","/\\\\:/","/\\\\=/"),
- array("\\",",",":","="),$val);
- $str = $cmd.$val;
+ static function plInfo()
+ {
+ return (array(
+ "plShortName" => _("Options"),
+ "plDescription" => _("Sudo options"),
+ "plSelfModify" => FALSE,
+ "plDepends" => array(),
+ "plPriority" => 2,
+ "plSection" => array("administration"),
+ "plCategory" => array("sudo"),
+ "plProvidedAcls" => array(
+ "sudoOption" => _("Sudo options")
+ )
+ ));
+ }
+
+ /*! \brief Unescape special chars in function parameters.
+ @param String the string to that must be unescaped.
+ */
+ private function unescape_command($str)
+ {
+ /* Check if given value is a command (/[a-z]/ ..)
+ */
+ if(preg_match("/^\//",$str)){
+ $cmd = preg_replace("/^([^ ]*).*$/","\\1",$str);
+ $val = preg_replace("/^[^ ]*(.*)$/","\\1",$str);
+ $val = preg_replace(array("/\\\\\\\\/","/\\\\,/","/\\\\:/","/\\\\=/"),
+ array("\\",",",":","="),$val);
+ $str = $cmd.$val;
+ }
+ return($str);
}
- return($str);
- }
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>