r19445: Attempt to fix net rpc share
authorVolker Lendecke <vlendec@samba.org>
Sat, 21 Oct 2006 16:27:38 +0000 (16:27 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:15:36 +0000 (12:15 -0500)
(This used to be commit 769988f83adac5f8adcf6a3cda68fb8f26a0327d)

source3/utils/net_rpc.c

index c22ffb9878f7ef8a9a3746747d6fdd8afa22417f..33889235bf01dc2db2205a0b9ef69f7ddfb0acea 100644 (file)
@@ -3137,6 +3137,25 @@ static NTSTATUS get_share_info(struct rpc_pipe_client *pipe_hnd,
                                uint32 *numentries)
 {
        union srvsvc_NetShareInfo info;
+       NTSTATUS status;
+
+       switch(level) {
+       case 1:
+               if (!(ctr->ctr1 = TALLOC_ZERO_P(
+                             mem_ctx, struct srvsvc_NetShareCtr1))) {
+                       return NT_STATUS_NO_MEMORY;
+               }
+               break;
+       case 502:
+               if (!(ctr->ctr502 = TALLOC_ZERO_P(
+                             mem_ctx, struct srvsvc_NetShareCtr502))) {
+                       return NT_STATUS_NO_MEMORY;
+               }
+               break;
+       default:
+               return NT_STATUS_INVALID_LEVEL;
+               break;
+       }
 
        /* no specific share requested, enumerate all */
        if (argc == 0) {
@@ -3147,7 +3166,29 @@ static NTSTATUS get_share_info(struct rpc_pipe_client *pipe_hnd,
        }
 
        /* request just one share */
-       return rpccli_srvsvc_NetShareGetInfo(pipe_hnd, mem_ctx, NULL, argv[0], level, &info);
+       status = rpccli_srvsvc_NetShareGetInfo(pipe_hnd, mem_ctx, NULL,
+                                              argv[0], level, &info);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       *numentries = 1;
+
+       switch(level) {
+       case 1:
+               ctr->ctr1->count = 1;
+               ctr->ctr1->array = info.info1;
+               break;
+       case 502:
+               ctr->ctr501->count = 1;
+               ctr->ctr502->array = info.info502;
+               break;
+       default:
+               return NT_STATUS_INTERNAL_ERROR;
+               break;
+       }
+
+       return NT_STATUS_OK;
 }
 
 /**