Tue Jul 6 2021 Klaus Wenninger <kwenning@redhat.com> - 1.5.0-1
- sync with fedora sbd-1.5.0-1 Resolves: rhbz#1979961 Resolves: rhbz#1979573
This commit is contained in:
		
							parent
							
								
									875bb041df
								
							
						
					
					
						commit
						cdf7377066
					
				| @ -0,0 +1,41 @@ | |||||||
|  | From 956f3558d4b619fb19eaa040614dfaf9a226d514 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Klaus Wenninger <klaus.wenninger@aon.at> | ||||||
|  | Date: Mon, 28 Jun 2021 17:37:44 +0200 | ||||||
|  | Subject: [PATCH] Build: Fix: correctly derive package version from git | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  Makefile.am | 4 ++-- | ||||||
|  |  sbd.spec    | 2 +- | ||||||
|  |  2 files changed, 3 insertions(+), 3 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/Makefile.am b/Makefile.am
 | ||||||
|  | index e614754..5d53c4c 100644
 | ||||||
|  | --- a/Makefile.am
 | ||||||
|  | +++ b/Makefile.am
 | ||||||
|  | @@ -73,8 +73,8 @@ spec:
 | ||||||
|  |  		sed -i 's/global\ build_counter.*/global\ build_counter\ $(COUNT)/' $(distdir)/$(PACKAGE).spec; \ | ||||||
|  |  		echo $(COUNT) > $(BUILD_COUNTER); \ | ||||||
|  |  	fi | ||||||
|  | -	if [ -n $(COMMIT_COUNTER) ]; then \
 | ||||||
|  | -		sed -i 's/global\ commit_counter.*/global\ commit_counter\ $(COMMIT_COUNTER)-1/' $(distdir)/$(PACKAGE).spec; \
 | ||||||
|  | +	if [ -n "$(COMMIT_COUNTER)" ]; then \
 | ||||||
|  | +		sed -i 's/global\ commit_counter.*/global\ commit_counter\ $(COMMIT_COUNTER)/' $(distdir)/$(PACKAGE).spec; \
 | ||||||
|  |  	fi | ||||||
|  |   | ||||||
|  |  srpm:	export spec | ||||||
|  | diff --git a/sbd.spec b/sbd.spec
 | ||||||
|  | index 776e48b..0498db1 100644
 | ||||||
|  | --- a/sbd.spec
 | ||||||
|  | +++ b/sbd.spec
 | ||||||
|  | @@ -20,7 +20,7 @@
 | ||||||
|  |  %global modified %(echo %{longcommit}-|cut -f2 -d-) | ||||||
|  |  %global github_owner Clusterlabs | ||||||
|  |  %global commit_counter 0 | ||||||
|  | -%global build_counter 1
 | ||||||
|  | +%global build_counter 0
 | ||||||
|  |  %global buildnum %(expr %{commit_counter} + %{build_counter}) | ||||||
|  |   | ||||||
|  |  %ifarch s390x s390 | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.1 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,43 @@ | |||||||
|  | From 8438c244cc2066fbe9c598a6392e8935cf017d97 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: "Gao,Yan" <ygao@suse.com> | ||||||
|  | Date: Fri, 25 Jun 2021 15:02:14 +0200 | ||||||
|  | Subject: [PATCH] Refactor: sbd-inquisitor: functionize striping leading spaces | ||||||
|  |  of an option value | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  src/sbd-inquisitor.c | 11 +++++++++-- | ||||||
|  |  1 file changed, 9 insertions(+), 2 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/sbd-inquisitor.c b/src/sbd-inquisitor.c
 | ||||||
|  | index 4fec2fd..53ddfa3 100644
 | ||||||
|  | --- a/src/sbd-inquisitor.c
 | ||||||
|  | +++ b/src/sbd-inquisitor.c
 | ||||||
|  | @@ -40,9 +40,8 @@ bool sync_resource_startup = false;
 | ||||||
