Compare commits
52 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ef6da44cb2 | |||
| 747ae8d861 | |||
| 9dc3ec7aa3 | |||
| 992b1acd37 | |||
| 6dec392ef2 | |||
| 9ffb878ee4 | |||
| 294a032030 | |||
| a579beea9e | |||
| df3db8be0e | |||
| da3f27e563 | |||
| d5be4a1cc6 | |||
| 950231a5bb | |||
| b774776eb5 | |||
| be7e755323 | |||
| 95e779c6c1 | |||
| 73dfbc7ffd | |||
| be70cfd29d | |||
| 2e1f76369c | |||
| 6daabd97d4 | |||
| fbd3e48156 | |||
| 6fc0065262 | |||
| df740a5e36 | |||
| cb586a7643 | |||
| 447d02458a | |||
| f0623329e5 | |||
| 624de89cce | |||
| 0e58e2f39c | |||
| 66d0b21911 | |||
| abcc0b7100 | |||
| cc4e5c3669 | |||
| 5c46ad7f7e | |||
| 5904d137cf | |||
| 21ae44b9d8 | |||
| ab7f0da7e2 | |||
| db4f36a951 | |||
| 0654a1fdc4 | |||
| 1e83c5c029 | |||
| e4cc93f966 | |||
| 26fd4ffbc6 | |||
| d463ff311e | |||
| ef8dc618c7 | |||
| fcc245cca3 | |||
| acfede696d | |||
| d6834c5aab | |||
| a09febb7ef | |||
| 9cdcdd7459 | |||
| 6c126d30be | |||
| 3913155591 | |||
| 648550e64f | |||
| 4deb491174 | |||
| d8a9bdfabe | |||
| 0d98dedd32 |
@@ -0,0 +1,228 @@
|
||||
--- ceph-15.2.4/src/yasm-wrapper.orig 2020-06-30 11:40:51.000000000 -0400
|
||||
+++ ceph-15.2.4/src/yasm-wrapper 2020-07-20 12:21:34.574980869 -0400
|
||||
@@ -1,10 +1,11 @@
|
||||
-#!/bin/sh -e
|
||||
+#!/bin/sh
|
||||
|
||||
# libtool and yasm do not get along.
|
||||
# filter out any crap that libtool feeds us that yasm does not understand.
|
||||
#echo $0: got $*
|
||||
new=""
|
||||
touch=""
|
||||
+object=""
|
||||
while [ -n "$*" ]; do
|
||||
case "$1" in
|
||||
-f )
|
||||
@@ -29,6 +30,12 @@
|
||||
touch="$1"
|
||||
shift
|
||||
;;
|
||||
+ -o )
|
||||
+ shift
|
||||
+ object="$1"
|
||||
+ new="$new -o $1"
|
||||
+ shift
|
||||
+ ;;
|
||||
* )
|
||||
new="$new $1"
|
||||
shift
|
||||
@@ -36,8 +43,15 @@
|
||||
esac
|
||||
done
|
||||
|
||||
-#echo $0: yasm $new
|
||||
-yasm $new
|
||||
+#echo ${0}: yasm ${new}
|
||||
+yasm ${new}
|
||||
+
|
||||
+echo ${new} | grep -- "crc32c_intel_fast*asm\.s"
|
||||
+if [ $? -ne 0 ]; then
|
||||
+ touch /tmp/${object}
|
||||
+ ld -r -z ibt -z shstk -z noexecstack -o ${object}.tmp ${object}
|
||||
+ mv ${object}.tmp ${object}
|
||||
+fi
|
||||
|
||||
[ -n "$touch" ] && touch $touch
|
||||
|
||||
--- ceph-15.2.2/src/common/crc32c_intel_fast_asm.s.orig 2020-05-26 08:34:32.226201974 -0400
|
||||
+++ ceph-15.2.2/src/common/crc32c_intel_fast_asm.s 2020-05-26 17:19:20.327201974 -0400
|
||||
@@ -1,5 +1,5 @@
|
||||
;
|
||||
-; Copyright 2012-2013 Intel Corporation All Rights Reserved.
|
||||
+; Copyright 2012-2015 Intel Corporation All Rights Reserved.
|
||||
; All rights reserved.
|
||||
;
|
||||
; http://opensource.org/licenses/BSD-3-Clause
|
||||
@@ -59,16 +59,34 @@
|
||||
xor rbx, rbx ;; rbx = crc1 = 0;
|
||||
xor r10, r10 ;; r10 = crc2 = 0;
|
||||
|
||||
+ cmp len, %%bSize*3*2
|
||||
+ jbe %%non_prefetch
|
||||
+
|
||||
%assign i 0
|
||||
%rep %%bSize/8 - 1
|
||||
- crc32 rax, [bufptmp+i + 0*%%bSize] ;; update crc0
|
||||
- crc32 rbx, [bufptmp+i + 1*%%bSize] ;; update crc1
|
||||
- crc32 r10, [bufptmp+i + 2*%%bSize] ;; update crc2
|
||||
+ %if i < %%bSize*3/4
|
||||
+ prefetchnta [bufptmp+ %%bSize*3 + i*4]
|
||||
+ %endif
|
||||
+ crc32 rax, qword [bufptmp+i + 0*%%bSize] ;; update crc0
|
||||
+ crc32 rbx, qword [bufptmp+i + 1*%%bSize] ;; update crc1
|
||||
+ crc32 r10, qword [bufptmp+i + 2*%%bSize] ;; update crc2
|
||||
%assign i (i+8)
|
||||
%endrep
|
||||
- crc32 rax, [bufptmp+i + 0*%%bSize] ;; update crc0
|
||||
- crc32 rbx, [bufptmp+i + 1*%%bSize] ;; update crc1
|
||||
-; SKIP ;crc32 r10, [bufptmp+i + 2*%%bSize] ;; update crc2
|
||||
+ jmp %%next %+ %1
|
||||
+
|
||||
+%%non_prefetch:
|
||||
+ %assign i 0
|
||||
+ %rep %%bSize/8 - 1
|
||||
+ crc32 rax, qword [bufptmp+i + 0*%%bSize] ;; update crc0
|
||||
+ crc32 rbx, qword [bufptmp+i + 1*%%bSize] ;; update crc1
|
||||
+ crc32 r10, qword [bufptmp+i + 2*%%bSize] ;; update crc2
|
||||
+ %assign i (i+8)
|
||||
+ %endrep
|
||||
+
|
||||
+%%next %+ %1:
|
||||
+ crc32 rax, qword [bufptmp+i + 0*%%bSize] ;; update crc0
|
||||
+ crc32 rbx, qword [bufptmp+i + 1*%%bSize] ;; update crc1
|
||||
+; SKIP ;crc32 r10, qword [bufptmp+i + 2*%%bSize] ;; update crc2
|
||||
|
||||
; merge in crc0
|
||||
movzx bufp_dw, al
|
||||
@@ -180,12 +198,15 @@
|
||||
%define crc_init_dw r8d
|
||||
%endif
|
||||
|
||||
-
|
||||
+ endbranch
|
||||
push rdi
|
||||
push rbx
|
||||
|
||||
mov rax, crc_init ;; rax = crc_init;
|
||||
|
||||
+ cmp len, 8
|
||||
+ jb less_than_8
|
||||
+
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; 1) ALIGN: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
@@ -195,9 +216,6 @@
|
||||
;; amount of the address
|
||||
je proc_block ;; Skip if aligned
|
||||
|
||||
- cmp len, 8
|
||||
- jb less_than_8
|
||||
-
|
||||
;;;; Calculate CRC of unaligned bytes of the buffer (if any) ;;;;
|
||||
mov rbx, [bufptmp] ;; load a quadword from the buffer
|
||||
add bufptmp, bufp ;; align buffer pointer for
|
||||
@@ -233,7 +251,7 @@
|
||||
jnc bit7 ;; jump to bit-6 if bit-7 == 0
|
||||
%assign i 0
|
||||
%rep 16
|
||||
- crc32 rax, [bufptmp+i] ;; compute crc32 of 8-byte data
|
||||
+ crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
|
||||
%assign i (i+8)
|
||||
%endrep
|
||||
je do_return ;; return if remaining data is zero
|
||||
@@ -244,7 +262,7 @@
|
||||
jnc bit6 ;; jump to bit-6 if bit-7 == 0
|
||||
%assign i 0
|
||||
%rep 8
|
||||
- crc32 rax, [bufptmp+i] ;; compute crc32 of 8-byte data
|
||||
+ crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
|
||||
%assign i (i+8)
|
||||
%endrep
|
||||
je do_return ;; return if remaining data is zero
|
||||
@@ -254,7 +272,7 @@
|
||||
jnc bit5 ;; jump to bit-5 if bit-6 == 0
|
||||
%assign i 0
|
||||
%rep 4
|
||||
- crc32 rax, [bufptmp+i] ;; compute crc32 of 8-byte data
|
||||
+ crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
|
||||
%assign i (i+8)
|
||||
%endrep
|
||||
je do_return ;; return if remaining data is zero
|
||||
@@ -264,7 +282,7 @@
|
||||
jnc bit4 ;; jump to bit-4 if bit-5 == 0
|
||||
%assign i 0
|
||||
%rep 2
|
||||
- crc32 rax, [bufptmp+i] ;; compute crc32 of 8-byte data
|
||||
+ crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data
|
||||
%assign i (i+8)
|
||||
%endrep
|
||||
je do_return ;; return if remaining data is zero
|
||||
@@ -272,11 +290,11 @@
|
||||
bit4:
|
||||
shl len_b, 1 ;; shift-out MSB (bit-4)
|
||||
jnc bit3 ;; jump to bit-3 if bit-4 == 0
|
||||
- crc32 rax, [bufptmp] ;; compute crc32 of 8-byte data
|
||||
+ crc32 rax, qword [bufptmp] ;; compute crc32 of 8-byte data
|
||||
je do_return ;; return if remaining data is zero
|
||||
add bufptmp, 8 ;; buf +=8; (next 8 bytes)
|
||||
bit3:
|
||||
- mov rbx, [bufptmp] ;; load a 8-bytes from the buffer:
|
||||
+ mov rbx, qword [bufptmp] ;; load a 8-bytes from the buffer:
|
||||
shl len_b, 1 ;; shift-out MSB (bit-3)
|
||||
jnc bit2 ;; jump to bit-2 if bit-3 == 0
|
||||
crc32 eax, ebx ;; compute crc32 of 4-byte data
|
||||
--- ceph-15.2.2/src/common/crc32c_intel_fast_zero_asm.s.orig 2020-05-26 08:34:32.226201974 -0400
|
||||
+++ ceph-15.2.2/src/common/crc32c_intel_fast_zero_asm.s 2020-05-26 17:19:32.497201974 -0400
|
||||
@@ -1,5 +1,5 @@
|
||||
;
|
||||
-; Copyright 2012-2013 Intel Corporation All Rights Reserved.
|
||||
+; Copyright 2012-2015 Intel Corporation All Rights Reserved.
|
||||
; All rights reserved.
|
||||
;
|
||||
; http://opensource.org/licenses/BSD-3-Clause
|
||||
@@ -59,6 +59,19 @@
|
||||
xor rbx, rbx ;; rbx = crc1 = 0;
|
||||
xor r10, r10 ;; r10 = crc2 = 0;
|
||||
|
||||
+ cmp len, %%bSize*3*2
|
||||
+ jbe %%non_prefetch
|
||||
+
|
||||
+ %assign i 0
|
||||
+ %rep %%bSize/8 - 1
|
||||
+ crc32 rax, bufptmp ;; update crc0
|
||||
+ crc32 rbx, bufptmp ;; update crc1
|
||||
+ crc32 r10, bufptmp ;; update crc2
|
||||
+ %assign i (i+8)
|
||||
+ %endrep
|
||||
+ jmp %%next %+ %1
|
||||
+
|
||||
+%%non_prefetch:
|
||||
%assign i 0
|
||||
%rep %%bSize/8 - 1
|
||||
crc32 rax, bufptmp ;; update crc0
|
||||
@@ -66,6 +79,8 @@
|
||||
crc32 r10, bufptmp ;; update crc2
|
||||
%assign i (i+8)
|
||||
%endrep
|
||||
+
|
||||
+%%next %+ %1:
|
||||
crc32 rax, bufptmp ;; update crc0
|
||||
crc32 rbx, bufptmp ;; update crc1
|
||||
; SKIP ;crc32 r10, bufptmp ;; update crc2
|
||||
@@ -180,12 +195,15 @@
|
||||
%define crc_init_dw r8d
|
||||
%endif
|
||||
|
||||
-
|
||||
+ endbranch
|
||||
push rdi
|
||||
push rbx
|
||||
|
||||
mov rax, crc_init ;; rax = crc_init;
|
||||
|
||||
+ cmp len, 8
|
||||
+ jb less_than_8
|
||||
+
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; 1) ALIGN: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
--- ceph-14.2.6/src/common/bit_str.h.orig 2020-01-24 11:37:20.547679336 -0500
|
||||
+++ ceph-14.2.6/src/common/bit_str.h 2020-01-24 11:37:55.351904895 -0500
|
||||
@@ -14,7 +14,10 @@
|
||||
#ifndef CEPH_COMMON_BIT_STR_H
|
||||
#define CEPH_COMMON_BIT_STR_H
|
||||
|
||||
+#include <cstdint>
|
||||
+#include <iosfwd>
|
||||
--- ceph-15.1.0/src/common/bit_str.h.orig 2020-02-03 09:47:20.047149798 -0500
|
||||
+++ ceph-15.1.0/src/common/bit_str.h 2020-02-03 09:47:50.213149798 -0500
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <cstdint>
|
||||
#include <iosfwd>
|
||||
#include <functional>
|
||||
+#include <ostream>
|
||||
|
||||
namespace ceph {
|
||||
class Formatter;
|
||||
--- ceph-15.2.4/src/global/signal_handler.h.orig 2020-07-17 12:57:54.763628429 -0400
|
||||
+++ ceph-15.2.4/src/global/signal_handler.h 2020-07-17 12:58:10.610628429 -0400
|
||||
@@ -16,6 +16,8 @@
|
||||
#define CEPH_GLOBAL_SIGNAL_HANDLER_H
|
||||
|
||||
#include <signal.h>
|
||||
+#include <string>
|
||||
+
|
||||
#include "acconfig.h"
|
||||
|
||||
typedef void (*signal_handler_t)(int);
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
--- ceph-14.2.6/src/librbd/api/PoolMetadata.h.orig 2020-01-24 12:39:23.738816885 -0500
|
||||
+++ ceph-14.2.6/src/librbd/api/PoolMetadata.h 2020-01-24 12:39:36.522902386 -0500
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "include/rados/librados_fwd.hpp"
|
||||
|
||||
#include <map>
|
||||
+#include <string>
|
||||
|
||||
namespace librbd {
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
From 8db2a44c9438749be98d41fb309f10d5084805df Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Layton <jlayton@redhat.com>
|
||||
Date: Fri, 17 Jan 2020 07:48:12 -0500
|
||||
Subject: [PATCH] mount.ceph: remove arbitrary limit on size of name= option
|
||||
|
||||
Aaron was getting back -ERANGE errors when trying to mount using
|
||||
a long name= option. The issue is that the destination buffer for the
|
||||
"key=" string is not big enough to hold long names.
|
||||
|
||||
When I overhauled the mount.ceph code recently, I made this buffer much
|
||||
smaller than before figuring that it didn't need to be any larger than
|
||||
the length of "secret=<base64 encoded key>".
|
||||
|
||||
In the case where the secret is set in the keyring though, this buffer
|
||||
needs to be able to hold a string like "key=client.<cephx name>". The
|
||||
cephx name can be of arbitrary length, however.
|
||||
|
||||
Rework the code to just safe_cat the strings directly into the options
|
||||
buffer, eliminating an extra copy and the need for an arbitrary limit.
|
||||
This also allows us to remove get_secret_option() from the the common
|
||||
code as well.
|
||||
|
||||
Fixes: https://tracker.ceph.com/issues/43649
|
||||
Reported-by: Aaron <aarongmldt@gmail.com>
|
||||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
---
|
||||
src/common/secret.h | 7 ------
|
||||
src/mount/mount.ceph.c | 45 ++++++++++++++++++++++++-------------
|
||||
src/mount/mount.ceph.h | 3 ---
|
||||
4 files changed, 30 insertions(+), 75 deletions(-)
|
||||
|
||||
diff --git a/src/common/secret.h b/src/common/secret.h
|
||||
index b681fa1ec7..5d2ad179dd 100644
|
||||
--- a/src/common/secret.h
|
||||
+++ b/src/common/secret.h
|
||||
@@ -7,13 +7,6 @@ extern "C" {
|
||||
|
||||
int read_secret_from_file(const char *filename, char *secret, size_t max_len);
|
||||
|
||||
-/*
|
||||
- * Attempts to add the secret to the kernel, but falls back to
|
||||
- * the old secret= option if the kernel is too old.
|
||||
- */
|
||||
-int get_secret_option(const char *secret, const char *key_name,
|
||||
- char *secret_option, size_t secret_option_len);
|
||||
-
|
||||
int set_kernel_secret(const char *secret, const char *key_name);
|
||||
|
||||
int is_kernel_secret(const char *key_name);
|
||||
diff --git a/src/mount/mount.ceph.c b/src/mount/mount.ceph.c
|
||||
index e970648c59..133bc554f5 100644
|
||||
--- a/src/mount/mount.ceph.c
|
||||
+++ b/src/mount/mount.ceph.c
|
||||
@@ -425,24 +425,39 @@ static void ceph_mount_info_free(struct ceph_mount_info *cmi)
|
||||
free(cmi->cmi_conf);
|
||||
}
|
||||
|
||||
-static int finalize_options(struct ceph_mount_info *cmi)
|
||||
+static int append_key_or_secret_option(struct ceph_mount_info *cmi)
|
||||
{
|
||||
- int pos;
|
||||
+ int pos = strlen(cmi->cmi_opts);
|
||||
|
||||
- if (cmi->cmi_secret[0] || is_kernel_secret(cmi->cmi_name)) {
|
||||
- int ret;
|
||||
- char secret_option[SECRET_OPTION_BUFSIZE];
|
||||
+ if (!cmi->cmi_secret[0] && !is_kernel_secret(cmi->cmi_name))
|
||||
+ return 0;
|
||||
|
||||
- ret = get_secret_option(cmi->cmi_secret, cmi->cmi_name,
|
||||
- secret_option, sizeof(secret_option));
|
||||
- if (ret < 0)
|
||||
+ if (pos)
|
||||
+ pos = safe_cat(&cmi->cmi_opts, &cmi->cmi_opts_len, pos, ",");
|
||||
+
|
||||
+ /* when parsing kernel options (-o remount) we get '<hidden>' as the secret */
|
||||
+ if (cmi->cmi_secret[0] && (strcmp(cmi->cmi_secret, "<hidden>") != 0)) {
|
||||
+ int ret = set_kernel_secret(cmi->cmi_secret, cmi->cmi_name);
|
||||
+ if (ret < 0) {
|
||||
+ if (ret == -ENODEV || ret == -ENOSYS) {
|
||||
+ /* old kernel; fall back to secret= in options */
|
||||
+ pos = safe_cat(&cmi->cmi_opts,
|
||||
+ &cmi->cmi_opts_len, pos,
|
||||
+ "secret=");
|
||||
+ pos = safe_cat(&cmi->cmi_opts,
|
||||
+ &cmi->cmi_opts_len, pos,
|
||||
+ cmi->cmi_secret);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ fprintf(stderr, "adding ceph secret key to kernel failed: %s\n",
|
||||
+ strerror(-ret));
|
||||
return ret;
|
||||
-
|
||||
- pos = strlen(cmi->cmi_opts);
|
||||
- if (pos)
|
||||
- pos = safe_cat(&cmi->cmi_opts, &cmi->cmi_opts_len, pos, ",");
|
||||
- pos = safe_cat(&cmi->cmi_opts, &cmi->cmi_opts_len, pos, secret_option);
|
||||
+ }
|
||||
}
|
||||
+
|
||||
+ pos = safe_cat(&cmi->cmi_opts, &cmi->cmi_opts_len, pos, "key=");
|
||||
+ pos = safe_cat(&cmi->cmi_opts, &cmi->cmi_opts_len, pos, cmi->cmi_name);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -493,9 +508,9 @@ int main(int argc, char *argv[])
|
||||
/* Ensure the ceph key_type is available */
|
||||
modprobe();
|
||||
|
||||
- retval = finalize_options(&cmi);
|
||||
+ retval = append_key_or_secret_option(&cmi);
|
||||
if (retval) {
|
||||
- fprintf(stderr, "couldn't finalize options: %d\n", retval);
|
||||
+ fprintf(stderr, "couldn't append secret option: %d\n", retval);
|
||||
retval = EX_USAGE;
|
||||
goto out;
|
||||
}
|
||||
diff --git a/src/mount/mount.ceph.h b/src/mount/mount.ceph.h
|
||||
index c563597c43..b61176923d 100644
|
||||
--- a/src/mount/mount.ceph.h
|
||||
+++ b/src/mount/mount.ceph.h
|
||||
@@ -21,9 +21,6 @@ extern "C" {
|
||||
/* Max Including null terminator */
|
||||
#define SECRET_BUFSIZE (MAX_SECRET_LEN + 1)
|
||||
|
||||
-/* Buffer size for secret= option */
|
||||
-#define SECRET_OPTION_BUFSIZE (sizeof("secret=") + MAX_SECRET_LEN + 1)
|
||||
-
|
||||
/* 2k should be enough for anyone? */
|
||||
#define MON_LIST_BUFSIZE 2048
|
||||
|
||||
--
|
||||
2.24.1
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
diff --git a/cmake/modules/BuildBoost.cmake b/cmake/modules/BuildBoost.cmake
|
||||
index 2e92132366..3cb1e3d958 100644
|
||||
--- a/cmake/modules/BuildBoost.cmake
|
||||
+++ b/cmake/modules/BuildBoost.cmake
|
||||
@@ -62,7 +62,7 @@ function(do_build_boost version)
|
||||
else()
|
||||
list(APPEND boost_features "address-model=32")
|
||||
endif()
|
||||
- set(BOOST_CXXFLAGS "-fPIC -w") # check on arm, etc <---XXX
|
||||
+ set(BOOST_CXXFLAGS "-fPIC -w -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -ftemplate-depth-1024 -fno-new-ttp-matching -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") # check on arm, etc <---XXX
|
||||
list(APPEND boost_features "cxxflags=${BOOST_CXXFLAGS}")
|
||||
|
||||
set(boost_with_libs)
|
||||
@@ -1 +1 @@
|
||||
SHA512 (ceph-14.2.7.tar.gz) = 59f475e56053ba5e7e3a482a3a91b4d44272e6ec8051b92783de76c09c0d967a7ef76676db998968a709e48f08e90828dd8f86bd96a7c3fd111d48bfb7fd93b1
|
||||
SHA512 (ceph-15.2.15.tar.gz) = e4d929ffda5c3e31767d93340fb97b5d49ca1d5641f6c30134ce5542486fc4f72684aef2ef47cb940a332e8b9144d8cec63ce8a9f86c773dbc0ccebdd8e7fb19
|
||||
|
||||
Reference in New Issue
Block a user