The branch, v3-2-test has been updated
       via  8168fd583cfc2ad64e5c1aa67047d8c3c607993a (commit)
       via  f90306bd24bc243c8f30a16c0414031d69d05c03 (commit)
       via  692626c1ef46cd27c0df34e2c206d21c929587f4 (commit)
       via  35089b53b81d8a8aa117d6c1972ccb938170a2b3 (commit)
       via  5e112ff3d7984c278949833a00349a9f523d4b23 (commit)
       via  8a10bc13aee7c34f466fa69773694be97f0e7d85 (commit)
      from  98b643366044f471ad69c9e5aac06022f30742d9 (commit)

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


- Log -----------------------------------------------------------------
commit 8168fd583cfc2ad64e5c1aa67047d8c3c607993a
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Sun Mar 9 21:28:53 2008 +0100

    Add some srvsvc_NetSessInfo init functions.
    
    Guenther

commit f90306bd24bc243c8f30a16c0414031d69d05c03
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Sun Mar 9 20:55:19 2008 +0100

    Add netsessenum command to rpcclient.
    
    Guenther

commit 692626c1ef46cd27c0df34e2c206d21c929587f4
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Sun Mar 9 20:11:07 2008 +0100

    Re-run make idl.
    
    Guenther

commit 35089b53b81d8a8aa117d6c1972ccb938170a2b3
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Sun Mar 9 20:10:22 2008 +0100

    Fix IDL for srvsvc_NetSessEnum().
    
    Guenther

commit 5e112ff3d7984c278949833a00349a9f523d4b23
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Sun Mar 9 20:04:35 2008 +0100

    Add netsessdel command to rpcclient.
    
    Guenther

commit 8a10bc13aee7c34f466fa69773694be97f0e7d85
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Sun Mar 9 18:01:52 2008 +0100

    Use pidl for _srvsvc_NetSessDel().
    
    Guenther

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

Summary of changes:
 source/librpc/gen_ndr/cli_srvsvc.c |    9 +--
 source/librpc/gen_ndr/cli_srvsvc.h |    3 +-
 source/librpc/gen_ndr/ndr_srvsvc.c |  119 ++++++++++++++++++------------------
 source/librpc/gen_ndr/ndr_srvsvc.h |    1 +
 source/librpc/gen_ndr/srv_srvsvc.c |    3 +-
 source/librpc/gen_ndr/srvsvc.h     |   11 ++-
 source/librpc/idl/srvsvc.idl       |    9 ++-
 source/rpc_client/init_srvsvc.c    |   91 +++++++++++++++++++++++++++
 source/rpc_server/srv_srvsvc.c     |   21 +------
 source/rpc_server/srv_srvsvc_nt.c  |   35 +++++------
 source/rpcclient/cmd_srvsvc.c      |  112 +++++++++++++++++++++++++++++++++
 11 files changed, 298 insertions(+), 116 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/gen_ndr/cli_srvsvc.c 
b/source/librpc/gen_ndr/cli_srvsvc.c
index 2b61fb8..18bec1f 100644
--- a/source/librpc/gen_ndr/cli_srvsvc.c
+++ b/source/librpc/gen_ndr/cli_srvsvc.c
@@ -650,8 +650,7 @@ NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client 
*cli,
                                   const char *server_unc,
                                   const char *client,
                                   const char *user,
-                                  uint32_t *level,
-                                  union srvsvc_NetSessCtr *ctr,
+                                  struct srvsvc_NetSessInfoCtr *info_ctr,
                                   uint32_t max_buffer,
                                   uint32_t *totalentries,
                                   uint32_t *resume_handle,
@@ -664,8 +663,7 @@ NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client 
*cli,
        r.in.server_unc = server_unc;
        r.in.client = client;
        r.in.user = user;
-       r.in.level = level;
-       r.in.ctr = ctr;
+       r.in.info_ctr = info_ctr;
        r.in.max_buffer = max_buffer;
        r.in.resume_handle = resume_handle;
 
@@ -693,8 +691,7 @@ NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client 
*cli,
        }
 
        /* Return variables */
