[PATCH] netapi: Add support for info level 502 in NetShareAdd.

Hans Leidekker hans at meelstraat.net
Tue Nov 19 05:07:27 MST 2013


Hi,

Please review & push.

-------------- next part --------------
>From 5a83539cd295343a974f217c1a46b3e01b80cd6a Mon Sep 17 00:00:00 2001
From: Hans Leidekker <hans at meelstraat.net>
Date: Mon, 18 Nov 2013 18:32:41 +0100
Subject: netapi: Add support for info level 502 in NetShareAdd.
To: samba-technical at samba.org

Signed-off-by: Hans Leidekker <hans at meelstraat.net>
---
 source3/lib/netapi/netapi.h         | 13 +++++++++++++
 source3/lib/netapi/share.c          | 27 ++++++++++++++++++++++++++-
 source3/lib/netapi/tests/netshare.c | 18 ++++++++++++++++++
 source3/librpc/idl/libnetapi.idl    | 13 +++++++++++++
 4 files changed, 70 insertions(+), 1 deletion(-)

diff --git a/source3/lib/netapi/netapi.h b/source3/lib/netapi/netapi.h
index 457368e..c273ae0 100644
--- a/source3/lib/netapi/netapi.h
+++ b/source3/lib/netapi/netapi.h
@@ -1233,6 +1233,19 @@ struct SHARE_INFO_501 {
 	uint32_t shi501_flags;
 };
 
+struct SHARE_INFO_502 {
+	const char * shi502_netname;
+	uint32_t shi502_type;
+	const char * shi502_remark;
+	uint32_t shi502_permissions;
+	uint32_t shi502_max_uses;
+	uint32_t shi502_current_uses;
+	const char * shi502_path;
+	const char * shi502_passwd;
+	uint32_t shi502_reserved;
+	struct security_descriptor * shi502_security_descriptor;
+};
+
 struct SHARE_INFO_1004 {
 	const char * shi1004_remark;
 };
diff --git a/source3/lib/netapi/share.c b/source3/lib/netapi/share.c
index 090e1a9..5b348d6 100644
--- a/source3/lib/netapi/share.c
+++ b/source3/lib/netapi/share.c
@@ -129,8 +129,10 @@ static NTSTATUS map_SHARE_INFO_buffer_to_srvsvc_share_info(TALLOC_CTX *mem_ctx,
 							   union srvsvc_NetShareInfo *info)
 {
 	struct SHARE_INFO_2 *i2 = NULL;
+	struct SHARE_INFO_502 *i502 = NULL;
 	struct SHARE_INFO_1004 *i1004 = NULL;
 	struct srvsvc_NetShareInfo2 *s2 = NULL;
+	struct srvsvc_NetShareInfo502 *s502 = NULL;
 	struct srvsvc_NetShareInfo1004 *s1004 = NULL;
 
 	if (!buffer) {
@@ -156,6 +158,29 @@ static NTSTATUS map_SHARE_INFO_buffer_to_srvsvc_share_info(TALLOC_CTX *mem_ctx,
 			info->info2 = s2;
 
 			break;
+
+		case 502:
+			i502 = (struct SHARE_INFO_502 *)buffer;
+
+			s502 = talloc(mem_ctx, struct srvsvc_NetShareInfo502);
+			NT_STATUS_HAVE_NO_MEMORY(s502);
+
+			s502->name		= i502->shi502_netname;
+			s502->type		= i502->shi502_type;
+			s502->comment		= i502->shi502_remark;
+			s502->permissions	= i502->shi502_permissions;
+			s502->max_users		= i502->shi502_max_uses;
+			s502->current_users	= i502->shi502_current_uses;
+			s502->path		= i502->shi502_path;
+			s502->password		= i502->shi502_passwd;
+			s502->sd_buf.sd_size	=
+				ndr_size_security_descriptor(i502->shi502_security_descriptor);
+			s502->sd_buf.sd		= i502->shi502_security_descriptor;
+
+			info->info502 = s502;
+
+			break;
+
 		case 1004:
 			i1004 = (struct SHARE_INFO_1004 *)buffer;
 
@@ -191,8 +216,8 @@ WERROR NetShareAdd_r(struct libnetapi_ctx *ctx,
 
 	switch (r->in.level) {
 		case 2:
-			break;
 		case 502:
+			break;
 		case 503:
 			return WERR_NOT_SUPPORTED;
 		default:
diff --git a/source3/lib/netapi/tests/netshare.c b/source3/lib/netapi/tests/netshare.c
index 84af9e0..a518ce9 100644
--- a/source3/lib/netapi/tests/netshare.c
+++ b/source3/lib/netapi/tests/netshare.c
@@ -124,6 +124,7 @@ NET_API_STATUS netapitest_share(struct libnetapi_ctx *ctx,
 	const char *sharename, *comment;
 	uint8_t *buffer = NULL;
 	struct SHARE_INFO_2 i2;
+	struct SHARE_INFO_502 i502;
 	struct SHARE_INFO_1004 i1004;
 	struct SHARE_INFO_501 *i501 = NULL;
 	uint32_t parm_err = 0;
@@ -142,6 +143,23 @@ NET_API_STATUS netapitest_share(struct libnetapi_ctx *ctx,
 
 	printf("testing NetShareAdd\n");
 
+	ZERO_STRUCT(i502);
+
+	i502.shi502_netname = sharename;
+	i502.shi502_path = "c:\\";
+
+	status = NetShareAdd(hostname, 502, (uint8_t *)&i502, &parm_err);
+	if (status) {
+		NETAPI_STATUS(ctx, status, "NetShareAdd");
+		goto out;
+	};
+
+	status = NetShareDel(hostname, sharename, 0);
+	if (status) {
+		NETAPI_STATUS(ctx, status, "NetShareDel");
+		goto out;
+	};
+
 	ZERO_STRUCT(i2);
 
 	i2.shi2_netname = sharename;
diff --git a/source3/librpc/idl/libnetapi.idl b/source3/librpc/idl/libnetapi.idl
index 9018d76..f29e666 100644
--- a/source3/librpc/idl/libnetapi.idl
+++ b/source3/librpc/idl/libnetapi.idl
@@ -1779,6 +1779,19 @@ interface libnetapi
 	} SHARE_INFO_501;
 
 	typedef struct {
+		string shi502_netname;
+		uint32 shi502_type;
+		string shi502_remark;
+		uint32 shi502_permissions;
+		uint32 shi502_max_uses;
+		uint32 shi502_current_uses;
+		string shi502_path;
+		string shi502_passwd;
+		uint32 shi502_reserved;
+		security_descriptor *shi502_security_descriptor;
+	} SHARE_INFO_502;
+
+	typedef struct {
 		string shi1004_remark;
 	} SHARE_INFO_1004;
 
-- 
1.8.4.2



More information about the samba-technical mailing list