2003-12-27 11:21:00 +00:00
< ? php
/*
$Id $
This code is part of LDAP Account Manager ( http :// www . sourceforge . net / projects / lam )
Copyright ( C ) 2003 Tilo Lutz
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
*/
class quota {
// Constructor
function quota ( $base ) {
$this -> base = $base ;
if ( ! $base ) trigger_error ( _ ( 'Please create a base object with $var = new accountContainer();' ), E_USER_ERROR );
if ( ! is_string ( $base )) trigger_error ( _ ( 'Please create a new module object with $accountContainer->add_objectClass(\'quota\');' ), E_USER_ERROR );
// quota is only a valid objectClass for user and host
2003-12-30 15:36:30 +00:00
if ( ! ( $_SESSION [ $this -> base ] -> get_type () == 'user' ) && ! ( $_SESSION [ $this -> base ] -> get_type () == 'group' )) trigger_error ( _ ( 'quota can only be used for users or groups.' ), E_USER_WARNING );
2003-12-27 11:21:00 +00:00
/* Check if ldap conatiner is in array and set type
* users are using inetOrgPerson - , hosts account - container
*/
if ( ! isset ( $_SESSION [ $this -> base ] -> module [ 'posixAccount' ]) && $_SESSION [ $this -> base ] -> type == 'user' ) $_SESSION [ $this -> base ] -> add_objectClass ( 'posixAccount' );
if ( ! isset ( $_SESSION [ $this -> base ] -> module [ 'posixGroup' ]) && $_SESSION [ $this -> base ] -> type == 'group' ) $_SESSION [ $this -> base ] -> add_objectClass ( 'posixGroup' );
// Get basic quotas for new account
$output_array = $_SESSION [ $this -> base ] -> lamdaemon ( array ( " + quota get " . $_SESSION [ $this -> base ] -> type ));
// process quotas
if ( is_array ( $output_array )) {
$all_quota = explode ( ':' , $output_array [ 0 ]);
for ( $j = 0 ; $j < sizeof ( $all_quota ) - 1 ; $j ++ ) {
$single_quota = explode ( ',' , $all_quota [ $j ]);
// unset not existing quotas from account-object
// collect all existing mountpoints in array
$real_quotas [] = $single_quota [ 0 ];
for ( $k = 0 ; $k < sizeof ( $single_quota ); $k ++ )
$this -> quota [ $j ][ $k ] = $single_quota [ $k ];
if ( $this -> quota [ $j ][ 4 ] < time ()) $this -> quota [ $j ][ 4 ] = '' ;
else $this -> quota [ $j ][ 4 ] = strval ( intval (( $this -> quota [ $j ][ 4 ] - time ()) / 3600 )) . ' ' . _ ( 'hours' );
if ( $this -> quota [ $j ][ 8 ] < time ()) $this -> quota [ $j ][ 8 ] = '' ;
else $this -> quota [ $j ][ 8 ] = strval ( intval (( $this -> quota [ $j ][ 8 ] - time ()) / 3600 )) . ' ' . _ ( 'hours' );
}
$j = 0 ;
while ( isset ( $this -> quota [ $j ][ 0 ]))
// remove invalid quotas
if ( ! in_array ( $this -> quota [ $j ][ 0 ], $real_quotas )) unset ( $this -> quota [ $j ]);
else $j ++ ;
// Beautify array, repair index
if ( is_array ( $this -> quota )) $this -> quota = array_values ( $this -> quota );
}
}
// Variables
// name of accountContainer so we can read other classes in accuontArray
var $base ;
var $quota ;
2003-12-30 15:36:30 +00:00
function get_alias () {
return _ ( 'quota' );
}
2003-12-27 11:21:00 +00:00
/* This function returns a list with all required modules
*/
2003-12-30 15:36:30 +00:00
function get_dependencies ( $scope ) {
if ( $scope == 'group' ) return array ( 'require' => array ( 'posixGroup' ), 'conflict' => array () );
if ( $scope == 'user' ) return array ( 'require' => array ( 'posixAccount' ), 'conflict' => array () );
2003-12-27 11:21:00 +00:00
return - 1 ;
}
function module_ready () {
if ( ! isset ( $_SESSION [ $_SESSION [ $this -> base ] -> config ] -> scriptPath )) return $false ;
if ( $_SESSION [ $this -> base ] -> type == 'user' && $_SESSION [ $this -> base ] -> module [ 'posixAccount' ] -> attributes [ 'uid' ][ 0 ] == '' ) return false ;
if ( $_SESSION [ $this -> base ] -> type == 'group' && $_SESSION [ $this -> base ] -> module [ 'posixGroup' ] -> attributes [ 'cn' ][ 0 ] == '' ) return false ;
return true ;
}
2003-12-30 15:36:30 +00:00
/* This function returns a list of all html - pages in module
* This is usefull for mass upload and pdf - files
* because lam can walk trough all pages itself and do some
* error checkings
2003-12-27 11:21:00 +00:00
*/
2003-12-30 15:36:30 +00:00
function pages () {
return array ( 'attributes' );
2003-12-27 11:21:00 +00:00
}
2003-12-30 15:36:30 +00:00
/* This function returns all ldap attributes
* which are part of quota and returns
* also their values .
*/
function get_attributes () {
return $this -> quota ;
}
2003-12-27 11:21:00 +00:00
/* This function loads all attributes into the object
* $attr is an array as it ' s retured from ldap_get_attributes
*/
function load_attributes ( $attr ) {
// Load name
if ( $_SESSION [ $this -> base ] -> type == 'user' ) $id = $attr [ 'uid' ][ 0 ];
if ( $_SESSION [ $this -> base ] -> type == 'group' ) $id = $attr [ 'cn' ][ 0 ];
// Get quotas
$output_array = $_SESSION [ $this -> base ] -> lamdaemon ( array ( " $id quota get " . $_SESSION [ $this -> base ] -> type ));
// process quotas
if ( is_array ( $output_array )) {
$all_quota = explode ( ':' , $output_array [ 0 ]);
for ( $j = 0 ; $j < sizeof ( $all_quota ) - 1 ; $j ++ ) {
$single_quota = explode ( ',' , $all_quota [ $j ]);
// unset not existing quotas from account-object
// collect all existing mountpoints in array
$real_quotas [] = $single_quota [ 0 ];
for ( $k = 0 ; $k < sizeof ( $single_quota ); $k ++ )
$this -> quota [ $j ][ $k ] = $single_quota [ $k ];
if ( $this -> quota [ $j ][ 4 ] < time ()) $this -> quota [ $j ][ 4 ] = '' ;
else $this -> quota [ $j ][ 4 ] = strval ( intval (( $this -> quota [ $j ][ 4 ] - time ()) / 3600 )) . ' ' . _ ( 'hours' );
if ( $this -> quota [ $j ][ 8 ] < time ()) $this -> quota [ $j ][ 8 ] = '' ;
else $this -> quota [ $j ][ 8 ] = strval ( intval (( $this -> quota [ $j ][ 8 ] - time ()) / 3600 )) . ' ' . _ ( 'hours' );
}
$j = 0 ;
while ( isset ( $this -> quota [ $j ][ 0 ]))
// remove invalid quotas
if ( ! in_array ( $this -> quota [ $j ][ 0 ], $real_quotas )) unset ( $this -> quota [ $j ]);
else $j ++ ;
// Beautify array, repair index
if ( is_array ( $this -> quota )) $this -> quota = array_values ( $this -> quota );
}
return 0 ;
}
/* This function returns an array with 3 entries :
* array ( DN1 ( 'add' => array ( $attr ), 'remove' => array ( $attr ), 'modify' => array ( $attr )), DN2 .... )
* 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
* add are attributes which have to be added to ldap entry
* remove are attributes which have to be removed from ldap entry
* modify are attributes which have to been modified in ldap entry
*/
function save_attributes () {
/* Check wich quotas have changed
* Because we can not send an array to lamdaemon . pl we have to put all
* values in a string . ':' sepraeates the first array , ',' the second
*
* $values -> quota [][] First array is an index for every chare with active quotas
* second array Contains values for every share :
* mountpoint , used blocks , soft block limit , hard block limit , grace block period , used inodes ,
* soft inode limit , hard inode limit , grace inode period
*/
$i = 0 ;
while ( $this -> quota [ $i ][ 0 ]) {
$quotastring = $quotastring . $this -> quota [ $i ][ 0 ] . ',' . $this -> quota [ $i ][ 2 ] . ',' . $this -> quota [ $i ][ 3 ]
. ',' . $this -> quota [ $i ][ 6 ] . ',' . $this -> quota [ $i ][ 7 ] . ':' ;
$i ++ ;
}
if ( $_SESSION [ $this -> base ] -> type == 'user' ) $id = $_SESSION [ $this -> base ] -> module [ 'posixAccount' ] -> attributes [ 'uid' ][ 0 ];
if ( $_SESSION [ $this -> base ] -> type == 'group' ) $id = $_SESSION [ $this -> base ] -> module [ 'posixGroup' ] -> attributes [ 'cn' ][ 0 ];
$return [ $_SESSION [ $this -> base ] -> dn ][ 'lamdaemon' ][ 'command' ][] = $id . " quota set " . $_SESSION [ $this -> base ] -> type . " $quotastring\n " ;
return $return ;
}
2003-12-30 15:36:30 +00:00
function delete_attributes ( $post ) {
2003-12-27 11:21:00 +00:00
$i = 0 ;
while ( $this -> quota [ $i ][ 0 ]) {
$quotastring = $quotastring . $this -> quota [ $i ][ 0 ] . ',0,0,0,0:' ;
$i ++ ;
}
if ( $_SESSION [ $this -> base ] -> type == 'user' ) $id = $_SESSION [ $this -> base ] -> module [ 'posixAccount' ] -> attributes [ 'uid' ][ 0 ];
if ( $_SESSION [ $this -> base ] -> type == 'group' ) $id = $_SESSION [ $this -> base ] -> module [ 'posixGroup' ] -> attributes [ 'cn' ][ 0 ];
$return [ $_SESSION [ $this -> base ] -> dn ][ 'lamdaemon' ][ 'command' ][] = $id . " quota set " . $_SESSION [ $this -> base ] -> type . " $quotastring\n " ;
return $return ;
}
2003-12-30 15:36:30 +00:00
/* Write variables into object and do some regexp checks
2003-12-27 11:21:00 +00:00
*/
2003-12-30 15:36:30 +00:00
function proccess_attributes ( $post ) {
// Write all general values into $account_new
$i = 0 ;
// loop for every mointpoint with quotas
while ( $this -> quota [ $i ][ 0 ]) {
$this -> quota [ $i ][ 2 ] = $post [ $i . '_2' ];
$this -> quota [ $i ][ 3 ] = $post [ $i . '_3' ];
$this -> quota [ $i ][ 6 ] = $post [ $i . '_6' ];
$this -> quota [ $i ][ 7 ] = $post [ $i . '_7' ];
// Check if values are OK and set automatic values. if not error-variable will be set
if ( ! ereg ( '^([0-9])*$' , $this -> quota [ $i ][ 2 ]))
$errors [] = array ( 'ERROR' , _ ( 'Block soft quota' ), _ ( 'Block soft quota contains invalid characters. Only natural numbers are allowed' ));
if ( ! ereg ( '^([0-9])*$' , $this -> quota [ $i ][ 3 ]))
$errors [] = array ( 'ERROR' , _ ( 'Block hard quota' ), _ ( 'Block hard quota contains invalid characters. Only natural numbers are allowed' ));
if ( ! ereg ( '^([0-9])*$' , $this -> quota [ $i ][ 6 ]))
$errors [] = array ( 'ERROR' , _ ( 'Inode soft quota' ), _ ( 'Inode soft quota contains invalid characters. Only natural numbers are allowed' ));
if ( ! ereg ( '^([0-9])*$' , $this -> quota [ $i ][ 7 ]))
$errors [] = array ( 'ERROR' , _ ( 'Inode hard quota' ), _ ( 'Inode hard quota contains invalid characters. Only natural numbers are allowed' ));
if ( intval ( $this -> quota [ $i ][ 2 ]) > intval ( $this -> quota [ $i ][ 3 ]))
$errors [] = array ( 'ERROR' , _ ( 'Block quota' ), _ ( 'Block soft quota must be smaller than block hard quota' ));
if ( intval ( $this -> quota [ $i ][ 6 ]) > intval ( $this -> quota [ $i ][ 7 ]))
$errors [] = array ( 'ERROR' , _ ( 'Inode quota' ), _ ( 'Inode soft quota must be smaller than inode hard quota' ));
$i ++ ;
}
// Return error-messages
if ( is_array ( $errors )) return $errors ;
// Go to additional group page when no error did ocour and button was pressed
return 0 ;
2003-12-27 11:21:00 +00:00
}
/* This function will create the html - page
* to show a page with all attributes .
* It will output a complete html - table
*/
function display_html_attributes ( $post ) {
echo " <table border=0 width= \" 100% \" > \n " ;
echo " <tr> \n " ;
echo " <td> " . _ ( 'Mountpoint' ) . " </td> \n " ;
echo " <td> " . _ ( 'Used blocks' ) . " </td> \n " ;
echo " <td> " . _ ( 'Soft block limit' ) . " </td> \n " ;
echo " <td> " . _ ( 'Hard block limit' ) . " </td> \n " ;
echo " <td> " . _ ( 'Grace block period' ) . " </td> \n " ;
echo " <td> " . _ ( 'Used inodes' ) . " </td> \n " ;
echo " <td> " . _ ( 'Soft inode limit' ) . " </td> \n " ;
echo " <td> " . _ ( 'Hard inode limit' ) . " </td> \n " ;
echo " <td> " . _ ( 'Grace inode period' ) . " </td> \n " ;
echo " </tr> \n " ;
echo " <tr> \n " ;
echo " <td><a href= \" ../help.php?HelpNumber=439 \" target= \" lamhelp \" > " . _ ( 'Help' ) . " </a></td> \n " ;
echo " <td><a href= \" ../help.php?HelpNumber=440 \" target= \" lamhelp \" > " . _ ( 'Help' ) . " </a></td> \n " ;
echo " <td><a href= \" ../help.php?HelpNumber=441 \" target= \" lamhelp \" > " . _ ( 'Help' ) . " </a></td> \n " ;
echo " <td><a href= \" ../help.php?HelpNumber=442 \" target= \" lamhelp \" > " . _ ( 'Help' ) . " </a></td> \n " ;
echo " <td><a href= \" ../help.php?HelpNumber=443 \" target= \" lamhelp \" > " . _ ( 'Help' ) . " </a></td> \n " ;
echo " <td><a href= \" ../help.php?HelpNumber=444 \" target= \" lamhelp \" > " . _ ( 'Help' ) . " </a></td> \n " ;
echo " <td><a href= \" ../help.php?HelpNumber=445 \" target= \" lamhelp \" > " . _ ( 'Help' ) . " </a></td> \n " ;
echo " <td><a href= \" ../help.php?HelpNumber=446 \" target= \" lamhelp \" > " . _ ( 'Help' ) . " </a></td> \n " ;
echo " <td><a href= \" ../help.php?HelpNumber=447 \" target= \" lamhelp \" > " . _ ( 'Help' ) . " </a></td> \n " ;
echo " </tr> \n " ;
$i = 0 ;
// loop for every mointpoint with enabled quotas
while ( $this -> quota [ $i ][ 0 ]) {
echo " <tr> \n " ;
echo " <td> " . $this -> quota [ $i ][ 0 ] . " </td> \n " ;
echo " <td> " . $this -> quota [ $i ][ 1 ] . " </td> \n " ; // used blocks
2003-12-30 15:36:30 +00:00
echo " <td><input name= \" " . $i . " _2 \" type= \" text \" size= \" 12 \" maxlength= \" 20 \" value= \" " . $this -> quota [ $i ][ 2 ] . " \" ></td> \n " ; // blocks soft limit
echo " <td><input name= \" " . $i . " _3 \" type= \" text \" size= \" 12 \" maxlength= \" 20 \" value= \" " . $this -> quota [ $i ][ 3 ] . " \" ></td> \n " ; // blocks hard limit
2003-12-27 11:21:00 +00:00
echo " <td> " . $this -> quota [ $i ][ 4 ] . " </td> \n " ; // block grace period
echo " <td> " . $this -> quota [ $i ][ 5 ] . " </td> \n " ; // used inodes
2003-12-30 15:36:30 +00:00
echo " <td><input name= \" " . $i . " _6 \" type= \" text \" size= \" 12 \" maxlength= \" 20 \" value= \" " . $this -> quota [ $i ][ 6 ] . " \" ></td> \n " ; // inodes soft limit
echo " <td><input name= \" " . $i . " _7 \" type= \" text \" size= \" 12 \" maxlength= \" 20 \" value= \" " . $this -> quota [ $i ][ 7 ] . " \" ></td> \n " ; // inodes hard limit
2003-12-27 11:21:00 +00:00
echo " <td> " . $this -> quota [ $i ][ 8 ] . " </td> \n " ;
echo " </tr> \n " ; // inodes grace period
$i ++ ;
}
echo " </table> \n " ;
return 0 ;
}
}
2003-12-30 15:36:30 +00:00
?>