summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/librpc/idl/srvsvc.idl6
-rw-r--r--source4/rpc_server/srvsvc/dcesrv_srvsvc.c21
2 files changed, 21 insertions, 6 deletions
diff --git a/source4/librpc/idl/srvsvc.idl b/source4/librpc/idl/srvsvc.idl
index e33b0da3e5..8cd9d63864 100644
--- a/source4/librpc/idl/srvsvc.idl
+++ b/source4/librpc/idl/srvsvc.idl
@@ -1121,12 +1121,12 @@
/* srvsvc_NetDisk */
/**************************/
typedef struct {
- [flag(STR_LEN4)] string disc;
+ [flag(STR_LEN4)] string disk;
} srvsvc_NetDiskInfo0;
typedef struct {
uint32 count;
- [size_is(count), length_is(count)] srvsvc_NetDiskInfo0 *discs;
+ [size_is(count), length_is(count)] srvsvc_NetDiskInfo0 *disks;
} srvsvc_NetDiskInfo;
/******************/
@@ -1134,7 +1134,7 @@
WERROR srvsvc_NetDiskEnum(
[in] [string,charset(UTF16)] uint16 *server_unc,
[in] uint32 level,
- [in,out] srvsvc_NetDiskInfo disks,
+ [in,out] srvsvc_NetDiskInfo info,
[in] uint32 maxlen,
[out] uint32 totalentries,
[in,out] uint32 *resume_handle
diff --git a/source4/rpc_server/srvsvc/dcesrv_srvsvc.c b/source4/rpc_server/srvsvc/dcesrv_srvsvc.c
index d852f7a40c..d850af5ebd 100644
--- a/source4/rpc_server/srvsvc/dcesrv_srvsvc.c
+++ b/source4/rpc_server/srvsvc/dcesrv_srvsvc.c
@@ -1078,15 +1078,30 @@ static WERROR srvsvc_NetSrvSetInfo(struct dcesrv_call_state *dce_call, TALLOC_CT
static WERROR srvsvc_NetDiskEnum(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
struct srvsvc_NetDiskEnum *r)
{
- r->out.disks.discs = NULL;
- r->out.disks.count = 0;
+ r->out.info.disks = NULL;
+ r->out.info.count = 0;
r->out.totalentries = 0;
r->out.resume_handle = NULL;
switch (r->in.level) {
case 0:
{
- return WERR_NOT_SUPPORTED;
+ /* we can safely hardcode the reply and report we have only one disk (C:) */
+ /* for some reason Windows wants 2 entries with the second being empty */
+ r->out.info.disks = talloc_array(mem_ctx, struct srvsvc_NetDiskInfo0, 2);
+ W_ERROR_HAVE_NO_MEMORY(r->out.info.disks);
+ r->out.info.count = 2;
+
+ r->out.info.disks[0].disk = talloc_strdup(mem_ctx, "C:");
+ W_ERROR_HAVE_NO_MEMORY(r->out.info.disks[0].disk);
+
+ r->out.info.disks[1].disk = talloc_strdup(mem_ctx, "");
+ W_ERROR_HAVE_NO_MEMORY(r->out.info.disks[1].disk);
+
+ r->out.totalentries = 1;
+ r->out.resume_handle = r->in.resume_handle;
+
+ return WERR_OK;
}
default:
return WERR_UNKNOWN_LEVEL;