The branch, v3-2-test has been updated
       via  bc3bd7a8e7c6e9e27acb195c86abb92c0f53112f (commit)
       via  387936ec3952f88d46df2d4943bbc4e408ad2bb5 (commit)
       via  54576733d6c0511dc7379f964b1cb035913b7c8d (commit)
       via  8aec5d09ba023413bd8ecbdfbc7d23904df94389 (commit)
      from  22a98bf7b81fb89dce1f32ef65cfe6caaba985b3 (commit)

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


- Log -----------------------------------------------------------------
commit bc3bd7a8e7c6e9e27acb195c86abb92c0f53112f
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sat Dec 29 23:00:49 2007 +0100

    Remove tiny code duplication
    
    ndr_size_security_descriptor does the same as sec_desc_size

commit 387936ec3952f88d46df2d4943bbc4e408ad2bb5
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sat Dec 29 22:54:51 2007 +0100

    Make [un]marshall_sec_desc use librpc/ndr

commit 54576733d6c0511dc7379f964b1cb035913b7c8d
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sat Dec 29 22:47:03 2007 +0100

    Make use of [un]marshall_sec_desc

commit 8aec5d09ba023413bd8ecbdfbc7d23904df94389
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sat Dec 29 22:16:31 2007 +0100

    Remove tiny code duplication
    
    sid_size did the same as ndr_size_dom_sid

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

Summary of changes:
 source/lib/secace.c               |    4 +-
 source/lib/secdesc.c              |   87 +++++++++++++------------------------
 source/lib/sharesec.c             |    2 +-
 source/lib/util_sid.c             |   18 +------
 source/libads/ldap.c              |   20 +++++----
 source/libsmb/cliquota.c          |    4 +-
 source/libsmb/clisecdesc.c        |   45 +++++++------------
 source/modules/nfs4_acls.c        |    2 +-
 source/printing/nt_printing.c     |   10 +++--
 source/registry/reg_api.c         |    2 +-
 source/registry/regfio.c          |    5 +-
 source/rpc_parse/parse_buffer.c   |    2 +-
 source/rpc_parse/parse_sec.c      |    6 +-
 source/rpc_parse/parse_spoolss.c  |    4 +-
 source/rpc_parse/parse_srv.c      |    5 +-
 source/rpc_server/srv_srvsvc_nt.c |    2 +-
 source/rpc_server/srv_svcctl_nt.c |    2 +-
 source/smbd/nttrans.c             |    5 +-
 source/smbd/trans2.c              |    8 ++--
 source/winbindd/winbindd_cm.c     |   11 +++--
 20 files changed, 103 insertions(+), 141 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/secace.c b/source/lib/secace.c