-       *level = *r.out.level;
-       *ctr = *r.out.ctr;
+       *info_ctr = *r.out.info_ctr;
        *totalentries = *r.out.totalentries;
        if (resume_handle && r.out.resume_handle) {
                *resume_handle = *r.out.resume_handle;
diff --git a/source/librpc/gen_ndr/cli_srvsvc.h 
b/source/librpc/gen_ndr/cli_srvsvc.h
index b8171a3..bccf95e 100644
--- a/source/librpc/gen_ndr/cli_srvsvc.h
+++ b/source/librpc/gen_ndr/cli_srvsvc.h
@@ -98,8 +98,7 @@ NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client 
*cli,
                                   const char *server_unc,
                                   const char *client,
                                   const char *user,
-                                  uint32_t *level,
-                                  union srvsvc_NetSessCtr *ctr,
+                                  struct srvsvc_NetSessInfoCtr *info_ctr,
                                   uint32_t max_buffer,
                                   uint32_t *totalentries,
                                   uint32_t *resume_handle,
diff --git a/source/librpc/gen_ndr/ndr_srvsvc.c 
b/source/librpc/gen_ndr/ndr_srvsvc.c
index 8f577c6..bfb4ced 100644
--- a/source/librpc/gen_ndr/ndr_srvsvc.c
+++ b/source/librpc/gen_ndr/ndr_srvsvc.c
@@ -3496,6 +3496,44 @@ _PUBLIC_ void ndr_print_srvsvc_NetSessCtr(struct 
ndr_print *ndr, const char *nam
        }
 }
 
+static enum ndr_err_code ndr_push_srvsvc_NetSessInfoCtr(struct ndr_push *ndr, 
int ndr_flags, const struct srvsvc_NetSessInfoCtr *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_push_align(ndr, 4));
+               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
+               NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
+               NDR_CHECK(ndr_push_srvsvc_NetSessCtr(ndr, NDR_SCALARS, 
&r->ctr));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               NDR_CHECK(ndr_push_srvsvc_NetSessCtr(ndr, NDR_BUFFERS, 
&r->ctr));
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_srvsvc_NetSessInfoCtr(struct ndr_pull *ndr, 
int ndr_flags, struct srvsvc_NetSessInfoCtr *r)
+{
+       if (ndr_flags & NDR_SCALARS) {
+               NDR_CHECK(ndr_pull_align(ndr, 4));
+               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
+               NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
+               NDR_CHECK(ndr_pull_srvsvc_NetSessCtr(ndr, NDR_SCALARS, 
&r->ctr));
+       }
+       if (ndr_flags & NDR_BUFFERS) {
+               NDR_CHECK(ndr_pull_srvsvc_NetSessCtr(ndr, NDR_BUFFERS, 
&r->ctr));
+       }
+       return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_srvsvc_NetSessInfoCtr(struct ndr_print *ndr, const 
char *name, const struct srvsvc_NetSessInfoCtr *r)
+{
+       ndr_print_struct(ndr, name, "srvsvc_NetSessInfoCtr");
+       ndr->depth++;
+       ndr_print_uint32(ndr, "level", r->level);
+       ndr_print_set_switch_value(ndr, &r->ctr, r->level);
+       ndr_print_srvsvc_NetSessCtr(ndr, "ctr", &r->ctr);
+       ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_srvsvc_ShareType(struct ndr_push *ndr, int 
ndr_flags, enum srvsvc_ShareType r)
 {
        {
@@ -14824,15 +14862,10 @@ static enum ndr_err_code 
ndr_push_srvsvc_NetSessEnum(struct ndr_push *ndr, int f
                        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 
ndr_charset_length(r->in.user, CH_UTF16)));
                        NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, 
r->in.user, ndr_charset_length(r->in.user, CH_UTF16), sizeof(uint16_t), 
CH_UTF16));
                }
