The branch, master has been updated
       via  c71fa39c29ee64b80adf92090a61c81f323742b9 (commit)
       via  286ec6847b623ddd33d2fb7690c994feb4e3e17a (commit)
       via  8c569b59f0c8ed1d1d65fd49561201d035f20fb5 (commit)
      from  e9c42e3c21cdc1fa25a05ef0f2edc4ca9b0b486e (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit c71fa39c29ee64b80adf92090a61c81f323742b9
Author: Günther Deschner <[email protected]>
Date:   Thu Feb 19 10:44:42 2009 +0100

    s3-spoolss: remove old spoolss_GetPrintProcessorDirectory.
    
    Guenther

commit 286ec6847b623ddd33d2fb7690c994feb4e3e17a
Author: Günther Deschner <[email protected]>
Date:   Thu Feb 19 10:42:49 2009 +0100

    s3-spoolss: use pidl for _spoolss_GetPrintProcessorDirectory.
    
    Guenther.

commit 8c569b59f0c8ed1d1d65fd49561201d035f20fb5
Author: Günther Deschner <[email protected]>
Date:   Thu Feb 19 10:26:00 2009 +0100

    s3-rpcclient: use rpccli_spoolss_GetPrintProcessorDirectory in rpcclient.
    
    Guenther

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

Summary of changes:
 source3/include/proto.h             |   10 ---
 source3/include/rpc_spoolss.h       |   29 --------
 source3/rpc_client/cli_spoolss.c    |   58 ---------------
 source3/rpc_parse/parse_spoolss.c   |  137 -----------------------------------
 source3/rpc_server/srv_spoolss.c    |   22 +------
 source3/rpc_server/srv_spoolss_nt.c |  106 ++++++++++++----------------
 source3/rpcclient/cmd_spoolss.c     |   43 +++++++++---
 7 files changed, 79 insertions(+), 326 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 80db935..63adbf5 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5497,10 +5497,6 @@ WERROR rpccli_spoolss_addprinterdriver (struct 
rpc_pipe_client *cli,
                                     PRINTER_DRIVER_CTR *ctr);
 WERROR rpccli_spoolss_addprinterex (struct rpc_pipe_client *cli, TALLOC_CTX 
*mem_ctx,
                                 uint32 level, PRINTER_INFO_CTR*ctr);
-WERROR rpccli_spoolss_getprintprocessordirectory(struct rpc_pipe_client *cli,
-                                             TALLOC_CTX *mem_ctx,
-                                             char *name, char *environment,
-                                             fstring procdir);
 WERROR rpccli_spoolss_enumforms(struct rpc_pipe_client *cli, TALLOC_CTX 
*mem_ctx,
                             POLICY_HND *handle, int level, uint32 *num_forms,
                             FORM_1 **forms);
@@ -5885,7 +5881,6 @@ uint32 spoolss_size_job_info_1(JOB_INFO_1 *info);
 uint32 spoolss_size_job_info_2(JOB_INFO_2 *info);
 uint32 spoolss_size_form_1(FORM_1 *info);
 uint32 spoolss_size_port_info_1(PORT_INFO_1 *info);
-uint32 spoolss_size_printprocessordirectory_info_1(PRINTPROCESSOR_DIRECTORY_1 
*info);
 uint32 spoolss_size_port_info_2(PORT_INFO_2 *info);
 uint32 spoolss_size_printprocessor_info_1(PRINTPROCESSOR_1 *info);
 uint32 spoolss_size_printprocdatatype_info_1(PRINTPROCDATATYPE_1 *info);
@@ -6018,10 +6013,6 @@ bool spoolss_io_q_enumprinterkey(const char *desc, 
SPOOL_Q_ENUMPRINTERKEY *q_u,
 bool spoolss_io_r_enumprinterkey(const char *desc, SPOOL_R_ENUMPRINTERKEY 
*r_u, prs_struct *ps, int depth);
 bool spoolss_io_q_enumprinterdataex(const char *desc, 
SPOOL_Q_ENUMPRINTERDATAEX *q_u, prs_struct *ps, int depth);
 bool spoolss_io_r_enumprinterdataex(const char *desc, 
SPOOL_R_ENUMPRINTERDATAEX *r_u, prs_struct *ps, int depth);
-bool 
make_spoolss_q_getprintprocessordirectory(SPOOL_Q_GETPRINTPROCESSORDIRECTORY 
*q_u, const char *name, char *environment, int level, RPC_BUFFER *buffer, 
uint32 offered);
-bool spoolss_io_q_getprintprocessordirectory(const char *desc, 
SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, prs_struct *ps, int depth);
-bool spoolss_io_r_getprintprocessordirectory(const char *desc, 
SPOOL_R_GETPRINTPROCESSORDIRECTORY *r_u, prs_struct *ps, int depth);
-bool smb_io_printprocessordirectory_1(const char *desc, RPC_BUFFER *buffer, 
PRINTPROCESSOR_DIRECTORY_1 *info, int depth);
 bool make_spoolss_q_enumforms(SPOOL_Q_ENUMFORMS *q_u, POLICY_HND *handle, 
                              uint32 level, RPC_BUFFER *buffer,
                              uint32 offered);
@@ -6245,7 +6236,6 @@ WERROR _spoolss_enumprintmonitors(pipes_struct *p, 
SPOOL_Q_ENUMPRINTMONITORS *q_
 WERROR _spoolss_getjob( pipes_struct *p, SPOOL_Q_GETJOB *q_u, SPOOL_R_GETJOB 
*r_u);
 WERROR _spoolss_enumprinterkey(pipes_struct *p, SPOOL_Q_ENUMPRINTERKEY *q_u, 
SPOOL_R_ENUMPRINTERKEY *r_u);
 WERROR _spoolss_enumprinterdataex(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATAEX 
*q_u, SPOOL_R_ENUMPRINTERDATAEX *r_u);
-WERROR _spoolss_getprintprocessordirectory(pipes_struct *p, 
SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, SPOOL_R_GETPRINTPROCESSORDIRECTORY 
*r_u);
 
 /* The following definitions come from rpc_server/srv_srvsvc_nt.c  */
 
diff --git a/source3/include/rpc_spoolss.h b/source3/include/rpc_spoolss.h
index 24a3377..d7d93e3 100644
--- a/source3/include/rpc_spoolss.h
+++ b/source3/include/rpc_spoolss.h
@@ -1438,34 +1438,5 @@ typedef struct spool_r_enumprinterdataex
 }
 SPOOL_R_ENUMPRINTERDATAEX;
 
-typedef struct printprocessor_directory_1
-{
-       UNISTR name;
-}
-PRINTPROCESSOR_DIRECTORY_1;
-
-typedef struct spool_q_getprintprocessordirectory
-{
-       UNISTR2 name;
-       UNISTR2 environment;
-       uint32 level;
-       RPC_BUFFER *buffer;
-       uint32 offered;
-}
-SPOOL_Q_GETPRINTPROCESSORDIRECTORY;
-
-typedef struct spool_r_getprintprocessordirectory
-{
-       RPC_BUFFER *buffer;
-       uint32 needed;
-       WERROR status;
-}
-SPOOL_R_GETPRINTPROCESSORDIRECTORY;
-
-/**************************************/
-
-#define PRINTER_DRIVER_VERSION 2
-#define PRINTER_DRIVER_ARCHITECTURE "Windows NT x86"
-
 #endif /* _RPC_SPOOLSS_H */
 
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c
index 23ac690..489b9ca 100644
--- a/source3/rpc_client/cli_spoolss.c
+++ b/source3/rpc_client/cli_spoolss.c
@@ -967,64 +967,6 @@ WERROR rpccli_spoolss_addprinterex (struct rpc_pipe_client 
*cli, TALLOC_CTX *mem
 /**********************************************************************
 **********************************************************************/
 
-WERROR rpccli_spoolss_getprintprocessordirectory(struct rpc_pipe_client *cli,
-                                             TALLOC_CTX *mem_ctx,
-                                             char *name, char *environment,
-                                             fstring procdir)
-{
-       prs_struct qbuf, rbuf;
-       SPOOL_Q_GETPRINTPROCESSORDIRECTORY in;
-       SPOOL_R_GETPRINTPROCESSORDIRECTORY out;
-       int level = 1;
-       RPC_BUFFER buffer;
-       uint32 offered;
-
-       ZERO_STRUCT(in);
-       ZERO_STRUCT(out);
-
-       offered = 0;
-       if (!rpcbuf_init(&buffer, offered, mem_ctx))
-               return WERR_NOMEM;
-       make_spoolss_q_getprintprocessordirectory( &in, name, 
-               environment, level, &buffer, offered );
-
-       CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, 
SPOOLSS_GETPRINTPROCESSORDIRECTORY,
-                   in, out, 
-                   qbuf, rbuf,
-                   spoolss_io_q_getprintprocessordirectory,
-                   spoolss_io_r_getprintprocessordirectory, 
-                   WERR_GENERAL_FAILURE );
-                   
-       if ( W_ERROR_EQUAL( out.status, WERR_INSUFFICIENT_BUFFER ) ) {
-               offered = out.needed;
-               
-               ZERO_STRUCT(in);
-               ZERO_STRUCT(out);
-               
-               if (!rpcbuf_init(&buffer, offered, mem_ctx))
-                       return WERR_NOMEM;
-               make_spoolss_q_getprintprocessordirectory( &in, name, 
-                       environment, level, &buffer, offered );
-
-               CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, 
SPOOLSS_GETPRINTPROCESSORDIRECTORY,
-                           in, out, 
-                           qbuf, rbuf,
-                           spoolss_io_q_getprintprocessordirectory,
-                           spoolss_io_r_getprintprocessordirectory, 
-                           WERR_GENERAL_FAILURE );
-       }
-       
-       if ( !W_ERROR_IS_OK(out.status) )
-               return out.status;
-       
-       fstrcpy(procdir, "Not implemented!");
-       
-       return out.status;
-}
-
-/**********************************************************************
-**********************************************************************/
-
 WERROR rpccli_spoolss_enumforms(struct rpc_pipe_client *cli, TALLOC_CTX 
*mem_ctx,
                             POLICY_HND *handle, int level, uint32 *num_forms,
                             FORM_1 **forms)
diff --git a/source3/rpc_parse/parse_spoolss.c 
b/source3/rpc_parse/parse_spoolss.c
index 19738cf..b798eef 100644
--- a/source3/rpc_parse/parse_spoolss.c
+++ b/source3/rpc_parse/parse_spoolss.c
@@ -2472,21 +2472,6 @@ uint32 spoolss_size_port_info_1(PORT_INFO_1 *info)
 return the size required by a struct in the stream
 ********************************************************************/  
 
-uint32 spoolss_size_printprocessordirectory_info_1(PRINTPROCESSOR_DIRECTORY_1 
*info)
-{
-       int size=0;
-
-       size=str_len_uni(&info->name);  /* the string length       */
-       size=size+1;                    /* add the leading zero    */
-       size=size*2;                    /* convert in char         */
-
-       return size;
-}
-
-/*******************************************************************
-return the size required by a struct in the stream
-********************************************************************/  
-
 uint32 spoolss_size_port_info_2(PORT_INFO_2 *info)
 {
        int size=0;
@@ -5240,128 +5225,6 @@ bool spoolss_io_r_enumprinterdataex(const char *desc, 
SPOOL_R_ENUMPRINTERDATAEX
 }
 
 /*******************************************************************
- * write a structure.
- ********************************************************************/  
-
-/* 
-   uint32 GetPrintProcessorDirectory(
-       [in] unistr2 *name,
-       [in] unistr2 *environment,
-       [in] uint32 level,
-       [in,out] RPC_BUFFER buffer,
-       [in] uint32 offered,
-       [out] uint32 needed,
-       [out] uint32 returned
-   );
-
-*/
-
-bool 
make_spoolss_q_getprintprocessordirectory(SPOOL_Q_GETPRINTPROCESSORDIRECTORY 
*q_u, const char *name, char *environment, int level, RPC_BUFFER *buffer, 
uint32 offered)
-{
-       DEBUG(5,("make_spoolss_q_getprintprocessordirectory\n"));
-
-       init_unistr2(&q_u->name, name, UNI_STR_TERMINATE);
-       init_unistr2(&q_u->environment, environment, UNI_STR_TERMINATE);
-
-       q_u->level = level;
-
-       q_u->buffer = buffer;
-       q_u->offered = offered;
-
-       return True;
-}
-
-bool spoolss_io_q_getprintprocessordirectory(const char *desc, 
SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, prs_struct *ps, int depth)
-{
-       uint32 ptr = 0;
-
-       prs_debug(ps, depth, desc, "spoolss_io_q_getprintprocessordirectory");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;   
-
-       if (!prs_uint32("ptr", ps, depth, &ptr)) 
-               return False;
-
-       if (ptr) {
-               if(!smb_io_unistr2("name", &q_u->name, True, ps, depth))
-                       return False;
-       }
-
-       if (!prs_align(ps))
-               return False;
-
-       if (!prs_uint32("ptr", ps, depth, &ptr))
-               return False;
-
-       if (ptr) {
-               if(!smb_io_unistr2("environment", &q_u->environment, True, 
-                                  ps, depth))
-                       return False;
-       }
-
-       if (!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("level",   ps, depth, &q_u->level))
-               return False;
-
-       if(!prs_rpcbuffer_p("", ps, depth, &q_u->buffer))
-               return False;
-       
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("offered", ps, depth, &q_u->offered))
-               return False;
-
-       return True;
-}
-
-/*******************************************************************
- * write a structure.
- ********************************************************************/  
-
-bool spoolss_io_r_getprintprocessordirectory(const char *desc, 
SPOOL_R_GETPRINTPROCESSORDIRECTORY *r_u, prs_struct *ps, int depth)
-{
-       prs_debug(ps, depth, desc, "spoolss_io_r_getprintprocessordirectory");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_rpcbuffer_p("", ps, depth, &r_u->buffer))
-               return False;
-       
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("needed",     ps, depth, &r_u->needed))
-               return False;
-               
-       if(!prs_werror("status",     ps, depth, &r_u->status))
-               return False;
-
-       return True;
-}
-
-bool smb_io_printprocessordirectory_1(const char *desc, RPC_BUFFER *buffer, 
PRINTPROCESSOR_DIRECTORY_1 *info, int depth)
-{
-       prs_struct *ps=&buffer->prs;
-
-       prs_debug(ps, depth, desc, "smb_io_printprocessordirectory_1");
-       depth++;
-
-       buffer->struct_start=prs_offset(ps);
-
-       if (!smb_io_unistr(desc, &info->name, ps, depth))
-               return False;
-
-       return True;
-}
-
-/*******************************************************************
  * init a structure.
  ********************************************************************/
 
