merge from SAMBA_2_2
authorGerald Carter <jerry@samba.org>
Mon, 22 Apr 2002 18:47:36 +0000 (18:47 +0000)
committerGerald Carter <jerry@samba.org>
Mon, 22 Apr 2002 18:47:36 +0000 (18:47 +0000)
(This used to be commit 5e381abbbfaa15f3ebd89cba3cd9bb6de8e4ff4e)

source3/rpc_parse/parse_spoolss.c
source3/rpc_server/srv_spoolss.c
source3/rpc_server/srv_spoolss_nt.c

index b74ee3c5c589f41b763b4a556fcd02a70085b3cc..e9f0ca858a9791b4866343f02f24c3159801476c 100644 (file)
@@ -628,7 +628,6 @@ BOOL spoolss_io_devmode(char *desc, prs_struct *ps, int depth, DEVICEMODE *devmo
                        break;
                
                /* See the comments on the DEVMODE in the msdn GDI documentation */
-               /* (WINVER >= 0x0400) */
                case 0x0400:
                case 0x0401:
        if (!prs_uint32("icmmethod",        ps, depth, &devmode->icmmethod))
@@ -643,14 +642,10 @@ BOOL spoolss_io_devmode(char *desc, prs_struct *ps, int depth, DEVICEMODE *devmo
                return False;
        if (!prs_uint32("reserved2",        ps, depth, &devmode->reserved2))
                return False;
-
-                       /* (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400) */
-                       if (devmode->specversion == 0x401) {
        if (!prs_uint32("panningwidth",     ps, depth, &devmode->panningwidth))
                return False;
        if (!prs_uint32("panningheight",    ps, depth, &devmode->panningheight))
                return False;
-                       }
                        break;
 
                /* log an error if we see something else */
@@ -1726,12 +1721,19 @@ static uint32 size_of_relative_string(UNISTR *string)
        uint32 size=0;
        
        size=str_len_uni(string);       /* the string length       */
-       size=size+1;                    /* add the leading zero    */
+       size=size+1;                    /* add the trailing zero   */
        size=size*2;                    /* convert in char         */
-       /* Ensure size is 4 byte multiple (prs_align is being called...). */
-       size += ((4 - (size & 3)) & 3);
        size=size+4;                    /* add the size of the ptr */   
 
+#if 0  /* JERRY */
+       /* 
+        * Do not include alignment as Win2k does not align relative
+        * strings within a buffer   --jerry 
+        */
+       /* Ensure size is 4 byte multiple (prs_align is being called...). */
+       /* size += ((4 - (size & 3)) & 3); */
+#endif 
+
        return size;
 }
 
@@ -1759,32 +1761,6 @@ static uint32 size_of_systemtime(SYSTEMTIME *systime)
                return (sizeof(SYSTEMTIME) +4);
 }
 
-/*******************************************************************
- * write a UNICODE string.
- * used by all the RPC structs passing a buffer
- ********************************************************************/
-
-static BOOL spoolss_smb_io_unistr(char *desc, UNISTR *uni, prs_struct *ps, int depth)
-{
-       if (uni == NULL)
-               return False;
-
-       prs_debug(ps, depth, desc, "spoolss_smb_io_unistr");
-       depth++;
-       
-       /* there should be no align here as it can mess up
-          parsing a NEW_BUFFER->prs */
-#if 0  /* JERRY */
-       if (!prs_align(ps))
-               return False;
-#endif
-               
-       if (!prs_unistr("unistr", ps, depth, uni))
-               return False;
-
-       return True;
-}
-
 /*******************************************************************
  * write a UNICODE string and its relative pointer.
  * used by all the RPC structs passing a buffer
@@ -1816,8 +1792,14 @@ static BOOL smb_io_relstr(char *desc, NEW_BUFFER *buffer, int depth, UNISTR *str
                buffer->string_at_end -= (size_of_relative_string(string) - 4);
                if(!prs_set_offset(ps, buffer->string_at_end))
                        return False;
+#if 0  /* JERRY */
+               /*
+                * Win2k does not align strings in a buffer
+                * Tested against WinNT 4.0 SP 6a & 2k SP2  --jerry
+                */
                if (!prs_align(ps))
                        return False;
