summaryrefslogtreecommitdiffstats
path: root/source/rpc_server
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2002-08-19 21:17:22 +0000
committerGerald Carter <jerry@samba.org>2002-08-19 21:17:22 +0000
commit1ed6f68f6f29e1a62b12764ec5e84de8351efbd3 (patch)
tree5a3baa575bd891e6ab4d1f504e0c5627c3213489 /source/rpc_server
parent2d1c7797ffd413bf64e469356cd88bf550134f42 (diff)
downloadsamba-1ed6f68f6f29e1a62b12764ec5e84de8351efbd3.tar.gz
samba-1ed6f68f6f29e1a62b12764ec5e84de8351efbd3.tar.xz
samba-1ed6f68f6f29e1a62b12764ec5e84de8351efbd3.zip
add support for the "value,OID" format described in MSDN.
I've not seen this on a real network, but we support it now :-)
Diffstat (limited to 'source/rpc_server')
-rw-r--r--source/rpc_server/srv_spoolss_nt.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c
index ae478d7c686..ae7cf2d9530 100644
--- a/source/rpc_server/srv_spoolss_nt.c
+++ b/source/rpc_server/srv_spoolss_nt.c
@@ -7919,7 +7919,9 @@ WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u,
Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
fstring valuename;
fstring keyname;
-
+ char *oid_string;
+ UNISTR2 uni_oid;
+
DEBUG(4,("_spoolss_setprinterdataex\n"));
/* From MSDN documentation of SetPrinterDataEx: pass request to
@@ -7953,11 +7955,39 @@ WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u,
unistr2_to_ascii( valuename, &q_u->value, sizeof(valuename) - 1);
unistr2_to_ascii( keyname, &q_u->key, sizeof(keyname) - 1);
+
+ /* check for OID in valuename */
+
+ if ( (oid_string = strchr( valuename, ',' )) != NULL )
+ {
+ *oid_string = '\0';
+ oid_string++;
+ }
/* save the registry data */
status = set_printer_dataex( printer, keyname, valuename, type, data, real_len );
+
+ /* save the OID if one was specified and the previous set call succeeded */
+
+ if ( W_ERROR_IS_OK(status) && oid_string )
+ {
+ fstrcat( keyname, "\\" );
+ fstrcat( keyname, SPOOL_OID_KEY );
+
+ /*
+ * I'm not checking the status here on purpose. Don't know
+ * if this is right, but I'm returning the status from the
+ * previous set_printer_dataex() call. I have no idea if
+ * this is right. --jerry
+ */
+
+ init_unistr2( &uni_oid, oid_string, strlen(oid_string)+1 );
+ set_printer_dataex( printer, keyname, valuename,
+ REG_SZ, (void*)uni_oid.buffer, uni_oid.uni_str_len*sizeof(uint16) );
+ }
+
free_a_printer(&printer, 2);
return status;