-               if (r->in.level == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, 
"NULL [ref] pointer");
-               }
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.level));
-               if (r->in.ctr == NULL) {
+               if (r->in.info_ctr == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, 
"NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.ctr, 
*r->in.level));
-               NDR_CHECK(ndr_push_srvsvc_NetSessCtr(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
+               NDR_CHECK(ndr_push_srvsvc_NetSessInfoCtr(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
                NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
                NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
                if (r->in.resume_handle) {
@@ -14840,15 +14873,10 @@ static enum ndr_err_code 
ndr_push_srvsvc_NetSessEnum(struct ndr_push *ndr, int f
                }
        }
        if (flags & NDR_OUT) {
-               if (r->out.level == NULL) {
-                       return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, 
"NULL [ref] pointer");
-               }
-               NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level));
-               if (r->out.ctr == NULL) {
+               if (r->out.info_ctr == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, 
"NULL [ref] pointer");
                }
-               NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.ctr, 
*r->out.level));
-               NDR_CHECK(ndr_push_srvsvc_NetSessCtr(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
+               NDR_CHECK(ndr_push_srvsvc_NetSessInfoCtr(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
                if (r->out.totalentries == NULL) {
                        return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, 
"NULL [ref] pointer");
                }
@@ -14871,8 +14899,7 @@ static enum ndr_err_code 
ndr_pull_srvsvc_NetSessEnum(struct ndr_pull *ndr, int f
        TALLOC_CTX *_mem_save_server_unc_0;
        TALLOC_CTX *_mem_save_client_0;
        TALLOC_CTX *_mem_save_user_0;
-       TALLOC_CTX *_mem_save_level_0;
-       TALLOC_CTX *_mem_save_ctr_0;
+       TALLOC_CTX *_mem_save_info_ctr_0;
        TALLOC_CTX *_mem_save_totalentries_0;
        TALLOC_CTX *_mem_save_resume_handle_0;
        if (flags & NDR_IN) {
@@ -14933,20 +14960,12 @@ static enum ndr_err_code 
ndr_pull_srvsvc_NetSessEnum(struct ndr_pull *ndr, int f
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
                }
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->in.level);
-               }
-               _mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->in.level, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.level));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, 
LIBNDR_FLAG_REF_ALLOC);
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->in.ctr);
+                       NDR_PULL_ALLOC(ndr, r->in.info_ctr);
                }
-               _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->in.ctr, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.ctr, 
*r->in.level));
-               NDR_CHECK(ndr_pull_srvsvc_NetSessCtr(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, 
LIBNDR_FLAG_REF_ALLOC);
+               _mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->in.info_ctr, 
LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_srvsvc_NetSessInfoCtr(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, 
LIBNDR_FLAG_REF_ALLOC);
                NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
                NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
                if (_ptr_resume_handle) {
@@ -14960,29 +14979,19 @@ static enum ndr_err_code 
ndr_pull_srvsvc_NetSessEnum(struct ndr_pull *ndr, int f
                        NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, 
r->in.resume_handle));
                        NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
                }
-               NDR_PULL_ALLOC(ndr, r->out.level);
-               *r->out.level = *r->in.level;
-               NDR_PULL_ALLOC(ndr, r->out.ctr);
-               *r->out.ctr = *r->in.ctr;
+               NDR_PULL_ALLOC(ndr, r->out.info_ctr);
+               *r->out.info_ctr = *r->in.info_ctr;
                NDR_PULL_ALLOC(ndr, r->out.totalentries);
                ZERO_STRUCTP(r->out.totalentries);
        }
        if (flags & NDR_OUT) {
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->out.level);
-               }
-               _mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->out.level, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.level));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, 
LIBNDR_FLAG_REF_ALLOC);
-               if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-                       NDR_PULL_ALLOC(ndr, r->out.ctr);
+                       NDR_PULL_ALLOC(ndr, r->out.info_ctr);
                }
