Sync from SUSE:SLFO:Main trilead-ssh2 revision 07d49969361c494db789821c791ad5c4
This commit is contained in:
parent
85a569e7e0
commit
f4fda45440
161
0001-Remove-the-dependency-on-google-tink.patch
Normal file
161
0001-Remove-the-dependency-on-google-tink.patch
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
From 933d197b30e797d4b82eeef1953fd82e617f4cf0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Fridrich=20=C5=A0trba?= <fridrich.strba@bluewin.ch>
|
||||||
|
Date: Wed, 13 Mar 2024 07:05:36 +0100
|
||||||
|
Subject: [PATCH] Remove the dependency on google tink
|
||||||
|
|
||||||
|
---
|
||||||
|
.../ssh2/crypto/dh/Curve25519Exchange.java | 85 -------------------
|
||||||
|
.../ssh2/crypto/dh/GenericDhExchange.java | 3 -
|
||||||
|
.../trilead/ssh2/transport/KexManager.java | 9 +-
|
||||||
|
3 files changed, 1 insertion(+), 96 deletions(-)
|
||||||
|
delete mode 100644 src/com/trilead/ssh2/crypto/dh/Curve25519Exchange.java
|
||||||
|
|
||||||
|
diff --git a/src/com/trilead/ssh2/crypto/dh/Curve25519Exchange.java b/src/com/trilead/ssh2/crypto/dh/Curve25519Exchange.java
|
||||||
|
deleted file mode 100644
|
||||||
|
index 01d4ab4..0000000
|
||||||
|
--- a/src/com/trilead/ssh2/crypto/dh/Curve25519Exchange.java
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,85 +0,0 @@
|
||||||
|
-package com.trilead.ssh2.crypto.dh;
|
||||||
|
-
|
||||||
|
-import com.google.crypto.tink.subtle.X25519;
|
||||||
|
-
|
||||||
|
-import java.io.IOException;
|
||||||
|
-import java.math.BigInteger;
|
||||||
|
-import java.security.InvalidKeyException;
|
||||||
|
-
|
||||||
|
-/**
|
||||||
|
- * Created by Kenny Root on 1/23/16.
|
||||||
|
- */
|
||||||
|
-public class Curve25519Exchange extends GenericDhExchange {
|
||||||
|
- public static final String NAME = "curve25519-sha256";
|
||||||
|
- public static final String ALT_NAME = "curve25519-sha256@libssh.org";
|
||||||
|
- public static final int KEY_SIZE = 32;
|
||||||
|
-
|
||||||
|
- private byte[] clientPublic;
|
||||||
|
- private byte[] clientPrivate;
|
||||||
|
- private byte[] serverPublic;
|
||||||
|
-
|
||||||
|
- public Curve25519Exchange() {
|
||||||
|
- super();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /*
|
||||||
|
- * Used to test known vectors.
|
||||||
|
- */
|
||||||
|
- public Curve25519Exchange(byte[] secret) throws InvalidKeyException {
|
||||||
|
- if (secret.length != KEY_SIZE) {
|
||||||
|
- throw new AssertionError("secret must be key size");
|
||||||
|
- }
|
||||||
|
- clientPrivate = secret.clone();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public void init(String name) throws IOException {
|
||||||
|
- if (!NAME.equals(name) && !ALT_NAME.equals(name)) {
|
||||||
|
- throw new IOException("Invalid name " + name);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- clientPrivate = X25519.generatePrivateKey();
|
||||||
|
- try {
|
||||||
|
- clientPublic = X25519.publicFromPrivate(clientPrivate);
|
||||||
|
- } catch (InvalidKeyException e) {
|
||||||
|
- throw new IOException(e);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public byte[] getE() {
|
||||||
|
- return clientPublic.clone();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- protected byte[] getServerE() {
|
||||||
|
- return serverPublic.clone();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public void setF(byte[] f) throws IOException {
|
||||||
|
- if (f.length != KEY_SIZE) {
|
||||||
|
- throw new IOException("Server sent invalid key length " + f.length + " (expected " +
|
||||||
|
- KEY_SIZE + ")");
|
||||||
|
- }
|
||||||
|
- serverPublic = f.clone();
|
||||||
|
- try {
|
||||||
|
- byte[] sharedSecretBytes = X25519.computeSharedSecret(clientPrivate, serverPublic);
|
||||||
|
- int allBytes = 0;
|
||||||
|
- for (int i = 0; i < sharedSecretBytes.length; i++) {
|
||||||
|
- allBytes |= sharedSecretBytes[i];
|
||||||
|
- }
|
||||||
|
- if (allBytes == 0) {
|
||||||
|
- throw new IOException("Invalid key computed; all zeroes");
|
||||||
|
- }
|
||||||
|
- sharedSecret = new BigInteger(1, sharedSecretBytes);
|
||||||
|
- } catch (InvalidKeyException e) {
|
||||||
|
- throw new IOException(e);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public String getHashAlgo() {
|
||||||
|
- return "SHA-256";
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
diff --git a/src/com/trilead/ssh2/crypto/dh/GenericDhExchange.java b/src/com/trilead/ssh2/crypto/dh/GenericDhExchange.java
|
||||||
|
index c2436e3..a63b9fd 100644
|
||||||
|
--- a/src/com/trilead/ssh2/crypto/dh/GenericDhExchange.java
|
||||||
|
+++ b/src/com/trilead/ssh2/crypto/dh/GenericDhExchange.java
|
||||||
|
@@ -29,9 +29,6 @@ public abstract class GenericDhExchange
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GenericDhExchange getInstance(String algo) {
|
||||||
|
- if (Curve25519Exchange.NAME.equals(algo) || Curve25519Exchange.ALT_NAME.equals(algo)) {
|
||||||
|
- return new Curve25519Exchange();
|
||||||
|
- }
|
||||||
|
if (algo.startsWith("ecdh-sha2-")) {
|
||||||
|
return new EcDhExchange();
|
||||||
|
} else {
|
||||||
|
diff --git a/src/com/trilead/ssh2/transport/KexManager.java b/src/com/trilead/ssh2/transport/KexManager.java
|
||||||
|
index c2ec2b0..2c8056a 100644
|
||||||
|
--- a/src/com/trilead/ssh2/transport/KexManager.java
|
||||||
|
+++ b/src/com/trilead/ssh2/transport/KexManager.java
|
||||||
|
@@ -17,7 +17,6 @@ import com.trilead.ssh2.crypto.CryptoWishList;
|
||||||
|
import com.trilead.ssh2.crypto.KeyMaterial;
|
||||||
|
import com.trilead.ssh2.crypto.cipher.BlockCipher;
|
||||||
|
import com.trilead.ssh2.crypto.cipher.BlockCipherFactory;
|
||||||
|
-import com.trilead.ssh2.crypto.dh.Curve25519Exchange;
|
||||||
|
import com.trilead.ssh2.crypto.dh.DhGroupExchange;
|
||||||
|
import com.trilead.ssh2.crypto.dh.GenericDhExchange;
|
||||||
|
import com.trilead.ssh2.crypto.digest.MessageMac;
|
||||||
|
@@ -397,8 +396,6 @@ public class KexManager implements MessageHandler
|
||||||
|
|
||||||
|
if ("ecdh-sha2-nistp521".equals(algo))
|
||||||
|
continue;
|
||||||
|
- if (Curve25519Exchange.NAME.equals(algo)||Curve25519Exchange.ALT_NAME.equals(algo))
|
||||||
|
- continue;
|
||||||
|
throw new IllegalArgumentException("Unknown kex algorithm '" + algo + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -489,8 +486,6 @@ public class KexManager implements MessageHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kxs.np.kex_algo.equals("diffie-hellman-group1-sha1")
|
||||||
|
- || kxs.np.kex_algo.equals(Curve25519Exchange.NAME)
|
||||||
|
- || kxs.np.kex_algo.equals(Curve25519Exchange.ALT_NAME)
|
||||||
|
|| kxs.np.kex_algo.equals("diffie-hellman-group14-sha1")
|
||||||
|
|| kxs.np.kex_algo.equals("ecdh-sha2-nistp521")
|
||||||
|
|| kxs.np.kex_algo.equals("ecdh-sha2-nistp384")
|
||||||
|
@@ -630,9 +625,7 @@ public class KexManager implements MessageHandler
|
||||||
|
|| kxs.np.kex_algo.equals("diffie-hellman-group14-sha1")
|
||||||
|
|| kxs.np.kex_algo.equals("ecdh-sha2-nistp256")
|
||||||
|
|| kxs.np.kex_algo.equals("ecdh-sha2-nistp384")
|
||||||
|
- || kxs.np.kex_algo.equals("ecdh-sha2-nistp521")
|
||||||
|
- || kxs.np.kex_algo.equals(Curve25519Exchange.NAME)
|
||||||
|
- || kxs.np.kex_algo.equals(Curve25519Exchange.ALT_NAME))
|
||||||
|
+ || kxs.np.kex_algo.equals("ecdh-sha2-nistp521"))
|
||||||
|
{
|
||||||
|
if (kxs.state == 1)
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.44.0
|
||||||
|
|
BIN
build-217-jenkins-293.v56de4d4d3515.tar.gz
(Stored with Git LFS)
Normal file
BIN
build-217-jenkins-293.v56de4d4d3515.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
113
trilead-ssh2-build.xml
Normal file
113
trilead-ssh2-build.xml
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<project name="trilead-ssh2" default="package" basedir=".">
|
||||||
|
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
<!-- Build environment properties -->
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
|
||||||
|
<property name="project.groupId" value="org.jenkins-ci"/>
|
||||||
|
<property name="project.artifactId" value="trilead-ssh2"/>
|
||||||
|
<property name="project.version" value="bogusVersion"/>
|
||||||
|
|
||||||
|
<property name="compiler.release" value="8"/>
|
||||||
|
<property name="compiler.source" value="1.${compiler.release}"/>
|
||||||
|
<property name="compiler.target" value="${compiler.source}"/>
|
||||||
|
|
||||||
|
<property name="build.finalName" value="${project.artifactId}-${project.version}"/>
|
||||||
|
<property name="build.dir" value="target"/>
|
||||||
|
<property name="build.outputDir" value="${build.dir}/classes"/>
|
||||||
|
<property name="build.srcDir" value="src"/>
|
||||||
|
|
||||||
|
<property name="reporting.outputDirectory" value="${build.dir}/site"/>
|
||||||
|
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
<!-- Defining classpaths -->
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
|
||||||
|
<path id="build.classpath">
|
||||||
|
<fileset dir="lib">
|
||||||
|
<include name="**/*.jar"/>
|
||||||
|
</fileset>
|
||||||
|
</path>
|
||||||
|
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
<!-- Cleaning up target -->
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
|
||||||
|
<target name="clean" description="Clean the output directory">
|
||||||
|
<delete dir="${build.dir}"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
<!-- Compilation target -->
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
|
||||||
|
<target name="compile" description="Compile the code">
|
||||||
|
<mkdir dir="${build.outputDir}"/>
|
||||||
|
<javac destdir="${build.outputDir}"
|
||||||
|
nowarn="false"
|
||||||
|
debug="true"
|
||||||
|
optimize="false"
|
||||||
|
deprecation="true"
|
||||||
|
release="${compiler.release}"
|
||||||
|
target="${compiler.target}"
|
||||||
|
verbose="false"
|
||||||
|
fork="false"
|
||||||
|
source="${compiler.source}">
|
||||||
|
<src>
|
||||||
|
<pathelement location="${build.srcDir}"/>
|
||||||
|
</src>
|
||||||
|
<classpath refid="build.classpath"/>
|
||||||
|
</javac>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
<!-- Javadoc target -->
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
|
||||||
|
<target name="javadoc" description="Generates the Javadoc of the application">
|
||||||
|
<javadoc sourcepath="${build.srcDir}"
|
||||||
|
packagenames="*"
|
||||||
|
destdir="${reporting.outputDirectory}/apidocs"
|
||||||
|
access="protected"
|
||||||
|
source="${compiler.source}"
|
||||||
|
verbose="false"
|
||||||
|
locale="en_US"
|
||||||
|
version="true"
|
||||||
|
use="true"
|
||||||
|
author="true"
|
||||||
|
splitindex="false"
|
||||||
|
nodeprecated="false"
|
||||||
|
nodeprecatedlist="false"
|
||||||
|
notree="false"
|
||||||
|
noindex="false"
|
||||||
|
nohelp="false"
|
||||||
|
nonavbar="false"
|
||||||
|
serialwarn="false"
|
||||||
|
charset="ISO-8859-1"
|
||||||
|
linksource="false"
|
||||||
|
breakiterator="false">
|
||||||
|
<classpath refid="build.classpath"/>
|
||||||
|
</javadoc>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
<!-- Package target -->
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
|
||||||
|
<target name="package" depends="compile" description="Package the application">
|
||||||
|
<jar jarfile="${build.dir}/${build.finalName}.jar"
|
||||||
|
compress="true"
|
||||||
|
index="false"
|
||||||
|
basedir="${build.outputDir}"
|
||||||
|
excludes="**/package.html"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
<!-- A dummy target for the package named after the type it creates -->
|
||||||
|
<!-- ====================================================================== -->
|
||||||
|
|
||||||
|
<target name="jar" depends="package" description="Builds the jar for the application"/>
|
||||||
|
|
||||||
|
</project>
|
BIN
trilead-ssh2-build217-jenkins-8.tar.gz
(Stored with Git LFS)
BIN
trilead-ssh2-build217-jenkins-8.tar.gz
(Stored with Git LFS)
Binary file not shown.
@ -1,3 +1,45 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 14 09:09:47 UTC 2024 - Gus Kenion <gus.kenion@suse.com>
|
||||||
|
|
||||||
|
- Upgrade to version build-217-jenkins-293.v56de4d4d3515
|
||||||
|
* Trilead ssh2 fix big integer removes leading zero
|
||||||
|
Addresses CVE-2023-48795, bsc#1218198
|
||||||
|
* JENKINS-72466 - : Upgrades jbcrypt dependency
|
||||||
|
- Includes changes from previous version updates:
|
||||||
|
* JENKINS-71798 - : TimeoutService threads are left after closing
|
||||||
|
connection
|
||||||
|
* Giving threads names for easier troubleshooting
|
||||||
|
* Update parent POM
|
||||||
|
* There is no guarantee that the plugin works with Java 8 anymore,
|
||||||
|
and it is not tested. If you still run Jenkins on Java 8 do not
|
||||||
|
update. JENKINS-69229
|
||||||
|
* Removal of unnecessary protobuf-java
|
||||||
|
* fix: bump protobuff due to CVE 2021 22569
|
||||||
|
* JENKINS-69018 - use constant MAX_PACKET_SIZE
|
||||||
|
* add support for hmac-sha2-512-etm@openssh.com
|
||||||
|
hmac-sha2-256-etm@opensh.com in trilead-ssh2
|
||||||
|
* feat: enable continuous delivery workflow
|
||||||
|
* additional kex algorithms
|
||||||
|
* [Revert]JENKINS-62552 - Use standard crypto APIs
|
||||||
|
* feat: enable incrementals
|
||||||
|
* Retry userauth when multiple algs
|
||||||
|
* Known Issue: JENKINS-63790 causes SSH agent connections to fail
|
||||||
|
in some configurations
|
||||||
|
* fix: allow to use password encrypted keys
|
||||||
|
* Known Issue: trilead api 1.0.9 fails clone from ssh repository
|
||||||
|
using 3DES/MD5-encrypted private key JENKINS-63601
|
||||||
|
* JENKINS-62552 - Use standard crypto APIs
|
||||||
|
* Resolve several possible infinite hangings because of wait()
|
||||||
|
* Revert "JENKINS-62311 - Add support for RFC 8332"
|
||||||
|
* [SECURITY] Use HTTPS to resolve dependencies in Maven Build
|
||||||
|
* JENKINS-62311 - Add support for RFC 8332
|
||||||
|
* Support for port=0 which means automatically allocated port.
|
||||||
|
* JENKINS-59857 - Kerberos support updated
|
||||||
|
- Added patch:
|
||||||
|
* 0001-Remove-the-dependency-on-google-tink.patch
|
||||||
|
+ remove new code dependent on google tink since we don't have
|
||||||
|
the dependency
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Mar 18 16:41:59 UTC 2022 - Fridrich Strba <fstrba@suse.com>
|
Fri Mar 18 16:41:59 UTC 2022 - Fridrich Strba <fstrba@suse.com>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package trilead-ssh2
|
# spec file for package trilead-ssh2
|
||||||
#
|
#
|
||||||
# Copyright (c) 2022 SUSE LLC
|
# Copyright (c) 2024 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -17,18 +17,25 @@
|
|||||||
|
|
||||||
|
|
||||||
%global buildver 217
|
%global buildver 217
|
||||||
%global patchlvl 8
|
%global patchlvl 293
|
||||||
|
%global githash v56de4d4d3515
|
||||||
|
|
||||||
Name: trilead-ssh2
|
Name: trilead-ssh2
|
||||||
Version: %{buildver}.%{patchlvl}
|
Version: %{buildver}.%{patchlvl}.%{githash}
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: SSH-2 protocol implementation in pure Java
|
Summary: SSH-2 protocol implementation in pure Java
|
||||||
License: BSD-3-Clause AND MIT
|
License: BSD-3-Clause AND MIT
|
||||||
Group: Development/Libraries/Java
|
Group: Development/Libraries/Java
|
||||||
URL: https://github.com/jenkinsci/trilead-ssh2
|
URL: https://github.com/jenkinsci/trilead-ssh2
|
||||||
Source0: https://github.com/jenkinsci/%{name}/archive/%{name}-build%{buildver}-jenkins-%{patchlvl}.tar.gz
|
Source0: https://github.com/jenkinsci/%{name}/archive/refs/tags/build-%{buildver}-jenkins-%{patchlvl}.%{githash}.tar.gz
|
||||||
|
Source1: %{name}-build.xml
|
||||||
|
Patch0: 0001-Remove-the-dependency-on-google-tink.patch
|
||||||
|
BuildRequires: ant
|
||||||
|
BuildRequires: ed25519-java
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: java-devel >= 1.8
|
BuildRequires: java-devel >= 1.8
|
||||||
BuildRequires: javapackages-local
|
BuildRequires: javapackages-local
|
||||||
|
BuildRequires: jbcrypt
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -47,28 +54,31 @@ Group: Documentation/HTML
|
|||||||
API documentation for %{name}.
|
API documentation for %{name}.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}-%{name}-build%{buildver}-jenkins-%{patchlvl}
|
%setup -q -n %{name}-build-%{buildver}-jenkins-%{patchlvl}.%{githash}
|
||||||
|
%patch -P 0 -p1
|
||||||
|
cp %{SOURCE1} build.xml
|
||||||
|
|
||||||
|
%pom_remove_dep :tink
|
||||||
|
%pom_xpath_set pom:project/pom:version "build-%{buildver}-jenkins-%{patchlvl}.%{githash}"
|
||||||
|
|
||||||
%build
|
%build
|
||||||
mkdir -p build/classes
|
mkdir -p lib
|
||||||
javac -d build/classes -source 8 -target 8 $(find src -name \*.java | xargs)
|
build-jar-repository -s lib eddsa jbcrypt
|
||||||
(cd build/classes && jar cf ../%{name}-%{version}.jar $(find . -name \*.class))
|
%{ant} package javadoc
|
||||||
mkdir -p build/docs
|
|
||||||
javadoc -d build/docs -source 8 $(find src -name \*.java | xargs)
|
|
||||||
|
|
||||||
%install
|
%install
|
||||||
# jars
|
# jars
|
||||||
install -d -m 0755 %{buildroot}%{_javadir}
|
install -d -m 0755 %{buildroot}%{_javadir}
|
||||||
install -m 644 build/%{name}-%{version}.jar %{buildroot}%{_javadir}/%{name}.jar
|
install -m 644 target/%{name}-*.jar %{buildroot}%{_javadir}/%{name}.jar
|
||||||
|
|
||||||
# pom
|
# pom
|
||||||
install -d -m 755 %{buildroot}%{_mavenpomdir}
|
install -d -m 755 %{buildroot}%{_mavenpomdir}
|
||||||
install -pm 644 pom.xml %{buildroot}%{_mavenpomdir}/%{name}.pom
|
%{mvn_install_pom} pom.xml %{buildroot}%{_mavenpomdir}/%{name}.pom
|
||||||
%add_maven_depmap %{name}.pom %{name}.jar -a "org.tmatesoft.svnkit:trilead-ssh2","com.trilead:trilead-ssh2"
|
%add_maven_depmap %{name}.pom %{name}.jar -a "org.tmatesoft.svnkit:trilead-ssh2","com.trilead:trilead-ssh2"
|
||||||
|
|
||||||
# javadoc
|
# javadoc
|
||||||
install -d -m 755 %{buildroot}%{_javadocdir}/%{name}
|
install -d -m 755 %{buildroot}%{_javadocdir}/%{name}
|
||||||
cp -aL build/docs/* %{buildroot}%{_javadocdir}/%{name}
|
cp -aL target/site/apidocs/* %{buildroot}%{_javadocdir}/%{name}
|
||||||
%fdupes -s %{buildroot}%{_javadocdir}/%{name}
|
%fdupes -s %{buildroot}%{_javadocdir}/%{name}
|
||||||
|
|
||||||
%files -f .mfiles
|
%files -f .mfiles
|
||||||
|
Loading…
Reference in New Issue
Block a user