[2041] in Moira Commits

home help back first fref pref prev next nref lref last post

/svn/moira r4183 - trunk/moira/incremental/ldap

daemon@ATHENA.MIT.EDU (Garry Zacheiss)
Fri Jan 30 14:04:16 2015

Date: Fri, 30 Jan 2015 14:04:09 -0500
From: Garry Zacheiss <zacheiss@mit.edu>
Message-Id: <201501301904.t0UJ49gU023271@drugstore.mit.edu>
To: moira-commits@mit.edu
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Author: zacheiss
Date: 2015-01-30 14:04:09 -0500 (Fri, 30 Jan 2015)
New Revision: 4183

Modified:
   trunk/moira/incremental/ldap/winad.c
Log:
from mark

Modified: trunk/moira/incremental/ldap/winad.c
===================================================================
--- trunk/moira/incremental/ldap/winad.c	2014-09-19 21:24:45 UTC (rev 4182)
+++ trunk/moira/incremental/ldap/winad.c	2015-01-30 19:04:09 UTC (rev 4183)
@@ -2440,6 +2440,15 @@
       return(AD_INVALID_NAME);
     }
 
+  sprintf(new_dn_path, "%s,%s", after_group_ou, dn_path);
+  sprintf(new_dn, "cn=%s", after_group_name);
+  sprintf(mail, "%s@%s", after_group_name, lowercase(ldap_domain));
+  sprintf(contact_mail, "%s@mit.edu", after_group_name); 
+  sprintf(proxy_address, "SMTP:%s@%s", after_group_name, 
+	  lowercase(ldap_domain));
+
+  sprintf(mail_nickname, "%s", after_group_name);
+
   if (Exchange) 
     {
       if(atoi(maillist)) 
@@ -2471,6 +2480,55 @@
 	  linklist_free(group_base);
 	  group_base = NULL;
 	  group_count = 0;
+
+	  sprintf(search_filter, "(proxyAddresses=smtp:%s)", 
+		  mail);
+	  attr_array[0] = "cn";
+	  attr_array[1] = NULL;
+
+	  if ((rc = linklist_build(ldap_handle, dn_path, search_filter, 
+				   attr_array, &group_base, &group_count,
+				   LDAP_SCOPE_SUBTREE)) != 0)
+	  {
+	    com_err(whoami, 0, "Unable to process group %s : %s",
+		    after_group_name, ldap_err2string(rc));
+	    return(rc);
+	  }
+	
+	  if (group_count)
+	    {
+	      com_err(whoami, 0, "Object %s already exists with address %s",
+		      group_base->dn, mail);
+	      MailDisabled++;
+	    }
+
+	  linklist_free(group_base);
+	  group_base = NULL;
+	  group_count = 0;
+
+	  sprintf(search_filter, "(mailNickname=%s)", after_group_name);
+	  attr_array[0] = "cn";
+	  attr_array[1] = NULL;
+
+	  if ((rc = linklist_build(ldap_handle, dn_path, search_filter, 
+				   attr_array, &group_base, &group_count,
+				   LDAP_SCOPE_SUBTREE)) != 0)
+	  {
+	    com_err(whoami, 0, "Unable to process group %s : %s",
+		    after_group_name, ldap_err2string(rc));
+	    return(rc);
+	  }
+	
+	  if (group_count)
+	    {
+	      com_err(whoami, 0, "Object %s already exists with address %s",
+		      group_base->dn, mail);
+	      MailDisabled++;
+	    }
+
+	  linklist_free(group_base);
+	  group_base = NULL;
+	  group_count = 0;
 	}
     }
 
@@ -2523,14 +2581,6 @@
   group_base = NULL;
   group_count = 0;
   
