diff options
-rw-r--r-- | source4/rpc_server/unixinfo/dcesrv_unixinfo.c | 45 | ||||
-rw-r--r-- | source4/torture/rpc/unixinfo.c | 6 |
2 files changed, 21 insertions, 30 deletions
diff --git a/source4/rpc_server/unixinfo/dcesrv_unixinfo.c b/source4/rpc_server/unixinfo/dcesrv_unixinfo.c index d186d7e346..1f682a6d5a 100644 --- a/source4/rpc_server/unixinfo/dcesrv_unixinfo.c +++ b/source4/rpc_server/unixinfo/dcesrv_unixinfo.c @@ -34,6 +34,7 @@ static NTSTATUS unixinfo_SidToUid(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct unixinfo_SidToUid *r) { + NTSTATUS status; struct sidmap_context *sidmap; uid_t uid; @@ -43,13 +44,11 @@ static NTSTATUS unixinfo_SidToUid(struct dcesrv_call_state *dce_call, return NT_STATUS_NO_MEMORY; } - r->out.result = sidmap_sid_to_unixuid(sidmap, &r->in.sid, &uid); + status = sidmap_sid_to_unixuid(sidmap, &r->in.sid, &uid); + NT_STATUS_NOT_OK_RETURN(status); - if (NT_STATUS_IS_OK(r->out.result)) { - r->out.uid = uid; - } - - return r->out.result; + *r->out.uid = uid; + return NT_STATUS_OK; } static NTSTATUS unixinfo_UidToSid(struct dcesrv_call_state *dce_call, @@ -72,15 +71,14 @@ static NTSTATUS unixinfo_UidToSid(struct dcesrv_call_state *dce_call, return NT_STATUS_INVALID_PARAMETER; } - r->out.sid = NULL; - r->out.result = sidmap_uid_to_sid(sidmap, mem_ctx, uid, &r->out.sid); - return r->out.result; + return sidmap_uid_to_sid(sidmap, mem_ctx, uid, &r->out.sid); } static NTSTATUS unixinfo_SidToGid(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct unixinfo_SidToGid *r) { + NTSTATUS status; struct sidmap_context *sidmap; gid_t gid; @@ -90,13 +88,11 @@ static NTSTATUS unixinfo_SidToGid(struct dcesrv_call_state *dce_call, return NT_STATUS_NO_MEMORY; } - r->out.result = sidmap_sid_to_unixgid(sidmap, &r->in.sid, &gid); - - if (NT_STATUS_IS_OK(r->out.result)) { - r->out.gid = gid; - } + status = sidmap_sid_to_unixgid(sidmap, &r->in.sid, &gid); + NT_STATUS_NOT_OK_RETURN(status); - return r->out.result; + *r->out.gid = gid; + return NT_STATUS_OK; } static NTSTATUS unixinfo_GidToSid(struct dcesrv_call_state *dce_call, @@ -119,9 +115,7 @@ static NTSTATUS unixinfo_GidToSid(struct dcesrv_call_state *dce_call, return NT_STATUS_INVALID_PARAMETER; } - r->out.sid = NULL; - r->out.result = sidmap_gid_to_sid(sidmap, mem_ctx, gid, &r->out.sid); - return r->out.result; + return sidmap_gid_to_sid(sidmap, mem_ctx, gid, &r->out.sid); } static NTSTATUS unixinfo_GetPWUid(struct dcesrv_call_state *dce_call, @@ -130,17 +124,14 @@ static NTSTATUS unixinfo_GetPWUid(struct dcesrv_call_state *dce_call, { int i; - r->out.infos = talloc_zero_array(mem_ctx, struct unixinfo_GetPWUidInfo, - r->in.count); - if (r->out.infos == NULL) { - DEBUG(0, ("talloc failed\n")); - return NT_STATUS_NO_MEMORY; - } + *r->out.count = 0; - r->out.result = NT_STATUS_OK; - r->out.count = r->in.count; + r->out.infos = talloc_zero_array(mem_ctx, struct unixinfo_GetPWUidInfo, + *r->in.count); + NT_STATUS_HAVE_NO_MEMORY(r->out.infos); + *r->out.count = *r->in.count; - for (i=0; i<r->in.count; i++) { + for (i=0; i < *r->in.count; i++) { uid_t uid; struct passwd *pwd; diff --git a/source4/torture/rpc/unixinfo.c b/source4/torture/rpc/unixinfo.c index 3eafb17c44..6d1772a4f4 100644 --- a/source4/torture/rpc/unixinfo.c +++ b/source4/torture/rpc/unixinfo.c @@ -47,8 +47,8 @@ static BOOL test_uidtosid(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) static BOOL test_getpwuid(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) { uint64_t uids[512]; - const int num_uids = sizeof(uids)/sizeof(uids[0]); - int i; + uint32_t num_uids = ARRAY_SIZE(uids); + uint32_t i; struct unixinfo_GetPWUid r; NTSTATUS result; @@ -56,7 +56,7 @@ static BOOL test_getpwuid(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) uids[i] = i; } - r.in.count = num_uids; + r.in.count = &num_uids; r.in.uids = uids; result = dcerpc_unixinfo_GetPWUid(p, mem_ctx, &r); |