diff options
-rw-r--r-- | source4/librpc/idl/samr.idl | 16 | ||||
-rw-r--r-- | source4/rpc_server/samr/dcesrv_samr.c | 16 |
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; } |