+#endif
                buffer->string_at_end = prs_offset(ps);
                
                /* write the string */
@@ -1844,7 +1826,7 @@ static BOOL smb_io_relstr(char *desc, NEW_BUFFER *buffer, int depth, UNISTR *str
                        return False;
 
                /* read the string */
-               if (!spoolss_smb_io_unistr(desc, string, ps, depth))
+               if (!smb_io_unistr(desc, string, ps, depth))
                        return False;
 
                if(!prs_set_offset(ps, old_offset))
@@ -1901,7 +1883,7 @@ static BOOL smb_io_relarraystr(char *desc, NEW_BUFFER *buffer, int depth, uint16
                        }
 
                        /* write the string */
-                       if (!spoolss_smb_io_unistr(desc, &chaine, ps, depth)) {
+                       if (!smb_io_unistr(desc, &chaine, ps, depth)) {
                                SAFE_FREE(chaine.buffer);
                                return False;
                        }
@@ -1940,7 +1922,7 @@ static BOOL smb_io_relarraystr(char *desc, NEW_BUFFER *buffer, int depth, uint16
                        return False;
        
                do {
-                       if (!spoolss_smb_io_unistr(desc, &chaine, ps, depth))
+                       if (!smb_io_unistr(desc, &chaine, ps, depth))
                                return False;
                        
                        l_chaine=str_len_uni(&chaine);
@@ -5032,11 +5014,6 @@ BOOL make_spoolss_q_addprinterdriver(TALLOC_CTX *mem_ctx,
                make_spoolss_driver_info_3(mem_ctx, &q_u->info.info_3, info->info3);
                break;
                
-       /* info level 6 is supported by WinME and Win2k */
-       case 6:
-               /* WRITEME!!  will add later  --jerry */
-               break;
-               
        default:
                DEBUG(0,("make_spoolss_q_addprinterdriver: Unknown info level [%d]\n", level));
                break;
index e6c152c66897ddc6be85c976e9525a9f48e37a9a..c7dc5d27ffb208b15a0d392e336525c3031cecf4 100755 (executable)
@@ -1451,11 +1451,7 @@ struct api_struct api_spoolss_cmds[] =
  {"SPOOLSS_SETPRINTERDATAEX",          SPOOLSS_SETPRINTERDATAEX,          api_spoolss_setprinterdataex          },
  {"SPOOLSS_ENUMPRINTERKEY",            SPOOLSS_ENUMPRINTERKEY,            api_spoolss_enumprinterkey            },
  {"SPOOLSS_ENUMPRINTERDATAEX",         SPOOLSS_ENUMPRINTERDATAEX,         api_spoolss_enumprinterdataex         },
-#if 0
- /* Disabled because it doesn't fix the bug I am looking at but it would be
-    a shame to throw away the code. -tpot */
  {"SPOOLSS_GETPRINTPROCESSORDIRECTORY",SPOOLSS_GETPRINTPROCESSORDIRECTORY,api_spoolss_getprintprocessordirectory},
-#endif
  { NULL,                               0,                                 NULL                                  }
 };
 
index 5fa45b0b446d6ec31822903ffb81369b13132397..d6ce06554845089ef50987e62629cc5401c3486a 100644 (file)
@@ -7807,13 +7807,7 @@ static WERROR getprintprocessordirectory_level_1(UNISTR2 *name,
        if((info=(PRINTPROCESSOR_DIRECTORY_1 *)malloc(sizeof(PRINTPROCESSOR_DIRECTORY_1))) == NULL)
                return WERR_NOMEM;
 
-       /* Not sure what to return here - are UNC names valid here?.
-          Windows returns the string: C:\WINNT\System32\spool\PRTPROCS\W32X86
-          which is pretty bogus for a RPC. */
-
-       slprintf(path, sizeof(path)-1, "\\\\%s\\print$\\%s", get_called_name(), short_archi);
-
-       DEBUG(4,("print processor directory: [%s]\n", path));
+       pstrcpy(path, "C:\\WINNT\\System32\\spool\\PRTPROCS\\W32X86");
 
        fill_printprocessordirectory_1(info, path);