diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index f65e19b973..af700ca590 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -24,7 +24,7 @@ jobs:
# resulting in errors due to -Werror. Disable them for now.
export CXXFLAGS="-Wno-error=stringop-truncation -Wno-error=array-bounds -Wno-error=overloaded-virtual -Wno-narrowing -Wno-use-after-free -Wno-error=maybe-uninitialized"
(cd winsup && ./autogen.sh)
- ./configure --disable-dependency-tracking --with-msys2-runtime-commit=$GITHUB_SHA
+ ./configure --disable-dependency-tracking --with-msys2-runtime-commit="$GITHUB_SHA"
make -j8
- name: Install
diff --git a/.github/workflows/cygwin.yml b/.github/workflows/cygwin.yml
index e780428035..711d2922a9 100644
--- a/.github/workflows/cygwin.yml
+++ b/.github/workflows/cygwin.yml
@@ -162,7 +162,7 @@ jobs:
# upload test logs to facilitate investigation of problems
- name: Upload test logs
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: testlogs
path: |
diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
index 1c68287d9f..97878699ca 100644
--- a/winsup/cygwin/include/cygwin/version.h
+++ b/winsup/cygwin/include/cygwin/version.h
@@ -11,7 +11,7 @@ details. */
changes to the DLL and is mainly informative in nature. */
#define CYGWIN_VERSION_DLL_MAJOR 3005
-#define CYGWIN_VERSION_DLL_MINOR 5
+#define CYGWIN_VERSION_DLL_MINOR 6
/* CYGWIN_VERSION_DLL_COMBINED gives us a single number representing the
combined DLL major and minor numbers. */
diff --git a/winsup/cygwin/loadavg.cc b/winsup/cygwin/loadavg.cc
index 127591a2e1..63a1ecebe2 100644
--- a/winsup/cygwin/loadavg.cc
+++ b/winsup/cygwin/loadavg.cc
@@ -15,17 +15,23 @@
A global load average estimate is maintained in shared memory. Access to that
is guarded by a mutex. This estimate is only updated at most every 5 seconds.
+ The updates are done by any/all callers of the getloadavg() syscall.
- We attempt to count running and runnable processes, but unlike linux we don't
- count processes in uninterruptible sleep (blocked on I/O).
+ We attempt to count running and runnable tasks (i.e., threads), but unlike
+ Linux we don't count tasks in uninterruptible sleep (blocked on I/O). There
+ doesn't seem to be a kernel counter for the latter on Windows.
- The number of running processes is estimated as (NumberOfProcessors) * (%
- Processor Time). The number of runnable processes is estimated as
- ProcessorQueueLength.
+ In the following text and code, "PDH" refers to Performance Data Helper, a
+ Windows component that arranges access to kernel counters.
+
+ The number of running tasks is estimated as
+ (the NumberOfProcessors counter) * (the % Processor Time counter).
+ The number of runnable tasks is taken to be the ProcessorQueueLength counter.
Note that PDH will only return data for '% Processor Time' afer the second
call to PdhCollectQueryData(), as it's computed over an interval, so the first
- attempt to estimate load will fail and 0.0 will be returned.
+ attempt to estimate load will fail and 0.0 will be returned. (This nuisance
+ is now worked-around near the end of load_init() below.)
We also assume that '% Processor Time' averaged over the interval since the
last time getloadavg() was called is a good approximation of the instantaneous
@@ -68,8 +74,19 @@ static bool load_init (void)
if (status != STATUS_SUCCESS)
{
debug_printf ("PdhAddEnglishCounterW(time), status %y", status);
- return false;
+
+ /* Windows 10 Pro 21H1, and maybe others, use an alternative name */
+ status = PdhAddEnglishCounterW (query,
+ L"\\Processor Information(_Total)\\% Processor Time",
+ 0, &counter1);
+ if (status != STATUS_SUCCESS)
+ {
+ debug_printf ("PdhAddEnglishCounterW(alt time), status %y", status);
+ return false;
+ }
}
+
+ /* Windows 10 Pro 21H1, and maybe others, are missing this counter */
status = PdhAddEnglishCounterW (query,
L"\\System\\Processor Queue Length",
0, &counter2);
@@ -77,7 +94,7 @@ static bool load_init (void)
if (status != STATUS_SUCCESS)
{
debug_printf ("PdhAddEnglishCounterW(queue length), status %y", status);
- return false;
+ ; /* Ignore missing counter, just use zero in later calculations */
}
mutex = CreateMutex(&sec_all_nih, FALSE, "cyg.loadavg.mutex");
@@ -87,6 +104,12 @@ static bool load_init (void)
}
initialized = true;
+
+ /* Do the first data collection (which always fails) here, rather than in
+ get_load(). We wait at least one tick afterward so the collection done
+ in get_load() is guaranteed to have data to work with. */
+ (void) PdhCollectQueryData (query); /* ignore errors */
+ Sleep (15/*ms*/); /* wait for at least one kernel tick to have occurred */
}
return initialized;
@@ -101,8 +124,8 @@ static bool get_load (double *load)
if (ret != ERROR_SUCCESS)
return false;
- /* Estimate the number of running processes as (NumberOfProcessors) * (%
- Processor Time) */
+ /* Estimate number of running tasks as
+ (NumberOfProcessors) * (% Processor Time) */
PDH_FMT_COUNTERVALUE fmtvalue1;
ret = PdhGetFormattedCounterValue (counter1, PDH_FMT_DOUBLE, NULL, &fmtvalue1);
if (ret != ERROR_SUCCESS)
@@ -110,11 +133,10 @@ static bool get_load (double *load)
double running = fmtvalue1.doubleValue * wincap.cpu_count () / 100;
- /* Estimate the number of runnable processes using ProcessorQueueLength */
- PDH_FMT_COUNTERVALUE fmtvalue2;
+ /* Estimate the number of runnable tasks as ProcessorQueueLength */
+ PDH_FMT_COUNTERVALUE fmtvalue2 = { 0 };
ret = PdhGetFormattedCounterValue (counter2, PDH_FMT_LONG, NULL, &fmtvalue2);
- if (ret != ERROR_SUCCESS)
- return false;
+ /* Ignore any error accessing this counter, just treat as if zero was read */
LONG rql = fmtvalue2.longValue;
diff --git a/winsup/cygwin/local_includes/path.h b/winsup/cygwin/local_includes/path.h
index 5f5cf5cb5b..77e07eb658 100644
--- a/winsup/cygwin/local_includes/path.h
+++ b/winsup/cygwin/local_includes/path.h
@@ -207,21 +207,33 @@ class path_conv
{
return (path_flags & (PATH_REP | PATH_REP_NOAPI)) == PATH_REP;
}
- int isdevice () const {return dev.not_device (FH_FS) && dev.not_device (FH_FIFO);}
+
int isfifo () const {return dev.is_device (FH_FIFO);}
- int isspecial () const {return dev.not_device (FH_FS);}
int iscygdrive () const {return dev.is_device (FH_CYGDRIVE);}
- int is_fs_special () const {return dev.is_fs_special ();}
-
- int is_lnk_special () const {return (isdevice () && is_fs_special ()
- && !issocket ())
- || isfifo () || is_lnk_symlink ();}
#ifdef __WITH_AF_UNIX
int issocket () const {return dev.is_device (FH_LOCAL)
|| dev.is_device (FH_UNIX);}
#else
int issocket () const {return dev.is_device (FH_LOCAL);}
#endif /* __WITH_AF_UNIX */
+
+ /* FIXME: This needs a cleanup with better, descriptive names and checking
+ all usages for correctness. */
+
+ /* Any file or device with representation on disk. This includes local
+ sockets, FIFOs, message queues and devices created with mknod. It does
+ not include the /proc hierarchy. */
+ int isondisk () const {return dev.isfs ();}
+ /* Any device, virtual or with on-disk representation, and anything under
+ /proc. */
+ int isspecial () const {return dev.not_device (FH_FS);}
+ /* Devices with representation on disk. This includes local sockets, FIFOs,
+ message queues and devices created with mknod. It does not include
+ the /proc hierarchy. */
+ int is_fs_special () const {return dev.is_fs_special ();}
+ /* Like is_fs_special but excluding local sockets. */
+ int is_lnk_special () const {return is_fs_special () && !issocket ();}
+
int iscygexec () const {return mount_flags & MOUNT_CYGWIN_EXEC;}
int isopen () const {return path_flags & PATH_OPEN;}
int isctty_capable () const {return path_flags & PATH_CTTY;}
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 5411acb408..66a4f485a0 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -1241,7 +1241,10 @@ path_conv::check (const char *src, unsigned opt,
/* FIXME: bad hack alert!!! We need a better solution */
if (!strncmp (path_copy, MQ_PATH, MQ_LEN) && path_copy[MQ_LEN])
- dev.parse (FH_MQUEUE);
+ {
+ dev.parse (FH_MQUEUE);
+ dev.setfs (1);
+ }
}
if (opt & PC_NOFULL)
@@ -2153,8 +2156,7 @@ symlink_worker (const char *oldpath, path_conv &win32_newpath, bool isdevice)
syscall_printf ("symlink (%s, %S) wsym_type %d", oldpath,
win32_newpath.get_nt_native_path (), wsym_type);
- if ((!isdevice && win32_newpath.exists ())
- || (win32_newpath.isdevice () && !win32_newpath.is_fs_special ()))
+ if (win32_newpath.exists() && (!isdevice || !win32_newpath.isondisk ()))
{
set_errno (EEXIST);
__leave;
@@ -2343,7 +2345,7 @@ symlink_worker (const char *oldpath, path_conv &win32_newpath, bool isdevice)
set_errno (src_path.error);
__leave;
}
- if (!src_path.isdevice () && !src_path.is_fs_special ())
+ if (!src_path.isspecial ())
{
/* MSYS copy file instead make symlink */
diff --git a/winsup/cygwin/posix_ipc.cc b/winsup/cygwin/posix_ipc.cc
index 34fd2ba34c..2650c35aca 100644
--- a/winsup/cygwin/posix_ipc.cc
+++ b/winsup/cygwin/posix_ipc.cc
@@ -225,11 +225,14 @@ mq_getattr (mqd_t mqd, struct mq_attr *mqstat)
int ret = -1;
cygheap_fdget fd ((int) mqd, true);
- fhandler_mqueue *fh = fd->is_mqueue ();
- if (!fh)
- set_errno (EBADF);
- else
- ret = fh->mq_getattr (mqstat);
+ if (fd >= 0)
+ {
+ fhandler_mqueue *fh = fd->is_mqueue ();
+ if (!fh)
+ set_errno (EBADF);
+ else
+ ret = fh->mq_getattr (mqstat);
+ }
return ret;
}
@@ -239,11 +242,14 @@ mq_setattr (mqd_t mqd, const struct mq_attr *mqstat, struct mq_attr *omqstat)
int ret = -1;
cygheap_fdget fd ((int) mqd, true);
- fhandler_mqueue *fh = fd->is_mqueue ();
- if (!fh)
- set_errno (EBADF);
- else
- ret = fh->mq_setattr (mqstat, omqstat);
+ if (fd >= 0)
+ {
+ fhandler_mqueue *fh = fd->is_mqueue ();
+ if (!fh)
+ set_errno (EBADF);
+ else
+ ret = fh->mq_setattr (mqstat, omqstat);
+ }
return ret;
}
@@ -253,11 +259,14 @@ mq_notify (mqd_t mqd, const struct sigevent *notification)
int ret = -1;
cygheap_fdget fd ((int) mqd, true);
- fhandler_mqueue *fh = fd->is_mqueue ();
- if (!fh)
- set_errno (EBADF);
- else
- ret = fh->mq_notify (notification);
+ if (fd >= 0)
+ {
+ fhandler_mqueue *fh = fd->is_mqueue ();
+ if (!fh)
+ set_errno (EBADF);
+ else
+ ret = fh->mq_notify (notification);
+ }
return ret;
}
@@ -268,11 +277,14 @@ mq_timedsend (mqd_t mqd, const char *ptr, size_t len, unsigned int prio,
int ret = -1;
cygheap_fdget fd ((int) mqd, true);
- fhandler_mqueue *fh = fd->is_mqueue ();
- if (!fh)
- set_errno (EBADF);
- else
- ret = fh->mq_timedsend (ptr, len, prio, abstime);
+ if (fd >= 0)
+ {
+ fhandler_mqueue *fh = fd->is_mqueue ();
+ if (!fh)
+ set_errno (EBADF);
+ else
+ ret = fh->mq_timedsend (ptr, len, prio, abstime);
+ }
return ret;
}
@@ -289,11 +301,14 @@ mq_timedreceive (mqd_t mqd, char *ptr, size_t maxlen, unsigned int *priop,
int ret = -1;
cygheap_fdget fd ((int) mqd, true);
- fhandler_mqueue *fh = fd->is_mqueue ();
- if (!fh)
- set_errno (EBADF);
- else
- ret = fh->mq_timedrecv (ptr, maxlen, priop, abstime);
+ if (fd >= 0)
+ {
+ fhandler_mqueue *fh = fd->is_mqueue ();
+ if (!fh)
+ set_errno (EBADF);
+ else
+ ret = fh->mq_timedrecv (ptr, maxlen, priop, abstime);
+ }
return ret;
}
@@ -309,14 +324,14 @@ mq_close (mqd_t mqd)
__try
{
cygheap_fdget fd ((int) mqd, true);
- if (!fd->is_mqueue ())
- {
- set_errno (EBADF);
- __leave;
- }
-
- if (mq_notify (mqd, NULL)) /* unregister calling process */
- __leave;
+ if (fd < 0 || !fd->is_mqueue ())
+ {
+ set_errno (EBADF);
+ __leave;
+ }
+
+ if (mq_notify (mqd, NULL)) /* unregister calling process */
+ __leave;
fd->isclosed (true);
fd->close ();
diff --git a/winsup/cygwin/release/3.5.6 b/winsup/cygwin/release/3.5.6
new file mode 100644
index 0000000000..2bc485a559
--- /dev/null
+++ b/winsup/cygwin/release/3.5.6
@@ -0,0 +1,24 @@
+Fixes:
+------
+
+- Fix a regression in 3.5.5 when checking for execute permissions in
+ execve(2) and access(2).
+ Addresses: https://cygwin.com/pipermail/cygwin/2024-December/256972.html
+
+- Fix a regression since 3.5.0 which fails to use POSIX semantics in
+ unlink/rename on NTFS.
+
+- Add fd validation where needed in mq_* functions.
+ Addresses: https://cygwin.com/pipermail/cygwin/2025-January/257090.html
+
+- Fix regression in 3.5.5 which causes process hangs.
+ Addresses: https://cygwin.com/pipermail/cygwin/2024-December/256954.html
+ Addresses: https://cygwin.com/pipermail/cygwin/2024-December/256971.html
+ Addresses: https://cygwin.com/pipermail/cygwin/2025-January/257058.html
+ Addresses: https://cygwin.com/pipermail/cygwin/2024-December/256987.html
+
+- Minor updates to load average calculations.
+ Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256361.html
+
+- Fix mq_unlink().
+ Addresses: https://cygwin.com/pipermail/cygwin/2025-January/257119.html
diff --git a/winsup/cygwin/sec/base.cc b/winsup/cygwin/sec/base.cc
index 2e50ce0c38..7c94f14028 100644
--- a/winsup/cygwin/sec/base.cc
+++ b/winsup/cygwin/sec/base.cc
@@ -603,8 +603,14 @@ check_access (security_descriptor &sd, GENERIC_MAPPING &mapping,
int
check_file_access (path_conv &pc, int flags, bool effective)
{
- int ret = -1;
ACCESS_MASK desired = 0;
+ OBJECT_ATTRIBUTES attr;
+ IO_STATUS_BLOCK io;
+ NTSTATUS status;
+ HANDLE h = NULL;
+ ULONG opts = 0;
+ int ret = -1;
+
if (flags & R_OK)
desired |= FILE_READ_DATA;
if (flags & W_OK)
@@ -612,16 +618,23 @@ check_file_access (path_conv &pc, int flags, bool effective)
if (flags & X_OK)
desired |= FILE_EXECUTE;
+ /* For R_OK and W_OK we check with FILE_OPEN_FOR_BACKUP_INTENT since
+ we want to enable the full power of backup/restore privileges.
+ For X_OK, drop the FILE_OPEN_FOR_BACKUP_INTENT flag. If the caller
+ holds SE_BACKUP_PRIVILEGE, FILE_OPEN_FOR_BACKUP_INTENT opens the file,
+ no matter what access is requested.
+ For directories, FILE_OPEN_FOR_BACKUP_INTENT flag is always required. */
+ if (!(flags & X_OK) || pc.isdir ())
+ opts = FILE_OPEN_FOR_BACKUP_INTENT;
+ else /* For a regular file to be executable, it must also be readable. */
+ desired |= FILE_READ_DATA;
+
if (!effective)
cygheap->user.deimpersonate ();
- OBJECT_ATTRIBUTES attr;
pc.init_reopen_attr (attr, pc.handle ());
- NTSTATUS status;
- IO_STATUS_BLOCK io;
- HANDLE h;
- status = NtOpenFile (&h, desired, &attr, &io, FILE_SHARE_VALID_FLAGS,
- FILE_OPEN_FOR_BACKUP_INTENT);
+
+ status = NtOpenFile (&h, desired, &attr, &io, FILE_SHARE_VALID_FLAGS, opts);
if (NT_SUCCESS (status))
{
NtClose (h);
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index e584e960a7..7e8f356854 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -740,7 +740,7 @@ unlink_nt (path_conv &pc, bool shareable)
easier and faster. Just try to do it and if it fails, it fails. */
if (wincap.has_posix_unlink_semantics ()
&& !pc.isremote () && pc.fs_is_ntfs ()
- && pc.has_attribute (FILE_SUPPORTS_OPEN_BY_FILE_ID))
+ && (pc.fs_flags () & FILE_SUPPORTS_OPEN_BY_FILE_ID))
{
FILE_DISPOSITION_INFORMATION_EX fdie;
@@ -774,18 +774,15 @@ unlink_nt (path_conv &pc, bool shareable)
if (access & FILE_WRITE_ATTRIBUTES)
NtSetAttributesFile (fh, pc.file_attributes ());
NtClose (fh);
- /* Trying to delete in-use executables and DLLs using
- FILE_DISPOSITION_POSIX_SEMANTICS returns STATUS_CANNOT_DELETE.
- Fall back to the default method. */
- /* Additionaly that returns STATUS_INVALID_PARAMETER
- on a bind mounted fs in hyper-v container. Falling back too. */
- if (status != STATUS_CANNOT_DELETE
- && status != STATUS_INVALID_PARAMETER)
- {
- debug_printf ("NtSetInformationFile returns %y "
- "with posix semantics. Disable it and retry.", status);
- goto out;
- }
+ /* Trying POSIX delete on in-use executables and DLLs returns
+ STATUS_CANNOT_DELETE. Trying POSIX delete on a bind mounted fs
+ in hyper-v container returns STATUS_INVALID_PARAMETER.
+ Fall back to default method in both cases. */
+ if (status != STATUS_CANNOT_DELETE && status != STATUS_INVALID_PARAMETER)
+ goto out;
+
+ debug_printf ("POSIX delete %S fails with %y, try default method",
+ pc.get_nt_native_path (), status);
}
/* If the R/O attribute is set, we have to open the file with
@@ -1136,17 +1133,18 @@ unlink (const char *ourname)
set_errno (EROFS);
goto done;
}
- if (isdevfd_dev (devn) || (win32_name.isdevice () && !win32_name.issocket ()))
- {
- set_errno (EPERM);
- goto done;
- }
if (!win32_name.exists ())
{
debug_printf ("unlinking a nonexistent file");
set_errno (ENOENT);
goto done;
}
+ if (!win32_name.isondisk ())
+ {
+ debug_printf ("unlinking a virtual file");
+ set_errno (EPERM);
+ goto done;
+ }
else if (win32_name.isdir ())
{
debug_printf ("unlinking a directory");
@@ -2473,9 +2471,9 @@ rename2 (const char *oldpath, const char *newpath, unsigned int at2flags)
/* POSIX semantics only on local NTFS drives. For the OPEN_BY_FILE_ID
flag, see MINIMAL_WIN_NTFS_FLAGS comment in fs_info::update. */
use_posix_semantics = wincap.has_posix_rename_semantics ()
- && !oldpc.isremote ()
- && oldpc.fs_is_ntfs ()
- && oldpc.has_attribute (FILE_SUPPORTS_OPEN_BY_FILE_ID);
+ && !oldpc.isremote ()
+ && oldpc.fs_is_ntfs ()
+ && (oldpc.fs_flags () & FILE_SUPPORTS_OPEN_BY_FILE_ID);
ignore_posix_semantics_retry:
/* Opening the file must be part of the transaction. It's not sufficient
diff --git a/winsup/doc/faq-setup.xml b/winsup/doc/faq-setup.xml
index 15ae84c50f..17b11c9fbf 100644
--- a/winsup/doc/faq-setup.xml
+++ b/winsup/doc/faq-setup.xml
@@ -558,7 +558,7 @@ of Cygwin is as follows:
the instructions in for
all services that you installed. Common services that might have been
-installed are sshd, cron,
+installed are cygsshd, cron,
cygserver, inetd, apache,
postgresql, and so on.
diff --git a/winsup/doc/faq-using.xml b/winsup/doc/faq-using.xml
index e6a1a7c3f8..8a4eee99f0 100644
--- a/winsup/doc/faq-using.xml
+++ b/winsup/doc/faq-using.xml
@@ -168,7 +168,7 @@ will slow things down tremendously if it does not exist.
If your service is one of those which switch the user context
-(sshd, inetd, etc), then it depends on the method used to switch to
+(cygsshd, inetd, etc), then it depends on the method used to switch to
another user. This problem as well as its solution is described in
detail in the Cygwin User's Guide, see
.
@@ -355,7 +355,9 @@ See the documentation for the option -noleaf in the man page.
it has not been ported to Cygwin and has never worked. It is
currently installed as part of the sh-utils, but again, it does not work.
-You should rather install sshd and use
+You should rather install sshd as a service
+(the service will be called cygsshd so as not to
+collide with the Microsoft sshd service) and use
ssh username@localhost as a su
replacement.
@@ -535,7 +537,7 @@ running at the same time which conflict with each other. Apart from
mixing executables of different Cygwin installations, this could also happen
if you have one a single Cygwin installation, for example, if you update the
Cygwin package without exiting all Cygwin apps (including
-services like sshd) beforehand.
+services like cygsshd) beforehand.
The only DLL that is sanctioned by the Cygwin project is the one that
you get by running the Cygwin Setup program,
installed in a directory controlled by this program. If you have other
@@ -987,75 +989,6 @@ create symlinks are just not available.
-
-
Why does public key authentication with ssh fail after updating to Cygwin 1.7.34 or later?
diff --git a/winsup/doc/highlights.xml b/winsup/doc/highlights.xml
index 67e326cb4a..e1c05c5a48 100644
--- a/winsup/doc/highlights.xml
+++ b/winsup/doc/highlights.xml
@@ -87,9 +87,9 @@ that the root path is C:\Cygwin. So it looks for the
fstab file in C:\Cygwin\etc\fstab.
The layout of this file is very similar to the layout of the
fstab file on Linux. Just instead of block devices,
-the mount points point to Win32 paths. An installation with
-setup.exe installs a fstab file by
-default, which can easily be changed using the editor of your choice.
+the mount points point to Win32 paths. On installation, a default
+fstab file is created, which can easily be changed
+using the editor of your choice.
The fstab file allows mounting arbitrary Win32
paths into the POSIX file system space. A special case is the so-called
diff --git a/winsup/doc/intro.xml b/winsup/doc/intro.xml
index c683459790..a386099901 100644
--- a/winsup/doc/intro.xml
+++ b/winsup/doc/intro.xml
@@ -56,7 +56,7 @@
NOTESTo port applications you will need to install the development tools,
which you can do by selecting gcc in
- setup.exe (dependencies are automatically handled).
+ the Cygwin Setup program (dependencies are automatically handled).
If you need a specific program or library, you can search for a
Cygwin package containing it at:
diff --git a/winsup/doc/ntsec.xml b/winsup/doc/ntsec.xml
index fd5b472b61..768c75a5ec 100644
--- a/winsup/doc/ntsec.xml
+++ b/winsup/doc/ntsec.xml
@@ -687,7 +687,7 @@ startup, you may wish to consider starting
cygserver first in
order to take advantage of this system-wide caching. To assure that
cygserver has started
-prior to starting sshd or other Cygwin processes, you may
+prior to starting cygsshd or other Cygwin services, you may
wish to create service startup dependencies.
Cygserver should
probably wait for Windows TCPIP and AFD services before it starts, and then
@@ -707,7 +707,7 @@ shown below. You will need an administrative prompt to run the
# Delay sshd until after Cygserver has started
# Again note the (odd) required space character after "depend="
- sc config sshd depend= cygserver
+ sc config cygsshd depend= cygserver
# View the Cygserver service details
@@ -2230,8 +2230,8 @@ to 3.0 tried to creat a user token from scratch using an officially
undocumented function NtCreateToken which
is now disabled.
-So we just start the servers which have to switch the user context
-(sshd, inetd, cron,
+So we just start the services which have to switch the user context
+(cygsshd, inetd, cron,
...) as Windows services under the SYSTEM (or LocalSystem in the GUI)
account and everything just works. Unfortunately that's too simple.
Using S4U has a drawback.
diff --git a/winsup/doc/ov-ex-unix.xml b/winsup/doc/ov-ex-unix.xml
index c47a3992bb..28e351bc87 100644
--- a/winsup/doc/ov-ex-unix.xml
+++ b/winsup/doc/ov-ex-unix.xml
@@ -21,17 +21,18 @@ than most UNIX-like operating systems; these are described in more detail in
.
-Use the graphical command setup.exe any time you want
-to update or install a Cygwin package. This program must be run
-manually every time you want to check for updated packages since Cygwin
+Use the graphical Cygwin Setup program (available from the
+Cygwin homepage)
+any time you want to update or install a Cygwin package. This program must
+be run manually every time you want to check for updated packages since Cygwin
does not currently include a mechanism for automatically detecting
package updates.
-By default, setup.exe only installs a minimal subset of
+By default, the Cygwin Setup program only installs a minimal subset of
packages. Add any other packages by clicking on the +
next to the Category name and selecting the package from the displayed
-list. You may search for specfic tools by using the
+list. You may search for specific tools by using the
Setup Package Search
at the Cygwin web site.
@@ -40,9 +41,8 @@ After installation, you can find Cygwin-specific documentation in
the /usr/share/doc/Cygwin/ directory.
-For more information about what each option in
-setup.exe means, see .
+For more information about what each option in Cygwin Setup means,
+see .
diff --git a/winsup/doc/ov-ex-win.xml b/winsup/doc/ov-ex-win.xml
index 9a24021a72..7b5bf033e0 100644
--- a/winsup/doc/ov-ex-win.xml
+++ b/winsup/doc/ov-ex-win.xml
@@ -12,19 +12,19 @@ to become acquainted with UNIX basics (search for "UNIX basics" or
"UNIX tutorial").
-To install a basic Cygwin environment, run the
-setup.exe program and click Next
+To install a basic Cygwin environment, run the Cygwin Setup program from
+the Cygwin homepage and click
+Next
at each page. The default settings are correct for most users. If you
want to know more about what each option means, see
-. Use setup.exe
+. Use the Cygwin Setup program
any time you want to update or install a Cygwin package. If you are
installing Cygwin for a specific purpose, use it to install the tools
that you need. For example, if you want to compile C++ programs, you
need the gcc-g++ package and probably a text
-editor like nano. When running
-setup.exe, clicking on categories and packages in the
-package installation screen will provide you with the ability to control
-what is installed or updated.
+editor like nano. When running Cygwin Setup,
+clicking on categories and packages in the package installation screen
+will provide you with the ability to control what is installed or updated.
After installation, you can find Cygwin-specific documentation in
diff --git a/winsup/doc/overview.xml b/winsup/doc/overview.xml
index aaaaef0cd3..4d312c714e 100644
--- a/winsup/doc/overview.xml
+++ b/winsup/doc/overview.xml
@@ -100,10 +100,9 @@ the GNU configure mechanism. Self hosting was achieved as of the beta
The entire Cygwin toolset was available as a monolithic install. In
April 2000, the project announced a
-New Cygwin Net Release which provided the native non-Cygwin Win32 program
-setup.exe to install and upgrade each package
-separately. Since then, the Cygwin DLL and setup.exe
-have seen continuous development.
+New Cygwin Net Release which provided a graphical non-Cygwin
+Setup program to install and upgrade each package separately. Since then,
+the Cygwin DLL and the Setup tool have seen continuous development.
diff --git a/winsup/doc/setup-net.xml b/winsup/doc/setup-net.xml
index db39bb66c8..4475a622d1 100644
--- a/winsup/doc/setup-net.xml
+++ b/winsup/doc/setup-net.xml
@@ -94,8 +94,9 @@ or Just Me should always be left on the default
All Users, unless you do not have write access to
HKEY_LOCAL_MACHINE in the registry or the All Users
Start Menu. This is true even if you are the only user planning to use Cygwin
-on the machine. Selecting Just Me will cause problems
-for programs such as crond and sshd.
+on the machine. Note that selecting Just Me will cause
+problems for Cygwin applications running as service, such as
+crond or sshd.
If you do not have the necessary permissions, but still want to use these
programs, consult the Cygwin mailing list archives about others' experiences.