diff options
author | cvs2svn <> | 2014-08-13 23:31:15 +0400 |
---|---|---|
committer | cvs2svn <> | 2014-08-13 23:31:15 +0400 |
commit | 291e2acb25e6bbc6075fbaabf60a2e87e2084ceb (patch) | |
tree | 4401521d89543c78c9129689fac29a6e2426fd94 /winsup/cygwin/grp.cc | |
parent | a4a96eb436fc89b3277aaa0deb1fdef7a9498b08 (diff) |
This commit was manufactured by cvs2svn to create tag 'cygwin-cygwin-1_7_32-release
1_7_32-release'.
Sprout from master 2014-08-04 21:32:37 UTC Jon TURNEY <jon.turney@dronecode.org.uk> ' * libc/include/math.h: Also define M_PI etc. if _XOPEN_SOURCE is'
Cherrypick from master 2014-02-06 20:38:35 UTC Corinna Vinschen <corinna@vinschen.de> ' * fhandler_disk_file.cc (fhandler_disk_file::fchown): Fix typo in':
winsup/cygserver/Makefile.in
winsup/cygwin/Makefile.in
winsup/cygwin/autoload.cc
winsup/cygwin/cygheap.h
winsup/cygwin/cygserver.h
winsup/cygwin/errno.cc
winsup/cygwin/fhandler_registry.cc
winsup/cygwin/miscfuncs.h
winsup/cygwin/passwd.cc
winsup/cygwin/path.h
winsup/cygwin/pwdgrp.h
winsup/cygwin/sec_acl.cc
winsup/cygwin/sec_helper.cc
winsup/cygwin/security.cc
winsup/cygwin/security.h
winsup/cygwin/shared.cc
winsup/cygwin/uinfo.cc
winsup/cygwin/wincap.cc
winsup/cygwin/wincap.h
winsup/cygwin/winlean.h
winsup/cygwin/winsup.h
winsup/doc/cygwin.xsl
winsup/doc/faq-setup.xml
winsup/doc/faq-using.xml
winsup/doc/ntsec.xml
winsup/doc/pathnames.xml
winsup/utils/mkgroup.c
winsup/utils/mkpasswd.c
Cherrypick from master 2014-02-09 12:23:13 UTC Jon TURNEY <jon.turney@dronecode.org.uk> '2014-02-07 Jon TURNEY <jon.turney@dronecode.org.uk>':
winsup/utils/utils.xml
Cherrypick from cygwin-1_7_29-release-branchpoint 2014-08-13 19:31:14 UTC Yaakov Selkowitz <yselkowi@redhat.com> '* faq-what.xml (faq.what.who): CGF has retired. Remove mention of retired':
winsup/ChangeLog
winsup/Makefile.common
winsup/cygserver/ChangeLog
winsup/cygserver/bsd_helper.cc
winsup/cygserver/bsd_mutex.cc
winsup/cygserver/client.cc
winsup/cygserver/cygserver-config
winsup/cygserver/cygserver.cc
winsup/cygserver/process.cc
winsup/cygserver/setpwd.cc
winsup/cygserver/threaded_queue.cc
winsup/cygserver/transport_pipes.cc
winsup/cygwin/ChangeLog
winsup/cygwin/DevNotes
winsup/cygwin/common.din
winsup/cygwin/cpuid.h
winsup/cygwin/cygheap.cc
winsup/cygwin/cygheap_malloc.h
winsup/cygwin/cygserver_ipc.h
winsup/cygwin/cygtls.h
winsup/cygwin/cygwin.sc.in
winsup/cygwin/dcrt0.cc
winsup/cygwin/dir.cc
winsup/cygwin/dll_init.cc
winsup/cygwin/dtable.cc
winsup/cygwin/environ.cc
winsup/cygwin/exception.h
winsup/cygwin/exceptions.cc
winsup/cygwin/external.cc
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_console.cc
winsup/cygwin/fhandler_disk_file.cc
winsup/cygwin/fhandler_dsp.cc
winsup/cygwin/fhandler_floppy.cc
winsup/cygwin/fhandler_proc.cc
winsup/cygwin/fhandler_process.cc
winsup/cygwin/fhandler_procnet.cc
winsup/cygwin/fhandler_procsysvipc.cc
winsup/cygwin/fhandler_random.cc
winsup/cygwin/fhandler_socket.cc
winsup/cygwin/flock.cc
winsup/cygwin/gendef
winsup/cygwin/gmon.h
winsup/cygwin/grp.cc
winsup/cygwin/include/cygwin/config.h
winsup/cygwin/include/cygwin/core_dump.h
winsup/cygwin/include/cygwin/cygwin_dll.h
winsup/cygwin/include/cygwin/socket.h
winsup/cygwin/include/cygwin/version.h
winsup/cygwin/include/pthread.h
winsup/cygwin/include/sys/cygwin.h
winsup/cygwin/include/sys/file.h
winsup/cygwin/include/sys/strace.h
winsup/cygwin/libc/bsdlib.cc
winsup/cygwin/libc/fts.c
winsup/cygwin/libc/minires.c
winsup/cygwin/libc/rexec.cc
winsup/cygwin/libc/strptime.cc
winsup/cygwin/localtime.cc
winsup/cygwin/malloc_wrapper.cc
winsup/cygwin/miscfuncs.cc
winsup/cygwin/mount.cc
winsup/cygwin/net.cc
winsup/cygwin/ntea.cc
winsup/cygwin/path.cc
winsup/cygwin/pinfo.cc
winsup/cygwin/pseudo-reloc.cc
winsup/cygwin/regex/regcomp.c
winsup/cygwin/release/1.7.29
winsup/cygwin/release/1.7.30
winsup/cygwin/release/1.7.31
winsup/cygwin/release/1.7.32
winsup/cygwin/scandir.cc
winsup/cygwin/sec_auth.cc
winsup/cygwin/select.cc
winsup/cygwin/setlsapwd.cc
winsup/cygwin/shm.cc
winsup/cygwin/signal.cc
winsup/cygwin/sigproc.cc
winsup/cygwin/sigproc.h
winsup/cygwin/smallprint.cc
winsup/cygwin/spawn.cc
winsup/cygwin/strace.cc
winsup/cygwin/syscalls.cc
winsup/cygwin/thread.cc
winsup/cygwin/timer.cc
winsup/cygwin/tls_pbuf.cc
winsup/cygwin/tls_pbuf.h
winsup/cygwin/tlsoffsets.h
winsup/cygwin/tlsoffsets64.h
winsup/cygwin/winf.cc
winsup/doc/ChangeLog
winsup/doc/faq-programming.xml
winsup/doc/faq-what.xml
winsup/doc/legal.xml
winsup/doc/new-features.xml
winsup/utils/ChangeLog
winsup/utils/Makefile.in
winsup/utils/minidumper.cc
winsup/utils/passwd.c
Cherrypick from cygnus 1999-05-03 07:29:06 UTC Richard Henderson <rth@redhat.com> '19990502 sourceware import':
README
config/mt-d30v
config/mt-ospace
etc/add-log.el
etc/add-log.vi
etc/configbuild.ein
etc/configbuild.fig
etc/configbuild.jin
etc/configbuild.tin
etc/configdev.ein
etc/configdev.fig
etc/configdev.jin
etc/configdev.tin
include/coff/sym.h
makefile.vms
Delete:
djunpack.bat
libgloss/ChangeLog
libgloss/Makefile.in
libgloss/README
libgloss/aarch64/Makefile.in
libgloss/aarch64/_exit.c
libgloss/aarch64/_kill.c
libgloss/aarch64/aclocal.m4
libgloss/aarch64/configure
libgloss/aarch64/configure.in
libgloss/aarch64/cpu-init/Makefile.in
libgloss/aarch64/cpu-init/aclocal.m4
libgloss/aarch64/cpu-init/configure
libgloss/aarch64/cpu-init/configure.in
libgloss/aarch64/cpu-init/rdimon-aem-el3.S
libgloss/aarch64/crt0.S
libgloss/aarch64/elf-aem-validation.specs
libgloss/aarch64/elf-aem-ve.specs
libgloss/aarch64/elf-rdimon.specs
libgloss/aarch64/ftruncate.c
libgloss/aarch64/libcfunc.c
libgloss/aarch64/svc.h
libgloss/aarch64/syscalls.c
libgloss/aarch64/truncate.c
libgloss/acinclude.m4
libgloss/aclocal.m4
libgloss/arm/Makefile.in
libgloss/arm/_exit.c
libgloss/arm/_kill.c
libgloss/arm/aclocal.m4
libgloss/arm/arm.h
libgloss/arm/coff-iq80310.specs
libgloss/arm/coff-pid.specs
libgloss/arm/coff-rdimon.specs
libgloss/arm/coff-rdpmon.specs
libgloss/arm/coff-redboot.ld
libgloss/arm/coff-redboot.specs
libgloss/arm/configure
libgloss/arm/configure.in
libgloss/arm/cpu-init/Makefile.in
libgloss/arm/cpu-init/rdimon-aem.S
libgloss/arm/crt0.S
libgloss/arm/elf-aprofile-validation.specs
libgloss/arm/elf-aprofile-ve.specs
libgloss/arm/elf-iq80310.specs
libgloss/arm/elf-linux.specs
libgloss/arm/elf-pid.specs
libgloss/arm/elf-rdimon.specs
libgloss/arm/elf-rdpmon.specs
libgloss/arm/elf-redboot.ld
libgloss/arm/elf-redboot.specs
libgloss/arm/ftruncate.c
libgloss/arm/libcfunc.c
libgloss/arm/linux-crt0.c
libgloss/arm/linux-syscall.h
libgloss/arm/linux-syscalls0.S
libgloss/arm/linux-syscalls1.c
libgloss/arm/redboot-crt0.S
libgloss/arm/redboot-syscalls.c
libgloss/arm/swi.h
libgloss/arm/syscall.h
libgloss/arm/syscalls.c
libgloss/arm/trap.S
libgloss/arm/truncate.c
libgloss/bfin/Makefile.in
libgloss/bfin/_exit.c
libgloss/bfin/aclocal.m4
libgloss/bfin/basiccrt.S
libgloss/bfin/bf504.ld
libgloss/bfin/bf506.ld
libgloss/bfin/bf512.ld
libgloss/bfin/bf514.ld
libgloss/bfin/bf516.ld
libgloss/bfin/bf518.ld
libgloss/bfin/bf522.ld
libgloss/bfin/bf523.ld
libgloss/bfin/bf524.ld
libgloss/bfin/bf525.ld
libgloss/bfin/bf526.ld
libgloss/bfin/bf527.ld
libgloss/bfin/bf531.ld
libgloss/bfin/bf532.ld
libgloss/bfin/bf533.ld
libgloss/bfin/bf534.ld
libgloss/bfin/bf536.ld
libgloss/bfin/bf537.ld
libgloss/bfin/bf538.ld
libgloss/bfin/bf539.ld
libgloss/bfin/bf542.ld
libgloss/bfin/bf544.ld
libgloss/bfin/bf547.ld
libgloss/bfin/bf548.ld
libgloss/bfin/bf549.ld
libgloss/bfin/bf561.ld
libgloss/bfin/bf561a.ld
libgloss/bfin/bf561b.ld
libgloss/bfin/bf561m.ld
libgloss/bfin/bf592.ld
libgloss/bfin/bf606.ld
libgloss/bfin/bf606c0.ld
libgloss/bfin/bf606c1.ld
libgloss/bfin/bf606m.ld
libgloss/bfin/bf607.ld
libgloss/bfin/bf607c0.ld
libgloss/bfin/bf607c1.ld
libgloss/bfin/bf607m.ld
libgloss/bfin/bf608.ld
libgloss/bfin/bf608c0.ld
libgloss/bfin/bf608c1.ld
libgloss/bfin/bf608m.ld
libgloss/bfin/bf609.ld
libgloss/bfin/bf609c0.ld
libgloss/bfin/bf609c1.ld
libgloss/bfin/bf609m.ld
libgloss/bfin/bfin-common-mc.ld
libgloss/bfin/bfin-common-mc0.ld
libgloss/bfin/bfin-common-sc.ld
libgloss/bfin/clear_cache_range.c
libgloss/bfin/configure
libgloss/bfin/configure.in
libgloss/bfin/crt0.S
libgloss/bfin/include/blackfin.h
libgloss/bfin/include/builtins.h
libgloss/bfin/include/ccblkfn.h
libgloss/bfin/include/cdefBF504.h
libgloss/bfin/include/cdefBF504F.h
libgloss/bfin/include/cdefBF506F.h
libgloss/bfin/include/cdefBF50x_base.h
libgloss/bfin/include/cdefBF512.h
libgloss/bfin/include/cdefBF514.h
libgloss/bfin/include/cdefBF516.h
libgloss/bfin/include/cdefBF518.h
libgloss/bfin/include/cdefBF51x_base.h
libgloss/bfin/include/cdefBF522.h
libgloss/bfin/include/cdefBF523.h
libgloss/bfin/include/cdefBF524.h
libgloss/bfin/include/cdefBF525.h
libgloss/bfin/include/cdefBF526.h
libgloss/bfin/include/cdefBF527.h
libgloss/bfin/include/cdefBF52x_base.h
libgloss/bfin/include/cdefBF531.h
libgloss/bfin/include/cdefBF532.h
libgloss/bfin/include/cdefBF533.h
libgloss/bfin/include/cdefBF534.h
libgloss/bfin/include/cdefBF535.h
libgloss/bfin/include/cdefBF536.h
libgloss/bfin/include/cdefBF537.h
libgloss/bfin/include/cdefBF538.h
libgloss/bfin/include/cdefBF539.h
libgloss/bfin/include/cdefBF53x.h
libgloss/bfin/include/cdefBF542.h
libgloss/bfin/include/cdefBF542M.h
libgloss/bfin/include/cdefBF544.h
libgloss/bfin/include/cdefBF544M.h
libgloss/bfin/include/cdefBF547.h
libgloss/bfin/include/cdefBF547M.h
libgloss/bfin/include/cdefBF548.h
libgloss/bfin/include/cdefBF548M.h
libgloss/bfin/include/cdefBF549.h
libgloss/bfin/include/cdefBF549M.h
libgloss/bfin/include/cdefBF54x_base.h
libgloss/bfin/include/cdefBF561.h
libgloss/bfin/include/cdefBF592-A.h
libgloss/bfin/include/cdefBF59x_base.h
libgloss/bfin/include/cdefBF606.h
libgloss/bfin/include/cdefBF607.h
libgloss/bfin/include/cdefBF608.h
libgloss/bfin/include/cdefBF609.h
libgloss/bfin/include/cdef_LPBlackfin.h
libgloss/bfin/include/cdefblackfin.h
libgloss/bfin/include/cplb.h
libgloss/bfin/include/cplbtab.h
libgloss/bfin/include/defBF504.h
libgloss/bfin/include/defBF504F.h
libgloss/bfin/include/defBF506F.h
libgloss/bfin/include/defBF50x_base.h
libgloss/bfin/include/defBF512.h
libgloss/bfin/include/defBF514.h
libgloss/bfin/include/defBF516.h
libgloss/bfin/include/defBF518.h
libgloss/bfin/include/defBF51x_base.h
libgloss/bfin/include/defBF522.h
libgloss/bfin/include/defBF523.h
libgloss/bfin/include/defBF524.h
libgloss/bfin/include/defBF525.h
libgloss/bfin/include/defBF526.h
libgloss/bfin/include/defBF527.h
libgloss/bfin/include/defBF52x_base.h
libgloss/bfin/include/defBF531.h
libgloss/bfin/include/defBF532.h
libgloss/bfin/include/defBF533.h
libgloss/bfin/include/defBF534.h
libgloss/bfin/include/defBF535.h
libgloss/bfin/include/defBF536.h
libgloss/bfin/include/defBF537.h
libgloss/bfin/include/defBF538.h
libgloss/bfin/include/defBF539.h
libgloss/bfin/include/defBF542.h
libgloss/bfin/include/defBF542M.h
libgloss/bfin/include/defBF544.h
libgloss/bfin/include/defBF544M.h
libgloss/bfin/include/defBF547.h
libgloss/bfin/include/defBF547M.h
libgloss/bfin/include/defBF548.h
libgloss/bfin/include/defBF548M.h
libgloss/bfin/include/defBF549.h
libgloss/bfin/include/defBF549M.h
libgloss/bfin/include/defBF54x_base.h
libgloss/bfin/include/defBF561.h
libgloss/bfin/include/defBF592-A.h
libgloss/bfin/include/defBF59x_base.h
libgloss/bfin/include/defBF606.h
libgloss/bfin/include/defBF607.h
libgloss/bfin/include/defBF608.h
libgloss/bfin/include/defBF609.h
libgloss/bfin/include/def_LPBlackfin.h
libgloss/bfin/include/defblackfin.h
libgloss/bfin/include/sys/_adi_platform.h
libgloss/bfin/include/sys/anomaly_macros_rtl.h
libgloss/bfin/include/sys/excause.h
libgloss/bfin/include/sys/exception.h
libgloss/bfin/include/sys/mc_typedef.h
libgloss/bfin/include/sys/platform.h
libgloss/bfin/include/sys/pll.h
libgloss/bfin/include/sysreg.h
libgloss/bfin/syscalls.c
libgloss/close.c
libgloss/config/default.mh
libgloss/config/default.mt
libgloss/config/dos.mh
libgloss/config/mips.mt
libgloss/config/mn10200.mt
libgloss/config/mn10300.mt
libgloss/config/ppc.mh
libgloss/config/xc16x.mt
libgloss/configure
libgloss/configure.in
libgloss/cr16/Makefile.in
libgloss/cr16/_exit.c
libgloss/cr16/_getenv.c
libgloss/cr16/_rename.c
libgloss/cr16/aclocal.m4
libgloss/cr16/close.c
libgloss/cr16/configure
libgloss/cr16/configure.in
libgloss/cr16/crt1.S
libgloss/cr16/crti.S
libgloss/cr16/crtn.S
libgloss/cr16/dvz_hndl.c
libgloss/cr16/flg_hndl.c
libgloss/cr16/fstat.c
libgloss/cr16/getpid.c
libgloss/cr16/iad_hndl.c
libgloss/cr16/intable.c
libgloss/cr16/isatty.c
libgloss/cr16/kill.c
libgloss/cr16/lseek.c
libgloss/cr16/open.c
libgloss/cr16/putnum.c
libgloss/cr16/read.c
libgloss/cr16/sbrk.c
libgloss/cr16/sim.ld
libgloss/cr16/stat.c
libgloss/cr16/svc_hndl.c
libgloss/cr16/sys/syscall.h
libgloss/cr16/time.c
libgloss/cr16/und_hndl.c
libgloss/cr16/unlink.c
libgloss/cr16/write.c
libgloss/cris/Makefile.in
libgloss/cris/aclocal.m4
libgloss/cris/configure
libgloss/cris/configure.in
libgloss/cris/crt0.S
libgloss/cris/crti.c
libgloss/cris/crtn.c
libgloss/cris/gensyscalls
libgloss/cris/irqtable.S
libgloss/cris/lcrt0.c
libgloss/cris/linunistd.h
libgloss/cris/outbyte.c
libgloss/cris/setup.S
libgloss/crx/Makefile.in
libgloss/crx/_exit.c
libgloss/crx/_getenv.c
libgloss/crx/_rename.c
libgloss/crx/aclocal.m4
libgloss/crx/close.c
libgloss/crx/configure
libgloss/crx/configure.in
libgloss/crx/crt0.S
libgloss/crx/crti.S
libgloss/crx/crtn.S
libgloss/crx/dvz_hndl.c
libgloss/crx/flg_hndl.c
libgloss/crx/fstat.c
libgloss/crx/getpid.c
libgloss/crx/iad_hndl.c
libgloss/crx/intable.c
libgloss/crx/isatty.c
libgloss/crx/kill.c
libgloss/crx/lseek.c
libgloss/crx/open.c
libgloss/crx/putnum.c
libgloss/crx/read.c
libgloss/crx/sbrk.c
libgloss/crx/sim.ld
libgloss/crx/stat.c
libgloss/crx/svc_hndl.c
libgloss/crx/time.c
libgloss/crx/und_hndl.c
libgloss/crx/unlink.c
libgloss/crx/write.c
libgloss/d30v/Makefile.in
libgloss/d30v/aclocal.m4
libgloss/d30v/configure
libgloss/d30v/configure.in
libgloss/d30v/crt0.S
libgloss/d30v/inbyte.c
libgloss/d30v/outbyte.c
libgloss/d30v/syscalls.c
libgloss/debug.c
libgloss/debug.h
libgloss/doc/Makefile.in
libgloss/doc/configure
libgloss/doc/configure.in
libgloss/doc/porting.texi
libgloss/epiphany/Makefile.in
libgloss/epiphany/_exit.S
libgloss/epiphany/_exit.c
libgloss/epiphany/_isatty.c
libgloss/epiphany/access.c
libgloss/epiphany/aclocal.m4
libgloss/epiphany/close.c
libgloss/epiphany/config.h.in
libgloss/epiphany/configure
libgloss/epiphany/configure.in
libgloss/epiphany/crt0.S
libgloss/epiphany/environ.c
libgloss/epiphany/epiphany-config.h
libgloss/epiphany/epiphany-ivthandlers.S
libgloss/epiphany/epiphany-syscalls.c
libgloss/epiphany/epiphany-syscalls.h
libgloss/epiphany/execve.c
libgloss/epiphany/fork.c
libgloss/epiphany/fstat.c
libgloss/epiphany/getpid.c
libgloss/epiphany/gettimeofday.c
libgloss/epiphany/kill.c
libgloss/epiphany/link.c
libgloss/epiphany/lseek.c
libgloss/epiphany/open.c
libgloss/epiphany/read.c
libgloss/epiphany/sbrk.c
libgloss/epiphany/stat.c
libgloss/epiphany/times.c
libgloss/epiphany/unlink.c
libgloss/epiphany/wait.c
libgloss/epiphany/write.c
libgloss/fr30/Makefile.in
libgloss/fr30/aclocal.m4
libgloss/fr30/configure
libgloss/fr30/configure.in
libgloss/fr30/crt0.s
libgloss/fr30/syscalls.c
libgloss/frv/Makefile.in
libgloss/frv/aclocal.m4
libgloss/frv/configure
libgloss/frv/configure.in
libgloss/frv/crt0.S
libgloss/frv/fstat.c
libgloss/frv/getpid.c
libgloss/frv/isatty.c
libgloss/frv/kill.c
libgloss/frv/print.c
libgloss/frv/putnum.c
libgloss/frv/sbrk.c
libgloss/frv/sim-close.S
libgloss/frv/sim-exit.S
libgloss/frv/sim-inbyte.c
libgloss/frv/sim-lseek.S
libgloss/frv/sim-open.S
libgloss/frv/sim-read.S
libgloss/frv/sim-time.c
libgloss/frv/sim-unlink.S
libgloss/frv/sim-write.S
libgloss/frv/stat.c
libgloss/fstat.c
libgloss/getpid.c
libgloss/glue.h
libgloss/hp74x/Makefile.in
libgloss/hp74x/README
libgloss/hp74x/aclocal.m4
libgloss/hp74x/checksum.c
libgloss/hp74x/configure
libgloss/hp74x/configure.in
libgloss/hp74x/crt0.s
libgloss/hp74x/debugger.h
libgloss/hp74x/debugger.s
libgloss/hp74x/diagnose.h
libgloss/hp74x/hppa-defs.h
libgloss/hp74x/hppa.ld
libgloss/hp74x/io.c
libgloss/hp74x/iva_table.h
libgloss/hp74x/iva_table.s
libgloss/hp74x/pa_stub.c
libgloss/hp74x/test.c
libgloss/i386/Makefile.in
libgloss/i386/aclocal.m4
libgloss/i386/configure
libgloss/i386/configure.in
libgloss/i386/cygmon-crt0.S
libgloss/i386/cygmon-gmon.c
libgloss/i386/cygmon-gmon.h
libgloss/i386/cygmon-salib.c
libgloss/i386/cygmon-syscall.h
libgloss/i386/cygmon.ld
libgloss/i960/Makefile.in
libgloss/i960/aclocal.m4
libgloss/i960/asm.h
libgloss/i960/configure
libgloss/i960/configure.in
libgloss/i960/crt0.c
libgloss/i960/mon-read.c
libgloss/i960/mon-syscalls.S
libgloss/i960/mon-write.c
libgloss/i960/mon960.c
libgloss/i960/mon960.ld
libgloss/i960/syscall.h
libgloss/iq2000/Makefile.in
libgloss/iq2000/_exit.c
libgloss/iq2000/access.c
libgloss/iq2000/aclocal.m4
libgloss/iq2000/chmod.c
libgloss/iq2000/chown.c
libgloss/iq2000/close.c
libgloss/iq2000/configure
libgloss/iq2000/configure.in
libgloss/iq2000/creat.c
libgloss/iq2000/crt0.S
libgloss/iq2000/crt1.c
libgloss/iq2000/execv.c
libgloss/iq2000/execve.c
libgloss/iq2000/fork.c
libgloss/iq2000/fstat.c
libgloss/iq2000/getpid.c
libgloss/iq2000/gettime.c
libgloss/iq2000/isatty.c
libgloss/iq2000/kill.c
libgloss/iq2000/lseek.c
libgloss/iq2000/open.c
libgloss/iq2000/pipe.c
libgloss/iq2000/read.c
libgloss/iq2000/sbrk.c
libgloss/iq2000/sim.ld
libgloss/iq2000/stat.c
libgloss/iq2000/test.c
libgloss/iq2000/time.c
libgloss/iq2000/times.c
libgloss/iq2000/trap.c
libgloss/iq2000/trap.h
libgloss/iq2000/unlink.c
libgloss/iq2000/utime.c
libgloss/iq2000/wait.c
libgloss/iq2000/write.c
libgloss/isatty.c
libgloss/kill.c
libgloss/libnosys/Makefile.in
libgloss/libnosys/_exit.c
libgloss/libnosys/acconfig.h
libgloss/libnosys/aclocal.m4
libgloss/libnosys/chown.c
libgloss/libnosys/close.c
libgloss/libnosys/config.h.in
libgloss/libnosys/configure
libgloss/libnosys/configure.in
libgloss/libnosys/environ.c
libgloss/libnosys/errno.c
libgloss/libnosys/execve.c
libgloss/libnosys/fork.c
libgloss/libnosys/fstat.c
libgloss/libnosys/getpid.c
libgloss/libnosys/gettod.c
libgloss/libnosys/isatty.c
libgloss/libnosys/kill.c
libgloss/libnosys/link.c
libgloss/libnosys/lseek.c
libgloss/libnosys/nosys.specs
libgloss/libnosys/open.c
libgloss/libnosys/read.c
libgloss/libnosys/readlink.c
libgloss/libnosys/sbrk.c
libgloss/libnosys/stat.c
libgloss/libnosys/symlink.c
libgloss/libnosys/times.c
libgloss/libnosys/unlink.c
libgloss/libnosys/wait.c
libgloss/libnosys/warning.h
libgloss/libnosys/write.c
libgloss/lm32/Makefile.in
libgloss/lm32/aclocal.m4
libgloss/lm32/configure
libgloss/lm32/configure.in
libgloss/lm32/crt0.S
libgloss/lm32/isatty.c
libgloss/lm32/scall.S
libgloss/lm32/sim.ld
libgloss/lseek.c
libgloss/m32c/Makefile.in
libgloss/m32c/abort.S
libgloss/m32c/aclocal.m4
libgloss/m32c/argv.S
libgloss/m32c/argvlen.S
libgloss/m32c/chdir.S
libgloss/m32c/chmod.S
libgloss/m32c/close.S
libgloss/m32c/configure
libgloss/m32c/configure.in
libgloss/m32c/crt0.S
libgloss/m32c/crtn.S
libgloss/m32c/exit.S
libgloss/m32c/fstat.S
libgloss/m32c/genscript
libgloss/m32c/getpid.S
libgloss/m32c/gettimeofday.S
libgloss/m32c/heaptop.S
libgloss/m32c/isatty.S
libgloss/m32c/kill.S
libgloss/m32c/link.S
libgloss/m32c/lseek.S
libgloss/m32c/m32c.tmpl
libgloss/m32c/m32csys.h
libgloss/m32c/open.S
libgloss/m32c/read.S
libgloss/m32c/sample.c
libgloss/m32c/sbrk.c
libgloss/m32c/stat.S
libgloss/m32c/time.S
libgloss/m32c/times.S
libgloss/m32c/unlink.S
libgloss/m32c/utime.S
libgloss/m32c/varvects.S
libgloss/m32c/varvects.h
libgloss/m32c/write.S
libgloss/m32r/Makefile.in
libgloss/m32r/aclocal.m4
libgloss/m32r/chmod.c
libgloss/m32r/close.c
libgloss/m32r/configure
libgloss/m32r/configure.in
libgloss/m32r/crt0.S
libgloss/m32r/eit.h
libgloss/m32r/eva-stub.ld
libgloss/m32r/eva.ld
libgloss/m32r/exit.c
libgloss/m32r/fstat.c
libgloss/m32r/getpid.c
libgloss/m32r/isatty.c
libgloss/m32r/kill.c
libgloss/m32r/lseek.c
libgloss/m32r/m32r-lib.c
libgloss/m32r/m32r-stub.c
libgloss/m32r/mon.specs
libgloss/m32r/open.c
libgloss/m32r/raise.c
libgloss/m32r/read.c
libgloss/m32r/sbrk.c
libgloss/m32r/stat.c
libgloss/m32r/trap0.S
libgloss/m32r/trapmon0.c
libgloss/m32r/unlink.c
libgloss/m32r/utime.c
libgloss/m32r/write.c
libgloss/m68hc11/Makefile.in
libgloss/m68hc11/aclocal.m4
libgloss/m68hc11/configure
libgloss/m68hc11/configure.in
libgloss/m68hc11/crt0.S
libgloss/m68hc11/sci-inout.S
libgloss/m68hc11/sim-valid-m68hc11.ld
libgloss/m68hc11/sim-valid-m68hc12.ld
libgloss/m68hc11/syscalls.c
libgloss/m68k/Makefile.in
libgloss/m68k/README
libgloss/m68k/aclocal.m4
libgloss/m68k/asm.h
libgloss/m68k/bcc.ld
libgloss/m68k/cf-crt0.S
libgloss/m68k/cf-crt1.c
libgloss/m68k/cf-exit.c
libgloss/m68k/cf-hosted.S
libgloss/m68k/cf-isrs.c
libgloss/m68k/cf-isv.S
libgloss/m68k/cf-sbrk.c
libgloss/m68k/cf.sc
libgloss/m68k/configure
libgloss/m68k/configure.in
libgloss/m68k/cpu32bug.S
libgloss/m68k/cpu32bug.h
libgloss/m68k/crt0.S
libgloss/m68k/dtor.C
libgloss/m68k/fido-_exit.c
libgloss/m68k/fido-crt0.S
libgloss/m68k/fido-handler.c
libgloss/m68k/fido-hosted.S
libgloss/m68k/fido-sbrk.c
libgloss/m68k/fido.h
libgloss/m68k/fido.sc
libgloss/m68k/fido_profiling.h
libgloss/m68k/idp-inbyte.c
libgloss/m68k/idp-outbyte.c
libgloss/m68k/idp.ld
libgloss/m68k/idpgdb.ld
libgloss/m68k/io-close.c
libgloss/m68k/io-exit.c
libgloss/m68k/io-fstat.c
libgloss/m68k/io-gdb.c
libgloss/m68k/io-gettimeofday.c
libgloss/m68k/io-isatty.c
libgloss/m68k/io-lseek.c
libgloss/m68k/io-open.c
libgloss/m68k/io-read.c
libgloss/m68k/io-rename.c
libgloss/m68k/io-stat.c
libgloss/m68k/io-system.c
libgloss/m68k/io-time.c
libgloss/m68k/io-unlink.c
libgloss/m68k/io-write.c
libgloss/m68k/io.h
libgloss/m68k/leds.c
libgloss/m68k/leds.h
libgloss/m68k/mc68681reg.h
libgloss/m68k/mc68ec.c
libgloss/m68k/mvme-stub.c
libgloss/m68k/mvme.S
libgloss/m68k/mvme135-asm.S
libgloss/m68k/mvme135.ld
libgloss/m68k/mvme162.ld
libgloss/m68k/mvme162lx-asm.S
libgloss/m68k/sbc5204.ld
libgloss/m68k/sbc5206.ld
libgloss/m68k/sim-abort.c
libgloss/m68k/sim-crt0.S
libgloss/m68k/sim-errno.c
libgloss/m68k/sim-funcs.c
libgloss/m68k/sim-inbyte.c
libgloss/m68k/sim-print.c
libgloss/m68k/sim-sbrk.c
libgloss/m68k/sim.ld
libgloss/m68k/simulator.S
libgloss/m68k/test.c
libgloss/mcore/Makefile.in
libgloss/mcore/aclocal.m4
libgloss/mcore/close.c
libgloss/mcore/cmb-exit.c
libgloss/mcore/cmb-inbyte.c
libgloss/mcore/cmb-outbyte.c
libgloss/mcore/configure
libgloss/mcore/configure.in
libgloss/mcore/crt0.S
libgloss/mcore/elf-cmb.ld
libgloss/mcore/elf-cmb.specs
libgloss/mcore/fstat.c
libgloss/mcore/getpid.c
libgloss/mcore/kill.c
libgloss/mcore/lseek.c
libgloss/mcore/open.c
libgloss/mcore/pe-cmb.ld
libgloss/mcore/pe-cmb.specs
libgloss/mcore/print.c
libgloss/mcore/putnum.c
libgloss/mcore/raise.c
libgloss/mcore/read.c
libgloss/mcore/sbrk.c
libgloss/mcore/stat.c
libgloss/mcore/syscalls.S
libgloss/mcore/unlink.c
libgloss/mcore/write.c
libgloss/mep/Makefile.in
libgloss/mep/aclocal.m4
libgloss/mep/configure
libgloss/mep/configure.in
libgloss/mep/crt0.S
libgloss/mep/crtn.S
libgloss/mep/default.ld
libgloss/mep/fmax.ld
libgloss/mep/gcov-io.h
libgloss/mep/gmap_default.ld
libgloss/mep/h_reset.c
libgloss/mep/handlers.c
libgloss/mep/isatty.c
libgloss/mep/mep-bb.c
libgloss/mep/mep-gmon.c
libgloss/mep/min.ld
libgloss/mep/read.c
libgloss/mep/sbrk.c
libgloss/mep/sdram-crt0.S
libgloss/mep/sim-crt0.S
libgloss/mep/sim-crtn.S
libgloss/mep/simnovec-crt0.S
libgloss/mep/simple.ld
libgloss/mep/simsdram-crt0.S
libgloss/mep/syscalls.S
libgloss/mep/write.c
libgloss/microblaze/Makefile.in
libgloss/microblaze/_exception_handler.S
libgloss/microblaze/_hw_exception_handler.S
libgloss/microblaze/_interrupt_handler.S
libgloss/microblaze/_program_clean.S
libgloss/microblaze/_program_init.S
libgloss/microblaze/configure
libgloss/microblaze/configure.in
libgloss/microblaze/crt0.S
libgloss/microblaze/crt1.S
libgloss/microblaze/crt2.S
libgloss/microblaze/crt3.S
libgloss/microblaze/crt4.S
libgloss/microblaze/crtinit.S
libgloss/microblaze/elf-gloss-linux.ld
libgloss/microblaze/elf-gloss-linux.specs
libgloss/microblaze/linux-crt0.S
libgloss/microblaze/linux-inbyte.c
libgloss/microblaze/linux-outbyte.c
libgloss/microblaze/linux-syscalls-wrap.c
libgloss/microblaze/linux-syscalls.S
libgloss/microblaze/linux-syscalls.h
libgloss/microblaze/pgcrtinit.S
libgloss/microblaze/sbrk.c
libgloss/microblaze/sim-crtinit.S
libgloss/microblaze/sim-pgcrtinit.S
libgloss/microblaze/timer.c
libgloss/microblaze/xil_malloc.c
libgloss/microblaze/xil_printf.c
libgloss/microblaze/xil_sbrk.c
libgloss/microblaze/xilinx.ld
libgloss/mips/Makefile.in
libgloss/mips/aclocal.m4
libgloss/mips/array-io.c
libgloss/mips/array.ld
libgloss/mips/cfe.c
libgloss/mips/cfe.ld
libgloss/mips/cfe_api.c
libgloss/mips/cfe_api.h
libgloss/mips/cfe_api_int.h
libgloss/mips/cfe_error.h
libgloss/mips/cfe_mem.c
libgloss/mips/cma101.c
libgloss/mips/configure
libgloss/mips/configure.in
libgloss/mips/crt0.S
libgloss/mips/crt0_cfe.S
libgloss/mips/crt0_cygmon.S
libgloss/mips/cygmon.c
libgloss/mips/ddb-kseg0.ld
libgloss/mips/ddb.ld
libgloss/mips/dtor.C
libgloss/mips/dve.ld
libgloss/mips/dvemon.c
libgloss/mips/entry.S
libgloss/mips/idt.ld
libgloss/mips/idt32.ld
libgloss/mips/idt64.ld
libgloss/mips/idtecoff.ld
libgloss/mips/idtmon.S
libgloss/mips/jmr3904-io.c
libgloss/mips/jmr3904app-java.ld
libgloss/mips/jmr3904app.ld
libgloss/mips/jmr3904dram-java.ld
libgloss/mips/jmr3904dram.ld
libgloss/mips/lsi.ld
libgloss/mips/lsipmon.S
libgloss/mips/mti32.ld
libgloss/mips/mti64.ld
libgloss/mips/mti64_64.ld
libgloss/mips/mti64_n32.ld
libgloss/mips/nullmon.c
libgloss/mips/nullmon.ld
libgloss/mips/pmon.S
libgloss/mips/pmon.ld
libgloss/mips/regs.S
libgloss/mips/sde32.ld
libgloss/mips/sde64.ld
libgloss/mips/syscalls.c
libgloss/mips/test.c
libgloss/mips/vr4300.S
libgloss/mips/vr5xxx.S
libgloss/mn10200/Makefile.in
libgloss/mn10200/_exit.c
libgloss/mn10200/access.c
libgloss/mn10200/aclocal.m4
libgloss/mn10200/chmod.c
libgloss/mn10200/chown.c
libgloss/mn10200/close.c
libgloss/mn10200/configure
libgloss/mn10200/configure.in
libgloss/mn10200/creat.c
libgloss/mn10200/crt0.S
libgloss/mn10200/crt1.c
libgloss/mn10200/eval.ld
libgloss/mn10200/execv.c
libgloss/mn10200/execve.c
libgloss/mn10200/fork.c
libgloss/mn10200/fstat.c
libgloss/mn10200/getpid.c
libgloss/mn10200/gettime.c
libgloss/mn10200/isatty.c
libgloss/mn10200/kill.c
libgloss/mn10200/lseek.c
libgloss/mn10200/open.c
libgloss/mn10200/pipe.c
libgloss/mn10200/read.c
libgloss/mn10200/sbrk.c
libgloss/mn10200/sim.ld
libgloss/mn10200/stat.c
libgloss/mn10200/test.c
libgloss/mn10200/time.c
libgloss/mn10200/times.c
libgloss/mn10200/trap.S
libgloss/mn10200/trap.h
libgloss/mn10200/unlink.c
libgloss/mn10200/utime.c
libgloss/mn10200/wait.c
libgloss/mn10200/write.c
libgloss/mn10300/Makefile.in
libgloss/mn10300/_exit.c
libgloss/mn10300/access.c
libgloss/mn10300/aclocal.m4
libgloss/mn10300/asb2303.ld
libgloss/mn10300/asb2305.ld
libgloss/mn10300/chmod.c
libgloss/mn10300/chown.c
libgloss/mn10300/close.c
libgloss/mn10300/configure
libgloss/mn10300/configure.in
libgloss/mn10300/creat.c
libgloss/mn10300/crt0-eval.S
libgloss/mn10300/crt0.S
libgloss/mn10300/crt0_cygmon.S
libgloss/mn10300/crt0_redboot.S
libgloss/mn10300/crt1.c
libgloss/mn10300/cygmon.c
libgloss/mn10300/eval.ld
libgloss/mn10300/execv.c
libgloss/mn10300/execve.c
libgloss/mn10300/fork.c
libgloss/mn10300/fstat.c
libgloss/mn10300/getpid.c
libgloss/mn10300/gettime.c
libgloss/mn10300/isatty.c
libgloss/mn10300/kill.c
libgloss/mn10300/lseek.c
libgloss/mn10300/open.c
libgloss/mn10300/pipe.c
libgloss/mn10300/read.c
libgloss/mn10300/sbrk.c
libgloss/mn10300/sim.ld
libgloss/mn10300/stat.c
libgloss/mn10300/test.c
libgloss/mn10300/time.c
libgloss/mn10300/times.c
libgloss/mn10300/trap.S
libgloss/mn10300/trap.h
libgloss/mn10300/unlink.c
libgloss/mn10300/utime.c
libgloss/mn10300/wait.c
libgloss/mn10300/write.c
libgloss/moxie/Makefile.in
libgloss/moxie/aclocal.m4
libgloss/moxie/configure
libgloss/moxie/configure.in
libgloss/moxie/crt0.S
libgloss/moxie/fstat.c
libgloss/moxie/getpid.c
libgloss/moxie/isatty.c
libgloss/moxie/kill.c
libgloss/moxie/moxie-elf-common.ld
libgloss/moxie/moxiebox.ld
libgloss/moxie/print.c
libgloss/moxie/putnum.c
libgloss/moxie/qemu-time.c
libgloss/moxie/qemu-write.c
libgloss/moxie/qemu.ld
libgloss/moxie/sbrk.c
libgloss/moxie/sim-close.S
libgloss/moxie/sim-exit.S
libgloss/moxie/sim-inbyte.c
libgloss/moxie/sim-lseek.S
libgloss/moxie/sim-lseek.c
libgloss/moxie/sim-open.S
libgloss/moxie/sim-read.S
libgloss/moxie/sim-time.c
libgloss/moxie/sim-unlink.S
libgloss/moxie/sim-write.S
libgloss/moxie/sim.ld
libgloss/moxie/stat.c
libgloss/msp430/Makefile.in
libgloss/msp430/cio.c
libgloss/msp430/cio.h
libgloss/msp430/configure
libgloss/msp430/configure.in
libgloss/msp430/crt0.S
libgloss/msp430/crt_bss.S
libgloss/msp430/crt_movedata.S
libgloss/msp430/crtn.S
libgloss/msp430/gcrt0.S
libgloss/msp430/intr_vectors.ld
libgloss/msp430/memmodel.h
libgloss/msp430/msp430-sim.ld
libgloss/msp430/msp430.ld
libgloss/msp430/msp430F5438A-l.ld
libgloss/msp430/msp430F5438A-s.ld
libgloss/msp430/msp430xl-sim.ld
libgloss/msp430/nosyscalls.S
libgloss/msp430/sbrk.c
libgloss/msp430/syscalls.S
libgloss/msp430/unlink.c
libgloss/msp430/write.c
libgloss/mt/16-002.ld
libgloss/mt/16-003.ld
libgloss/mt/64-001.ld
libgloss/mt/Makefile.in
libgloss/mt/access.c
libgloss/mt/aclocal.m4
libgloss/mt/chmod.c
libgloss/mt/close.c
libgloss/mt/configure
libgloss/mt/configure.in
libgloss/mt/crt0-16-002.S
libgloss/mt/crt0-16-003.S
libgloss/mt/crt0-64-001.S
libgloss/mt/crt0-ms2.S
libgloss/mt/crt0.S
libgloss/mt/exit-16-002.c
libgloss/mt/exit-16-003.c
libgloss/mt/exit-64-001.c
libgloss/mt/exit-ms2.c
libgloss/mt/exit.c
libgloss/mt/fstat.c
libgloss/mt/getpid.c
libgloss/mt/gettime.c
libgloss/mt/isatty.c
libgloss/mt/kill.c
libgloss/mt/lseek.c
libgloss/mt/ms2.ld
libgloss/mt/open.c
libgloss/mt/read.c
libgloss/mt/sbrk.c
libgloss/mt/startup-16-002.S
libgloss/mt/startup-16-003.S
libgloss/mt/startup-64-001.S
libgloss/mt/startup-ms2.S
libgloss/mt/stat.c
libgloss/mt/time.c
libgloss/mt/times.c
libgloss/mt/trap.S
libgloss/mt/trap.h
libgloss/mt/unlink.c
libgloss/mt/utime.c
libgloss/mt/write.c
libgloss/nds32/Makefile.in
libgloss/nds32/_argv.S
libgloss/nds32/_argvlen.S
libgloss/nds32/_chdir.S
libgloss/nds32/_chmod.S
libgloss/nds32/_close.S
libgloss/nds32/_exit.S
libgloss/nds32/_fstat.S
libgloss/nds32/_getpid.S
libgloss/nds32/_gettimeofday.S
libgloss/nds32/_isatty.S
libgloss/nds32/_kill.S
libgloss/nds32/_link.S
libgloss/nds32/_lseek.S
libgloss/nds32/_open.S
libgloss/nds32/_read.S
libgloss/nds32/_rename.S
libgloss/nds32/_sbrk.S
libgloss/nds32/_stat.S
libgloss/nds32/_system.S
libgloss/nds32/_time.S
libgloss/nds32/_times.S
libgloss/nds32/_unlink.S
libgloss/nds32/_utime.S
libgloss/nds32/_write.S
libgloss/nds32/aclocal.m4
libgloss/nds32/configure
libgloss/nds32/configure.in
libgloss/nds32/crt0.S
libgloss/nds32/crt1.S
libgloss/nds32/syscall_error_handler.S
libgloss/nds32/syscall_extra.h
libgloss/nds32/vh.h
libgloss/open.c
libgloss/pa/Makefile.in
libgloss/pa/README
libgloss/pa/aclocal.m4
libgloss/pa/configure
libgloss/pa/configure.in
libgloss/pa/crt0.S
libgloss/pa/hp-milli.s
libgloss/pa/op50n-io.S
libgloss/pa/op50n.h
libgloss/pa/op50n.ld
libgloss/pa/op50nled.c
libgloss/pa/setjmp.S
libgloss/pa/test.c
libgloss/pa/w89k-io.c
libgloss/pa/w89k.h
libgloss/pa/w89k.ld
libgloss/print.c
libgloss/putnum.c
libgloss/read.c
libgloss/rl78/Makefile.in
libgloss/rl78/abort.S
libgloss/rl78/argv.S
libgloss/rl78/argvlen.S
libgloss/rl78/chdir.S
libgloss/rl78/chmod.S
libgloss/rl78/close.S
libgloss/rl78/configure
libgloss/rl78/configure.in
libgloss/rl78/crt0.S
libgloss/rl78/crtn.S
libgloss/rl78/exit.S
libgloss/rl78/fstat.S
libgloss/rl78/gcrt0.S
libgloss/rl78/getpid.S
libgloss/rl78/gettimeofday.S
libgloss/rl78/isatty.S
libgloss/rl78/kill.S
libgloss/rl78/link.S
libgloss/rl78/lseek.S
libgloss/rl78/mcount.c
libgloss/rl78/open.S
libgloss/rl78/read.S
libgloss/rl78/rl78-sim.ld
libgloss/rl78/rl78-sys.h
libgloss/rl78/rl78.ld
libgloss/rl78/sbrk.c
libgloss/rl78/stat.S
libgloss/rl78/time.S
libgloss/rl78/times.S
libgloss/rl78/unlink.S
libgloss/rl78/utime.S
libgloss/rl78/write.c
libgloss/rs6000/Makefile.in
libgloss/rs6000/aclocal.m4
libgloss/rs6000/ads-exit.S
libgloss/rs6000/ads-io.c
libgloss/rs6000/ads.ld
libgloss/rs6000/configure
libgloss/rs6000/configure.in
libgloss/rs6000/crt0.S
libgloss/rs6000/mbx-exit.c
libgloss/rs6000/mbx-inbyte.c
libgloss/rs6000/mbx-outbyte.c
libgloss/rs6000/mbx-print.c
libgloss/rs6000/mbx.ld
libgloss/rs6000/mbx.specs
libgloss/rs6000/mcount.S
libgloss/rs6000/mvme-errno.c
libgloss/rs6000/mvme-exit.S
libgloss/rs6000/mvme-inbyte.S
libgloss/rs6000/mvme-outbyte.S
libgloss/rs6000/mvme-print.c
libgloss/rs6000/mvme-read.c
libgloss/rs6000/sim-abort.c
libgloss/rs6000/sim-crt0.S
libgloss/rs6000/sim-errno.c
libgloss/rs6000/sim-getrusage.S
libgloss/rs6000/sim-inbyte.c
libgloss/rs6000/sim-print.c
libgloss/rs6000/sim-sbrk.c
libgloss/rs6000/sim-times.c
libgloss/rs6000/simulator.S
libgloss/rs6000/sol-cfuncs.c
libgloss/rs6000/sol-syscall.S
libgloss/rs6000/test.c
libgloss/rs6000/xil-crt0.S
libgloss/rs6000/xilinx.ld
libgloss/rs6000/xilinx440.ld
libgloss/rs6000/yellowknife.ld
libgloss/rx/Makefile.in
libgloss/rx/abort.S
libgloss/rx/argv.S
libgloss/rx/argvlen.S
libgloss/rx/chdir.S
libgloss/rx/chmod.S
libgloss/rx/close.S
libgloss/rx/configure
libgloss/rx/configure.in
libgloss/rx/crt0.S
libgloss/rx/crtn.S
libgloss/rx/exit.S
libgloss/rx/fstat.S
libgloss/rx/gcrt0.S
libgloss/rx/getpid.S
libgloss/rx/gettimeofday.S
libgloss/rx/heaptop.S
libgloss/rx/isatty.S
libgloss/rx/kill.S
libgloss/rx/link.S
libgloss/rx/lseek.S
libgloss/rx/mcount.c
libgloss/rx/open.S
libgloss/rx/read.S
libgloss/rx/rx-sim.ld
libgloss/rx/rx.ld
libgloss/rx/rxsys.h
libgloss/rx/sbrk.c
libgloss/rx/sigprocmask.S
libgloss/rx/sleep.S
libgloss/rx/stat.S
libgloss/rx/time.S
libgloss/rx/times.S
libgloss/rx/unlink.S
libgloss/rx/utime.S
libgloss/rx/write.S
libgloss/sbrk.c
libgloss/sh/sh1lcevb.ld
libgloss/sh/sh2lcevb.ld
libgloss/sh/sh3bb.ld
libgloss/sh/sh3lcevb.ld
libgloss/sparc/Makefile.in
libgloss/sparc/aclocal.m4
libgloss/sparc/asm.h
libgloss/sparc/cache.c
libgloss/sparc/configure
libgloss/sparc/configure.in
libgloss/sparc/crt0-701.S
libgloss/sparc/crt0.S
libgloss/sparc/cygmon-crt0.S
libgloss/sparc/cygmon-salib.c
libgloss/sparc/cygmon-sparc64-ld.src
libgloss/sparc/cygmon.ld.src
libgloss/sparc/dtor.C
libgloss/sparc/elfsim.ld
libgloss/sparc/erc32-crt0.S
libgloss/sparc/erc32-io.c
libgloss/sparc/erc32-stub.c
libgloss/sparc/erc32.ld
libgloss/sparc/ex930.ld
libgloss/sparc/ex931.ld
libgloss/sparc/ex934.ld
libgloss/sparc/fixctors.c
libgloss/sparc/libsys/Makefile.in
libgloss/sparc/libsys/_exit.S
libgloss/sparc/libsys/aclocal.m4
libgloss/sparc/libsys/cerror.S
libgloss/sparc/libsys/configure
libgloss/sparc/libsys/configure.in
libgloss/sparc/libsys/isatty.c
libgloss/sparc/libsys/libsys-crt0.S
libgloss/sparc/libsys/sbrk.S
libgloss/sparc/libsys/syscall.h
libgloss/sparc/libsys/syscallasm.h
libgloss/sparc/libsys/template.S
libgloss/sparc/libsys/template_r.S
libgloss/sparc/salib-701.c
libgloss/sparc/salib.c
libgloss/sparc/slite.h
libgloss/sparc/sparc-stub.c
libgloss/sparc/sparc86x.ld
libgloss/sparc/sparcl-stub.c
libgloss/sparc/sparclet-stub.c
libgloss/sparc/sparclite.h
libgloss/sparc/sysc-701.c
libgloss/sparc/syscalls.c
libgloss/sparc/test.c
libgloss/sparc/traps.S
libgloss/sparc/tsc701.ld
libgloss/sparc_leon/Makefile.in
libgloss/sparc_leon/_exit.c
libgloss/sparc_leon/aclocal.m4
libgloss/sparc_leon/amba.c
libgloss/sparc_leon/amba_dbg.c
libgloss/sparc_leon/amba_driver.c
libgloss/sparc_leon/amba_scan.c
libgloss/sparc_leon/asm-leon/amba.h
libgloss/sparc_leon/asm-leon/asmmacro.h
libgloss/sparc_leon/asm-leon/clock.h
libgloss/sparc_leon/asm-leon/contextswitch.h
libgloss/sparc_leon/asm-leon/elfmacro.h
libgloss/sparc_leon/asm-leon/head.h
libgloss/sparc_leon/asm-leon/irq.h
libgloss/sparc_leon/asm-leon/jiffies.h
libgloss/sparc_leon/asm-leon/lambapp.h
libgloss/sparc_leon/asm-leon/lambapp_devs.h
libgloss/sparc_leon/asm-leon/leon.h
libgloss/sparc_leon/asm-leon/leon3.h
libgloss/sparc_leon/asm-leon/leonbare_debug.h
libgloss/sparc_leon/asm-leon/leonbare_kernel.h
libgloss/sparc_leon/asm-leon/leonbare_kernel_queue.h
libgloss/sparc_leon/asm-leon/leoncompat.h
libgloss/sparc_leon/asm-leon/leondbg.h
libgloss/sparc_leon/asm-leon/leonstack.h
libgloss/sparc_leon/asm-leon/liblocks.h
libgloss/sparc_leon/asm-leon/linkage.h
libgloss/sparc_leon/asm-leon/param.h
libgloss/sparc_leon/asm-leon/queue.h
libgloss/sparc_leon/asm-leon/spinlock.h
libgloss/sparc_leon/asm-leon/stack.h
libgloss/sparc_leon/asm-leon/time.h
libgloss/sparc_leon/asm-leon/timer.h
libgloss/sparc_leon/asm-leon/types.h
libgloss/sparc_leon/asm-leon/winmacros.h
libgloss/sparc_leon/bdinit.S
libgloss/sparc_leon/busscan.S
libgloss/sparc_leon/cacheA.S
libgloss/sparc_leon/catch_interrupt.c
libgloss/sparc_leon/catch_interrupt_mvt.c
libgloss/sparc_leon/catch_interrupt_pending.c
libgloss/sparc_leon/catch_interrupt_svt.c
libgloss/sparc_leon/configure
libgloss/sparc_leon/configure.in
libgloss/sparc_leon/console.c
libgloss/sparc_leon/console_dbg.c
libgloss/sparc_leon/console_init.c
libgloss/sparc_leon/contextswitch.c
libgloss/sparc_leon/contextswitch_asm.S
libgloss/sparc_leon/crt0.S
libgloss/sparc_leon/crti.S
libgloss/sparc_leon/crtn.S
libgloss/sparc_leon/etrap.S
libgloss/sparc_leon/etrap_fast.S
libgloss/sparc_leon/fpu.S
libgloss/sparc_leon/gettimeofday.c
libgloss/sparc_leon/initcalls.c
libgloss/sparc_leon/io.c
libgloss/sparc_leon/irqinstall.S
libgloss/sparc_leon/irqtrap.S
libgloss/sparc_leon/irqtrap_fast.S
libgloss/sparc_leon/jiffies.c
libgloss/sparc_leon/kernel.c
libgloss/sparc_leon/kernel_context.S
libgloss/sparc_leon/kernel_debug.c
libgloss/sparc_leon/kernel_debug_var.c
libgloss/sparc_leon/kernel_mm.c
libgloss/sparc_leon/kernel_mutex.c
libgloss/sparc_leon/kernel_queue.c
libgloss/sparc_leon/kernel_sched.c
libgloss/sparc_leon/kernel_thread.c
libgloss/sparc_leon/lcpuinit.S
libgloss/sparc_leon/locore.S
libgloss/sparc_leon/locore_atexit.c
libgloss/sparc_leon/locore_clean.S
libgloss/sparc_leon/locore_mvt.S
libgloss/sparc_leon/locore_mvt_reset.S
libgloss/sparc_leon/locore_svt.S
libgloss/sparc_leon/locore_svt_reset.S
libgloss/sparc_leon/locore_svtdisp.S
libgloss/sparc_leon/locore_var.S
libgloss/sparc_leon/locore_var_svt.S
libgloss/sparc_leon/mmu_asm.S
libgloss/sparc_leon/mutex.c
libgloss/sparc_leon/nocache.S
libgloss/sparc_leon/pnpinit.c
libgloss/sparc_leon/pnpinit_malloc.c
libgloss/sparc_leon/pnpinit_simple.c
libgloss/sparc_leon/regwin.S
libgloss/sparc_leon/regwin_patch.c
libgloss/sparc_leon/regwin_slow.S
libgloss/sparc_leon/regwinflush.S
libgloss/sparc_leon/rtc.c
libgloss/sparc_leon/rtrap.S
libgloss/sparc_leon/rtrap_fast.S
libgloss/sparc_leon/stop.S
libgloss/sparc_leon/timer.c
libgloss/sparc_leon/times.c
libgloss/spu/Makefile.in
libgloss/spu/access.c
libgloss/spu/aclocal.m4
libgloss/spu/chdir.c
libgloss/spu/chmod.c
libgloss/spu/chown.c
libgloss/spu/close.c
libgloss/spu/configure
libgloss/spu/configure.in
libgloss/spu/conv_stat.c
libgloss/spu/crt0.S
libgloss/spu/crti.S
libgloss/spu/crtn.S
libgloss/spu/dirfuncs.c
libgloss/spu/dup.c
libgloss/spu/dup2.c
libgloss/spu/exit.c
libgloss/spu/fchdir.c
libgloss/spu/fchmod.c
libgloss/spu/fchown.c
libgloss/spu/fdatasync.c
libgloss/spu/fstat.c
libgloss/spu/fsync.c
libgloss/spu/ftruncate.c
libgloss/spu/getcwd.c
libgloss/spu/getitimer.c
libgloss/spu/getpagesize.c
libgloss/spu/getpid.c
libgloss/spu/gettimeofday.c
libgloss/spu/isatty.c
libgloss/spu/jsre.h
libgloss/spu/kill.c
libgloss/spu/lchown.c
libgloss/spu/link.c
libgloss/spu/linux_getpid.c
libgloss/spu/linux_gettid.c
libgloss/spu/linux_syscalls.c
libgloss/spu/lockf.c
libgloss/spu/lseek.c
libgloss/spu/lstat.c
libgloss/spu/mkdir.c
libgloss/spu/mknod.c
libgloss/spu/mkstemp.c
libgloss/spu/mktemp.c
libgloss/spu/mmap_eaddr.c
libgloss/spu/mremap_eaddr.c
libgloss/spu/msync_eaddr.c
libgloss/spu/munmap_eaddr.c
libgloss/spu/nanosleep.c
libgloss/spu/open.c
libgloss/spu/pread.c
libgloss/spu/pwrite.c
libgloss/spu/read.c
libgloss/spu/readlink.c
libgloss/spu/readv.c
libgloss/spu/rmdir.c
libgloss/spu/sbrk.c
libgloss/spu/sched_yield.c
libgloss/spu/setitimer.c
libgloss/spu/shm_open.c
libgloss/spu/shm_unlink.c
libgloss/spu/stat.c
libgloss/spu/symlink.c
libgloss/spu/sync.c
libgloss/spu/syscalls.c
libgloss/spu/times.c
libgloss/spu/truncate.c
libgloss/spu/umask.c
libgloss/spu/unlink.c
libgloss/spu/utime.c
libgloss/spu/utimes.c
libgloss/spu/write.c
libgloss/spu/writev.c
libgloss/stat.c
libgloss/syscall.h
libgloss/testsuite/Makefile.in
libgloss/testsuite/config/hppa.mt
libgloss/testsuite/config/m68k.mt
libgloss/testsuite/config/mips.mt
libgloss/testsuite/config/support.c
libgloss/testsuite/configure.in
libgloss/testsuite/lib/libgloss.exp
libgloss/testsuite/libgloss.all/.gdbinit
libgloss/testsuite/libgloss.all/Makefile.in
libgloss/testsuite/libgloss.all/array.c
libgloss/testsuite/libgloss.all/configure.in
libgloss/testsuite/libgloss.all/div.c
libgloss/testsuite/libgloss.all/double.c
libgloss/testsuite/libgloss.all/float.c
libgloss/testsuite/libgloss.all/func.c
libgloss/testsuite/libgloss.all/io.c
libgloss/testsuite/libgloss.all/math.c
libgloss/testsuite/libgloss.all/memory.c
libgloss/testsuite/libgloss.all/misc.c
libgloss/testsuite/libgloss.all/printf.c
libgloss/testsuite/libgloss.all/struct.c
libgloss/testsuite/libgloss.all/varargs.c
libgloss/testsuite/libgloss.all/varargs2.c
libgloss/tic6x/Makefile.in
libgloss/tic6x/aclocal.m4
libgloss/tic6x/configure
libgloss/tic6x/configure.in
libgloss/tic6x/crt0.S
libgloss/tic6x/getpid.c
libgloss/tic6x/kill.c
libgloss/tic6x/sbrk.c
libgloss/tic6x/syscalls.c
libgloss/unlink.c
libgloss/v850/Makefile.in
libgloss/v850/_exit.c
libgloss/v850/access.c
libgloss/v850/aclocal.m4
libgloss/v850/chmod.c
libgloss/v850/chown.c
libgloss/v850/close.c
libgloss/v850/configure
libgloss/v850/configure.in
libgloss/v850/creat.c
libgloss/v850/crt0.S
libgloss/v850/crt1.c
libgloss/v850/execv.c
libgloss/v850/execve.c
libgloss/v850/fork.c
libgloss/v850/fstat.c
libgloss/v850/getpid.c
libgloss/v850/gettime.c
libgloss/v850/isatty.c
libgloss/v850/kill.c
libgloss/v850/link.c
libgloss/v850/lseek.c
libgloss/v850/open.c
libgloss/v850/pipe.c
libgloss/v850/read.c
libgloss/v850/sbrk.c
libgloss/v850/sim.ld
libgloss/v850/stat.c
libgloss/v850/sys/syscall.h
libgloss/v850/time.c
libgloss/v850/times.c
libgloss/v850/trap.S
libgloss/v850/unlink.c
libgloss/v850/utime.c
libgloss/v850/wait.c
libgloss/v850/write.c
libgloss/wince/Makefile.am
libgloss/wince/Makefile.in
libgloss/wince/aclocal.m4
libgloss/wince/configure
libgloss/wince/configure.in
libgloss/write.c
libgloss/xc16x/Makefile.in
libgloss/xc16x/aclocal.m4
libgloss/xc16x/close.S
libgloss/xc16x/configure
libgloss/xc16x/configure.in
libgloss/xc16x/create.c
libgloss/xc16x/crt0.S
libgloss/xc16x/fstat.S
libgloss/xc16x/getchar1.c
libgloss/xc16x/isatty.c
libgloss/xc16x/lseek.c
libgloss/xc16x/mem-layout.c
libgloss/xc16x/misc.c
libgloss/xc16x/open.c
libgloss/xc16x/read.c
libgloss/xc16x/sbrk.c
libgloss/xc16x/sys/syscall.h
libgloss/xc16x/syscalls.c
libgloss/xc16x/trap_handle.c
libgloss/xc16x/write.c
libgloss/xstormy16/Makefile.in
libgloss/xstormy16/aclocal.m4
libgloss/xstormy16/close.c
libgloss/xstormy16/configure
libgloss/xstormy16/configure.in
libgloss/xstormy16/crt0.s
libgloss/xstormy16/crt0_stub.s
libgloss/xstormy16/crti.s
libgloss/xstormy16/crtn.s
libgloss/xstormy16/eva_app.c
libgloss/xstormy16/eva_app.ld
libgloss/xstormy16/eva_stub.ld
libgloss/xstormy16/fstat.c
libgloss/xstormy16/getpid.c
libgloss/xstormy16/isatty.c
libgloss/xstormy16/kill.c
libgloss/xstormy16/lseek.c
libgloss/xstormy16/open.c
libgloss/xstormy16/sim_high.ld
libgloss/xstormy16/sim_malloc_start.s
libgloss/xstormy16/sim_rom.ld
libgloss/xstormy16/stat.c
libgloss/xstormy16/syscalls.S
libgloss/xstormy16/syscalls.m4
libgloss/xstormy16/unlink.c
libgloss/xstormy16/xstormy16_stub.c
newlib/libc/machine/or1k/Makefile.am
newlib/libc/machine/or1k/Makefile.in
newlib/libc/machine/or1k/aclocal.m4
newlib/libc/machine/or1k/configure
newlib/libc/machine/or1k/configure.in
newlib/libc/machine/or1k/setjmp.S
newlib/libc/sys/tirtos/Makefile.am
newlib/libc/sys/tirtos/Makefile.in
newlib/libc/sys/tirtos/aclocal.m4
newlib/libc/sys/tirtos/configure
newlib/libc/sys/tirtos/configure.in
newlib/libc/sys/tirtos/include/sys/lock.h
newlib/libc/sys/tirtos/lock.c
texinfo/texinfo.tex
winsup/cygserver/pwdgrp.cc
winsup/cygwin/cygserver_pwdgrp.h
winsup/cygwin/import/rexec.c
winsup/cygwin/ldap.cc
winsup/cygwin/ldap.h
Diffstat (limited to 'winsup/cygwin/grp.cc')
-rw-r--r-- | winsup/cygwin/grp.cc | 530 |
1 files changed, 187 insertions, 343 deletions
diff --git a/winsup/cygwin/grp.cc b/winsup/cygwin/grp.cc index f7ce61b08..d4d1b653f 100644 --- a/winsup/cygwin/grp.cc +++ b/winsup/cygwin/grp.cc @@ -1,7 +1,7 @@ /* grp.cc Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, - 2008, 2009, 2011, 2012, 2013, 2014 Red Hat, Inc. + 2008, 2009, 2011, 2012, 2013 Red Hat, Inc. Original stubs by Jason Molenda of Cygnus Support, crash@cygnus.com First implementation by Gunther Ebert, gunther.ebert@ixos-leipzig.de @@ -13,7 +13,6 @@ Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ #include "winsup.h" -#include <lm.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> @@ -24,166 +23,134 @@ details. */ #include "dtable.h" #include "cygheap.h" #include "ntdll.h" -#include "miscfuncs.h" -#include "ldap.h" -#include "tls_pbuf.h" +#include "pwdgrp.h" +static group *group_buf; +static pwdgrp gr (group_buf); static char * NO_COPY_RO null_ptr; bool pwdgrp::parse_group () { - pg_grp &grp = group ()[curr_lines]; - grp.g.gr_name = next_str (':'); - if (!*grp.g.gr_name) + group &grp = (*group_buf)[curr_lines]; + grp.gr_name = next_str (':'); + if (!*grp.gr_name) return false; - grp.g.gr_passwd = next_str (':'); - /* Note that lptr points to the first byte of the gr_gid field. - We deliberately ignore the gr_gid and gr_mem entries when copying - the buffer content since they are not referenced anymore. */ - grp.len = lptr - grp.g.gr_name; - if (!next_num (grp.g.gr_gid)) + + grp.gr_passwd = next_str (':'); + + if (!next_num (grp.gr_gid)) return false; - /* Don't generate gr_mem entries. */ - grp.g.gr_mem = &null_ptr; - grp.sid.getfromgr (&grp.g); + + int n; + char *dp = raw_ptr (); + for (n = 0; *next_str (','); n++) + continue; + + grp.gr_mem = &null_ptr; + if (n) + { + char **namearray = (char **) calloc (n + 1, sizeof (char *)); + if (namearray) + { + for (int i = 0; i < n; i++, dp = strchr (dp, '\0') + 1) + namearray[i] = dp; + grp.gr_mem = namearray; + } + } + return true; } -muto NO_COPY pwdgrp::pglock; - +/* Cygwin internal */ +/* Read in /etc/group and save contents in the group cache */ +/* This sets group_in_memory_p to 1 so functions in this file can + tell that /etc/group has been read in */ void -pwdgrp::init_grp () +pwdgrp::read_group () { - pwdgrp_buf_elem_size = sizeof (pg_grp); - parse = &pwdgrp::parse_group; -} + for (int i = 0; i < gr.curr_lines; i++) + if ((*group_buf)[i].gr_mem != &null_ptr) + free ((*group_buf)[i].gr_mem); -struct group * -pwdgrp::find_group (cygpsid &sid) -{ - for (ULONG i = 0; i < curr_lines; i++) - if (sid == group ()[i].sid) - return &group ()[i].g; - return NULL; + load (L"\\etc\\group"); + + /* Complete /etc/group in memory if needed */ + if (!internal_getgrgid (myself->gid)) + { + static char linebuf [200]; + char group_name [UNLEN + 1] = "mkgroup"; + char strbuf[128] = ""; + struct group *gr; + + cygheap->user.groups.pgsid.string (strbuf); + if ((gr = internal_getgrsid (cygheap->user.groups.pgsid))) + snprintf (group_name, sizeof (group_name), + "passwd/group_GID_clash(%u/%u)", myself->gid, gr->gr_gid); + if (myself->uid == UNKNOWN_UID) + strcpy (group_name, "mkpasswd"); /* Feedback... */ + snprintf (linebuf, sizeof (linebuf), "%s:%s:%u:%s", + group_name, strbuf, myself->gid, cygheap->user.name ()); + debug_printf ("Completing /etc/group: %s", linebuf); + add_line (linebuf); + } + static char NO_COPY pretty_ls[] = "????????::-1:"; + add_line (pretty_ls); } -struct group * -pwdgrp::find_group (const char *name) +muto NO_COPY pwdgrp::pglock; + +pwdgrp::pwdgrp (passwd *&pbuf) : + pwdgrp_buf_elem_size (sizeof (*pbuf)), passwd_buf (&pbuf) { - for (ULONG i = 0; i < curr_lines; i++) - if (strcasematch (group ()[i].g.gr_name, name)) - return &group ()[i].g; - return NULL; + read = &pwdgrp::read_passwd; + parse = &pwdgrp::parse_passwd; + pglock.init ("pglock"); } -struct group * -pwdgrp::find_group (gid_t gid) +pwdgrp::pwdgrp (group *&gbuf) : + pwdgrp_buf_elem_size (sizeof (*gbuf)), group_buf (&gbuf) { - for (ULONG i = 0; i < curr_lines; i++) - if (gid == group ()[i].g.gr_gid) - return &group ()[i].g; - return NULL; + read = &pwdgrp::read_group; + parse = &pwdgrp::parse_group; + pglock.init ("pglock"); } struct group * -internal_getgrsid (cygpsid &sid, cyg_ldap *pldap) +internal_getgrsid (cygpsid &sid) { - struct group *ret; - - cygheap->pg.nss_init (); - /* Check caches first. */ - if (cygheap->pg.nss_cygserver_caching () - && (ret = cygheap->pg.grp_cache.cygserver.find_group (sid))) - return ret; - if (cygheap->pg.nss_grp_files () - && (ret = cygheap->pg.grp_cache.file.find_group (sid))) - return ret; - if (cygheap->pg.nss_grp_db () - && (ret = cygheap->pg.grp_cache.win.find_group (sid))) - return ret; - /* Ask sources afterwards. */ - if (cygheap->pg.nss_cygserver_caching () - && (ret = cygheap->pg.grp_cache.cygserver.add_group_from_cygserver (sid))) - return ret; - if (cygheap->pg.nss_grp_files ()) - { - cygheap->pg.grp_cache.file.check_file (); - if ((ret = cygheap->pg.grp_cache.file.add_group_from_file (sid))) - return ret; - } - if (cygheap->pg.nss_grp_db ()) - return cygheap->pg.grp_cache.win.add_group_from_windows (sid, pldap); + char sid_string[128]; + + gr.refresh (false); + + if (sid.string (sid_string)) + for (int i = 0; i < gr.curr_lines; i++) + if (!strcmp (sid_string, group_buf[i].gr_passwd)) + return group_buf + i; return NULL; } -/* This function gets only called from mkgroup via cygwin_internal. */ struct group * -internal_getgrsid_from_db (cygpsid &sid) +internal_getgrgid (gid_t gid, bool check) { - cygheap->pg.nss_init (); - return cygheap->pg.grp_cache.win.add_group_from_windows (sid); -} + gr.refresh (check); -struct group * -internal_getgrnam (const char *name, cyg_ldap *pldap) -{ - struct group *ret; - - cygheap->pg.nss_init (); - /* Check caches first. */ - if (cygheap->pg.nss_cygserver_caching () - && (ret = cygheap->pg.grp_cache.cygserver.find_group (name))) - return ret; - if (cygheap->pg.nss_grp_files () - && (ret = cygheap->pg.grp_cache.file.find_group (name))) - return ret; - if (cygheap->pg.nss_grp_db () - && (ret = cygheap->pg.grp_cache.win.find_group (name))) - return ret; - /* Ask sources afterwards. */ - if (cygheap->pg.nss_cygserver_caching () - && (ret = cygheap->pg.grp_cache.cygserver.add_group_from_cygserver (name))) - return ret; - if (cygheap->pg.nss_grp_files ()) - { - cygheap->pg.grp_cache.file.check_file (); - if ((ret = cygheap->pg.grp_cache.file.add_group_from_file (name))) - return ret; - } - if (cygheap->pg.nss_grp_db ()) - return cygheap->pg.grp_cache.win.add_group_from_windows (name, pldap); + for (int i = 0; i < gr.curr_lines; i++) + if (group_buf[i].gr_gid == gid) + return group_buf + i; return NULL; } struct group * -internal_getgrgid (gid_t gid, cyg_ldap *pldap) +internal_getgrnam (const char *name, bool check) { - struct group *ret; - - cygheap->pg.nss_init (); - /* Check caches first. */ - if (cygheap->pg.nss_cygserver_caching () - && (ret = cygheap->pg.grp_cache.cygserver.find_group (gid))) - return ret; - if (cygheap->pg.nss_grp_files () - && (ret = cygheap->pg.grp_cache.file.find_group (gid))) - return ret; - if (cygheap->pg.nss_grp_db () - && (ret = cygheap->pg.grp_cache.win.find_group (gid))) - return ret; - /* Ask sources afterwards. */ - if (cygheap->pg.nss_cygserver_caching () - && (ret = cygheap->pg.grp_cache.cygserver.add_group_from_cygserver (gid))) - return ret; - if (cygheap->pg.nss_grp_files ()) - { - cygheap->pg.grp_cache.file.check_file (); - if ((ret = cygheap->pg.grp_cache.file.add_group_from_file (gid))) - return ret; - } - if (cygheap->pg.nss_grp_db () || gid == ILLEGAL_GID) - return cygheap->pg.grp_cache.win.add_group_from_windows (gid, pldap); + gr.refresh (check); + + for (int i = 0; i < gr.curr_lines; i++) + if (strcasematch (group_buf[i].gr_name, name)) + return group_buf + i; + + /* Didn't find requested group */ return NULL; } @@ -214,65 +181,37 @@ getgrgid_r (gid_t gid, struct group *grp, char *buffer, size_t bufsize, if (!grp || !buffer) return ERANGE; - struct group *tempgr = internal_getgrgid (gid); + struct group *tempgr = internal_getgrgid (gid, true); pthread_testcancel (); if (!tempgr) return 0; - /* Check needed buffer size. Deliberately ignore gr_mem. */ + /* check needed buffer size. */ + int i; size_t needsize = strlen (tempgr->gr_name) + strlen (tempgr->gr_passwd) + 2 + sizeof (char *); + for (i = 0; tempgr->gr_mem[i]; ++i) + needsize += strlen (tempgr->gr_mem[i]) + 1 + sizeof (char *); if (needsize > bufsize) return ERANGE; - /* Make a copy of tempgr. Deliberately ignore gr_mem. */ + /* make a copy of tempgr */ *result = grp; grp->gr_gid = tempgr->gr_gid; buffer = stpcpy (grp->gr_name = buffer, tempgr->gr_name); buffer = stpcpy (grp->gr_passwd = buffer + 1, tempgr->gr_passwd); grp->gr_mem = (char **) (buffer + 1); - grp->gr_mem[0] = NULL; + buffer = (char *) grp->gr_mem + (i + 1) * sizeof (char *); + for (i = 0; tempgr->gr_mem[i]; ++i) + buffer = stpcpy (grp->gr_mem[i] = buffer, tempgr->gr_mem[i]) + 1; + grp->gr_mem[i] = NULL; return 0; } -/* getgrgid/getgrnam are not reentrant. */ -static struct { - struct group g; - char *buf; - size_t bufsiz; -} app_gr; - -static struct group * -getgr_cp (struct group *tempgr) -{ - if (!tempgr) - return NULL; - pg_grp *gr = (pg_grp *) tempgr; - if (app_gr.bufsiz < gr->len) - { - char *newbuf = (char *) realloc (app_gr.buf, gr->len); - if (!newbuf) - { - set_errno (ENOMEM); - return NULL; - } - app_gr.buf = newbuf; - app_gr.bufsiz = gr->len; - } - memcpy (app_gr.buf, gr->g.gr_name, gr->len); - memcpy (&app_gr.g, &gr->g, sizeof gr->g); - ptrdiff_t diff = app_gr.buf - gr->g.gr_name; - app_gr.g.gr_name += diff; - app_gr.g.gr_passwd += diff; - return &app_gr.g; -} - extern "C" struct group * getgrgid32 (gid_t gid) { - struct group *tempgr = internal_getgrgid (gid); - pthread_testcancel (); - return getgr_cp (tempgr); + return internal_getgrgid (gid, true); } #ifdef __x86_64__ @@ -296,33 +235,37 @@ getgrnam_r (const char *nam, struct group *grp, char *buffer, if (!grp || !buffer) return ERANGE; - struct group *tempgr = internal_getgrnam (nam); + struct group *tempgr = internal_getgrnam (nam, true); pthread_testcancel (); if (!tempgr) return 0; - /* Check needed buffer size. Deliberately ignore gr_mem. */ + /* check needed buffer size. */ + int i; size_t needsize = strlen (tempgr->gr_name) + strlen (tempgr->gr_passwd) + 2 + sizeof (char *); + for (i = 0; tempgr->gr_mem[i]; ++i) + needsize += strlen (tempgr->gr_mem[i]) + 1 + sizeof (char *); if (needsize > bufsize) return ERANGE; - /* Make a copy of tempgr. Deliberately ignore gr_mem. */ + /* make a copy of tempgr */ *result = grp; grp->gr_gid = tempgr->gr_gid; buffer = stpcpy (grp->gr_name = buffer, tempgr->gr_name); buffer = stpcpy (grp->gr_passwd = buffer + 1, tempgr->gr_passwd); grp->gr_mem = (char **) (buffer + 1); - grp->gr_mem[0] = NULL; + buffer = (char *) grp->gr_mem + (i + 1) * sizeof (char *); + for (i = 0; tempgr->gr_mem[i]; ++i) + buffer = stpcpy (grp->gr_mem[i] = buffer, tempgr->gr_mem[i]) + 1; + grp->gr_mem[i] = NULL; return 0; } extern "C" struct group * getgrnam32 (const char *name) { - struct group *tempgr = internal_getgrnam (name); - pthread_testcancel (); - return getgr_cp (tempgr); + return internal_getgrnam (name, true); } #ifdef __x86_64__ @@ -337,119 +280,21 @@ getgrnam (const char *name) } #endif -/* getgrent functions are not reentrant. */ -static gr_ent grent; - -void * -gr_ent::enumerate_caches () -{ - switch (max) - { - case 0: - if (cygheap->pg.nss_cygserver_caching ()) - { - pwdgrp &grc = cygheap->pg.grp_cache.cygserver; - if (cnt < grc.cached_groups ()) - return &grc.group ()[cnt++].g; - } - cnt = 0; - max = 1; - /*FALLTHRU*/ - case 1: - if (from_files) - { - pwdgrp &grf = cygheap->pg.grp_cache.file; - grf.check_file (); - if (cnt < grf.cached_groups ()) - return &grf.group ()[cnt++].g; - } - cnt = 0; - max = 2; - /*FALLTHRU*/ - case 2: - if (from_db) - { - pwdgrp &grw = cygheap->pg.grp_cache.win; - if (cnt < grw.cached_groups ()) - return &grw.group ()[cnt++].g; - } - break; - } - cnt = max = 0; - return NULL; -} - -void * -gr_ent::enumerate_local () -{ - while (true) - { - if (!cnt) - { - DWORD total; - NET_API_STATUS ret; - - if (buf) - { - NetApiBufferFree (buf); - buf = NULL; - } - if (resume == ULONG_MAX) - ret = ERROR_NO_MORE_ITEMS; - else - ret = NetLocalGroupEnum (NULL, 0, (PBYTE *) &buf, - MAX_PREFERRED_LENGTH, - &max, &total, &resume); - if (ret == NERR_Success) - resume = ULONG_MAX; - else if (ret != ERROR_MORE_DATA) - { - cnt = max = resume = 0; - return NULL; - } - } - while (cnt < max) - { - cygsid sid; - DWORD slen = SECURITY_MAX_SID_SIZE; - WCHAR dom[DNLEN + 1]; - DWORD dlen = DNLEN + 1; - SID_NAME_USE acc_type; - - LookupAccountNameW (NULL, - ((PLOCALGROUP_INFO_0) buf)[cnt++].lgrpi0_name, - sid, &slen, dom, &dlen, &acc_type); - fetch_user_arg_t arg; - arg.type = SID_arg; - arg.sid = &sid; - char *line = pg.fetch_account_from_windows (arg); - if (line) - return pg.add_account_post_fetch (line, false); - } - cnt = 0; - } -} - -struct group * -gr_ent::getgrent (void) -{ - if (state == rewound) - setent (true); - else - clear_cache (); - return (struct group *) getent (); -} - extern "C" void -setgrent () +endgrent () { - grent.setgrent (); + _my_tls.locals.grp_pos = 0; } extern "C" struct group * -getgrent32 (void) +getgrent32 () { - return grent.getgrent (); + if (_my_tls.locals.grp_pos == 0) + gr.refresh (true); + if (_my_tls.locals.grp_pos < gr.curr_lines) + return group_buf + _my_tls.locals.grp_pos++; + + return NULL; } #ifdef __x86_64__ @@ -465,85 +310,90 @@ getgrent () #endif extern "C" void -endgrent (void) -{ - grent.endgrent (); -} - -/* *_filtered functions are called from mkgroup */ -void * -setgrent_filtered (int enums, PCWSTR enum_tdoms) +setgrent () { - gr_ent *gr = new gr_ent; - if (gr) - gr->setgrent (enums, enum_tdoms); - return (void *) gr; + _my_tls.locals.grp_pos = 0; } -void * -getgrent_filtered (void *gr) +/* Internal function. ONLY USE THIS INTERNALLY, NEVER `getgrent'!!! */ +struct group * +internal_getgrent (int pos) { - return (void *) ((gr_ent *) gr)->getgrent (); -} + gr.refresh (false); -void -endgrent_filtered (void *gr) -{ - ((gr_ent *) gr)->endgrent (); + if (pos < gr.curr_lines) + return group_buf + pos; + return NULL; } int -internal_getgroups (int gidsetsize, gid_t *grouplist, cyg_ldap *pldap) +internal_getgroups (int gidsetsize, gid_t *grouplist, cygpsid * srchsid) { NTSTATUS status; - HANDLE tok; + HANDLE hToken = NULL; ULONG size; int cnt = 0; - struct group *grp; + struct group *gr; - if (cygheap->user.groups.issetgroups ()) + if (!srchsid && cygheap->user.groups.issetgroups ()) { - for (int pg = 0; pg < cygheap->user.groups.sgsids.count (); ++pg) - if ((grp = internal_getgrsid (cygheap->user.groups.sgsids.sids[pg], - pldap))) - { - if (cnt < gidsetsize) - grouplist[cnt] = grp->gr_gid; - ++cnt; - if (gidsetsize && cnt > gidsetsize) - goto error; - } + cygsid sid; + for (int gidx = 0; (gr = internal_getgrent (gidx)); ++gidx) + if (sid.getfromgr (gr)) + for (int pg = 0; pg < cygheap->user.groups.sgsids.count (); ++pg) + if (sid == cygheap->user.groups.sgsids.sids[pg] + && sid != well_known_world_sid) + { + if (cnt < gidsetsize) + grouplist[cnt] = gr->gr_gid; + ++cnt; + if (gidsetsize && cnt > gidsetsize) + goto error; + break; + } return cnt; } + /* If impersonated, use impersonation token. */ - tok = cygheap->user.issetuid () ? cygheap->user.primary_token () : hProcToken; + if (cygheap->user.issetuid ()) + hToken = cygheap->user.primary_token (); + else + hToken = hProcToken; - status = NtQueryInformationToken (tok, TokenGroups, NULL, 0, &size); + status = NtQueryInformationToken (hToken, TokenGroups, NULL, 0, &size); if (NT_SUCCESS (status) || status == STATUS_BUFFER_TOO_SMALL) { PTOKEN_GROUPS groups = (PTOKEN_GROUPS) alloca (size); - status = NtQueryInformationToken (tok, TokenGroups, groups, size, &size); + status = NtQueryInformationToken (hToken, TokenGroups, groups, + size, &size); if (NT_SUCCESS (status)) { - for (DWORD pg = 0; pg < groups->GroupCount; ++pg) + cygsid sid; + + if (srchsid) { - cygpsid sid = groups->Groups[pg].Sid; - if ((grp = internal_getgrsid (sid, pldap))) - { - if ((groups->Groups[pg].Attributes - & (SE_GROUP_ENABLED | SE_GROUP_INTEGRITY_ENABLED)) + for (DWORD pg = 0; pg < groups->GroupCount; ++pg) + if ((cnt = (*srchsid == groups->Groups[pg].Sid))) + break; + } + else + for (int gidx = 0; (gr = internal_getgrent (gidx)); ++gidx) + if (sid.getfromgr (gr)) + for (DWORD pg = 0; pg < groups->GroupCount; ++pg) + if (sid == groups->Groups[pg].Sid + && (groups->Groups[pg].Attributes + & (SE_GROUP_ENABLED | SE_GROUP_INTEGRITY_ENABLED)) && sid != well_known_world_sid) { if (cnt < gidsetsize) - grouplist[cnt] = grp->gr_gid; + grouplist[cnt] = gr->gr_gid; ++cnt; if (gidsetsize && cnt > gidsetsize) goto error; + break; } - } - } } } else @@ -558,9 +408,7 @@ error: extern "C" int getgroups32 (int gidsetsize, gid_t *grouplist) { - cyg_ldap cldap; - - return internal_getgroups (gidsetsize, grouplist, &cldap); + return internal_getgroups (gidsetsize, grouplist); } #ifdef __x86_64__ @@ -579,7 +427,7 @@ getgroups (int gidsetsize, __gid16_t *grouplist) if (gidsetsize > 0 && grouplist) grouplist32 = (gid_t *) alloca (gidsetsize * sizeof (gid_t)); - int ret = getgroups32 (gidsetsize, grouplist32); + int ret = internal_getgroups (gidsetsize, grouplist32); if (gidsetsize > 0 && grouplist) for (int i = 0; i < ret; ++ i) @@ -593,15 +441,13 @@ getgroups (int gidsetsize, __gid16_t *grouplist) static void get_groups (const char *user, gid_t gid, cygsidlist &gsids) { - cyg_ldap cldap; - cygheap->user.deimpersonate (); - struct passwd *pw = internal_getpwnam (user, &cldap); - struct group *grp = internal_getgrgid (gid, &cldap); + struct passwd *pw = internal_getpwnam (user); + struct group *gr = internal_getgrgid (gid); cygsid usersid, grpsid; if (usersid.getfrompw (pw)) get_server_groups (gsids, usersid, pw); - if (gid != ILLEGAL_GID && grpsid.getfromgr (grp)) + if (gid != ILLEGAL_GID && grpsid.getfromgr (gr)) gsids += grpsid; cygheap->user.reimpersonate (); } @@ -636,8 +482,7 @@ getgrouplist (const char *user, gid_t gid, gid_t *groups, int *ngroups) { int ret = 0; int cnt = 0; - struct group *grp; - cyg_ldap cldap; + struct group *gr; /* Note that it's not defined if groups or ngroups may be NULL! GLibc does not check the pointers on entry and just uses them. @@ -650,10 +495,10 @@ getgrouplist (const char *user, gid_t gid, gid_t *groups, int *ngroups) cygsidlist tmp_gsids (cygsidlist_auto, 12); get_groups (user, gid, tmp_gsids); for (int i = 0; i < tmp_gsids.count (); i++) - if ((grp = internal_getgrsid (tmp_gsids.sids[i], &cldap)) != NULL) + if ((gr = internal_getgrsid (tmp_gsids.sids[i])) != NULL) { if (groups && cnt < *ngroups) - groups[cnt] = grp->gr_gid; + groups[cnt] = gr->gr_gid; ++cnt; } if (cnt > *ngroups) @@ -679,16 +524,15 @@ setgroups32 (int ngroups, const gid_t *grouplist) } cygsidlist gsids (cygsidlist_alloc, ngroups); - struct group *grp; - cyg_ldap cldap; + struct group *gr; if (ngroups && !gsids.sids) return -1; for (int gidx = 0; gidx < ngroups; ++gidx) { - if ((grp = internal_getgrgid (grouplist[gidx], &cldap)) - && gsids.addfromgr (grp)) + if ((gr = internal_getgrgid (grouplist[gidx])) + && gsids.addfromgr (gr)) continue; debug_printf ("No sid found for gid %u", grouplist[gidx]); gsids.free_sids (); |