diff -Nru samba-3.6.3/debian/changelog samba-3.6.3/debian/changelog --- samba-3.6.3/debian/changelog 2012-06-08 21:35:12.000000000 +0800 +++ samba-3.6.3/debian/changelog 2012-12-18 12:27:06.000000000 +0800 @@ -1,3 +1,10 @@ +samba (2:3.6.3-2ubuntu2.4) precise-proposed; urgency=low + + * Change "net share allowedusers" to use RPC call that works with + Microsoft Windows 2008 r2. (LP: #1061244) + + -- Olly Betts Tue, 18 Dec 2012 12:10:36 +0800 + samba (2:3.6.3-2ubuntu2.3) precise-proposed; urgency=low * d/samba.nmbd.upstart: Ignore the return code of testparm in pre-start; diff -Nru samba-3.6.3/debian/patches/net-rpc-share-allowedusers-with-2008r2.patch samba-3.6.3/debian/patches/net-rpc-share-allowedusers-with-2008r2.patch --- samba-3.6.3/debian/patches/net-rpc-share-allowedusers-with-2008r2.patch 1970-01-01 08:00:00.000000000 +0800 +++ samba-3.6.3/debian/patches/net-rpc-share-allowedusers-with-2008r2.patch 2012-12-18 12:12:04.000000000 +0800 @@ -0,0 +1,133 @@ +Description: Fix net rpc share allowedusers to work with 2008r2 + The RAP NetShareEnum command was removed in 2008r2, so use the RPC equivalent + instead. +Bug: https://bugzilla.samba.org/show_bug.cgi?id=8966 +Author: Jeremy Allison + +diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c +index 49b405f..fe9053b 100644 +--- a/source3/utils/net_rpc.c ++++ b/source3/utils/net_rpc.c +@@ -4913,28 +4913,6 @@ static void show_userlist(struct rpc_pipe_client *pipe_hnd, + return; + } + +-struct share_list { +- int num_shares; +- char **shares; +-}; +- +-static void collect_share(const char *name, uint32 m, +- const char *comment, void *state) +-{ +- struct share_list *share_list = (struct share_list *)state; +- +- if (m != STYPE_DISKTREE) +- return; +- +- share_list->num_shares += 1; +- share_list->shares = SMB_REALLOC_ARRAY(share_list->shares, char *, share_list->num_shares); +- if (!share_list->shares) { +- share_list->num_shares = 0; +- return; +- } +- share_list->shares[share_list->num_shares-1] = SMB_STRDUP(name); +-} +- + /** + * List shares on a remote RPC server, including the security descriptors. + * +@@ -4960,16 +4938,21 @@ static NTSTATUS rpc_share_allowedusers_internals(struct net_context *c, + int argc, + const char **argv) + { +- int ret; + bool r; +- uint32 i; + FILE *f; ++ NTSTATUS nt_status = NT_STATUS_OK; ++ uint32_t total_entries = 0; ++ uint32_t resume_handle = 0; ++ uint32_t preferred_len = 0xffffffff; ++ uint32_t i; ++ struct dcerpc_binding_handle *b = NULL; ++ struct srvsvc_NetShareInfoCtr info_ctr; ++ struct srvsvc_NetShareCtr1 ctr1; ++ WERROR result; + + struct user_token *tokens = NULL; + int num_tokens = 0; + +- struct share_list share_list; +- + if (argc == 0) { + f = stdin; + } else { +@@ -4994,22 +4977,47 @@ static NTSTATUS rpc_share_allowedusers_internals(struct net_context *c, + for (i=0; ibinding_handle; ++ ++ /* Issue the NetShareEnum RPC call and retrieve the response */ ++ nt_status = dcerpc_srvsvc_NetShareEnumAll(b, ++ talloc_tos(), ++ pipe_hnd->desthost, ++ &info_ctr, ++ preferred_len, ++ &total_entries, ++ &resume_handle, ++ &result); ++ ++ /* Was it successful? */ ++ if (!NT_STATUS_IS_OK(nt_status)) { ++ /* Nope. Go clean up. */ ++ goto done; ++ } ++ ++ if (!W_ERROR_IS_OK(result)) { ++ /* Nope. Go clean up. */ ++ nt_status = werror_to_ntstatus(result); + goto done; + } + +- for (i = 0; i < share_list.num_shares; i++) { +- char *netname = share_list.shares[i]; ++ if (total_entries == 0) { ++ goto done; ++ } ++ ++ /* For each returned entry... */ ++ for (i = 0; i < info_ctr.ctr.ctr1->count; i++) { ++ const char *netname = info_ctr.ctr.ctr1->array[i].name; + +- if (netname[strlen(netname)-1] == '$') ++ if (info_ctr.ctr.ctr1->array[i].type != STYPE_DISKTREE) { + continue; ++ } + + d_printf("%s\n", netname); + +@@ -5021,9 +5035,8 @@ static NTSTATUS rpc_share_allowedusers_internals(struct net_context *c, + free_user_token(&tokens[i].token); + } + SAFE_FREE(tokens); +- SAFE_FREE(share_list.shares); + +- return NT_STATUS_OK; ++ return nt_status; + } + + static int rpc_share_allowedusers(struct net_context *c, int argc, diff -Nru samba-3.6.3/debian/patches/series samba-3.6.3/debian/patches/series --- samba-3.6.3/debian/patches/series 2012-06-08 21:14:05.000000000 +0800 +++ samba-3.6.3/debian/patches/series 2012-12-18 12:12:04.000000000 +0800 @@ -18,3 +18,4 @@ CVE-2012-1182-2.patch CVE-2012-2111.patch lp_970679_fix-large-groups.patch +net-rpc-share-allowedusers-with-2008r2.patch