* We must return 0x2 as the majorversion for nt4 to upload drivers
authorGerald Carter <jerry@samba.org>
Fri, 11 Apr 2003 23:48:24 +0000 (23:48 +0000)
committerGerald Carter <jerry@samba.org>
Fri, 11 Apr 2003 23:48:24 +0000 (23:48 +0000)
* fix bug found by clobber_region()
(This used to be commit b2e29c7bd45f8f33d9ed58fe75bbf5ffc78350f5)

source3/rpc_server/srv_spoolss_nt.c
source3/smbd/reply.c

index 90090efde8dc023672a783da4ea2ac6e66d19a0b..b0529fea81d30a383a4ca71f0c96036de03bcc9f 100644 (file)
@@ -2307,7 +2307,17 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
                *type = 0x4;
                if((*data = (uint8 *)talloc(ctx, 4*sizeof(uint8) )) == NULL)
                        return WERR_NOMEM;
-               SIVAL(*data, 0, 3);
+
+               /* Windows NT 4.0 seems to not allow uploading of drivers
+                  to a server that reports 0x3 as the MajorVersion.
+                  need to investigate more how Win2k gets around this .
+                  -- jerry */
+
+               if ( RA_WINNT == get_remote_arch() )
+                       SIVAL(*data, 0, 2);
+               else
+                       SIVAL(*data, 0, 3);
+               
                *needed = 0x4;
                return WERR_OK;
        }
index c4147f78b1dd8497a3bc0e0e45c81aac1e2011b3..0ccb4d0e9d2c487fa533efa0bd82726d7b9733a0 100644 (file)
@@ -3045,20 +3045,22 @@ int reply_rmdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,
  Resolve wildcards in a filename rename.
 ********************************************************************/
 
-static BOOL resolve_wildcards(char *name1,char *name2)
+static BOOL resolve_wildcards(const char *name1, char *name2)
 {
        fstring root1,root2;
        fstring ext1,ext2;
-       char *p,*p2;
+       char *p,*p2, *pname1, *pname2;
+       int available_space;
+       
 
-       name1 = strrchr_m(name1,'/');
-       name2 = strrchr_m(name2,'/');
+       pname1 = strrchr_m(name1,'/');
+       pname2 = strrchr_m(name2,'/');
 
-       if (!name1 || !name2)
+       if (!pname1 || !pname2)
                return(False);
   
-       fstrcpy(root1,name1);
-       fstrcpy(root2,name2);
+       fstrcpy(root1,pname1);
+       fstrcpy(root2,pname2);
        p = strrchr_m(root1,'.');
        if (p) {
                *p = 0;
@@ -3100,10 +3102,13 @@ static BOOL resolve_wildcards(char *name1,char *name2)
                        p++;
        }
 
-       pstrcpy(name2,root2);
+       available_space = sizeof(pstring) - PTR_DIFF(pname2, name2);
+       
+       StrnCpy(pname2, root2, available_space-1);
+       available_space -= strlen(root2);
        if (ext2[0]) {
-               pstrcat(name2,".");
-               pstrcat(name2,ext2);
+               strncat(pname2, ".", available_space-1);
+               strncat(pname2, ext2, available_space-2);
        }
 
        return(True);