+
+int get_machine_ou(LDAP *ldap_handle, char *dn_path, char *member, char *machine_ou)
+{
+ LK_ENTRY *group_base;
+ int group_count;
+ int i;
+ char filter[128];
+ char *attr_array[3];
+ char cn[256];
+ char dn[256];
+ char temp[256];
+ char *pPtr;
+ int rc;
+
+ pPtr = NULL;
+ pPtr = strchr(member, '.');
+ if (pPtr != NULL)
+ (*pPtr) = '\0';
+
+ group_base = NULL;
+ group_count = 0;
+ sprintf(filter, "(sAMAccountName=%s$)", member);
+ attr_array[0] = "cn";
+ attr_array[1] = NULL;
+ sprintf(temp, "%s", dn_path);
+ if ((rc = linklist_build(ldap_handle, temp, filter, attr_array,
+ &group_base, &group_count)) != 0)
+ {
+ com_err(whoami, 0, "LDAP server couldn't process machine %s : %s",
+ member, ldap_err2string(rc));
+ return(1);
+ }
+ if (group_count != 1)
+ {
+ com_err(whoami, 0, "LDAP server couldn't process machine %s : machine not found in AD",
+ member);
+ return(1);
+ }
+ strcpy(dn, group_base->dn);
+ strcpy(cn, group_base->value);
+ for (i = 0; i < (int)strlen(dn); i++)
+ dn[i] = tolower(dn[i]);
+ for (i = 0; i < (int)strlen(cn); i++)
+ cn[i] = tolower(cn[i]);
+ linklist_free(group_base);
+ pPtr = NULL;
+ pPtr = strstr(dn, cn);
+ if (pPtr == NULL)
+ {
+ com_err(whoami, 0, "LDAP server couldn't process machine %s",
+ member);
+ return(1);
+ }
+ pPtr += strlen(cn) + 1;
+ strcpy(machine_ou, pPtr);
+ pPtr = NULL;
+ pPtr = strstr(machine_ou, "dc=");
+ if (pPtr == NULL)
+ {
+ com_err(whoami, 0, "LDAP server couldn't process machine %s",
+ member);
+ return(1);
+ }
+ --pPtr;
+ (*pPtr) = '\0';
+ return(0);
+}