我安装了Cygwin,选择了一套相当少的软件包.
在一个终端,我试图"清除"清除终端,但我得到了
bash: clear: command not found
Run Code Online (Sandbox Code Playgroud)
我如何让它工作?
(这是一个关于模糊问题的问题.我试图提供所有相关数据,希望有人提供有用的信息;为长篇描述道歉.)
我们的网络应用
我们有一个在IIS 7.5中运行的.NET 4 Web应用程序,可以访问Active Directory和SQL Server数据库.
此Web应用程序在一个虚拟的"应用程序池标识"运行,通过设置应用程序的应用程序池的标识ApplicationPoolIdentity.可以在StackOverflow答案和它所引用的博客文章中找到虚拟身份的简明描述:应用程序池标识只是一个附加组,它被添加到作为"网络服务"运行的Web应用程序的工作进程中.但是,一位消息人士模糊地暗示"网络服务和ApplicationPoolIdentity确实存在IIS.net站点文档不发布的差异".因此,虚拟身份可能不仅仅是一个额外的群体.
我们选择使用ApplicationPoolIdentity而不是NetworkService,因为它成为IIS 7.5中的默认设置(参见,例如,此处),并且根据Microsoft的建议:"此身份允许管理员指定仅与应用程序所属身份相关的权限池正在运行,从而提高了服务器的安全性." (来自processModel元素,用于为applicationPools添加[IIS 7设置架构])"应用程序池标识是一个强大的新隔离功能","使运行的IIS应用程序更安全可靠."(来自IIS.net文章"应用程序池标识")
该应用程序使用集成Windows身份验证,但<identity impersonate="false"/>不是最终用户的身份,而是使用虚拟应用程序池标识来运行我们的代码.
此应用程序使用System.DirectoryServices类(即ADSI API)查询Active Directory .在大多数地方,这是在不指定其他用户名/密码或其他凭据的情况下完成的.
此应用程序还使用Integrated Security=true连接字符串连接到SQL Server数据库.如果数据库是本地的,那么我们看到IIS APPPOOL\OurAppPoolName用于连接数据库; 如果数据库是远程的,则使用计算机帐户OURDOMAIN\ourwebserver$.
我们的问题
我们经常遇到以下一种方式导致工作安装失败的问题.
当数据库位于远程系统上时,数据库连接开始失败:"用户登录失败'NT AUTHORITY\ANONYMOUS LOGON'.原因:基于令牌的服务器访问验证因基础结构错误而失败.检查以前的错误." 先前的错误是"错误:18456,严重性:14,状态:11." 所以似乎现在OURDOMAIN\ourwebserver$不再使用,而是尝试匿名访问.(我们有轶事证据表明UAC关闭时出现了这个问题,并且在打开UAC后它就消失了.但请注意,更改UAC需要重新启动......)IIS.net线程中报告了类似的问题"使用ApplicationPoolIdentity连接到SQL",特别是在一个回复中.
通过ADSI(System.DirectoryServices)的Active Directory操作开始失败,错误0x8000500C("未知错误"),0x80072020("发生操作错误.")或0x200B("指定的目录服务属性或值不存在") .
从Internet Explorer登录应用程序开始失败,出现HTTP 401错误.但是如果在IIS中我们然后在谈判之前放置NTLM然后再次工作.(请注意,Kerberos需要访问AD,但NTLM不需要访问AD.)IIS.net线程"使用AppPool标识失败的窗口身份验证"中报告了类似的问题.
我们的假设和解决方法
将应用程序池从ApplicationPoolIdentity切换到NetworkService时,至少AD和登录问题似乎总是消失.(我们发现有一份报告证实了这一点.)
页面"解决ASP页面上的身份验证问题"有一些与主要和次要令牌相关的建议,我发现它令人鼓舞的是它链接了我们的前两个错误:它提到了NT AUTHORITY\ANONYMOUS LOGON访问,AD错误0x8000500C和"指定的目录服务属性或值不存在". …
asp.net adsi active-directory iis-7.5 applicationpoolidentity
我们的产品由许多相互依赖的Maven项目组成.所有这些Maven项目都汇集在一个项目中,提供最终产品.
Maven项目共享相同的生命周期.换句话说,他们不是由单独的团队管理,他们有明确的<dependency>变化来获取其他项目的新版本.相反,当有人在某个项目中更改某些内容时,结果应该直接进入最终产品,而无需进行其他更改.
我们使用Jenkins作为持续集成工具.
我们的主要愿望如下:
pom.xml文件.问题:使用Jenkins执行此操作的最佳方法是什么?
我们目前正在考虑使用Jenkins Pipeline插件来使用单个作业,该插件分析Maven依赖关系和SCM更改,决定需要构建什么以及以何种顺序构建,然后实际构建项目.
maven jenkins maven-module jenkins-workflow maven-dependency
Java SE 6文档中的Oracle "Http Authentication"页面说"如果您作为域用户在Windows计算机上运行,或者您在已经发出kinit命令并获得凭据缓存的Linux或Solaris计算机上运行"那么实例传递给Authenticator.setDefault()"将被完全忽略".
这与我观察到的相符:在Windows系统上为主机X设置HTTP或HTTPS连接始终从"Windows Vault"的"Windows凭据"传递主机X的凭据,如我的Windows 7"凭据管理器"中所示控制面板页面.
但是,在我的用例中,我不想使用可能由Windows存储的任何凭据,而是我总是希望使用我在代码中明确指定的凭据.
有没有办法覆盖记录的行为,即有没有办法忽略Windows存储的凭据?
更新:如果没有,有人可以指向我在Java SE 6源代码中的位置,在那里我可以看到存储的Windows凭据不能被忽略吗?
我在我的ASP.net网络应用程序中使用ADFS进行身份验证.STS服务器将浏览器重定向到https://test.contoso.com.在首先将客户端重定向到STS时,STS不允许任何返回URL参数.
是否可以将浏览器从https://test.contoso.com(从STS重定向后)重定向到任何其他URL,例如https://variableName.test1.contoso2.com?
任何帮助深表感谢.
我想要一个Jenkins构建步骤,只需将给定的URL下载到工作区.有一个简单的方法吗?
(我目前使用的是一个简单的Ant脚本<get/>.但这意味着我需要在SVN的某个地方安装该脚本,并在构建期间检查它.我发现这很麻烦.)
更新:为了澄清,我想下载一个URL,而无需在构建系统上安装其他软件或使用其他脚本.(当然,Jenkins插件很好.)我最好不要依赖构建奴隶是Linux,Windows或其他什么.
我创建了一个PowerShell脚本,它循环遍历大量的XML Schema(.xsd)文件,并为每个文件创建一个.NET XmlSchemaSet对象,调用Add()并向Compile()其添加模式,并打印出所有验证错误.
此脚本可以正常工作,但某处存在内存泄漏,如果在100个文件上运行,则会占用数十亿字节的内存.
我在循环中基本上做的是以下内容:
$schemaSet = new-object -typename System.Xml.Schema.XmlSchemaSet
register-objectevent $schemaSet ValidationEventHandler -Action {
...write-host the event details...
}
$reader = [System.Xml.XmlReader]::Create($schemaFileName)
[void] $schemaSet.Add($null_for_dotnet_string, $reader)
$reader.Close()
$schemaSet.Compile()
Run Code Online (Sandbox Code Playgroud)
(可以在此要点中找到重现此问题的完整脚本:https://gist.github.com/3002649.只需运行它,并在任务管理器或Process Explorer中观察内存使用量的增加.)
受到一些博客帖子的启发,我尝试添加
remove-variable reader, schemaSet
Run Code Online (Sandbox Code Playgroud)
我也尝试过$schema从中Add()做起
[void] $schemaSet.RemoveRecursive($schema)
Run Code Online (Sandbox Code Playgroud)
这似乎有一些影响,但仍有泄漏.我假设旧的实例XmlSchemaSet仍在使用内存而不进行垃圾回收.
问题:我如何正确地教垃圾收集器它可以回收上面代码中使用的所有内存?或者更一般地说:如何通过有限的内存来实现我的目标?
我们刚刚从SHA-1切换到SHA-2代码签名证书.(作为背景信息,我们使用COMODO代码签名证书在Windows上使用signtool.exe签署.exe和.xap文件.)我们使用经过认证的时间戳来执行此操作,以确保Windows在代码签名证书后始终信任代码签名到期.
现在我注意到使用http://timestamp.comodoca.com/authenticode时,时间戳证书仍然是SHA-1证书.(详细信息:df946a5 ...主题'CN = COMODO时间戳签名者,O = COMODO CA Limited,L = Salford,S =大曼彻斯特,C = GB'.)
(在Windows上,可以通过签名.exe查看该证书,然后在其Explorer Properties对话框中转到Digital Signatures选项卡,选择签名并单击Details,然后在Digital Signature Details对话框中单击counter签名并单击Details,然后在第二个"数字签名详细信息"对话框中单击"查看证书".如果"签名哈希算法"为"sha1",则证书为SHA-1证书.)
这会是一个问题吗? 换句话说,在我们当前的代码签名证书过期之后,并且在Microsoft Windows将SHA-1视为破坏的算法(最迟在2020年)之后,我们当前的签名是否仍然可信?或者Windows会说,"时间戳在代码签名证书的有效范围内,但时间戳是用SHA-1证书签名的,所以我不相信时间戳,因此我不相信这个签名"?
我们可以/应该使用其他服务吗?(不是Verisign的http://timestamp.verisign.com/scripts/timstamp.dll,因为他们还使用SHA-1时间戳证书,即6543992 ...)
Python的文档说:
如果不存在任何表达式,请
raise重新引发当前作用域中活动的最后一个异常。
(Python 3:https://docs.python.org/3/reference/simple_stmts.html#raise; Python 2.7:https://docs.python.org/2.7/reference/simple_stmts.html#raise。)
但是,“上次激活”的概念似乎已经改变。见证以下代码示例:
#
from __future__ import print_function
import sys
print('Python version =', sys.version)
try:
raise Exception('EXPECTED')
except:
try:
raise Exception('UNEXPECTED')
except:
pass
raise # re-raises UNEXPECTED for Python 2, and re-raises EXPECTED for Python 3
Run Code Online (Sandbox Code Playgroud)
这会导致我在Python 2中出乎意料的事情:
Python version = 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AMD64)]
Traceback (most recent call last):
File "./x", line 10, in <module>
raise Exception('UNEXPECTED')
Exception: …Run Code Online (Sandbox Code Playgroud) asp.net ×2
jenkins ×2
windows ×2
adfs ×1
adsi ×1
apache ×1
clear ×1
code-signing ×1
credentials ×1
cygwin ×1
exception ×1
iis-7.5 ×1
java ×1
maven ×1
maven-module ×1
memory-leaks ×1
ncurses ×1
powershell ×1
python ×1
python-2.7 ×1
python-3.x ×1
raise ×1
redirect ×1
sha1 ×1
sha2 ×1
timestamping ×1
url ×1
wif ×1
xmlschemaset ×1
xsd ×1