未验证 提交 58f8ac9b 编写于 作者: O Oleg Nenashev 提交者: GitHub

Merge pull request #4387 from jeffret-b/removeDeprecatedProtocols

[JENKINS-60381] Remove old, deprecated agent protocols.
......@@ -58,7 +58,7 @@ import jenkins.model.Jenkins;
import jenkins.security.ChannelConfigurator;
import jenkins.security.MasterToSlaveCallable;
import jenkins.slaves.EncryptedSlaveAgentJnlpFile;
import jenkins.slaves.JnlpSlaveAgentProtocol;
import jenkins.slaves.JnlpAgentReceiver;
import jenkins.slaves.RemotingVersionInfo;
import jenkins.slaves.systemInfo.SlaveSystemInfo;
import jenkins.util.SystemProperties;
......@@ -180,7 +180,7 @@ public class SlaveComputer extends Computer {
* @since 1.498
*/
public String getJnlpMac() {
return JnlpSlaveAgentProtocol.SLAVE_SECRET.mac(getName());
return JnlpAgentReceiver.SLAVE_SECRET.mac(getName());
}
/**
......
......@@ -6,7 +6,8 @@ import hudson.util.Secret;
import javax.annotation.CheckForNull;
import java.io.IOException;
import jenkins.slaves.JnlpSlaveAgentProtocol;
import jenkins.slaves.JnlpAgentReceiver;
/**
* Confidential information that gets stored as a singleton in Jenkins, mostly some random token value.
......@@ -25,7 +26,7 @@ import jenkins.slaves.JnlpSlaveAgentProtocol;
* for the secret to leak.
*
* <p>
* The {@link ConfidentialKey} subtypes are expected to be used as a singleton, like {@link JnlpSlaveAgentProtocol#SLAVE_SECRET}.
* The {@link ConfidentialKey} subtypes are expected to be used as a singleton, like {@link JnlpAgentReceiver#SLAVE_SECRET}.
* For code that relies on XStream for persistence (such as {@link Builder}s, {@link SCM}s, and other fragment objects
* around builds and jobs), {@link Secret} provides more convenient way of storing secrets.
*
......
......@@ -216,5 +216,5 @@ public class DefaultJnlpSlaveReceiver extends JnlpAgentReceiver {
private static final Logger LOGGER = Logger.getLogger(DefaultJnlpSlaveReceiver.class.getName());
private static final String COOKIE_NAME = JnlpSlaveAgentProtocol2.class.getName()+".cookie";
private static final String COOKIE_NAME = "JnlpAgentProtocol.cookie";
}
......@@ -92,7 +92,7 @@ public class EncryptedSlaveAgentJnlpFile implements HttpResponse {
if(it instanceof SlaveComputer) {
jnlpMac = Util.fromHexString(((SlaveComputer)it).getJnlpMac());
} else {
jnlpMac = JnlpSlaveAgentProtocol.SLAVE_SECRET.mac(slaveName.getBytes(StandardCharsets.UTF_8));
jnlpMac = JnlpAgentReceiver.SLAVE_SECRET.mac(slaveName.getBytes(StandardCharsets.UTF_8));
}
SecretKey key = new SecretKeySpec(jnlpMac, 0, /* export restrictions */ 128 / 8, "AES");
byte[] encrypted;
......
......@@ -6,11 +6,13 @@ import hudson.Util;
import hudson.model.Slave;
import java.security.SecureRandom;
import javax.annotation.Nonnull;
import jenkins.security.HMACConfidentialKey;
import org.jenkinsci.remoting.engine.JnlpClientDatabase;
import org.jenkinsci.remoting.engine.JnlpConnectionStateListener;
/**
* Receives incoming agents connecting through {@link JnlpSlaveAgentProtocol2}, {@link JnlpSlaveAgentProtocol3}, {@link JnlpSlaveAgentProtocol4}.
* Receives incoming agents connecting through {@link JnlpSlaveAgentProtocol4}.
*
* <p>
* This is useful to establish the communication with other JVMs and use them
......@@ -29,6 +31,12 @@ import org.jenkinsci.remoting.engine.JnlpConnectionStateListener;
*/
public abstract class JnlpAgentReceiver extends JnlpConnectionStateListener implements ExtensionPoint {
/**
* This secret value is used as a seed for agents.
*/
public static final HMACConfidentialKey SLAVE_SECRET =
new HMACConfidentialKey(JnlpSlaveAgentProtocol.class, "secret");
private static final SecureRandom secureRandom = new SecureRandom();
public static final JnlpClientDatabase DATABASE = new JnlpAgentDatabase();
......@@ -62,7 +70,7 @@ public abstract class JnlpAgentReceiver extends JnlpConnectionStateListener impl
@Override
public String getSecretOf(@Nonnull String clientName) {
return JnlpSlaveAgentProtocol.SLAVE_SECRET.mac(clientName);
return SLAVE_SECRET.mac(clientName);
}
}
}
package jenkins.slaves;
import hudson.Extension;
import hudson.ExtensionList;
import hudson.model.Computer;
import java.io.IOException;
import java.net.Socket;
import java.util.Collections;
import java.util.logging.Logger;
import javax.inject.Inject;
import jenkins.AgentProtocol;
import jenkins.security.HMACConfidentialKey;
import org.jenkinsci.Symbol;
import org.jenkinsci.remoting.engine.JnlpConnectionState;
import org.jenkinsci.remoting.engine.JnlpProtocol1Handler;
/**
* {@link AgentProtocol} that accepts connection from agents.
*
* <h2>Security</h2>
* <p>
* Once connected, remote agents can send in commands to be
* executed on the master, so in a way this is like an rsh service.
* Therefore, it is important that we reject connections from
* unauthorized remote agents.
*
* <p>
* We do this by computing HMAC of the agent name.
* This code is sent to the agent inside the {@code .jnlp} file
* (this file itself is protected by HTTP form-based authentication that
* we use everywhere else in Jenkins), and the agent sends this
* token back when it connects to the master.
* Unauthorized agents can't access the protected {@code .jnlp} file,
* so it can't impersonate a valid agent.
*
* <p>
* We don't want to force the inbound agents to be restarted
* whenever the server restarts, so right now this secret master key
* is generated once and used forever, which makes this whole scheme
* less secure.
*
* @author Kohsuke Kawaguchi
* @since 1.467
* This class was part of the old JNLP1 protocol, which has been removed.
* The SLAVE_SECRET was still used by some plugins. It has been moved to
* JnlpAgentReceiver as a more suitable location, but this alias retained
* for compatibility. References should be updated to the new location.
*/
@Extension
@Symbol("jnlp")
public class JnlpSlaveAgentProtocol extends AgentProtocol {
/**
* Our logger
*/
private static final Logger LOGGER = Logger.getLogger(JnlpSlaveAgentProtocol.class.getName());
/**
* This secret value is used as a seed for agents.
*/
public static final HMACConfidentialKey SLAVE_SECRET =
new HMACConfidentialKey(JnlpSlaveAgentProtocol.class, "secret");
private NioChannelSelector hub;
private JnlpProtocol1Handler handler;
@Inject
public void setHub(NioChannelSelector hub) {
this.hub = hub;
this.handler = new JnlpProtocol1Handler(JnlpAgentReceiver.DATABASE, Computer.threadPoolForRemoting,
hub.getHub(), true);
}
@Override
public boolean isOptIn() {
return true;
}
@Override
public boolean isDeprecated() {
return true;
}
@Override
public String getName() {
return handler.isEnabled() ? handler.getName() : null;
}
@Override
public String getDisplayName() {
return Messages.JnlpSlaveAgentProtocol_displayName();
}
@Override
public void handle(Socket socket) throws IOException, InterruptedException {
handler.handle(socket,
Collections.singletonMap(JnlpConnectionState.COOKIE_KEY, JnlpAgentReceiver.generateCookie()),
ExtensionList.lookup(JnlpAgentReceiver.class));
}
@Deprecated
public class JnlpSlaveAgentProtocol {
public static final HMACConfidentialKey SLAVE_SECRET = JnlpAgentReceiver.SLAVE_SECRET;
}
package jenkins.slaves;
import hudson.Extension;
import hudson.ExtensionList;
import hudson.model.Computer;
import java.io.IOException;
import java.net.Socket;
import java.util.Collections;
import javax.inject.Inject;
import jenkins.AgentProtocol;
import org.jenkinsci.Symbol;
import org.jenkinsci.remoting.engine.JnlpConnectionState;
import org.jenkinsci.remoting.engine.JnlpProtocol2Handler;
/**
* {@link JnlpSlaveAgentProtocol} Version 2.
*
* <p>
* This protocol extends the version 1 protocol by adding a per-client cookie,
* so that we can detect a reconnection from the agent and take appropriate action,
* when the connection disappeared without the master noticing.
*
* @author Kohsuke Kawaguchi
* @since 1.467
*/
@Extension
@Symbol("jnlp2")
public class JnlpSlaveAgentProtocol2 extends AgentProtocol {
private NioChannelSelector hub;
private JnlpProtocol2Handler handler;
@Inject
public void setHub(NioChannelSelector hub) {
this.hub = hub;
this.handler = new JnlpProtocol2Handler(JnlpAgentReceiver.DATABASE, Computer.threadPoolForRemoting,
hub.getHub(), true);
}
@Override
public String getName() {
return handler.isEnabled() ? handler.getName() : null;
}
@Override
public boolean isOptIn() {
return true;
}
@Override
public boolean isDeprecated() {
return true;
}
@Override
public String getDisplayName() {
return Messages.JnlpSlaveAgentProtocol2_displayName();
}
@Override
public void handle(Socket socket) throws IOException, InterruptedException {
handler.handle(socket,
Collections.singletonMap(JnlpConnectionState.COOKIE_KEY, JnlpAgentReceiver.generateCookie()),
ExtensionList.lookup(JnlpAgentReceiver.class));
}
}
package jenkins.slaves;
import hudson.Extension;
import hudson.ExtensionList;
import hudson.model.Computer;
import java.io.IOException;
import java.net.Socket;
import java.util.Collections;
import javax.inject.Inject;
import jenkins.AgentProtocol;
import org.jenkinsci.Symbol;
import org.jenkinsci.remoting.engine.JnlpConnectionState;
import org.jenkinsci.remoting.engine.JnlpProtocol3Handler;
/**
* Master-side implementation for JNLP3-connect protocol.
*
* <p>@see {@link org.jenkinsci.remoting.engine.JnlpProtocol3Handler} for more details.
*
* @since 1.653
*/
@Deprecated
@Extension
@Symbol("jnlp3")
public class JnlpSlaveAgentProtocol3 extends AgentProtocol {
private NioChannelSelector hub;
private JnlpProtocol3Handler handler;
@Inject
public void setHub(NioChannelSelector hub) {
this.hub = hub;
this.handler = new JnlpProtocol3Handler(JnlpAgentReceiver.DATABASE, Computer.threadPoolForRemoting,
hub.getHub(), true);
}
@Override
public boolean isOptIn() {
return true ;
}
@Override
public String getName() {
return handler.isEnabled() ? handler.getName() : null;
}
@Override
public String getDisplayName() {
return Messages.JnlpSlaveAgentProtocol3_displayName();
}
@Override
public boolean isDeprecated() {
return true;
}
@Override
public void handle(Socket socket) throws IOException, InterruptedException {
handler.handle(socket,
Collections.singletonMap(JnlpConnectionState.COOKIE_KEY, JnlpAgentReceiver.generateCookie()),
ExtensionList.lookup(JnlpAgentReceiver.class));
}
}
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core">
<div class="alert alert-warning">
${%blurb(it.deprecatedProtocols)}
${%See Protocol Configuration(rootURL)}
</div>
</j:jelly>
blurb=This Jenkins instance uses deprecated protocols: {0}. \
It may impact stability of the instance. \
If newer protocol versions are supported by all system components (agents, CLI and other clients), \
it is highly recommended to disable the deprecated protocols.
Protocol\ Configuration=<a href="{0}/configureSecurity">Protocol Configuration</a>.
# The MIT License
#
# Bulgarian translation: Copyright (c) 2017, Alexander Shopov <ash@kambanaria.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# This Jenkins instance uses deprecated protocols: {0}. \
# It may impact stability of the instance. \
# If newer protocol versions are supported by all system components (agents, CLI and other clients), \
# it is highly recommended to disable the deprecated protocols.
blurb=\
\u0422\u0430\u0437\u0438 \u0438\u043D\u0441\u0442\u0430\u043B\u0430\u0446\u0438\u044F \u043D\u0430 Jenkins \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430 \u043E\u0441\u0442\u0430\u0440\u0435\u043B\u0438 \u043F\u0440\u043E\u0442\u043E\u043A\u043E\u043B\u0438: {0}. \u0422\u043E\u0432\u0430 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435\
\u043E\u0442\u0440\u0430\u0437\u0438 \u043D\u0430 \u0441\u0442\u0430\u0431\u0438\u043B\u043D\u043E\u0441\u0442\u0442\u0430 \u045D. \u0410\u043A\u043E \u0432\u0441\u0438\u0447\u043A\u0438 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0438 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0438, \u043A\u0430\u0442\u043E \u0430\u0433\u0435\u043D\u0442\u0438\u0442\u0435,\
\u043A\u043E\u043C\u0430\u043D\u0434\u043D\u0438\u044F \u0440\u0435\u0434 \u0438 \u0434\u0440\u0443\u0433\u0438\u0442\u0435 \u043A\u043B\u0438\u0435\u043D\u0442\u0438 \u043F\u043E\u0434\u0434\u044A\u0440\u0436\u0430\u0442 \u043D\u043E\u0432\u0438\u0442\u0435 \u043F\u0440\u043E\u0442\u043E\u043A\u043E\u043B\u0438, \u0441\u0438\u043B\u043D\u043E \u043F\u0440\u0435\u043F\u043E\u0440\u044A\u0447\u0432\u0430\u043C\u0435\
\u0434\u0430 \u0438\u0437\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u043E\u0441\u0442\u0430\u0440\u0435\u043B\u0438\u0442\u0435.
# It may impact stability of the instance. \
# If newer protocol versions are supported by all system components (agents, CLI and other clients), \
# it is highly recommended to disable the deprecated protocols.
# The MIT License
#
# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
blurb=Quest''istanza di Jenkins utilizza protocolli deprecati: {0}. \
Ci\uFFFD potrebbe influenzare la stabilit\uFFFD dell''istanza. \
Se le nuove versioni dei protocolli sono supportate da tutti i componenti di sistema (agenti, \
interfaccia da riga di comando e altri client), \uFFFD fortemente raccomandato disabilitare i \
protocolli deprecati.
See\ Protocol\ Configuration=Vedi <a href="{0}/configureSecurity">Configurazione protocollo</a>.
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core">
${%message}
</j:jelly>
message=This protocol is an obsolete protocol, which has been replaced by version 4. \
It is also not encrypted.
# The MIT License
#
# Bulgarian translation: Copyright (c) 2017, Alexander Shopov <ash@kambanaria.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# This protocol is an obsolete protocol, which has been replaced by JNLP2-connect. \
# It is also not encrypted.
message=\
\u0422\u043e\u0437\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0435 \u043e\u0441\u0442\u0430\u0440\u044f\u043b \u0438 \u0435 \u0431\u0435\u0437 \u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d\u0435. \u0417\u0430\u043c\u0435\u043d\u0435\u043d \u0435 \u043e\u0442 JNLP2-connect.
# The MIT License
#
# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
message=Questo protocollo è un protocollo obsoleto rimpiazzato da JNLP2-connect. \
Inoltre, non è criptato.
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core">
${%summary}
</j:jelly>
summary=Accepts connections from remote clients so that they can be used as additional agents. \
This protocol is unencrypted.
# The MIT License
#
# Bulgarian translation: Copyright (c) 2016, 2017, Alexander Shopov <ash@kambanaria.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Accepts\ connections\ from\ remote\ clients\ so\ that\ they\ can\ be\ used\ as\ additional\ build\ agents=\
\u041f\u0440\u0438\u0435\u043c\u0430\u043d\u0435 \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0438 \u043e\u0442 \u043e\u0442\u0434\u0430\u043b\u0435\u0447\u0435\u043d\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0438, \u0442\u0430\u043a\u0430 \u0447\u0435 \u0442\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442 \u043a\u0430\u0442\u043e\
\u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0438 \u043c\u0430\u0448\u0438\u043d\u0438 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435.
# Accepts connections from remote clients so that they can be used as additional agents. \
# This protocol is unencrypted.
summary=\
\u041f\u0440\u0438\u0435\u043c\u0430\u043d\u0435 \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0438 \u043e\u0442 \u043e\u0442\u0434\u0430\u043b\u0435\u0447\u0435\u043d\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0438, \u0442\u0430\u043a\u0430 \u0447\u0435 \u0442\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442 \u043a\u0430\u0442\u043e\
\u0434\u043e\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u043d\u0438 \u043c\u0430\u0448\u0438\u043d\u0438 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044a\u0442 \u043d\u0435 \u0435 \u0437\u0430\u0449\u0438\u0442\u0435\u043d \u0441 \u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d\u0435.
# The MIT License
#
# Copyright (c) 2017 Daniel Beck and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
summary=Bedient Verbindungen von entfernten Clients, damit diese als Agenten verwendet werden k\u00F6nnen. \
Dieses Protokoll ist unverschl\u00FCsselt.
# The MIT License
#
# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
summary=Accetta connessioni dai client remoti in modo che questi possano essere utilizzati \
come agenti di compilazione aggiuntivi. Questo protocollo non è criptato.
# This file is under the MIT License by authors
summary=\u041f\u0440\u0438\u0445\u0432\u0430\u0442\u0430 \u0432\u0435\u0437\u0435 \u043e\u0434 \u043a\u043b\u0438\u0458\u0435\u043d\u0442\u0438\u043c\u0430 \u0434\u0430 \u0431\u0438 \u043c\u043e\u0433\u043b\u0438 \u0441\u0435 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0438 \u043a\u0430\u043e \u0434\u043e\u0434\u0430\u0442\u043d\u0435 \u0430\u0433\u0435\u043d\u0442\u0435 \u0437\u0430 \u0438\u0437\u0433\u0440\u0430\u0434\u045a\u0443.
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core">
${%message}
<a href="https://jenkins.io/redirect/project/remoting/protocols/jnlp2-errata">${%TCP Agent Protocol 2 Errata}</a>
</j:jelly>
message=This protocol has known stability issues, and it is replaced by version 4. \
It is also not encrypted. \
See more information in the protocol Errata.
# The MIT License
#
# Bulgarian translation: Copyright (c) 2017, Alexander Shopov <ash@kambanaria.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
JNLP2\ Protocol\ Errata=\
\u0413\u0440\u0435\u0448\u043a\u0438 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 JNLP2
# This protocol has known stability issues, and it is replaced by JNLP4. \
# It is also not encrypted. \
# See more information in the protocol Errata.
message=\
\u0422\u043e\u0437\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043d\u0435 \u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d \u0438 \u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043e\u0442 JNLP4. \u0412 JNLP2 \u043b\u0438\u043f\u0441\u0432\u0430 \u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d\u0435.\
\u0417\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432\u0438\u0436\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u0437\u0430 \u0433\u0440\u0435\u0448\u043a\u0438\u0442\u0435 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.
# The MIT License
#
# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
message=Questo protocollo ha problemi di stabilità noti ed è stato sostituito da JNLP4. \
Non è inoltre criptato. \
Si vedano ulteriori informazioni nell''Errata corrige del protocollo.
JNLP2\ Protocol\ Errata=Errata corrige protocollo JNLP2
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core">
${%summary}
</j:jelly>
summary=Extends the version 1 protocol by adding a per-client cookie, \
so that we can detect a reconnection from the agent and take appropriate action. \
This protocol is unencrypted.
# The MIT License
#
# Bulgarian translation: Copyright (c) 2016, 2017, Alexander Shopov <ash@kambanaria.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Extends\ the\ version\ 1\ protocol\ by\ adding\ a\ per-client\ cookie,\ so\ that\ we\ can\ detect\ a\ reconnection\ from\ the\ agent\ and\ take\ appropriate\ action=\
\u0420\u0430\u0437\u0448\u0438\u0440\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 1 \u043d\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u043a\u0430\u0442\u043e \u0441\u0435 \u0434\u043e\u0431\u0430\u0432\u044f \u0431\u0438\u0441\u043a\u0432\u0438\u0442\u043a\u0430 \u0437\u0430 \u0432\u0441\u0435\u043a\u0438\
\u043a\u043b\u0438\u0435\u043d\u0442. \u0422\u043e\u0432\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435 \u043e\u0442\
\u0430\u0433\u0435\u043d\u0442\u0438\u0442\u0435 \u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u0435\u043c\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u043e\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.
# Extends the version 1 protocol by adding a per-client cookie, \
# so that we can detect a reconnection from the agent and take appropriate action. \
# This protocol is unencrypted.
summary=\
\u0420\u0430\u0437\u0448\u0438\u0440\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 1 \u043d\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u043a\u0430\u0442\u043e \u0441\u0435 \u0434\u043e\u0431\u0430\u0432\u044f \u0431\u0438\u0441\u043a\u0432\u0438\u0442\u043a\u0430 \u0437\u0430 \u0432\u0441\u0435\u043a\u0438\
\u043a\u043b\u0438\u0435\u043d\u0442. \u0422\u043e\u0432\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430 \u043e\u0442\u043a\u0440\u0438\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435 \u043e\u0442\
\u0430\u0433\u0435\u043d\u0442\u0438\u0442\u0435 \u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u0435\u043c\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u043e\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0422\u043e\u0437\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0435 \u043d\u0435\u0437\u0430\u0449\u0438\u0442\u0435\u043d.
# The MIT License
#
# Copyright (c) 2017 Daniel Beck and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
summary=Erweitert das Protokoll Version 1 um Identifikations-Cookies f\u00FCr Clients, so dass erneute Verbindungsversuche desselben Agenten identifiziert und entsprechend behandelt werden k\u00F6nnen. Dieses Protkoll ist unverschl\u00FCsselt.
# The MIT License
#
# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
summary=Estende la versione 1 del protocollo aggiungendo un cookie per ogni client \
in modo da rilevare una nuova connessione da parte dell''agent e intraprendere le azioni opportune. \
Questo protocollo non è criptato.
# This file is under the MIT License by authors
summary=\u041d\u0430\u0434\u0433\u0440\u0430\u0452\u0443\u0458\u0435 \u0432\u0435\u0440\u0437\u0438\u0458\u0443 1 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0434\u043e\u0434\u0430\u0432\u0430\u045b\u0438 cookie \u0441\u0432\u0430\u043a\u043e\u043c \u043a\u043b\u0438\u0458\u0435\u043d\u0442\u0443, \u0448\u0442\u043e \u043e\u043c\u043e\u0433\u0443\u0458\u0443\u045b\u0435 \u043f\u043e\u043d\u043e\u0432\u043e \u043f\u043e\u0432\u0435\u0437\u0438\u0432\u0430\u045a\u0435 \u0441\u0430 \u0430\u0433\u0435\u043d\u0442\u043e\u043c.
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core">
${%This protocol is unstable. See the protocol documentation for more info.}
<a href="https://jenkins.io/redirect/project/remoting/protocols/jnlp3-errata">${%TCP Agent Protocol 3 Errata}</a>
</j:jelly>
# The MIT License
#
# Bulgarian translation: Copyright (c) 2017, Alexander Shopov <ash@kambanaria.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
JNLP3\ Protocol\ Errata=\
\u0413\u0440\u0435\u0448\u043a\u0438 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 JNLP3
This\ protocol\ is\ unstable.\ See\ the\ protocol\ documentation\ for\ more\ info.=\
\u0422\u043e\u0437\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0435 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d. \u0417\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432\u0438\u0436\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430 \u043c\u0443.
# The MIT License
#
# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
JNLP3\ Protocol\ Errata=Errata corrige protocollo JNLP3
This\ protocol\ is\ unstable.\ See\ the\ protocol\ documentation\ for\ more\ info.=Questo protocollo non è stabile. Si veda la documentazione del protocollo per ulteriori informazioni.
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core">
${%summary}
</j:jelly>
summary=Extends the version 2 protocol by adding basic encryption but requires a thread per client.
# The MIT License
#
# Bulgarian translation: Copyright (c) 2016, 2017 Alexander Shopov <ash@kambanaria.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Extends\ the\ version\ 2\ protocol\ by\ adding\ basic\ encryption\ but\ requires\ a\ thread\ per\ client=\
\u0420\u0430\u0437\u0448\u0438\u0440\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 2 \u043d\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043a\u0430\u0442\u043e \u0441\u0435 \u0434\u043e\u0431\u0430\u0432\u044f \u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d\u0435, \u043d\u043e \u0442\u043e\u0432\u0430\
\u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u043f\u043e \u0435\u0434\u043d\u0430 \u043d\u0438\u0448\u043a\u0430 \u0437\u0430 \u0432\u0441\u0435\u043a\u0438 \u043a\u043b\u0438\u0435\u043d\u0442
# Extends the version 2 protocol by adding basic encryption but requires a thread per client. \
# This protocol falls back to Java Web Start Agent Protocol/2 (unencrypted) when it can't create a secure connection. \
# This protocol is not recommended. \
# Use Java Web Start Agent Protocol/4 instead.
summary=\
\u0420\u0430\u0437\u0448\u0438\u0440\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 2 \u043d\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043a\u0430\u0442\u043e \u0441\u0435 \u0434\u043e\u0431\u0430\u0432\u044f \u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d\u0435, \u043d\u043e \u0442\u043e\u0432\u0430\
\u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u043f\u043e \u0435\u0434\u043d\u0430 \u043d\u0438\u0448\u043a\u0430 \u0437\u0430 \u0432\u0441\u0435\u043a\u0438 \u043a\u043b\u0438\u0435\u043d\u0442. \u041a\u043e\u0433\u0430\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0441\u044a\u0437\u0434\u0430\u0434\u0435 \u0437\u0430\u0449\u0438\u0442\u0435\u043d\u0430\
\u0432\u0440\u044a\u0437\u043a\u0430, \u0442\u043e\u0437\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0440\u0438\u0431\u044f\u0433\u0432\u0430 \u0434\u043e Java Web Start Agent Protocol/2, \u043a\u043e\u0439\u0442\u043e \u043d\u0435 \u0435\
\u0448\u0438\u0444\u0440\u0438\u0440\u0430\u043d. \u0422\u043e\u0432\u0430 \u043d\u0435 \u0435 \u043f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0438\u0442\u0435\u043b\u043d\u043e \u2014 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442e Java Web Start Agent\
Protocol/4 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0432\u0430.
# The MIT License
#
# Copyright (c) 2017 Daniel Beck and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
summary=Erweitert das Protokoll Version 2 um einfache Verschl\u00fcsselung, aber erfordert einen Thread pro Client.
# The MIT License
#
# Copyright (c) 2004-, Kohsuke Kawaguchi, Sun Microsystems, Inc., and a number of other of contributors
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
summary=Estende la versione 2 del protocollo aggiungendo crittografia di base ma richiede un thread per client.
# This file is under the MIT License by authors
#TODO: Summary is outdated, needs to be modified
summary=\u041d\u0430\u0434\u0433\u0440\u0430\u0452\u0443\u0458\u0435 \u0432\u0435\u0440\u0437\u0438\u0458\u0443 2 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0434\u043e\u0434\u0430\u0432\u0430\u0458\u0443\u045b\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u045a\u0435 (\u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e \u0458\u0435\u0434\u0430\u043d \u043d\u0438\u0437 \u0437\u0430 \u0441\u0432\u0430\u043a\u043e\u0433 \u043a\u043b\u0438\u0458\u0435\u043d\u0442\u0430)
......@@ -102,7 +102,7 @@ THE SOFTWARE.
<maven-war-plugin.version>3.2.3</maven-war-plugin.version>
<!-- Bundled Remoting version -->
<remoting.version>3.36</remoting.version>
<remoting.version>3.40</remoting.version>
<!-- Minimum Remoting version, which is tested for API compatibility -->
<remoting.minimum.supported.version>3.14</remoting.minimum.supported.version>
......
......@@ -27,18 +27,10 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.annotation.CheckForNull;
import jenkins.install.SetupWizardTest;
import jenkins.model.Jenkins;
import jenkins.slaves.DeprecatedAgentProtocolMonitor;
import org.apache.commons.lang.StringUtils;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.Issue;
......@@ -55,25 +47,6 @@ public class AgentProtocolTest {
@Rule
public JenkinsRule j = new JenkinsRule();
//TODO: Test is unstable on CI due to the race condition, needs to be reworked
/**
* Checks that Jenkins does not disable agent protocols by default after the upgrade.
*
* @throws Exception Test failure
* @see SetupWizardTest#shouldDisableUnencryptedProtocolsByDefault()
*/
@Test
@Ignore
@LocalData
@Issue("JENKINS-45841")
public void testShouldNotDisableProtocolsForMigratedInstances() throws Exception {
assertProtocols(true, "Legacy Non-encrypted JNLP protocols should be enabled",
"JNLP-connect", "JNLP2-connect", "JNLP4-connect");
assertProtocols(true, "Default encrypted protocols should be enabled", "JNLP4-connect");
assertProtocols(false, "JNLP3-connect protocol should be disabled by default", "JNLP3-connect");
assertMonitorTriggered("JNLP-connect", "JNLP2-connect");
}
@Test
@LocalData
@Issue("JENKINS-45841")
......@@ -81,7 +54,6 @@ public class AgentProtocolTest {
assertEnabled("JNLP-connect", "JNLP3-connect");
assertDisabled("JNLP2-connect", "JNLP4-connect");
assertProtocols(true, "System protocols should be always enabled", "Ping");
assertMonitorTriggered("JNLP-connect", "JNLP3-connect");
}
private void assertEnabled(String ... protocolNames) throws AssertionError {
......@@ -119,30 +91,4 @@ public class AgentProtocolTest {
}
}
public static void assertMonitorNotActive(JenkinsRule j) {
DeprecatedAgentProtocolMonitor monitor = new DeprecatedAgentProtocolMonitor();
assertFalse("Deprecated Agent Protocol Monitor should not be activated. Current protocols: "
+ StringUtils.join(j.jenkins.getAgentProtocols(), ","), monitor.isActivated());
}
public static void assertMonitorTriggered(String ... expectedProtocols) {
DeprecatedAgentProtocolMonitor monitor = new DeprecatedAgentProtocolMonitor();
assertTrue("Deprecated Agent Protocol Monitor should be activated", monitor.isActivated());
String protocolList = monitor.getDeprecatedProtocols();
assertThat("List of the protocols should not be null", protocolList, not(nullValue()));
List<String> failedChecks = new ArrayList<>();
for(String protocol : expectedProtocols) {
if (!protocolList.contains(protocol)) {
failedChecks.add(protocol);
}
}
if (!failedChecks.isEmpty()) {
String message = String.format(
"Protocol(s) should in the deprecated protocol list: %s. Current list: %s",
StringUtils.join(expectedProtocols, ','), protocolList);
fail(message);
}
}
}
/*
* The MIT License
*
* Copyright (c) 2017 CloudBees, Inc.
* Copyright (c) 2020 CloudBees, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
......@@ -21,74 +21,38 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package jenkins.slaves;
package jenkins;
import hudson.Extension;
import hudson.model.AdministrativeMonitor;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.annotation.CheckForNull;
import jenkins.AgentProtocol;
import jenkins.model.Jenkins;
import org.apache.commons.lang.StringUtils;
import java.net.Socket;
import org.jenkinsci.Symbol;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
/**
* Monitors enabled protocols and warns if an {@link AgentProtocol} is deprecated.
*
* @author Oleg Nenashev
* @since 2.75
* @see AgentProtocol
*/
@Extension
@Symbol("deprecatedAgentProtocol")
@Restricted(NoExternalUse.class)
public class DeprecatedAgentProtocolMonitor extends AdministrativeMonitor {
public DeprecatedAgentProtocolMonitor() {
super();
}
@Symbol("jnlp")
public class TestJnlpSlaveAgentProtocol extends AgentProtocol {
@Override
public String getDisplayName() {
return Messages.DeprecatedAgentProtocolMonitor_displayName();
public boolean isOptIn() {
return true;
}
@Override
public boolean isActivated() {
final Set<String> agentProtocols = Jenkins.get().getAgentProtocols();
for (String name : agentProtocols) {
AgentProtocol pr = AgentProtocol.of(name);
if (pr != null && pr.isDeprecated()) {
public boolean isDeprecated() {
return true;
}
}
return false;
}
@Restricted(NoExternalUse.class)
public String getDeprecatedProtocols() {
String res = getDeprecatedProtocolsString();
return res != null ? res : "N/A";
@Override
public String getName() {
return "JNLP-connect";
}
@CheckForNull
public static String getDeprecatedProtocolsString() {
final List<String> deprecatedProtocols = new ArrayList<>();
final Set<String> agentProtocols = Jenkins.get().getAgentProtocols();
for (String name : agentProtocols) {
AgentProtocol pr = AgentProtocol.of(name);
if (pr != null && pr.isDeprecated()) {
deprecatedProtocols.add(name);
}
}
if (deprecatedProtocols.isEmpty()) {
return null;
@Override
public String getDisplayName() {
return "JNLP-connect";
}
return StringUtils.join(deprecatedProtocols, ',');
@Override
public void handle(Socket socket) {
}
}
/*
* The MIT License
*
* Copyright (c) 2020 CloudBees, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package jenkins;
import hudson.Extension;
import org.jenkinsci.Symbol;
import java.net.Socket;
@Extension
@Symbol("jnlp2")
public class TestJnlpSlaveAgentProtocol2 extends AgentProtocol {
@Override
public boolean isOptIn() {
return true;
}
@Override
public boolean isDeprecated() {
return true;
}
@Override
public String getName() {
return "JNLP2-connect";
}
@Override
public String getDisplayName() {
return "JNLP2-connect";
}
@Override
public void handle(Socket socket) {
}
}
/*
* The MIT License
*
* Copyright (c) 2020 CloudBees, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package jenkins;
import hudson.Extension;
import org.jenkinsci.Symbol;
import java.net.Socket;
@Extension
@Symbol("jnlp3")
public class TestJnlpSlaveAgentProtocol3 extends AgentProtocol {
@Override
public boolean isOptIn() {
return true;
}
@Override
public boolean isDeprecated() {
return true;
}
@Override
public String getName() {
return "JNLP3-connect";
}
@Override
public String getDisplayName() {
return "JNLP3-connect";
}
@Override
public void handle(Socket socket) {
}
}
......@@ -32,7 +32,6 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import jenkins.AgentProtocolTest;
import org.apache.commons.io.FileUtils;
import static org.hamcrest.Matchers.*;
import org.junit.Before;
......@@ -115,17 +114,6 @@ public class SetupWizardTest {
wc.assertFails("setupWizard/completeInstall", 403);
}
@Test
@Issue("JENKINS-45841")
public void shouldDisableUnencryptedProtocolsByDefault() throws Exception {
AgentProtocolTest.assertProtocols(j.jenkins, true,
"Encrypted JNLP4-protocols protocol should be enabled", "JNLP4-connect");
AgentProtocolTest.assertProtocols(j.jenkins, false,
"Non-encrypted JNLP protocols should be disabled by default",
"JNLP-connect", "JNLP2-connect");
AgentProtocolTest.assertMonitorNotActive(j);
}
private String jsonRequest(JenkinsRule.WebClient wc, String path) throws Exception {
// Try to call the actions method to retrieve the data
final Page res;
......
......@@ -35,10 +35,6 @@
</views>
<primaryView>all</primaryView>
<slaveAgentPort>-1</slaveAgentPort>
<disabledAgentProtocols>
<string>JNLP-connect</string>
<string>JNLP2-connect</string>
</disabledAgentProtocols>
<label></label>
<crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
<excludeClientIPFromCrumb>false</excludeClientIPFromCrumb>
......
<?xml version='1.0' encoding='UTF-8'?>
<hudson>
<disabledAdministrativeMonitors/>
<version>1.0</version>
<numExecutors>2</numExecutors>
<mode>NORMAL</mode>
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
<securityRealm class="hudson.security.SecurityRealm$None"/>
<disableRememberMe>false</disableRememberMe>
<projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
<workspaceDir>${ITEM_ROOTDIR}/workspace</workspaceDir>
<buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
<markupFormatter class="hudson.markup.EscapedMarkupFormatter"/>
<jdks/>
<viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
<myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
<clouds/>
<scmCheckoutRetryCount>0</scmCheckoutRetryCount>
<views>
<hudson.model.AllView>
<owner class="hudson" reference="../../.."/>
<name>all</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
<properties class="hudson.model.View$PropertyList"/>
</hudson.model.AllView>
</views>
<primaryView>all</primaryView>
<slaveAgentPort>0</slaveAgentPort>
<!-- Disabled to emulate defaults
<enabledAgentProtocols>
<string>JNLP4-connect</string>
</enabledAgentProtocols>
-->
<label></label>
<nodeProperties/>
<globalNodeProperties/>
</hudson>
\ No newline at end of file
......@@ -36,10 +36,6 @@
</views>
<primaryView>all</primaryView>
<slaveAgentPort>-1</slaveAgentPort>
<disabledAgentProtocols>
<string>JNLP-connect</string>
<string>JNLP2-connect</string>
</disabledAgentProtocols>
<label></label>
<crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
<excludeClientIPFromCrumb>false</excludeClientIPFromCrumb>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册