Remove ill-advised cygwin_props

Cygwin_props have been invented to allow switching off the unique
installation keys in the first place, supposedly for debugging.
This never really was a good idea, after all we *want* the installations
to be independent and there's no good reason to break that, not even
for debugging purposes.

Other than that, cygwin_props were meant to be used for some other global
settings which never took place.  There's just no good reason to tweak
the DLL binary invisibly where a setting could be done in a file or the
environment.

This patch removes the cygwin_props entirely, including the related
settings in cygcheck.

cygwin:
	* cygprops.h: Remove file.
	* globals.cc (cygwin_props): Remove.
	* cygheap.cc (init_cygheap::init_installation_root): Drop removing
	installation key.

utils:
	* cygcheck.cc: Drop including cygprops.h.  Remove now unused option
	values.
	(unique_object_name_opt): Remove.
	(handle_unique_object_name): Remove function.
	(usage): Remove text for unique-object-names options.
	(longopts): Remove unique-object-names options.
	(main): Drop handling unique-object-names options.

doc:
	* utils.xml (cygcheck): Remove text for unique-object-names options.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2016-03-19 13:21:18 +01:00
parent d17977ccc7
commit e42f66d00f
5 changed files with 1 additions and 215 deletions

View File

@ -219,12 +219,6 @@ init_cygheap::init_installation_root ()
installation_root)))
break;
}
if (cygwin_props.disable_key)
{
installation_key.Length = 0;
installation_key.Buffer[0] = L'\0';
}
}
void __stdcall

View File

@ -1,21 +0,0 @@
/* cygprops.h: Cygwin DLL properties
Copyright 2009, 2012 Red Hat, Inc.
This file is part of Cygwin.
This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
#pragma once
/* DLL properties data. */
struct cygwin_props_t
{
char magic[68];
ULONG size;
ULONG disable_key;
};
#define CYGWIN_PROPS_MAGIC \
"Fortunately, I keep my feathers numbered for just such an emergency"

View File

@ -13,7 +13,6 @@ details. */
#include "winsup.h"
#include "cygtls.h"
#include "perprocess.h"
#include "cygprops.h"
#include "thread.h"
#include <malloc.h>
#include <cygwin/version.h>
@ -160,19 +159,6 @@ const int __collate_load_error = 0;
extern UNICODE_STRING _RDATA ro_u_natdev = _ROU (L"Device");
#undef _ROU
/* Cygwin properties are meant to be readonly data placed in the DLL, but
which can be changed by external tools to make adjustments to the
behaviour of a DLL based on the binary of the DLL itself. This is
different from $CYGWIN since it only affects that very DLL, not all
DLLs which have access to the $CYGWIN environment variable. We use the
same _RDATA trick as for the above UNICODE_STRINGs. */
extern cygwin_props_t _RDATA cygwin_props =
{
CYGWIN_PROPS_MAGIC,
sizeof (cygwin_props_t),
0
};
/* This is an exported copy of environ which can be used by DLLs
which use cygwin.dll. */
char **__cygwin_environ;

View File

