The branch, v3-2-test has been updated
       via  6a556fd73ac8c247c15df664f7910f8688abfdbc (commit)
       via  3052172d2bfe9d787777525e90816394aac2dd54 (commit)
       via  04aecde5cfdb00d5aa32f9675c797266aba83c0f (commit)
      from  0002a9e96b0ef78316295a6eb94ff29b64e2f988 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 6a556fd73ac8c247c15df664f7910f8688abfdbc
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Tue Nov 27 17:50:39 2007 -0800

    Fix old cut-and-paste bug where the wrong field was being written to.
    Jerry please check.
    Jeremy.

commit 3052172d2bfe9d787777525e90816394aac2dd54
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Tue Nov 27 17:48:59 2007 -0800

    Whitespace cleanup.
    Jeremy.

commit 04aecde5cfdb00d5aa32f9675c797266aba83c0f
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Tue Nov 27 17:48:44 2007 -0800

    Make init_unistr2_from_unistr take an explicit talloc context.
    Make init_unistr() re-use rpcstr_push_talloc().
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source/rpc_parse/parse_misc.c      |   17 +-
 source/rpc_parse/parse_spoolss.c   |   56 +-
 source/rpc_server/srv_spoolss_nt.c | 2076 ++++++++++++++++++------------------
 3 files changed, 1070 insertions(+), 1079 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/rpc_parse/parse_misc.c b/source/rpc_parse/parse_misc.c
index 2e85b59..783c7fb 100644
--- a/source/rpc_parse/parse_misc.c
+++ b/source/rpc_parse/parse_misc.c
@@ -430,16 +430,9 @@ void init_unistr(UNISTR *str, const char *buf)
                str->buffer = NULL;
                return;
        }
-               
-       len = strlen(buf) + 1;
 
-       if (len) {
-               str->buffer = TALLOC_ZERO_ARRAY(talloc_tos(), uint16, len);
-               if (str->buffer == NULL)
-                       smb_panic("init_unistr: malloc fail");
-
-               rpcstr_push(str->buffer, buf, len*sizeof(uint16), 
STR_TERMINATE);
-       } else {
+       len = rpcstr_push_talloc(talloc_tos(), &str->buffer, buf);
+       if (len == (size_t)-1) {
                str->buffer = NULL;
        }
 }
@@ -870,7 +863,7 @@ void init_unistr2_w(TALLOC_CTX *ctx, UNISTR2 *str, const 
smb_ucs2_t *buf)
  Inits a UNISTR2 structure from a UNISTR
 ********************************************************************/
 
