[SCM] Samba Shared Repository - branch v3-3-test updated -
release-3-2-0pre2-3455-g0298f7f
Günther Deschner
gd at samba.org
Wed Jul 30 14:56:10 GMT 2008
The branch, v3-3-test has been updated
via 0298f7fe9e273a94d14b5b6ce3dbd5e6deee9ecb (commit)
via d31f822b79ed5344ec3c6795d66ceefd024b7d30 (commit)
via 0b4e2687ae8fb48faacceb4078d61f9fd2acea9d (commit)
via 93ff6548977cb3e1c84fcb659475664de54e31b5 (commit)
via 81be6207e51924a7632dfc0ec16ca3e570d417aa (commit)
from ec2a56b5e726400f171d641587cbd0a4b99beec0 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test
- Log -----------------------------------------------------------------
commit 0298f7fe9e273a94d14b5b6ce3dbd5e6deee9ecb
Author: Günther Deschner <gd at samba.org>
Date: Sat Jul 19 00:10:58 2008 +0200
netapi: add NetGroupGetUsers example code.
Guenther
commit d31f822b79ed5344ec3c6795d66ceefd024b7d30
Author: Günther Deschner <gd at samba.org>
Date: Fri Jul 18 23:43:33 2008 +0200
netapi: add NetGroupGetUsers to public header.
Guenther
commit 0b4e2687ae8fb48faacceb4078d61f9fd2acea9d
Author: Günther Deschner <gd at samba.org>
Date: Fri Jul 18 23:40:33 2008 +0200
netapi: add NetGroupGetUsers skeleton.
GUenther
commit 93ff6548977cb3e1c84fcb659475664de54e31b5
Author: Günther Deschner <gd at samba.org>
Date: Fri Jul 18 23:38:17 2008 +0200
re-run make idl.
Guenther
commit 81be6207e51924a7632dfc0ec16ca3e570d417aa
Author: Günther Deschner <gd at samba.org>
Date: Fri Jul 18 23:37:31 2008 +0200
netapi: add NetGroupGetUsers to IDL.
Guenther
-----------------------------------------------------------------------
Summary of changes:
source/lib/netapi/examples/Makefile.in | 6 +
.../localgroup_enum.c => group/group_getusers.c} | 48 +++++----
source/lib/netapi/group.c | 18 +++
source/lib/netapi/libnetapi.c | 55 ++++++++++
source/lib/netapi/libnetapi.h | 12 ++
source/lib/netapi/netapi.h | 38 +++++++
source/librpc/gen_ndr/libnetapi.h | 29 +++++
source/librpc/gen_ndr/ndr_libnetapi.c | 113 ++++++++++++++++++++
source/librpc/gen_ndr/ndr_libnetapi.h | 25 +++--
source/librpc/idl/libnetapi.idl | 24 ++++
10 files changed, 340 insertions(+), 28 deletions(-)
copy source/lib/netapi/examples/{localgroup/localgroup_enum.c => group/group_getusers.c} (70%)
Changeset truncated at 500 lines:
diff --git a/source/lib/netapi/examples/Makefile.in b/source/lib/netapi/examples/Makefile.in
index ca387ee..e7b61a1 100644
--- a/source/lib/netapi/examples/Makefile.in
+++ b/source/lib/netapi/examples/Makefile.in
@@ -36,6 +36,7 @@ PROGS = bin/getdc at EXEEXT@ \
bin/group_getinfo at EXEEXT@ \
bin/group_adduser at EXEEXT@ \
bin/group_deluser at EXEEXT@ \
+ bin/group_getusers at EXEEXT@ \
bin/localgroup_add at EXEEXT@ \
bin/localgroup_del at EXEEXT@ \
bin/localgroup_getinfo at EXEEXT@ \
@@ -89,6 +90,7 @@ GROUPSETINFO_OBJ = group/group_setinfo.o $(CMDLINE_OBJ)
GROUPGETINFO_OBJ = group/group_getinfo.o $(CMDLINE_OBJ)
GROUPADDUSER_OBJ = group/group_adduser.o $(CMDLINE_OBJ)
GROUPDELUSER_OBJ = group/group_deluser.o $(CMDLINE_OBJ)
+GROUPGETUSERS_OBJ = group/group_getusers.o $(CMDLINE_OBJ)
LOCALGROUPADD_OBJ = localgroup/localgroup_add.o $(CMDLINE_OBJ)
LOCALGROUPDEL_OBJ = localgroup/localgroup_del.o $(CMDLINE_OBJ)
LOCALGROUPGETINFO_OBJ = localgroup/localgroup_getinfo.o $(CMDLINE_OBJ)
@@ -172,6 +174,10 @@ bin/group_deluser at EXEEXT@: $(BINARY_PREREQS) $(GROUPDELUSER_OBJ)
@echo Linking $@
@$(CC) $(FLAGS) -o $@ $(GROUPDELUSER_OBJ) $(LDFLAGS) $(DYNEXP) $(CMDLINE_LIBS)
+bin/group_getusers at EXEEXT@: $(BINARY_PREREQS) $(GROUPGETUSERS_OBJ)
+ @echo Linking $@
+ @$(CC) $(FLAGS) -o $@ $(GROUPGETUSERS_OBJ) $(LDFLAGS) $(DYNEXP) $(CMDLINE_LIBS)
+
bin/localgroup_add at EXEEXT@: $(BINARY_PREREQS) $(LOCALGROUPADD_OBJ)
@echo Linking $@
@$(CC) $(FLAGS) -o $@ $(LOCALGROUPADD_OBJ) $(LDFLAGS) $(DYNEXP) $(CMDLINE_LIBS)
diff --git a/source/lib/netapi/examples/localgroup/localgroup_enum.c b/source/lib/netapi/examples/group/group_getusers.c
similarity index 70%
copy from source/lib/netapi/examples/localgroup/localgroup_enum.c
copy to source/lib/netapi/examples/group/group_getusers.c
index 6fe0cf4..55d0717 100644
--- a/source/lib/netapi/examples/localgroup/localgroup_enum.c
+++ b/source/lib/netapi/examples/group/group_getusers.c
@@ -1,6 +1,6 @@
/*
* Unix SMB/CIFS implementation.
- * NetLocalGroupEnum query
+ * NetGroupGetUsers query
* Copyright (C) Guenther Deschner 2008
*
* This program is free software; you can redistribute it and/or modify
@@ -32,6 +32,7 @@ int main(int argc, const char **argv)
NET_API_STATUS status;
struct libnetapi_ctx *ctx = NULL;
const char *hostname = NULL;
+ const char *groupname = NULL;
uint32_t level = 0;
uint8_t *buffer = NULL;
uint32_t entries_read = 0;
@@ -39,8 +40,8 @@ int main(int argc, const char **argv)
uint32_t resume_handle = 0;
int i;
- struct LOCALGROUP_INFO_0 *info0 = NULL;
- struct LOCALGROUP_INFO_1 *info1 = NULL;
+ struct GROUP_USERS_INFO_0 *info0 = NULL;
+ struct GROUP_USERS_INFO_1 *info1 = NULL;
poptContext pc;
int opt;
@@ -56,9 +57,9 @@ int main(int argc, const char **argv)
return status;
}
- pc = poptGetContext("localgroup_enum", argc, argv, long_options, 0);
+ pc = poptGetContext("group_getusers", argc, argv, long_options, 0);
- poptSetOtherOptionHelp(pc, "hostname level");
+ poptSetOtherOptionHelp(pc, "hostname groupname level");
while((opt = poptGetNextOpt(pc)) != -1) {
}
@@ -68,28 +69,35 @@ int main(int argc, const char **argv)
}
hostname = poptGetArg(pc);
+ if (!poptPeekArg(pc)) {
+ poptPrintHelp(pc, stderr, 0);
+ goto out;
+ }
+ groupname = poptGetArg(pc);
+
if (poptPeekArg(pc)) {
level = atoi(poptGetArg(pc));
}
- /* NetLocalGroupEnum */
+ /* NetGroupGetUsers */
do {
- status = NetLocalGroupEnum(hostname,
- level,
- &buffer,
- (uint32_t)-1,
- &entries_read,
- &total_entries,
- &resume_handle);
+ status = NetGroupGetUsers(hostname,
+ groupname,
+ level,
+ &buffer,
+ (uint32_t)-1,
+ &entries_read,
+ &total_entries,
+ &resume_handle);
if (status == 0 || status == ERROR_MORE_DATA) {
printf("total entries: %d\n", total_entries);
switch (level) {
case 0:
- info0 = (struct LOCALGROUP_INFO_0 *)buffer;
+ info0 = (struct GROUP_USERS_INFO_0 *)buffer;
break;
case 1:
- info1 = (struct LOCALGROUP_INFO_1 *)buffer;
+ info1 = (struct GROUP_USERS_INFO_1 *)buffer;
break;
default:
break;
@@ -97,16 +105,14 @@ int main(int argc, const char **argv)
for (i=0; i<entries_read; i++) {
switch (level) {
case 0:
- printf("#%d group: %s\n", i, info0->lgrpi0_name);
+ printf("#%d group: %s\n", i, info0->grui0_name);
info0++;
break;
case 1:
- printf("#%d group: %s\n", i, info1->lgrpi1_name);
- printf("#%d comment: %s\n", i, info1->lgrpi1_comment);
+ printf("#%d group: %s\n", i, info1->grui1_name);
+ printf("#%d attributes: %d\n", i, info1->grui1_attributes);
info1++;
break;
- default:
- break;
}
}
NetApiBufferFree(buffer);
@@ -114,7 +120,7 @@ int main(int argc, const char **argv)
} while (status == ERROR_MORE_DATA);
if (status != 0) {
- printf("NetLocalGroupEnum failed with: %s\n",
+ printf("NetGroupGetUsers failed with: %s\n",
libnetapi_get_error_string(ctx, status));
}
diff --git a/source/lib/netapi/group.c b/source/lib/netapi/group.c
index c1c55c8..30ff6af 100644
--- a/source/lib/netapi/group.c
+++ b/source/lib/netapi/group.c
@@ -1306,3 +1306,21 @@ WERROR NetGroupEnum_l(struct libnetapi_ctx *ctx,
{
return NetGroupEnum_r(ctx, r);
}
+
+/****************************************************************
+****************************************************************/
+
+WERROR NetGroupGetUsers_r(struct libnetapi_ctx *ctx,
+ struct NetGroupGetUsers *r)
+{
+ return WERR_NOT_SUPPORTED;
+}
+
+/****************************************************************
+****************************************************************/
+
+WERROR NetGroupGetUsers_l(struct libnetapi_ctx *ctx,
+ struct NetGroupGetUsers *r)
+{
+ return WERR_NOT_SUPPORTED;
+}
diff --git a/source/lib/netapi/libnetapi.c b/source/lib/netapi/libnetapi.c
index 7e9e094..fe57238 100644
--- a/source/lib/netapi/libnetapi.c
+++ b/source/lib/netapi/libnetapi.c
@@ -1101,6 +1101,61 @@ NET_API_STATUS NetGroupDelUser(const char * server_name /* [in] */,
}
/****************************************************************
+ NetGroupGetUsers
+****************************************************************/
+
+NET_API_STATUS NetGroupGetUsers(const char * server_name /* [in] */,
+ const char * group_name /* [in] */,
+ uint32_t level /* [in] */,
+ uint8_t **buffer /* [out] [ref] */,
+ uint32_t prefmaxlen /* [in] */,
+ uint32_t *entries_read /* [out] [ref] */,
+ uint32_t *total_entries /* [out] [ref] */,
+ uint32_t *resume_handle /* [in,out] [ref] */)
+{
+ struct NetGroupGetUsers r;
+ struct libnetapi_ctx *ctx = NULL;
+ NET_API_STATUS status;
+ WERROR werr;
+
+ status = libnetapi_getctx(&ctx);
+ if (status != 0) {
+ return status;
+ }
+
+ /* In parameters */
+ r.in.server_name = server_name;
+ r.in.group_name = group_name;
+ r.in.level = level;
+ r.in.prefmaxlen = prefmaxlen;
+ r.in.resume_handle = resume_handle;
+
+ /* Out parameters */
+ r.out.buffer = buffer;
+ r.out.entries_read = entries_read;
+ r.out.total_entries = total_entries;
+ r.out.resume_handle = resume_handle;
+
+ if (DEBUGLEVEL >= 10) {
+ NDR_PRINT_IN_DEBUG(NetGroupGetUsers, &r);
+ }
+
+ if (LIBNETAPI_LOCAL_SERVER(server_name)) {
+ werr = NetGroupGetUsers_l(ctx, &r);
+ } else {
+ werr = NetGroupGetUsers_r(ctx, &r);
+ }
+
+ r.out.result = W_ERROR_V(werr);
+
+ if (DEBUGLEVEL >= 10) {
+ NDR_PRINT_OUT_DEBUG(NetGroupGetUsers, &r);
+ }
+
+ return r.out.result;
+}
+
+/****************************************************************
NetLocalGroupAdd
****************************************************************/
diff --git a/source/lib/netapi/libnetapi.h b/source/lib/netapi/libnetapi.h
index 0010400..5c9e2e2 100644
--- a/source/lib/netapi/libnetapi.h
+++ b/source/lib/netapi/libnetapi.h
@@ -192,6 +192,18 @@ WERROR NetGroupDelUser_r(struct libnetapi_ctx *ctx,
struct NetGroupDelUser *r);
WERROR NetGroupDelUser_l(struct libnetapi_ctx *ctx,
struct NetGroupDelUser *r);
+NET_API_STATUS NetGroupGetUsers(const char * server_name /* [in] */,
+ const char * group_name /* [in] */,
+ uint32_t level /* [in] */,
+ uint8_t **buffer /* [out] [ref] */,
+ uint32_t prefmaxlen /* [in] */,
+ uint32_t *entries_read /* [out] [ref] */,
+ uint32_t *total_entries /* [out] [ref] */,
+ uint32_t *resume_handle /* [in,out] [ref] */);
+WERROR NetGroupGetUsers_r(struct libnetapi_ctx *ctx,
+ struct NetGroupGetUsers *r);
+WERROR NetGroupGetUsers_l(struct libnetapi_ctx *ctx,
+ struct NetGroupGetUsers *r);
NET_API_STATUS NetLocalGroupAdd(const char * server_name /* [in] */,
uint32_t level /* [in] */,
uint8_t *buffer /* [in] [ref] */,
diff --git a/source/lib/netapi/netapi.h b/source/lib/netapi/netapi.h
index 7d32ffc..a1041c0 100644
--- a/source/lib/netapi/netapi.h
+++ b/source/lib/netapi/netapi.h
@@ -290,6 +290,15 @@ struct GROUP_INFO_1005 {
uint32_t grpi1005_attributes;
};
+struct GROUP_USERS_INFO_0 {
+ const char * grui0_name;
+};
+
+struct GROUP_USERS_INFO_1 {
+ const char * grui1_name;
+ uint32_t grui1_attributes;
+};
+
struct LOCALGROUP_INFO_0 {
const char * lgrpi0_name;
};
@@ -901,6 +910,35 @@ NET_API_STATUS NetGroupDelUser(const char * server_name /* [in] */,
/************************************************************//**
*
+ * NetGroupGetUsers
+ *
+ * @brief Get Users for a group on a server
+ *
+ * @param[in] server_name The server name to connect to
+ * @param[in] group_name The group name to enumerate users for
+ * @param[in] level The enumeration level used for the query
+ * @param[out] buffer The returned enumeration buffer
+ * @param[in] prefmaxlen The requested maximal buffer size
+ * @param[out] entries_read The number of returned entries
+ * @param[out] total_entries The number of total entries
+ * @param[in,out] resume_handle A handle passed in and returned for resuming
+ * operations
+ * @return NET_API_STATUS
+ *
+ * example group/group_getusers.c
+ ***************************************************************/
+
+NET_API_STATUS NetGroupGetUsers(const char * server_name /* [in] */,
+ const char * group_name /* [in] */,
+ uint32_t level /* [in] */,
+ uint8_t **buffer /* [out] [ref] */,
+ uint32_t prefmaxlen /* [in] */,
+ uint32_t *entries_read /* [out] [ref] */,
+ uint32_t *total_entries /* [out] [ref] */,
+ uint32_t *resume_handle /* [in,out] [ref] */);
+
+/************************************************************//**
+ *
* NetLocalGroupAdd
*
* @brief Create Local Group
diff --git a/source/librpc/gen_ndr/libnetapi.h b/source/librpc/gen_ndr/libnetapi.h
index d843b99..f1352c6 100644
--- a/source/librpc/gen_ndr/libnetapi.h
+++ b/source/librpc/gen_ndr/libnetapi.h
@@ -396,6 +396,15 @@ struct GROUP_INFO_1005 {
uint32_t grpi1005_attributes;
};
+struct GROUP_USERS_INFO_0 {
+ const char * grui0_name;
+};
+
+struct GROUP_USERS_INFO_1 {
+ const char * grui1_name;
+ uint32_t grui1_attributes;
+};
+
struct LOCALGROUP_INFO_0 {
const char * lgrpi0_name;
};
@@ -780,6 +789,26 @@ struct NetGroupDelUser {
};
+struct NetGroupGetUsers {
+ struct {
+ const char * server_name;
+ const char * group_name;
+ uint32_t level;
+ uint32_t prefmaxlen;
+ uint32_t *resume_handle;/* [ref] */
+ } in;
+
+ struct {
+ uint8_t **buffer;/* [ref] */
+ uint32_t *entries_read;/* [ref] */
+ uint32_t *total_entries;/* [ref] */
+ uint32_t *resume_handle;/* [ref] */
+ enum NET_API_STATUS result;
+ } out;
+
+};
+
+
struct NetLocalGroupAdd {
struct {
const char * server_name;
diff --git a/source/librpc/gen_ndr/ndr_libnetapi.c b/source/librpc/gen_ndr/ndr_libnetapi.c
index 6e5c54f..64f1c4f 100644
--- a/source/librpc/gen_ndr/ndr_libnetapi.c
+++ b/source/librpc/gen_ndr/ndr_libnetapi.c
@@ -1937,6 +1937,69 @@ _PUBLIC_ void ndr_print_NET_DISPLAY_GROUP(struct ndr_print *ndr, const char *nam
ndr->depth--;
}
+_PUBLIC_ enum ndr_err_code ndr_push_GROUP_USERS_INFO_0(struct ndr_push *ndr, int ndr_flags, const struct GROUP_USERS_INFO_0 *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_push_align(ndr, 4));
+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->grui0_name));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_GROUP_USERS_INFO_0(struct ndr_pull *ndr, int ndr_flags, struct GROUP_USERS_INFO_0 *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_pull_align(ndr, 4));
+ NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->grui0_name));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_GROUP_USERS_INFO_0(struct ndr_print *ndr, const char *name, const struct GROUP_USERS_INFO_0 *r)
+{
+ ndr_print_struct(ndr, name, "GROUP_USERS_INFO_0");
+ ndr->depth++;
+ ndr_print_string(ndr, "grui0_name", r->grui0_name);
+ ndr->depth--;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_push_GROUP_USERS_INFO_1(struct ndr_push *ndr, int ndr_flags, const struct GROUP_USERS_INFO_1 *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_push_align(ndr, 4));
+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->grui1_name));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->grui1_attributes));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_GROUP_USERS_INFO_1(struct ndr_pull *ndr, int ndr_flags, struct GROUP_USERS_INFO_1 *r)
+{
+ if (ndr_flags & NDR_SCALARS) {
+ NDR_CHECK(ndr_pull_align(ndr, 4));
+ NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->grui1_name));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->grui1_attributes));
+ }
+ if (ndr_flags & NDR_BUFFERS) {
+ }
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_GROUP_USERS_INFO_1(struct ndr_print *ndr, const char *name, const struct GROUP_USERS_INFO_1 *r)
+{
+ ndr_print_struct(ndr, name, "GROUP_USERS_INFO_1");
+ ndr->depth++;
+ ndr_print_string(ndr, "grui1_name", r->grui1_name);
+ ndr_print_uint32(ndr, "grui1_attributes", r->grui1_attributes);
+ ndr->depth--;
+}
+
_PUBLIC_ void ndr_print_NetJoinDomain(struct ndr_print *ndr, const char *name, int flags, const struct NetJoinDomain *r)
{
ndr_print_struct(ndr, name, "NetJoinDomain");
@@ -2801,6 +2864,56 @@ _PUBLIC_ void ndr_print_NetGroupDelUser(struct ndr_print *ndr, const char *name,
ndr->depth--;
}
+_PUBLIC_ void ndr_print_NetGroupGetUsers(struct ndr_print *ndr, const char *name, int flags, const struct NetGroupGetUsers *r)
+{
+ ndr_print_struct(ndr, name, "NetGroupGetUsers");
+ ndr->depth++;
+ if (flags & NDR_SET_VALUES) {
+ ndr->flags |= LIBNDR_PRINT_SET_VALUES;
+ }
+ if (flags & NDR_IN) {
+ ndr_print_struct(ndr, "in", "NetGroupGetUsers");
+ ndr->depth++;
+ ndr_print_string(ndr, "server_name", r->in.server_name);
+ ndr_print_string(ndr, "group_name", r->in.group_name);
+ ndr_print_uint32(ndr, "level", r->in.level);
+ ndr_print_uint32(ndr, "prefmaxlen", r->in.prefmaxlen);
+ ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
+ ndr->depth++;
+ ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
+ ndr->depth--;
+ ndr->depth--;
+ }
+ if (flags & NDR_OUT) {
+ ndr_print_struct(ndr, "out", "NetGroupGetUsers");
+ ndr->depth++;
+ ndr_print_ptr(ndr, "buffer", r->out.buffer);
+ ndr->depth++;
+ ndr_print_ptr(ndr, "buffer", *r->out.buffer);
+ ndr->depth++;
+ if (*r->out.buffer) {
+ ndr_print_uint8(ndr, "buffer", **r->out.buffer);
+ }
+ ndr->depth--;
+ ndr->depth--;
+ ndr_print_ptr(ndr, "entries_read", r->out.entries_read);
+ ndr->depth++;
+ ndr_print_uint32(ndr, "entries_read", *r->out.entries_read);
+ ndr->depth--;
+ ndr_print_ptr(ndr, "total_entries", r->out.total_entries);
+ ndr->depth++;
+ ndr_print_uint32(ndr, "total_entries", *r->out.total_entries);
+ ndr->depth--;
+ ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
+ ndr->depth++;
+ ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
+ ndr->depth--;
+ ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
+ ndr->depth--;
+ }
+ ndr->depth--;
+}
+
_PUBLIC_ void ndr_print_NetLocalGroupAdd(struct ndr_print *ndr, const char *name, int flags, const struct NetLocalGroupAdd *r)
{
--
Samba Shared Repository
More information about the samba-cvs
mailing list