-  sprintf(new_dn_path, "%s,%s", after_group_ou, dn_path);
-  sprintf(new_dn, "cn=%s", after_group_name);
-  sprintf(mail, "%s@%s", after_group_name, lowercase(ldap_domain));
-  sprintf(contact_mail, "%s@mit.edu", after_group_name); 
-  sprintf(proxy_address, "SMTP:%s@%s", after_group_name, 
-	  lowercase(ldap_domain));
-
-  sprintf(mail_nickname, "%s", after_group_name);
   com_err(whoami, 0, "Old %s New %s,%s", old_dn, new_dn, new_dn_path);
 
   if ((rc = ldap_rename_s(ldap_handle, old_dn, new_dn, new_dn_path,
@@ -2800,6 +2850,60 @@
 	      linklist_free(group_base);
 	      group_base = NULL;
 	      group_count = 0;
+
+	      sprintf(filter, 
+		      "(proxyAddresses=smtp:%s)", mail);
+	      attr_array[0] = "cn";
+	      attr_array[1] = NULL;
+
+	      if ((rc = linklist_build((LDAP *)call_args[0], call_args[1], 
+				       filter, attr_array, &group_base, 
+				       &group_count,
+				       LDAP_SCOPE_SUBTREE)) != 0)
+		{
+		  com_err(whoami, 0, "Unable to process group %s : %s",
+			  av[L_NAME], ldap_err2string(rc));
+		  return(rc);
+		}
+	      
+	      if (group_count) 
+		{
+		  com_err(whoami, 0, 
+			  "Object %s already exists with address %s",
+			  group_base->dn, mail);
+		  MailDisabled++;
+		}
+
+	      linklist_free(group_base);
+	      group_base = NULL;
+	      group_count = 0;
+
+	      sprintf(filter, 
+		      "(mailNickname=%s)", av[L_NAME]);
+	      attr_array[0] = "cn";
+	      attr_array[1] = NULL;
+
+	      if ((rc = linklist_build((LDAP *)call_args[0], call_args[1], 
+				       filter, attr_array, &group_base, 
+				       &group_count,
+				       LDAP_SCOPE_SUBTREE)) != 0)
+		{
+		  com_err(whoami, 0, "Unable to process group %s : %s",
+			  av[L_NAME], ldap_err2string(rc));
+		  return(rc);
+		}
+	      
+	      if (group_count) 
+		{
+		  com_err(whoami, 0, 
+			  "Object %s already exists with address %s",
+			  group_base->dn, mail);
+		  MailDisabled++;
+		}
+
+	      linklist_free(group_base);
+	      group_base = NULL;
+	      group_count = 0;
 	    }
 	  
 	  if(atoi(av[L_MAILLIST]) && !MailDisabled && email_isvalid(mail)) 
@@ -2942,6 +3046,60 @@
 	      linklist_free(group_base);
 	      group_base = NULL;
 	      group_count = 0;
+
+	      sprintf(filter, 
+		      "(proxyAddresses=smtp:%s)", mail);
+	      attr_array[0] = "cn";
+	      attr_array[1] = NULL;
+
+	      if ((rc = linklist_build((LDAP *)call_args[0], call_args[1], 
+				       filter, attr_array, &group_base, 
+				       &group_count,
+				       LDAP_SCOPE_SUBTREE)) != 0)
+		{
+		  com_err(whoami, 0, "Unable to process group %s : %s",
+			  av[L_NAME], ldap_err2string(rc));
+		  return(rc);
+		}
+	      
+	      if (group_count) 
+		{
+		  com_err(whoami, 0, 
+			  "Object %s already exists with address %s",
+			  group_base->dn, mail);
+		  MailDisabled++;
+		}
+
+	      linklist_free(group_base);
+	      group_base = NULL;
+	      group_count = 0;
+
+	      sprintf(filter, 
+		      "(mailNickname=%s)", mail);
+	      attr_array[0] = "cn";
+	      attr_array[1] = NULL;
+
+	      if ((rc = linklist_build((LDAP *)call_args[0], call_args[1], 
+				       filter, attr_array, &group_base, 
+				       &group_count,
+				       LDAP_SCOPE_SUBTREE)) != 0)
+		{
+		  com_err(whoami, 0, "Unable to process group %s : %s",
+			  av[L_NAME], ldap_err2string(rc));
+		  return(rc);
+		}
+	      
+	      if (group_count) 
+		{
+		  com_err(whoami, 0, 
+			  "Object %s already exists with address %s",
+			  group_base->dn, mail);
+		  MailDisabled++;
+		}
+
+	      linklist_free(group_base);
+	      group_base = NULL;
+	      group_count = 0;
 	    }
 
 	  if (atoi(av[L_MAILLIST]) && !MailDisabled && email_isvalid(mail)) 
@@ -3788,6 +3946,7 @@
   char proxy_address_external[256];
   char target_address[256];
   char internal_contact_name[256];
+  char unqualified_user_name[256];
   char filter[128];
   char mail[256];
   char principal[256];
@@ -3844,18 +4003,24 @@
   strcpy(mail, user);
   strcpy(contact_name, mail);
   strcpy(internal_contact_name, mail);
-  
+  strcpy(mail_nickname, mail);
+  strcpy(unqualified_user_name, mail);
+
   if((s = strchr(internal_contact_name, '@')) != NULL) {
     *s = '?';
   }
 
+  if((s = strchr(unqualified_user_name, '@')) != NULL) {
+    *s = '\0';
+  }
+
   sprintf(cn_user_name,"CN=%s,%s,%s", escape_string(contact_name), group_ou, 
 	  bind_path);
 
   sprintf(target_address, "SMTP:%s", contact_name);
   sprintf(proxy_address_external, "SMTP:%s", contact_name);
   sprintf(mail_nickname, "%s", internal_contact_name);
- 
+
   cn_v[0] = cn_user_name;
   contact_v[0] = contact_name;
   uid_v[0] = uid;
@@ -3959,7 +4124,7 @@
 	  group_count = 0;
 	  group_base = NULL;
 
-	  sprintf(filter, "(&(objectClass=user)(homeMDB=*)(mail=%s))", mail);
+	  sprintf(filter, "(&(homeMDB=*)(mail=%s))", mail);
 	  attr_array[0] = "cn";
 	  attr_array[1] = NULL;
 
@@ -4006,10 +4171,9 @@
 	  linklist_free(group_base);
 	  group_base = NULL;
 	  group_count = 0;
-
+	
 	  sprintf(filter, 
-		  "(&(objectClass=user)(homeMDB=*)(proxyAddresses=smtp:%s))", 
-		  mail);
+		  "(proxyAddresses=smtp:%s)", mail);
 	  attr_array[0] = "cn";
 	  attr_array[1] = NULL;
 
