svn commit: samba r10265 - in trunk/source: include rpc_parse rpc_server

jerry at samba.org jerry at samba.org
Fri Sep 16 14:49:10 GMT 2005


Author: jerry
Date: 2005-09-16 14:49:09 +0000 (Fri, 16 Sep 2005)
New Revision: 10265

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

Log:
<Met Dante for coffee this morning....>

* More work on the GetDeviceRegProperty() call.  Sometimes
  the client likes the reply and sometimes (even on the same)
  service, the client complains about an invalid Device ID.

<Still waiting for Virgil to show up....>


Modified:
   trunk/source/include/doserr.h
   trunk/source/include/rpc_ntsvcs.h
   trunk/source/rpc_parse/parse_ntsvcs.c
   trunk/source/rpc_server/srv_ntsvcs_nt.c


Changeset:
Modified: trunk/source/include/doserr.h
===================================================================
--- trunk/source/include/doserr.h	2005-09-16 14:47:21 UTC (rev 10264)
+++ trunk/source/include/doserr.h	2005-09-16 14:49:09 UTC (rev 10265)
@@ -5,6 +5,7 @@
    Copyright (C) John H Terpstra              1996-2000
    Copyright (C) Luke Kenneth Casson Leighton 1996-2000
    Copyright (C) Paul Ashton                  1998-2000
+   Copyright (C) Gerald (Jerry) Carter        2005
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -228,7 +229,12 @@
 #define WERR_PRINT_MONITOR_IN_USE W_ERROR(ERRprintmonitorinuse)
 #define WERR_PRINTER_HAS_JOBS_QUEUED W_ERROR(ERRprinterhasjobsqueued)
 
+/* Configuration Manager Errors */
+/* Basically Win32 errors meanings are specific to the \ntsvcs pipe */
 
+#define WERR_CM_NO_SUCH_VALUE W_ERROR(37)
+
+
 /* DFS errors */
 
 #ifndef NERR_BASE

Modified: trunk/source/include/rpc_ntsvcs.h
===================================================================
--- trunk/source/include/rpc_ntsvcs.h	2005-09-16 14:47:21 UTC (rev 10264)
+++ trunk/source/include/rpc_ntsvcs.h	2005-09-16 14:49:09 UTC (rev 10265)
@@ -87,21 +87,22 @@
 
 /**************************/
 
-#define DEVICE_REG_PROPERTY_DEVICENAME	1
+#define DEV_REGPROP_DESC	1
 
 typedef struct {
 	UNISTR2 devicepath;
 	uint32 property;
 	uint32 unknown2;
-	uint32 unknown3;
-	uint32 unknown4;
+	uint32 buffer_size1;
+	uint32 buffer_size2;
 	uint32 unknown5;
 } NTSVCS_Q_GET_DEVICE_REG_PROPERTY;
 
 typedef struct {
-	uint32 type;
+	uint32 unknown1;
 	REGVAL_BUFFER value;
 	uint32 size;
+	uint32 needed;
 	WERROR status;
 } NTSVCS_R_GET_DEVICE_REG_PROPERTY;
 

Modified: trunk/source/rpc_parse/parse_ntsvcs.c
===================================================================
--- trunk/source/rpc_parse/parse_ntsvcs.c	2005-09-16 14:47:21 UTC (rev 10264)
+++ trunk/source/rpc_parse/parse_ntsvcs.c	2005-09-16 14:49:09 UTC (rev 10265)
@@ -235,9 +235,9 @@
 		return False;
 	if ( !prs_uint32("unknown2", ps, depth, &q_u->unknown2) )
 		return False;
-	if ( !prs_uint32("unknown3", ps, depth, &q_u->unknown3) )
+	if ( !prs_uint32("buffer_size1", ps, depth, &q_u->buffer_size1) )
 		return False;
-	if ( !prs_uint32("unknown4", ps, depth, &q_u->unknown4) )
+	if ( !prs_uint32("buffer_size2", ps, depth, &q_u->buffer_size2) )
 		return False;
 	if ( !prs_uint32("unknown5", ps, depth, &q_u->unknown5) )
 		return False;
@@ -260,7 +260,7 @@
 	if ( !prs_align(ps) )
 		return False;
 
-	if ( !prs_uint32("type", ps, depth, &r_u->type) )
+	if ( !prs_uint32("unknown1", ps, depth, &r_u->unknown1) )
 		return False;
 
 	if ( !smb_io_regval_buffer("value", ps, depth, &r_u->value) )
@@ -270,7 +270,8 @@
 
 	if ( !prs_uint32("size", ps, depth, &r_u->size) )
 		return False;
-	if ( !prs_uint32("size", ps, depth, &r_u->size) )
+
+	if ( !prs_uint32("needed", ps, depth, &r_u->needed) )
 		return False;
 
 	if(!prs_werror("status", ps, depth, &r_u->status))

Modified: trunk/source/rpc_server/srv_ntsvcs_nt.c
===================================================================
--- trunk/source/rpc_server/srv_ntsvcs_nt.c	2005-09-16 14:47:21 UTC (rev 10264)
+++ trunk/source/rpc_server/srv_ntsvcs_nt.c	2005-09-16 14:49:09 UTC (rev 10265)
@@ -103,7 +103,7 @@
 	rpcstr_pull(devicepath, q_u->devicepath.buffer, sizeof(devicepath), q_u->devicepath.uni_str_len*2, 0);
 
 	switch( q_u->property ) {
-	case DEVICE_REG_PROPERTY_DEVICENAME:
+	case DEV_REGPROP_DESC:
 		/* just parse the service name from the device path and then 
 		   lookup the display name */
 		if ( !(ptr = strrchr_m( devicepath, '\\' )) )
@@ -122,15 +122,16 @@
 			return WERR_GENERAL_FAILURE;
 		}
 		
-		r_u->type = REG_SZ;
+		r_u->unknown1 = 0x1;	/* always 1...tested using a remove device manager connection */
 		r_u->size = reg_init_regval_buffer( &r_u->value, val );
+		r_u->needed = r_u->size;
 
 		TALLOC_FREE(values);
 
 		break;
 		
 	default:
-		return W_ERROR(37);	/* undocumented but this is what Windows 2000 returns */
+		return WERR_CM_NO_SUCH_VALUE;
 	}
 
 	return WERR_OK;



More information about the samba-cvs mailing list