-               _mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-               NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-               NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.ctr, 
*r->out.level));
-               NDR_CHECK(ndr_pull_srvsvc_NetSessCtr(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
-               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, 
LIBNDR_FLAG_REF_ALLOC);
+               _mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
+               NDR_PULL_SET_MEM_CTX(ndr, r->out.info_ctr, 
LIBNDR_FLAG_REF_ALLOC);
+               NDR_CHECK(ndr_pull_srvsvc_NetSessInfoCtr(ndr, 
NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
+               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, 
LIBNDR_FLAG_REF_ALLOC);
                if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
                        NDR_PULL_ALLOC(ndr, r->out.totalentries);
                }
@@ -15035,14 +15044,9 @@ _PUBLIC_ void ndr_print_srvsvc_NetSessEnum(struct 
ndr_print *ndr, const char *na
                        ndr_print_string(ndr, "user", r->in.user);
                }
                ndr->depth--;
-               ndr_print_ptr(ndr, "level", r->in.level);
-               ndr->depth++;
-               ndr_print_uint32(ndr, "level", *r->in.level);
-               ndr->depth--;
-               ndr_print_ptr(ndr, "ctr", r->in.ctr);
+               ndr_print_ptr(ndr, "info_ctr", r->in.info_ctr);
                ndr->depth++;
-               ndr_print_set_switch_value(ndr, r->in.ctr, *r->in.level);
-               ndr_print_srvsvc_NetSessCtr(ndr, "ctr", r->in.ctr);
+               ndr_print_srvsvc_NetSessInfoCtr(ndr, "info_ctr", 
r->in.info_ctr);
                ndr->depth--;
                ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
                ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
@@ -15056,14 +15060,9 @@ _PUBLIC_ void ndr_print_srvsvc_NetSessEnum(struct 
ndr_print *ndr, const char *na
        if (flags & NDR_OUT) {
                ndr_print_struct(ndr, "out", "srvsvc_NetSessEnum");
                ndr->depth++;
-               ndr_print_ptr(ndr, "level", r->out.level);
-               ndr->depth++;
-               ndr_print_uint32(ndr, "level", *r->out.level);
-               ndr->depth--;
-               ndr_print_ptr(ndr, "ctr", r->out.ctr);
+               ndr_print_ptr(ndr, "info_ctr", r->out.info_ctr);
                ndr->depth++;
-               ndr_print_set_switch_value(ndr, r->out.ctr, *r->out.level);
-               ndr_print_srvsvc_NetSessCtr(ndr, "ctr", r->out.ctr);
+               ndr_print_srvsvc_NetSessInfoCtr(ndr, "info_ctr", 
r->out.info_ctr);
                ndr->depth--;
                ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
                ndr->depth++;
diff --git a/source/librpc/gen_ndr/ndr_srvsvc.h 
b/source/librpc/gen_ndr/ndr_srvsvc.h
index fb96d4b..0469040 100644
--- a/source/librpc/gen_ndr/ndr_srvsvc.h
+++ b/source/librpc/gen_ndr/ndr_srvsvc.h
@@ -154,6 +154,7 @@ void ndr_print_srvsvc_NetSessCtr10(struct ndr_print *ndr, 
const char *name, cons
 void ndr_print_srvsvc_NetSessInfo502(struct ndr_print *ndr, const char *name, 
const struct srvsvc_NetSessInfo502 *r);
 void ndr_print_srvsvc_NetSessCtr502(struct ndr_print *ndr, const char *name, 
const struct srvsvc_NetSessCtr502 *r);
 void ndr_print_srvsvc_NetSessCtr(struct ndr_print *ndr, const char *name, 
const union srvsvc_NetSessCtr *r);
+void ndr_print_srvsvc_NetSessInfoCtr(struct ndr_print *ndr, const char *name, 
const struct srvsvc_NetSessInfoCtr *r);
 void ndr_print_srvsvc_ShareType(struct ndr_print *ndr, const char *name, enum 
srvsvc_ShareType r);
 void ndr_print_srvsvc_NetShareInfo0(struct ndr_print *ndr, const char *name, 
const struct srvsvc_NetShareInfo0 *r);
 void ndr_print_srvsvc_NetShareCtr0(struct ndr_print *ndr, const char *name, 
const struct srvsvc_NetShareCtr0 *r);
diff --git a/source/librpc/gen_ndr/srv_srvsvc.c 
b/source/librpc/gen_ndr/srv_srvsvc.c
index 1bbf679..2817542 100644
--- a/source/librpc/gen_ndr/srv_srvsvc.c
+++ b/source/librpc/gen_ndr/srv_srvsvc.c
@@ -984,8 +984,7 @@ static bool api_srvsvc_NetSessEnum(pipes_struct *p)
        }
 
        ZERO_STRUCT(r->out);
-       r->out.level = r->in.level;
-       r->out.ctr = r->in.ctr;
+       r->out.info_ctr = r->in.info_ctr;
        r->out.totalentries = talloc_zero(r, uint32_t);
        if (r->out.totalentries == NULL) {
                talloc_free(r);
diff --git a/source/librpc/gen_ndr/srvsvc.h b/source/librpc/gen_ndr/srvsvc.h
index cf3f237..31a9ba6 100644
--- a/source/librpc/gen_ndr/srvsvc.h
+++ b/source/librpc/gen_ndr/srvsvc.h
@@ -209,6 +209,11 @@ union srvsvc_NetSessCtr {
        struct srvsvc_NetSessCtr502 *ctr502;/* [unique,case(502)] */
 };
 
+struct srvsvc_NetSessInfoCtr {
+       uint32_t level;
+       union srvsvc_NetSessCtr ctr;/* [switch_is(level)] */
+};
+
 enum srvsvc_ShareType
 #ifndef USE_UINT_ENUMS
  {
@@ -1218,15 +1223,13 @@ struct srvsvc_NetSessEnum {
                const char *client;/* [unique,charset(UTF16)] */
                const char *user;/* [unique,charset(UTF16)] */
                uint32_t max_buffer;
-               uint32_t *level;/* [ref] */
-               union srvsvc_NetSessCtr *ctr;/* [ref,switch_is(*level)] */
+               struct srvsvc_NetSessInfoCtr *info_ctr;/* [ref] */
                uint32_t *resume_handle;/* [unique] */
        } in;
 
        struct {
                uint32_t *totalentries;/* [ref] */
-               uint32_t *level;/* [ref] */
-               union srvsvc_NetSessCtr *ctr;/* [ref,switch_is(*level)] */
+               struct srvsvc_NetSessInfoCtr *info_ctr;/* [ref] */
                uint32_t *resume_handle;/* [unique] */
                WERROR result;
        } out;
diff --git a/source/librpc/idl/srvsvc.idl b/source/librpc/idl/srvsvc.idl
index 3154940..4076aac 100644
--- a/source/librpc/idl/srvsvc.idl
+++ b/source/librpc/idl/srvsvc.idl
@@ -355,12 +355,17 @@ import "security.idl", "svcctl.idl";
 
        /******************/
        /* Function: 0x0c */
+
+       typedef struct {
+               uint32 level;
+               [switch_is(level)] srvsvc_NetSessCtr ctr;
+       } srvsvc_NetSessInfoCtr;
+
        WERROR srvsvc_NetSessEnum(
                [in,unique]   [string,charset(UTF16)] uint16 *server_unc,
                [in,unique]   [string,charset(UTF16)] uint16 *client,
                [in,unique]   [string,charset(UTF16)] uint16 *user,
-               [in,out,ref]   uint32 *level,
-               [in,out,switch_is(*level),ref]   srvsvc_NetSessCtr *ctr,
+               [in,out,ref]   srvsvc_NetSessInfoCtr *info_ctr,
                [in]   uint32 max_buffer,
                [out,ref]   uint32 *totalentries,
                [in,out,unique]   uint32 *resume_handle
diff --git a/source/rpc_client/init_srvsvc.c b/source/rpc_client/init_srvsvc.c
index 579756c..0d4d616 100644
--- a/source/rpc_client/init_srvsvc.c
+++ b/source/rpc_client/init_srvsvc.c
@@ -251,3 +251,94 @@ void init_srvsvc_NetRemoteTODInfo(struct 
srvsvc_NetRemoteTODInfo *r,
        r->weekday = weekday;
 }
 
+/*******************************************************************
+ inits a srvsvc_NetSessInfo0 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo0(struct srvsvc_NetSessInfo0 *r,
+                             const char *client)
+{
+       r->client = client;
+}
+
+/*******************************************************************
+ inits a srvsvc_NetSessInfo1 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo1(struct srvsvc_NetSessInfo1 *r,
+                             const char *client,
+                             const char *user,
+                             uint32_t num_open,
+                             uint32_t _time,
+                             uint32_t idle_time,
+                             uint32_t user_flags)
+{
+       r->client = client;
+       r->user = user;
+       r->num_open = num_open;
+       r->time = _time;
+       r->idle_time = idle_time;
+       r->user_flags = user_flags;
+}
+
+/*******************************************************************
+ inits a srvsvc_NetSessInfo2 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo2(struct srvsvc_NetSessInfo2 *r,
+                             const char *client,
+                             const char *user,
+                             uint32_t num_open,
+                             uint32_t _time,
+                             uint32_t idle_time,
+                             uint32_t user_flags,
+                             const char *client_type)
+{
+       r->client = client;
+       r->user = user;
+       r->num_open = num_open;
+       r->time = _time;
+       r->idle_time = idle_time;
+       r->user_flags = user_flags;
+       r->client_type = client_type;
+}
+
+/*******************************************************************
+ inits a srvsvc_NetSessInfo10 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo10(struct srvsvc_NetSessInfo10 *r,
+                              const char *client,
+                              const char *user,
+                              uint32_t _time,
+                              uint32_t idle_time)
+{
+       r->client = client;
+       r->user = user;
+       r->time = _time;
+       r->idle_time = idle_time;
+}
+
+/*******************************************************************
+ inits a srvsvc_NetSessInfo502 structure
+ ********************************************************************/
+
+void init_srvsvc_NetSessInfo502(struct srvsvc_NetSessInfo502 *r,
+                              const char *client,
+                              const char *user,
+                              uint32_t num_open,
+                              uint32_t _time,
+                              uint32_t idle_time,
+                              uint32_t user_flags,
+                              const char *client_type,
+                              const char *transport)
+{
+       r->client = client;
+       r->user = user;
+       r->num_open = num_open;
+       r->time = _time;
+       r->idle_time = idle_time;
+       r->user_flags = user_flags;
+       r->client_type = client_type;
+       r->transport = transport;
+}
diff --git a/source/rpc_server/srv_srvsvc.c b/source/rpc_server/srv_srvsvc.c
index 5351f93..7579e10 100644
--- a/source/rpc_server/srv_srvsvc.c
+++ b/source/rpc_server/srv_srvsvc.c
@@ -152,26 +152,7 @@ static bool api_srv_net_sess_enum(pipes_struct *p)
 
 static bool api_srv_net_sess_del(pipes_struct *p)
 {
-       SRV_Q_NET_SESS_DEL q_u;
-       SRV_R_NET_SESS_DEL r_u;
-       prs_struct *data = &p->in_data.data;
-       prs_struct *rdata = &p->out_data.rdata;
-
-       ZERO_STRUCT(q_u);
-       ZERO_STRUCT(r_u);
-
-       /* grab the net server get enum */
-       if (!srv_io_q_net_sess_del("", &q_u, data, 0))
-               return False;
-
-       /* construct reply.  always indicate success */
-       r_u.status = _srv_net_sess_del(p, &q_u, &r_u);
-
-       /* store the response in the SMB stream */
-       if (!srv_io_r_net_sess_del("", &r_u, rdata, 0))
-               return False;
-
-       return True;
+       return proxy_srvsvc_call(p, NDR_SRVSVC_NETSESSDEL);
 }
 
 /*******************************************************************
diff --git a/source/rpc_server/srv_srvsvc_nt.c 
b/source/rpc_server/srv_srvsvc_nt.c
index 0d4addd..7c2efc9 100644
--- a/source/rpc_server/srv_srvsvc_nt.c
+++ b/source/rpc_server/srv_srvsvc_nt.c
@@ -1274,31 +1274,33 @@ WERROR _srv_net_sess_enum(pipes_struct *p, 
SRV_Q_NET_SESS_ENUM *q_u, SRV_R_NET_S
 }
 
 /*******************************************************************
-net sess del
+ _srvsvc_NetSessDel
 ********************************************************************/
 
-WERROR _srv_net_sess_del(pipes_struct *p, SRV_Q_NET_SESS_DEL *q_u, 
SRV_R_NET_SESS_DEL *r_u)
+WERROR _srvsvc_NetSessDel(pipes_struct *p,
+                         struct srvsvc_NetSessDel *r)
 {
        struct sessionid *session_list;
        struct current_user user;
        int num_sessions, snum;
-       fstring username;
-       fstring machine;
+       const char *username;
+       const char *machine;
        bool not_root = False;
+       WERROR werr;
 
-       rpcstr_pull_unistr2_fstring(username, &q_u->uni_user_name);
-       rpcstr_pull_unistr2_fstring(machine, &q_u->uni_cli_name);
+       username = r->in.user;
+       machine = r->in.client;
 
        /* strip leading backslashes if any */
-       while (machine[0] == '\\') {
-               memmove(machine, &machine[1], strlen(machine));
+       if (machine && machine[0] == '\\' && machine[1] == '\\') {
+               machine += 2;
        }
 
        num_sessions = list_sessions(p->mem_ctx, &session_list);
 
-       DEBUG(5,("_srv_net_sess_del: %d\n", __LINE__));
+       DEBUG(5,("_srvsvc_NetSessDel: %d\n", __LINE__));
 
-       r_u->status = WERR_ACCESS_DENIED;
+       werr = WERR_ACCESS_DENIED;


-- 
Samba Shared Repository

Reply via email to