|  |  int parse_device_line(const char *line); | ||||||
|  |   | ||||||
|  |  static const char * | ||||||
|  | -get_env_option(const char *option)
 | ||||||
|  | +sanitize_option_value(const char *value)
 | ||||||
|  |  { | ||||||
|  | -	const char *value = getenv(option);
 | ||||||
|  |  	size_t max = 0; | ||||||
|  |  	size_t lpc = 0; | ||||||
|  |   | ||||||
|  | @@ -61,6 +60,14 @@ get_env_option(const char *option)
 | ||||||
|  |  	return (strlen(value + lpc) > 0 ? (value + lpc) : NULL); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +static const char *
 | ||||||
|  | +get_env_option(const char *option)
 | ||||||
|  | +{
 | ||||||
|  | +	const char *value = getenv(option);
 | ||||||
|  | +
 | ||||||
|  | +	return sanitize_option_value(value);
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  static int | ||||||
|  |  recruit_servant(const char *devname, pid_t pid) | ||||||
|  |  { | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.1 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,29 @@ | |||||||
|  | From c1bb2a4d8c8ec66c72da3ec080f23b1f858a66af Mon Sep 17 00:00:00 2001 | ||||||
|  | From: "Gao,Yan" <ygao@suse.com> | ||||||
|  | Date: Mon, 28 Jun 2021 13:35:56 +0200 | ||||||
|  | Subject: [PATCH] Log: sbd-inquisitor: tell the actual watchdog device | ||||||
|  |  specified with `-w` | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  src/sbd-inquisitor.c | 2 +- | ||||||
|  |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/sbd-inquisitor.c b/src/sbd-inquisitor.c
 | ||||||
|  | index 53ddfa3..2cf09ac 100644
 | ||||||
|  | --- a/src/sbd-inquisitor.c
 | ||||||
|  | +++ b/src/sbd-inquisitor.c
 | ||||||
|  | @@ -1042,10 +1042,10 @@ int main(int argc, char **argv, char **envp)
 | ||||||
|  |  			W_count++; | ||||||
|  |  			break; | ||||||
|  |  		case 'w': | ||||||
|  | -                        cl_log(LOG_NOTICE, "Using watchdog device '%s'", watchdogdev);
 | ||||||
|  |                          free(watchdogdev); | ||||||
|  |                          watchdogdev = strdup(optarg); | ||||||
|  |                          watchdogdev_is_default = false; | ||||||
|  | +                        cl_log(LOG_NOTICE, "Using watchdog device '%s'", watchdogdev);
 | ||||||
|  |  			break; | ||||||
|  |  		case 'd': | ||||||
|  |  #if SUPPORT_SHARED_DISK | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.1 | ||||||
|  | 
 | ||||||
							
								
								
									
										146
									
								
								0004-Fix-sbd-inquisitor-tolerate-and-strip-any-leading-sp.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								0004-Fix-sbd-inquisitor-tolerate-and-strip-any-leading-sp.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,146 @@ | |||||||
|  | From 1c72cf23561deeb69b04891f3fc4d0613f73fbb0 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: "Gao,Yan" <ygao@suse.com> | ||||||
|  | Date: Fri, 25 Jun 2021 15:21:38 +0200 | ||||||
|  | Subject: [PATCH] Fix: sbd-inquisitor: tolerate and strip any leading spaces of | ||||||
|  |  command line option values | ||||||
|  | 
 | ||||||
|  | Somehow an user's own monitoring agent doesn't well parse an SBD_DEVICE | ||||||
|  | setting with spaces between the device names: | ||||||
|  | 
 | ||||||
|  | SBD_DEVICE="/dev/<a>; /dev/<b>; /dev/<c>" | ||||||
|  | 
 | ||||||
|  | And eventually it calls an sbd command: | ||||||
|  | 
 | ||||||
|  | `sbd list -d " /dev/<b>"` | ||||||
|  | 
 | ||||||
|  | --  A space is prefixed to the device name which is quoted.
 | ||||||
|  | 
 | ||||||
|  | Of course it could be easily fixed in the setting or their agent. But | ||||||
|  | OTOH, sbd'd better tolerate and strip any leading spaces of command line | ||||||
|  | option values. | ||||||
|  | ---
 | ||||||
|  |  src/sbd-inquisitor.c | 41 +++++++++++++++++++++++++---------------- | ||||||
|  |  1 file changed, 25 insertions(+), 16 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/sbd-inquisitor.c b/src/sbd-inquisitor.c
 | ||||||
|  | index 2cf09ac..944a353 100644
 | ||||||
|  | --- a/src/sbd-inquisitor.c
 | ||||||
|  | +++ b/src/sbd-inquisitor.c
 | ||||||
|  | @@ -999,6 +999,15 @@ int main(int argc, char **argv, char **envp)
 | ||||||
|  |          } | ||||||
|  |   | ||||||
|  |  	while ((c = getopt(argc, argv, "czC:DPRTWZhvw:d:n:p:1:2:3:4:5:t:I:F:S:s:r:")) != -1) { | ||||||
|  | +		/* Call it before checking optarg for NULL to make coverity happy */
 | ||||||
|  | +		const char *sanitized_optarg = sanitize_option_value(optarg);
 | ||||||
|  | +
 | ||||||
|  | +		if (optarg && sanitized_optarg == NULL) {
 | ||||||
|  | +			fprintf(stderr, "Invalid value \"%s\" for option -%c\n", optarg, c);
 | ||||||
|  | +			exit_status = -2;
 | ||||||
|  | +			goto out;
 | ||||||
|  | +		}
 | ||||||
|  | +
 | ||||||
|  |  		switch (c) { | ||||||
|  |  		case 'D': | ||||||
|  |  			break; | ||||||
|  | @@ -1011,11 +1020,11 @@ int main(int argc, char **argv, char **envp)
 | ||||||
|  |  			cl_log(LOG_INFO, "Realtime mode deactivated."); | ||||||
|  |  			break; | ||||||
|  |  		case 'S': | ||||||
|  | -			start_mode = atoi(optarg);
 | ||||||
|  | +			start_mode = atoi(sanitized_optarg);
 | ||||||
|  |  			cl_log(LOG_INFO, "Start mode set to: %d", (int)start_mode); | ||||||
|  |  			break; | ||||||
|  |  		case 's': | ||||||
|  | -			timeout_startup = atoi(optarg);
 | ||||||
|  | +			timeout_startup = atoi(sanitized_optarg);
 | ||||||
|  |  			cl_log(LOG_INFO, "Start timeout set to: %d", (int)timeout_startup); | ||||||
|  |  			break; | ||||||
|  |  		case 'v': | ||||||
|  | @@ -1043,13 +1052,13 @@ int main(int argc, char **argv, char **envp)
 | ||||||
|  |  			break; | ||||||
|  |  		case 'w': | ||||||
|  |                          free(watchdogdev); | ||||||
|  | -                        watchdogdev = strdup(optarg);
 | ||||||
|  | +                        watchdogdev = strdup(sanitized_optarg);
 | ||||||
|  |                          watchdogdev_is_default = false; | ||||||
|  |                          cl_log(LOG_NOTICE, "Using watchdog device '%s'", watchdogdev); | ||||||
|  |  			break; | ||||||
|  |  		case 'd': | ||||||
|  |  #if SUPPORT_SHARED_DISK | ||||||
|  | -			if (recruit_servant(optarg, 0) != 0) {
 | ||||||
|  | +			if (recruit_servant(sanitized_optarg, 0) != 0) {
 | ||||||
|  |  				fprintf(stderr, "Invalid device: %s\n", optarg); | ||||||
|  |  				exit_status = -1; | ||||||
|  |  				goto out; | ||||||
|  | @@ -1070,48 +1079,48 @@ int main(int argc, char **argv, char **envp)
 | ||||||
|  |  			disk_priority = 0; | ||||||
|  |  			break; | ||||||
|  |  		case 'n': | ||||||
|  | -			local_uname = strdup(optarg);
 | ||||||
|  | +			local_uname = strdup(sanitized_optarg);
 | ||||||
|  |  			cl_log(LOG_INFO, "Overriding local hostname to %s", local_uname); | ||||||
|  |  			break; | ||||||
|  |  		case 'p': | ||||||
|  | -			pidfile = strdup(optarg);
 | ||||||
|  | +			pidfile = strdup(sanitized_optarg);
 | ||||||
|  |  			cl_log(LOG_INFO, "pidfile set to %s", pidfile); | ||||||
|  |  			break; | ||||||
|  |  		case 'C': | ||||||
|  | -			timeout_watchdog_crashdump = atoi(optarg);
 | ||||||
|  | +			timeout_watchdog_crashdump = atoi(sanitized_optarg);
 | ||||||
|  |  			cl_log(LOG_INFO, "Setting crashdump watchdog timeout to %d", | ||||||
|  |  					(int)timeout_watchdog_crashdump); | ||||||
|  |  			break; | ||||||
|  |  		case '1': | ||||||
|  | -			timeout_watchdog = atoi(optarg);
 | ||||||
|  | +			timeout_watchdog = atoi(sanitized_optarg);
 | ||||||
|  |  			break; | ||||||
|  |  		case '2': | ||||||
|  | -			timeout_allocate = atoi(optarg);
 | ||||||
|  | +			timeout_allocate = atoi(sanitized_optarg);
 | ||||||
|  |  			break; | ||||||
|  |  		case '3': | ||||||
|  | -			timeout_loop = atoi(optarg);
 | ||||||
|  | +			timeout_loop = atoi(sanitized_optarg);
 | ||||||
|  |  			break; | ||||||
|  |  		case '4': | ||||||
|  | -			timeout_msgwait = atoi(optarg);
 | ||||||
|  | +			timeout_msgwait = atoi(sanitized_optarg);
 | ||||||
|  |  			break; | ||||||
|  |  		case '5': | ||||||
|  | -			timeout_watchdog_warn = atoi(optarg);
 | ||||||
|  | +			timeout_watchdog_warn = atoi(sanitized_optarg);
 | ||||||
|  |  			do_calculate_timeout_watchdog_warn = false; | ||||||
|  |  			cl_log(LOG_INFO, "Setting latency warning to %d", | ||||||
|  |  					(int)timeout_watchdog_warn); | ||||||
|  |  			break; | ||||||
|  |  		case 't': | ||||||
|  | -			servant_restart_interval = atoi(optarg);
 | ||||||
|  | +			servant_restart_interval = atoi(sanitized_optarg);
 | ||||||
|  |  			cl_log(LOG_INFO, "Setting servant restart interval to %d", | ||||||
|  |  					(int)servant_restart_interval); | ||||||
|  |  			break; | ||||||
|  |  		case 'I': | ||||||
|  | -			timeout_io = atoi(optarg);
 | ||||||
|  | +			timeout_io = atoi(sanitized_optarg);
 | ||||||
|  |  			cl_log(LOG_INFO, "Setting IO timeout to %d", | ||||||
|  |  					(int)timeout_io); | ||||||
|  |  			break; | ||||||
|  |  		case 'F': | ||||||
|  | -			servant_restart_count = atoi(optarg);
 | ||||||
|  | +			servant_restart_count = atoi(sanitized_optarg);
 | ||||||
|  |  			cl_log(LOG_INFO, "Servant restart count set to %d", | ||||||
|  |  					(int)servant_restart_count); | ||||||
|  |  			break; | ||||||
|  | @@ -1119,7 +1128,7 @@ int main(int argc, char **argv, char **envp)
 | ||||||
|  |  			if (timeout_action) { | ||||||
|  |  				free(timeout_action); | ||||||
|  |  			} | ||||||
|  | -			timeout_action = strdup(optarg);
 | ||||||
|  | +			timeout_action = strdup(sanitized_optarg);
 | ||||||
|  |  			break; | ||||||
|  |  		case 'h': | ||||||
|  |  			usage(); | ||||||
|  | -- 
 | ||||||
|  | 1.8.3.1 | ||||||
|  | 
 | ||||||
| @ -12,3 +12,11 @@ decision_context: bodhi_update_push_stable | |||||||
| subject_type: koji_build | subject_type: koji_build | ||||||
| rules: | rules: | ||||||
|   - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} |   - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} | ||||||
|  | 
 | ||||||
|  | --- !Policy | ||||||
|  | product_versions: | ||||||
|  |   - rhel-* | ||||||
|  | decision_context: osci_compose_gate | ||||||
|  | rules: | ||||||
|  |   - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} | ||||||
|  | 
 | ||||||
|  | |||||||
							
								
								
									
										41
									
								
								sbd.spec
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								sbd.spec
									
									
									
									
									
								
							| @ -15,10 +15,11 @@ | |||||||
| 
 | 
 | ||||||
| # Please submit bugfixes or comments via http://bugs.opensuse.org/ | # Please submit bugfixes or comments via http://bugs.opensuse.org/ | ||||||
| # | # | ||||||
| %global longcommit 044643922c3044c0bac2f91b1382ff3f2c64a4a2 | %global longcommit d7f447d689da52897e190114c448d1129f3c5f72 | ||||||
| %global shortcommit %(echo %{longcommit}|cut -c1-8) | %global shortcommit %(echo %{longcommit}|cut -c1-8) | ||||||
|  | %global modified %(echo %{longcommit}-|cut -f2 -d-) | ||||||
| %global github_owner Clusterlabs | %global github_owner Clusterlabs | ||||||
| %global buildnum 3 | %global buildnum 1 | ||||||
| 
 | 
 | ||||||
| %ifarch s390x s390 | %ifarch s390x s390 | ||||||
| # minimum timeout on LPAR diag288 watchdog is 15s | # minimum timeout on LPAR diag288 watchdog is 15s | ||||||
| @ -27,16 +28,34 @@ | |||||||
| %global watchdog_timeout_default 5 | %global watchdog_timeout_default 5 | ||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| %global sync_resource_startup_default no | # Be careful with sync_resource_startup_default | ||||||
| %global sync_resource_startup_sysconfig yes | # being enabled. This configuration has | ||||||
|  | # to be in sync with configuration in pacemaker | ||||||
|  | # where it is called sbd_sync - assure by e.g. | ||||||
|  | # mutual rpm dependencies. | ||||||
|  | %bcond_without sync_resource_startup_default | ||||||
|  | # Syncing enabled per default will lead to | ||||||
|  | # syncing enabled on upgrade without adaption | ||||||
|  | # of the config. | ||||||
|  | # Setting can still be overruled via sysconfig. | ||||||
|  | # The setting in the config-template packaged | ||||||
|  | # will follow the default if below is is left | ||||||
|  | # empty. But it is possible to have the setting | ||||||
|  | # in the config-template deviate from the default | ||||||
|  | # by setting below to an explicit 'yes' or 'no'. | ||||||
|  | %global sync_resource_startup_sysconfig "" | ||||||
| 
 | 
 | ||||||
| Name:           sbd | Name:           sbd | ||||||
| Summary:        Storage-based death | Summary:        Storage-based death | ||||||
| License:        GPLv2+ | License:        GPLv2+ | ||||||
| Version:        1.4.2 | Version:        1.5.0 | ||||||
| Release:        %{buildnum}%{?dist}.2 | Release:        %{buildnum}%{?dist} | ||||||
| Url:            https://github.com/%{github_owner}/%{name} | Url:            https://github.com/%{github_owner}/%{name} | ||||||
| Source0:        https://github.com/%{github_owner}/%{name}/archive/%{longcommit}/%{name}-%{longcommit}.tar.gz | Source0:        https://github.com/%{github_owner}/%{name}/archive/%{longcommit}/%{name}-%{longcommit}.tar.gz | ||||||
|  | Patch0:         0001-Build-Fix-correctly-derive-package-version-from-git.patch | ||||||
|  | Patch1:         0002-Refactor-sbd-inquisitor-functionize-striping-leading.patch | ||||||
|  | Patch2:         0003-Log-sbd-inquisitor-tell-the-actual-watchdog-device-s.patch | ||||||
|  | Patch3:         0004-Fix-sbd-inquisitor-tolerate-and-strip-any-leading-sp.patch | ||||||
| BuildRequires:  autoconf | BuildRequires:  autoconf | ||||||
| BuildRequires:  automake | BuildRequires:  automake | ||||||
| BuildRequires:  libuuid-devel | BuildRequires:  libuuid-devel | ||||||
| @ -65,6 +84,9 @@ ExclusiveArch: i686 x86_64 s390x aarch64 ppc64le | |||||||
| 
 | 
 | ||||||
| This package contains the storage-based death functionality. | This package contains the storage-based death functionality. | ||||||
| 
 | 
 | ||||||
|  | Available rpmbuild rebuild options: | ||||||
|  |   --with(out) : sync_resource_startup_default | ||||||
|  | 
 | ||||||
| %package tests | %package tests | ||||||
| Summary:        Storage-based death environment for regression tests | Summary:        Storage-based death environment for regression tests | ||||||
| License:        GPLv2+ | License:        GPLv2+ | ||||||
| @ -84,7 +106,7 @@ regression-testing sbd. | |||||||
| ./autogen.sh | ./autogen.sh | ||||||
| export CFLAGS="$RPM_OPT_FLAGS -Wall -Werror" | export CFLAGS="$RPM_OPT_FLAGS -Wall -Werror" | ||||||
| %configure --with-watchdog-timeout-default=%{watchdog_timeout_default} \ | %configure --with-watchdog-timeout-default=%{watchdog_timeout_default} \ | ||||||
|            --with-sync-resource-startup-default=%{sync_resource_startup_default} \ |            --with-sync-resource-startup-default=%{?with_sync_resource_startup_default:yes}%{!?with_sync_resource_startup_default:no} \ | ||||||
|            --with-sync-resource-startup-sysconfig=%{sync_resource_startup_sysconfig} |            --with-sync-resource-startup-sysconfig=%{sync_resource_startup_sysconfig} | ||||||
| make %{?_smp_mflags} | make %{?_smp_mflags} | ||||||
| 
 | 
 | ||||||
| @ -157,6 +179,11 @@ fi | |||||||
| %{_libdir}/libsbdtestbed* | %{_libdir}/libsbdtestbed* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | Tue Jul 6 2021 Klaus Wenninger <kwenning@redhat.com> - 1.5.0-1 | ||||||
|  | - sync with fedora sbd-1.5.0-1 | ||||||
|  |   Resolves: rhbz#1979961 | ||||||
|  |   Resolves: rhbz#1979573 | ||||||
|  | 
 | ||||||
| * Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.4.2-3.2 | * Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 1.4.2-3.2 | ||||||
| - Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 | - Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sources
									
									
									
									
									
								
							| @ -1 +1 @@ | |||||||
| SHA512 (sbd-044643922c3044c0bac2f91b1382ff3f2c64a4a2.tar.gz) = de8b4c06b6382a56102af85b7b9f295ccf2ee5118213c4e95c4d314b681d2dcfa58702cd1ad7de667283508d69a36499bb767f4594745883c6fca0c54e365216 | SHA512 (sbd-d7f447d689da52897e190114c448d1129f3c5f72.tar.gz) = 45a8d6f5b9a03f0c310ed0472baddbd5fb59e1d928611078da938c11d5e6ff43520dd8f7b17e1c2fee86a73c4c6e744782e1d09ac8563db4858e6293fb783afe | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user