svn commit: samba r3789 - in branches/SAMBA_4_0/source/rpc_server/drsuapi: .

metze at samba.org metze at samba.org
Tue Nov 16 14:43:29 GMT 2004


Author: metze
Date: 2004-11-16 14:43:28 +0000 (Tue, 16 Nov 2004)
New Revision: 3789

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=3789

Log:
- fix error handling
- formating changes

metze

Modified:
   branches/SAMBA_4_0/source/rpc_server/drsuapi/dcesrv_drsuapi.c
   branches/SAMBA_4_0/source/rpc_server/drsuapi/drsuapi_cracknames.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/drsuapi/dcesrv_drsuapi.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/drsuapi/dcesrv_drsuapi.c	2004-11-16 13:20:32 UTC (rev 3788)
+++ branches/SAMBA_4_0/source/rpc_server/drsuapi/dcesrv_drsuapi.c	2004-11-16 14:43:28 UTC (rev 3789)
@@ -49,7 +49,6 @@
 	b_state = talloc_p(dce_call->conn, struct drsuapi_bind_state);
 	WERR_TALLOC_CHECK(b_state);
 
-	/* TODO: fill b_state here */
 	b_state->sam_ctx = samdb_connect(b_state);
 	if (!b_state->sam_ctx) {
 		talloc_free(b_state);

Modified: branches/SAMBA_4_0/source/rpc_server/drsuapi/drsuapi_cracknames.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/drsuapi/drsuapi_cracknames.c	2004-11-16 13:20:32 UTC (rev 3788)
+++ branches/SAMBA_4_0/source/rpc_server/drsuapi/drsuapi_cracknames.c	2004-11-16 14:43:28 UTC (rev 3789)
@@ -29,23 +29,31 @@
 #include "lib/ldb/include/ldb.h"
 
 static WERROR DsCrackNameOneName(struct drsuapi_bind_state *b_state, TALLOC_CTX *mem_ctx,
-			uint32 format_offered, uint32 format_desired, const char *name,
-			struct drsuapi_DsNameInfo1 *info1)
+			uint32 format_flags, uint32 format_offered, uint32 format_desired,
+			const char *name, struct drsuapi_DsNameInfo1 *info1)
 {
 	int ret;
-	const char *domain_filter;
+	const char *domain_filter = NULL;
 	const char * const *domain_attrs;
-	struct ldb_message **domain_res;
-	const char *result_basedn;
+	struct ldb_message **domain_res = NULL;
+	const char *result_basedn = NULL;
 	const char *result_filter = NULL;
 	const char * const *result_attrs;
-	struct ldb_message **result_res;
+	struct ldb_message **result_res = NULL;
 
 	info1->status = DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
 	info1->dns_domain_name = NULL;
 	info1->result_name = NULL;
 
-	/* TODO: fill crack the correct names in all cases! */
+	if (!name) {
+		return WERR_INVALID_PARAM;
+	}
+
+	/* TODO: - fill the correct names in all cases!
+	 *       - handle format_flags
+	 */
+
+	/* here we need to set the domain_filter and/or the result_filter */
 	switch (format_offered) {
 		case DRSUAPI_DS_NAME_FORMAT_CANONICAL: {
 			char *str;
@@ -104,6 +112,7 @@
 		}
 	}
 
+	/* here we need to set the attrs lists for domain and result lookups */
 	switch (format_desired) {
 		case DRSUAPI_DS_NAME_FORMAT_FQDN_1779: {
 			const char * const _domain_attrs[] = { "dn", "dnsDomain", NULL};
@@ -133,15 +142,16 @@
 			return WERR_OK;
 	}
 
+	/* if we have a domain_filter look it up and set the result_basedn and the dns_domain_name */
 	ret = samdb_search(b_state->sam_ctx, mem_ctx, NULL, &domain_res, domain_attrs,
 				"%s", domain_filter);
 	switch (ret) {
-		case 1: 
+		case 1:
 			break;
-		case 0: 
+		case 0:
 			info1->status = DRSUAPI_DS_NAME_STATUS_NOT_FOUND;
 			return WERR_OK;
-		case -1: 
+		case -1:
 			info1->status = DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
 			return WERR_OK;
 		default:
@@ -155,7 +165,7 @@
 
 	if (result_filter) {
 		result_basedn = samdb_result_string(domain_res[0], "dn", NULL);
-		
+
 		ret = samdb_search(b_state->sam_ctx, mem_ctx, result_basedn, &result_res,
 					result_attrs, "%s", result_filter);
 		switch (ret) {
@@ -174,31 +184,42 @@
 		result_res = domain_res;
 	}
 
+	/* here we can use result_res[0] and domain_res[0] */
 	switch (format_desired) {
 		case DRSUAPI_DS_NAME_FORMAT_FQDN_1779: {
 			info1->result_name	= samdb_result_string(result_res[0], "dn", NULL);
 			WERR_TALLOC_CHECK(info1->result_name);
+
 			info1->status		= DRSUAPI_DS_NAME_STATUS_OK;
 			return WERR_OK;
 		}
 		case DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT: {
-			const char *_dom = samdb_result_string(domain_res[0], "name", NULL);
+			const char *_dom;
 			const char *_acc = "";
+
+			_dom = samdb_result_string(domain_res[0], "name", NULL);
 			WERR_TALLOC_CHECK(_dom);
+
 			if (result_filter) {
 				_acc = samdb_result_string(result_res[0], "sAMAccountName", NULL);
 				WERR_TALLOC_CHECK(_acc);
 			}
+
 			info1->result_name	= talloc_asprintf(mem_ctx, "%s\\%s", _dom, _acc);
 			WERR_TALLOC_CHECK(info1->result_name);
+
 			info1->status		= DRSUAPI_DS_NAME_STATUS_OK;
 			return WERR_OK;
 		}
 		case DRSUAPI_DS_NAME_FORMAT_GUID: {
-			const char *result = samdb_result_string(result_res[0], "objectGUID", NULL);
+			const char *result;
+
+			result = samdb_result_string(result_res[0], "objectGUID", NULL);
 			WERR_TALLOC_CHECK(result);
+			
 			info1->result_name	= talloc_asprintf(mem_ctx, "{%s}", result);
 			WERR_TALLOC_CHECK(info1->result_name);
+
 			info1->status		= DRSUAPI_DS_NAME_STATUS_OK;
 			return WERR_OK;
 		}
@@ -227,22 +248,21 @@
 
 	switch (r->in.level) {
 		case 1: {
+			struct drsuapi_DsNameCtr1 *ctr1;
 			struct drsuapi_DsNameInfo1 *names;
 			int count;
 			int i;
 
-			r->out.ctr.ctr1 = talloc_p(mem_ctx, struct drsuapi_DsNameCtr1);
-			WERR_TALLOC_CHECK(r->out.ctr.ctr1);
+			ctr1 = talloc_p(mem_ctx, struct drsuapi_DsNameCtr1);
+			WERR_TALLOC_CHECK(ctr1);
 
-			r->out.ctr.ctr1->count = 0;
-			r->out.ctr.ctr1->array = NULL;
-
 			count = r->in.req.req1.count;
 			names = talloc_array_p(mem_ctx, struct drsuapi_DsNameInfo1, count);
 			WERR_TALLOC_CHECK(names);
 
 			for (i=0; i < count; i++) {
 				status = DsCrackNameOneName(b_state, mem_ctx,
+							    r->in.req.req1.format_flags,
 							    r->in.req.req1.format_offered,
 							    r->in.req.req1.format_desired,
 							    r->in.req.req1.names[i].str,
@@ -252,8 +272,9 @@
 				}
 			}
 
-			r->out.ctr.ctr1->count = count;
-			r->out.ctr.ctr1->array = names;
+			ctr1->count = count;
+			ctr1->array = names;
+			r->out.ctr.ctr1 = ctr1;
 
 			return WERR_OK;
 		}



More information about the samba-cvs mailing list