Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
4ca93678
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4ca93678
编写于
2月 12, 2016
作者:
J
Jared Parsons
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #8504 from jaredpar/fix
Normalize paths when generating pipe names
上级
5889aeb2
c065e202
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
35 addition
and
10 deletion
+35
-10
src/Compilers/Server/VBCSCompiler/VBCSCompiler.cs
src/Compilers/Server/VBCSCompiler/VBCSCompiler.cs
+1
-1
src/Compilers/Server/VBCSCompilerTests/DesktopBuildClientTests.cs
...ilers/Server/VBCSCompilerTests/DesktopBuildClientTests.cs
+13
-0
src/Compilers/Shared/DesktopBuildClient.cs
src/Compilers/Shared/DesktopBuildClient.cs
+21
-9
未找到文件。
src/Compilers/Server/VBCSCompiler/VBCSCompiler.cs
浏览文件 @
4ca93678
...
...
@@ -75,7 +75,7 @@ internal static async Task<int> RunShutdownAsync(string pipeName, bool waitForPr
if
(
string
.
IsNullOrEmpty
(
pipeName
))
{
var
clientDirectory
=
AppDomain
.
CurrentDomain
.
BaseDirectory
;
pipeName
=
DesktopBuildClient
.
GetPipeNameF
romFileInfo
(
clientDirectory
);
pipeName
=
DesktopBuildClient
.
GetPipeNameF
orPath
(
clientDirectory
);
}
var
mutexName
=
BuildProtocolConstants
.
GetServerMutexName
(
pipeName
);
...
...
src/Compilers/Server/VBCSCompilerTests/DesktopBuildClientTests.cs
浏览文件 @
4ca93678
...
...
@@ -284,5 +284,18 @@ public void KeepAlive()
Assert
.
Null
(
_sessionKey
);
}
}
public
class
MiscTest
{
[
Fact
]
public
void
GetBasePipeNameSlashes
()
{
var
path
=
string
.
Format
(
@"q:{0}the{0}path"
,
Path
.
DirectorySeparatorChar
);
var
name
=
DesktopBuildClient
.
GetBasePipeName
(
path
);
Assert
.
Equal
(
name
,
DesktopBuildClient
.
GetBasePipeName
(
path
));
Assert
.
Equal
(
name
,
DesktopBuildClient
.
GetBasePipeName
(
path
+
Path
.
DirectorySeparatorChar
));
Assert
.
Equal
(
name
,
DesktopBuildClient
.
GetBasePipeName
(
path
+
Path
.
DirectorySeparatorChar
+
Path
.
DirectorySeparatorChar
));
}
}
}
}
src/Compilers/Shared/DesktopBuildClient.cs
浏览文件 @
4ca93678
...
...
@@ -82,7 +82,7 @@ protected override int RunLocalCompilation(string[] arguments, BuildPaths buildP
language
,
arguments
,
buildPaths
,
GetPipeNameF
romFileInfo
(
buildPaths
.
ClientDirectory
),
GetPipeNameF
orPath
(
buildPaths
.
ClientDirectory
),
keepAlive
,
libEnvVariable
,
timeoutOverride
:
null
,
...
...
@@ -419,11 +419,28 @@ private static bool CheckPipeConnectionOwnership(NamedPipeClientStream pipeStrea
/// </summary>
protected
override
string
GetSessionKey
(
BuildPaths
buildPaths
)
{
return
GetPipeNameF
romFileInfo
(
buildPaths
.
ClientDirectory
);
return
GetPipeNameF
orPath
(
buildPaths
.
ClientDirectory
);
}
internal
static
string
GetPipeNameFromFileInfo
(
string
compilerExeDirectory
)
internal
static
string
GetPipeNameForPath
(
string
compilerExeDirectory
)
{
var
basePipeName
=
GetBasePipeName
(
compilerExeDirectory
);
// Prefix with username and elevation
var
identity
=
WindowsIdentity
.
GetCurrent
();
var
principal
=
new
WindowsPrincipal
(
identity
);
var
isAdmin
=
principal
.
IsInRole
(
WindowsBuiltInRole
.
Administrator
);
var
userName
=
Environment
.
UserName
;
return
$"
{
userName
}
.
{
isAdmin
}
.
{
basePipeName
}
"
;
}
internal
static
string
GetBasePipeName
(
string
compilerExeDirectory
)
{
// Normalize away trailing slashes. File APIs include / exclude this with no
// discernable pattern. Easiest to normalize it here vs. auditing every caller
// of this method.
compilerExeDirectory
=
compilerExeDirectory
.
TrimEnd
(
Path
.
DirectorySeparatorChar
);
string
basePipeName
;
using
(
var
sha
=
SHA256
.
Create
())
{
...
...
@@ -433,12 +450,7 @@ internal static string GetPipeNameFromFileInfo(string compilerExeDirectory)
.
Replace
(
"="
,
string
.
Empty
);
}
// Prefix with username and elevation
var
identity
=
WindowsIdentity
.
GetCurrent
();
var
principal
=
new
WindowsPrincipal
(
identity
);
var
isAdmin
=
principal
.
IsInRole
(
WindowsBuiltInRole
.
Administrator
);
var
userName
=
Environment
.
UserName
;
return
$"
{
userName
}
.
{
isAdmin
}
.
{
basePipeName
}
"
;
return
basePipeName
;
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录