Support printer info 7, used for publishing
authorJim McDonough <jmcd@samba.org>
Tue, 3 Dec 2002 19:48:18 +0000 (19:48 +0000)
committerJim McDonough <jmcd@samba.org>
Tue, 3 Dec 2002 19:48:18 +0000 (19:48 +0000)
source/include/rpc_spoolss.h
source/rpc_parse/parse_spoolss.c

index 456825a5f5c645668a14d0813a6fbecb7f872e91..067acd6c0f3efb071f18e86376a9ea6b08304c07 100755 (executable)
@@ -989,6 +989,13 @@ typedef struct printer_info_5
 }
 PRINTER_INFO_5;
 
+typedef struct printer_info_7
+{
+       UNISTR guid; /* text form of printer guid */
+       uint32 action;
+}
+PRINTER_INFO_7;
+
 typedef struct spool_q_enumprinters
 {
        uint32 flags;
@@ -1480,6 +1487,14 @@ typedef struct spool_printer_info_level_3
 }
 SPOOL_PRINTER_INFO_LEVEL_3;
 
+typedef struct spool_printer_info_level_7
+{
+       uint32 guid_ptr;
+       uint32 action;
+       UNISTR2 guid;
+}
+SPOOL_PRINTER_INFO_LEVEL_7;
+
 typedef struct spool_printer_info_level
 {
        uint32 level;
@@ -1487,6 +1502,7 @@ typedef struct spool_printer_info_level
        SPOOL_PRINTER_INFO_LEVEL_1 *info_1;
        SPOOL_PRINTER_INFO_LEVEL_2 *info_2;
        SPOOL_PRINTER_INFO_LEVEL_3 *info_3;
+       SPOOL_PRINTER_INFO_LEVEL_7 *info_7;
 }
 SPOOL_PRINTER_INFO_LEVEL;
 
index 91322a8fae18d560a6e2073b63ff779d6736d3bb..b3f136f7579946eb44c2e70966a75a18dfe52c1a 100644 (file)
@@ -2658,6 +2658,26 @@ BOOL smb_io_printer_info_5(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_5 *info,
        return True;
 }
 
+/*******************************************************************
+ Parse a PRINTER_INFO_7 structure.
+********************************************************************/  
+
+BOOL smb_io_printer_info_7(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_7 *info, int depth)
+{
+       prs_struct *ps=&buffer->prs;
+
+       prs_debug(ps, depth, desc, "smb_io_printer_info_7");
+       depth++;        
+       
+       buffer->struct_start=prs_offset(ps);
+       
+       if (!smb_io_relstr("guid", buffer, depth, &info->guid))
+               return False;
+       if (!prs_uint32("action", ps, depth, &info->action))
+               return False;
+       return True;
+}
+
 /*******************************************************************
  Parse a PORT_INFO_1 structure.
 ********************************************************************/  
@@ -3425,6 +3445,19 @@ uint32 spoolss_size_printer_info_3(PRINTER_INFO_3 *info)
 return the size required by a struct in the stream
 ********************************************************************/
 
+uint32 spoolss_size_printer_info_7(PRINTER_INFO_7 *info)
+{
+       uint32 size=0;
+               
+       size+=size_of_relative_string( &info->guid );
+       size+=size_of_uint32( &info->action );
+       return size;
+}
+
+/*******************************************************************
+return the size required by a struct in the stream
+********************************************************************/
+
 uint32 spoolss_size_printer_driver_info_1(DRIVER_INFO_1 *info)
 {
        int size=0;
@@ -4826,6 +4859,24 @@ BOOL spool_io_printer_info_level_2(char *desc, SPOOL_PRINTER_INFO_LEVEL_2 *il, p
        return True;
 }
 
+BOOL spool_io_printer_info_level_7(char *desc, SPOOL_PRINTER_INFO_LEVEL_7 *il, prs_struct *ps, int depth)
+{      
+       prs_debug(ps, depth, desc, "spool_io_printer_info_level_7");
+       depth++;
+               
+       if(!prs_align(ps))
+               return False;
+
+       if(!prs_uint32("guid_ptr", ps, depth, &il->guid_ptr))
+               return False;
+       if(!prs_uint32("action", ps, depth, &il->action))
+               return False;
+
+       if(!smb_io_unistr2("servername", &il->guid, il->guid_ptr, ps, depth))
+               return False;
+       return True;
+}
+
 /*******************************************************************
 ********************************************************************/  
 
@@ -4891,6 +4942,13 @@ BOOL spool_io_printer_info_level(char *desc, SPOOL_PRINTER_INFO_LEVEL *il, prs_s
                                return False;
                        break;          
                }
+               case 7:
+                       if (UNMARSHALLING(ps))
+                               if ((il->info_7=(SPOOL_PRINTER_INFO_LEVEL_7 *)prs_alloc_mem(ps,sizeof(SPOOL_PRINTER_INFO_LEVEL_7))) == NULL)
+                                       return False;
+                       if (!spool_io_printer_info_level_7("", il->info_7, ps, depth))
+                               return False;
+                       break;
        }
 
        return True;
@@ -6505,6 +6563,11 @@ void free_printer_info_5(PRINTER_INFO_5 *printer)
        SAFE_FREE(printer);
 }
 
+void free_printer_info_7(PRINTER_INFO_7 *printer)
+{
+       SAFE_FREE(printer);
+}
+
 void free_job_info_2(JOB_INFO_2 *job)
 {
     if (job!=NULL)