@ -35,9 +35,6 @@ cygcheck -f FILE [FILE]...
cygcheck -l [PACKAGE]...
cygcheck -p REGEXP
cygcheck --delete-orphaned-installation-keys
cygcheck --enable-unique-object-names Cygwin-DLL
cygcheck --disable-unique-object-names Cygwin-DLL
cygcheck --show-unique-object-names Cygwin-DLL
cygcheck -h
</screen>
</refsynopsisdiv>
@ -63,15 +60,6 @@ At least one command option or a PROGRAM is required, as shown above.
Delete installation keys of old, now unused
installations from the registry. Requires the right
to change the registry.
--enable-unique-object-names Cygwin-DLL
--disable-unique-object-names Cygwin-DLL
--show-unique-object-names Cygwin-DLL
Enable, disable, or show the setting of the
\"unique object names\" setting in the Cygwin DLL
given as argument to this option. The DLL path must
be given as valid Windows(!) path.
See the users guide for more information.
If you don't know what this means, don't change it.
-v, --verbose produce more verbose output
-h, --help annotate output with explanatory comments when given
with another command, otherwise print this help
@ -227,52 +215,6 @@ coreutils-5.3.0-6 GNU core utilities (includes fileutils, sh-utils and t
which the installation doesn't exist anymore. To get rid of these
orphaned registry entries, use the <command>cygcheck
--delete-orphaned-installation-keys</command> command.</para>
<para> Each Cygwin DLL generates a key value from its installation path.
This value is not only stored in the registry, it's also used to generate
global object names used for interprocess communication. This keeps
different Cygwin installations separate. Processes running under a Cygwin
DLL installed in C:\cygwin don't see processes running under a Cygwin DLL
installed in C:\Program Files\cygwin. This allows running multiple
versions of Cygwin DLLs without these versions to interfere with each
other, or to run small third-party installations for a specific purpose
independently from a Cygwin net distribution. </para>
<para> For debugging purposes it could be desired that the various Cygwin
DLLs use the same key, independently from their installation paths. If
the DLLs have different versions, trying to run processes under these
DLLs concurrently will result in error messages like this one:</para>
<screen>
*** shared version mismatch detected - 0x8A88009C/0x75BE0074.
This problem is probably due to using incompatible versions of the Cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version. The most recent version *should*
reside in x:\\cygwin\\bin, where 'x' is the drive on which you have
installed the cygwin distribution. Rebooting is also suggested if you
are unable to find another Cygwin DLL.
</screen>
<para> To disable the usage of a unique key value of a certain Cygwin DLL,
use the <command>cygcheck --disable-unique-object-names
Cygwin-DLL</command> command. <literal>Cygwin-DLL</literal> is the
Windows path (*not* a Cygwin POSIX path) to the DLL for which you want to
disable this feature. Note that you have to stop all Cygwin processes
running under this DLL, before you're allowed to change this setting. For
instance, run <command>cygcheck</command> from a DOS command line for
this purpose.</para>
<para>To re-enable the usage of a unique key, use the <command>cygcheck
--enable-unique-object-names Cygwin-DLL</command> command. This option
has the same characteristics as the
<literal>--disable-unique-object-names</literal> option</para>
<para>Finally, you can use <command>cygcheck --show-unique-object-names
Cygwin-DLL</command> to find out if the given Cygwin DLL use unique
object names or not. In contrast to the <literal>--disable-...</literal>
and <literal>--enable-...</literal> options, the
<literal>--show-unique-object-names</literal> option also works for
Cygwin DLLs which are currently in use.</para>
</refsect1>
</refentry>

View File

@ -27,7 +27,6 @@
#include "../cygwin/include/sys/cygwin.h"
#define _NOMNTENT_MACROS
#include "../cygwin/include/mntent.h"
#include "../cygwin/cygprops.h"
#undef cygwin_internal
#include "loadlib.h"
@ -50,7 +49,6 @@ int find_package = 0;
int list_package = 0;
int grep_packages = 0;
int del_orphaned_reg = 0;
int unique_object_name_opt = 0;
static char emptystr[] = "";
@ -132,9 +130,6 @@ static common_apps[] = {
enum
{
CO_DELETE_KEYS = 0x100,
CO_ENABLE_UON = 0x101,
CO_DISABLE_UON = 0x102,
CO_SHOW_UON = 0x103
};
static int num_paths, max_paths;
@ -1341,89 +1336,6 @@ memmem (char *haystack, size_t haystacklen,
return NULL;
}
int
handle_unique_object_name (int opt, char *path)
{
HANDLE fh, fm;
void *haystack = NULL;
if (!path || !*path)
usage (stderr, 1);
DWORD access, share, protect, mapping;
if (opt == CO_SHOW_UON)
{
access = GENERIC_READ;
share = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;
protect = PAGE_READONLY;
mapping = FILE_MAP_READ;
}
else
{
access = GENERIC_READ | GENERIC_WRITE;
share = 0;
protect = PAGE_READWRITE;
mapping = FILE_MAP_WRITE;
}
fh = CreateFile (path, access, share, NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (fh == INVALID_HANDLE_VALUE)
{
DWORD err = GetLastError ();
switch (err)
{
case ERROR_SHARING_VIOLATION:
display_error ("%s still used by other Cygwin processes.\n"
"Please stop all of them and retry.", path);
break;
case ERROR_ACCESS_DENIED:
display_error (
"Your permissions are not sufficient to change the file \"%s\"",
path);
break;
case ERROR_FILE_NOT_FOUND:
display_error ("%s: No such file.", path);
break;
default:
display_error (path, true, false);
break;
}
return 1;
}
if (!(fm = CreateFileMapping (fh, NULL, protect, 0, 0, NULL)))
display_error ("CreateFileMapping");
else if (!(haystack = MapViewOfFile (fm, mapping, 0, 0, 0)))
display_error ("MapViewOfFile");
else
{
size_t haystacklen = GetFileSize (fh, NULL);
cygwin_props_t *cygwin_props = (cygwin_props_t *)
memmem ((char *) haystack, haystacklen,
CYGWIN_PROPS_MAGIC, sizeof (CYGWIN_PROPS_MAGIC));
if (!cygwin_props)
display_error ("Can't find Cygwin properties in %s", path);
else
{
if (opt != CO_SHOW_UON)
cygwin_props->disable_key = opt - CO_ENABLE_UON;
printf ("Unique object names are %s\n",
cygwin_props->disable_key ? "disabled" : "enabled");
UnmapViewOfFile (haystack);
CloseHandle (fm);
CloseHandle (fh);
return 0;
}
}
if (haystack)
UnmapViewOfFile (haystack);
if (fm)
CloseHandle (fm);
CloseHandle (fh);
return 1;
}
extern "C" NTSTATUS NTAPI RtlGetVersion (PRTL_OSVERSIONINFOEXW);
static void
@ -2231,9 +2143,6 @@ Usage: cygcheck [-v] [-h] PROGRAM\n\
cygcheck -l [PACKAGE]...\n\
cygcheck -p REGEXP\n\
cygcheck --delete-orphaned-installation-keys\n\
cygcheck --enable-unique-object-names Cygwin-DLL\n\
cygcheck --disable-unique-object-names Cygwin-DLL\n\
cygcheck --show-unique-object-names Cygwin-DLL\n\
cygcheck -h\n\n\
List system information, check installed packages, or query package database.\n\
\n\
@ -2255,15 +2164,6 @@ At least one command option or a PROGRAM is required, as shown above.\n\
Delete installation keys of old, now unused\n\
installations from the registry. Requires the right\n\
to change the registry.\n\
--enable-unique-object-names Cygwin-DLL\n\
--disable-unique-object-names Cygwin-DLL\n\
--show-unique-object-names Cygwin-DLL\n\
Enable, disable, or show the setting of the\n\
\"unique object names\" setting in the Cygwin DLL\n\
given as argument to this option. The DLL path must\n\
be given as valid Windows(!) path.\n\
See the users guide for more information.\n\
If you don't know what this means, don't change it.\n\
-v, --verbose produce more verbose output\n\
-h, --help annotate output with explanatory comments when given\n\
with another command, otherwise print this help\n\
@ -2287,9 +2187,6 @@ struct option longopts[] = {
{"list-package", no_argument, NULL, 'l'},
{"package-query", no_argument, NULL, 'p'},
{"delete-orphaned-installation-keys", no_argument, NULL, CO_DELETE_KEYS},
{"enable-unique-object-names", no_argument, NULL, CO_ENABLE_UON},
{"disable-unique-object-names", no_argument, NULL, CO_DISABLE_UON},
{"show-unique-object-names", no_argument, NULL, CO_SHOW_UON},
{"help", no_argument, NULL, 'h'},
{"version", no_argument, 0, 'V'},
{0, no_argument, NULL, 0}
@ -2426,11 +2323,6 @@ main (int argc, char **argv)
case CO_DELETE_KEYS:
del_orphaned_reg = 1;
break;
case CO_ENABLE_UON:
case CO_DISABLE_UON:
case CO_SHOW_UON:
unique_object_name_opt = i;
break;
case 'V':
print_version ();
exit (0);
@ -2454,7 +2346,7 @@ main (int argc, char **argv)
}
if ((check_setup || sysinfo || find_package || list_package || grep_packages
|| del_orphaned_reg || unique_object_name_opt)
|| del_orphaned_reg)
&& keycheck)
usage (stderr, 1);
@ -2462,11 +2354,6 @@ main (int argc, char **argv)
&& (check_setup || del_orphaned_reg))
usage (stderr, 1);
if ((check_setup || sysinfo || find_package || list_package || grep_packages
|| del_orphaned_reg)
&& unique_object_name_opt)
usage (stderr, 1);
if (dump_only && !check_setup && !sysinfo)
usage (stderr, 1);
@ -2475,8 +2362,6 @@ main (int argc, char **argv)
if (keycheck)
return check_keys ();
if (unique_object_name_opt)
return handle_unique_object_name (unique_object_name_opt, *argv);
if (del_orphaned_reg)
del_orphaned_reg_installations ();
if (grep_packages)