svn commit: samba r18412 - in branches/SAMBA_4_0/source/rpc_server: common srvsvc

idra at samba.org idra at samba.org
Tue Sep 12 02:24:22 GMT 2006


Author: idra
Date: 2006-09-12 02:24:21 +0000 (Tue, 12 Sep 2006)
New Revision: 18412

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=18412

Log:

Implement NetiNameValidate but just for share name right now (type 9)

Simo.


Modified:
   branches/SAMBA_4_0/source/rpc_server/common/server_info.c
   branches/SAMBA_4_0/source/rpc_server/srvsvc/dcesrv_srvsvc.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/common/server_info.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/common/server_info.c	2006-09-12 00:46:35 UTC (rev 18411)
+++ branches/SAMBA_4_0/source/rpc_server/common/server_info.c	2006-09-12 02:24:21 UTC (rev 18412)
@@ -132,4 +132,13 @@
 	return talloc_strdup(mem_ctx, "c:\\");
 }
 
+#define INVALID_SHARE_NAME_CHARS " \"*+,./:;<=>?[\\]|"
 
+_PUBLIC_ bool dcesrv_common_validate_share_name(TALLOC_CTX *mem_ctx, const char *share_name)
+{
+	if (strpbrk(share_name, INVALID_SHARE_NAME_CHARS)) {
+		return False;
+	}
+
+	return True;
+}

Modified: branches/SAMBA_4_0/source/rpc_server/srvsvc/dcesrv_srvsvc.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/srvsvc/dcesrv_srvsvc.c	2006-09-12 00:46:35 UTC (rev 18411)
+++ branches/SAMBA_4_0/source/rpc_server/srvsvc/dcesrv_srvsvc.c	2006-09-12 02:24:21 UTC (rev 18412)
@@ -1273,7 +1273,47 @@
 static WERROR srvsvc_NetNameValidate(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
 		       struct srvsvc_NetNameValidate *r)
 {
-	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+	int len;
+
+	if ((r->in.flags != 0x0) && (r->in.flags != 0x80000000)) {
+		return WERR_INVALID_NAME;
+	}
+
+	switch (r->in.name_type) {
+	case 1:
+	case 2:
+	case 3:
+	case 4:
+	case 5:
+	case 6:
+	case 7:
+	case 8:
+		return WERR_NOT_SUPPORTED;
+
+	case 9: /* validate share name */
+
+		len = strlen_m(r->in.name);
+		if ((r->in.flags == 0x0) && (len > 81)) {
+			return WERR_INVALID_NAME;
+		}
+		if ((r->in.flags == 0x80000000) && (len > 13)) {
+			return WERR_INVALID_NAME;
+		}
+		if (! dcesrv_common_validate_share_name(mem_ctx, r->in.name)) {
+			return WERR_INVALID_NAME;
+		}
+		return WERR_OK;
+
+	case 10:
+	case 11:
+	case 12:
+	case 13:
+		return WERR_NOT_SUPPORTED;
+	default:
+		return WERR_INVALID_PARAM;
+	}
+
+	return WERR_INVALID_PARAM;
 }
 
 



More information about the samba-cvs mailing list