From dc002a394b0e41254c061176f480b56a0ac4097d Mon Sep 17 00:00:00 2001 From: Matthieu Patou Date: Thu, 27 Sep 2012 15:22:00 -0700 Subject: [PATCH] drsuapi: Validate the input parameters for the drsuapi_UpdateRefs function --- source4/rpc_server/drsuapi/updaterefs.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source4/rpc_server/drsuapi/updaterefs.c b/source4/rpc_server/drsuapi/updaterefs.c index e82ae48f3c4..3cea1c47e35 100644 --- a/source4/rpc_server/drsuapi/updaterefs.c +++ b/source4/rpc_server/drsuapi/updaterefs.c @@ -137,6 +137,22 @@ WERROR drsuapi_UpdateRefs(struct drsuapi_bind_state *b_state, TALLOC_CTX *mem_ct req->options, drs_ObjectIdentifier_to_string(mem_ctx, req->naming_context))); + /* + * 4.1.26.2 Server Behavior of the IDL_DRSUpdateRefs Method + * Implements the input validation checks + */ + if (GUID_all_zero(&req->dest_dsa_guid)) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + if (req->dest_dsa_dns_name == NULL) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + if (!(req->options & (DRSUAPI_DRS_DEL_REF|DRSUAPI_DRS_ADD_REF))) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + dn = drs_ObjectIdentifier_to_dn(mem_ctx, sam_ctx, req->naming_context); W_ERROR_HAVE_NO_MEMORY(dn); ret = dsdb_find_nc_root(sam_ctx, dn, dn, &nc_root);