diff -uNrp samba-3.0.23d.org/source/rpc_server/srv_spoolss.c samba-3.0.23d/source/rpc_server/srv_spoolss.c
--- samba-3.0.23d.org/source/rpc_server/srv_spoolss.c	2006-04-20 11:29:27.000000000 +0900
+++ samba-3.0.23d/source/rpc_server/srv_spoolss.c	2007-02-01 15:02:55.000000000 +0900
@@ -910,6 +910,11 @@ static BOOL api_spoolss_addprinterdriver
 	ZERO_STRUCT(r_u);
 	
 	if(!spoolss_io_q_addprinterdriver("", &q_u, data, 0)) {
+		if (q_u.level != 3 && q_u.level != 6) {
+			DEBUG(3,("api_spoolss_addprinterdriver: unknown SPOOL_Q_ADDPRINTERDRIVER level %u.\n", (unsigned int)q_u.level));
+			setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_INVALID_TAG));
+			return True;
+		}
 		DEBUG(0,("spoolss_io_q_addprinterdriver: unable to unmarshall SPOOL_Q_ADDPRINTERDRIVER.\n"));
 		return False;
 	}
@@ -1477,6 +1482,11 @@ static BOOL api_spoolss_addprinterdriver
 	ZERO_STRUCT(r_u);
 	
 	if(!spoolss_io_q_addprinterdriverex("", &q_u, data, 0)) {
+		if (q_u.level != 3 && q_u.level != 6){
+			DEBUG(3,("api_spoolss_addprinterdriverex: unknown SPOOL_Q_ADDPRINTERDRIVEREX level %u.\n", (unsigned int)q_u.level ));
+			setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_INVALID_TAG));
+			return True;
+		}
 		DEBUG(0,("spoolss_io_q_addprinterdriverex: unable to unmarshall SPOOL_Q_ADDPRINTERDRIVEREX.\n"));
 		return False;
 	}