@@ -4024,8 +4188,8 @@
       
 	  if (group_count) 
 	    {
-	      com_err(whoami, 0, "Object %s already exists with name %s",
-		      group_base->dn, user);
+	      com_err(whoami, 0, "Object %s already exists with address %s",
+		      group_base->dn, mail);
 	      return(1);
 	    }
 
@@ -4033,8 +4197,8 @@
 	  group_base = NULL;
 	  group_count = 0;
 
-	  sprintf(filter, "(&(objectClass=group)(proxyAddresses=smtp:%s))", 
-		  mail);
+	  sprintf(filter, 
+		  "(mailNickname=%s)", unqualified_user_name);
 	  attr_array[0] = "cn";
 	  attr_array[1] = NULL;
 
@@ -4049,11 +4213,15 @@
       
 	  if (group_count) 
 	    {
-	      com_err(whoami, 0, "Object %s already exists with name %s",
-		      group_base->dn, user);
+	      com_err(whoami, 0, "Object %s already exists with address %s",
+		      group_base->dn, mail);
 	      return(1);
 	    }
 
+	  linklist_free(group_base);
+	  group_base = NULL;
+	  group_count = 0;
+	
 	  ADD_ATTR("mail", email_v, LDAP_MOD_ADD);
 	  ADD_ATTR("mailNickName", mail_nickname_v, LDAP_MOD_ADD);
 	  ADD_ATTR("proxyAddresses", proxy_address_external_v, LDAP_MOD_ADD);
@@ -4326,7 +4494,7 @@
 
       group_count = 0;
       group_base = NULL;
-      
+    
       sprintf(filter_exp, 
 	      "(&(|(mail=%s)(proxyaddresses=smtp:%s)(mailnickname=%s))"
 	      "(!(samaccountname=%s)))", mail, mail, user_name, user_name);
@@ -6218,9 +6386,8 @@
 			      "cn", user_name);
     }
 
