steffen: server/kolab-webadmin/kolab-webadmin/www/admin/distributionlist list.php, 1.2, 1.3
cvs at intevation.de
cvs at intevation.de
Fri May 28 17:49:54 CEST 2004
Author: steffen
Update of /kolabrepository/server/kolab-webadmin/kolab-webadmin/www/admin/distributionlist
In directory doto:/tmp/cvs-serv9790/kolab-webadmin/www/admin/distributionlist
Modified Files:
list.php
Log Message:
anal nameclash checking + bugfixing for dist lists
Index: list.php
===================================================================
RCS file: /kolabrepository/server/kolab-webadmin/kolab-webadmin/www/admin/distributionlist/list.php,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- list.php 21 May 2004 13:03:09 -0000 1.2
+++ list.php 28 May 2004 15:49:52 -0000 1.3
@@ -28,6 +28,22 @@
return '';
}
+function checkuniquemail( $form, $key, $value ) {
+ global $ldap;
+ if( $key == 'cn' ) {
+ // Here we have the required hack again:
+ // email address is <value of cn>@default-domain
+ $kolab = $ldap->read( 'k=kolab,'.$_SESSION['base_dn'] );
+ for( $i = 0; $i < $kolab['postfix-mydomain']['count']; $i++ ) {
+ $domain = $kolab['postfix-mydomain'][$i];
+ if( $ldap->countMail( $_SESSION['base_dn'], $value.'@'.$domain ) > 0 ) {
+ return 'User or distribution list with this email address already exists';
+ }
+ }
+ }
+ return '';
+}
+
function fill_form_for_modify( &$form, &$ldap_object ) {
if (is_array($ldap_object['cn'])) $cn = $ldap_object['cn'][0];
else $cn = $ldap_object['cn'];
@@ -85,6 +101,7 @@
$content = $form->outputForm();
break;
case 'firstsave':
+ $form->entries['cn']['validation'] = 'checkuniquemail';
case 'save':
if( $form->isSubmitted() ) {
if( !$form->validate() ) {
@@ -101,6 +118,7 @@
foreach( $lst as $a ) {
$ldap_object['member'][] = $a;
}
+ if( !$ldap_object['member'] ) unset($ldap_object['member']);
if ($action == "save") {
if (!$errors) {
@@ -112,39 +130,67 @@
($oldattrs=ldap_get_attributes($ldap->connection,$entry))) {
if (!ldap_add($ldap->connection,$newdn, $ldap_object)
|| !ldap_delete($ldap->connection,$dn)) {
- array_push($errors, "LDAP Error: could not rename ".$dn.
+ array_push($errors, "LDAP Error: Could not rename ".$dn.
" to ".$newdn." ".ldap_error($ldap->connection));
} else {
$messages[] = 'Distribution List updated';
}
$dn = $newdn;
- } else array_push($errors,"LDAP Error: could not read ".$dn." ".ldap_error($ldap->connection));
+ } else array_push($errors,"LDAP Error: Could not read ".$dn." ".ldap_error($ldap->connection));
} else {
if (!ldap_modify($ldap->connection, $dn, $ldap_object))
- array_push($errors, "LDAP Error: could not modify object ".$dn." ".ldap_error($ldap->connection));
+ array_push($errors, "LDAP Error: Could not modify object ".$dn." ".ldap_error($ldap->connection));
else $messages[] = 'Distribution List updated';
}
}
} else {
+ // firstsave
if (!$errors) {
+ if( !$ldap_object['member'] ) unset($ldap_object['member']);
$dn = "cn=".$ldap_object['cn'].",".$sf_root;
- if ($dn && !ldap_add($ldap->connection, $dn, $ldap_object))
- array_push($errors, "LDAP Error: could not add object ".$dn." ".ldap_error($ldap->connection));
- else $messages[] = 'Distribution List '.$cn.' added';
+ if ($dn && !ldap_add($ldap->connection, $dn, $ldap_object)) {
+ array_push($errors, "LDAP Error: Could not add object ".$dn." ".ldap_error($ldap->connection));
+ debug("dn is $dn");
+ debug_var_dump( $ldap_object );
+ }
+
+ if( !$errors ) {
+ // Check for mid-air collisions on mail
+ $kolab = $ldap->read( 'k=kolab,'.$_SESSION['base_dn'] );
+ for( $i = 0; $i < $kolab['postfix-mydomain']['count']; $i++ ) {
+ $domain = $kolab['postfix-mydomain'][$i];
+ if( $ldap->countMail( $_SESSION['base_dn'], $ldap_object['cn'].'@'.$domain, $dn ) > 0 ) {
+ // Ups!!!
+ $cn = $ldap_object['cn'];
+ $newcn = md5sum( $dn.$cn );
+ $ldap_object['cn'] = $newcn;
+ $ldap_object['dn'] = 'cn='.$ldap->escape($newcn).','.$sf_root;
+ if (!ldap_rename($ldap->connection, $dn, 'cn='.$ldap->escape($newcn), $sf_root,true)) {
+ $errors[] = "LDAP Error: Could not modify object $dn ".ldap_error($ldap->connection);
+ }
+ $error[] = "Mid-air collision detected, email address $mail renamed to $newmail";
+ break;
+ }
+ }
+ }
}
- if ($errors) {
- //print("<div class=\"maintitle\"> Create New Address Book Entry </div>\n");
- $form->entries['action']['value'] = 'create';
- break;
+ if( !$errors ) {
+ $messages[] = 'Distribution List '.$cn.' added';
}
}
- $form->entries['action']['value'] = 'save';
- $form->entries['dn'] = array( 'type' => 'hidden', 'value' => $dn );
- $form->entries['cn']['attrs'] = 'readonly';
- $heading = 'Modify Distribution List';
- fill_form_for_modify( $form, $ldap_object );
- $content = $form->outputForm();
-
+ if ($errors) {
+ //print("<div class=\"maintitle\"> Create New Address Book Entry </div>\n");
+ $form->entries['action']['value'] = 'create';
+ fill_form_for_modify( $form, $ldap_object );
+ $content = $form->outputForm();
+ } else {
+ $form->entries['action']['value'] = 'save';
+ $form->entries['dn'] = array( 'type' => 'hidden', 'value' => $dn );
+ $form->entries['cn']['attrs'] = 'readonly';
+ $heading = 'Modify Distribution List';
+ fill_form_for_modify( $form, $ldap_object );
+ $content = $form->outputForm();
+ }
}
}
break;
@@ -200,7 +246,7 @@
/**** Insert into template and output ***/
$smarty =& new MySmarty();
-$smarty->assign( 'errors', $errors );
+$smarty->assign( 'errors', array_merge($errors,$form->errors) );
$smarty->assign( 'heading', $heading );
$smarty->assign( 'uid', $auth->uid() );
$smarty->assign( 'group', $auth->group() );
More information about the commits
mailing list