The branch, v3-5-test has been updated via d3339cd... drsuapi: fix build warning of NDR size calculation of drsuapi_DsReplicaObjectIdentifier3Binary. via f5b1366... s3-spoolss: fix fstrings in convert_devicemode() function. from 756b503... Restructure the connect function code to always call down to NEXT-> before initializing. This allows us to do cleanup (by calling DISCONNECT) if initialization fails. Also fix vfs_acl_xattr which was failing to call the NEXT connect function. Jeremy. (cherry picked from commit 8303bc49a45d5bab0cdbd4f2d793088f600f715f)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test - Log ----------------------------------------------------------------- commit d3339cd0c6ffa490513cc4562d2c06c218c7967e Author: Günther Deschner <g...@samba.org> Date: Tue Dec 1 00:24:16 2009 +0100 drsuapi: fix build warning of NDR size calculation of drsuapi_DsReplicaObjectIdentifier3Binary. The generated size actually does not include the size of the binary itself. Guenther commit f5b13667385bbdaa0f75dd46864ad952f7a9bbfe Author: Günther Deschner <g...@samba.org> Date: Mon Nov 30 18:10:59 2009 +0100 s3-spoolss: fix fstrings in convert_devicemode() function. Guenther (cherry picked from commit 753b9c6d566fafee9724a84fbd91316767c1c7a2) ----------------------------------------------------------------------- Summary of changes: librpc/gen_ndr/drsuapi.h | 4 ++-- librpc/gen_ndr/ndr_drsuapi.c | 9 ++------- librpc/gen_ndr/ndr_drsuapi.h | 1 - librpc/idl/drsuapi.idl | 4 ++-- librpc/ndr/ndr_drsuapi.c | 6 ++++++ librpc/ndr/ndr_drsuapi.h | 2 ++ source3/rpc_server/srv_spoolss_nt.c | 7 +++++-- 7 files changed, 19 insertions(+), 14 deletions(-) Changeset truncated at 500 lines: diff --git a/librpc/gen_ndr/drsuapi.h b/librpc/gen_ndr/drsuapi.h index 52b6ee9..116ded4 100644 --- a/librpc/gen_ndr/drsuapi.h +++ b/librpc/gen_ndr/drsuapi.h @@ -517,7 +517,7 @@ struct drsuapi_DsReplicaObjectIdentifier3 { }/* [gensize,public] */; struct drsuapi_DsReplicaObjectIdentifier3Binary { - uint32_t __ndr_size;/* [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r,ndr->iconv_convenience,ndr->flags))] */ + uint32_t __ndr_size;/* [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary_without_Binary(r,ndr->iconv_convenience,ndr->flags))] */ uint32_t __ndr_size_sid;/* [value(ndr_size_dom_sid28(&sid,ndr->flags))] */ struct GUID guid; struct dom_sid28 sid; @@ -525,7 +525,7 @@ struct drsuapi_DsReplicaObjectIdentifier3Binary { const char *dn;/* [charset(UTF16)] */ uint32_t __ndr_size_binary;/* [value(binary.length+4)] */ DATA_BLOB binary;/* [flag(LIBNDR_FLAG_REMAINING)] */ -}/* [gensize,public] */; +}/* [public] */; struct drsuapi_DsReplicaAttribute { enum drsuapi_DsAttributeId attid; diff --git a/librpc/gen_ndr/ndr_drsuapi.c b/librpc/gen_ndr/ndr_drsuapi.c index 700306c..6777acc 100644 --- a/librpc/gen_ndr/ndr_drsuapi.c +++ b/librpc/gen_ndr/ndr_drsuapi.c @@ -2176,7 +2176,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_drsuapi_DsReplicaObjectIdentifier3Binary(str { if (ndr_flags & NDR_SCALARS) { NDR_CHECK(ndr_push_align(ndr, 4)); - NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->iconv_convenience, ndr->flags))); + NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary_without_Binary(r, ndr->iconv_convenience, ndr->flags))); NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_dom_sid28(&r->sid, ndr->flags))); NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->guid)); NDR_CHECK(ndr_push_dom_sid28(ndr, NDR_SCALARS, &r->sid)); @@ -2226,7 +2226,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaObjectIdentifier3Binary(struct ndr_prin { ndr_print_struct(ndr, name, "drsuapi_DsReplicaObjectIdentifier3Binary"); ndr->depth++; - ndr_print_uint32(ndr, "__ndr_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->iconv_convenience, ndr->flags):r->__ndr_size); + ndr_print_uint32(ndr, "__ndr_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary_without_Binary(r, ndr->iconv_convenience, ndr->flags):r->__ndr_size); ndr_print_uint32(ndr, "__ndr_size_sid", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_dom_sid28(&r->sid, ndr->flags):r->__ndr_size_sid); ndr_print_GUID(ndr, "guid", &r->guid); ndr_print_dom_sid28(ndr, "sid", &r->sid); @@ -2237,11 +2237,6 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaObjectIdentifier3Binary(struct ndr_prin ndr->depth--; } -_PUBLIC_ size_t ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary(const struct drsuapi_DsReplicaObjectIdentifier3Binary *r, struct smb_iconv_convenience *ic, int flags) -{ - return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3Binary, ic); -} - _PUBLIC_ enum ndr_err_code ndr_push_drsuapi_DsReplicaAttribute(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsReplicaAttribute *r) { if (ndr_flags & NDR_SCALARS) { diff --git a/librpc/gen_ndr/ndr_drsuapi.h b/librpc/gen_ndr/ndr_drsuapi.h index f157cc5..0baf551 100644 --- a/librpc/gen_ndr/ndr_drsuapi.h +++ b/librpc/gen_ndr/ndr_drsuapi.h @@ -120,7 +120,6 @@ size_t ndr_size_drsuapi_DsReplicaObjectIdentifier3(const struct drsuapi_DsReplic enum ndr_err_code ndr_push_drsuapi_DsReplicaObjectIdentifier3Binary(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsReplicaObjectIdentifier3Binary *r); enum ndr_err_code ndr_pull_drsuapi_DsReplicaObjectIdentifier3Binary(struct ndr_pull *ndr, int ndr_flags, struct drsuapi_DsReplicaObjectIdentifier3Binary *r); void ndr_print_drsuapi_DsReplicaObjectIdentifier3Binary(struct ndr_print *ndr, const char *name, const struct drsuapi_DsReplicaObjectIdentifier3Binary *r); -size_t ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary(const struct drsuapi_DsReplicaObjectIdentifier3Binary *r, struct smb_iconv_convenience *ic, int flags); enum ndr_err_code ndr_push_drsuapi_DsReplicaAttribute(struct ndr_push *ndr, int ndr_flags, const struct drsuapi_DsReplicaAttribute *r); enum ndr_err_code ndr_pull_drsuapi_DsReplicaAttribute(struct ndr_pull *ndr, int ndr_flags, struct drsuapi_DsReplicaAttribute *r); void ndr_print_drsuapi_DsReplicaAttribute(struct ndr_print *ndr, const char *name, const struct drsuapi_DsReplicaAttribute *r); diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl index 9d2d153..4dd3a9e 100644 --- a/librpc/idl/drsuapi.idl +++ b/librpc/idl/drsuapi.idl @@ -552,8 +552,8 @@ interface drsuapi [charset(UTF16)] uint16 dn[__ndr_size_dn+1]; } drsuapi_DsReplicaObjectIdentifier3; - typedef [public,gensize] struct { - [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->iconv_convenience, ndr->flags))] uint32 __ndr_size; + typedef [public] struct { + [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary_without_Binary(r, ndr->iconv_convenience, ndr->flags))] uint32 __ndr_size; [value(ndr_size_dom_sid28(&sid,ndr->flags))] uint32 __ndr_size_sid; GUID guid; dom_sid28 sid; diff --git a/librpc/ndr/ndr_drsuapi.c b/librpc/ndr/ndr_drsuapi.c index 0c790e5..4032545 100644 --- a/librpc/ndr/ndr_drsuapi.c +++ b/librpc/ndr/ndr_drsuapi.c @@ -351,3 +351,9 @@ enum ndr_err_code ndr_push_drsuapi_DsGetNCChangesXPRESSCtr6(struct ndr_push *ndr } return NDR_ERR_SUCCESS; } + +_PUBLIC_ size_t ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary_without_Binary(const struct drsuapi_DsReplicaObjectIdentifier3Binary *r, struct smb_iconv_convenience *ic, int flags) +{ + return ndr_size_struct((const struct drsuapi_DsReplicaObjectIdentifier3 *)r, flags, (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3, ic); +} + diff --git a/librpc/ndr/ndr_drsuapi.h b/librpc/ndr/ndr_drsuapi.h index 12c2c78..fad11fe 100644 --- a/librpc/ndr/ndr_drsuapi.h +++ b/librpc/ndr/ndr_drsuapi.h @@ -32,4 +32,6 @@ enum ndr_err_code ndr_push_drsuapi_DsReplicaOID(struct ndr_push *ndr, int ndr_fl enum ndr_err_code ndr_pull_drsuapi_DsReplicaOID(struct ndr_pull *ndr, int ndr_flags, struct drsuapi_DsReplicaOID *r); size_t ndr_size_drsuapi_DsReplicaOID_oid(const char *oid, int flags); +size_t ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary_without_Binary(const struct drsuapi_DsReplicaObjectIdentifier3Binary *r, struct smb_iconv_convenience *ic, int flags); + #endif /* _LIBRPC_NDR_NDR_DRSUAPI_H */ diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 8d7973d..d742048 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1484,8 +1484,11 @@ bool convert_devicemode(const char *printername, return false; } - rpcstr_push(nt_devmode->devicename, devmode->devicename, 31, 0); - rpcstr_push(nt_devmode->formname, devmode->formname, 31, 0); + fstrcpy(nt_devmode->devicename, devmode->devicename); + fstrcpy(nt_devmode->formname, devmode->formname); + + nt_devmode->devicename[31] = '\0'; + nt_devmode->formname[31] = '\0'; nt_devmode->specversion = devmode->specversion; nt_devmode->driverversion = devmode->driverversion; -- Samba Shared Repository