diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index a207df7..0000000 --- a/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -amtu-0.1.tar.gz -amtu-1.0.tar.gz -amtu-1.0.1.tar.gz -amtu-1.0.2.tar.gz -amtu-1.0.3.tar.gz -amtu-1.0.4.tar.gz diff --git a/Makefile b/Makefile deleted file mode 100644 index 1a16b31..0000000 --- a/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# Makefile for source rpm: amtu -# $Id$ -NAME := amtu -SPECFILE = $(firstword $(wildcard *.spec)) - -include ../common/Makefile.common diff --git a/amtu-1.0.2-memsep-random.patch b/amtu-1.0.2-memsep-random.patch deleted file mode 100644 index 029c5eb..0000000 --- a/amtu-1.0.2-memsep-random.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- amtu-1.0.2/src/memsep.c.orig 2005-12-01 23:11:44.000000000 -0500 -+++ amtu-1.0.2/src/memsep.c 2005-12-01 22:58:17.000000000 -0500 -@@ -56,6 +56,7 @@ - #include "config.h" - #include - #include -+#include - #include - #include - #include -@@ -91,15 +92,14 @@ void sig_handler(int sig) - /* range start <= j < end, aligned to sizeof(int) */ - /* */ - /************************************************************************/ -+#if __LP64__ -+#define RANDNUM ((uint64_t)random() << 32 | random()) -+#else -+#define RANDNUM random() -+#endif - int *get_pointer_in_range(int *start, int *end) - { -- int *j; -- double n_ints; -- -- n_ints = (end - start)/sizeof(int); -- -- j = start + (int) (n_ints * rand()/(RAND_MAX + 1.0)); -- return j; -+ return (int *)((char *)start + (RANDNUM % ((char *)end - (char *)start + 1))); - } - - /************************************************************************/ diff --git a/amtu-autoconf.patch b/amtu-autoconf.patch deleted file mode 100644 index 2b0694b..0000000 --- a/amtu-autoconf.patch +++ /dev/null @@ -1,120 +0,0 @@ -diff -urp amtu-1.0.orig/configure.in amtu-1.0/configure.in ---- amtu-1.0.orig/configure.in 2005-06-08 16:50:00.155816448 -0400 -+++ amtu-1.0/configure.in 2005-06-08 16:51:12.515816056 -0400 -@@ -1,9 +1,18 @@ --AC_INIT(src/amtu.c) -+AC_REVISION($Revision: 1.3 $)dnl - # AC_CANONICAL_SYSTEM is deprecated in the latest version of AUTOMAKE. - # We aren't using the latest version so we'll keep using it - #AC_CANONICAL_TARGET -+AC_INIT(src/amtu.c) -+AC_PREREQ(2.12)dnl -+AC_CONFIG_AUX_DIR(config) -+AC_CONFIG_SRCDIR(src/amtu.c) -+AM_CONFIG_HEADER(config.h) -+ -+VERSION=1.0 -+echo Configuring amtu $VERSION -+ - AC_CANONICAL_SYSTEM --AM_INIT_AUTOMAKE(amtu, 1.0) -+AM_INIT_AUTOMAKE(amtu, $VERSION) - AC_PROG_CC - case "$target" in - i386-* | i486-* | i586-* | i686-*) AC_DEFINE(HAVE_I86,1,NULL);; -@@ -15,6 +24,4 @@ ia64-*) AC_DEFINE(HAVE_IA64,1,NULL);; - esac - AC_CHECK_LIB(laus, laus_open) - AC_CHECK_LIB(audit, audit_open) --AC_OUTPUT(Makefile \ --src/Makefile \ --doc/Makefile) -+AC_OUTPUT(Makefile src/Makefile doc/Makefile) -diff -urp amtu-1.0.orig/src/amtu.c amtu-1.0/src/amtu.c ---- amtu-1.0.orig/src/amtu.c 2005-03-17 13:46:39.000000000 -0500 -+++ amtu-1.0/src/amtu.c 2005-06-08 16:51:42.051325976 -0400 -@@ -36,6 +36,7 @@ - // - //---------------------------------------------------------------------- - -+#include "config.h" - #include - #include - #include -diff -urp amtu-1.0.orig/src/amtu-i86.c amtu-1.0/src/amtu-i86.c ---- amtu-1.0.orig/src/amtu-i86.c 2005-03-17 13:48:38.000000000 -0500 -+++ amtu-1.0/src/amtu-i86.c 2005-06-08 16:51:12.521815144 -0400 -@@ -29,6 +29,7 @@ - // using libaudit instead of liblaus - //---------------------------------------------------------------------- - -+#include "config.h" - #include - #include - #include -diff -urp amtu-1.0.orig/src/amtu-ppc.c amtu-1.0/src/amtu-ppc.c ---- amtu-1.0.orig/src/amtu-ppc.c 2005-03-17 13:48:57.000000000 -0500 -+++ amtu-1.0/src/amtu-ppc.c 2005-06-08 16:51:12.522814992 -0400 -@@ -28,6 +28,7 @@ - // using libaudit instead of liblaus - //---------------------------------------------------------------------- - -+#include "config.h" - #include - #include - #include -diff -urp amtu-1.0.orig/src/amtu-s390.c amtu-1.0/src/amtu-s390.c ---- amtu-1.0.orig/src/amtu-s390.c 2005-03-17 13:49:16.000000000 -0500 -+++ amtu-1.0/src/amtu-s390.c 2005-06-08 16:51:12.523814840 -0400 -@@ -29,6 +29,7 @@ - // using libaudit instead of liblaus - //---------------------------------------------------------------------- - -+#include "config.h" - #include - #include - #include -diff -urp amtu-1.0.orig/src/iodisktest.c amtu-1.0/src/iodisktest.c ---- amtu-1.0.orig/src/iodisktest.c 2005-03-17 13:49:29.000000000 -0500 -+++ amtu-1.0/src/iodisktest.c 2005-06-08 16:52:28.261300992 -0400 -@@ -53,6 +53,7 @@ - //03/15/05 D.Velarde Added AUDIT_LOG statements to be used if we're - // using libaudit instead of liblaus - //---------------------------------------------------------------------- -+#include "config.h" - #include - #include - #include -diff -urp amtu-1.0.orig/src/memory.c amtu-1.0/src/memory.c ---- amtu-1.0.orig/src/memory.c 2005-03-17 13:49:41.000000000 -0500 -+++ amtu-1.0/src/memory.c 2005-06-08 16:52:48.022296864 -0400 -@@ -46,6 +46,7 @@ - // using libaudit instead of liblaus - // - //---------------------------------------------------------------------- -+#include "config.h" - #include - #include - #include -diff -urp amtu-1.0.orig/src/memsep.c amtu-1.0/src/memsep.c ---- amtu-1.0.orig/src/memsep.c 2005-03-17 17:27:49.000000000 -0500 -+++ amtu-1.0/src/memsep.c 2005-06-08 16:53:01.955178744 -0400 -@@ -52,6 +52,7 @@ - // don't switch to user nobody if running on RHEL4 - // - //---------------------------------------------------------------------- -+#include "config.h" - #include - #include - #include -diff -urp amtu-1.0.orig/src/networkio.c amtu-1.0/src/networkio.c ---- amtu-1.0.orig/src/networkio.c 2005-03-17 13:50:08.000000000 -0500 -+++ amtu-1.0/src/networkio.c 2005-06-08 16:53:21.894147560 -0400 -@@ -28,6 +28,7 @@ - // - // ----------------------------------------------------------------- - -+#include "config.h" - #include - #include - #include diff --git a/amtu-ia64.patch b/amtu-ia64.patch deleted file mode 100644 index 0d5319a..0000000 --- a/amtu-ia64.patch +++ /dev/null @@ -1,245 +0,0 @@ -diff -urN amtu-1.0.orig/config.h.in amtu-0.2/config.h.in ---- amtu-1.0.orig/config.h.in 2005-05-27 17:15:17.048941192 -0400 -+++ amtu-1.0/config.h.in 2005-05-27 17:16:12.582498808 -0400 -@@ -15,3 +15,5 @@ - /* NULL */ - #undef HAVE_S390 - -+/* NULL */ -+#undef HAVE_IA64 -diff -urN amtu-1.0.orig/configure.in amtu-0.2/configure.in ---- amtu-1.0.orig/configure.in 2005-05-27 17:15:17.048941192 -0400 -+++ amtu-1.0/configure.in 2005-05-27 17:15:37.431842520 -0400 -@@ -20,6 +20,7 @@ - powerpc64-*) AC_DEFINE(HAVE_PPC64,1,NULL);; - x86_64-*) AC_DEFINE(HAVE_X86_64,1,NULL);; - s390-* | s390x-*) AC_DEFINE(HAVE_S390,1,NULL);; -+ia64-*) AC_DEFINE(HAVE_IA64,1,NULL);; - esac - AC_CHECK_LIB(laus, laus_open) - AC_CHECK_LIB(audit, audit_open) -diff -urN amtu-1.0.orig/configure.in.orig amtu-0.2/configure.in.orig ---- amtu-1.0.orig/configure.in.orig 1969-12-31 19:00:00.000000000 -0500 -+++ amtu-1.0/configure.in.orig 2005-05-27 17:11:50.436351080 -0400 -@@ -0,0 +1,26 @@ -+AC_REVISION($Revision: 1.3 $)dnl -+# AC_CANONICAL_SYSTEM is deprecated in the latest version of AUTOMAKE. -+# We aren't using the latest version so we'll keep using it -+#AC_CANONICAL_TARGET -+AC_INIT(src/amtu.c) -+AC_PREREQ(2.12)dnl -+AC_CONFIG_AUX_DIR(config) -+AC_CONFIG_SRCDIR(src/amtu.c) -+AM_CONFIG_HEADER(config.h) -+ -+VERSION=0.2 -+echo Configuring amtu $VERSION -+ -+AC_CANONICAL_SYSTEM -+AM_INIT_AUTOMAKE(amtu, $VERSION) -+AC_PROG_CC -+case "$target" in -+i386-* | i486-* | i586-* | i686-*) AC_DEFINE(HAVE_I86,1,NULL);; -+powerpc-*) AC_DEFINE(HAVE_PPC,1,NULL);; -+powerpc64-*) AC_DEFINE(HAVE_PPC64,1,NULL);; -+x86_64-*) AC_DEFINE(HAVE_X86_64,1,NULL);; -+s390-* | s390x-*) AC_DEFINE(HAVE_S390,1,NULL);; -+esac -+AC_CHECK_LIB(laus, laus_open) -+AC_CHECK_LIB(audit, audit_open) -+AC_OUTPUT(Makefile src/Makefile doc/Makefile) -diff -urN amtu-1.0.orig/src/amtu-ia64.c amtu-0.2/src/amtu-ia64.c ---- amtu-1.0.orig/src/amtu-ia64.c 1969-12-31 19:00:00.000000000 -0500 -+++ amtu-1.0/src/amtu-ia64.c 2005-05-27 17:15:37.432842368 -0400 -@@ -0,0 +1,182 @@ -+//---------------------------------------------------------------------- -+// -+// Module Name: amtu-ia64.c -+// -+// Include File: none -+// -+// Description: Code for Abstract Machine Test i386 Privilege test. -+// -+// Notes: This module performs the machine specific privilege tests -+// to ensure that the underlying hardware is still enforcing -+// the appropriate control mechanisms. -+// ----------------------------------------------------------------- -+// LANGUAGE: C -+// -+// (C) Copyright International Businesses Machine Corp. 2003 -+// Licensed under the Common Public License v. 1.0 -+// ----------------------------------------------------------------- -+// -+// Change Activity: -+// DATE PGMR COMMENTS -+// -------- --------- ---------------------- -+// 2/05/03 J.Young Add new X86-64 instructions -+// 7/20/03 EJR Added prolog, comments -+// 8/19/03 EJR Version # on CPL + comment stanzas for functions -+// 8/25/03 K.Simon Added NO_TAG to AUDIT_LOG -+// 8/26/03 K.Simon Added printf to display test name -+// 10/17/03 K.Simon Removed NO_TAG -+// 7/15/04 mra Converted file to be ia64 specific -+// 5/27/05 S. Grubb Update to use libaudit -+//---------------------------------------------------------------------- -+ -+#include "config.h" -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include "amtu.h" -+ -+#if defined(HAVE_IA64) -+#ifdef HAVE_LIBLAUS -+#define AUDIT_LOG LAUS_LOG -+#endif -+ -+/************************************************************************/ -+/* */ -+/* FUNCTION: catchfault */ -+/* */ -+/* PURPOSE: Signal handler to catch the segmentation violation which is */ -+/* expected when trying to execute privileged instructions */ -+/* without privilege. */ -+/* */ -+/************************************************************************/ -+void catchfault(int sig) -+{ -+ if (debug) { -+ printf("caught the fault %d\n", sig); -+ } -+ exit(0); -+} -+ -+ -+/************************************************************************/ -+/* */ -+/* FUNCTION: amtu_priv */ -+/* */ -+/* PURPOSE: Execute privileged instructions to ensure that they cannot */ -+/* legitimately be run in user mode. */ -+/* */ -+/************************************************************************/ -+int amtu_priv(int argc, char *argv[]) -+{ -+ struct sigaction sig; -+ pid_t pid, wpid; -+ int stat; -+ -+ printf("Executing Supervisor Mode Instructions Test...\n"); -+ -+ /* Set up signal handler */ -+ sig.sa_handler = catchfault; -+ sig.sa_flags = 0; -+ sigemptyset(&sig.sa_mask); -+ sigaction(SIGSEGV, &sig, NULL); -+ sigaction(SIGILL, &sig, NULL); -+ sigaction(SIGIOT, &sig, NULL); -+ sigaction(SIGIO, &sig, NULL); -+ sigaction(SIGINT, &sig, NULL); -+ sigaction(SIGABRT, &sig, NULL); -+ sigaction(SIGTERM, &sig, NULL); -+ sigaction(SIGQUIT, &sig, NULL); -+ sigaction(SIGBUS, &sig, NULL); -+ -+ /* Each assembly directive should seg fault since they are */ -+ /* privileged instructions. */ -+ -+ -+ /*---------------------------------------------------------*/ -+ /* Test One */ -+ /*---------------------------------------------------------*/ -+ -+ pid = fork(); -+ if (pid == 0) { -+ if (debug) { -+ printf("RSM test: "); -+ } -+ asm volatile ("RSM 1"); -+ exit(-1); -+ } else if (pid == -1) { -+ /* error condition */ -+ fprintf(stderr, "Privilege Separation Test FAILED (RSM)!\n"); -+ AUDIT_LOG(("amtu failed privilege separation on RSM")) -+ exit(-1); -+ } -+ /* parent */ -+ wpid = wait(&stat); -+ if (!(WIFEXITED(stat) && (WEXITSTATUS(stat) == 0))) { -+ fprintf(stderr, "Privilege Separation Test FAILED on RSM!\n"); -+ AUDIT_LOG(("amtu failed privilege separation on RSM")) -+ return(-1); -+ } -+ -+ -+ /*---------------------------------------------------------*/ -+ /* Test Two */ -+ /*---------------------------------------------------------*/ -+ -+ pid = fork(); -+ if (pid == 0) { -+ if (debug) { -+ printf("SSM test: "); -+ } -+ asm volatile ("SSM 0"); -+ exit(-1); -+ } else if (pid == -1) { -+ /* error condition */ -+ fprintf(stderr, "Privilege Separation Test FAILED (SSM)!\n"); -+ AUDIT_LOG(("amtu failed privilege separation on SSM")) -+ exit(-1); -+ } -+ /* parent */ -+ wpid = wait(&stat); -+ if (!(WIFEXITED(stat) && (WEXITSTATUS(stat) == 0))) { -+ fprintf(stderr, "Privilege Separation Test FAILED on SSM!\n"); -+ AUDIT_LOG(("amtu failed privilege separation on SSM")) -+ return(-1); -+ } -+ -+ /*---------------------------------------------------------*/ -+ /* Test Three */ -+ /*---------------------------------------------------------*/ -+ -+ pid = fork(); -+ if (pid == 0) { -+ if (debug) { -+ printf("RFI test: "); -+ } -+ asm volatile ("RFI"); -+ exit(-1); -+ } else if (pid == -1) { -+ /* error condition */ -+ fprintf(stderr, "Privilege Separation Test FAILED (RFI)!\n"); -+ AUDIT_LOG(("amtu failed privilege separation on RFI")) -+ exit(-1); -+ } -+ /* parent */ -+ wpid = wait(&stat); -+ if (!(WIFEXITED(stat) && (WEXITSTATUS(stat) == 0))) { -+ fprintf(stderr, "Privilege Separation Test FAILED on RFI!\n"); -+ AUDIT_LOG(("amtu failed privilege separation on RFI")) -+ return(-1); -+ } -+ -+ AUDIT_LOG(("amtu - Privileged Instruction Test succeeded")) -+ printf("Privileged Instruction Test SUCCESS!\n"); -+ return(0); -+} -+#endif -diff -urN amtu-1.0.orig/src/Makefile.am amtu-0.2/src/Makefile.am ---- amtu-1.0.orig/src/Makefile.am 2005-05-27 17:15:17.056939976 -0400 -+++ amtu-1.0/src/Makefile.am 2005-05-27 17:15:37.432842368 -0400 -@@ -1,3 +1,3 @@ --AM_CPPFLAGS = -Wall -+AM_CPPFLAGS = -Wall -W -Wfloat-equal -Wundef - bin_PROGRAMS = amtu --amtu_SOURCES = amtu-i86.c amtu-ppc.c amtu-s390.c amtu.c memory.c memsep.c iodisktest.c networkio.c -+amtu_SOURCES = amtu-i86.c amtu-ppc.c amtu-s390.c amtu-ia64.c amtu.c memory.c memsep.c iodisktest.c networkio.c diff --git a/amtu-memsep.patch b/amtu-memsep.patch deleted file mode 100644 index 03e485d..0000000 --- a/amtu-memsep.patch +++ /dev/null @@ -1,68 +0,0 @@ ---- amtu/src/memsep.c.orig 2004-08-18 11:18:42.000000000 -0400 -+++ amtu/src/memsep.c 2004-08-18 11:19:18.000000000 -0400 -@@ -165,8 +165,6 @@ - /************************************************************************/ - int memsep(int argc, char *argv[]) - { -- struct passwd *pwd; -- uid_t id; - FILE *fp; - char line[200]; - char flags[10]; -@@ -175,29 +173,6 @@ - - printf("Executing Memory Separation Test...\n"); - -- // First, get the UID of the unprivileged user nobody. -- pwd = getpwnam("nobody"); -- -- if (pwd == NULL) { // Error -- fprintf(stderr, "Could not obtain info for user nobody"); -- LAUS_LOG(("amtu memory separation test: could not" -- " obtain info for user nobody")) -- return -1; -- } -- else { -- id = pwd->pw_uid; -- } -- -- // Now set the effective UID to the unprivileged user nobody. -- if (debug) { -- fprintf(stderr, "Setting effective UID of user nobody to:" -- " %d\n", id); -- } -- seteuid(id); -- if (debug) { -- fprintf(stderr, "Effective UID is now: %d\n", geteuid()); -- } -- - // Check that reading and writing to memory addresses is not allowed. - fp = fopen("/proc/self/maps", "r"); - if (fp == NULL) { -@@ -258,25 +233,6 @@ - last_end = end; - } - -- // Reset the UID to root. -- pwd = getpwnam("root"); -- -- if (pwd == NULL) { // Error -- fprintf(stderr, "Could not reset UID to root"); -- LAUS_LOG(("amtu memory separation test: could not" -- " reset UID to root")) -- return -1; -- } -- else { -- id = pwd->pw_uid; -- } -- -- seteuid(id); -- if (debug) { -- fprintf(stderr, "Reset Effective UID to root: %d\n", -- geteuid()); -- } -- - fprintf(stderr, "Memory Separation Test SUCCESS!\n"); - LAUS_LOG(("amtu - Memory Separation Test succeeded")) - return 0; - diff --git a/amtu.spec b/amtu.spec deleted file mode 100644 index 1e5c72b..0000000 --- a/amtu.spec +++ /dev/null @@ -1,101 +0,0 @@ -Summary: Abstract Machine Test Utility (AMTU) -Name: amtu -Version: 1.0.4 -Release: 2.2 -License: Common Public License -Group: System Environment/Base -Source0: %{name}-%{version}.tar.gz -BuildRoot: %{_tmppath}/%{name}-%{version}-root -BuildRequires: audit-libs-devel >= 1.1.2 -Requires: audit >= 1.1.2 - -# Red Hat AMTU SPEC file - -%description -Abstract Machine Test Utility (AMTU) is an administrative utility to check -whether the underlying protection mechanism of the hardware are still being -enforced. This is a requirement of the Controlled Access Protection Profile -FPT_AMT.1, see -http://www.radium.ncsc.mil/tpep/library/protection_profiles/CAPP-1.d.pdf - -%prep -%setup - -%build -# Determine appropriate compiler -CC="gcc" -%ifarch ppc64 ppc64iseries ppc64pseries - CC="/usr/bin/ppc64-redhat-linux-gcc" -%endif -# Determine appropriate compiler flags -CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -Wall -pipe" -%ifarch x86_64 - CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -Wall -pipe -m64" -%endif -export CC CFLAGS -# next 3 items is to quieten autoreconf -touch ChangeLog -touch NEWS -touch AUTHORS -autoreconf -fv --install -./configure --prefix=/usr --bindir=%{_bindir} --mandir=%{_mandir} -make - -%install -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/%{_bindir} -install -m 0750 src/amtu $RPM_BUILD_ROOT/%{_bindir} -mv doc/AMTUHowTo.txt . - -mkdir -p $RPM_BUILD_ROOT/%{_mandir}/man8/ -install -m 644 doc/amtu.8 $RPM_BUILD_ROOT/%{_mandir}/man8/amtu.8 - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -%defattr(-,root,root) -%doc AMTUHowTo.txt COPYING -%attr(0750,root,root) %{_bindir}/amtu -%attr(0644,root,root) %{_mandir}/man8/* - -%changelog -* Fri Feb 10 2006 Jesse Keating - 1.0.4-2.2 -- bump again for double-long bug on ppc(64) - -* Tue Feb 07 2006 Jesse Keating - 1.0.4-2.1 -- rebuilt for new gcc4.1 snapshot and glibc changes - -* Tue Jan 3 2006 Jesse Keating 1.0.4-2 -- rebuilt - -* Fri Dec 9 2005 Steve Grubb 1.0.4-1 -- New upstream version updated for new audit messages -* Mon Dec 5 2005 Steve Grubb 1.0.2-2 -- Fix %clean section of spec file (bz 172942) -- Add memsep-random patch (bz 174767) -* Thu Jul 14 2005 Steve Grubb 1.0.2-1 -- New upstream version. -* Tue Jul 12 2005 Steve Grubb 1.0.1-1 -- New version fixes bug where audit system was disable at end of test. -* Wed Jun 8 2005 Steve Grubb 1.0-2 -- add a few more include "config.h" -* Fri May 27 2005 Steve Grubb 1.0-1 -- New upstream version from IBM -- Drop memsep patch -- Rework specfile -* Thu Sep 2 2004 root 0.1-7RHEL -- integrate memsep patch from Matt Anderson at HP -* Mon Aug 16 2004 root 0.1-6RHEL -- Integrate ia64 patches from HP's Matt Anderson, enabling use on ia64 -* Tue Jun 29 2004 root 0.1-4RHEL -- fix /usr/bin/amtu modes for real this time -* Tue Jun 29 2004 root 0.1-4RHEL -- set execute bits on /usr/bin/amtu -* Fri May 28 2004 ccb 0.1-3RHEL -- fixed owners and permissions in %files -* Wed May 26 2004 ccb 0.1-2RHEL -- move docs to a version-qualified directory name -* Sat May 1 2004 root -- Initial build. - diff --git a/dead.package b/dead.package new file mode 100644 index 0000000..b18e62c --- /dev/null +++ b/dead.package @@ -0,0 +1 @@ +AMTU was needed for Common Criteria testing. No PP has needed it in about 5 years. Upstream for the package is also dead. diff --git a/sources b/sources deleted file mode 100644 index 56f7d11..0000000 --- a/sources +++ /dev/null @@ -1 +0,0 @@ -a0428e19bb0baf3ce597edd723df5d07 amtu-1.0.4.tar.gz