The branch, master has been updated via 7e936e3... s4-ndr_basic.c: Fix ndr_*_hyper() when [bigendian] data is processed via 26efea1... s4-drsuapi: Implement custom printing for drsuapi protocol for from f35811b... s3: Use sconn->client_id in session_claim
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 7e936e3122aed539b348bc5deea1732b65d94950 Author: Kamen Mazdrashki <kame...@samba.org> Date: Fri Aug 20 21:58:22 2010 +0300 s4-ndr_basic.c: Fix ndr_*_hyper() when [bigendian] data is processed commit 26efea195ae3d5a26b1152923f114cd841e89b5f Author: Kamen Mazdrashki <kame...@samba.org> Date: Thu Aug 19 15:52:49 2010 +0300 s4-drsuapi: Implement custom printing for drsuapi protocol for drsuapi_DsReplicaAttribute and drsuapi_DsAttributeValueCtr objects This makes tracing what data has been transferred much easier ----------------------------------------------------------------------- Summary of changes: librpc/idl/drsuapi.idl | 2 +- librpc/ndr/ndr_basic.c | 6 +++ librpc/ndr/ndr_drsuapi.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 1 deletions(-) Changeset truncated at 500 lines: diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl index 8540057..9010efc 100644 --- a/librpc/idl/drsuapi.idl +++ b/librpc/idl/drsuapi.idl @@ -562,7 +562,7 @@ interface drsuapi [flag(NDR_REMAINING)] DATA_BLOB binary; } drsuapi_DsReplicaObjectIdentifier3Binary; - typedef [public] struct { + typedef [public,noprint] struct { drsuapi_DsAttributeId attid; drsuapi_DsAttributeValueCtr value_ctr; } drsuapi_DsReplicaAttribute; diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c index 0becf38..58d4e46 100644 --- a/librpc/ndr/ndr_basic.c +++ b/librpc/ndr/ndr_basic.c @@ -252,6 +252,9 @@ _PUBLIC_ enum ndr_err_code ndr_pull_dlong(struct ndr_pull *ndr, int ndr_flags, i _PUBLIC_ enum ndr_err_code ndr_pull_hyper(struct ndr_pull *ndr, int ndr_flags, uint64_t *v) { NDR_PULL_ALIGN(ndr, 8); + if (NDR_BE(ndr)) { + return ndr_pull_udlongr(ndr, ndr_flags, v); + } return ndr_pull_udlong(ndr, ndr_flags, v); } @@ -549,6 +552,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_dlong(struct ndr_push *ndr, int ndr_flags, i _PUBLIC_ enum ndr_err_code ndr_push_hyper(struct ndr_push *ndr, int ndr_flags, uint64_t v) { NDR_PUSH_ALIGN(ndr, 8); + if (NDR_BE(ndr)) { + return ndr_push_udlongr(ndr, NDR_SCALARS, v); + } return ndr_push_udlong(ndr, NDR_SCALARS, v); } diff --git a/librpc/ndr/ndr_drsuapi.c b/librpc/ndr/ndr_drsuapi.c index 0cc3e52..9cde737 100644 --- a/librpc/ndr/ndr_drsuapi.c +++ b/librpc/ndr/ndr_drsuapi.c @@ -86,6 +86,113 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaOID(struct ndr_print *ndr, const char * ndr->depth--; } +static void _print_drsuapi_DsAttributeValue_attid(struct ndr_print *ndr, const char *name, + const struct drsuapi_DsAttributeValue *r) +{ + uint32_t v; + + ndr_print_struct(ndr, name, "drsuapi_DsAttributeValue"); + ndr->depth++; + v = IVAL(r->blob->data, 0); + ndr_print_uint32(ndr, "attid", v); + ndr->depth--; +} + +static void _print_drsuapi_DsAttributeValue_str(struct ndr_print *ndr, const char *name, + const struct drsuapi_DsAttributeValue *r) +{ + char *str; + + ndr_print_struct(ndr, name, "drsuapi_DsAttributeValue"); + ndr->depth++; + if (!convert_string_talloc(ndr, + CH_UTF16, CH_UNIX, + r->blob->data, + r->blob->length, + (void **)&str, NULL, false)) { + ndr_print_string(ndr, "string", "INVALID CONVERSION"); + } else { + ndr_print_string(ndr, "string", str); + talloc_free(str); + } + ndr->depth--; +} + +static void _print_drsuapi_DsAttributeValueCtr(struct ndr_print *ndr, + const char *name, + const struct drsuapi_DsAttributeValueCtr *r, + void (*print_val_fn)(struct ndr_print *ndr, const char *name, const struct drsuapi_DsAttributeValue *r)) +{ + uint32_t cntr_values_1; + ndr_print_struct(ndr, name, "drsuapi_DsAttributeValueCtr"); + ndr->depth++; + ndr_print_uint32(ndr, "num_values", r->num_values); + ndr_print_ptr(ndr, "values", r->values); + ndr->depth++; + if (r->values) { + ndr->print(ndr, "%s: ARRAY(%d)", "values", (int)r->num_values); + ndr->depth++; + for (cntr_values_1=0;cntr_values_1<r->num_values;cntr_values_1++) { + char *idx_1=NULL; + if (asprintf(&idx_1, "[%d]", cntr_values_1) != -1) { + //ndr_print_drsuapi_DsAttributeValue(ndr, "values", &r->values[cntr_values_1]); + print_val_fn(ndr, "values", &r->values[cntr_values_1]); + free(idx_1); + } + } + ndr->depth--; + } + ndr->depth--; + ndr->depth--; +} + +_PUBLIC_ void ndr_print_drsuapi_DsReplicaAttribute(struct ndr_print *ndr, + const char *name, + const struct drsuapi_DsReplicaAttribute *r) +{ + ndr_print_struct(ndr, name, "drsuapi_DsReplicaAttribute"); + ndr->depth++; + ndr_print_drsuapi_DsAttributeId(ndr, "attid", r->attid); + switch (r->attid) { + case DRSUAPI_ATTRIBUTE_objectClass: + case DRSUAPI_ATTRIBUTE_possSuperiors: + case DRSUAPI_ATTRIBUTE_subClassOf: + case DRSUAPI_ATTRIBUTE_governsID: + case DRSUAPI_ATTRIBUTE_mustContain: + case DRSUAPI_ATTRIBUTE_mayContain: + case DRSUAPI_ATTRIBUTE_rDNAttId: + case DRSUAPI_ATTRIBUTE_attributeID: + case DRSUAPI_ATTRIBUTE_attributeSyntax: + case DRSUAPI_ATTRIBUTE_auxiliaryClass: + case DRSUAPI_ATTRIBUTE_systemPossSuperiors: + case DRSUAPI_ATTRIBUTE_systemMayContain: + case DRSUAPI_ATTRIBUTE_systemMustContain: + case DRSUAPI_ATTRIBUTE_systemAuxiliaryClass: + case DRSUAPI_ATTRIBUTE_transportAddressAttribute: + /* ATTIDs for classSchema and attributeSchema */ + _print_drsuapi_DsAttributeValueCtr(ndr, "value_ctr", &r->value_ctr, + _print_drsuapi_DsAttributeValue_attid); + break; + case DRSUAPI_ATTRIBUTE_cn: + case DRSUAPI_ATTRIBUTE_ou: + case DRSUAPI_ATTRIBUTE_description: + case DRSUAPI_ATTRIBUTE_displayName: + case DRSUAPI_ATTRIBUTE_dMDLocation: + case DRSUAPI_ATTRIBUTE_adminDisplayName: + case DRSUAPI_ATTRIBUTE_adminDescription: + case DRSUAPI_ATTRIBUTE_lDAPDisplayName: + case DRSUAPI_ATTRIBUTE_name: + _print_drsuapi_DsAttributeValueCtr(ndr, "value_ctr", &r->value_ctr, + _print_drsuapi_DsAttributeValue_str); + break; + default: + _print_drsuapi_DsAttributeValueCtr(ndr, "value_ctr", &r->value_ctr, + ndr_print_drsuapi_DsAttributeValue); + break; + } + ndr->depth--; +} + enum ndr_err_code ndr_push_drsuapi_DsGetNCChangesMSZIPCtr1(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsGetNCChangesMSZIPCtr1 *r) { if (ndr_flags & NDR_SCALARS) { -- Samba Shared Repository