svn commit: samba r6134 - in branches/SAMBA_4_0/source: include
librpc/ndr
metze at samba.org
metze at samba.org
Wed Mar 30 15:04:20 GMT 2005
Author: metze
Date: 2005-03-30 15:04:19 +0000 (Wed, 30 Mar 2005)
New Revision: 6134
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=6134
Log:
add a new type dom_sid28 which is a 28 byte fixed buffer with a dom_sid in it
metze
Modified:
branches/SAMBA_4_0/source/include/smb_interfaces.h
branches/SAMBA_4_0/source/librpc/ndr/ndr_sec.c
Changeset:
Modified: branches/SAMBA_4_0/source/include/smb_interfaces.h
===================================================================
--- branches/SAMBA_4_0/source/include/smb_interfaces.h 2005-03-30 13:02:23 UTC (rev 6133)
+++ branches/SAMBA_4_0/source/include/smb_interfaces.h 2005-03-30 15:04:19 UTC (rev 6134)
@@ -55,7 +55,10 @@
*/
#define dom_sid2 dom_sid
+/* same struct as dom_sid but inside a 28 bytes fixed buffer in NDR */
+#define dom_sid28 dom_sid
+
/*
this header defines the structures and unions used between the SMB
parser and the backends.
Modified: branches/SAMBA_4_0/source/librpc/ndr/ndr_sec.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/ndr/ndr_sec.c 2005-03-30 13:02:23 UTC (rev 6133)
+++ branches/SAMBA_4_0/source/librpc/ndr/ndr_sec.c 2005-03-30 15:04:19 UTC (rev 6134)
@@ -56,8 +56,67 @@
return ndr_push_dom_sid(ndr, ndr_flags, sid);
}
+/*
+ parse a dom_sid28 - this is a dom_sid in a fixed 28 byte buffer, so we need to ensure there are only upto 5 sub_auth
+*/
+NTSTATUS ndr_pull_dom_sid28(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid)
+{
+ NTSTATUS status;
+ struct ndr_pull *subndr;
+ if (!(ndr_flags & NDR_SCALARS)) {
+ return NT_STATUS_OK;
+ }
+
+ subndr = talloc_zero(ndr, struct ndr_pull);
+ NT_STATUS_HAVE_NO_MEMORY(subndr);
+
+ subndr->data = ndr->data + ndr->offset;
+ subndr->data_size = 28;
+ subndr->offset = 0;
+
+ NDR_CHECK(ndr_pull_advance(ndr, 28));
+
+ status = ndr_pull_dom_sid(subndr, ndr_flags, sid);
+ if (!NT_STATUS_IS_OK(status)) {
+ /* handle a w2k bug which send random data in the buffer */
+ ZERO_STRUCTP(sid);
+ }
+
+ return NT_STATUS_OK;
+}
+
/*
+ push a dom_sid28 - this is a dom_sid in a 28 byte fixed buffer
+*/
+NTSTATUS ndr_push_dom_sid28(struct ndr_push *ndr, int ndr_flags, struct dom_sid *sid)
+{
+ uint32_t old_offset;
+ uint32_t padding;
+
+ if (!(ndr_flags & NDR_SCALARS)) {
+ return NT_STATUS_OK;
+ }
+
+ if (sid->num_auths > 5) {
+ return ndr_push_error(ndr, NDR_ERR_RANGE,
+ "dom_sid28 allows only upto 5 sub auth [%u]",
+ sid->num_auths);
+ }
+
+ old_offset = ndr->offset;
+ NDR_CHECK(ndr_push_dom_sid(ndr, ndr_flags, sid));
+
+ padding = 28 - (ndr->offset - old_offset);
+
+ if (padding > 0) {
+ NDR_CHECK(ndr_push_zero(ndr, padding));
+ }
+
+ return NT_STATUS_OK;
+}
+
+/*
print a dom_sid
*/
void ndr_print_dom_sid(struct ndr_print *ndr, const char *name, struct dom_sid *sid)
@@ -65,11 +124,16 @@
ndr->print(ndr, "%-25s: %s", name, dom_sid_string(ndr, sid));
}
-void ndr_print_dom_sid2(struct ndr_print *ndr, const char *name, struct dom_sid2 *sid)
+void ndr_print_dom_sid2(struct ndr_print *ndr, const char *name, struct dom_sid *sid)
{
ndr_print_dom_sid(ndr, name, sid);
}
+void ndr_print_dom_sid28(struct ndr_print *ndr, const char *name, struct dom_sid *sid)
+{
+ ndr_print_dom_sid(ndr, name, sid);
+}
+
/*
return the wire size of a dom_sid
*/
More information about the samba-cvs
mailing list