r2699: Correct handle ServerAlive() and ServerAlive2() + add torture tests
authorJelmer Vernooij <jelmer@samba.org>
Mon, 27 Sep 2004 22:06:27 +0000 (22:06 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:59:24 +0000 (12:59 -0500)
(This used to be commit 9e74144aa8e5f9a8b6e3d5293833c4afeebeddb0)

source4/librpc/idl/dcom.idl
source4/librpc/idl/oxidresolver.idl
source4/torture/rpc/oxidresolve.c [new file with mode: 0644]

index df0bcbc80ea78be01c4094b1a3b79a2fafbb313e..46a512229984faf9314df123961f6059b802920b 100644 (file)
@@ -275,7 +275,7 @@ interface IUnknown
        /* Returns the interface with the specified IID 
           if implemented by this object */
        HRESULT QueryInterface([in] IID *riid
-                                                  /*FIXME, [out] void **data*/);
+          /*FIXME, [out] void **data*/);
 
        /*****************/
        /* Function 0x01 */
@@ -293,11 +293,15 @@ interface IUnknown
        pointer_default(unique)
 ] interface IClassFactory : IUnknown
 {
-       HRESULT CreateInstance();
+       HRESULT CreateInstance(/*FIXME[in] IUnknown *pUnknown, 
+                              [in] IID *riid,
+                              [out, iid_is(riid)] void **ppv*/);
 
        HRESULT RemoteCreateInstance();
 
-       HRESULT LockServer();
+       /* Set lock to TRUE when you want to do a lock
+       and set it to FALSE when you want to unlock */
+       HRESULT LockServer([in] uint8 lock);
 
        HRESULT RemoteLockServer();
 }
@@ -451,16 +455,6 @@ interface ISystemActivator : IUnknown
 }
 
 
-// Service Control Manager
-
-[
-       uuid(),
-       version(2.0)
-] interface SCM
-{
-       void SCM_Dummy();
-}
-
 [
        object,
        uuid(00000136-0000-0000-C000-000000000046)
index 57c5cd439fa8525a2770001ed8f9828f94514a5d..61e3049a105edce3472cfb58be6786dad9be4c55 100644 (file)
@@ -86,10 +86,13 @@ interface IOXIDResolver
                                                                                          [out, ref] uint32 *pAuthnHint,
                                                                                          [out, ref] COMVERSION *pComVersion
                                                                                         );
+                                                                                        typedef struct {
+               COMVERSION version;
+               uint32 unknown1;
+       } COMINFO;
 
        [idempotent] WERROR ServerAlive2 (
-         [out] COMVERSION version,
-         [out] uint8 unknown1[4],
+         [out] COMINFO info,
          [out] DUALSTRINGARRAY dualstring,
-         [out] uint8 unknown2[5]);
+         [out] uint8 unknown2[3]);
 }
diff --git a/source4/torture/rpc/oxidresolve.c b/source4/torture/rpc/oxidresolve.c
new file mode 100644 (file)
index 0000000..476d140
--- /dev/null
@@ -0,0 +1,117 @@
+/* 
+   Unix SMB/CIFS implementation.
+   test suite for oxidresolve operations
+
+   Copyright (C) Jelmer Vernooij 2004
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+static int test_SimplePing(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+       struct SimplePing r;
+       NTSTATUS status;
+       HYPER_T h = 10;
+
+       r.in.SetId = &h;
+
+       status = dcerpc_SimplePing(p, mem_ctx, &r);
+       if(NT_STATUS_IS_ERR(status)) {
+               fprintf(stderr, "SimplePing: %s\n", nt_errstr(status));
+               return 0;
+       }
+
+       if(!W_ERROR_IS_OK(r.out.result)) {
+               fprintf(stderr, "SimplePing: %s\n", win_errstr(r.out.result));
+               return 0;
+       }
+
+       return 1;
+}
+
+static int test_ServerAlive(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+       struct ServerAlive r;
+       NTSTATUS status;
+
+       status = dcerpc_ServerAlive(p, mem_ctx, &r);
+       if(NT_STATUS_IS_ERR(status)) {
+               fprintf(stderr, "ServerAlive: %s\n", nt_errstr(status));
+               return 0;
+       }
+
+       if(!W_ERROR_IS_OK(r.out.result)) {
+               fprintf(stderr, "ServerAlive: %s\n", win_errstr(r.out.result));
+               return 0;
+       }
+
+       return 1;
+}
+
+
+static int test_ServerAlive2(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+{
+       struct ServerAlive2 r;
+       NTSTATUS status;
+
+       status = dcerpc_ServerAlive2(p, mem_ctx, &r);
+       if(NT_STATUS_IS_ERR(status)) {
+               fprintf(stderr, "ServerAlive2: %s\n", nt_errstr(status));
+               return 0;
+       }
+
+       if(!W_ERROR_IS_OK(r.out.result)) {
+               fprintf(stderr, "ServerAlive2: %s\n", win_errstr(r.out.result));
+               return 0;
+       }
+
+       return 1;
+}
+
+BOOL torture_rpc_oxidresolve(int dummy)
+{
+        NTSTATUS status;
+       struct dcerpc_pipe *p;
+       TALLOC_CTX *mem_ctx;
+       BOOL ret = True;
+
+       mem_ctx = talloc_init("torture_rpc_oxidresolve");
+
+       status = torture_rpc_connection(&p, 
+                                       DCERPC_IOXIDRESOLVER_NAME, 
+                                       DCERPC_IOXIDRESOLVER_UUID, 
+                                       DCERPC_IOXIDRESOLVER_VERSION);
+
+       if (!NT_STATUS_IS_OK(status)) {
+               return False;
+       }
+
+       if(!test_SimplePing(p, mem_ctx))
+               ret = False;
+
+       if(!test_ServerAlive(p, mem_ctx))
+               ret = False;
+
+       if(!test_ServerAlive2(p, mem_ctx))
+               ret = False;
+
+       talloc_destroy(mem_ctx);
+
+        torture_rpc_close(p);
+
+       return ret;
+}