我不时会用一个while(1)块来压扁一连串if..else不成比例的东西.它沿着这些方向发展.
而不是做:
// process
if (success) {
// process
if (success) {
//process
if (success) {
// etc
}
}
}
Run Code Online (Sandbox Code Playgroud)
我做:
while (1) {
// process
if (!success) break;
// process
if (!success) break;
// process
if (!success) break;
// etc
break;
}
Run Code Online (Sandbox Code Playgroud)
我对这个结尾的隐含跳跃感到有些恼火while.我能用更精简的构造逃脱(即最后没有break)吗?
我可以break用变量(或寄存器?)来交易最终结果.这不是更精简或更清晰.
int once = 1;
while (once--) {
// process
if (!success) break;
// process
if (!success) break;
// process
if (!success) break;
// etc …Run Code Online (Sandbox Code Playgroud) 我需要实现一个jax-ws客户端.
以下是提供者文档关于安全性的内容
目前,我们在http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf上使用SOAP Message Security 1.0版规范.
本标准使用另外两个来自W3C规范:
XMLENC(http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/)
和XMLDSIG(http://www.w3.org/TR/2002)/REC-xmldsig-core-20020212 /)对于签名,使用指定X509的"URI"和"valueType"的直接"引用"的"SecurityTokenReference"是强制性的.对于加密,我们也推荐它,但我们也按优先顺序支持对keyIdentifier,X509IssuerSerial或keyName的引用.
加密和签名的块必须是"body"标记.
我们建议使用:"rsa-sha1"用于签名,"rsa-1_5"用于加密密钥,"tripledes-cbc"用于加密正文.
所以我提出了以下政策(从netbeans生成).但是......我看起来并不合适.Web服务尚无法访问,但我不确定规范版本是否匹配.我在这个问题上看了很多,但我仍然有些困惑.这个政策看起来不错吗?
<wsp1:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoapPolicy">
<wsp1:ExactlyOne>
<wsp1:All>
<sp:TransportBinding>
<wsp1:Policy>
<sp:TransportToken>
<wsp1:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp1:Policy>
</sp:TransportToken>
<sp:Layout>
<wsp1:Policy>
<sp:Lax/>
</wsp1:Policy>
</sp:Layout>
<sp:AlgorithmSuite>
<wsp1:Policy>
<sp:TripleDesRsa15/>
</wsp1:Policy>
</sp:AlgorithmSuite>
</wsp1:Policy>
</sp:TransportBinding>
<sp:Wss10/>
<sp:EndorsingSupportingTokens>
<wsp1:Policy>
<sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
<wsp1:Policy>
<sp:WssX509V3Token10/>
</wsp1:Policy>
</sp:X509Token>
</wsp1:Policy>
</sp:EndorsingSupportingTokens>
</wsp1:All>
</wsp1:ExactlyOne>
</wsp1:Policy>
<wsp:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoap_perform_Input_Policy">
<wsp:ExactlyOne>
<wsp:All>
<sp1:SignedEncryptedSupportingTokens>
<wsp:Policy>
<sp1:X509Token sp1:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp1:WssX509V3Token10/>
</wsp:Policy>
</sp1:X509Token>
</wsp:Policy>
</sp1:SignedEncryptedSupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
Run Code Online (Sandbox Code Playgroud)
编辑:我无法用wsit发送预期的消息.例如,使用Netbeans向导,如果不使用寻址,我无法获得加密的标头.这应该是可能的吗?
我用一个旧的轴1类和wss4j攻击了一些东西,它有效,但它很难看,而且我宁愿使用更具前瞻性的东西.
在如下的脚本中,是否可以在不删除'my'的情况下有效地仅仅声明'var'一次并使其在BEGIN块之外可见?
echo -e "\n\n\n" | \
perl -lne 'BEGIN { my $var="declared & initialized once" } print $var'
Run Code Online (Sandbox Code Playgroud)
另外,为什么在没有'my'的情况下声明var会使它在BEGIN块之外可见?
我一直在尝试使用以下rpath编译openssl 1.0.0g:
$ORIGIN/../lib64
Run Code Online (Sandbox Code Playgroud)
每次我readelf -d apps/openssl,我得到的结果如下,取决于我尝试的逃避变化:
\RIGIN/../lib64
RIGIN/../lib64
ORIGIN/../lib64
Run Code Online (Sandbox Code Playgroud)
我想在不使用像chrpath这样的外部工具的情况下设置我的rpath.它可能吗?我基本上会接受任何不涉及使用像chrpath这样的外部工具的东西(虽然我已经完成了).
理想情况下,我想通过在命令行(任何形式-Wl,-rpath,$ORIGIN/../lib64)上传递选项来实现.
我不介意编辑生成的Makefile,这是我最后一次尝试的.如果我能打印出一个愚蠢的美元符号!我尝试在BUILDENV =块下修改LIBRPATH而没有运气.到目前为止我的最好成绩:
LIBRPATH=$$'ORIGIN/../lib64 # result: /../lib64
LIBRPATH=$$$$'ORIGIN/../lib64 # result: 12345<pid>/../lib64
Run Code Online (Sandbox Code Playgroud)
我已经阅读了各种与rpath相关的问题,并尝试了各种转义和引用技巧但到目前为止没有任何工作!
将stl程序的用法打印到stdout最简单的方法是什么?我正在寻找heredoc技巧或任何类似的有用的东西.忘记单独的连续打印.
编辑1:我多次遇到的问题是必须单独维护使用,一般脚本文档和选项处理.我一直在寻找一种方法来将一些或所有这些与最小的开销相结合.感谢您提出的许多建议.当我有机会尝试提出的解决方案时,我会接受答案.
我有一个完全可操作的系统,基于openssl的客户端与openssl服务器交互.每个客户端都有自己的证书,由服务器验证.已使用openssl(X509,pem)生成证书.他们是自签名的.
我现在想要编写一个基于SslStream的测试客户端.我使用了SslStream类文档中的客户端示例.
我的SslStream客户端无法完成握手.stunnel抱怨客户没有发送证书.这在Wireshark中确认(证书长度:握手消息中的0).
我的客户端显示以下异常:
内部异常:收到的消息是意外的或格式错误
这是我加载证书的方式:
X509Certificate cert = new X509Certificate2(filename, password);
X509CertificateCollection certColl = new X509CertificateCollection();
certColl.Add(cert);
Run Code Online (Sandbox Code Playgroud)
我尝试检索证书的各种属性(例如:GetSerialNumberString()).有用.Verify方法返回false.这是我要研究的下一件事.
我如何设置我的SslStream似乎并不重要(相同的结果):
sslStream.AuthenticateAsClient(serverName);
SslStream sslStream = new SslStream(
client.GetStream(),
false,
new RemoteCertificateValidationCallback(ValidateServerCertificate),
new LocalCertificateSelectionCallback(SelectLocalCertificate));
Run Code Online (Sandbox Code Playgroud)
与身份验证相同:
sslStream.AuthenticateAsClient(serverName);
sslStream.AuthenticateAsClient(serverName,
certColl,
SslProtocols.Tls,
true);
Run Code Online (Sandbox Code Playgroud)
SelectLocalCertificate被叫(两次)并返回我的证书.ValidateServerCertificate目前从未被召唤(令我惊讶).
我该怎么调试呢?如果你可以解决我的问题,那就更好了.
UPDATE
我添加了一个函数来执行基于文档中的X509Chain示例的链验证.它显示证书上的各种信息,包括两个有趣的消息:
Element certificate is valid: False
Element error status length: 1
Run Code Online (Sandbox Code Playgroud)
最后,我没有比调用验证时更多的细节.
输出openssl verify cert.pem不报告任何异常.
error 18 at 0 depth lookup:self signed certificate
OK
Run Code Online (Sandbox Code Playgroud)
UPDATE
我从pem中提取了私钥和证书,并生成了cert.pfx(pkcs12).我在个人密钥库中导入cert.pfx没有问题.在我的证书详细信息中,我可以看到一个小图标,表示附加的私钥.
我修改了我的客户端以从我的个人商店检索证书.但我得到了同样的确切失败.
我正在寻找一个bash one liner,它在列表的每个元素后附加一个换行符.如果我将脚本称为:
./script arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)
我想要输出
arg1
arg2
arg3
Run Code Online (Sandbox Code Playgroud)
我尝试了以下不同的变化.换行没有添加.添加任何普通的char.
# pretty much works except for an extra space
list=${@/%/x}
echo "$list"
# appends 'n'
list=${@/%/\n}
echo "$list"
# appends nothing
list=${@/%/$'\n'}
echo "$list"
# appends nothing, \x078 would append 'x'
list=${@/%/$'\x0D'}
echo "$list"
# appends nothing
CR=$'\n'
list=${@/%/$CR}
echo "$list"
# same issues with arrays
tmp=($@)
list=${tmp/%/\n}
echo "$list"
Run Code Online (Sandbox Code Playgroud)
您建议使用什么修复或替代方案?我显然可以写一个循环或调用tr,但这正是我认为我可以避免使用bash替换.
可能重复:
Bash:无法在管道右侧构建数组
我需要从文件创建一个数组。我必须计算存储数据的索引。当我超出读取循环时,我的阵列似乎消失了。为什么???
下面的脚本说明了该问题。
#!/bin/bash
echo -e "15\n21\n33" | while read i ; do
ar[$i]="set"
echo ${!ar[@]}
echo ${ar[@]}
done
echo
echo outside loop:
echo ${!ar[@]}
echo ${ar[@]}
Run Code Online (Sandbox Code Playgroud)
如您在输出中看到的,打印数组索引和内容不再在循环外工作。
15
set
15 21
set set
15 21 33
set set set
outside loop:
Run Code Online (Sandbox Code Playgroud) 我经常使用Perl autosplit而不是在命令行上剪切.我遇到了一个案例,我需要保留很多空白.根据文档,我需要指定的分隔符是/ /因为像' '模拟awk的行为剥离前导空格等.
我的问题是/ /在命令行上指定模式似乎是不可能的.我尝试以各种方式引用它,但是在正斜杠上最终会出现分裂:
perl -F'/ /' -lane 'print "@F[3..$#F]"' input.txt
Run Code Online (Sandbox Code Playgroud)
以下按预期工作:
perl -lne '@ar = split / /; print "@ar[3..$#ar]"' input.txt
Run Code Online (Sandbox Code Playgroud)
为什么我的autosplit不起作用以及如何解决它?
RHEL 5.9上的Perl 5.8.8.
我需要验证一些程序输出.我知道输出包含三行,我想存储在不同的变量中以便于访问.我尝试了以下几种变体而没有成功.
IFS=$'\n' read line1 line2 line3 <<< $(grep pattern file.log)
IFS='' read line1 line2 line3 <<< $(grep pattern file.log)
Run Code Online (Sandbox Code Playgroud)
是否有可能结合read并<<<做我想做的事情?怎么样?
如果不可能,那么解释是什么?你有什么选择吗?
谢谢.