-void init_unistr2_from_unistr(UNISTR2 *to, const UNISTR *from)
+void init_unistr2_from_unistr(TALLOC_CTX *ctx, UNISTR2 *to, const UNISTR *from)
 {
        uint32 i;
 
@@ -898,9 +891,9 @@ void init_unistr2_from_unistr(UNISTR2 *to, const UNISTR 
*from)
 
        /* allocate the space and copy the string buffer */
        if (i) {
-               to->buffer = TALLOC_ZERO_ARRAY(talloc_tos(), uint16, i);
+               to->buffer = TALLOC_ZERO_ARRAY(ctx, uint16, i);
                if (to->buffer == NULL)
-                       smb_panic("init_unistr2_from_unistr: malloc fail");
+                       smb_panic("init_unistr2_from_unistr: talloc fail");
                memcpy(to->buffer, from->buffer, i*sizeof(uint16));
        } else {
                to->buffer = NULL;
diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c
index 3030ff1..ea76c57 100644
--- a/source/rpc_parse/parse_spoolss.c
+++ b/source/rpc_parse/parse_spoolss.c
@@ -1016,18 +1016,18 @@ bool make_spoolss_q_addprinterex( TALLOC_CTX *mem_ctx, 
SPOOL_Q_ADDPRINTEREX *q_u
 create a SPOOL_PRINTER_INFO_2 stuct from a PRINTER_INFO_2 struct
 *******************************************************************/
 
-bool make_spoolss_printer_info_2(TALLOC_CTX *mem_ctx, 
SPOOL_PRINTER_INFO_LEVEL_2 **spool_info2, 
+bool make_spoolss_printer_info_2(TALLOC_CTX *ctx, SPOOL_PRINTER_INFO_LEVEL_2 
**spool_info2, 
                                PRINTER_INFO_2 *info)
 {
 
        SPOOL_PRINTER_INFO_LEVEL_2 *inf;
 
        /* allocate the necessary memory */
-       if (!(inf=TALLOC_P(mem_ctx, SPOOL_PRINTER_INFO_LEVEL_2))) {
+       if (!(inf=TALLOC_P(ctx, SPOOL_PRINTER_INFO_LEVEL_2))) {
                DEBUG(0,("make_spoolss_printer_info_2: Unable to allocate 
SPOOL_PRINTER_INFO_LEVEL_2 sruct!\n"));
                return False;
        }
-       
+
        inf->servername_ptr     = (info->servername.buffer!=NULL)?1:0;
        inf->printername_ptr    = (info->printername.buffer!=NULL)?1:0;
        inf->sharename_ptr      = (info->sharename.buffer!=NULL)?1:0;
@@ -1048,18 +1048,18 @@ bool make_spoolss_printer_info_2(TALLOC_CTX *mem_ctx, 
SPOOL_PRINTER_INFO_LEVEL_2
        inf->untiltime          = info->untiltime;
        inf->cjobs              = info->cjobs;
        inf->averageppm = info->averageppm;
-       init_unistr2_from_unistr(&inf->servername,      &info->servername);
-       init_unistr2_from_unistr(&inf->printername,     &info->printername);
-       init_unistr2_from_unistr(&inf->sharename,       &info->sharename);
-       init_unistr2_from_unistr(&inf->portname,        &info->portname);
-       init_unistr2_from_unistr(&inf->drivername,      &info->drivername);
-       init_unistr2_from_unistr(&inf->comment,         &info->comment);
-       init_unistr2_from_unistr(&inf->location,        &info->location);
-       init_unistr2_from_unistr(&inf->sepfile,         &info->sepfile);
-       init_unistr2_from_unistr(&inf->printprocessor,  &info->printprocessor);
-       init_unistr2_from_unistr(&inf->datatype,        &info->datatype);
-       init_unistr2_from_unistr(&inf->parameters,      &info->parameters);
-       init_unistr2_from_unistr(&inf->datatype,        &info->datatype);
+       init_unistr2_from_unistr(inf, &inf->servername, &info->servername);
+       init_unistr2_from_unistr(inf, &inf->printername, &info->printername);
+       init_unistr2_from_unistr(inf, &inf->sharename, &info->sharename);
+       init_unistr2_from_unistr(inf, &inf->portname, &info->portname);
+       init_unistr2_from_unistr(inf, &inf->drivername, &info->drivername);
+       init_unistr2_from_unistr(inf, &inf->comment, &info->comment);
+       init_unistr2_from_unistr(inf, &inf->location, &info->location);
+       init_unistr2_from_unistr(inf, &inf->sepfile, &info->sepfile);
+       init_unistr2_from_unistr(inf, &inf->printprocessor, 
&info->printprocessor);
+       init_unistr2_from_unistr(inf, &inf->datatype, &info->datatype);
+       init_unistr2_from_unistr(inf, &inf->parameters, &info->parameters);
+       init_unistr2_from_unistr(inf, &inf->datatype, &info->datatype);
 
        *spool_info2 = inf;
 
@@ -1105,9 +1105,9 @@ bool make_spoolss_printer_info_7(TALLOC_CTX *mem_ctx, 
SPOOL_PRINTER_INFO_LEVEL_7
                return False;
        }
 
-       inf->guid_ptr           = (info->guid.buffer!=NULL)?1:0;
-       inf->action             = info->action;
-       init_unistr2_from_unistr(&inf->guid,            &info->guid);
+       inf->guid_ptr = (info->guid.buffer!=NULL)?1:0;
+       inf->action = info->action;
+       init_unistr2_from_unistr(inf, &inf->guid, &info->guid);
 
        *spool_info7 = inf;
 
@@ -5182,7 +5182,7 @@ bool make_spoolss_q_addprinterdriver(TALLOC_CTX *mem_ctx,
        return True;
 }
 
-bool make_spoolss_driver_info_3(TALLOC_CTX *mem_ctx, 
+bool make_spoolss_driver_info_3(TALLOC_CTX *mem_ctx,
        SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **spool_drv_info,
                                DRIVER_INFO_3 *info3)
 {
@@ -5191,7 +5191,7 @@ bool make_spoolss_driver_info_3(TALLOC_CTX *mem_ctx,
 
        if (!(inf=TALLOC_ZERO_P(mem_ctx, SPOOL_PRINTER_DRIVER_INFO_LEVEL_3)))
                return False;
-       
+
        inf->cversion   = info3->version;
        inf->name_ptr   = (info3->name.buffer!=NULL)?1:0;
        inf->environment_ptr    = (info3->architecture.buffer!=NULL)?1:0;
@@ -5202,14 +5202,14 @@ bool make_spoolss_driver_info_3(TALLOC_CTX *mem_ctx,
        inf->monitorname_ptr    = (info3->monitorname.buffer!=NULL)?1:0;
        inf->defaultdatatype_ptr        = 
(info3->defaultdatatype.buffer!=NULL)?1:0;
 
-       init_unistr2_from_unistr(&inf->name, &info3->name);
-       init_unistr2_from_unistr(&inf->environment, &info3->architecture);
-       init_unistr2_from_unistr(&inf->driverpath, &info3->driverpath);
-       init_unistr2_from_unistr(&inf->datafile, &info3->datafile);
-       init_unistr2_from_unistr(&inf->configfile, &info3->configfile);
-       init_unistr2_from_unistr(&inf->helpfile, &info3->helpfile);
-       init_unistr2_from_unistr(&inf->monitorname, &info3->monitorname);
-       init_unistr2_from_unistr(&inf->defaultdatatype, 
&info3->defaultdatatype);
+       init_unistr2_from_unistr(inf, &inf->name, &info3->name);
+       init_unistr2_from_unistr(inf, &inf->environment, &info3->architecture);
+       init_unistr2_from_unistr(inf, &inf->driverpath, &info3->driverpath);
+       init_unistr2_from_unistr(inf, &inf->datafile, &info3->datafile);
+       init_unistr2_from_unistr(inf, &inf->configfile, &info3->configfile);
+       init_unistr2_from_unistr(inf, &inf->helpfile, &info3->helpfile);
+       init_unistr2_from_unistr(inf, &inf->monitorname, &info3->monitorname);
+       init_unistr2_from_unistr(inf, &inf->defaultdatatype, 
&info3->defaultdatatype);
 
        if (info3->dependentfiles) {
                bool done = False;
diff --git a/source/rpc_server/srv_spoolss_nt.c 
b/source/rpc_server/srv_spoolss_nt.c
index d497312..a6f3bfb 100644
--- a/source/rpc_server/srv_spoolss_nt.c
+++ b/source/rpc_server/srv_spoolss_nt.c
@@ -50,7 +50,7 @@ static Printer_entry *printers_list;
 typedef struct _counter_printer_0 {
        struct _counter_printer_0 *next;
        struct _counter_printer_0 *prev;
-       
+
        int snum;
        uint32 counter;
 } counter_printer_0;
@@ -139,7 +139,7 @@ static void srv_spoolss_replycloseprinter(int snum, 
POLICY_HND *handle)
 {
        WERROR result;
 
-       /* 
+       /*
         * Tell the specific printing tdb we no longer want messages for this 
printer
         * by deregistering our PID.
         */
@@ -154,7 +154,7 @@ static void srv_spoolss_replycloseprinter(int snum, 
POLICY_HND *handle)
        }
 
        result = rpccli_spoolss_reply_close_printer(notify_cli_pipe, 
notify_cli_pipe->cli->mem_ctx, handle);
-       
+
        if (!W_ERROR_IS_OK(result))
                DEBUG(0,("srv_spoolss_replycloseprinter: reply_close_printer 
failed [%s].\n",
                        dos_errstr(result)));
@@ -206,10 +206,10 @@ static void free_printer_entry(void *ptr)
        free_spool_notify_option(&Printer->notify.option);
        Printer->notify.option=NULL;
        Printer->notify.client_connected=False;
-       
+
        free_nt_devicemode( &Printer->nt_devmode );
        free_a_printer( &Printer->printer_info, 2 );
-       
+
        talloc_destroy( Printer->ctx );
 
        /* Remove from the internal list. */
@@ -279,7 +279,7 @@ static bool close_printer_handle(pipes_struct *p, 
POLICY_HND *hnd)
        close_policy_hnd(p, hnd);
 
        return True;
-}      
+}
 
 /****************************************************************************
  Delete a printer given a handle.
@@ -291,46 +291,46 @@ WERROR delete_printer_hook( NT_USER_TOKEN *token, const 
char *sharename )
        int ret;
        SE_PRIV se_printop = SE_PRINT_OPERATOR;
        bool is_print_op = False;
-               
+
        /* can't fail if we don't try */
-       
+
        if ( !*cmd )
                return WERR_OK;
-               
+
        pstr_sprintf(command, "%s \"%s\"", cmd, sharename);
 
        if ( token )
                is_print_op = user_has_privileges( token, &se_printop );
-       
+
        DEBUG(10,("Running [%s]\n", command));
 
        /********** BEGIN SePrintOperatorPrivlege BLOCK **********/
-       
+
        if ( is_print_op )
                become_root();
-               
+
        if ( (ret = smbrun(command, NULL)) == 0 ) {
                /* Tell everyone we updated smb.conf. */
                message_send_all(smbd_messaging_context(),
                                 MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
        }
-               
+
        if ( is_print_op )
                unbecome_root();
 
        /********** END SePrintOperatorPrivlege BLOCK **********/
-       
+
        DEBUGADD(10,("returned [%d]\n", ret));
 
-       if (ret != 0) 
+       if (ret != 0)
                return WERR_BADFID; /* What to return here? */
 
        /* go ahead and re-read the services immediately */
        reload_services( False );
-       
+
        if ( lp_servicenumber( sharename )  < 0 )
                return WERR_ACCESS_DENIED;
-               
+
        return WERR_OK;
 }
 
@@ -347,7 +347,7 @@ static WERROR delete_printer_handle(pipes_struct *p, 
POLICY_HND *hnd)
                return WERR_BADFID;
        }
 
-       /* 
+       /*
         * It turns out that Windows allows delete printer on a handle
         * opened by an admin user, then used on a pipe handle created
         * by an anonymous user..... but they're working on security.... 
riiight !
@@ -358,10 +358,10 @@ static WERROR delete_printer_handle(pipes_struct *p, 
POLICY_HND *hnd)
                DEBUG(3, ("delete_printer_handle: denied by handle\n"));
                return WERR_ACCESS_DENIED;
        }
-       
-       /* this does not need a become root since the access check has been 
+
+       /* this does not need a become root since the access check has been
           done on the handle already */
-          
+
        if (del_a_printer( Printer->sharename ) != 0) {
                DEBUG(3,("Error deleting printer %s\n", Printer->sharename));
                return WERR_BADFID;
@@ -378,15 +378,15 @@ static bool get_printer_snum(pipes_struct *p, POLICY_HND 
*hnd, int *number,
                             struct share_params **params)
 {
        Printer_entry *Printer = find_printer_index_by_hnd(p, hnd);
-               
+
        if (!Printer) {
                DEBUG(2,("get_printer_snum: Invalid handle (%s:%u:%u)\n", 
OUR_HANDLE(hnd)));
                return False;
        }
-       
+
        switch (Printer->printer_type) {
-               case SPLHND_PRINTER:            
-                       DEBUG(4,("short name:%s\n", Printer->sharename));       
                
+               case SPLHND_PRINTER:
+                       DEBUG(4,("short name:%s\n", Printer->sharename));
                        *number = print_queue_snum(Printer->sharename);
                        return (*number != -1);
                case SPLHND_SERVER:
@@ -413,7 +413,7 @@ static bool set_printer_hnd_printertype(Printer_entry 
*Printer, char *handlename
        /* it's a print server */
        if (*handlename=='\\' && *(handlename+1)=='\\' && 
!strchr_m(handlename+2, '\\')) {
                DEBUGADD(4,("Printer is a print server\n"));
-               Printer->printer_type = SPLHND_SERVER;          
+               Printer->printer_type = SPLHND_SERVER;
        }
        /* it's a printer (set_printer_hnd_name() will handle port monitors */
        else {
@@ -425,9 +425,9 @@ static bool set_printer_hnd_printertype(Printer_entry 
*Printer, char *handlename
 }
 
 /****************************************************************************
- Set printer handle name..  Accept names like \\server, \\server\printer, 
+ Set printer handle name..  Accept names like \\server, \\server\printer,
  \\server\SHARE, & "\\server\,XcvMonitor Standard TCP/IP Port"    See
- the MSDN docs regarding OpenPrinter() for details on the XcvData() and 
+ the MSDN docs regarding OpenPrinter() for details on the XcvData() and
  XcvDataPort() interface.
 ****************************************************************************/
 
@@ -441,7 +441,7 @@ static bool set_printer_hnd_name(Printer_entry *Printer, 
char *handlename)
        bool found=False;
        NT_PRINTER_INFO_LEVEL *printer = NULL;
        WERROR result;
-       
+
        DEBUG(4,("Setting printer name=%s (len=%lu)\n", handlename, (unsigned 
long)strlen(handlename)));
 
        aprinter = handlename;
@@ -455,14 +455,14 @@ static bool set_printer_hnd_name(Printer_entry *Printer, 
char *handlename)
        else {
                servername = "";
        }
-       
+
        /* save the servername to fill in replies on this handle */
-       
+
        if ( !is_myname_or_ipaddr( servername ) )
                return False;
 
        fstrcpy( Printer->servername, servername );
-       
+
        if ( Printer->printer_type == SPLHND_SERVER )
                return True;
 
@@ -470,9 +470,9 @@ static bool set_printer_hnd_name(Printer_entry *Printer, 
char *handlename)
                return False;
 
        DEBUGADD(5, ("searching for [%s]\n", aprinter ));
-       
+
        /* check for the Port Monitor Interface */
-       
+
        if ( strequal( aprinter, SPL_XCV_MONITOR_TCPMON ) ) {
                Printer->printer_type = SPLHND_PORTMON_TCP;
                fstrcpy(sname, SPL_XCV_MONITOR_TCPMON);
@@ -484,12 +484,12 @@ static bool set_printer_hnd_name(Printer_entry *Printer, 
char *handlename)
                found = True;
        }
 
-       /* Search all sharenames first as this is easier than pulling 
+       /* Search all sharenames first as this is easier than pulling
           the printer_info_2 off of disk. Don't use find_service() since
           that calls out to map_username() */
-       
+
        /* do another loop to look for printernames */
-       
+
        for (snum=0; !found && snum<n_services; snum++) {
 
                /* no point going on if this is not a printer */
@@ -505,7 +505,7 @@ static bool set_printer_hnd_name(Printer_entry *Printer, 
char *handlename)
 
                /* no point looking up the printer object if
                   we aren't allowing printername != sharename */
-               
+
                if ( lp_force_printername(snum) )
                        continue;
 
@@ -518,7 +518,7 @@ static bool set_printer_hnd_name(Printer_entry *Printer, 
char *handlename)
                                sname, dos_errstr(result)));
                        continue;
                }
-               
+
                /* printername is always returned as \\server\printername */
                if ( !(printername = strchr_m(&printer->info_2->printername[2], 
'\\')) ) {
                        DEBUG(0,("set_printer_hnd_name: info2->printername in 
wrong format! [%s]\n",
@@ -526,17 +526,17 @@ static bool set_printer_hnd_name(Printer_entry *Printer, 
char *handlename)
                        free_a_printer( &printer, 2);
                        continue;
                }
-               
+
                printername++;
-               
+
                if ( strequal(printername, aprinter) ) {
                        free_a_printer( &printer, 2);
                        found = True;
                        break;
                }
-               
+
                DEBUGADD(10, ("printername: %s\n", printername));
-               
+
                free_a_printer( &printer, 2);
        }
 
@@ -546,7 +546,7 @@ static bool set_printer_hnd_name(Printer_entry *Printer, 
char *handlename)
                DEBUGADD(4,("Printer not found\n"));
                return False;
        }
-       
+
        DEBUGADD(4,("set_printer_hnd_name: Printer found: %s -> %s\n", 
aprinter, sname));
 
        fstrcpy(Printer->sharename, sname);
@@ -568,28 +568,28 @@ static bool open_printer_hnd(pipes_struct *p, POLICY_HND 
*hnd, char *name, uint3
                return False;
 
        ZERO_STRUCTP(new_printer);
-       
+
        if (!create_policy_hnd(p, hnd, free_printer_entry, new_printer)) {
                SAFE_FREE(new_printer);
                return False;
        }
-       
+
        /* Add to the internal list. */
        DLIST_ADD(printers_list, new_printer);
-       
+
        new_printer->notify.option=NULL;
-                               
+
        if ( !(new_printer->ctx = talloc_init("Printer Entry [%p]", hnd)) ) {
                DEBUG(0,("open_printer_hnd: talloc_init() failed!\n"));
                close_printer_handle(p, hnd);
                return False;
        }
-       
+
        if (!set_printer_hnd_printertype(new_printer, name)) {
                close_printer_handle(p, hnd);
                return False;
        }
-       
+
        if (!set_printer_hnd_name(new_printer, name)) {
                close_printer_handle(p, hnd);
                return False;
@@ -619,10 +619,10 @@ static bool is_monitoring_event(Printer_entry *p, uint16 
notify_type,
        SPOOL_NOTIFY_OPTION *option = p->notify.option;
        uint32 i, j;
 
-       /* 
+       /*
         * Flags should always be zero when the change notify
         * is registered by the client's spooler.  A user Win32 app
-        * might use the flags though instead of the NOTIFY_OPTION_INFO 
+        * might use the flags though instead of the NOTIFY_OPTION_INFO
         * --jerry
         */
 
@@ -635,24 +635,24 @@ static bool is_monitoring_event(Printer_entry *p, uint16 
notify_type,
                        p->notify.flags, notify_type, notify_field);
 
        for (i = 0; i < option->count; i++) {
-               
+
                /* Check match for notify_type */
-               
+
                if (option->ctr.type[i].type != notify_type)
                        continue;
 
                /* Check match for field */
-               
+
                for (j = 0; j < option->ctr.type[i].count; j++) {
                        if (option->ctr.type[i].fields[j] == notify_field) {
                                return True;


-- 
Samba Shared Repository

Reply via email to