Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
1f78cb8f
Commit
1f78cb8f
authored
Dec 13, 2017
by
Hans Leidekker
Committed by
Alexandre Julliard
Dec 13, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wsdapi/tests: Register an exception with the firewall to avoid a dialog.
Signed-off-by:
Hans Leidekker
<
hans@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
56b71aa8
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
141 additions
and
1 deletion
+141
-1
Makefile.in
dlls/wsdapi/tests/Makefile.in
+1
-1
discovery.c
dlls/wsdapi/tests/discovery.c
+140
-0
No files found.
dlls/wsdapi/tests/Makefile.in
View file @
1f78cb8f
TESTDLL
=
wsdapi.dll
IMPORTS
=
wsdapi ole32
user32 ws2_
32
IMPORTS
=
wsdapi ole32
oleaut32 user32 ws2_32 advapi
32
C_SRCS
=
\
address.c
\
...
...
dlls/wsdapi/tests/discovery.c
View file @
1f78cb8f
...
...
@@ -27,6 +27,7 @@
#include "initguid.h"
#include "objbase.h"
#include "wsdapi.h"
#include <netfw.h>
typedef
struct
IWSDiscoveryPublisherNotifyImpl
{
IWSDiscoveryPublisherNotify
IWSDiscoveryPublisherNotify_iface
;
...
...
@@ -276,8 +277,146 @@ static void Publish_tests(void)
IWSDiscoveryPublisherNotify_Release
(
sink2
);
}
enum
firewall_op
{
APP_ADD
,
APP_REMOVE
};
static
BOOL
is_process_elevated
(
void
)
{
HANDLE
token
;
if
(
OpenProcessToken
(
GetCurrentProcess
(),
TOKEN_QUERY
,
&
token
))
{
TOKEN_ELEVATION_TYPE
type
;
DWORD
size
;
BOOL
ret
;
ret
=
GetTokenInformation
(
token
,
TokenElevationType
,
&
type
,
sizeof
(
type
),
&
size
);
CloseHandle
(
token
);
return
(
ret
&&
type
==
TokenElevationTypeFull
);
}
return
FALSE
;
}
static
BOOL
is_firewall_enabled
(
void
)
{
HRESULT
hr
,
init
;
INetFwMgr
*
mgr
=
NULL
;
INetFwPolicy
*
policy
=
NULL
;
INetFwProfile
*
profile
=
NULL
;
VARIANT_BOOL
enabled
=
VARIANT_FALSE
;
init
=
CoInitializeEx
(
0
,
COINIT_APARTMENTTHREADED
);
hr
=
CoCreateInstance
(
&
CLSID_NetFwMgr
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_INetFwMgr
,
(
void
**
)
&
mgr
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
goto
done
;
hr
=
INetFwMgr_get_LocalPolicy
(
mgr
,
&
policy
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
goto
done
;
hr
=
INetFwPolicy_get_CurrentProfile
(
policy
,
&
profile
);
if
(
hr
!=
S_OK
)
goto
done
;
hr
=
INetFwProfile_get_FirewallEnabled
(
profile
,
&
enabled
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
done:
if
(
policy
)
INetFwPolicy_Release
(
policy
);
if
(
profile
)
INetFwProfile_Release
(
profile
);
if
(
mgr
)
INetFwMgr_Release
(
mgr
);
if
(
SUCCEEDED
(
init
))
CoUninitialize
();
return
(
enabled
==
VARIANT_TRUE
);
}
static
HRESULT
set_firewall
(
enum
firewall_op
op
)
{
static
const
WCHAR
testW
[]
=
{
'w'
,
's'
,
'd'
,
'a'
,
'p'
,
'i'
,
'_'
,
't'
,
'e'
,
's'
,
't'
,
0
};
HRESULT
hr
,
init
;
INetFwMgr
*
mgr
=
NULL
;
INetFwPolicy
*
policy
=
NULL
;
INetFwProfile
*
profile
=
NULL
;
INetFwAuthorizedApplication
*
app
=
NULL
;
INetFwAuthorizedApplications
*
apps
=
NULL
;
BSTR
name
,
image
=
SysAllocStringLen
(
NULL
,
MAX_PATH
);
if
(
!
GetModuleFileNameW
(
NULL
,
image
,
MAX_PATH
))
{
SysFreeString
(
image
);
return
E_FAIL
;
}
init
=
CoInitializeEx
(
0
,
COINIT_APARTMENTTHREADED
);
hr
=
CoCreateInstance
(
&
CLSID_NetFwMgr
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_INetFwMgr
,
(
void
**
)
&
mgr
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
goto
done
;
hr
=
INetFwMgr_get_LocalPolicy
(
mgr
,
&
policy
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
goto
done
;
hr
=
INetFwPolicy_get_CurrentProfile
(
policy
,
&
profile
);
if
(
hr
!=
S_OK
)
goto
done
;
hr
=
INetFwProfile_get_AuthorizedApplications
(
profile
,
&
apps
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
goto
done
;
hr
=
CoCreateInstance
(
&
CLSID_NetFwAuthorizedApplication
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_INetFwAuthorizedApplication
,
(
void
**
)
&
app
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
goto
done
;
hr
=
INetFwAuthorizedApplication_put_ProcessImageFileName
(
app
,
image
);
if
(
hr
!=
S_OK
)
goto
done
;
name
=
SysAllocString
(
testW
);
hr
=
INetFwAuthorizedApplication_put_Name
(
app
,
name
);
SysFreeString
(
name
);
ok
(
hr
==
S_OK
,
"got %08x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
goto
done
;
if
(
op
==
APP_ADD
)
hr
=
INetFwAuthorizedApplications_Add
(
apps
,
app
);
else
if
(
op
==
APP_REMOVE
)
hr
=
INetFwAuthorizedApplications_Remove
(
apps
,
image
);
else
hr
=
E_INVALIDARG
;
done:
if
(
app
)
INetFwAuthorizedApplication_Release
(
app
);
if
(
apps
)
INetFwAuthorizedApplications_Release
(
apps
);
if
(
policy
)
INetFwPolicy_Release
(
policy
);
if
(
profile
)
INetFwProfile_Release
(
profile
);
if
(
mgr
)
INetFwMgr_Release
(
mgr
);
if
(
SUCCEEDED
(
init
))
CoUninitialize
();
SysFreeString
(
image
);
return
hr
;
}
START_TEST
(
discovery
)
{
BOOL
firewall_enabled
=
is_firewall_enabled
();
HRESULT
hr
;
if
(
firewall_enabled
)
{
if
(
!
is_process_elevated
())
{
skip
(
"no privileges, skipping tests to avoid firewall dialog
\n
"
);
return
;
}
if
((
hr
=
set_firewall
(
APP_ADD
))
!=
S_OK
)
{
skip
(
"can't authorize app in firewall %08x
\n
"
,
hr
);
return
;
}
}
CoInitialize
(
NULL
);
CreateDiscoveryPublisher_tests
();
...
...
@@ -285,4 +424,5 @@ START_TEST(discovery)
Publish_tests
();
CoUninitialize
();
if
(
firewall_enabled
)
set_firewall
(
APP_REMOVE
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment