steffen: server/kolab-webadmin/kolab-webadmin/www/admin/user user.php, 1.5, 1.6
cvs at intevation.de
cvs at intevation.de
Thu May 27 17:59:29 CEST 2004
Author: steffen
Update of /kolabrepository/server/kolab-webadmin/kolab-webadmin/www/admin/user
In directory doto:/tmp/cvs-serv15704/kolab-webadmin/www/admin/user
Modified Files:
user.php
Log Message:
thorough duplicate mail address checks for users
Index: user.php
===================================================================
RCS file: /kolabrepository/server/kolab-webadmin/kolab-webadmin/www/admin/user/user.php,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- user.php 25 May 2004 23:12:22 -0000 1.5
+++ user.php 27 May 2004 15:59:27 -0000 1.6
@@ -40,17 +40,35 @@
// Check that a uid is unique
function checkuniquemail( $form, $key, $value ) {
debug("checkuniquemail( $form, $key, $value )");
- if( is_unique( 'uid', $value ) ) {
- return '';
+ global $ldap;
+ if( $ldap->countMail( $_SESSION['base_dn'], $value ) > 0 ) {
+ return 'User or distribution list with this email address already exists';
} else {
- return 'User with this email address already exists';
+ return '';
+ }
+}
+
+function checkuniquealias( $form, $key, $value ) {
+ global $ldap;
+ global $action;
+ global $dn;
+ $excludedn = false;
+ if( $action == 'save' ) $excludedn = trim($dn);
+ $lst = array_unique( array_filter( array_map( 'trim', preg_split( '/\n/', $value ) ), 'strlen') );
+ $str = '';
+ foreach( $lst as $alias ) {
+ debug( "looking at $alias, exluding $dn" );
+ if( $ldap->countMail( $_SESSION['base_dn'], $alias, $excludedn ) > 0 ) {
+ $str .= 'Mail address '.htmlentities($alias).' already exists<br />';
+ }
}
+ return $str;
}
// Check that password match
function checkpw( $form, $key, $value ) {
global $action;
- if( $action == "firstsave" ) {
+ if( $action == 'firstsave' ) {
if( $key == 'password_0' ) {
if( $value == '' ) return 'Password is empty';
} else if( $key == 'password_1' ) {
@@ -194,6 +212,7 @@
'title_0' => array( 'name' => 'Title' ) );
$entries['alias'] = array( 'name' => 'Email Aliases',
'type' => 'textarea',
+ 'validation' => 'checkuniquealias',
'comment' => 'One address per line' );
$entries['o_0'] = array( 'name' => 'Organisation' );
@@ -267,11 +286,9 @@
if ($count > 0) $ldap_object[$attr] = $args;
elseif (!empty($_POST[$key])) $ldap_object[$attr] = $_POST[$key];
}
- if( !empty( $_POST['alias'] ) ) {
- $ldap_object['alias'] = array_unique( array_filter( array_map( 'trim', preg_split( '/\n/', $_POST['alias'] ) ), 'strlen') );
- }
if ($auth->group() == "maintainer" || $auth->group() == "admin") {
+ $ldap_object['alias'] = array_unique( array_filter( array_map( 'trim', preg_split( '/\n/', $_POST['alias'] ) ), 'strlen') );
if (!empty($_POST['visible']) && $_POST['visible'] == "on")
$visible = true;
else $visible = false;
@@ -323,6 +340,19 @@
array_push($errors, "LDAP Error: Could not modify object $dn ".ldap_error($ldap->connection));
}
}
+ // Check for collisions on alias
+ for( $i = 0; $i < count($ldap_object['alias']); ++$i ) {
+ if( $ldap->countMail( $_SESSION['base_dn'], $alias, $dn ) > 0 ) {
+ // Ups!!!
+ $alias = $ldap_object['alias'][$i];
+ $newalias = md5sum( $dn.$alias ).'@'.substr( $alias, 0, strpos( $alias, '@' ) );
+ $ldap_object['alias'][$i] = $newalias;
+ if (!ldap_modify($ldap->connection, $dn, $ldap_object)) {
+ $errors[] = "LDAP Error: Could not modify object $dn ".ldap_error($ldap->connection);
+ }
+ $error[] = "Mid-air collision detected, alias $alias renamed to $newalias";
+ }
+ }
}
$heading = 'Modify User';
if( !$errors ) $messages[] = 'User '.$dn.' successfully modified';
@@ -342,6 +372,33 @@
debug("Calling ldap_add with dn=$dn");
if ($dn && !ldap_add($ldap->connection, $dn, $ldap_object))
array_push($errors, "LDAP Error: could not add object $dn ".ldap_error($ldap->connection));
+
+ // Check for mid-air collisions on mail
+ if( $ldap->countMail( $_SESSION['base_dn'], $ldap_object['mail'], $dn ) > 0 ) {
+ // Ups!!!
+ $mail = $ldap_object['mail'];
+ $newmail = md5sum( $dn.$mail ).'@'.substr( $mail, 0, strpos( $mail, '@' ) );
+ $ldap_object['uid'] = $ldap_object['mail'] = $newmail;
+ if (!ldap_modify($ldap->connection, $dn, $ldap_object)) {
+ $errors[] = "LDAP Error: Could not modify object $dn ".ldap_error($ldap->connection);
+ }
+ $error[] = "Mid-air collision detected, email address $mail renamed to $newmail";
+ }
+
+ // Check for collisions on alias
+ for( $i = 0; $i < count($ldap_object['alias']); ++$i ) {
+ if( $ldap->countMail( $_SESSION['base_dn'], $alias, $dn ) > 0 ) {
+ // Ups!!!
+ $alias = $ldap_object['alias'][$i];
+ $newalias = md5sum( $dn.$alias ).'@'.substr( $alias, 0, strpos( $alias, '@' ) );
+ $ldap_object['alias'][$i] = $newalias;
+ if (!ldap_modify($ldap->connection, $dn, $ldap_object)) {
+ $errors[] = "LDAP Error: Could not modify object $dn ".ldap_error($ldap->connection);
+ }
+ $error[] = "Mid-air collision detected, alias $alias renamed to $newalias";
+ }
+ }
+
if( !$errors ) {
$messages[] = 'User '.$ldap_object['dn'].' successfully created';
$heading = 'Create New User';
More information about the commits
mailing list