This is an automated email from the git hooks/post-receive script. sthibault pushed a commit to branch dde in repository hurd.
commit 6e1555c9a749b215665619f4ec6f0b0d4d0f3fd6 Merge: 75ee933 87bc937 Author: Samuel Thibault <[email protected]> Date: Sun Nov 29 13:10:15 2015 +0100 Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/hurd into dde .gitignore | 12 + ChangeLog | 5 - INSTALL | 6 +- INSTALL-cross | 2 +- Makeconf | 16 +- Makefile | 96 +- NEWS | 106 +- README | 37 +- README.CVS | 29 - TODO | 4 - aclocal.m4 | 2 +- auth/Makefile | 2 +- auth/auth.c | 49 +- libnetfs/get-source.c => auth/auth.h | 22 +- auth/auth_mig.h | 5 - auth/authmutations.h | 6 - auth/mig-decls.h | 48 + libdiskfs/get-source.c => auth/mig-mutate.h | 19 +- benchmarks/Makefile | 1 - boot/Makefile | 8 +- boot/boot.c | 339 ++-- boot/boot_script.h | 4 - config.make.in | 15 +- configure.ac | 64 +- console-client/Makefile | 12 +- console-client/bdf.c | 2 +- console-client/bdf.h | 2 +- console-client/console.c | 26 +- console-client/current-vcs.c | 9 +- console-client/input.h | 2 +- console-client/timer.c | 1 - console-client/timer.h | 2 +- console-client/trans.c | 45 +- console-client/unicode.h | 1 - console-client/vga-dynafont.c | 17 +- console-client/vga-dynafont.h | 2 +- console-client/vga-hw.h | 5 + console-client/vga-support.c | 56 +- console-client/vga.c | 12 +- console-client/xkb/README | 2 +- console-client/xkb/TODO | 4 +- console-client/xkb/kstoucs.c | 41 +- console-client/xkb/parser.y | 6 +- console-client/xkb/xkb-data/keymap/hurd | 182 +- console-client/xkb/xkb-data/types/hurd | 1 - console-client/xkb/xkb.c | 9 +- console-client/xkb/xkb.h | 2 +- console-client/xkb/xkbdata.c | 6 +- console-client/xkb/xkbtimer.c | 2 +- console/console.c | 40 +- console/display.c | 93 +- console/hurd.ti | 6 +- console/input.c | 2 +- console/input.h | 2 +- console/mutations.h | 11 +- console/pager.c | 33 +- console/priv.h | 41 - daemons/Makefile | 4 +- daemons/getty.c | 87 +- daemons/lmail.c | 2 +- daemons/rc.sh | 12 +- daemons/{runsystem.sh => runsystem.hurd} | 0 daemons/runsystem.sh | 79 +- defpager/Makefile | 1 - defpager/backing.c | 1 - defpager/defpager.c | 3 +- doc/Makefile | 4 +- doc/hurd.texi | 68 +- doc/navigating | 3 +- exec/Makefile | 4 +- exec/elfcore.c | 30 +- exec/exec.c | 112 +- exec/execmutations.h | 15 +- exec/hashexec.c | 25 +- exec/hostarch.c | 123 +- exec/main.c | 203 ++- exec/mig-decls.h | 46 + exec/priv.h | 2 +- ext2fs/Makefile | 2 +- ext2fs/dir.c | 113 +- ext2fs/ext2fs.c | 16 +- ext2fs/ext2fs.h | 34 +- ext2fs/getblk.c | 65 +- ext2fs/hyper.c | 19 +- ext2fs/ialloc.c | 16 +- ext2fs/inode.c | 232 +-- ext2fs/pager.c | 159 +- ext2fs/storeinfo.c | 1 + ext2fs/truncate.c | 16 +- fatfs/Makefile | 2 +- fatfs/dir.c | 15 +- fatfs/fat.h | 2 +- fatfs/fatfs.h | 20 +- fatfs/inode.c | 252 +-- fatfs/main.c | 9 +- fatfs/pager.c | 99 +- fatfs/virt-inode.c | 6 - fstests/Makefile | 1 - fstests/fdtests.c | 24 +- fstests/fstests.c | 24 +- fstests/opendisk.c | 2 - ftpfs/dir.c | 24 +- ftpfs/netfs.c | 2 +- gitlog-to-changelog | 432 +++++ hurd/console.h | 2 +- hurd/default_pager.defs | 9 +- hurd/exec_startup.defs | 6 +- hurd/fs.defs | 19 + hurd/fsys.defs | 21 +- hurd/gensym.awk | 1 - hurd/hurd_types.defs | 146 +- hurd/hurd_types.h | 3 + hurd/ifsock.defs | 1 - hurd/iioctl.defs | 4 + hurd/interrupt.defs | 7 +- hurd/io.defs | 2 +- hurd/paths.h | 5 +- hurd/process.defs | 17 +- hurd/process_reply.defs | 2 +- hurd/process_request.defs | 7 +- hurd/shared.h | 3 +- hurd/startup.defs | 1 - hurd/startup_notify.defs | 2 - hurd/term.defs | 18 +- include/pids.h | 7 +- init/Makefile | 15 +- init/init.c | 1617 +----------------- init/stubs.c | 139 -- isofs/EXTENSIONS | 1 - isofs/Makefile | 2 +- isofs/ext.c | 2 - isofs/inode.c | 272 +-- isofs/isofs.h | 13 +- isofs/lookup.c | 22 +- isofs/main.c | 17 +- isofs/pager.c | 2 +- isofs/rr.c | 6 +- libcons/demuxer.c | 1 - libcons/extra-version.c | 2 +- libcons/init-loop.c | 1 - libcons/mutations.h | 2 +- libcons/priv.h | 6 + libcons/vcons-add.c | 2 +- libcons/vcons-remove.c | 2 +- libcons/vcons-scrollback.c | 1 - libdirmgt/dirmgt.h | 2 - libdiskfs/Makefile | 5 +- libdiskfs/boot-start.c | 83 +- libdiskfs/conch-fetch.c | 1 - libdiskfs/demuxer.c | 45 +- libdiskfs/dir-init.c | 3 +- libdiskfs/dir-link.c | 26 +- libdiskfs/dir-lookup.c | 164 +- libdiskfs/dir-mkfile.c | 24 +- libdiskfs/dir-readdir.c | 24 +- libdiskfs/dir-rename.c | 1 - libdiskfs/dir-renamed.c | 11 +- libdiskfs/dir-unlink.c | 20 +- libdiskfs/disk-pager.c | 36 +- libdiskfs/diskfs-pager.h | 1 + libdiskfs/diskfs.h | 213 ++- libdiskfs/extra-version.c | 2 +- libdiskfs/file-chflags.c | 8 + libdiskfs/file-chg.c | 2 +- libdiskfs/file-chmod.c | 1 + libdiskfs/file-exec.c | 24 +- .../{fsys-get-children.c => file-get-children.c} | 25 +- libdiskfs/file-get-fs-opts.c | 1 + libdiskfs/{fsys-get-source.c => file-get-source.c} | 15 +- libdiskfs/file-get-trans.c | 36 +- libdiskfs/file-get-transcntl.c | 16 +- libdiskfs/file-getcontrol.c | 14 +- libdiskfs/file-getfh.c | 2 +- libdiskfs/file-lock-stat.c | 24 +- libdiskfs/file-lock.c | 26 +- libdiskfs/file-set-size.c | 2 +- libdiskfs/file-set-trans.c | 74 +- libdiskfs/file-statfs.c | 4 +- libdiskfs/file-syncfs.c | 6 +- libdiskfs/fsmutations.h | 23 +- libdiskfs/fsys-getfile.c | 12 +- libdiskfs/fsys-getroot.c | 95 +- libdiskfs/fsys-goaway.c | 33 +- libdiskfs/fsys-options.c | 16 +- libdiskfs/fsys-startup.c | 25 +- libdiskfs/fsys-syncfs.c | 11 +- libdiskfs/get-source.c | 11 +- libdiskfs/ifsock.c | 3 +- libdiskfs/init-first.c | 24 +- libdiskfs/init-init.c | 30 +- libdiskfs/init-main.c | 24 +- libdiskfs/init-startup.c | 39 +- libdiskfs/io-async.c | 1 - libdiskfs/io-duplicate.c | 3 + libdiskfs/io-map.c | 1 - libdiskfs/io-modes-get.c | 1 - libdiskfs/io-reauthenticate.c | 5 + libdiskfs/io-restrict-auth.c | 3 + libdiskfs/io-stubs.c | 1 - libdiskfs/io-version.c | 24 +- libdiskfs/io-write.c | 1 - libdiskfs/lookup.c | 31 - libdiskfs/name-cache.c | 409 +++-- libdiskfs/node-cache.c | 259 +++ libdiskfs/node-drop.c | 13 +- libdiskfs/node-make.c | 43 +- libdiskfs/node-nput.c | 50 +- libdiskfs/node-nputl.c | 12 +- libdiskfs/node-nref.c | 9 +- libdiskfs/node-nrefl.c | 4 +- libdiskfs/node-nrele.c | 48 +- libdiskfs/node-nrelel.c | 9 +- libdiskfs/node-times.c | 24 +- libdiskfs/node-update.c | 24 +- libdiskfs/opts-std-startup.c | 2 +- libdiskfs/peropen-make.c | 2 +- libdiskfs/peropen-rele.c | 21 +- libdiskfs/priv.h | 4 +- libdiskfs/protid-make.c | 10 +- libdiskfs/protid-rele.c | 2 - libdiskfs/readonly-changed.c | 2 +- libdiskfs/shutdown.c | 24 +- libdiskfs/sync-default.c | 2 +- libdiskfs/validate-author.c | 2 +- libdiskfs/validate-flags.c | 2 +- libdiskfs/validate-group.c | 2 +- libdiskfs/validate-mode.c | 2 +- libdiskfs/validate-owner.c | 2 +- libdiskfs/validate-rdev.c | 2 +- libfshelp/fetch-root.c | 6 +- libfshelp/fshelp.h | 27 +- libfshelp/get-identity.c | 66 +- libfshelp/lock-acquire.c | 122 +- libfshelp/lock-init.c | 24 +- libfshelp/set-active.c | 1 - libfshelp/start-translator-long.c | 17 +- libfshelp/start-translator.c | 2 +- libfshelp/transbox-init.c | 1 - libfshelp/translator-list.c | 74 +- libftpconn/create.c | 2 +- libftpconn/names.c | 1 - libftpconn/open.c | 2 +- libftpconn/unix.c | 4 +- libihash/ihash.c | 247 ++- libihash/ihash.h | 116 +- libiohelp/handle_io_release_conch.c | 1 - libiohelp/initialize_conch.c | 1 - libiohelp/iouser-free.c | 2 - libiohelp/return-buffer.c | 2 +- libnetfs/Makefile | 2 +- libnetfs/demuxer.c | 34 +- libnetfs/dir-link.c | 2 - libnetfs/dir-lookup.c | 58 +- libnetfs/dir-mkfile.c | 1 - libnetfs/dir-rename.c | 1 - libnetfs/drop-node.c | 2 - libnetfs/file-chauthor.c | 1 - .../{fsys-get-children.c => file-get-children.c} | 24 +- libnetfs/{fsys-get-source.c => file-get-source.c} | 15 +- libnetfs/file-get-storage-info-default.c | 2 +- libnetfs/file-getcontrol.c | 2 +- libnetfs/file-getlinknode.c | 2 - libnetfs/file-set-size.c | 3 +- libnetfs/file-set-translator.c | 20 +- libnetfs/fsstubs.c | 1 + libnetfs/fsys-get-options.c | 6 +- libnetfs/fsys-getroot.c | 5 +- libnetfs/fsys-goaway.c | 10 +- libnetfs/fsys-set-options.c | 11 +- libnetfs/fsys-syncfs.c | 2 +- libnetfs/fsysstubs.c | 8 +- libnetfs/get-source.c | 4 +- libnetfs/init-init.c | 3 + libnetfs/init-loop.c | 1 - libnetfs/io-get-icky-async-id.c | 1 - libnetfs/io-reauthenticate.c | 18 +- libnetfs/io-seek.c | 1 - libnetfs/io-stat.c | 1 - libnetfs/io-version.c | 24 +- libnetfs/io-write.c | 2 - libnetfs/make-node.c | 29 +- libnetfs/make-peropen.c | 1 - libnetfs/modes.h | 1 - libnetfs/mutations.h | 13 +- libnetfs/netfs.h | 42 +- libnetfs/nput.c | 1 - libnetfs/priv.h | 26 + libnetfs/release-peropen.c | 5 + libnetfs/set-get-trans.c | 4 +- libnetfs/shutdown.c | 24 +- libnetfs/trans-callback.c | 5 +- libpager/Makefile | 11 +- libpager/chg-compl.c | 17 +- libpager/data-request.c | 14 +- libpager/data-return.c | 26 +- libpager/data-unlock.c | 14 +- libpager/demuxer.c | 416 ++++- libpager/lock-completed.c | 11 +- libnetfs/get-source.c => libpager/mig-decls.h | 36 +- libdiskfs/get-source.c => libpager/mig-mutate.h | 19 +- libpager/no-senders.c | 43 - libpager/notify-stubs.c | 76 - libpager/object-init.c | 12 +- libpager/object-terminate.c | 18 +- libpager/offer-page.c | 1 - libpager/pagemap.c | 2 +- libpager/pager-attr.c | 13 +- libpager/pager-create.c | 4 - libpager/pager-flush.c | 1 - libpager/pager-memcpy.c | 2 + libpager/pager-return.c | 1 - libpager/pager-shutdown.c | 1 - libpager/pager-sync.c | 1 - libpager/pager.h | 37 +- libpager/priv.h | 8 - libpager/queue.h | 69 + libpager/seqnos.c | 69 - libpager/stubs.c | 18 +- libpipe/Makefile | 1 - libpipe/pipe.c | 33 +- libpipe/pq.c | 12 +- libpipe/pq.h | 2 +- libports/Makefile | 5 +- libports/begin-rpc.c | 2 - libports/bucket-iterate.c | 61 +- libports/claim-right.c | 6 +- libports/class-iterate.c | 10 +- libports/complete-deallocate.c | 24 +- libports/count-class.c | 3 - libports/create-bucket.c | 7 +- libports/create-class.c | 1 - libports/create-internal.c | 47 +- libports/create-port-noinstall.c | 3 - libports/create-port.c | 3 - libports/dead-name.c | 2 +- libports/destroy-right.c | 61 +- libnetfs/get-source.c => libports/extern-inline.c | 14 +- libports/get-right.c | 2 +- libports/import-port.c | 28 +- libports/inhibit-all-rpcs.c | 28 +- libports/inhibit-bucket-rpcs.c | 3 +- libports/inhibit-class-rpcs.c | 29 +- libports/init.c | 7 +- libports/interrupt-notified-rpcs.c | 1 - libports/interrupt-operation.c | 18 +- libports/lookup-port.c | 31 +- libports/manage-multithread.c | 167 +- libports/manage-one-thread.c | 34 +- libports/mig-decls.h | 46 + libports/mig-mutate.h | 36 + libports/notify-dead-name.c | 5 +- libports/notify-msg-accepted.c | 3 +- libports/notify-no-senders.c | 5 +- libports/notify-port-deleted.c | 3 +- libports/notify-port-destroyed.c | 3 +- libports/notify-send-once.c | 2 +- libports/port-deref-deferred.c | 161 ++ libports/port-deref-deferred.h | 89 + libports/port-deref-weak.c | 11 +- libports/port-deref.c | 36 +- libports/port-ref-weak.c | 6 +- libports/port-ref.c | 8 +- libports/ports.h | 112 +- libports/reallocate-from-external.c | 22 +- libports/reallocate-port.c | 19 +- libports/resume-all-rpcs.c | 2 - libports/resume-class-rpcs.c | 1 - libports/resume-port-rpcs.c | 3 - libports/transfer-right.c | 29 +- libps/fmt.c | 15 + libps/procstat.c | 23 +- libps/ps.h | 3 +- libps/spec.c | 10 +- libshouldbeinlibc/Makefile | 8 +- libshouldbeinlibc/cacheq.c | 4 +- libshouldbeinlibc/canon-host.c | 1 - libshouldbeinlibc/fsysops.c | 1 + libshouldbeinlibc/idvec-auth.c | 1 + libshouldbeinlibc/idvec-impgids.c | 14 +- libshouldbeinlibc/idvec-rep.c | 4 +- libshouldbeinlibc/idvec-verify.c | 7 +- libshouldbeinlibc/idvec.c | 5 +- libshouldbeinlibc/idvec.h | 1 - libshouldbeinlibc/localhost.c | 2 +- libshouldbeinlibc/maptime.c | 17 +- libshouldbeinlibc/maptime.h | 2 + libshouldbeinlibc/nullauth.c | 2 - libshouldbeinlibc/portxlate.c | 14 +- .../get-source.c => libshouldbeinlibc/refcount.c | 13 +- libshouldbeinlibc/refcount.h | 326 ++++ libshouldbeinlibc/shared-dom.c | 3 - libshouldbeinlibc/timefmt.c | 6 +- libshouldbeinlibc/ugids-argp.c | 3 +- libshouldbeinlibc/ugids-auth.c | 2 +- libshouldbeinlibc/ugids-imply.c | 3 +- libshouldbeinlibc/ugids-merge.c | 3 +- libshouldbeinlibc/ugids-subtract.c | 4 +- libshouldbeinlibc/ugids-verify-auth.c | 7 +- libshouldbeinlibc/ugids-verify.c | 7 +- libshouldbeinlibc/ugids.c | 5 +- libshouldbeinlibc/ugids.h | 2 + libshouldbeinlibc/wire.c | 14 +- libshouldbeinlibc/wire.h | 1 - libstore/Makefile | 22 +- libstore/argp.c | 2 +- libstore/do-bunzip2.c | 1778 +------------------- libstore/do-gunzip.c | 80 + libstore/enc.c | 4 +- libstore/gunzip.c | 27 +- libstore/gzip.h | 315 ---- libstore/inflate.c | 954 ----------- libstore/kids.c | 2 +- libstore/memobj.c | 1 + libstore/part.c | 11 + libstore/remap.c | 2 +- libstore/tailor.h | 14 - libstore/unzip.c | 199 --- libstore/unzipstore.c | 6 +- libstore/util.c | 257 +-- libthreads/Makefile.GNU | 1 - libthreads/Makefile.GNU2 | 1 - libthreads/alpha/lock.S | 1 - libthreads/alpha/thread.c | 2 +- libthreads/cancel-cond.c | 34 +- libthreads/cthreads.c | 12 +- libthreads/lockfile.c | 3 + libtreefs/Makefile | 1 - libtreefs/fsys.c | 4 +- libtreefs/s-file.c | 2 + libtreefs/s-fsys.c | 1 - libtreefs/treefs-hooks.h | 4 +- libtrivfs/Makefile | 12 +- libtrivfs/cntl-classes.c | 22 - libtrivfs/cntl-create.c | 1 - libtrivfs/demuxer.c | 55 +- libtrivfs/file-access.c | 1 + libtrivfs/file-chauthor.c | 1 + libtrivfs/file-chflags.c | 1 + libtrivfs/file-chg.c | 1 + libtrivfs/file-chmod.c | 1 + libtrivfs/file-chown.c | 1 + libtrivfs/file-exec.c | 1 + .../{fsys-get-children.c => file-get-children.c} | 5 +- libtrivfs/file-get-fs-options.c | 1 + libtrivfs/{fsys-get-source.c => file-get-source.c} | 7 +- libtrivfs/file-get-storage-info.c | 1 + libtrivfs/file-get-trans.c | 1 + libtrivfs/file-get-transcntl.c | 1 + libtrivfs/file-getcontrol.c | 1 + libtrivfs/file-getfh.c | 1 + libtrivfs/file-getlinknode.c | 1 + libtrivfs/file-lock.c | 1 + libtrivfs/file-reparent.c | 2 + libtrivfs/file-set-size.c | 1 + libtrivfs/file-set-trans.c | 1 + libtrivfs/file-statfs.c | 3 +- libtrivfs/file-sync.c | 1 + libtrivfs/file-syncfs.c | 1 + libtrivfs/file-utimes.c | 1 + libtrivfs/fsys-forward.c | 1 + libtrivfs/fsys-get-options.c | 1 + libtrivfs/fsys-getroot.c | 25 +- libtrivfs/fsys-goaway.c | 25 +- libtrivfs/fsys-set-options.c | 1 + libtrivfs/fsys-stubs.c | 25 +- libtrivfs/fsys-syncfs.c | 1 + libtrivfs/get-source.c | 4 +- libtrivfs/io-async-icky.c | 25 +- libtrivfs/io-async.c | 25 +- libtrivfs/io-duplicate.c | 25 +- libtrivfs/io-identity.c | 1 + libtrivfs/io-map.c | 25 +- libtrivfs/io-modes-get.c | 25 +- libtrivfs/io-modes-off.c | 25 +- libtrivfs/io-modes-on.c | 25 +- libtrivfs/io-modes-set.c | 25 +- libtrivfs/io-owner-get.c | 25 +- libtrivfs/io-owner-mod.c | 25 +- libtrivfs/io-pathconf.c | 1 + libtrivfs/io-read.c | 1 + libtrivfs/io-readable.c | 1 + libtrivfs/io-reauthenticate.c | 33 +- libtrivfs/io-restrict-auth.c | 29 +- libtrivfs/io-revoke.c | 1 + libtrivfs/io-seek.c | 1 + libtrivfs/io-select.c | 25 +- libtrivfs/io-stat.c | 25 +- libtrivfs/io-stubs.c | 25 +- libtrivfs/io-version.c | 1 + libtrivfs/io-write.c | 1 + libtrivfs/mig-decls.h | 119 ++ libtrivfs/{fsmutations.h => mig-mutate.h} | 10 +- libtrivfs/migsupport.c | 86 - libtrivfs/open.c | 2 +- libtrivfs/protid-classes.c | 22 - libtrivfs/protid-clean.c | 35 +- libtrivfs/protid-dup.c | 5 +- libtrivfs/times.c | 4 - libtrivfs/trivfs.h | 67 +- mach-defpager/Makefile | 6 +- mach-defpager/default_pager.c | 710 +++----- mach-defpager/file_io.h | 6 +- mach-defpager/kalloc.c | 26 +- mach-defpager/main.c | 2 +- libnetfs/get-source.c => mach-defpager/mig-decls.h | 28 +- .../get-source.c => mach-defpager/mig-mutate.h | 19 +- mach-defpager/priv.h | 200 +++ mach-defpager/queue.h | 10 +- mach-defpager/setup.c | 10 +- mach-defpager/wiring.c | 4 +- nfs/cache.c | 1 - nfs/main.c | 15 +- nfsd/Makefile | 1 - nfsd/ops.c | 2 +- nfsd/xdr.c | 2 +- pfinet/Makefile | 7 +- pfinet/dummy.c | 4 - pfinet/ethernet.c | 70 +- pfinet/glue-include/asm/uaccess.h | 2 +- pfinet/glue-include/linux/interrupt.h | 2 + pfinet/iioctl-ops.c | 42 +- pfinet/io-ops.c | 5 +- pfinet/linux-src/arch/i386/lib/checksum.S | 2 +- pfinet/linux-src/arch/i386/lib/old-checksum.c | 2 - pfinet/linux-src/arch/s390/lib/checksum.c | 1 - pfinet/linux-src/arch/sparc64/lib/checksum.S | 1 - pfinet/linux-src/include/asm-s390/checksum.h | 2 - pfinet/linux-src/include/linux/busmouse.h | 1 - pfinet/linux-src/include/linux/coda.h | 3 +- pfinet/linux-src/include/linux/digiPCI.h | 5 - pfinet/linux-src/include/linux/dmascc.h | 1 - pfinet/linux-src/include/linux/efs_dir.h | 1 - pfinet/linux-src/include/linux/efs_fs.h | 1 - pfinet/linux-src/include/linux/efs_fs_i.h | 1 - pfinet/linux-src/include/linux/efs_fs_sb.h | 1 - pfinet/linux-src/include/linux/efs_vh.h | 1 - pfinet/linux-src/include/linux/epca.h | 1 - pfinet/linux-src/include/linux/hayesesp.h | 1 - pfinet/linux-src/include/linux/ioctl.h | 1 - pfinet/linux-src/include/linux/ipc.h | 2 - pfinet/linux-src/include/linux/irda.h | 4 - pfinet/linux-src/include/linux/isicom.h | 1 - pfinet/linux-src/include/linux/kmod.h | 1 - pfinet/linux-src/include/linux/locks.h | 1 - pfinet/linux-src/include/linux/lp_intern.h | 1 - pfinet/linux-src/include/linux/lp_mfc.h | 1 - pfinet/linux-src/include/linux/ncp_fs_sb.h | 1 - pfinet/linux-src/include/linux/ntfs_fs.h | 1 - pfinet/linux-src/include/linux/nubus.h | 1 - pfinet/linux-src/include/linux/route.h | 1 - pfinet/linux-src/include/linux/sdla_fr.h | 1 - pfinet/linux-src/include/linux/sdlapci.h | 1 - pfinet/linux-src/include/linux/sdlasfm.h | 1 - pfinet/linux-src/include/linux/serial_reg.h | 1 - pfinet/linux-src/include/linux/sysv_fs.h | 1 - pfinet/linux-src/include/linux/sysv_fs_i.h | 1 - pfinet/linux-src/include/linux/sysv_fs_sb.h | 1 - pfinet/linux-src/include/linux/tpqic02.h | 1 - pfinet/linux-src/include/linux/tty_flip.h | 7 - pfinet/linux-src/include/linux/vmalloc.h | 1 - pfinet/linux-src/include/linux/wanpipe.h | 1 - pfinet/linux-src/include/net/addrconf.h | 2 + pfinet/linux-src/include/net/br.h | 3 - pfinet/linux-src/include/net/inet_common.h | 2 - pfinet/linux-src/include/net/ipv6.h | 3 - pfinet/linux-src/include/net/llc.h | 1 - pfinet/linux-src/include/net/llc_name.h | 1 - pfinet/linux-src/include/net/llccall.h | 1 - pfinet/linux-src/include/net/neighbour.h | 2 - pfinet/linux-src/include/net/rarp.h | 1 - pfinet/linux-src/include/net/scm.h | 1 - pfinet/linux-src/net/core/dev_mcast.c | 1 - pfinet/linux-src/net/ipv4/Config.in | 1 - pfinet/linux-src/net/ipv4/af_inet.c | 1 + pfinet/linux-src/net/ipv4/devinet.c | 2 + pfinet/linux-src/net/ipv4/fib_frontend.c | 1 - pfinet/linux-src/net/ipv4/fib_hash.c | 2 +- pfinet/linux-src/net/ipv4/igmp.c | 1 - pfinet/linux-src/net/ipv4/ip_input.c | 1 - pfinet/linux-src/net/ipv4/ip_masq_quake.c | 2 - pfinet/linux-src/net/ipv4/ip_output.c | 1 - pfinet/linux-src/net/ipv4/tcp.c | 59 +- pfinet/linux-src/net/ipv4/tcp_input.c | 3 + pfinet/linux-src/net/ipv4/tcp_output.c | 1 + pfinet/linux-src/net/ipv4/timer.c | 1 - pfinet/linux-src/net/ipv4/utils.c | 1 - pfinet/linux-src/net/ipv6/exthdrs.c | 1 - pfinet/linux-src/net/ipv6/ip6_fib.c | 2 - pfinet/loopback.c | 7 + pfinet/main.c | 148 +- pfinet/mig-decls.h | 67 + pfinet/{mutations.h => mig-mutate.h} | 12 +- pfinet/misc.c | 26 - pfinet/options.c | 352 +++- pfinet/pfinet.h | 16 +- pfinet/sched.c | 7 +- pfinet/socket-ops.c | 2 +- pfinet/socket.c | 2 +- pfinet/timer-emul.c | 2 +- pfinet/tunnel.c | 5 +- pflocal/connq.c | 2 +- pflocal/io.c | 18 +- pflocal/mig-decls.h | 12 + pflocal/mig-mutate.h | 3 + pflocal/pflocal.c | 33 +- pflocal/sock.c | 20 +- pflocal/sock.h | 31 +- pflocal/socket.c | 17 +- pflocal/sserver.c | 25 +- proc/Makefile | 8 +- proc/hash.c | 35 +- proc/host.c | 37 +- proc/info.c | 24 +- proc/main.c | 141 +- proc/mgt.c | 268 ++- proc/mig-decls.h | 77 + libdiskfs/get-source.c => proc/mig-mutate.h | 31 +- proc/msg.c | 4 +- proc/notify.c | 50 +- proc/pgrp.c | 32 +- proc/proc.h | 28 +- proc/proc_exc.defs | 12 +- procfs/ChangeLog | 6 + {isofs => procfs}/Makefile | 16 +- procfs/TODO | 24 + procfs/dircat.c | 128 ++ libports/create-class.c => procfs/dircat.h | 42 +- procfs/main.c | 338 ++++ libports/init.c => procfs/main.h | 18 +- procfs/netfs.c | 461 +++++ procfs/process.c | 516 ++++++ libports/count-class.c => procfs/process.h | 25 +- procfs/procfs.c | 219 +++ procfs/procfs.h | 99 ++ procfs/procfs_dir.c | 134 ++ procfs/procfs_dir.h | 63 + procfs/proclist.c | 94 ++ libcons/extra-version.c => procfs/proclist.h | 13 +- procfs/rootdir.c | 730 ++++++++ libcons/extra-version.c => procfs/rootdir.h | 13 +- {isofs => random}/Makefile | 17 +- random/TODO | 11 + random/gnupg-bithelp.h | 41 + random/gnupg-glue.h | 40 + random/gnupg-random.c | 810 +++++++++ random/gnupg-random.h | 47 + random/gnupg-rmd.h | 38 + random/gnupg-rmd160.c | 656 ++++++++ random/random.c | 650 +++++++ include/pids.h => random/random.h | 29 +- release/README | 2 - release/SOURCES.0.2 | 2 - release/dist-README | 3 - release/menu.lst | 1 - {init => startup}/Makefile | 12 +- init/init.c => startup/startup.c | 281 +++- storeio/dev.c | 6 +- storeio/io.c | 4 + storeio/pager.c | 28 +- storeio/storeio.c | 5 +- sutils/MAKEDEV.sh | 4 +- sutils/fstab.c | 109 +- term/Makefile | 4 + term/devio.c | 6 +- term/hurdio.c | 7 +- term/main.c | 24 +- term/mig-decls.h | 48 + term/mig-mutate.h | 36 + term/ptyio.c | 54 +- term/term.h | 5 + term/users.c | 319 ++-- tmpfs/dir.c | 24 +- tmpfs/node.c | 137 +- tmpfs/pager-stubs.c | 24 +- tmpfs/tmpfs.c | 41 +- tmpfs/tmpfs.h | 20 +- trans/Makefile | 24 +- trans/crash.c | 74 +- trans/fakeroot.c | 536 ++++-- trans/fifo.c | 5 +- trans/firmlink.c | 2 + trans/hello-mt.c | 30 +- trans/hello.c | 23 +- trans/ifsock.c | 18 +- trans/magic.c | 18 +- trans/mtab.c | 279 ++- trans/new-fifo.c | 32 +- trans/null.c | 5 + trans/password.c | 74 +- trans/proxy-defpager.c | 30 +- trans/streamio.c | 20 +- trans/symlink.c | 15 - usermux/node.c | 2 +- usermux/usermux.c | 5 +- utils/Makefile | 23 +- utils/fakeauth.c | 29 +- utils/fakeroot.sh | 10 +- utils/frobauth.c | 6 +- utils/gcore.c | 24 +- utils/login.c | 8 +- utils/mount.c | 46 +- utils/msgids.c | 252 +++ libdiskfs/get-source.c => utils/msgids.h | 23 +- utils/portinfo.c | 126 +- utils/remap.sh | 9 +- utils/rpcscan.c | 404 +++++ utils/rpctrace.c | 370 ++-- utils/settrans.c | 129 +- utils/storeinfo.c | 1 - utils/umount.c | 13 +- utils/vmstat.c | 3 +- utils/x.c | 4 +- 712 files changed, 17017 insertions(+), 12310 deletions(-) diff --cc Makefile index 9a5d4f3,ebda8aa..c97c1d7 --- a/Makefile +++ b/Makefile @@@ -28,21 -28,21 +28,26 @@@ include ./Makecon # Hurd libraries lib-subdirs = libshouldbeinlibc libihash libiohelp libports libthreads \ libpager libfshelp libdiskfs libtrivfs libps \ - libnetfs libpipe libstore libhurdbugaddr libftpconn libcons + libnetfs libpipe libstore libhurdbugaddr libftpconn libcons \ + libhurd-slab + +ifneq ($(LIBPCIACCESS),no) +lib-subdirs += libmachdev libddekit +endif # Hurd programs - prog-subdirs = auth proc exec init term \ + prog-subdirs = auth proc exec term \ ext2fs isofs tmpfs fatfs \ storeio pflocal pfinet defpager mach-defpager \ login daemons boot console \ hostmux usermux ftpfs trans \ console-client utils sutils \ - benchmarks fstests eth-multiplexer proc_proxy devnode - benchmarks fstests \ ++ benchmarks fstests eth-multiplexer proc_proxy \ + random \ + procfs \ + startup \ + init \ + devnode \ ifeq ($(HAVE_SUN_RPC),yes) prog-subdirs += nfs nfsd diff --cc boot/Makefile index 88d9006,0afdb43..497e2a3 --- a/boot/Makefile +++ b/boot/Makefile @@@ -19,13 -19,11 +19,13 @@@ dir := boo makemode := utility SRCS = mach-crt0.c boot.c ux.c sigvec.S syscall.S \ - boot_script.c userland-boot.c + boot_script.c userland-boot.c list.c mach_proxy.c - COMMON-OBJS = notifyServer.o ourdeviceServer.o \ + COMMON-OBJS = notifyServer.o deviceServer.o \ ioServer.o io_replyUser.o device_replyUser.o \ - termServer.o bootstrapServer.o boot_script.o userland-boot.o -OBJS = boot.o $(COMMON-OBJS) + termServer.o bootstrapServer.o boot_script.o userland-boot.o \ + ourmach_hostServer.o ourmachServer.o ourmach_portServer.o +OBJS = boot.o mach_host_impl.o mach_impl.o mach_port_impl.o \ + list.o mach_proxy.o $(COMMON-OBJS) UX-OBJS = mach-crt0.o uxboot.o sigvec.o syscall.o ux.o $(COMMON-OBJS) target = boot io-MIGSFLAGS=-DREPLY_PORTS diff --cc boot/boot.c index 5458ba6,f688860..5623107 --- a/boot/boot.c +++ b/boot/boot.c @@@ -118,14 -109,12 +118,14 @@@ typedef struct stat host_stat_t #endif /* UX */ - mach_port_t privileged_host_port, master_device_port, defpager; + mach_port_t privileged_host_port, master_device_port; mach_port_t pseudo_master_device_port; mach_port_t receive_set; - mach_port_t pseudo_console, pseudo_root; + mach_port_t pseudo_console, pseudo_root, pseudo_time; auth_t authserver; +struct port_info *pseudo_priv_host_pi; + struct store *root_store; pthread_spinlock_t queuelock = PTHREAD_SPINLOCK_INITIALIZER; @@@ -182,67 -169,57 +182,82 @@@ useropen (const char *name, int flags, return open (name, flags, mode); } - int - request_server (mach_msg_header_t *inp, - mach_msg_header_t *outp) - { - extern int io_server (mach_msg_header_t *, mach_msg_header_t *); - extern int device_server (mach_msg_header_t *, mach_msg_header_t *); - extern int notify_server (mach_msg_header_t *, mach_msg_header_t *); - extern int term_server (mach_msg_header_t *, mach_msg_header_t *); - /* extern int tioctl_server (mach_msg_header_t *, mach_msg_header_t *); */ - extern int bootstrap_server (mach_msg_header_t *, mach_msg_header_t *); - extern boolean_t mach_host_server (mach_msg_header_t *InHeadP, - mach_msg_header_t *OutHeadP); - extern boolean_t mach_server (mach_msg_header_t *InHeadP, - mach_msg_header_t *OutHeadP); - extern void bootstrap_compat (); + /* XXX: glibc should provide mig_reply_setup but does not. */ + /* Fill in default response. */ + void + mig_reply_setup ( + const mach_msg_header_t *in, + mach_msg_header_t *out) + { + static const mach_msg_type_t RetCodeType = { + /* msgt_name = */ MACH_MSG_TYPE_INTEGER_32, + /* msgt_size = */ 32, + /* msgt_number = */ 1, + /* msgt_inline = */ TRUE, + /* msgt_longform = */ FALSE, + /* msgt_deallocate = */ FALSE, + /* msgt_unused = */ 0 + }; + + #define InP (in) + #define OutP ((mig_reply_header_t *) out) + OutP->Head.msgh_bits = + MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(InP->msgh_bits), 0); + OutP->Head.msgh_size = sizeof *OutP; + OutP->Head.msgh_remote_port = InP->msgh_remote_port; + OutP->Head.msgh_local_port = MACH_PORT_NULL; + OutP->Head.msgh_seqno = 0; + OutP->Head.msgh_id = InP->msgh_id + 100; + OutP->RetCodeType = RetCodeType; + OutP->RetCode = MIG_BAD_ID; + #undef InP + #undef OutP + } - #if 0 - if (inp->msgh_local_port == bootport && boot_like_cmudef) + int + boot_demuxer (mach_msg_header_t *inp, + mach_msg_header_t *outp) + { + mig_routine_t routine; + mig_reply_setup (inp, outp); + if ((routine = io_server_routine (inp)) || + (routine = device_server_routine (inp)) || + (routine = notify_server_routine (inp)) || + (routine = term_server_routine (inp)) + /* (routine = tioctl_server_routine (inp)) */) { - if (inp->msgh_id == 999999) - { - bootstrap_compat (inp, outp); - return 1; - } - else - return bootstrap_server (inp, outp); + (*routine) (inp, outp); + return TRUE; } else - #endif - return (io_server (inp, outp) - || device_server (inp, outp) - || notify_server (inp, outp) - || term_server (inp, outp) - /* || tioctl_server (inp, outp) */); + return FALSE; } +int +mach_proxy_demuxer (mach_msg_header_t *inp, + mach_msg_header_t *outp) +{ + extern boolean_t mach_server + (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP); + extern boolean_t mach_host_server + (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP); + extern boolean_t mach_port_server + (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP); + extern int notify_server (mach_msg_header_t *, mach_msg_header_t *); + return (mach_server (inp, outp) + || mach_host_server (inp, outp) + || mach_port_server (inp, outp) + || notify_server (inp, outp)); +} + +void +mach_proxy_thread () +{ + ports_manage_port_operations_multithread (port_bucket, + mach_proxy_demuxer, + 30 * 1000, 0, 0); +} + vm_address_t load_image (task_t t, char *file) @@@ -664,49 -522,7 +638,37 @@@ main (int argc, char **argv, char **env if (err) error (4, err, "%s", root_store_name); - get_privileged_ports (&privileged_host_port, &master_device_port); + init_signal (); + if (!is_user) + { + get_privileged_ports (&privileged_host_port, &master_device_port); + defpager = MACH_PORT_NULL; - err = vm_set_default_memory_manager (privileged_host_port, &defpager); - if (err) - error (4, err, "vm_set_default_memory_manager"); + subhurd_privileged_host_port = privileged_host_port; + } + else + { + port_bucket = ports_create_bucket (); + task_portclass = ports_create_class (clean_pseudo_task, 0); + priv_host_portclass = ports_create_class (destroy_priv_host, 0); + other_portclass = ports_create_class (0, 0); + init_kernel_task (); + cthread_detach (cthread_fork ((cthread_fn_t) mach_proxy_thread, + (any_t) 0)); - { - mach_port_t priv_host; - get_privileged_ports (&priv_host, NULL); - defpager = MACH_PORT_NULL; - err = vm_set_default_memory_manager (priv_host, &defpager); - if (err) - error (4, err, "vm_set_default_memory_manager"); - mach_port_deallocate (mach_task_self (), priv_host); - } +// if (pager_file == NULL) +// error (4, 0, "The default pager must be specified for subhurd."); +// defpager = file_name_lookup (pager_file, O_EXEC, 0); +// if (defpager == MACH_PORT_NULL) +// error (4, errno, "file_name_look: %s", pager_file); + + /* Initialize the pseudo privileged host port. */ + err = ports_create_port (priv_host_portclass, port_bucket, + sizeof (struct port_info), + &pseudo_priv_host_pi); + if (err) + error (4, err, "fail to create the pseudo privileged host port"); + subhurd_privileged_host_port = ports_get_send_right (pseudo_priv_host_pi); + ports_port_deref (pseudo_priv_host_pi); + } strcat (bootstrap_args, "f"); @@@ -1085,80 -901,10 +1051,15 @@@ do_bootstrap_privileged_ports(bootstrap mach_port_t bootstrap; mach_port_t *hostp, *devicep; { - *hostp = privileged_host_port; - *devicep = pseudo_master_device_port; - return KERN_SUCCESS; + if (is_user) + /* I cannot use ports_get_right() here, + * because the port will be copied to the client. */ + *hostp = pseudo_priv_host_pi->port_right; + else + *hostp = privileged_host_port; + *devicep = pseudo_master_device_port; + return KERN_SUCCESS; } - - void - bootstrap_compat(in, out) - mach_msg_header_t *in, *out; - { - mig_reply_header_t *reply = (mig_reply_header_t *) out; - mach_msg_return_t mr; - - struct imsg { - mach_msg_header_t hdr; - mach_msg_type_t port_desc_1; - mach_port_t port_1; - mach_msg_type_t port_desc_2; - mach_port_t port_2; - } imsg; - - /* - * Send back the host and device ports. - */ - - imsg.hdr.msgh_bits = MACH_MSGH_BITS_COMPLEX | - MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(in->msgh_bits), 0); - /* msgh_size doesn't need to be initialized */ - imsg.hdr.msgh_remote_port = in->msgh_remote_port; - imsg.hdr.msgh_local_port = MACH_PORT_NULL; - /* msgh_seqno doesn't need to be initialized */ - imsg.hdr.msgh_id = in->msgh_id + 100; /* this is a reply msg */ - - imsg.port_desc_1.msgt_name = MACH_MSG_TYPE_COPY_SEND; - imsg.port_desc_1.msgt_size = (sizeof(mach_port_t) * 8); - imsg.port_desc_1.msgt_number = 1; - imsg.port_desc_1.msgt_inline = TRUE; - imsg.port_desc_1.msgt_longform = FALSE; - imsg.port_desc_1.msgt_deallocate = FALSE; - imsg.port_desc_1.msgt_unused = 0; - - if (is_user) - imsg.port_1 = pseudo_priv_host_pi->port_right; - else - imsg.port_1 = privileged_host_port; - - imsg.port_desc_2 = imsg.port_desc_1; - - imsg.port_desc_2.msgt_name = MACH_MSG_TYPE_MAKE_SEND; - imsg.port_2 = pseudo_master_device_port; - - /* - * Send the reply message. - * (mach_msg_server can not do this, because the reply - * is not in standard format.) - */ - - mr = mach_msg(&imsg.hdr, MACH_SEND_MSG, - sizeof imsg, 0, MACH_PORT_NULL, - MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); - if (mr != MACH_MSG_SUCCESS) - (void) mach_port_deallocate(mach_task_self (), - imsg.hdr.msgh_remote_port); - - /* - * Tell mach_msg_server to do nothing. - */ - - reply->RetCode = MIG_NO_REPLY; - } /* Implementation of device interface */ diff --cc config.make.in index 5d861ef,0f1390a..20ab344 --- a/config.make.in +++ b/config.make.in @@@ -63,12 -65,6 +65,9 @@@ gnu89-inline-CFLAGS = @libc_cv_gnu89_in # `yes' or `no' to indicate if ld --version-script is available. VERSIONING = @VERSIONING@ - # If a separate libcrypt is available, use it. - LIBCRYPT = @LIBCRYPT@ - +# Whether pcap support is available. +LIBPCAP = @LIBPCAP@ + # How to link against Parted libraries, if at all. PARTED_LIBS = @PARTED_LIBS@ diff --cc libdiskfs/dir-lookup.c index e566a10,75df9b8..d3bc382 --- a/libdiskfs/dir-lookup.c +++ b/libdiskfs/dir-lookup.c @@@ -465,38 -508,27 +508,31 @@@ diskfs_S_dir_lookup (struct protid *dir && (fshelp_isowner (&np->dn_stat, dircred->user) == EPERM)) flags &= ~O_NOATIME; - error = diskfs_make_peropen (np, (flags &~OPENONLY_STATE_MODES), + err = diskfs_make_peropen (np, (flags &~OPENONLY_STATE_MODES), dircred->po, &newpo); - if (! error) - { - error = diskfs_create_protid (newpo, dircred->user, &newpi); - if (error) - { - mutex_unlock(&np->lock); - diskfs_release_peropen (newpo); - } - } + if (! err) + err = diskfs_create_protid (newpo, dircred->user, &newpi); - if (! error) + if (! err) { - newpo = 0; if (flags & O_EXLOCK) - error = fshelp_acquire_lock (&np->userlock, &newpi->po->lock_status, + err = fshelp_acquire_lock (&np->userlock, &newpi->po->lock_status, &np->lock, LOCK_EX); else if (flags & O_SHLOCK) - error = fshelp_acquire_lock (&np->userlock, &newpi->po->lock_status, + err = fshelp_acquire_lock (&np->userlock, &newpi->po->lock_status, &np->lock, LOCK_SH); + if (error) + { + mutex_unlock(&np->lock); + ports_port_deref (newpi); /* Get rid of NEWPI. */ + } } - if (! error) + if (! err) { free (newpi->po->path); - if (dircred->po->path == NULL) + if (dircred->po->path == NULL || !strcmp (dircred->po->path,".")) { /* dircred is the root directory. */ newpi->po->path = relpath; diff --cc libfshelp/start-translator-long.c index 8c1c745,8b00e08..fe4a332 --- a/libfshelp/start-translator-long.c +++ b/libfshelp/start-translator-long.c @@@ -142,9 -298,13 +139,13 @@@ fshelp_start_translator_long (fshelp_op /* Ok, cool, we've got a running(?) program, now rendezvous with it if possible using the startup protocol on the bootstrap port... */ - err = service_fsys_startup(underlying_open_fn, cookie, bootstrap, - timeout, control, task); + err = fshelp_service_fsys_startup(underlying_open_fn, cookie, bootstrap, + timeout, task, control); + lose_task: + if (err) + task_terminate (task); + lose: if (!ports_moved) { diff --cc libports/manage-multithread.c index 0866d14,60743d9..971a867 --- a/libports/manage-multithread.c +++ b/libports/manage-multithread.c @@@ -18,9 -18,9 +18,10 @@@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <stdio.h> #include "ports.h" #include <assert.h> + #include <error.h> #include <stdio.h> #include <mach/message.h> #include <mach/thread_info.h> diff --cc libports/manage-one-thread.c index 124c6dc,b920338..22e9bc5 --- a/libports/manage-one-thread.c +++ b/libports/manage-one-thread.c @@@ -200,11 -103,21 +220,21 @@@ ports_manage_port_operations_one_threa status = 1; } + _ports_thread_quiescent (&bucket->threadpool, &thread); return status; } - + + /* XXX It is currently unsafe for most servers to terminate based on + inactivity because a request may arrive after a server has + started shutting down, causing the client to receive an error. + Prevent the service loop from terminating by setting TIMEOUT to + zero. */ + timeout = 0; + + _ports_thread_online (&bucket->threadpool, &thread); do - err = mach_msg_server_timeout (internal_demuxer, 0, bucket->portset, - timeout ? MACH_RCV_TIMEOUT : 0, timeout); + err = ported_mach_msg_server_timeout (internal_demuxer, 0, bucket->portset, + timeout ? MACH_RCV_TIMEOUT : 0, timeout); while (err != MACH_RCV_TIMED_OUT); + _ports_thread_offline (&bucket->threadpool, &thread); } diff --cc pfinet/main.c index 8f440ab,4bfa318..1c43247 --- a/pfinet/main.c +++ b/pfinet/main.c @@@ -452,13 -482,11 +482,13 @@@ trivfs_goaway (struct trivfs_control *c else { /* Stop new requests. */ - ports_inhibit_class_rpcs (trivfs_cntl_portclasses[0]); - ports_inhibit_class_rpcs (trivfs_protid_portclasses[0]); + ports_inhibit_class_rpcs (pfinet_cntl_portclasses[0]); + ports_inhibit_class_rpcs (pfinet_protid_portclasses[0]); ports_inhibit_class_rpcs (socketport_class); - if (ports_count_class (socketport_class) != 0) + int count = ports_count_class (socketport_class); + fprintf (stderr, "the count of socket port: %d\n", count); + if (count != 0) { /* We won't go away, so start things going again... */ ports_enable_class (socketport_class); diff --cc trans/proxy-defpager.c index 229ae9e,4fdeb35..0bc7e3a --- a/trans/proxy-defpager.c +++ b/trans/proxy-defpager.c @@@ -23,10 -23,10 +23,11 @@@ #include <error.h> #include <version.h> #include <hurd/paths.h> +#include <string.h> + #include "libtrivfs/trivfs_io_S.h" -#include "default_pager_S.h" -#include "default_pager_U.h" +#include "ourdefault_pager_S.h" +#include "ourdefault_pager_U.h" static mach_port_t real_defpager, dev_master; @@@ -45,12 -48,12 +49,14 @@@ allowed (mach_port_t port, int mode kern_return_t S_default_pager_object_create (mach_port_t default_pager, memory_object_t *memory_object, + mach_msg_type_name_t *memory_object_type, vm_size_t object_size) { + *memory_object_type = MACH_MSG_TYPE_COPY_SEND; - return allowed (default_pager, O_EXEC) + error_t err; + err = allowed (default_pager, O_EXEC) ?: default_pager_object_create (real_defpager, memory_object, object_size); + return err; } kern_return_t diff --cc utils/settrans.c index 8899b21,cd40c56..e20cff9 --- a/utils/settrans.c +++ b/utils/settrans.c @@@ -52,12 -48,12 +52,15 @@@ const char *argp_program_version = STAN static struct argp_option options[] = { {"active", 'a', 0, 0, "Start TRANSLATOR and set it as NODE's active translator" }, + {"start", 's', 0, 0, "Start the translator specified by the NODE's passive translator record and set it as NODE's active translator" }, {"passive", 'p', 0, 0, "Change NODE's passive translator record (default)" }, + {"interactive", 'i', 0, 0, "Run TRANSLATOR as a regular command " + "but still accept startup requests " + "so that child translators gets set to NODE" }, {"create", 'c', 0, 0, "Create NODE if it doesn't exist" }, {"dereference", 'L', 0, 0, "If a translator exists, put the new one on top"}, + {"pid-file", 'F', "FILENAME", 0, "When starting an active translator," + " write its pid to this file"}, {"pause", 'P', 0, 0, "When starting an active translator, prompt and" " wait for a newline on stdin before completing the startup handshake"}, {"timeout", 't',"SEC",0, "Timeout for translator startup, in seconds" @@@ -270,7 -108,9 +273,9 @@@ main(int argc, char *argv[] /* Various option flags. */ int passive = 0, active = 0, keep_active = 0, pause = 0, kill_active = 0, - orphan = 0; + orphan = 0, interactive = 0; + int start = 0; + char *pid_file = NULL; int excl = 0; int timeout = DEFAULT_TIMEOUT * 1000; /* ms */ char **chroot_command = 0; @@@ -298,8 -141,11 +306,12 @@@ return EINVAL; case 'a': active = 1; break; + case 's': + start = 1; + active = 1; /* start implies active */ + break; case 'p': passive = 1; break; + case 'i': interactive = 1; break; case 'k': keep_active = 1; break; case 'g': kill_active = 1; break; case 'x': excl = 1; break; @@@ -384,80 -222,26 +402,100 @@@ active_flags = FS_TRANS_SET | FS_TRANS_EXCL; } + if (interactive) + /* Interactive translators require special care when starting and + setting the translator, so it is an exclusive mode. */ + { + mach_port_t bootstrap; + cthread_t thread; + pid_t pid; + int status; + + /* The callback to start_translator opens NODE as a side effect. */ + error_t open_node (int flags, mach_port_t *underlying, + mach_msg_type_name_t *underlying_type, + task_t task, void *cookie) + { + node = file_name_lookup (node_name, flags | lookup_flags, 0666); + if (node == MACH_PORT_NULL) + { + error (0, errno, "%s", node_name); + return errno; + } + + *underlying = node; + *underlying_type = MACH_MSG_TYPE_COPY_SEND; + + return 0; + } + + error_t settrans (fsys_t control, task_t task, void *cookie) + { + error_t err; + + err = file_set_translator (node, passive_flags, active_flags, + goaway_flags, argz, argz_len, + control, MACH_MSG_TYPE_COPY_SEND); + if (err) + error (0, err, "%s", node_name); + + mach_port_deallocate (mach_task_self (), node); + return err; + } + + err = start_interactive_translator_service (open_node, NULL, + settrans, NULL, + &thread, &bootstrap); + if (err) + error (9, err, "starting translator service"); + + err = fork_interactive_translator (bootstrap, &pid); + if (err) + error (9, err, "forking child process"); + + if (pid == 0) + { + err = exec_interactive_translator (argz, argz_len); + error (10, err, "%s", argz); + } + + pid = waitpid (pid, &status, 0); + if (pid == -1) + error (10, errno, "waiting for child process"); + + mach_port_destroy (mach_task_self (), bootstrap); + cthread_join (thread); + + if (err) + error (10, err, "%s", argz); + else if (WIFEXITED (status)) + exit (WEXITSTATUS (status)); + else if (WIFSIGNALED (status)) + error (10, 0, "%s: %s", argz, strsignal (WTERMSIG (status))); + else + error (10, 0, "translator exited in an unknown fashion"); + } + + if (start) + { + /* Retrieve the passive translator record in argz. */ + mach_port_t node = file_name_lookup (node_name, lookup_flags, 0); + if (node == MACH_PORT_NULL) + error (4, errno, "%s", node_name); + + char buf[1024]; + argz = buf; + argz_len = sizeof (buf); + + err = file_get_translator (node, &argz, &argz_len); + if (err == EINVAL) + error (4, 0, "%s: no passive translator record found", node_name); + if (err) + error (4, err, "%s", node_name); + + mach_port_deallocate (mach_task_self (), node); + } + if ((active || chroot_command) && argz_len > 0) { /* Error during file lookup; we use this to avoid duplicating error -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hurd/hurd.git
