diff options
-rw-r--r-- | debian/changelog | 28 | ||||
-rw-r--r-- | debian/control | 2 | ||||
-rw-r--r-- | debian/hurd.links | 1 | ||||
-rw-r--r-- | debian/hurd.postinst | 3 | ||||
-rw-r--r-- | debian/patches/MAKEDEV-apm.patch | 16 | ||||
-rw-r--r-- | debian/patches/console_ignore_bdf_err.patch | 3 | ||||
-rw-r--r-- | debian/patches/dl_origin.patch | 113 | ||||
-rw-r--r-- | debian/patches/exec_filename_fs.patch | 750 | ||||
-rw-r--r-- | debian/patches/external.patch | 55 | ||||
-rw-r--r-- | debian/patches/init_try_runsystem.gnu.patch | 19 | ||||
-rw-r--r-- | debian/patches/libexec.patch | 56 | ||||
-rw-r--r-- | debian/patches/makedev.diff | 2 | ||||
-rw-r--r-- | debian/patches/mount.patch | 4 | ||||
-rw-r--r-- | debian/patches/newRPC.patch | 19 | ||||
-rw-r--r-- | debian/patches/posix-sigcodes.patch | 14 | ||||
-rw-r--r-- | debian/patches/rc.patch | 91 | ||||
-rw-r--r-- | debian/patches/run.patch | 16 | ||||
-rw-r--r-- | debian/patches/series | 9 | ||||
-rw-r--r-- | debian/patches/startup-usr-support.patch | 4 | ||||
-rw-r--r-- | debian/patches/term-for-tcl.patch | 23 | ||||
-rw-r--r-- | debian/patches/tmp_exec_startup.patch | 14 |
21 files changed, 841 insertions, 401 deletions
diff --git a/debian/changelog b/debian/changelog index 720a7666..90d370fd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,29 @@ -hurd (1:0.6.git20150704-4) UNRELEASED; urgency=medium +hurd (1:0.7-1) unstable; urgency=medium + * New upstream release + + -- Samuel Thibault <sthibault@debian.org> Thu, 05 Nov 2015 00:20:12 +0000 + +hurd (1:0.6.git20151012-1) unstable; urgency=medium + + * New upstream snapshot. + * hurd.links: Add poweroff-hurd. + + -- Samuel Thibault <sthibault@debian.org> Mon, 12 Oct 2015 22:08:31 +0000 + +hurd (1:0.6.git20150922-1) unstable; urgency=medium + + * New upstream snapshot. + - libdde_netdev_tx_t.patch, libdde_pci-needs_freset.patch, + libdde_addr_list.patch, libdde_ucast_list.patch, libdde_addr_fix.patch, + libdde_group_addr.patch, libdde_rculist.patch, libdde_dma_head.patch, + libdde_mdio.patch, libdde_ethoc.patch, libdde_phy.patch, + libdde_pci_ids.h.patch, libdde_ethtool.patch, libdde_workqueue.patch, + libdde_trans_start.patch, libdde_devres.patch, libdde_pr_cont.patch, + libdde_rx_queue.patch, libdde_rcu.patch: Merged. + - fix-payload-pflocal.patch, fakeroot-access.patch, glibc_2.21.patch, + format: Merged. + - exec_filename_fs.patch: Refresh. * Upgrade to compat 9. * Add a noudeb build profile. * Add stage1 and stage2 build profiles for cross-bootstrapping hurd. @@ -7,7 +31,7 @@ hurd (1:0.6.git20150704-4) UNRELEASED; urgency=medium * Bump fakeroot-hurd priority so it becomes the default. * Fix build against glibc 2.21. - -- Samuel Thibault <sthibault@debian.org> Tue, 18 Aug 2015 10:50:47 +0000 + -- Samuel Thibault <sthibault@debian.org> Tue, 22 Sep 2015 19:06:22 +0000 hurd (1:0.6.git20150704-3) unstable; urgency=medium diff --git a/debian/control b/debian/control index fc3f9ebf..cb19a06f 100644 --- a/debian/control +++ b/debian/control @@ -5,7 +5,7 @@ Maintainer: GNU Hurd Maintainers <debian-hurd@lists.debian.org> Standards-Version: 3.9.6 Build-Depends: mig (>= 1.4-3~) <!stage1 !stage2>, gnumach-dev (>= 1.4+git20141109~) <!stage1 !stage2>, libc0.3-dev (>= 2.17-94~) <!stage1>, texinfo, libncursesw5-dev <!stage1 !stage2>, - debhelper (>= 9), dh-exec (>= 0.15), autoconf, dh-autoreconf, + debhelper (>= 9), dh-exec (>= 0.17), autoconf, dh-autoreconf, libparted-dev <!stage1 !stage2>, libpciaccess-dev <!stage1 !stage2>, libx11-dev <!stage1 !stage2>, x11proto-core-dev <!stage1 !stage2>, pkg-config <!stage1 !stage2>, xkb-data <!stage1 !stage2>, gawk, flex, bison, autotools-dev, libdaemon-dev <!stage1 !stage2>, libpcap0.8-dev <!stage1 !stage2>, zlib1g-dev <!stage1 !stage2>, libbz2-dev <!stage1 !stage2>, uuid-dev <!stage1 !stage2>, libblkid-dev <!stage1 !stage2> diff --git a/debian/hurd.links b/debian/hurd.links index d1481a66..251c92ff 100644 --- a/debian/hurd.links +++ b/debian/hurd.links @@ -1 +1,2 @@ /usr/src/unifont.bdf /usr/share/hurd/vga-system.bdf +/sbin/halt-hurd /sbin/poweroff-hurd diff --git a/debian/hurd.postinst b/debian/hurd.postinst index 081c039b..da7d26a4 100644 --- a/debian/hurd.postinst +++ b/debian/hurd.postinst @@ -10,7 +10,8 @@ fi update-alternatives --quiet \ --install /etc/hurd/runsystem runsystem /etc/hurd/runsystem.gnu 5 \ --slave /sbin/halt halt /sbin/halt-hurd \ - --slave /sbin/reboot reboot /sbin/reboot-hurd + --slave /sbin/reboot reboot /sbin/reboot-hurd \ + --slave /sbin/poweroff poweroff /sbin/poweroff-hurd update-alternatives \ --install /usr/bin/fakeroot fakeroot /usr/bin/fakeroot-hurd 60 diff --git a/debian/patches/MAKEDEV-apm.patch b/debian/patches/MAKEDEV-apm.patch new file mode 100644 index 00000000..eb539129 --- /dev/null +++ b/debian/patches/MAKEDEV-apm.patch @@ -0,0 +1,16 @@ +Workaround invocations from installation of power-management packages. + +Index: hurd-debian/sutils/MAKEDEV.sh +=================================================================== +--- hurd-debian.orig/sutils/MAKEDEV.sh ++++ hurd-debian/sutils/MAKEDEV.sh +@@ -223,6 +223,9 @@ mkdev() { + st $I root 640 /hurd/null + ;; + ++ apm) ++ ;; ++ + *) + lose "$I: Unknown device name" + ;; diff --git a/debian/patches/console_ignore_bdf_err.patch b/debian/patches/console_ignore_bdf_err.patch index c3ea30cb..ac6e6a53 100644 --- a/debian/patches/console_ignore_bdf_err.patch +++ b/debian/patches/console_ignore_bdf_err.patch @@ -1,4 +1,5 @@ -reduce-font overestimates the number of characters in the font. +reduce-font overestimates the number of characters in the font. This should be +fixed there, not here. diff --git a/console-client/bdf.c b/console-client/bdf.c index 30501f4..ee8aa30 100644 diff --git a/debian/patches/dl_origin.patch b/debian/patches/dl_origin.patch new file mode 100644 index 00000000..e1750dfb --- /dev/null +++ b/debian/patches/dl_origin.patch @@ -0,0 +1,113 @@ +Add basic support for $ORIGIN rpath expansion + +This only supports absolute paths, which is enough for ghc, but won't be enough +for other uses. Perhaps it would be better to support it in glibc instead? + +Index: hurd-debian/exec/exec.c +=================================================================== +--- hurd-debian.orig/exec/exec.c ++++ hurd-debian/exec/exec.c +@@ -890,7 +890,7 @@ do_exec (file_t file, + secure = (flags & EXEC_SECURE); + defaults = (flags & EXEC_DEFAULTS); + +- /* Now record the big blocks of data we shuffle around unchanged. ++ /* Now record the big blocks of data we shuffle around. + Whatever arrived inline, we must allocate space for so it can + survive after this RPC returns. */ + +@@ -901,11 +901,91 @@ do_exec (file_t file, + goto stdout; + boot->argv = argv; + boot->argvlen = argvlen; +- envp = servercopy (envp, envplen, envp_copy, &e.error); +- if (e.error) +- goto stdout; ++ ++ if (filename && filename[0] == '/') ++ { ++ /* Explicit absolute filename, put its dirname in the LD_ORIGIN_PATH ++ environment variable for $ORIGIN rpath expansion. ++ XXX: thus does not work with relative paths. */ ++ const char *end = strrchr (filename, '/'); ++ size_t pathlen; ++ const char ld_origin_s[] = "\0LD_ORIGIN_PATH="; ++ const char *existing; ++ size_t existing_len = 0; ++ size_t new_envplen; ++ char *new_envp; ++ ++ /* Drop trailing slashes. */ ++ while (end > filename && end[-1] == '/') ++ end--; ++ ++ if (end == filename) ++ /* Root, keep explicit heading/trailing slash. */ ++ end++; ++ ++ pathlen = end - filename; ++ ++ if (memcmp (envp, ld_origin_s + 1, sizeof (ld_origin_s) - 2) == 0) ++ /* Existing variable at the beginning of envp. */ ++ existing = envp - 1; ++ else ++ /* Look for the definition. */ ++ existing = memmem (envp, envplen, ld_origin_s, sizeof (ld_origin_s) - 1); ++ ++ if (existing) ++ { ++ /* Definition already exists, just replace the content. */ ++ existing += sizeof (ld_origin_s) - 1; ++ existing_len = strnlen (existing, envplen - (existing - envp)); ++ ++ /* Allocate room for the new content. */ ++ new_envplen = envplen - existing_len + pathlen; ++ new_envp = mmap (0, new_envplen, ++ PROT_READ|PROT_WRITE, MAP_ANON, 0, 0); ++ if (new_envp == MAP_FAILED) ++ { ++ e.error = errno; ++ goto stdout; ++ } ++ ++ /* And copy. */ ++ memcpy (new_envp, envp, existing - envp); ++ memcpy (new_envp + (existing - envp), filename, pathlen); ++ memcpy (new_envp + (existing - envp) + pathlen, ++ existing + existing_len, ++ envplen - ((existing - envp) + existing_len)); ++ } ++ else ++ { ++ /* No existing definition, prepend one. */ ++ new_envplen = sizeof (ld_origin_s) - 1 + pathlen + envplen; ++ new_envp = mmap (0, new_envplen, ++ PROT_READ|PROT_WRITE, MAP_ANON, 0, 0); ++ ++ memcpy (new_envp, ld_origin_s + 1, sizeof (ld_origin_s) - 2); ++ memcpy (new_envp + sizeof (ld_origin_s) - 2, filename, pathlen); ++ new_envp [sizeof (ld_origin_s) - 2 + pathlen] = 0; ++ memcpy (new_envp + sizeof (ld_origin_s) - 2 + pathlen + 1, envp, envplen); ++ } ++ ++ if (! envp_copy) ++ /* Deallocate original environment */ ++ munmap (envp, envplen); ++ ++ envp = new_envp; ++ envplen = new_envplen; ++ } ++ else ++ { ++ /* No explicit filename, just copy the existing environment */ ++ envp = servercopy (envp, envplen, envp_copy, &e.error); ++ if (e.error) ++ goto stdout; ++ } ++ + boot->envp = envp; + boot->envplen = envplen; ++ + dtable = servercopy (dtable, dtablesize * sizeof (mach_port_t), + dtable_copy, &e.error); + if (e.error) diff --git a/debian/patches/exec_filename_fs.patch b/debian/patches/exec_filename_fs.patch index b8146f38..28afb2bc 100644 --- a/debian/patches/exec_filename_fs.patch +++ b/debian/patches/exec_filename_fs.patch @@ -1,8 +1,34 @@ -diff --git a/TODO b/TODO -index de2a199..9fdb86f 100644 ---- a/TODO -+++ b/TODO -@@ -131,7 +131,7 @@ See `tasks', the exported task list. +From ba528e4a9db131112aa09edfdbb3449b55618578 Mon Sep 17 00:00:00 2001 +From: Emilio Pozuelo Monfort <pochu27@gmail.com> +Date: Wed, 26 May 2010 01:27:40 +0200 +Subject: [PATCH 2/3] Add a file_exec_file_name RPC + +* hurd/fs.defs (file_exec): Deprecate in favor of... +(file_exec_file_name): ...this new RPC. +Change all implementations and forward old implementations to +the new version. Change all callers but fallback to old version. +Change comments and documentation. +--- + TODO | 2 +- + doc/hurd.texi | 16 ++++---- + exec/hashexec.c | 32 ++++++++++---- + hurd/fs.defs | 28 +++++++++++-- + hurd/hurd_types.h | 9 ++-- + startup/startup.c | 81 ++++++++++++++++++++++++++---------- + libdiskfs/boot-start.c | 2 +- + libdiskfs/file-exec.c | 75 ++++++++++++++++++++++++++++------ + libfshelp/start-translator-long.c | 21 +++++++--- + libnetfs/file-exec.c | 67 ++++++++++++++++++++++++++---- + libtrivfs/file-exec.c | 27 ++++++++++++- + trans/fakeroot.c | 59 ++++++++++++++++++++++++--- + utils/login.c | 23 +++++++--- + 13 files changed, 350 insertions(+), 92 deletions(-) + +Index: hurd-debian/TODO +=================================================================== +--- hurd-debian.orig/TODO ++++ hurd-debian/TODO +@@ -133,7 +133,7 @@ See `tasks', the exported task list. ** libtrivfs *** Allow for read/write/exec to be passed down. @@ -11,24 +37,56 @@ index de2a199..9fdb86f 100644 *** Provide for the visible owner, etc., to be held in command-line args instead of the underlying node, when it's important. !! -diff --git a/configure.ac b/configure.ac -index b03057b..b3abe1a 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -162,6 +162,8 @@ else - VERSIONING=no - fi - AC_SUBST(VERSIONING) -+# Check if libc contains these functions. -+AC_CHECK_FUNCS(file_exec_file_name exec_exec_file_name) +Index: hurd-debian/doc/hurd.texi +=================================================================== +--- hurd-debian.orig/doc/hurd.texi ++++ hurd-debian/doc/hurd.texi +@@ -2737,10 +2737,10 @@ write the file. + @node Program Execution + @subsection Program Execution +-@findex file_exec ++@findex file_exec_file_name + Execution of programs on the Hurd is done through fileservers with the +-@code{file_exec} RPC. The fileserver is expected to verify that the +-user is allowed to execute the file, make whatever modifications to the ++@code{file_exec_file_name} RPC. The fileserver is expected to verify that ++the user is allowed to execute the file, make whatever modifications to the + ports are necessary for setuid execution, and then invoke the standard + execserver found on @file{/servers/exec}. - # From glibc HEAD, 2007-11-07. -diff --git a/exec/hashexec.c b/exec/hashexec.c -index e53d2ee..36fcfb7 100644 ---- a/exec/hashexec.c -+++ b/exec/hashexec.c -@@ -23,6 +23,9 @@ +@@ -2752,13 +2752,13 @@ The file must be opened for execution; i + be returned. In addition, at least one of the execute bits must be on. A + failure of this check should result in @code{EACCES}---not + @code{ENOEXEC}. It is not proper for the fileserver ever to respond to +-the @code{file_exec} RPC with @code{ENOEXEC}. ++the @code{file_exec_file_name} RPC with @code{ENOEXEC}. + + If either the setuid or setgid bits are set, the server needs to + construct a new authentication handle with the additional new ID's. +-Then all the ports passed to @code{file_exec} need to be reauthenticated +-with the new handle. If the fileserver is unable to make the new +-authentication handle (for example, because it is not running as root) ++Then all the ports passed to @code{file_exec_file_name} need to be ++reauthenticated with the new handle. If the fileserver is unable to make the ++new authentication handle (for example, because it is not running as root) + it is not acceptable to return an error; in such a case the server + should simply silently fail to implement the setuid/setgid semantics. + +@@ -2773,7 +2773,7 @@ will not share any file pointers with th + opened with @code{O_READ}. Finally, all the information (mutated + appropriately for setuid/setgid) should be sent to the execserver with + @code{exec_exec_file_name}. Whatever error code @code{exec_exec_file_name} +-returns should be returned to the caller of @code{file_exec}. ++returns should be returned to the caller of @code{file_exec_file_name}. + + @node File Locking + @subsection File Locking +Index: hurd-debian/exec/hashexec.c +=================================================================== +--- hurd-debian.orig/exec/hashexec.c ++++ hurd-debian/exec/hashexec.c +@@ -24,6 +24,9 @@ the Free Software Foundation, 675 Mass A #include <unistd.h> #include <envz.h> #include <sys/param.h> @@ -38,7 +96,7 @@ index e53d2ee..36fcfb7 100644 /* This is called to check E for a #! interpreter specification. E has already been prepared (successfully) and checked (unsuccessfully). If -@@ -415,16 +418,32 @@ check_hashbang (struct execdata *e, +@@ -421,16 +424,32 @@ check_hashbang (struct execdata *e, /* We cannot open the interpreter file to execute it. Lose! */ return; @@ -80,10 +138,10 @@ index e53d2ee..36fcfb7 100644 mach_port_deallocate (mach_task_self (), interp_file); munmap (new_argv, new_argvlen); -diff --git a/hurd/fs.defs b/hurd/fs.defs -index a4a48cc..1322237 100644 ---- a/hurd/fs.defs -+++ b/hurd/fs.defs +Index: hurd-debian/hurd/fs.defs +=================================================================== +--- hurd-debian.orig/hurd/fs.defs ++++ hurd-debian/hurd/fs.defs @@ -1,5 +1,6 @@ /* Definitions for the filesystem interface. - Copyright (C) 1994,95,96,97,98,99,2002 Free Software Foundation, Inc. @@ -113,10 +171,10 @@ index a4a48cc..1322237 100644 written directly. */ routine file_check_access ( file: file_t; -diff --git a/hurd/hurd_types.h b/hurd/hurd_types.h -index 4341177..83942a7 100644 ---- a/hurd/hurd_types.h -+++ b/hurd/hurd_types.h +Index: hurd-debian/hurd/hurd_types.h +=================================================================== +--- hurd-debian.orig/hurd/hurd_types.h ++++ hurd-debian/hurd/hurd_types.h @@ -1,5 +1,6 @@ /* C declarations for Hurd server interfaces - Copyright (C) 1993,94,95,96,98,99,2001,02 Free Software Foundation, Inc. @@ -152,32 +210,140 @@ index 4341177..83942a7 100644 enum { INIT_UMASK, -diff --git a/libdiskfs/Makefile b/libdiskfs/Makefile -index 47b9339..6646dbe 100644 ---- a/libdiskfs/Makefile -+++ b/libdiskfs/Makefile -@@ -56,7 +56,7 @@ OTHERSRCS = conch-fetch.c conch-set.c dir-clear.c dir-init.c dir-renamed.c \ - SRCS = $(OTHERSRCS) $(FSSRCS) $(IOSRCS) $(FSYSSRCS) $(IFSOCKSRCS) - installhdrs = diskfs.h diskfs-pager.h +Index: hurd-debian/startup/startup.c +=================================================================== +--- hurd-debian.orig/startup/startup.c ++++ hurd-debian/startup/startup.c +@@ -1,7 +1,7 @@ + /* Start and maintain hurd core servers and system run state --MIGSTUBS = fsServer.o ioServer.o fsysServer.o exec_startupServer.o \ -+MIGSTUBS = fsServer.o fs_experimentalServer.o ioServer.o fsysServer.o exec_startupServer.o \ - fsys_replyUser.o fs_notifyUser.o ifsockServer.o \ - startup_notifyServer.o - OBJS = $(sort $(SRCS:.c=.o) $(MIGSTUBS)) -@@ -66,6 +66,7 @@ LDLIBS += -lpthread + Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +- 2005, 2008, 2013 Free Software Foundation, Inc. ++ 2005, 2008, 2010, 2013 Free Software Foundation, Inc. + This file is part of the GNU Hurd. - fsys-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h -DREPLY_PORTS - fs-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h -+fs_experimental-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h - io-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h - ifsock-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h - exec_startup-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h -diff --git a/libdiskfs/boot-start.c b/libdiskfs/boot-start.c -index d10d783..d80a4ca 100644 ---- a/libdiskfs/boot-start.c -+++ b/libdiskfs/boot-start.c -@@ -198,7 +198,7 @@ diskfs_start_bootstrap () + The GNU Hurd is free software; you can redistribute it and/or modify +@@ -24,6 +24,9 @@ + one file. */ + #include <hurd.h> + #include <hurd/fs.h> ++#ifdef HAVE_FILE_EXEC_FILE_NAME ++#include <hurd/fs_experimental.h> ++#endif + #include <hurd/fsys.h> + #include <device/device.h> + #include <stdio.h> +@@ -376,13 +379,28 @@ run (const char *server, mach_port_t *po + printf ("Pausing for %s\n", prog); + getchar (); + } +- err = file_exec (file, *task, 0, +- (char *)prog, strlen (prog) + 1, /* Args. */ +- startup_envz, startup_envz_len, +- default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, +- ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX, +- default_ints, INIT_INT_MAX, +- NULL, 0, NULL, 0); ++#ifdef HAVE_FILE_EXEC_FILE_NAME ++ err = file_exec_file_name (file, *task, 0, (char *)prog, ++ (char *)prog, ++ strlen (prog) + 1, /* Args. */ ++ startup_envz, startup_envz_len, ++ default_dtable, ++ MACH_MSG_TYPE_COPY_SEND, 3, ++ ports, MACH_MSG_TYPE_COPY_SEND, ++ INIT_PORT_MAX, ++ default_ints, INIT_INT_MAX, ++ NULL, 0, NULL, 0); ++ /* For backwards compatibility. Just drop it when we kill ++ file_exec. */ ++ if (err == MIG_BAD_ID) ++#endif ++ err = file_exec (file, *task, 0, ++ (char *)prog, strlen (prog) + 1, /* Args. */ ++ startup_envz, startup_envz_len, ++ default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, ++ ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX, ++ default_ints, INIT_INT_MAX, ++ NULL, 0, NULL, 0); + if (!err) + break; + +@@ -469,14 +487,27 @@ run_for_real (char *filename, char *args + ++progname; + else + progname = filename; +- err = file_exec (file, task, 0, +- args, arglen, +- startup_envz, startup_envz_len, +- default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, +- default_ports, MACH_MSG_TYPE_COPY_SEND, +- INIT_PORT_MAX, +- default_ints, INIT_INT_MAX, +- NULL, 0, NULL, 0); ++#ifdef HAVE_FILE_EXEC_FILE_NAME ++ err = file_exec_file_name (file, task, 0, filename, ++ args, arglen, ++ startup_envz, startup_envz_len, ++ default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, ++ default_ports, MACH_MSG_TYPE_COPY_SEND, ++ INIT_PORT_MAX, ++ default_ints, INIT_INT_MAX, ++ NULL, 0, NULL, 0); ++ /* For backwards compatibility. Just drop it when we kill file_exec. */ ++ if (err == MIG_BAD_ID) ++#endif ++ err = file_exec (file, task, 0, ++ args, arglen, ++ startup_envz, startup_envz_len, ++ default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, ++ default_ports, MACH_MSG_TYPE_COPY_SEND, ++ INIT_PORT_MAX, ++ default_ints, INIT_INT_MAX, ++ NULL, 0, NULL, 0); ++ + mach_port_deallocate (mach_task_self (), default_ports[INIT_PORT_PROC]); + mach_port_deallocate (mach_task_self (), task); + if (ctty != MACH_PORT_NULL) +@@ -1035,13 +1066,26 @@ start_child (const char *prog, char **pr + getchar (); + } + +- err = file_exec (file, child_task, 0, +- args, arglen, +- startup_envz, startup_envz_len, +- NULL, MACH_MSG_TYPE_COPY_SEND, 0, /* No fds. */ +- default_ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX, +- default_ints, INIT_INT_MAX, +- NULL, 0, NULL, 0); ++#ifdef HAVE_FILE_EXEC_FILE_NAME ++ err = file_exec_file_name (file, child_task, 0, args, ++ args, arglen, ++ startup_envz, startup_envz_len, ++ NULL, MACH_MSG_TYPE_COPY_SEND, 0, /* No fds. */ ++ default_ports, MACH_MSG_TYPE_COPY_SEND, ++ INIT_PORT_MAX, ++ default_ints, INIT_INT_MAX, ++ NULL, 0, NULL, 0); ++ /* For backwards compatibility. Just drop it when we kill file_exec. */ ++ if (err == MIG_BAD_ID) ++#endif ++ err = file_exec (file, child_task, 0, ++ args, arglen, ++ startup_envz, startup_envz_len, ++ NULL, MACH_MSG_TYPE_COPY_SEND, 0, /* No fds. */ ++ default_ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX, ++ default_ints, INIT_INT_MAX, ++ NULL, 0, NULL, 0); ++ + proc_mark_important (default_ports[INIT_PORT_PROC]); + mach_port_deallocate (mach_task_self (), default_ports[INIT_PORT_PROC]); + mach_port_deallocate (mach_task_self (), file); +Index: hurd-debian/libdiskfs/boot-start.c +=================================================================== +--- hurd-debian.orig/libdiskfs/boot-start.c ++++ hurd-debian/libdiskfs/boot-start.c +@@ -209,7 +209,7 @@ diskfs_start_bootstrap () diskfs_exec_ctl = MACH_PORT_NULL; /* Not used after this. */ } @@ -186,30 +352,10 @@ index d10d783..d80a4ca 100644 _hurd_port_set (&_diskfs_exec_portcell, diskfs_exec); if (_diskfs_boot_command) -diff --git a/libdiskfs/demuxer.c b/libdiskfs/demuxer.c -index 4a1c4fb..ff33b1b 100644 ---- a/libdiskfs/demuxer.c -+++ b/libdiskfs/demuxer.c -@@ -19,6 +19,7 @@ - - #include "io_S.h" - #include "fs_S.h" -+#include "fs_experimental_S.h" - #include "../libports/notify_S.h" - #include "fsys_S.h" - #include "../libports/interrupt_S.h" -@@ -33,6 +34,7 @@ diskfs_demuxer (mach_msg_header_t *inp, - mig_routine_t routine; - if ((routine = diskfs_io_server_routine (inp)) || - (routine = diskfs_fs_server_routine (inp)) || -+ (routine = diskfs_fs_experimental_server_routine (inp)) || - (routine = ports_notify_server_routine (inp)) || - (routine = diskfs_fsys_server_routine (inp)) || - (routine = ports_interrupt_server_routine (inp)) || -diff --git a/libdiskfs/file-exec.c b/libdiskfs/file-exec.c -index e544b14..a491720 100644 ---- a/libdiskfs/file-exec.c -+++ b/libdiskfs/file-exec.c +Index: hurd-debian/libdiskfs/file-exec.c +=================================================================== +--- hurd-debian.orig/libdiskfs/file-exec.c ++++ hurd-debian/libdiskfs/file-exec.c @@ -1,5 +1,6 @@ -/* File execution (file_exec RPC) for diskfs servers, using exec server. - Copyright (C) 1993,94,95,96,97,98,2000,02 Free Software Foundation, Inc. @@ -219,7 +365,7 @@ index e544b14..a491720 100644 This file is part of the GNU Hurd. -@@ -21,10 +22,14 @@ +@@ -21,10 +22,14 @@ the Free Software Foundation, 675 Mass A #include "priv.h" #include "fs_S.h" @@ -327,10 +473,10 @@ index e544b14..a491720 100644 mach_port_deallocate (mach_task_self (), right); if (err == MACH_SEND_INVALID_DEST) { -diff --git a/libfshelp/start-translator-long.c b/libfshelp/start-translator-long.c -index 8b00e08..f0966aa 100644 ---- a/libfshelp/start-translator-long.c -+++ b/libfshelp/start-translator-long.c +Index: hurd-debian/libfshelp/start-translator-long.c +=================================================================== +--- hurd-debian.orig/libfshelp/start-translator-long.c ++++ hurd-debian/libfshelp/start-translator-long.c @@ -1,5 +1,6 @@ /* - Copyright (C) 1995,96,99,2000,02, 04 Free Software Foundation, Inc. @@ -349,7 +495,7 @@ index 8b00e08..f0966aa 100644 /* The data passed in the various messages we're interested in. */ -@@ -272,12 +276,22 @@ fshelp_start_translator_long (fshelp_open_fn_t underlying_open_fn, +@@ -272,12 +276,22 @@ fshelp_start_translator_long (fshelp_ope saveport = ports[INIT_PORT_BOOTSTRAP]; ports[INIT_PORT_BOOTSTRAP] = bootstrap; @@ -377,49 +523,10 @@ index 8b00e08..f0966aa 100644 ports_moved = 1; if (ports_type == MACH_MSG_TYPE_COPY_SEND) -diff --git a/libnetfs/Makefile b/libnetfs/Makefile -index c3830c0..4aade5a 100644 ---- a/libnetfs/Makefile -+++ b/libnetfs/Makefile -@@ -59,12 +59,13 @@ SRCS= $(OTHERSRCS) $(FSSRCS) $(IOSRCS) $(FSYSSRCS) $(IFSOCKSRCS) - - installhdrs=netfs.h - --MIGSTUBS= ioServer.o fsServer.o fsysServer.o fsys_replyUser.o ifsockServer.o -+MIGSTUBS= ioServer.o fsServer.o fs_experimentalServer.o fsysServer.o fsys_replyUser.o ifsockServer.o - - OBJS=$(sort $(SRCS:.c=.o) $(MIGSTUBS)) - - fsys-MIGSFLAGS = -imacros $(srcdir)/mutations.h -DREPLY_PORTS - fs-MIGSFLAGS = -imacros $(srcdir)/mutations.h -+fs_experimental-MIGSFLAGS = -imacros $(srcdir)/mutations.h - io-MIGSFLAGS = -imacros $(srcdir)/mutations.h - ifsock-MIGSFLAGS = -imacros $(srcdir)/mutations.h - MIGCOMSFLAGS = -prefix netfs_ -diff --git a/libnetfs/demuxer.c b/libnetfs/demuxer.c -index 4c20ab6..bf78812 100644 ---- a/libnetfs/demuxer.c -+++ b/libnetfs/demuxer.c -@@ -22,6 +22,7 @@ - - #include "io_S.h" - #include "fs_S.h" -+#include "fs_experimental_S.h" - #include "../libports/notify_S.h" - #include "fsys_S.h" - #include "../libports/interrupt_S.h" -@@ -34,6 +35,7 @@ netfs_demuxer (mach_msg_header_t *inp, - mig_routine_t routine; - if ((routine = netfs_io_server_routine (inp)) || - (routine = netfs_fs_server_routine (inp)) || -+ (routine = netfs_fs_experimental_server_routine (inp)) || - (routine = ports_notify_server_routine (inp)) || - (routine = netfs_fsys_server_routine (inp)) || - (routine = ports_interrupt_server_routine (inp)) || -diff --git a/libnetfs/file-exec.c b/libnetfs/file-exec.c -index 638f0ae..ffaf598 100644 ---- a/libnetfs/file-exec.c -+++ b/libnetfs/file-exec.c +Index: hurd-debian/libnetfs/file-exec.c +=================================================================== +--- hurd-debian.orig/libnetfs/file-exec.c ++++ hurd-debian/libnetfs/file-exec.c @@ -1,5 +1,6 @@ /* - Copyright (C) 1996,97,2000,01,02 Free Software Foundation, Inc. @@ -523,54 +630,10 @@ index 638f0ae..ffaf598 100644 mach_port_deallocate (mach_task_self (), right); ports_port_deref (newpi); } -diff --git a/libtrivfs/Makefile b/libtrivfs/Makefile -index 48a53d7..c440101 100644 ---- a/libtrivfs/Makefile -+++ b/libtrivfs/Makefile -@@ -44,7 +44,7 @@ OTHERSRCS=demuxer.c protid-clean.c protid-dup.c cntl-create.c \ - - SRCS=$(FSSRCS) $(IOSRCS) $(FSYSSRCS) $(OTHERSRCS) - --MIGSTUBS=fsServer.o ioServer.o fsysServer.o fsys_replyUser.o -+MIGSTUBS=fsServer.o fs_experimentalServer.o ioServer.o fsysServer.o fsys_replyUser.o - - libname = libtrivfs - HURDLIBS = fshelp iohelp ports shouldbeinlibc -@@ -54,6 +54,10 @@ MIGCOMSFLAGS = -prefix trivfs_ - installhdrs := trivfs.h - mig-sheader-prefix = trivfs_ - -+ifndef no_deps -+installhdrs += $(patsubst %,trivfs_%_S.h,fs fs_experimental io fsys) -+endif -+ - include ../Makeconf - - $(MIGSTUBS:%Server.o=%.sdefsi): $(srcdir)/mig-mutate.h -diff --git a/libtrivfs/demuxer.c b/libtrivfs/demuxer.c -index 8c1afe6..55229da 100644 ---- a/libtrivfs/demuxer.c -+++ b/libtrivfs/demuxer.c -@@ -23,6 +23,7 @@ - - #include "trivfs_io_S.h" - #include "trivfs_fs_S.h" -+#include "trivfs_fs_experimental_S.h" - #include "../libports/notify_S.h" - #include "trivfs_fsys_S.h" - #include "../libports/interrupt_S.h" -@@ -34,6 +35,7 @@ trivfs_demuxer (mach_msg_header_t *inp, - mig_routine_t routine; - if ((routine = trivfs_io_server_routine (inp)) || - (routine = trivfs_fs_server_routine (inp)) || -+ (routine = trivfs_fs_experimental_server_routine (inp)) || - (routine = ports_notify_server_routine (inp)) || - (routine = trivfs_fsys_server_routine (inp)) || - (routine = ports_interrupt_server_routine (inp))) -diff --git a/libtrivfs/file-exec.c b/libtrivfs/file-exec.c -index b353d8a..5f873c7 100644 ---- a/libtrivfs/file-exec.c -+++ b/libtrivfs/file-exec.c +Index: hurd-debian/libtrivfs/file-exec.c +=================================================================== +--- hurd-debian.orig/libtrivfs/file-exec.c ++++ hurd-debian/libtrivfs/file-exec.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1994,2002 Free Software Foundation, Inc. @@ -578,7 +641,7 @@ index b353d8a..5f873c7 100644 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as -@@ -41,3 +41,28 @@ trivfs_S_file_exec (trivfs_protid_t exec_file, +@@ -41,3 +41,28 @@ trivfs_S_file_exec (trivfs_protid_t exec { return EOPNOTSUPP; } @@ -607,139 +670,10 @@ index b353d8a..5f873c7 100644 +{ + return EOPNOTSUPP; +} -diff --git a/startup/startup.c b/startup/startup.c -index e916768..db30b65 100644 ---- a/startup/startup.c -+++ b/startup/startup.c -@@ -1,7 +1,7 @@ - /* Start and maintain hurd core servers and system run state - - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -- 2005, 2008, 2013 Free Software Foundation, Inc. -+ 2005, 2008, 2010, 2013 Free Software Foundation, Inc. - This file is part of the GNU Hurd. - - The GNU Hurd is free software; you can redistribute it and/or modify -@@ -24,6 +24,9 @@ - one file. */ - #include <hurd.h> - #include <hurd/fs.h> -+#ifdef HAVE_FILE_EXEC_FILE_NAME -+#include <hurd/fs_experimental.h> -+#endif - #include <hurd/fsys.h> - #include <device/device.h> - #include <stdio.h> -@@ -377,13 +380,28 @@ run (const char *server, mach_port_t *ports, task_t *task) - printf ("Pausing for %s\n", prog); - getchar (); - } -- err = file_exec (file, *task, 0, -- (char *)prog, strlen (prog) + 1, /* Args. */ -- startup_envz, startup_envz_len, -- default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, -- ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX, -- default_ints, INIT_INT_MAX, -- NULL, 0, NULL, 0); -+#ifdef HAVE_FILE_EXEC_FILE_NAME -+ err = file_exec_file_name (file, *task, 0, (char *)prog, -+ (char *)prog, -+ strlen (prog) + 1, /* Args. */ -+ startup_envz, startup_envz_len, -+ default_dtable, -+ MACH_MSG_TYPE_COPY_SEND, 3, -+ ports, MACH_MSG_TYPE_COPY_SEND, -+ INIT_PORT_MAX, -+ default_ints, INIT_INT_MAX, -+ NULL, 0, NULL, 0); -+ /* For backwards compatibility. Just drop it when we kill -+ file_exec. */ -+ if (err == MIG_BAD_ID) -+#endif -+ err = file_exec (file, *task, 0, -+ (char *)prog, strlen (prog) + 1, /* Args. */ -+ startup_envz, startup_envz_len, -+ default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, -+ ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX, -+ default_ints, INIT_INT_MAX, -+ NULL, 0, NULL, 0); - if (!err) - break; - -@@ -470,14 +488,27 @@ run_for_real (char *filename, char *args, int arglen, mach_port_t ctty, - ++progname; - else - progname = filename; -- err = file_exec (file, task, 0, -- args, arglen, -- startup_envz, startup_envz_len, -- default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, -- default_ports, MACH_MSG_TYPE_COPY_SEND, -- INIT_PORT_MAX, -- default_ints, INIT_INT_MAX, -- NULL, 0, NULL, 0); -+#ifdef HAVE_FILE_EXEC_FILE_NAME -+ err = file_exec_file_name (file, task, 0, filename, -+ args, arglen, -+ startup_envz, startup_envz_len, -+ default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, -+ default_ports, MACH_MSG_TYPE_COPY_SEND, -+ INIT_PORT_MAX, -+ default_ints, INIT_INT_MAX, -+ NULL, 0, NULL, 0); -+ /* For backwards compatibility. Just drop it when we kill file_exec. */ -+ if (err == MIG_BAD_ID) -+#endif -+ err = file_exec (file, task, 0, -+ args, arglen, -+ startup_envz, startup_envz_len, -+ default_dtable, MACH_MSG_TYPE_COPY_SEND, 3, -+ default_ports, MACH_MSG_TYPE_COPY_SEND, -+ INIT_PORT_MAX, -+ default_ints, INIT_INT_MAX, -+ NULL, 0, NULL, 0); -+ - mach_port_deallocate (mach_task_self (), default_ports[INIT_PORT_PROC]); - mach_port_deallocate (mach_task_self (), task); - if (ctty != MACH_PORT_NULL) -@@ -1075,13 +1106,26 @@ start_child (const char *prog, char **progargs) - getchar (); - } - -- err = file_exec (file, child_task, 0, -- args, arglen, -- startup_envz, startup_envz_len, -- NULL, MACH_MSG_TYPE_COPY_SEND, 0, /* No fds. */ -- default_ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX, -- default_ints, INIT_INT_MAX, -- NULL, 0, NULL, 0); -+#ifdef HAVE_FILE_EXEC_FILE_NAME -+ err = file_exec_file_name (file, child_task, 0, args, -+ args, arglen, -+ startup_envz, startup_envz_len, -+ NULL, MACH_MSG_TYPE_COPY_SEND, 0, /* No fds. */ -+ default_ports, MACH_MSG_TYPE_COPY_SEND, -+ INIT_PORT_MAX, -+ default_ints, INIT_INT_MAX, -+ NULL, 0, NULL, 0); -+ /* For backwards compatibility. Just drop it when we kill file_exec. */ -+ if (err == MIG_BAD_ID) -+#endif -+ err = file_exec (file, child_task, 0, -+ args, arglen, -+ startup_envz, startup_envz_len, -+ NULL, MACH_MSG_TYPE_COPY_SEND, 0, /* No fds. */ -+ default_ports, MACH_MSG_TYPE_COPY_SEND, INIT_PORT_MAX, -+ default_ints, INIT_INT_MAX, -+ NULL, 0, NULL, 0); -+ - proc_mark_important (default_ports[INIT_PORT_PROC]); - mach_port_deallocate (mach_task_self (), default_ports[INIT_PORT_PROC]); - mach_port_deallocate (mach_task_self (), file); -diff --git a/trans/fakeroot.c b/trans/fakeroot.c -index 76fc901..adbd07d 100644 ---- a/trans/fakeroot.c -+++ b/trans/fakeroot.c +Index: hurd-debian/trans/fakeroot.c +=================================================================== +--- hurd-debian.orig/trans/fakeroot.c ++++ hurd-debian/trans/fakeroot.c @@ -28,10 +28,14 @@ #include <pthread.h> #include <hurd/ihash.h> @@ -755,7 +689,7 @@ index 76fc901..adbd07d 100644 #include "libnetfs/io_S.h" #include "libnetfs/fsys_S.h" #include "libports/notify_S.h" -@@ -820,23 +824,24 @@ netfs_file_get_storage_info (struct iouser *cred, +@@ -785,23 +789,24 @@ netfs_file_get_storage_info (struct ious } kern_return_t @@ -797,7 +731,7 @@ index 76fc901..adbd07d 100644 { error_t err; file_t file; -@@ -855,14 +860,30 @@ netfs_S_file_exec (struct protid *user, +@@ -820,14 +825,30 @@ netfs_S_file_exec (struct protid *user, if (!err) { @@ -834,7 +768,7 @@ index 76fc901..adbd07d 100644 mach_port_deallocate (mach_task_self (), file); } -@@ -878,6 +899,38 @@ netfs_S_file_exec (struct protid *user, +@@ -843,6 +864,38 @@ netfs_S_file_exec (struct protid *user, return err; } @@ -873,7 +807,7 @@ index 76fc901..adbd07d 100644 error_t netfs_S_io_map (struct protid *user, mach_port_t *rdobj, mach_msg_type_name_t *rdobjtype, -@@ -994,6 +1047,7 @@ netfs_demuxer (mach_msg_header_t *inp, +@@ -959,6 +1012,7 @@ netfs_demuxer (mach_msg_header_t *inp, mig_routine_t routine; if ((routine = netfs_io_server_routine (inp)) || (routine = netfs_fs_server_routine (inp)) || @@ -881,10 +815,10 @@ index 76fc901..adbd07d 100644 (routine = ports_notify_server_routine (inp)) || (routine = netfs_fsys_server_routine (inp)) || /* XXX we should intercept interrupt_operation and do -diff --git a/utils/login.c b/utils/login.c -index 9ee296a..cc04715 100644 ---- a/utils/login.c -+++ b/utils/login.c +Index: hurd-debian/utils/login.c +=================================================================== +--- hurd-debian.orig/utils/login.c ++++ hurd-debian/utils/login.c @@ -1,6 +1,7 @@ /* Hurdish login @@ -933,3 +867,185 @@ index 9ee296a..cc04715 100644 if (err) error(5, err, "%s", shell); +Index: hurd-debian/hurd/fs_experimental.defs +=================================================================== +--- /dev/null ++++ hurd-debian/hurd/fs_experimental.defs +@@ -0,0 +1,51 @@ ++/* Definitions for the filesystem interface. ++ Copyright (C) 1994,95,96,97,98,99,2002 Free Software Foundation, Inc. ++ ++This file is part of the GNU Hurd. ++ ++The GNU Hurd is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2, or (at your option) ++any later version. ++ ++The GNU Hurd is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with the GNU Hurd; see the file COPYING. If not, write to ++the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ++ ++ ++/* All these objects also implement the generic IO facilities. */ ++ ++subsystem fs_experimental 444242; ++ ++#include <hurd/hurd_types.defs> ++ ++#ifdef FILE_IMPORTS ++FILE_IMPORTS ++#endif ++ ++/* Operations supported on all files */ ++ ++INTR_INTERFACE ++ ++/* Overlay a task with a file. Necessary initialization, including ++ authentication changes associated with set[ug]id execution must be ++ handled by the filesystem. Filesystems normally implement this by ++ using exec_newtask or exec_loadtask as appropriate. */ ++routine file_exec_file_name ( ++ exec_file: file_t; ++ RPT ++ exec_task: task_t; ++ flags: int; ++ filename: string_t; ++ argv: data_t SCP; ++ envp: data_t SCP; ++ fdarray: portarray_t SCP; ++ portarray: portarray_t SCP; ++ intarray: intarray_t SCP; ++ deallocnames: mach_port_name_array_t SCP; ++ destroynames: mach_port_name_array_t SCP); +Index: hurd-debian/libdiskfs/Makefile +=================================================================== +--- hurd-debian.orig/libdiskfs/Makefile ++++ hurd-debian/libdiskfs/Makefile +@@ -56,7 +56,7 @@ OTHERSRCS = conch-fetch.c conch-set.c di + SRCS = $(OTHERSRCS) $(FSSRCS) $(IOSRCS) $(FSYSSRCS) $(IFSOCKSRCS) + installhdrs = diskfs.h diskfs-pager.h + +-MIGSTUBS = fsServer.o ioServer.o fsysServer.o exec_startupServer.o \ ++MIGSTUBS = fsServer.o fs_experimentalServer.o ioServer.o fsysServer.o exec_startupServer.o \ + fsys_replyUser.o fs_notifyUser.o ifsockServer.o \ + startup_notifyServer.o + OBJS = $(sort $(SRCS:.c=.o) $(MIGSTUBS)) +@@ -66,6 +66,7 @@ LDLIBS += -lpthread + + fsys-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h -DREPLY_PORTS + fs-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h ++fs_experimental-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h + io-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h + ifsock-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h + exec_startup-MIGSFLAGS = -imacros $(srcdir)/fsmutations.h +Index: hurd-debian/libdiskfs/demuxer.c +=================================================================== +--- hurd-debian.orig/libdiskfs/demuxer.c ++++ hurd-debian/libdiskfs/demuxer.c +@@ -19,6 +19,7 @@ + + #include "io_S.h" + #include "fs_S.h" ++#include "fs_experimental_S.h" + #include "../libports/notify_S.h" + #include "fsys_S.h" + #include "../libports/interrupt_S.h" +@@ -33,6 +34,7 @@ diskfs_demuxer (mach_msg_header_t *inp, + mig_routine_t routine; + if ((routine = diskfs_io_server_routine (inp)) || + (routine = diskfs_fs_server_routine (inp)) || ++ (routine = diskfs_fs_experimental_server_routine (inp)) || + (routine = ports_notify_server_routine (inp)) || + (routine = diskfs_fsys_server_routine (inp)) || + (routine = ports_interrupt_server_routine (inp)) || +Index: hurd-debian/libnetfs/Makefile +=================================================================== +--- hurd-debian.orig/libnetfs/Makefile ++++ hurd-debian/libnetfs/Makefile +@@ -59,12 +59,13 @@ SRCS= $(OTHERSRCS) $(FSSRCS) $(IOSRCS) $ + + installhdrs=netfs.h + +-MIGSTUBS= ioServer.o fsServer.o fsysServer.o fsys_replyUser.o ifsockServer.o ++MIGSTUBS= ioServer.o fsServer.o fs_experimentalServer.o fsysServer.o fsys_replyUser.o ifsockServer.o + + OBJS=$(sort $(SRCS:.c=.o) $(MIGSTUBS)) + + fsys-MIGSFLAGS = -imacros $(srcdir)/mutations.h -DREPLY_PORTS + fs-MIGSFLAGS = -imacros $(srcdir)/mutations.h ++fs_experimental-MIGSFLAGS = -imacros $(srcdir)/mutations.h + io-MIGSFLAGS = -imacros $(srcdir)/mutations.h + ifsock-MIGSFLAGS = -imacros $(srcdir)/mutations.h + MIGCOMSFLAGS = -prefix netfs_ +Index: hurd-debian/libnetfs/demuxer.c +=================================================================== +--- hurd-debian.orig/libnetfs/demuxer.c ++++ hurd-debian/libnetfs/demuxer.c +@@ -22,6 +22,7 @@ + + #include "io_S.h" + #include "fs_S.h" ++#include "fs_experimental_S.h" + #include "../libports/notify_S.h" + #include "fsys_S.h" + #include "../libports/interrupt_S.h" +@@ -34,6 +35,7 @@ netfs_demuxer (mach_msg_header_t *inp, + mig_routine_t routine; + if ((routine = netfs_io_server_routine (inp)) || + (routine = netfs_fs_server_routine (inp)) || ++ (routine = netfs_fs_experimental_server_routine (inp)) || + (routine = ports_notify_server_routine (inp)) || + (routine = netfs_fsys_server_routine (inp)) || + (routine = ports_interrupt_server_routine (inp)) || +Index: hurd-debian/libtrivfs/Makefile +=================================================================== +--- hurd-debian.orig/libtrivfs/Makefile ++++ hurd-debian/libtrivfs/Makefile +@@ -44,7 +44,7 @@ OTHERSRCS=demuxer.c protid-clean.c proti + + SRCS=$(FSSRCS) $(IOSRCS) $(FSYSSRCS) $(OTHERSRCS) + +-MIGSTUBS=fsServer.o ioServer.o fsysServer.o fsys_replyUser.o ++MIGSTUBS=fsServer.o fs_experimentalServer.o ioServer.o fsysServer.o fsys_replyUser.o + + libname = libtrivfs + HURDLIBS = fshelp iohelp ports shouldbeinlibc +Index: hurd-debian/libtrivfs/demuxer.c +=================================================================== +--- hurd-debian.orig/libtrivfs/demuxer.c ++++ hurd-debian/libtrivfs/demuxer.c +@@ -23,6 +23,7 @@ the Free Software Foundation, 675 Mass A + + #include "trivfs_io_S.h" + #include "trivfs_fs_S.h" ++#include "trivfs_fs_experimental_S.h" + #include "../libports/notify_S.h" + #include "trivfs_fsys_S.h" + #include "../libports/interrupt_S.h" +@@ -34,6 +35,7 @@ trivfs_demuxer (mach_msg_header_t *inp, + mig_routine_t routine; + if ((routine = trivfs_io_server_routine (inp)) || + (routine = trivfs_fs_server_routine (inp)) || ++ (routine = trivfs_fs_experimental_server_routine (inp)) || + (routine = ports_notify_server_routine (inp)) || + (routine = trivfs_fsys_server_routine (inp)) || + (routine = ports_interrupt_server_routine (inp))) +Index: hurd-debian/configure.ac +=================================================================== +--- hurd-debian.orig/configure.ac ++++ hurd-debian/configure.ac +@@ -162,6 +162,8 @@ else + VERSIONING=no + fi + AC_SUBST(VERSIONING) ++# Check if libc contains these functions. ++AC_CHECK_FUNCS(file_exec_file_name exec_exec_file_name) + + + # From glibc HEAD, 2007-11-07. diff --git a/debian/patches/external.patch b/debian/patches/external.patch index c0f05fee..c746aac4 100644 --- a/debian/patches/external.patch +++ b/debian/patches/external.patch @@ -1,9 +1,11 @@ -Include procfs, random, and DDE in the build +Include DDE in the build -diff --git a/Makefile b/Makefile -index 0b9eff2..12b56f0 100644 ---- a/Makefile -+++ b/Makefile +TODO: We should turn AC_MSG_WARN into disabling targets + +Index: hurd-debian/Makefile +=================================================================== +--- hurd-debian.orig/Makefile ++++ hurd-debian/Makefile @@ -28,7 +28,8 @@ include ./Makeconf # Hurd libraries lib-subdirs = libshouldbeinlibc libihash libiohelp libports libthreads \ @@ -14,42 +16,41 @@ index 0b9eff2..12b56f0 100644 # Hurd programs prog-subdirs = auth proc exec term \ -@@ -40,8 +41,9 @@ prog-subdirs = auth proc exec init term \ - benchmarks fstests \ - random \ +@@ -37,6 +38,7 @@ prog-subdirs = auth proc exec init term procfs \ startup \ init \ -+ devnode \ ++ devnode ifeq ($(HAVE_SUN_RPC),yes) prog-subdirs += nfs nfsd -diff --git a/configure.ac b/configure.ac -index 05b959b..68ec159 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -227,6 +227,12 @@ AC_SUBST(boot_store_types)dnl +Index: hurd-debian/Makeconf +=================================================================== +--- hurd-debian.orig/Makeconf ++++ hurd-debian/Makeconf +@@ -576,7 +576,7 @@ vpath %.defs $(top_srcdir)/hurd + # These we want to find in the libc include directory... + mach_defs_names = bootstrap exc mach mach4 \ + mach_host mach_port mach_timer_reply memory_object \ +- memory_object_default notify \ ++ memory_object_default notify experimental \ + gnumach \ + task_notify \ + +Index: hurd-debian/configure.ac +=================================================================== +--- hurd-debian.orig/configure.ac ++++ hurd-debian/configure.ac +@@ -241,6 +241,12 @@ AC_SUBST(boot_store_types)dnl AC_MSG_CHECKING(boot store types) AC_MSG_RESULT($boot_store_types) +AC_CHECK_LIB(pciaccess, pci_system_init, LIBPCIACCESS=-lpciaccess, LIBPCIACCESS=no) +AC_SUBST(LIBPCIACCESS) +if test "$LIBPCIACCESS" = "no"; then -+ AC_MSG_ERROR([libpciaccess must be install in order to use libddekit]) ++ AC_MSG_WARN([libpciaccess must be install in order to use libddekit]) +fi + # Check for ncursesw, which is needed for the console-curses client. hurd_LIB_NCURSESW -diff --git a/Makeconf b/Makeconf -index 5439913..1d70e53 100644 ---- a/Makeconf -+++ b/Makeconf -@@ -582,6 +582,7 @@ mach_defs_names = bootstrap exc mach mach4 \ - mach_debug_defs_names = mach_debug - device_defs_names = dev_forward device device_reply device_request - -+mach_defs_names += experimental - mach_defs = $(addsuffix .defs,$(mach_defs_names)) - mach_debug_defs = $(addsuffix .defs,$(mach_debug_defs_names)) - device_defs = $(addsuffix .defs,$(device_defs_names)) diff --git a/debian/patches/init_try_runsystem.gnu.patch b/debian/patches/init_try_runsystem.gnu.patch new file mode 100644 index 00000000..e76d5095 --- /dev/null +++ b/debian/patches/init_try_runsystem.gnu.patch @@ -0,0 +1,19 @@ +Also try runsystem.gnu, in case /etc/alternatives/runsystem is hosed. + +--- + daemons/console-run.c | 7 +++++++ + startup/startup.c | 24 ++++++++++++++++++++---- + 2 files changed, 27 insertions(+), 4 deletions(-) + +Index: hurd-debian/startup/startup.c +=================================================================== +--- hurd-debian.orig/startup/startup.c 2012-11-26 00:23:25.000000000 +0000 ++++ hurd-debian/startup/startup.c 2012-11-26 00:25:06.000000000 +0000 +@@ -1087,6 +1087,7 @@ + static const char *const tries[] = + { + "/libexec/runsystem", ++ "/libexec/runsystem.gnu", + _PATH_BSHELL, + "/bin/shd", /* XXX */ + }; diff --git a/debian/patches/libexec.patch b/debian/patches/libexec.patch index 18634a35..dc901b77 100644 --- a/debian/patches/libexec.patch +++ b/debian/patches/libexec.patch @@ -1,7 +1,9 @@ -diff --git a/config/ttys b/config/ttys -index 6a548d5..d10bfcc 100644 ---- a/config/ttys -+++ b/config/ttys +libexec is not FHS + +Index: hurd-debian/config/ttys +=================================================================== +--- hurd-debian.orig/config/ttys ++++ hurd-debian/config/ttys @@ -4,11 +4,11 @@ # name program type status comments @@ -22,26 +24,24 @@ index 6a548d5..d10bfcc 100644 +tty5 "/sbin/getty 38400" hurd on secure trusted console +tty6 "/sbin/getty 38400" hurd on secure trusted console +#com0 "/sbin/getty 9600" dialup on secure -diff --git a/daemons/runsystem.sh b/daemons/runsystem.sh -index c3cb2d6..0ce4f59 100644 ---- a/daemons/runsystem.hurd -+++ b/daemons/runsystem.hurd -@@ -23,8 +23,8 @@ fallback_shells='/bin/sh /bin/bash /bin/csh /bin/ash /bin/shd' - SHELL=/bin/sh +Index: hurd-debian/doc/hurd.texi +=================================================================== +--- hurd-debian.orig/doc/hurd.texi ++++ hurd-debian/doc/hurd.texi +@@ -566,7 +566,7 @@ The @option{--multiboot-command-line} op + it is a root filesystem, which triggers it to run @command{/hurd/startup} as PID + 2. @command{/hurd/startup} starts the @command{/hurd/proc} and + @command{/hurd/auth} servers. After the servers are launched +-@command{/hurd/startup} starts the @command{/libexec/runsystem.sh} script to ++@command{/hurd/startup} starts the @command{/etc/hurd/runsystem.sh} script to + finish booting. - # Programs that do multi-user startup. --RUNCOM=/libexec/rc --RUNTTYS=/libexec/runttys -+RUNCOM=/etc/hurd/rc -+RUNTTYS=/sbin/runttys - # Signals that we should pass down to runttys. - runttys_sigs='TERM INT HUP TSTP' - -diff --git a/init/init.c b/init/init.c -index d66bee0..14d822e 100644 ---- a/startup/startup.c -+++ b/startup/startup.c -@@ -888,7 +888,7 @@ frob_kernel_process (void) + After the Hurd has been booted, other sets of core Hurd servers can be +Index: hurd-debian/startup/startup.c +=================================================================== +--- hurd-debian.orig/startup/startup.c ++++ hurd-debian/startup/startup.c +@@ -912,7 +912,7 @@ frob_kernel_process (void) /** Running userland. **/ /* In the "split-init" setup, we just run a single program (usually @@ -50,7 +50,7 @@ index d66bee0..14d822e 100644 If it does exit (or can't be started), we go to an emergency single-user shell as a fallback. */ -@@ -1004,7 +1004,7 @@ process_signal (int signo) +@@ -980,7 +980,7 @@ process_signal (int signo) } } @@ -59,7 +59,7 @@ index d66bee0..14d822e 100644 with the given additional arguments. */ static int start_child (const char *prog, char **progargs) -@@ -1016,7 +1016,7 @@ start_child (const char *prog, char **progargs) +@@ -992,7 +992,7 @@ start_child (const char *prog, char **pr if (progargs == 0) { @@ -68,7 +68,7 @@ index d66bee0..14d822e 100644 err = argz_create ((char **) argv, &args, &arglen); } else -@@ -1026,7 +1026,7 @@ start_child (const char *prog, char **progargs) +@@ -1002,7 +1002,7 @@ start_child (const char *prog, char **pr ++argc; { const char *argv[2 + argc + 1]; @@ -77,12 +77,14 @@ index d66bee0..14d822e 100644 argv[1] = prog; argv[2 + argc] = 0; while (argc-- > 0) -@@ -1086,7 +1086,7 @@ launch_something (const char *why) +@@ -1062,8 +1062,8 @@ launch_something (const char *why) static unsigned int try; static const char *const tries[] = { - "/libexec/runsystem", +- "/libexec/runsystem.gnu", + "/etc/hurd/runsystem", ++ "/etc/hurd/runsystem.gnu", _PATH_BSHELL, "/bin/shd", /* XXX */ }; diff --git a/debian/patches/makedev.diff b/debian/patches/makedev.diff index b165246c..e4f7371d 100644 --- a/debian/patches/makedev.diff +++ b/debian/patches/makedev.diff @@ -6,7 +6,7 @@ there. --- a/sutils/MAKEDEV.sh +++ b/sutils/MAKEDEV.sh -@@ -86,7 +86,7 @@ function mkdev { +@@ -100,7 +100,7 @@ function mkdev { ;; std) diff --git a/debian/patches/mount.patch b/debian/patches/mount.patch index 41770bc4..03aaaa31 100644 --- a/debian/patches/mount.patch +++ b/debian/patches/mount.patch @@ -8,12 +8,12 @@ diff --git a/utils/mount.c b/utils/mount.c index 8b059c2..8af055e 100644 --- a/utils/mount.c +++ b/utils/mount.c -@@ -248,7 +248,9 @@ do_mount (struct fs *fs, int remount) +@@ -284,7 +284,9 @@ do_mount (struct fs *fs, int remount) { ARGZ (add (&fsopts, &fsopts_len, o)); } - else if ((strcmp (o, "defaults") != 0) && (strlen (o) != 0)) -+ else if (strcmp (o, "defaults") != 0 && (strlen (o) != 0) && ++ else if ((strcmp (o, "defaults") != 0) && (strlen (o) != 0) && + strcmp (o, "loop") != 0 && + strcmp (o, "exec") != 0) { diff --git a/debian/patches/newRPC.patch b/debian/patches/newRPC.patch new file mode 100644 index 00000000..ba8afb06 --- /dev/null +++ b/debian/patches/newRPC.patch @@ -0,0 +1,19 @@ +Just a build fix. + +# missing mach_notify_new_task RPCs + +To be removed with glibc 2.21 + +Index: hurd-debian/proc/Makefile +=================================================================== +--- hurd-debian.orig/proc/Makefile ++++ hurd-debian/proc/Makefile +@@ -28,7 +28,7 @@ MIGSFLAGS = -imacros $(srcdir)/mig-mutat + + MIGSTUBS = processServer.o notifyServer.o \ + ourmsgUser.o proc_excUser.o proc_excServer.o \ +- task_notifyServer.o ++ task_notifyServer.o task_notifyUser.o + OBJS = $(SRCS:.c=.o) $(MIGSTUBS) + HURDLIBS = ihash ports shouldbeinlibc + diff --git a/debian/patches/posix-sigcodes.patch b/debian/patches/posix-sigcodes.patch index 93beed93..f44d1fb7 100644 --- a/debian/patches/posix-sigcodes.patch +++ b/debian/patches/posix-sigcodes.patch @@ -63,19 +63,7 @@ diff --git a/proc/proc.h b/proc/proc.h index 7943e0b..b52ca1d 100644 --- a/proc/proc.h +++ b/proc/proc.h -@@ -192,19 +192,19 @@ void exc_clean (void *); - struct proc *allocate_proc (task_t); - void proc_death_notify (struct proc *); - void complete_proc (struct proc *, pid_t); - - void leave_pgrp (struct proc *); - void join_pgrp (struct proc *); - void boot_setsid (struct proc *); - - void process_has_exited (struct proc *); - void alert_parent (struct proc *); - void reparent_zombies (struct proc *); - void complete_exit (struct proc *); +@@ -192,7 +192,7 @@ void exc_clean (void *); void initialize_version_info (void); diff --git a/debian/patches/rc.patch b/debian/patches/rc.patch new file mode 100644 index 00000000..964662c7 --- /dev/null +++ b/debian/patches/rc.patch @@ -0,0 +1,91 @@ +More debianish rc scripts +--- + daemons/rc.sh | 43 ++++++++++++++++++++++++++++++++----------- + 1 file changed, 32 insertions(+), 11 deletions(-) + +--- a/daemons/rc.sh ++++ b/daemons/rc.sh +@@ -19,14 +19,17 @@ then + echo Automatic boot in progress... + date + +- /sbin/fsck --preen --writable ++ fsysopts / --update --readonly ++ /sbin/fsck -p -A + + case $? in + # Successful completion + 0) ++ fsysopts / --update --writable + ;; + # Filesystem modified (but ok now) + 1) ++ fsysopts / --update --writable + ;; + # Filesystem modified, filesystem should be restarted + # Ideally we would only restart the filesystem +@@ -85,12 +88,26 @@ if test -d /tmp; then + + fi + if test -d /var/run; then +- (cd /var/run && { rm -rf -- *; cp /dev/null utmp; chmod 644 utmp; }) ++ (cd /var/run && { ++ find . ! -type d ! -name utmp ! -name innd.pid \ ++ -exec rm -f -- {} \; ++ cp /dev/null utmp ++ if grep -q ^utmp: /etc/group ++ then ++ chmod 664 utmp ++ chgrp utmp utmp ++ fi; }) + fi + echo done + +-# This file must exist for e2fsck to work. XXX +-touch /var/run/mtab ++# See whether procfs is set up ++if ! test -e /proc/cmdline ; then ++ settrans -c /proc /hurd/procfs --compatible ++fi ++ ++# This file must exist for e2fsck to work. ++ln -s /proc/mounts /var/run/mtab ++ln -sf /proc/mounts /etc/mtab + + #echo -n restoring pty permissions... + #chmod 666 /dev/tty[pqrs]* +@@ -104,15 +120,25 @@ touch /var/run/mtab + + chmod 664 /etc/motd + +-echo -n starting daemons: +- +-/sbin/syslogd && echo -n ' syslogd' +-/sbin/inetd && echo -n ' inetd' +- +-if test -x /sbin/sendmail -a -r /etc/sendmail.cf; then +- /sbin/sendmail -bd -q30m && echo -n ' sendmail' +-fi ++( ++ trap ":" INT QUIT TSTP + +-echo . ++ if [ -d /etc/rc.boot ] ++ then ++ for i in /etc/rc.boot/S* ++ do ++ [ ! -f $i ] && continue ++ $i start ++ done ++ fi ++ if [ -d /etc/rc2.d ] ++ then ++ for i in /etc/rc2.d/S* ++ do ++ [ ! -f $i ] && continue ++ $i start ++ done ++ fi ++) + + date diff --git a/debian/patches/run.patch b/debian/patches/run.patch new file mode 100644 index 00000000..3588ddb0 --- /dev/null +++ b/debian/patches/run.patch @@ -0,0 +1,16 @@ +--- a/daemons/rc.sh ++++ b/daemons/rc.sh +@@ -98,6 +98,13 @@ + chgrp utmp utmp + fi; }) + fi ++ ++# until we properly start /etc/rcS.d ++rm -fr /run/* ++mkdir -p /run/lock /run/shm ++chmod 1777 /run/lock /run/shm ++: > /run/utmp ++ + echo done + + # See whether procfs is set up diff --git a/debian/patches/series b/debian/patches/series index b73278e2..829913bf 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -43,7 +43,7 @@ format #procfs-0007-procfs-provide-magic-retry-response-for-proc-self.patch startup-avoid-broken-puts.patch -proc-task-notify-0005-proc-fix-build.patch +#proc-task-notify-0005-proc-fix-build.patch thomas_term.patch ajoin.patch proc_disable_new_task_notifications.patch @@ -78,3 +78,10 @@ introspection0012-fixup_libintrospection.patch ihash-as-cache0001-libihash-add-hurd_ihash_value_valid.patch ihash-as-cache0002-libihash-optimize-lookup-or-insert-operations.patch ihash-as-cache0003-libihash-prefer-performance-degradation-over-failure.patch +dl_origin.patch +init_try_runsystem.gnu.patch +newRPC.patch +rc.patch +run.patch +term-for-tcl.patch +MAKEDEV-apm.patch diff --git a/debian/patches/startup-usr-support.patch b/debian/patches/startup-usr-support.patch index 1d705fc9..c7e12d12 100644 --- a/debian/patches/startup-usr-support.patch +++ b/debian/patches/startup-usr-support.patch @@ -12,8 +12,8 @@ Debian GNU/Hurd has a real /usr -PATH=/bin:/sbin +PATH=/bin:/sbin:/usr/bin:/usr/sbin - # Start the default pager. It will bail if there is already one running. - /hurd/mach-defpager + # Set up swap space. This will complain if no default pager is functioning. + swapon -a --- a/daemons/runsystem.sh +++ b/daemons/runsystem.sh @@ -11,7 +11,7 @@ diff --git a/debian/patches/term-for-tcl.patch b/debian/patches/term-for-tcl.patch new file mode 100644 index 00000000..fb63037a --- /dev/null +++ b/debian/patches/term-for-tcl.patch @@ -0,0 +1,23 @@ +See discussion in http://bugs.debian.org/755295 +and bug report on comp.lang.tcl on July 1st 2015 +(“'expect' losing data due to tcl buffering”) + +--- a/term/ptyio.c ++++ b/term/ptyio.c +@@ -350,6 +350,16 @@ pty_io_read (struct trivfs_protid *cred, + size++; + } + ++ /* ++ * Linux never returns more than this, and at least TCL happens to depend on ++ * this behavior. This was discussed in http://bugs.debian.org/755295 and ++ * raised to TCL, with no answer so far. ++ */ ++#define LINUXISH_READ_MAX 4095 ++ if (cred->po->openmodes & O_NONBLOCK) ++ if (amount > LINUXISH_READ_MAX) ++ amount = LINUXISH_READ_MAX; ++ + if (size > amount) + size = amount; + if (size > *datalen) diff --git a/debian/patches/tmp_exec_startup.patch b/debian/patches/tmp_exec_startup.patch index bd605718..a67383fb 100644 --- a/debian/patches/tmp_exec_startup.patch +++ b/debian/patches/tmp_exec_startup.patch @@ -5,9 +5,11 @@ TODO: not used by d-i. Is it used by crosshurd? libdiskfs/boot-start.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) ---- a/libdiskfs/boot-start.c -+++ b/libdiskfs/boot-start.c -@@ -126,8 +126,13 @@ diskfs_start_bootstrap () +Index: hurd-debian/libdiskfs/boot-start.c +=================================================================== +--- hurd-debian.orig/libdiskfs/boot-start.c ++++ hurd-debian/libdiskfs/boot-start.c +@@ -130,8 +130,13 @@ diskfs_start_bootstrap () assert (_hurd_ports); assert (_hurd_ports[INIT_PORT_CRDIR].port != MACH_PORT_NULL); diskfs_exec = file_name_lookup (_SERVERS_EXEC, 0, 0); @@ -23,8 +25,8 @@ TODO: not used by d-i. Is it used by crosshurd? else { #ifndef NDEBUG -@@ -177,8 +182,15 @@ diskfs_start_bootstrap () - &retry, pathbuf, &execnode); +@@ -181,8 +186,15 @@ diskfs_start_bootstrap () + &retry, retry_name, &execnode); if (err) { - error (0, err, "cannot set translator on %s", _SERVERS_EXEC); @@ -41,7 +43,7 @@ TODO: not used by d-i. Is it used by crosshurd? } else { -@@ -393,6 +405,10 @@ diskfs_execboot_fsys_startup (mach_port_ +@@ -407,6 +419,10 @@ diskfs_execboot_fsys_startup (mach_port_ err = dir_lookup (rootport, _SERVERS_EXEC, flags|O_NOTRANS, 0, &retry, pathbuf, real); |