index 90ecc34..8760a61 100644
--- a/source/lib/secace.c
+++ b/source/lib/secace.c
@@ -59,7 +59,7 @@ void init_sec_ace(SEC_ACE *t, const DOM_SID *sid, enum 
security_ace_type type,
 {
        t->type = type;
        t->flags = flag;
-       t->size = sid_size(sid) + 8;
+       t->size = ndr_size_dom_sid(sid, 0) + 8;
        t->access_mask = mask;
 
        ZERO_STRUCTP(&t->trustee);
@@ -86,7 +86,7 @@ NTSTATUS sec_ace_add_sid(TALLOC_CTX *ctx, SEC_ACE **pp_new, 
SEC_ACE *old, unsign
 
        (*pp_new)[i].type  = SEC_ACE_TYPE_ACCESS_ALLOWED;
        (*pp_new)[i].flags = 0;
-       (*pp_new)[i].size  = SEC_ACE_HEADER_SIZE + sid_size(sid);
+       (*pp_new)[i].size  = SEC_ACE_HEADER_SIZE + ndr_size_dom_sid(sid, 0);
        (*pp_new)[i].access_mask = mask;
        sid_copy(&(*pp_new)[i].trustee, sid);
        return NT_STATUS_OK;
diff --git a/source/lib/secdesc.c b/source/lib/secdesc.c
index 123c3bc..44ae232 100644
--- a/source/lib/secdesc.c
+++ b/source/lib/secdesc.c
@@ -32,35 +32,6 @@ const struct generic_mapping file_generic_mapping = {
 };
 
 /*******************************************************************
- Works out the linearization size of a SEC_DESC.
-********************************************************************/
-
-size_t sec_desc_size(SEC_DESC *psd)
-{
-       size_t offset;
-
-       if (!psd) return 0;
-
-       offset = SEC_DESC_HEADER_SIZE;
-
-       /* don't align */
-
-       if (psd->owner_sid != NULL)
-               offset += sid_size(psd->owner_sid);
-
-       if (psd->group_sid != NULL)
-               offset += sid_size(psd->group_sid);
-
-       if (psd->sacl != NULL)
-               offset += psd->sacl->size;
-
-       if (psd->dacl != NULL)
-               offset += psd->dacl->size;
-
-       return offset;
-}
-
-/*******************************************************************
  Compares two SEC_DESC structures
 ********************************************************************/
 
@@ -235,11 +206,11 @@ SEC_DESC *make_sec_desc(TALLOC_CTX *ctx,
        }
 
        if (dst->owner_sid != NULL) {
-               offset += sid_size(dst->owner_sid);
+               offset += ndr_size_dom_sid(dst->owner_sid, 0);
        }
 
        if (dst->group_sid != NULL) {
-               offset += sid_size(dst->group_sid);
+               offset += ndr_size_dom_sid(dst->group_sid, 0);
        }
 
        *sd_size = (size_t)offset;
@@ -274,25 +245,21 @@ NTSTATUS marshall_sec_desc(TALLOC_CTX *mem_ctx,
                           struct security_descriptor *secdesc,
                           uint8 **data, size_t *len)
 {
-       prs_struct ps;
-       
-       if (!prs_init(&ps, sec_desc_size(secdesc), mem_ctx, MARSHALL)) {
-               return NT_STATUS_NO_MEMORY;
-       }
+       DATA_BLOB blob;
+       enum ndr_err_code ndr_err;
 
-       if (!sec_io_desc("security_descriptor", &secdesc, &ps, 1)) {
-               prs_mem_free(&ps);
-               return NT_STATUS_INVALID_PARAMETER;
-       }
+       ndr_err = ndr_push_struct_blob(
+               &blob, mem_ctx, secdesc,
+               (ndr_push_flags_fn_t)ndr_push_security_descriptor);
 
-       if (!(*data = (uint8 *)talloc_memdup(mem_ctx, ps.data_p,
-                                            prs_offset(&ps)))) {
-               prs_mem_free(&ps);
-               return NT_STATUS_NO_MEMORY;
+       if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+               DEBUG(0, ("ndr_push_security_descriptor failed: %s\n",
+                         ndr_errstr(ndr_err)));
+               return ndr_map_error2ntstatus(ndr_err);;
        }
 
-       *len = prs_offset(&ps);
-       prs_mem_free(&ps);
+       *data = blob.data;
+       *len = blob.length;
        return NT_STATUS_OK;
 }
 
@@ -302,25 +269,33 @@ NTSTATUS marshall_sec_desc(TALLOC_CTX *mem_ctx,
 NTSTATUS unmarshall_sec_desc(TALLOC_CTX *mem_ctx, uint8 *data, size_t len,
                             struct security_descriptor **psecdesc)
 {
-       prs_struct ps;
-       struct security_descriptor *secdesc = NULL;
+       DATA_BLOB blob;
+       enum ndr_err_code ndr_err;
+       struct security_descriptor *result;
 
-       if (!(secdesc = TALLOC_ZERO_P(mem_ctx, struct security_descriptor))) {
-               return NT_STATUS_NO_MEMORY;
+       if ((data == NULL) || (len == 0)) {
+               return NT_STATUS_INVALID_PARAMETER;
        }
 
-       if (!prs_init(&ps, 0, secdesc, UNMARSHALL)) {
+       result = TALLOC_ZERO_P(mem_ctx, struct security_descriptor);
+       if (result == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
 
-       prs_give_memory(&ps, (char *)data, len, False);
+       blob = data_blob_const(data, len);
 
-       if (!sec_io_desc("security_descriptor", &secdesc, &ps, 1)) {
-               return NT_STATUS_INVALID_PARAMETER;
+       ndr_err = ndr_pull_struct_blob(
+               &blob, result, result,
+               (ndr_pull_flags_fn_t)ndr_pull_security_descriptor);
+
+       if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+               DEBUG(0, ("ndr_pull_security_descriptor failed: %s\n",
+                         ndr_errstr(ndr_err)));
+               TALLOC_FREE(result);
+               return ndr_map_error2ntstatus(ndr_err);;
        }
 
-       prs_mem_free(&ps);
-       *psecdesc = secdesc;
+       *psecdesc = result;
        return NT_STATUS_OK;
 }
 
diff --git a/source/lib/sharesec.c b/source/lib/sharesec.c
index 0027a88..ba025da 100644
--- a/source/lib/sharesec.c
+++ b/source/lib/sharesec.c
@@ -144,7 +144,7 @@ SEC_DESC *get_share_security( TALLOC_CTX *ctx, const char 
*servicename,
        }
 
        if (psd)
-               *psize = sec_desc_size(psd);
+               *psize = ndr_size_security_descriptor(psd, 0);
 
        return psd;
 }
diff --git a/source/lib/util_sid.c b/source/lib/util_sid.c
index 52f65aa..222b32e 100644
--- a/source/lib/util_sid.c
+++ b/source/lib/util_sid.c
@@ -382,7 +382,7 @@ bool sid_linearize(char *outbuf, size_t len, const DOM_SID 
*sid)
 {
        size_t i;
 
-       if (len < sid_size(sid))
+       if (len < ndr_size_dom_sid(sid, 0))
                return False;
 
        SCVAL(outbuf,0,sid->sid_rev_num);
@@ -495,18 +495,6 @@ bool sid_equal(const DOM_SID *sid1, const DOM_SID *sid2)
 }
 
 /*****************************************************************
- Calculates size of a sid.
-*****************************************************************/  
-
-size_t sid_size(const DOM_SID *sid)
-{
-       if (sid == NULL)
-               return 0;
-
-       return sid->num_auths * sizeof(uint32) + 8;
-}
-
-/*****************************************************************
  Returns true if SID is internal (and non-mappable).
 *****************************************************************/
 
@@ -535,7 +523,7 @@ bool non_mappable_sid(DOM_SID *sid)
 char *sid_binstring(const DOM_SID *sid)
 {
        char *buf, *s;
-       int len = sid_size(sid);
+       int len = ndr_size_dom_sid(sid, 0);
        buf = (char *)SMB_MALLOC(len);
        if (!buf)
                return NULL;
@@ -553,7 +541,7 @@ char *sid_binstring(const DOM_SID *sid)
 char *sid_binstring_hex(const DOM_SID *sid)
 {
        char *buf, *s;
-       int len = sid_size(sid);
+       int len = ndr_size_dom_sid(sid, 0);
        buf = (char *)SMB_MALLOC(len);
        if (!buf)
                return NULL;
diff --git a/source/libads/ldap.c b/source/libads/ldap.c
index 348ccac..953693c 100644
--- a/source/libads/ldap.c
+++ b/source/libads/ldap.c
@@ -2384,20 +2384,22 @@ int ads_count_replies(ADS_STRUCT *ads, void *res)
                  LDAPMessage *msg, const char *field, SEC_DESC **sd)
 {
        struct berval **values;
-       bool ret = False;
+       bool ret = true;
 
        values = ldap_get_values_len(ads->ldap.ld, msg, field);
 
-       if (!values) return False;
+       if (!values) return false;
 
        if (values[0]) {
-               prs_struct ps;
-               prs_init(&ps, values[0]->bv_len, mem_ctx, UNMARSHALL);
-               prs_copy_data_in(&ps, values[0]->bv_val, values[0]->bv_len);
-               prs_set_offset(&ps,0);
-
-               ret = sec_io_desc("sd", sd, &ps, 1);
-               prs_mem_free(&ps);
+               NTSTATUS status;
+               status = unmarshall_sec_desc(mem_ctx,
+                                            (uint8 *)values[0]->bv_val,
+                                            values[0]->bv_len, sd);
+               if (!NT_STATUS_IS_OK(status)) {
+                       DEBUG(0, ("unmarshall_sec_desc failed: %s\n",
+                                 nt_errstr(status)));
+                       ret = false;
+               }
        }
        
        ldap_value_free_len(values);
diff --git a/source/libsmb/cliquota.c b/source/libsmb/cliquota.c
index 206576f..f369d28 100644
--- a/source/libsmb/cliquota.c
+++ b/source/libsmb/cliquota.c
@@ -150,7 +150,7 @@ bool cli_get_user_quota(struct cli_state *cli, int 
quota_fnum, SMB_NTQUOTA_STRUC
        SIVAL(params, 8,0x00000000);
        SIVAL(params,12,0x00000024);
        
-       sid_len = sid_size(&pqt->sid);
+       sid_len = ndr_size_dom_sid(&pqt->sid, 0);
        data_len = sid_len+8;
        SIVAL(data, 0, 0x00000000);
        SIVAL(data, 4, sid_len);
@@ -213,7 +213,7 @@ bool cli_set_user_quota(struct cli_state *cli, int 
quota_fnum, SMB_NTQUOTA_STRUC
 
        SSVAL(params,0,quota_fnum);
 
-       sid_len = sid_size(&pqt->sid);
+       sid_len = ndr_size_dom_sid(&pqt->sid, 0);
        SIVAL(data,0,0);
        SIVAL(data,4,sid_len);
        SBIG_UINT(data, 8,(SMB_BIG_UINT)0);
diff --git a/source/libsmb/clisecdesc.c b/source/libsmb/clisecdesc.c
index 46a6609..adc6fba 100644
--- a/source/libsmb/clisecdesc.c
+++ b/source/libsmb/clisecdesc.c
@@ -28,9 +28,8 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum,
        char param[8];
        char *rparam=NULL, *rdata=NULL;
        unsigned int rparam_count=0, rdata_count=0;
-       prs_struct pd;
-       bool pd_initialized = False;
        SEC_DESC *psd = NULL;
+       NTSTATUS status;
 
        SIVAL(param, 0, fnum);
        SIVAL(param, 4, 0x7);
@@ -56,15 +55,12 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum,
        if (cli_is_error(cli))
                goto cleanup;
 
-       if (!prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL)) {
-               goto cleanup;
-       }
-       pd_initialized = True;
-       prs_copy_data_in(&pd, rdata, rdata_count);
-       prs_set_offset(&pd,0);
+       status = unmarshall_sec_desc(mem_ctx, (uint8 *)rdata, rdata_count,
+                                    &psd);
 
-       if (!sec_io_desc("sd data", &psd, &pd, 1)) {
-               DEBUG(1,("Failed to parse secdesc\n"));
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(10, ("unmarshall_sec_desc failed: %s\n",
+                          nt_errstr(status)));
                goto cleanup;
        }
 
@@ -73,8 +69,6 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum,
        SAFE_FREE(rparam);
        SAFE_FREE(rdata);
 
-       if (pd_initialized)
-               prs_mem_free(&pd);
        return psd;
 }
 
@@ -87,20 +81,16 @@ bool cli_set_secdesc(struct cli_state *cli, int fnum, 
SEC_DESC *sd)
        char *rparam=NULL, *rdata=NULL;
        unsigned int rparam_count=0, rdata_count=0;
        uint32 sec_info = 0;
-       TALLOC_CTX *mem_ctx;
-       prs_struct pd;
+       TALLOC_CTX *frame = talloc_stackframe();
        bool ret = False;
-
-       if ((mem_ctx = talloc_init("cli_set_secdesc")) == NULL) {
-               DEBUG(0,("talloc_init failed.\n"));
-               goto cleanup;
-       }
-
-       prs_init(&pd, 0, mem_ctx, MARSHALL);
-       prs_give_memory(&pd, NULL, 0, True);
-
-       if (!sec_io_desc("sd data", &sd, &pd, 1)) {
-               DEBUG(1,("Failed to marshall secdesc\n"));
+       uint8 *data;
+       size_t len;
+       NTSTATUS status;
+
+       status = marshall_sec_desc(talloc_tos(), sd, &data, &len);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(10, ("marshall_sec_desc failed: %s\n",
+                          nt_errstr(status)));
                goto cleanup;
        }
 
@@ -119,7 +109,7 @@ bool cli_set_secdesc(struct cli_state *cli, int fnum, 
SEC_DESC *sd)
                               0, 
                               NULL, 0, 0,
                               param, 8, 0,
-                              prs_data_p(&pd), prs_offset(&pd), 0)) {
+                              (char *)data, len, 0)) {
                DEBUG(1,("Failed to send NT_TRANSACT_SET_SECURITY_DESC\n"));
                goto cleanup;
        }
@@ -139,8 +129,7 @@ bool cli_set_secdesc(struct cli_state *cli, int fnum, 
SEC_DESC *sd)
        SAFE_FREE(rparam);
        SAFE_FREE(rdata);
 
-       talloc_destroy(mem_ctx);
+       TALLOC_FREE(frame);
 
-       prs_mem_free(&pd);
        return ret;
 }
diff --git a/source/modules/nfs4_acls.c b/source/modules/nfs4_acls.c
index 70bb6a0..6d2972d 100644
--- a/source/modules/nfs4_acls.c
+++ b/source/modules/nfs4_acls.c
@@ -309,7 +309,7 @@ static NTSTATUS smb_get_nt_acl_nfs4_common(const 
SMB_STRUCT_STAT *sbuf,
        }
 
        DEBUG(10, ("smb_get_nt_acl_nfs4_common successfully exited with sd_size 
%d\n",
-                  sec_desc_size(*ppdesc)));
+                  ndr_size_security_descriptor(*ppdesc, 0)));
 
        return NT_STATUS_OK;
 }
diff --git a/source/printing/nt_printing.c b/source/printing/nt_printing.c
index f83f898..f115fba 100644
--- a/source/printing/nt_printing.c
+++ b/source/printing/nt_printing.c
@@ -429,7 +429,8 @@ static int sec_desc_upg_fn( TDB_CONTEXT *the_tdb, TDB_DATA 
key,
 
        /* store it back */
        
-       sd_size = sec_desc_size(sd_store->sd) + sizeof(SEC_DESC_BUF);
+       sd_size = ndr_size_security_descriptor(sd_store->sd, 0)
+               + sizeof(SEC_DESC_BUF);
        prs_init(&ps, sd_size, ctx, MARSHALL);
 
        if ( !sec_io_desc_buf( "sec_desc_upg_fn", &sd_store, &ps, 1 ) ) {
@@ -5389,8 +5390,9 @@ WERROR nt_printing_setsec(const char *sharename, 
SEC_DESC_BUF *secdesc_ctr)
 
        /* Store the security descriptor in a tdb */
 
-       prs_init(&ps, (uint32)sec_desc_size(new_secdesc_ctr->sd) +
-                sizeof(SEC_DESC_BUF), mem_ctx, MARSHALL);
+       prs_init(&ps,
+                (uint32)ndr_size_security_descriptor(new_secdesc_ctr->sd, 0)
+                + sizeof(SEC_DESC_BUF), mem_ctx, MARSHALL);
 
        if (!sec_io_desc_buf("nt_printing_setsec", &new_secdesc_ctr,
                             &ps, 1)) {
@@ -5534,7 +5536,7 @@ bool nt_printing_getsec(TALLOC_CTX *ctx, const char 
*sharename, SEC_DESC_BUF **s
 
                /* Save default security descriptor for later */
 
-               prs_init(&ps, (uint32)sec_desc_size((*secdesc_ctr)->sd) +
+               prs_init(&ps, 
(uint32)ndr_size_security_descriptor((*secdesc_ctr)->sd, 0) +
                                sizeof(SEC_DESC_BUF), ctx, MARSHALL);
 
                if (sec_io_desc_buf("nt_printing_getsec", secdesc_ctr, &ps, 1)) 
{
diff --git a/source/registry/reg_api.c b/source/registry/reg_api.c
index b3d024d..bc4508f 100644
--- a/source/registry/reg_api.c
+++ b/source/registry/reg_api.c
@@ -378,7 +378,7 @@ WERROR reg_queryinfokey(struct registry_key *key, uint32_t 
*num_subkeys,
                return err;
        }
 
-       *secdescsize = sec_desc_size(secdesc);
+       *secdescsize = ndr_size_security_descriptor(secdesc, 0);
        TALLOC_FREE(mem_ctx);
 
        *last_changed_time = 0;
diff --git a/source/registry/regfio.c b/source/registry/regfio.c
index 22700e6..92077aa 100644
--- a/source/registry/regfio.c
+++ b/source/registry/regfio.c
@@ -1554,7 +1554,7 @@ static uint32 sk_record_data_size( SEC_DESC * sd )
 
        /* the record size is sizeof(hdr) + name + static members + 
data_size_field */
 
-       size = sizeof(uint32)*5 + sec_desc_size( sd ) + sizeof(uint32);
+       size = sizeof(uint32)*5 + ndr_size_security_descriptor(sd, 0) + 
sizeof(uint32);
 
        /* multiple of 8 */
        size_mod8 = size & 0xfffffff8;
@@ -1784,7 +1784,8 @@ static int hashrec_cmp( REGF_HASH_REC *h1, REGF_HASH_REC 
*h2 )
                        nk->sec_desc->ref_count = 0;
                        
                        /* size value must be self-inclusive */
-                       nk->sec_desc->size      = sec_desc_size(sec_desc) + 
sizeof(uint32);
+                       nk->sec_desc->size      = 
ndr_size_security_descriptor(sec_desc, 0)
+                               + sizeof(uint32);
 
                        DLIST_ADD_END( file->sec_desc_list, nk->sec_desc, 
REGF_SK_REC *);
 
diff --git a/source/rpc_parse/parse_buffer.c b/source/rpc_parse/parse_buffer.c
index c30ad48..e98822d 100644
--- a/source/rpc_parse/parse_buffer.c
+++ b/source/rpc_parse/parse_buffer.c
@@ -435,7 +435,7 @@ bool smb_io_relsecdesc(const char *desc, RPC_BUFFER 
*buffer, int depth, SEC_DESC
                }
                
                if (*secdesc != NULL) {
-                       buffer->string_at_end -= sec_desc_size(*secdesc);
+                       buffer->string_at_end -= 
ndr_size_security_descriptor(*secdesc, 0);
 
                        if(!prs_set_offset(ps, buffer->string_at_end))
                                return False;
diff --git a/source/rpc_parse/parse_sec.c b/source/rpc_parse/parse_sec.c
index 6198a78..6ea128d 100644
--- a/source/rpc_parse/parse_sec.c
+++ b/source/rpc_parse/parse_sec.c
@@ -291,14 +291,14 @@ bool sec_io_desc(const char *desc, SEC_DESC **ppsd, 
prs_struct *ps, int depth)
 
                if (psd->owner_sid != NULL) {
                        off_owner_sid = offset;
-                       offset += sid_size(psd->owner_sid);
+                       offset += ndr_size_dom_sid(psd->owner_sid, 0);
                } else {
                        off_owner_sid = 0;
                }
 
                if (psd->group_sid != NULL) {
                        off_grp_sid = offset;
-                       offset += sid_size(psd->group_sid);
+                       offset += ndr_size_dom_sid(psd->group_sid, 0);
                } else {
                        off_grp_sid = 0;
                }
@@ -426,7 +426,7 @@ bool sec_io_desc_buf(const char *desc, SEC_DESC_BUF 
**ppsdb, prs_struct *ps, int
        if(!prs_uint32    ("ptr  ", ps, depth, &ptr))
                return False;
 
-       len = sec_desc_size(psdb->sd);
+       len = ndr_size_security_descriptor(psdb->sd, 0);
        if(!prs_uint32_pre("len    ", ps, depth, &len, &off_len))
                return False;
 
diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c


-- 
Samba Shared Repository

Reply via email to