diff --git a/source3/rpc_server/srv_spoolss.c b/source3/rpc_server/srv_spoolss.c
index 4074f86..639dbde 100644
--- a/source3/rpc_server/srv_spoolss.c
+++ b/source3/rpc_server/srv_spoolss.c
@@ -865,27 +865,7 @@ static bool api_spoolss_enumprinterdataex(pipes_struct *p)
 
 static bool api_spoolss_getprintprocessordirectory(pipes_struct *p)
 {
-       SPOOL_Q_GETPRINTPROCESSORDIRECTORY q_u;
-       SPOOL_R_GETPRINTPROCESSORDIRECTORY r_u;
-       prs_struct *data = &p->in_data.data;
-       prs_struct *rdata = &p->out_data.rdata;
-       
-       ZERO_STRUCT(q_u);
-       ZERO_STRUCT(r_u);
-       
-       if(!spoolss_io_q_getprintprocessordirectory("", &q_u, data, 0)) {
-               DEBUG(0,("spoolss_io_q_getprintprocessordirectory: unable to 
unmarshall SPOOL_Q_GETPRINTPROCESSORDIRECTORY.\n"));
-               return False;
-       }
-       
-       r_u.status = _spoolss_getprintprocessordirectory(p, &q_u, &r_u);
-                               
-       if(!spoolss_io_r_getprintprocessordirectory("", &r_u, rdata, 0)) {
-               DEBUG(0,("spoolss_io_r_getprintprocessordirectory: unable to 
marshall SPOOL_R_GETPRINTPROCESSORDIRECTORY.\n"));
-               return False;
-       }
-       
-       return True;
+       return proxy_spoolss_call(p, NDR_SPOOLSS_GETPRINTPROCESSORDIRECTORY);
 }
 
 /****************************************************************************
diff --git a/source3/rpc_server/srv_spoolss_nt.c 
b/source3/rpc_server/srv_spoolss_nt.c
index 171953b..9d7e4d2 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -9730,84 +9730,79 @@ done:
 /****************************************************************************
 ****************************************************************************/
 
-static void fill_printprocessordirectory_1(PRINTPROCESSOR_DIRECTORY_1 *info, 
const char *name)
+static WERROR getprintprocessordirectory_level_1(TALLOC_CTX *mem_ctx,
+                                                const char *servername,
+                                                const char *environment,
+                                                struct 
spoolss_PrintProcessorDirectoryInfo1 *info1,
+                                                uint32_t offered,
+                                                uint32_t *needed)
 {
-       init_unistr(&info->name, name);
-}
-
-static WERROR getprintprocessordirectory_level_1(UNISTR2 *name,
-                                                UNISTR2 *environment,
-                                                RPC_BUFFER *buffer,
-                                                uint32 offered,
-                                                uint32 *needed)
-{
-       char *long_archi = NULL;
-       PRINTPROCESSOR_DIRECTORY_1 *info=NULL;
-       WERROR result = WERR_OK;
-       TALLOC_CTX *ctx = talloc_tos();
+       const char *long_archi = SPOOLSS_ARCHITECTURE_NT_X86;
+       const char *short_archi;
 
-       long_archi = unistr2_to_ascii_talloc(ctx, environment);
-       if (!long_archi) {
-               return WERR_NOMEM;
+       if (environment) {
+               long_archi = environment;
        }
 
-       if (!get_short_archi(long_archi))
+       short_archi = get_short_archi(long_archi);
+       if (!short_archi) {
                return WERR_INVALID_ENVIRONMENT;
+       }
 
-       if((info=SMB_MALLOC_P(PRINTPROCESSOR_DIRECTORY_1)) == NULL)
-               return WERR_NOMEM;
+       /* I think this should look like this - gd
+       info1->directory_name = talloc_asprintf(mem_ctx,
+               "C:\\WINNT\\System32\\spool\\PRTPROCS\\%s", short_archi);
+       */
+       info1->directory_name = talloc_strdup(mem_ctx,
+               "C:\\WINNT\\System32\\spool\\PRTPROCS\\W32X86");
 
-       fill_printprocessordirectory_1(info, 
"C:\\WINNT\\System32\\spool\\PRTPROCS\\W32X86");
+       if (!info1->directory_name) {
+               return WERR_NOMEM;
+       }
 
-       *needed += spoolss_size_printprocessordirectory_info_1(info);
+       *needed += ndr_size_spoolss_PrintProcessorDirectoryInfo1(info1, NULL, 
0);
 
        if (*needed > offered) {
-               result = WERR_INSUFFICIENT_BUFFER;
-               goto out;
-       }
-
-       if (!rpcbuf_alloc_size(buffer, *needed)) {
-               result = WERR_INSUFFICIENT_BUFFER;
-               goto out;
+               return WERR_INSUFFICIENT_BUFFER;
        }
 
-       smb_io_printprocessordirectory_1("", buffer, info, 0);
-
-out:
-       SAFE_FREE(info);
-
-       return result;
+       return WERR_OK;
 }
 
-WERROR _spoolss_getprintprocessordirectory(pipes_struct *p, 
SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, SPOOL_R_GETPRINTPROCESSORDIRECTORY 
*r_u)
+/****************************************************************
+ _spoolss_GetPrintProcessorDirectory
+****************************************************************/
+
+WERROR _spoolss_GetPrintProcessorDirectory(pipes_struct *p,
+                                          struct 
spoolss_GetPrintProcessorDirectory *r)
 {
-       uint32 level = q_u->level;
-       RPC_BUFFER *buffer = NULL;
-       uint32 offered = q_u->offered;
-       uint32 *needed = &r_u->needed;
        WERROR result;
 
        /* that's an [in out] buffer */
 
-       if (!q_u->buffer && (offered!=0)) {
+       if (!r->in.buffer && (r->in.offered != 0)) {
                return WERR_INVALID_PARAM;
        }
 
-       if (offered > MAX_RPC_DATA_SIZE) {
+       if (r->in.offered > MAX_RPC_DATA_SIZE) {
                return WERR_INVALID_PARAM;
        }
 
-       rpcbuf_move(q_u->buffer, &r_u->buffer);
-       buffer = r_u->buffer;
+       DEBUG(5,("_spoolss_GetPrintProcessorDirectory\n"));
 
-       DEBUG(5,("_spoolss_getprintprocessordirectory\n"));
-
-       *needed=0;
+       *r->out.needed = 0;
 
-       switch(level) {
+       switch (r->in.level) {
        case 1:
-               result = getprintprocessordirectory_level_1
-                 (&q_u->name, &q_u->environment, buffer, offered, needed);
+               result = getprintprocessordirectory_level_1(p->mem_ctx,
+                                                           r->in.server,
+                                                           r->in.environment,
+                                                           &r->out.info->info1,
+                                                           r->in.offered,
+                                                           r->out.needed);
+               if (W_ERROR_EQUAL(result, WERR_INSUFFICIENT_BUFFER)) {
+                       TALLOC_FREE(r->out.info);
+               }
                break;
        default:
                result = WERR_UNKNOWN_LEVEL;
@@ -10246,17 +10241,6 @@ WERROR _spoolss_EnumPrintProcessors(pipes_struct *p,
 }
 
 /****************************************************************
- _spoolss_GetPrintProcessorDirectory
-****************************************************************/
-
-WERROR _spoolss_GetPrintProcessorDirectory(pipes_struct *p,
-                                          struct 
spoolss_GetPrintProcessorDirectory *r)
-{
-       p->rng_fault_state = true;
-       return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
  _spoolss_ReadPrinter
 ****************************************************************/
 
diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c
index 90995ff..944bac7 100644
--- a/source3/rpcclient/cmd_spoolss.c
+++ b/source3/rpcclient/cmd_spoolss.c
@@ -1661,8 +1661,12 @@ static WERROR cmd_spoolss_getprintprocdir(struct 
rpc_pipe_client *cli,
                                            int argc, const char **argv)
 {
        WERROR result;
-       char *environment = NULL;
-       fstring procdir;


-- 
Samba Shared Repository

Reply via email to