Description: Fix for not allowing a malicious cpio file to extract to an arbitrary directory. Origin: http://lwn.net/Articles/143418/ http://www.xs4all.nl/~hanb/software/crux/han/cpio/cpio.patch Upstream status: Unknown (2005-07-21) diff -Nru cpio-2.6/configure.ac cpio-2.6-new/configure.ac --- cpio-2.6/configure.ac 2004-12-20 11:46:30.000000000 +0100 +++ cpio-2.6-new/configure.ac 2005-07-21 16:07:42.000000000 +0200 @@ -95,7 +95,7 @@ AC_CHECK_FUNCS(lchown endpwent endgrent) AC_FUNC_VPRINTF AC_FUNC_ALLOCA -AC_CHECK_LIB(nsl, gethostname, [LIBS="$LIBS -lnsl"]) +dnl AC_CHECK_LIB(nsl, gethostname, [LIBS="$LIBS -lnsl"]) AC_CHECK_LIB(socket, setsockopt, [LIBS="$LIBS -lsocket"]) # Gettext. diff -Nru cpio-2.6/src/copyout.c cpio-2.6-new/src/copyout.c --- cpio-2.6/src/copyout.c 2004-10-14 11:14:03.000000000 +0200 +++ cpio-2.6-new/src/copyout.c 2005-07-21 16:07:42.000000000 +0200 @@ -305,7 +305,7 @@ else magic_string = "070701"; sprintf (ascii_header, - "%6s%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx", + "%6s%08lx%08lx%08lx%08lx%08lx%08x%08lx%08lx%08lx%08lx%08lx%08lx%08lx", magic_string, file_hdr->c_ino, file_hdr->c_mode, file_hdr->c_uid, file_hdr->c_gid, file_hdr->c_nlink, file_hdr->c_mtime, diff -Nru cpio-2.6/src/extern.h cpio-2.6-new/src/extern.h --- cpio-2.6/src/extern.h 2004-09-08 12:49:57.000000000 +0200 +++ cpio-2.6-new/src/extern.h 2005-07-21 16:07:42.000000000 +0200 @@ -91,6 +91,7 @@ extern char input_is_seekable; extern char output_is_seekable; extern char *program_name; +extern mode_t sys_umask; extern int (*xstat) (); extern void (*copy_function) (); diff -Nru cpio-2.6/src/global.c cpio-2.6-new/src/global.c --- cpio-2.6/src/global.c 2004-09-08 12:23:44.000000000 +0200 +++ cpio-2.6-new/src/global.c 2005-07-21 16:07:42.000000000 +0200 @@ -195,6 +195,9 @@ /* The name this program was run with. */ char *program_name; +/* Debian hack to make the -d option honor the umask. */ +mode_t sys_umask; + /* A pointer to either lstat or stat, depending on whether dereferencing of symlinks is done for input files. */ int (*xstat) (); diff -Nru cpio-2.6/src/main.c cpio-2.6-new/src/main.c --- cpio-2.6/src/main.c 2004-11-23 01:42:18.000000000 +0100 +++ cpio-2.6-new/src/main.c 2005-07-21 16:07:42.000000000 +0200 @@ -740,7 +740,6 @@ textdomain (PACKAGE); program_name = argv[0]; - umask (0); #ifdef __TURBOC__ _fmode = O_BINARY; /* Put stdin and stdout in binary mode. */ @@ -751,6 +750,7 @@ #endif process_args (argc, argv); + sys_umask = umask (0); initialize_buffers ();