summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/librpc/idl/samr.idl16
-rw-r--r--source4/rpc_server/samr/dcesrv_samr.c16
2 files changed, 19 insertions, 13 deletions
diff --git a/source4/librpc/idl/samr.idl b/source4/librpc/idl/samr.idl
index 370eb728bd..c2fa7fe6a2 100644
--- a/source4/librpc/idl/samr.idl
+++ b/source4/librpc/idl/samr.idl
@@ -388,8 +388,8 @@
} samr_GroupInfoAll;
typedef struct {
- uint32 unknown;
- } samr_GroupInfoX;
+ samr_GroupAttrs attributes;
+ } samr_GroupInfoAttributes;
typedef struct {
lsa_String description;
@@ -398,17 +398,17 @@
typedef enum {
GROUPINFOALL = 1,
GROUPINFONAME = 2,
- GROUPINFOX = 3,
+ GROUPINFOATTRIBUTES = 3,
GROUPINFODESCRIPTION = 4,
GROUPINFOALL2 = 5
} samr_GroupInfoEnum;
typedef [switch_type(samr_GroupInfoEnum)] union {
- [case(GROUPINFOALL)] samr_GroupInfoAll all;
- [case(GROUPINFONAME)] lsa_String name;
- [case(GROUPINFOX)] samr_GroupInfoX unknown;
- [case(GROUPINFODESCRIPTION)] lsa_String description;
- [case(GROUPINFOALL2)] samr_GroupInfoAll all2;
+ [case(GROUPINFOALL)] samr_GroupInfoAll all;
+ [case(GROUPINFONAME)] lsa_String name;
+ [case(GROUPINFOATTRIBUTES)] samr_GroupInfoAttributes attributes;
+ [case(GROUPINFODESCRIPTION)] lsa_String description;
+ [case(GROUPINFOALL2)] samr_GroupInfoAll all2;
} samr_GroupInfo;
NTSTATUS samr_QueryGroupInfo(
diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c
index ecacff60e3..48a5c4b879 100644
--- a/source4/rpc_server/samr/dcesrv_samr.c
+++ b/source4/rpc_server/samr/dcesrv_samr.c
@@ -1642,19 +1642,25 @@ static NTSTATUS samr_QueryGroupInfo(struct dcesrv_call_state *dce_call, TALLOC_C
switch (r->in.level) {
case GROUPINFOALL:
QUERY_STRING(msg, all.name.string, "sAMAccountName");
- r->out.info->all.attributes = 7; /* Do like w2k3 */
+ r->out.info->all.attributes = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED; /* Do like w2k3 */
QUERY_UINT (msg, all.num_members, "numMembers")
QUERY_STRING(msg, all.description.string, "description");
break;
case GROUPINFONAME:
QUERY_STRING(msg, name.string, "sAMAccountName");
break;
- case GROUPINFOX:
- r->out.info->unknown.unknown = 7;
+ case GROUPINFOATTRIBUTES:
+ r->out.info->attributes.attributes = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED; /* Do like w2k3 */
break;
case GROUPINFODESCRIPTION:
QUERY_STRING(msg, description.string, "description");
break;
+ case GROUPINFOALL2:
+ QUERY_STRING(msg, all2.name.string, "sAMAccountName");
+ r->out.info->all.attributes = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED; /* Do like w2k3 */
+ QUERY_UINT (msg, all2.num_members, "numMembers")
+ QUERY_STRING(msg, all2.description.string, "description");
+ break;
default:
r->out.info = NULL;
return NT_STATUS_INVALID_INFO_CLASS;
@@ -1698,7 +1704,7 @@ static NTSTATUS samr_SetGroupInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX
* sAMAccountName attribute */
SET_STRING(msg, name.string, "sAMAccountName");
break;
- case GROUPINFOX:
+ case GROUPINFOATTRIBUTES:
/* This does not do anything obviously visible in W2k3 LDAP */
break;
default:
@@ -3193,7 +3199,7 @@ static NTSTATUS samr_TestPrivateFunctionsDomain(struct dcesrv_call_state *dce_ca
static NTSTATUS samr_TestPrivateFunctionsUser(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct samr_TestPrivateFunctionsUser *r)
{
- DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+ return NT_STATUS_NOT_IMPLEMENTED;
}