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