]> andersk Git - moira.git/blobdiff - incremental/winad/winad.c
No debugging output, please.
[moira.git] / incremental / winad / winad.c
index 1d71e3b39bea1b194e37e9091ff1878bf0e20315..6ded2df9f1f7a183a5d6db2f4d99131e5c5ebccd 100755 (executable)
@@ -2340,7 +2340,7 @@ int group_rename(LDAP *ldap_handle, char *dn_path,
   char      *mail_v[] = {NULL, NULL};
   char      *proxy_address_v[] = {NULL, NULL};
   char      *mail_nickname_v[] = {NULL, NULL};
-  char      *reportToOriginator_v[] = {NULL, NULL};
+  char      *report_to_originator_v[] = {NULL, NULL};
   char      *address_book_v[] = {NULL, NULL};
   char      *legacy_exchange_dn_v[] = {NULL, NULL};
   u_int     groupTypeControl;
@@ -2352,6 +2352,7 @@ int group_rename(LDAP *ldap_handle, char *dn_path,
   LK_ENTRY  *group_base;
   int       group_count;
   int       MailDisabled = 0;
+  char      search_filter[1024];
 
   if(UseGroupUniversal)
     groupTypeControl = ADS_GROUP_TYPE_UNIVERSAL_GROUP;
@@ -2380,12 +2381,13 @@ int group_rename(LDAP *ldap_handle, char *dn_path,
          group_count = 0;
          group_base = NULL;
          
-         sprintf(filter, "(&(objectClass=user)(cn=%s))", after_group_name);
+         sprintf(search_filter, "(&(objectClass=user)(cn=%s))", 
+                 after_group_name);
          attr_array[0] = "cn";
          attr_array[1] = NULL;
 
-         if ((rc = linklist_build(ldap_handle, dn_path, filter, attr_array,
-                                  &group_base, &group_count,
+         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",
@@ -2513,21 +2515,30 @@ int group_rename(LDAP *ldap_handle, char *dn_path,
          mail_nickname_v[0] = mail_nickname;
          proxy_address_v[0] = proxy_address;
          mail_v[0] = mail;
+         report_to_originator_v[0] = "TRUE";
+
          ADD_ATTR("mailNickName", mail_nickname_v, LDAP_MOD_REPLACE);
          ADD_ATTR("mail", mail_v, LDAP_MOD_REPLACE);
          ADD_ATTR("proxyAddresses", proxy_address_v, LDAP_MOD_REPLACE);
+         ADD_ATTR("reportToOriginator", report_to_originator_v, 
+                  LDAP_MOD_REPLACE);
        } 
       else 
        {
          mail_nickname_v[0] = NULL;
          proxy_address_v[0] = NULL;
          mail_v[0] = NULL;
-         legacy_exchange_dn_v[0] = mail;
+         legacy_exchange_dn_v[0] = NULL;
+         address_book_v[0] = NULL;
+         report_to_originator_v[0] = NULL;
+
          ADD_ATTR("mailNickName", mail_nickname_v, LDAP_MOD_REPLACE);
          ADD_ATTR("mail", mail_v, LDAP_MOD_REPLACE);
          ADD_ATTR("proxyAddresses", proxy_address_v, LDAP_MOD_REPLACE);
          ADD_ATTR("legacyExchangeDN", legacy_exchange_dn_v, LDAP_MOD_REPLACE);
          ADD_ATTR("showInAddressBook", address_book_v, LDAP_MOD_REPLACE);
+         ADD_ATTR("reportToOriginator", report_to_originator_v, 
+                  LDAP_MOD_REPLACE);
        }
     }
   else
@@ -2581,7 +2592,7 @@ int group_create(int ac, char **av, void *ptr)
   char *mail_v[] = {NULL, NULL};
   char *proxy_address_v[] = {NULL, NULL};
   char *mail_nickname_v[] = {NULL, NULL};
-  char *reportToOriginator_v[] = {NULL, NULL};
+  char *report_to_originator_v[] = {NULL, NULL};
   char *address_book_v[] = {NULL, NULL};
   char *legacy_exchange_dn_v[] = {NULL, NULL};
   char groupTypeControlStr[80];
@@ -2592,9 +2603,13 @@ int group_create(int ac, char **av, void *ptr)
   int  n;
   int  rc;
   int  updateGroup;
-  int  MailDisabled;
+  int  MailDisabled = 0;
   char **call_args;
-
+  LK_ENTRY *group_base;
+  int  group_count;
+  char filter[1024];
+  char *attr_array[3];
+  
   call_args = ptr;
 
   if(UseGroupUniversal)
@@ -2610,7 +2625,6 @@ int group_create(int ac, char **av, void *ptr)
     }
 
   updateGroup = (int)call_args[4];
-  MailDisabled = atoi(call_args[6]);
   memset(group_ou, 0, sizeof(group_ou));
   memset(group_membership, 0, sizeof(group_membership));
   security_flag = 0;
@@ -2645,13 +2659,48 @@ int group_create(int ac, char **av, void *ptr)
       ADD_ATTR("sAMAccountName", samAccountName_v, LDAP_MOD_ADD);
       ADD_ATTR("displayName", name_v, LDAP_MOD_ADD);
       ADD_ATTR("name", name_v, LDAP_MOD_ADD);
-
+      
       if (Exchange)
        {
+         if(atoi(av[L_MAILLIST])) 
+           {
+             group_count = 0;
+             group_base = NULL;
+             
+             sprintf(filter, "(&(objectClass=user)(cn=%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 already exists with name %s",
+                         av[L_NAME]);
+                 MailDisabled++;
+               }
+       
+             linklist_free(group_base);
+             group_base = NULL;
+             group_count = 0;
+           }
+         
          if(atoi(av[L_MAILLIST]) && !MailDisabled && email_isvalid(mail)) 
            {
              mail_nickname_v[0] = mail_nickname;
+             report_to_originator_v[0] = "TRUE";
+
              ADD_ATTR("mailNickName", mail_nickname_v, LDAP_MOD_ADD);
+             ADD_ATTR("reportToOriginator", report_to_originator_v, 
+                      LDAP_MOD_ADD);
            }
        }
       else
@@ -2662,15 +2711,15 @@ int group_create(int ac, char **av, void *ptr)
              ADD_ATTR("mail", mail_v, LDAP_MOD_ADD);
            }
        }
-    
+      
       if (strlen(av[L_DESC]) != 0)
-        {
-          desc_v[0] = av[L_DESC];
-          ADD_ATTR("description", desc_v, LDAP_MOD_ADD);
-        }
-
+       {
+         desc_v[0] = av[L_DESC];
+         ADD_ATTR("description", desc_v, LDAP_MOD_ADD);
+       }
+      
       ADD_ATTR("groupType", groupTypeControl_v, LDAP_MOD_ADD);
-
+      
       if (strlen(av[L_ACE_NAME]) != 0)
         {
           sprintf(info, "The Administrator of this list is: %s", 
@@ -2724,10 +2773,45 @@ int group_create(int ac, char **av, void *ptr)
    
       if (Exchange)
        {
+         if(atoi(av[L_MAILLIST])) 
+           {
+             group_count = 0;
+             group_base = NULL;
+             
+             sprintf(filter, "(&(objectClass=user)(cn=%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 already exists with name %s",
+                         av[L_NAME]);
+                 MailDisabled++;
+               }
+             
+             linklist_free(group_base);
+             group_base = NULL;
+             group_count = 0;
+           }
+
          if (atoi(av[L_MAILLIST]) && !MailDisabled && email_isvalid(mail)) 
            {
              mail_nickname_v[0] = mail_nickname;
+             report_to_originator_v[0] = "TRUE";
+
              ADD_ATTR("mailNickName", mail_nickname_v, LDAP_MOD_REPLACE);
+             ADD_ATTR("reportToOriginator", report_to_originator_v, 
+                      LDAP_MOD_REPLACE);
            } 
          else 
            {
@@ -2736,6 +2820,7 @@ int group_create(int ac, char **av, void *ptr)
              proxy_address_v[0] = NULL;
              legacy_exchange_dn_v[0] = NULL;
              address_book_v[0] = NULL;
+             report_to_originator_v[0] = NULL;
 
              ADD_ATTR("mailNickName", mail_nickname_v, LDAP_MOD_REPLACE);
              ADD_ATTR("proxyAddresses", proxy_address_v, LDAP_MOD_REPLACE);
@@ -2743,6 +2828,8 @@ int group_create(int ac, char **av, void *ptr)
              ADD_ATTR("legacyExchangeDN", legacy_exchange_dn_v, 
                       LDAP_MOD_REPLACE);
              ADD_ATTR("showInAddressBook", address_book_v, LDAP_MOD_REPLACE);
+             ADD_ATTR("reportToOriginator", report_to_originator_v, 
+                      LDAP_MOD_REPLACE);
            }
        }
       else
@@ -3045,6 +3132,7 @@ int ProcessGroupSecurity(LDAP *ldap_handle, char *dn_path,
       if(HiddenGroup) 
        {
          hide_address_lists_v[0] = "TRUE";
+         address_book_v[0] = NULL;
          ADD_ATTR("msExchHideFromAddressLists", hide_address_lists_v, 
                   LDAP_MOD_REPLACE);
          ADD_ATTR("showInAddressBook", address_book_v, LDAP_MOD_REPLACE);
@@ -3689,7 +3777,9 @@ int contact_create(LDAP *ld, char *bind_path, char *user, char *group_ou)
 
   if (Exchange)
     {
-      if ((rc != LDAP_SUCCESS) && (rc == LDAP_ALREADY_EXISTS)) 
+
+      if ((rc != LDAP_SUCCESS) && (rc == LDAP_ALREADY_EXISTS) &&
+         !strcmp(group_ou, contact_ou) && email_isvalid(mail))
        {
          n = 0;
          
@@ -7758,7 +7848,8 @@ int find_homeMDB(LDAP *ldap_handle, char *dn_path, char **homeMDB,
       gPtr = group_base;
       
       while(gPtr) {
-       if ((s = strstr(gPtr->dn, "Public")) != (char *) NULL)
+       if (((s = strstr(gPtr->dn, "Public")) != (char *) NULL) ||
+           ((s = strstr(gPtr->dn, "Recovery")) != (char *) NULL))
          {
            gPtr = gPtr->next;
            continue;
This page took 2.011118 seconds and 4 git commands to generate.