2012-08-26 14:10:33 +00:00
< ? php
2017-02-18 09:13:08 +00:00
use \LAM\PDF\PDFTable ;
use \LAM\PDF\PDFTableCell ;
use \LAM\PDF\PDFTableRow ;
2012-08-26 14:10:33 +00:00
/*
$Id $
This code is not yet part of LDAP Account Manager ( http :// www . ldap - account - manager . org / )
2017-02-18 09:13:08 +00:00
Copyright ( C ) 2012 - 2017 Roland Gruber
2012-08-26 14:10:33 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
/**
* Manages Puppet configuration options .
*
* @ package modules
* @ author Roland Gruber
*/
/**
* Manages Puppet configuration options .
*
* @ package modules
*/
class puppetClient extends baseModule {
2016-02-13 13:50:14 +00:00
/** cache for classes */
private $classCache = null ;
/** cache for variables */
private $variablesCache = null ;
2012-08-26 14:10:33 +00:00
/**
* Creates a new authorizedServiceObject object .
*
* @ param string $scope account type ( user , group , host )
*/
function __construct ( $scope ) {
// call parent constructor
parent :: __construct ( $scope );
$this -> autoAddObjectClasses = false ;
}
2014-04-20 13:00:42 +00:00
/**
* Returns true if this module can manage accounts of the current type , otherwise false .
2015-07-11 09:50:00 +00:00
*
2014-04-20 13:00:42 +00:00
* @ return boolean true if module fits
*/
public function can_manage () {
return in_array ( $this -> get_scope (), array ( 'host' ));
}
/**
2012-08-26 14:10:33 +00:00
* Returns meta data that is interpreted by parent class
*
* @ return array array with meta data
*/
function get_metaData () {
$return = array ();
// icon
$return [ 'icon' ] = 'puppet.png' ;
// alias name
$return [ " alias " ] = _ ( " Puppet " );
// module dependencies
$return [ 'dependencies' ] = array ( 'depends' => array (), 'conflicts' => array ());
// managed object classes
$return [ 'objectClasses' ] = array ( 'puppetClient' );
// managed attributes
$return [ 'attributes' ] = array ( 'environment' , 'parentnode' , 'puppetclass' , 'puppetvar' );
// help Entries
$return [ 'help' ] = array (
'environment' => array (
" Headline " => _ ( 'Environment' ), 'attr' => 'environment' ,
" Text " => _ ( 'Please enter the environment name for this node (e.g. production).' )
),
'environmentList' => array (
" Headline " => _ ( 'Environment' ), 'attr' => 'environment' ,
" Text " => _ ( 'Please enter the environment name for this node (e.g. production).' ) . ' ' . _ ( 'Multiple values are separated by semicolon.' )
),
'parentnode' => array (
" Headline " => _ ( 'Parent node' ), 'attr' => 'parentnode' ,
" Text " => _ ( 'This is this node\'s parent. All classes and variables are inherited from this node.' )
),
'puppetclass' => array (
" Headline " => _ ( 'Classes' ), 'attr' => 'puppetclass' ,
" Text " => _ ( 'The list of configured Puppet classes for this node (e.g. ntp).' )
),
'puppetclassList' => array (
" Headline " => _ ( 'Classes' ), 'attr' => 'puppetclass' ,
" Text " => _ ( 'The list of configured Puppet classes for this node (e.g. ntp).' ) . ' ' . _ ( 'Multiple values are separated by semicolon.' )
),
'puppetvar' => array (
" Headline " => _ ( 'Variables' ), 'attr' => 'puppetvar' ,
" Text " => _ ( 'Please enter your Puppet variables for this node (e.g. config_exim=true).' )
),
'puppetvarList' => array (
" Headline " => _ ( 'Variables' ), 'attr' => 'puppetvar' ,
" Text " => _ ( 'Please enter your Puppet variables for this node (e.g. config_exim=true).' ) . ' ' . _ ( 'Multiple values are separated by semicolon.' )
),
'autoAdd' => array (
" Headline " => _ ( 'Automatically add this extension' ),
" Text " => _ ( 'This will enable the extension automatically if this profile is loaded.' )
),
'predefinedClasses' => array (
" Headline " => _ ( 'Predefined classes' ),
" Text " => _ ( 'These classes will be available as autocompletion hints when adding new classes.' )
),
'predefinedEnvironments' => array (
" Headline " => _ ( 'Predefined environments' ),
" Text " => _ ( 'These environments will be available as autocompletion hints when setting the environment.' )
),
2016-02-13 14:29:41 +00:00
'enforceClasses' => array (
" Headline " => _ ( 'Enforce classes' ),
" Text " => _ ( 'If set then only these classes are allowed. One class per line.' )
),
2012-08-26 14:10:33 +00:00
);
2015-07-11 09:50:00 +00:00
// upload fields
2016-02-13 14:29:41 +00:00
$allowedClasses = '' ;
if ( ! empty ( $this -> moduleSettings [ 'puppetClient_enforceClasses' ][ 0 ])) {
$allowedClasses = implode ( ', ' , $this -> moduleSettings [ 'puppetClient_enforceClasses' ]);
}
2012-08-26 14:10:33 +00:00
$return [ 'upload_columns' ] = array (
array (
'name' => 'puppetClient_environment' ,
'description' => _ ( 'Environment' ),
'help' => 'environmentList' ,
'example' => 'production'
),
array (
'name' => 'puppetClient_parentnode' ,
'description' => _ ( 'Parent node' ),
'help' => 'parentnode' ,
'example' => 'basenode'
),
array (
'name' => 'puppetClient_puppetclass' ,
'description' => _ ( 'Classes' ),
'help' => 'puppetclassList' ,
2016-02-13 14:29:41 +00:00
'example' => 'ntp;exim' ,
'values' => $allowedClasses
2012-08-26 14:10:33 +00:00
),
array (
'name' => 'puppetClient_puppetvar' ,
'description' => _ ( 'Variables' ),
'help' => 'puppetvarList' ,
'example' => 'config_exim=true;config_exim_trusted_users=root'
),
);
// available PDF fields
$return [ 'PDF_fields' ] = array (
'environment' => _ ( 'Environment' ),
'parentnode' => _ ( 'Parent node' ),
'puppetclass' => _ ( 'Classes' ),
'puppetvar' => _ ( 'Variables' ),
);
// profile options
$profileContainer = new htmlTable ();
$profileContainer -> addElement ( new htmlTableExtendedInputCheckbox ( 'puppetClient_addExt' , false , _ ( 'Automatically add this extension' ), 'autoAdd' ), true );
$profileEnvironment = new htmlTableExtendedInputField ( _ ( 'Environment' ), 'puppetClient_environment' , null , 'environment' );
$autocompleteEnvironment = array ();
if ( isset ( $this -> moduleSettings [ 'puppetClient_environments' ])) {
$autocompleteEnvironment = $this -> moduleSettings [ 'puppetClient_environments' ];
}
$profileEnvironment -> enableAutocompletion ( $autocompleteEnvironment );
$profileContainer -> addElement ( $profileEnvironment , true );
$profileContainer -> addElement ( new htmlTableExtendedInputTextarea ( 'puppetClient_puppetclass' , '' , 60 , 5 , _ ( 'Classes' ), 'puppetclass' ), true );
$profileContainer -> addElement ( new htmlTableExtendedInputTextarea ( 'puppetClient_puppetvar' , '' , 60 , 5 , _ ( 'Variables' ), 'puppetvar' ), true );
$return [ 'profile_options' ] = $profileContainer ;
// profile checks
$return [ 'profile_checks' ][ 'puppetClient_environment' ] = array ( 'type' => 'ext_preg' , 'regex' => 'ascii' , 'error_message' => $this -> messages [ 'environment' ][ 0 ]);
// profile mappings
$return [ 'profile_mappings' ] = array (
'puppetClient_environment' => 'environment' ,
);
return $return ;
}
/**
* This function fills the error message array with messages
*/
function load_Messages () {
$this -> messages [ 'environment' ][ 0 ] = array ( 'ERROR' , _ ( 'The environment name may only contain ASCII characters.' ));
$this -> messages [ 'environment' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' puppetClient_environment' , _ ( 'The environment name may only contain ASCII characters.' ));
$this -> messages [ 'puppetclass' ][ 0 ] = array ( 'ERROR' , _ ( 'The class names may only contain ASCII characters.' ));
$this -> messages [ 'puppetclass' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' puppetClient_puppetclass' , _ ( 'The class names may only contain ASCII characters.' ));
2016-02-13 14:29:41 +00:00
$this -> messages [ 'puppetclass' ][ 2 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' puppetClient_puppetclass' , _ ( 'The class names contain invalid values.' ));
2012-08-26 14:10:33 +00:00
$this -> messages [ 'puppetvar' ][ 0 ] = array ( 'ERROR' , _ ( 'The variables may only contain ASCII characters.' ));
$this -> messages [ 'puppetvar' ][ 1 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' puppetClient_puppetvar' , _ ( 'The variables may only contain ASCII characters.' ));
$this -> messages [ 'parentnode' ][ 0 ] = array ( 'ERROR' , _ ( 'Account %s:' ) . ' puppetClient_parentnode' , _ ( 'Parent node not found.' ));
}
/**
* Returns a list of modifications which have to be made to the LDAP account .
*
* @ return array list of modifications
* < br > This function returns an array with 3 entries :
* < br > array ( DN1 ( 'add' => array ( $attr ), 'remove' => array ( $attr ), 'modify' => array ( $attr )), DN2 .... )
* < br > DN is the DN to change . It may be possible to change several DNs ( e . g . create a new user and add him to some groups via attribute memberUid )
* < br > " add " are attributes which have to be added to LDAP entry
* < br > " remove " are attributes which have to be removed from LDAP entry
* < br > " modify " are attributes which have to been modified in LDAP entry
* < br > " info " are values with informational value ( e . g . to be used later by pre / postModify actions )
*/
function save_attributes () {
if ( ! in_array ( 'puppetClient' , $this -> attributes [ 'objectClass' ]) && ! in_array ( 'puppetClient' , $this -> orig [ 'objectClass' ])) {
// skip saving if the extension was not added/modified
return array ();
}
return parent :: save_attributes ();
}
/**
* Returns the HTML meta data for the main account page .
2015-07-11 09:50:00 +00:00
*
2012-08-26 14:10:33 +00:00
* @ return htmlElement HTML meta data
*/
function display_html_attributes () {
if ( isset ( $_POST [ 'form_subpage_puppetClient_attributes_addObjectClass' ])) {
$this -> attributes [ 'objectClass' ][] = 'puppetClient' ;
}
$return = new htmlTable ();
if ( ! in_array ( 'puppetClient' , $this -> attributes [ 'objectClass' ])) {
$return -> addElement ( new htmlAccountPageButton ( 'puppetClient' , 'attributes' , 'addObjectClass' , _ ( 'Add Puppet extension' )));
return $return ;
}
2016-02-13 13:50:14 +00:00
$this -> initCache ();
2012-08-26 14:10:33 +00:00
// environment
$autocompleteEnvironment = array ();
if ( isset ( $this -> moduleSettings [ 'puppetClient_environments' ])) {
$autocompleteEnvironment = $this -> moduleSettings [ 'puppetClient_environments' ];
}
$environments = array ();
if ( isset ( $this -> attributes [ 'environment' ][ 0 ])) {
$environments = $this -> attributes [ 'environment' ];
}
if ( sizeof ( $environments ) == 0 ) {
$environments [] = '' ;
}
$environmentLabel = new htmlOutputText ( _ ( 'Environment' ));
$environmentLabel -> alignment = htmlElement :: ALIGN_TOP ;
$return -> addElement ( $environmentLabel );
$environmentContainer = new htmlGroup ();
for ( $i = 0 ; $i < sizeof ( $environments ); $i ++ ) {
$environmentField = new htmlInputField ( 'environment' . $i , $environments [ $i ]);
$environmentField -> enableAutocompletion ( $autocompleteEnvironment );
$environmentContainer -> addElement ( $environmentField );
if ( $i < ( sizeof ( $environments ) - 1 )) {
$environmentContainer -> addElement ( new htmlOutputText ( '<br>' , false ));
}
else {
$environmentContainer -> addElement ( new htmlButton ( 'addEnvironment' , 'add.png' , true ));
}
}
$return -> addElement ( $environmentContainer );
$environmentHelp = new htmlHelpLink ( 'environment' );
$environmentHelp -> alignment = htmlElement :: ALIGN_TOP ;
$return -> addElement ( $environmentHelp , true );
// parent node
$possibleParentNodes = $this -> getPossibleParentNodes ();
array_unshift ( $possibleParentNodes , '-' );
$parentnode = '-' ;
if ( isset ( $this -> attributes [ 'parentnode' ][ 0 ])) {
$parentnode = $this -> attributes [ 'parentnode' ][ 0 ];
}
$return -> addElement ( new htmlTableExtendedSelect ( 'parentnode' , $possibleParentNodes , array ( $parentnode ), _ ( 'Parent node' ), 'parentnode' ), true );
// classes
2016-02-13 14:29:41 +00:00
if ( empty ( $this -> moduleSettings [ 'puppetClient_enforceClasses' ][ 0 ])) {
$this -> addMultiValueInputTextField ( $return , 'puppetclass' , _ ( 'Classes' ), false , null , false , $this -> classCache );
}
else {
$this -> addMultiValueSelectField ( $return , 'puppetclass' , _ ( 'Classes' ), $this -> moduleSettings [ 'puppetClient_enforceClasses' ]);
}
2012-08-26 14:10:33 +00:00
// variables
2016-02-13 13:50:14 +00:00
$this -> addMultiValueInputTextField ( $return , 'puppetvar' , _ ( 'Variables' ), false , null , false , $this -> variablesCache );
2015-07-11 09:50:00 +00:00
2012-08-26 14:10:33 +00:00
$return -> addElement ( new htmlSpacer ( null , '10px' ), true );
$remButton = new htmlAccountPageButton ( 'puppetClient' , 'attributes' , 'remObjectClass' , _ ( 'Remove Puppet extension' ));
$remButton -> colspan = 4 ;
$return -> addElement ( $remButton );
return $return ;
}
/**
* Processes user input of the primary module page .
* It checks if all input values are correct and updates the associated LDAP attributes .
*
* @ return array list of info / error messages
*/
function process_attributes () {
if ( isset ( $_POST [ 'form_subpage_puppetClient_attributes_remObjectClass' ])) {
$this -> attributes [ 'objectClass' ] = array_delete ( array ( 'puppetClient' ), $this -> attributes [ 'objectClass' ]);
for ( $i = 0 ; $i < sizeof ( $this -> meta [ 'attributes' ]); $i ++ ) {
if ( isset ( $this -> attributes [ $this -> meta [ 'attributes' ][ $i ]])) {
unset ( $this -> attributes [ $this -> meta [ 'attributes' ][ $i ]]);
}
}
return array ();
}
if ( ! in_array ( 'puppetClient' , $this -> attributes [ 'objectClass' ])) {
return array ();
}
$errors = array ();
// environment
$environmentCounter = 0 ;
while ( isset ( $_POST [ 'environment' . $environmentCounter ])) {
$this -> attributes [ 'environment' ][ $environmentCounter ] = $_POST [ 'environment' . $environmentCounter ];
if ( ! get_preg ( $this -> attributes [ 'environment' ][ $environmentCounter ], 'ascii' )) $errors [] = $this -> messages [ 'environment' ][ 0 ];
if ( $this -> attributes [ 'environment' ][ $environmentCounter ] == '' ) {
unset ( $this -> attributes [ 'environment' ][ $environmentCounter ]);
}
$environmentCounter ++ ;
}
if ( isset ( $_POST [ 'addEnvironment' ])) {
$this -> attributes [ 'environment' ][] = '' ;
}
$this -> attributes [ 'environment' ] = array_values ( $this -> attributes [ 'environment' ]);
// parent node
if ( isset ( $this -> attributes [ 'parentnode' ][ 0 ]) && ( $_POST [ 'parentnode' ] == '-' )) {
unset ( $this -> attributes [ 'parentnode' ][ 0 ]);
}
elseif ( $_POST [ 'parentnode' ] != '-' ) {
$this -> attributes [ 'parentnode' ][ 0 ] = $_POST [ 'parentnode' ];
}
// classes
2016-02-13 14:29:41 +00:00
if ( empty ( $this -> moduleSettings [ 'puppetClient_enforceClasses' ][ 0 ])) {
$this -> processMultiValueInputTextField ( 'puppetclass' , $errors , 'ascii' );
}
else {
$this -> processMultiValueSelectField ( 'puppetclass' );
}
2012-08-26 14:10:33 +00:00
// variables
2016-02-13 13:50:14 +00:00
$this -> processMultiValueInputTextField ( 'puppetvar' , $errors , 'ascii' );
2015-07-11 09:50:00 +00:00
2012-08-26 14:10:33 +00:00
return $errors ;
}
/**
* In this function the LDAP account is built up .
*
* @ param array $rawAccounts list of hash arrays ( name => value ) from user input
* @ param array $ids list of IDs for column position ( e . g . " posixAccount_uid " => 5 )
* @ param array $partialAccounts list of hash arrays ( name => value ) which are later added to LDAP
* @ param array $selectedModules list of selected account modules
* @ return array list of error messages if any
*/
function build_uploadAccounts ( $rawAccounts , $ids , & $partialAccounts , $selectedModules ) {
$messages = array ();
for ( $i = 0 ; $i < sizeof ( $rawAccounts ); $i ++ ) {
// add object class
if ( ! in_array ( " puppetClient " , $partialAccounts [ $i ][ 'objectClass' ])) $partialAccounts [ $i ][ 'objectClass' ][] = " puppetClient " ;
// parent node
if ( $rawAccounts [ $i ][ $ids [ 'puppetClient_parentnode' ]] != " " ) {
if ( ! in_array ( $rawAccounts [ $i ][ $ids [ 'puppetClient_parentnode' ]], $this -> getPossibleParentNodes ())) {
$messages [] = $this -> messages [ 'parentnode' ][ 0 ];
}
else {
$partialAccounts [ $i ][ 'parentnode' ][ 0 ] = $rawAccounts [ $i ][ $ids [ 'puppetClient_parentnode' ]];
}
}
// environment
2015-08-16 08:47:48 +00:00
$this -> mapSimpleUploadField ( $rawAccounts , $ids , $partialAccounts , $i , 'puppetClient_environment' , 'environment' , 'ascii' , $this -> messages [ 'environment' ][ 1 ], $messages , '/;[ ]*/' );
2012-08-26 14:10:33 +00:00
// classes
2015-08-16 08:47:48 +00:00
$this -> mapSimpleUploadField ( $rawAccounts , $ids , $partialAccounts , $i , 'puppetClient_puppetclass' , 'puppetclass' , 'ascii' , $this -> messages [ 'puppetclass' ][ 1 ], $messages , '/;[ ]*/' );
2016-02-13 14:29:41 +00:00
if ( ! empty ( $this -> moduleSettings [ 'puppetClient_enforceClasses' ][ 0 ]) && ! empty ( $partialAccounts [ $i ][ 'puppetclass' ])) {
$invalidClassFound = false ;
foreach ( $partialAccounts [ $i ][ 'puppetclass' ] as $singleClass ) {
if ( ! in_array ( $singleClass , $this -> moduleSettings [ 'puppetClient_enforceClasses' ])) {
$invalidClassFound = true ;
break ;
}
}
if ( $invalidClassFound ) {
$msg = $this -> messages [ 'puppetclass' ][ 2 ];
$msg [] = $i ;
$messages [] = $msg ;
}
}
2012-08-26 14:10:33 +00:00
// variables
2015-08-16 08:47:48 +00:00
$this -> mapSimpleUploadField ( $rawAccounts , $ids , $partialAccounts , $i , 'puppetClient_puppetvar' , 'puppetvar' , 'ascii' , $this -> messages [ 'puppetvar' ][ 1 ], $messages , '/;[ ]*/' );
2012-08-26 14:10:33 +00:00
}
return $messages ;
}
/**
2015-01-07 17:16:35 +00:00
* Returns a list of possible PDF entries for this account .
*
* @ param array $pdfKeys list of PDF keys that are included in document
* @ return list of PDF entries ( array ( < PDF key > => < PDF lines > ))
*/
function get_pdfEntries ( $pdfKeys ) {
2012-08-26 14:10:33 +00:00
$return = array ();
2013-05-07 19:18:21 +00:00
if ( ! in_array ( 'puppetClient' , $this -> attributes [ 'objectClass' ])) {
return $return ;
}
$this -> addSimplePDFField ( $return , 'environment' , _ ( 'Environment' ));
$this -> addSimplePDFField ( $return , 'parentnode' , _ ( 'Parent node' ));
if ( isset ( $this -> attributes [ 'puppetclass' ][ 0 ])) {
2015-07-11 09:50:00 +00:00
$pdfTable = new PDFTable ( _ ( 'Classes' ));
for ( $i = 0 ; $i < sizeof ( $this -> attributes [ 'puppetclass' ]); $i ++ ) {
$pdfRow = new PDFTableRow ();
$pdfRow -> cells [] = new PDFTableCell ( $this -> attributes [ 'puppetclass' ][ $i ]);
$pdfTable -> rows [] = $pdfRow ;
2012-08-26 14:10:33 +00:00
}
2015-07-11 09:50:00 +00:00
$this -> addPDFTable ( $return , 'puppetclass' , $pdfTable );
2013-05-07 19:18:21 +00:00
}
if ( isset ( $this -> attributes [ 'puppetvar' ][ 0 ])) {
2015-07-11 09:50:00 +00:00
$pdfTable = new PDFTable ( _ ( 'Variables' ));
for ( $i = 0 ; $i < sizeof ( $this -> attributes [ 'puppetvar' ]); $i ++ ) {
$pdfRow = new PDFTableRow ();
$pdfRow -> cells [] = new PDFTableCell ( $this -> attributes [ 'puppetvar' ][ $i ]);
$pdfTable -> rows [] = $pdfRow ;
2012-08-26 14:10:33 +00:00
}
2015-07-11 09:50:00 +00:00
$this -> addPDFTable ( $return , 'puppetvar' , $pdfTable );
2012-08-26 14:10:33 +00:00
}
return $return ;
}
2015-07-11 09:50:00 +00:00
2012-08-26 14:10:33 +00:00
/**
* This function defines what attributes will be used in the account profiles and their appearance in the profile editor .
*
* Calling this method does not require the existence of an enclosing { @ link accountContainer } .< br >
* < br >
* The return value is an object implementing htmlElement .< br >
* The field name are used as keywords to load
* and save profiles . We recommend to use the module name as prefix for them
* ( e . g . posixAccount_homeDirectory ) to avoid naming conflicts .
2015-07-11 09:50:00 +00:00
*
2012-08-26 14:10:33 +00:00
* @ return htmlElement meta HTML object
2015-07-11 09:50:00 +00:00
*
2012-08-26 14:10:33 +00:00
* @ see baseModule :: get_metaData ()
* @ see htmlElement
*/
public function get_profileOptions () {
$return = parent :: get_profileOptions ();
$possibleParentNodes = $this -> getPossibleParentNodes ();
2015-12-05 08:51:01 +00:00
array_unshift ( $possibleParentNodes , '-' );
$possibleParentNodes = array_values ( $possibleParentNodes );
2012-08-26 14:10:33 +00:00
if ( sizeof ( $possibleParentNodes ) > 0 ) {
$return -> addElement ( new htmlTableExtendedSelect ( 'puppetClient_parentnode' , $possibleParentNodes , array (), _ ( 'Parent node' ), 'parentnode' ), true );
}
return $return ;
}
/**
* Loads the values of an account profile into internal variables .
*
* @ param array $profile hash array with profile values ( identifier => value )
*/
function load_profile ( $profile ) {
// profile mappings in meta data
parent :: load_profile ( $profile );
// add extension
if ( isset ( $profile [ 'puppetClient_addExt' ][ 0 ]) && ( $profile [ 'puppetClient_addExt' ][ 0 ] == " true " )) {
if ( ! in_array ( 'puppetClient' , $this -> attributes [ 'objectClass' ])) {
$this -> attributes [ 'objectClass' ][] = 'puppetClient' ;
}
}
// parent node
if ( isset ( $profile [ 'puppetClient_parentnode' ][ 0 ]) && ( $profile [ 'puppetClient_parentnode' ][ 0 ] != " - " )) {
$this -> attributes [ 'parentnode' ][ 0 ] = $profile [ 'puppetClient_parentnode' ][ 0 ];
}
// classes
if ( isset ( $profile [ 'puppetClient_puppetclass' ][ 0 ]) && ( $profile [ 'puppetClient_puppetclass' ][ 0 ] != '' )) {
$this -> attributes [ 'puppetclass' ] = $profile [ 'puppetClient_puppetclass' ];
}
// variables
if ( isset ( $profile [ 'puppetClient_puppetvar' ][ 0 ]) && ( $profile [ 'puppetClient_puppetvar' ][ 0 ] != '' )) {
$this -> attributes [ 'puppetvar' ] = $profile [ 'puppetClient_puppetvar' ];
}
}
2015-07-11 09:50:00 +00:00
2012-08-26 14:10:33 +00:00
/**
* Reurns a list of valid parent nodes for this node .
2015-07-11 09:50:00 +00:00
*
2012-08-26 14:10:33 +00:00
* @ return array parent nodes ( e . g . array ( 'node1' , 'node2' ))
*/
private function getPossibleParentNodes () {
$possibleParentNodes = array ();
$searchResult = searchLDAPByAttribute ( 'cn' , '*' , 'puppetClient' , array ( 'cn' ), array ( 'host' ));
$possibleParentNodes = array ();
for ( $i = 0 ; $i < sizeof ( $searchResult ); $i ++ ) {
if ( ! get_preg ( $searchResult [ $i ][ 'cn' ][ 0 ], 'ascii' )) {
continue ;
}
if (( $this -> getAccountContainer () == null ) || $this -> getAccountContainer () -> isNewAccount
|| ( ! isset ( $this -> getAccountContainer () -> attributes_orig [ 'cn' ][ 0 ])
|| ( $this -> getAccountContainer () -> attributes_orig [ 'cn' ][ 0 ] != $searchResult [ $i ][ 'cn' ][ 0 ]))) {
$possibleParentNodes [] = $searchResult [ $i ][ 'cn' ][ 0 ];
}
}
return $possibleParentNodes ;
}
2016-02-13 13:50:14 +00:00
/**
* Loads cached data from LDAP such as classes etc .
*/
private function initCache () {
if ( $this -> classCache != null ) {
return ;
}
$attrs = array ( 'puppetclass' , 'puppetvar' );
$classes = array ();
$variables = array ();
$result = searchLDAPByFilter ( '(objectClass=puppetClient)' , $attrs , array ( $this -> get_scope ()));
foreach ( $result as $attributes ) {
if ( isset ( $attributes [ 'puppetclass' ])) {
foreach ( $attributes [ 'puppetclass' ] as $val ) {
$classes [] = $val ;
}
}
if ( isset ( $attributes [ 'puppetvar' ])) {
foreach ( $attributes [ 'puppetvar' ] as $val ) {
$variables [] = $val ;
}
}
}
$this -> classCache = array_values ( array_unique ( $classes ));
$this -> variablesCache = array_values ( array_unique ( $variables ));
}
2016-02-13 14:29:41 +00:00
/**
* Returns a list of configuration options .
*
* Calling this method does not require the existence of an enclosing { @ link accountContainer } .< br >
* < br >
* The field names are used as keywords to load and save settings .
* We recommend to use the module name as prefix for them ( e . g . posixAccount_homeDirectory ) to avoid naming conflicts .
*
* @ param array $scopes account types ( user , group , host )
* @ param array $allScopes list of all active account modules and their scopes ( module => array ( scopes ))
* @ return mixed htmlElement or array of htmlElement
*
* @ see htmlElement
*/
public function get_configOptions ( $scopes , $allScopes ) {
$return = parent :: get_configOptions ( $scopes , $allScopes );
// config options
$configContainer = new htmlTable ();
$configContainer -> addElement ( new htmlTableExtendedInputTextarea ( 'puppetClient_environments' , " production \r \n testing " , 30 , 5 , _ ( 'Predefined environments' ), 'predefinedEnvironments' ), true );
$configContainer -> addElement ( new htmlTableExtendedInputTextarea ( 'puppetClient_enforceClasses' , '' , 30 , 5 , _ ( 'Enforce classes' ), 'enforceClasses' ), true );
$return [] = $configContainer ;
return $return ;
}
2012-08-26 14:10:33 +00:00
}
?>