/* 
   Unix SMB/CIFS implementation.
   ads (active directory) utility library
   Copyright (C) Guenther Deschner 2005-2007
   Copyright (C) Gerald (Jerry) Carter 2006
   
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see .
*/
#include "includes.h"
#ifdef HAVE_LDAP
ADS_STATUS ads_get_attrnames_by_oids(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
				     const char *schema_path,
				     const char **OIDs, size_t num_OIDs, 
				     char ***OIDs_out, char ***names, size_t *count)
{
	ADS_STATUS status;
	LDAPMessage *res = NULL;
	LDAPMessage *msg;
	char *expr = NULL;
	const char *attrs[] = { "lDAPDisplayName", "attributeId", NULL };
	int i = 0, p = 0;
	
	if (!ads || !mem_ctx || !names || !count || !OIDs || !OIDs_out) {
		return ADS_ERROR(LDAP_PARAM_ERROR);
	}
	if (num_OIDs == 0 || OIDs[0] == NULL) {
		return ADS_ERROR_NT(NT_STATUS_NONE_MAPPED);
	}
	if ((expr = talloc_asprintf(mem_ctx, "(|")) == NULL) {
		return ADS_ERROR(LDAP_NO_MEMORY);
	}
	for (i=0; iposix_uidnumber_attr = talloc_strdup(schema, names_out[i]);
			continue;		       
		}
		if (strequal(ADS_ATTR_RFC2307_GIDNUMBER_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU_GIDNUMBER_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU20_GIDNUMBER_OID, oids_out[i])) {
			schema->posix_gidnumber_attr = talloc_strdup(schema, names_out[i]);
			continue;		
		}
		if (strequal(ADS_ATTR_RFC2307_HOMEDIR_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU_HOMEDIR_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU20_HOMEDIR_OID, oids_out[i])) {
			schema->posix_homedir_attr = talloc_strdup(schema, names_out[i]);
			continue;			
		}
		if (strequal(ADS_ATTR_RFC2307_SHELL_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU_SHELL_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU20_SHELL_OID, oids_out[i])) {
			schema->posix_shell_attr = talloc_strdup(schema, names_out[i]);
			continue;			
		}
		if (strequal(ADS_ATTR_RFC2307_GECOS_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU_GECOS_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU20_GECOS_OID, oids_out[i])) {
			schema->posix_gecos_attr = talloc_strdup(schema, names_out[i]);
		}
		if (strequal(ADS_ATTR_RFC2307_UID_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU_UID_OID, oids_out[i]) ||
		    strequal(ADS_ATTR_SFU20_UID_OID, oids_out[i])) {
			schema->posix_uid_attr = talloc_strdup(schema, names_out[i]);
		}
	}
	if (!schema->posix_uidnumber_attr ||
	    !schema->posix_gidnumber_attr ||
	    !schema->posix_homedir_attr ||
	    !schema->posix_shell_attr ||
	    !schema->posix_gecos_attr) {
	    	status = ADS_ERROR(LDAP_NO_MEMORY);
	        TALLOC_FREE( schema );		
	    	goto done;
	}
	*s = schema;
	
	status = ADS_ERROR(LDAP_SUCCESS);
	
done:
	TALLOC_FREE(ctx);
	return status;
}
#endif