svn commit: lorikeet r70 - in trunk/ntacl-lsm: .
tpot at samba.org
tpot at samba.org
Fri Sep 24 12:42:08 GMT 2004
Author: tpot
Date: 2004-09-24 12:42:08 +0000 (Fri, 24 Sep 2004)
New Revision: 70
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=lorikeet&path=/trunk/ntacl-lsm&rev=70&nolog=1
Log:
Parse data appearing on /sys/security/ntacl/nt_token as a lsa_SidArray.
Added:
trunk/ntacl-lsm/ndr_lsa_pull.c
Modified:
trunk/ntacl-lsm/Makefile
trunk/ntacl-lsm/includes.h
trunk/ntacl-lsm/main.c
trunk/ntacl-lsm/pidl_glue.c
Changeset:
Modified: trunk/ntacl-lsm/Makefile
===================================================================
--- trunk/ntacl-lsm/Makefile 2004-09-24 07:57:22 UTC (rev 69)
+++ trunk/ntacl-lsm/Makefile 2004-09-24 12:42:08 UTC (rev 70)
@@ -1,7 +1,7 @@
default:
make -C /usr/src/kernel-source-2.6.7 SUBDIRS=$(PWD) modules
-pidl-objs := pidl_glue.o ndr.o ndr_misc_pull.o talloc.o
+pidl-objs := pidl_glue.o ndr.o ndr_misc_pull.o ndr_lsa_pull.o talloc.o
obj-m := ntacl.o
ntacl-objs := main.o $(pidl-objs)
Modified: trunk/ntacl-lsm/includes.h
===================================================================
--- trunk/ntacl-lsm/includes.h 2004-09-24 07:57:22 UTC (rev 69)
+++ trunk/ntacl-lsm/includes.h 2004-09-24 12:42:08 UTC (rev 70)
@@ -214,8 +214,21 @@
size_t length;
} DATA_BLOB;
+#define dom_sid2 dom_sid
+
#include "ndr_misc.h"
+struct lsa_SidPtr {
+ struct dom_sid2 *sid;
+};
+
+struct lsa_SidArray {
+ uint32 num_sids;
+ struct lsa_SidPtr *sids;
+};
+
NTSTATUS ndr_pull_security_descriptor(struct ndr_pull *ndr, int ndr_flags, struct security_descriptor *r);
+NTSTATUS ndr_pull_lsa_SidArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_SidArray *r);
NTSTATUS ndr_pull_dom_sid(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *r);
+NTSTATUS ndr_pull_dom_sid2(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid);
Modified: trunk/ntacl-lsm/main.c
===================================================================
--- trunk/ntacl-lsm/main.c 2004-09-24 07:57:22 UTC (rev 69)
+++ trunk/ntacl-lsm/main.c 2004-09-24 12:42:08 UTC (rev 70)
@@ -143,20 +143,29 @@
return sprintf(buffer, "S-1-1-0\n");
}
+static struct lsa_SidArray nttoken;
+spinlock_t nttoken_lock = SPIN_LOCK_UNLOCKED;
+
ssize_t nttoken_store(struct subsystem *subsys, const char *buffer,
size_t size)
{
struct ndr_pull *ndr = ndr_pull_init((char *)buffer, size);
NTSTATUS status;
- struct dom_sid sid;
- status = ndr_pull_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, &sid);
+ /* Parse array of SIDs */
- dbg("returned status %d\n", status);
+ spin_lock(nttoken_lock);
+ status = ndr_pull_lsa_SidArray(
+ ndr, NDR_SCALARS|NDR_BUFFERS, &nttoken);
+
+ spin_unlock(nttoken_lock);
+
if (status != 0)
return -EINVAL;
+ dbg("%d sids stored\n", nttoken.num_sids);
+
return size;
}
Added: trunk/ntacl-lsm/ndr_lsa_pull.c
===================================================================
--- trunk/ntacl-lsm/ndr_lsa_pull.c 2004-09-24 07:57:22 UTC (rev 69)
+++ trunk/ntacl-lsm/ndr_lsa_pull.c 2004-09-24 12:42:08 UTC (rev 70)
@@ -0,0 +1,58 @@
+/* parser auto-generated by pidl */
+
+#include "includes.h"
+
+static NTSTATUS ndr_pull_lsa_SidPtr(struct ndr_pull *ndr, int ndr_flags, struct lsa_SidPtr *r)
+{
+ uint32_t _ptr_sid;
+ if (!(ndr_flags & NDR_SCALARS)) goto buffers;
+ NDR_CHECK(ndr_pull_struct_start(ndr));
+ NDR_CHECK(ndr_pull_align(ndr, 4));
+ NDR_CHECK(ndr_pull_ptr(ndr, &_ptr_sid));
+ if (_ptr_sid) {
+ NDR_ALLOC(ndr, r->sid);
+ } else {
+ r->sid = NULL;
+ }
+buffers:
+ if (!(ndr_flags & NDR_BUFFERS)) goto done;
+ if (r->sid) {
+ NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
+ }
+ ndr_pull_struct_end(ndr);
+done:
+ return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_lsa_SidArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_SidArray *r)
+{
+ uint32_t _ptr_sids;
+ if (!(ndr_flags & NDR_SCALARS)) goto buffers;
+ NDR_CHECK(ndr_pull_struct_start(ndr));
+ NDR_CHECK(ndr_pull_align(ndr, 4));
+ NDR_CHECK(ndr_pull_uint32(ndr, &r->num_sids));
+ NDR_CHECK(ndr_pull_ptr(ndr, &_ptr_sids));
+ if (_ptr_sids) {
+ NDR_ALLOC(ndr, r->sids);
+ } else {
+ r->sids = NULL;
+ }
+buffers:
+ if (!(ndr_flags & NDR_BUFFERS)) goto done;
+ if (r->sids) {
+ {
+ uint32_t _array_size;
+ NDR_CHECK(ndr_pull_uint32(ndr, &_array_size));
+ if (r->num_sids != _array_size) {
+ return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should be %u", _array_size, r->num_sids);
+ }
+ }
+ NDR_ALLOC_N(ndr, r->sids, MAX(1, r->num_sids));
+ {
+ NDR_CHECK(ndr_pull_array(ndr, NDR_SCALARS|NDR_BUFFERS, (void **)r->sids, sizeof(r->sids[0]), r->num_sids, (ndr_pull_flags_fn_t)ndr_pull_lsa_SidPtr));
+ }
+ }
+ ndr_pull_struct_end(ndr);
+done:
+ return NT_STATUS_OK;
+}
Modified: trunk/ntacl-lsm/pidl_glue.c
===================================================================
--- trunk/ntacl-lsm/pidl_glue.c 2004-09-24 07:57:22 UTC (rev 69)
+++ trunk/ntacl-lsm/pidl_glue.c 2004-09-24 12:42:08 UTC (rev 70)
@@ -91,6 +91,19 @@
return NT_STATUS_OK;
}
+/*
+ parse a dom_sid2 - this is a dom_sid but with an extra copy of the num_auths field
+*/
+NTSTATUS ndr_pull_dom_sid2(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid)
+{
+ uint32_t num_auths;
+ if (!(ndr_flags & NDR_SCALARS)) {
+ return NT_STATUS_OK;
+ }
+ NDR_CHECK(ndr_pull_uint32(ndr, &num_auths));
+ return ndr_pull_dom_sid(ndr, ndr_flags, sid);
+}
+
void smb_panic(char *msg)
{
printk(KERN_DEBUG "panic: %s", msg);
More information about the samba-cvs
mailing list