-  if(!ActiveDirectory)
-    rc = attribute_update(ldap_handle, distinguished_name, displayName, 
-			  "eduPersonNickname", user_name);
+  rc = attribute_update(ldap_handle, distinguished_name, displayName, 
+			"eduPersonNickname", user_name);
 
   if(update_name_info) 
     {
@@ -6259,6 +6426,13 @@
   n = 0;
   uid_v[0] = Uid;
 
+  sprintf(status, "%d", State);
+  mitMoiraStatus_v[0] = status;
+  mitMoiraClass_v[0] = class;
+  ADD_ATTR("mitMoiraClass", mitMoiraClass_v, LDAP_MOD_REPLACE);
+  ADD_ATTR("mitMoiraStatus", mitMoiraStatus_v, LDAP_MOD_REPLACE);
+  ADD_ATTR("eduPersonPrincipalName", mail_v, LDAP_MOD_REPLACE);
+
   if(ActiveDirectory)
     {
       if (!UseSFU30)
@@ -6273,20 +6447,14 @@
   else
     {
       sprintf(principal, "%s@%s", user_name, PRIMARY_REALM);
-      sprintf(status, "%d", State);
       sprintf(twofactor_status, "%d", TwoFactorStatus);
       principal_v[0] = principal;
       loginshell_v[0] = shell;
-      mitMoiraClass_v[0] = class;
-      mitMoiraStatus_v[0] = status;
       mitMoira2FaStatus_v[0] = twofactor_status;
       gid_v[0] = "101";
       ADD_ATTR("uidNumber", uid_v, LDAP_MOD_REPLACE);
       ADD_ATTR("gidNumber", gid_v, LDAP_MOD_REPLACE);
       ADD_ATTR("loginShell", loginshell_v, LDAP_MOD_REPLACE);
-      ADD_ATTR("eduPersonPrincipalName", mail_v, LDAP_MOD_REPLACE);
-      ADD_ATTR("mitMoiraClass", mitMoiraClass_v, LDAP_MOD_REPLACE);
-      ADD_ATTR("mitMoiraStatus", mitMoiraStatus_v, LDAP_MOD_REPLACE);
       ADD_ATTR("mitMoira2FaStatus", mitMoira2FaStatus_v, LDAP_MOD_REPLACE);
     }
 
@@ -6641,13 +6809,13 @@
   ADD_ATTR("userPrincipalName", userPrincipalName_v, LDAP_MOD_REPLACE);
   ADD_ATTR("displayName", name_v, LDAP_MOD_REPLACE);
   ADD_ATTR("sAMAccountName", samAccountName_v, LDAP_MOD_REPLACE);
+  ADD_ATTR("eduPersonPrincipalName", mail_v, LDAP_MOD_REPLACE);
+  ADD_ATTR("eduPersonNickname", name_v, LDAP_MOD_REPLACE);
 
   if(!ActiveDirectory)
     {
       ADD_ATTR("uid", samAccountName_v, LDAP_MOD_REPLACE);
-      ADD_ATTR("eduPersonPrincipalName", mail_v, LDAP_MOD_REPLACE);
       ADD_ATTR("displayName", name_v, LDAP_MOD_REPLACE);
-      ADD_ATTR("eduPersonNickname", name_v, LDAP_MOD_REPLACE);
     }
 
   if (Exchange)
@@ -7138,20 +7306,12 @@
   if(strlen(av[U_FIRST]) || strlen(av[U_MIDDLE]) || strlen(av[U_LAST])) 
     {
       ADD_ATTR("displayName", displayName_v, LDAP_MOD_ADD);
-
-      if(!ActiveDirectory) 
-	{
-	  ADD_ATTR("eduPersonNickname", displayName_v, LDAP_MOD_ADD);      
-	}
+      ADD_ATTR("eduPersonNickname", displayName_v, LDAP_MOD_ADD);      
     } 
   else 
     {
       ADD_ATTR("displayName", name_v, LDAP_MOD_ADD);
-
-      if(!ActiveDirectory) 
-	{
-	  ADD_ATTR("eduPersonNickname", name_v, LDAP_MOD_ADD);            
-	}
+      ADD_ATTR("eduPersonNickname", name_v, LDAP_MOD_ADD);            
     }
 
   if (strlen(av[U_MIDDLE]) == 1) 
@@ -7168,18 +7328,19 @@
 
   ADD_ATTR("altSecurityIdentities", altSecurityIdentities_v, LDAP_MOD_ADD);
 
+  mitMoiraClass_v[0] = av[U_CLASS];
+  mitMoiraStatus_v[0] = av[U_STATE];
+  ADD_ATTR("mitMoiraClass", mitMoiraClass_v, LDAP_MOD_ADD);
+  ADD_ATTR("mitMoiraStatus", mitMoiraStatus_v, LDAP_MOD_ADD);
+  ADD_ATTR("eduPersonPrincipalName", mail_v, LDAP_MOD_ADD);
+
   if(!ActiveDirectory)
     {
       loginshell_v[0] = av[U_SHELL];
-      mitMoiraClass_v[0] = av[U_CLASS];
-      mitMoiraStatus_v[0] = av[U_STATE];
       mitMoira2FaStatus_v[0] = av[U_TWOFACTORSTATUS];
       ADD_ATTR("loginShell", loginshell_v, LDAP_MOD_ADD);
       ADD_ATTR("uid", samAccountName_v, LDAP_MOD_ADD);
-      ADD_ATTR("eduPersonPrincipalName", mail_v, LDAP_MOD_ADD);
       ADD_ATTR("o", o_v, LDAP_MOD_ADD);
-      ADD_ATTR("mitMoiraClass", mitMoiraClass_v, LDAP_MOD_ADD);
-      ADD_ATTR("mitMoiraStatus", mitMoiraStatus_v, LDAP_MOD_ADD);
       ADD_ATTR("mitMoira2FaStatus", mitMoira2FaStatus_v, LDAP_MOD_ADD);
     }
 


home help back first fref pref prev next nref lref last post