diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2016-07-05 10:16:00 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2016-07-05 10:16:00 +0200 |
commit | d14cc5361f7db7016b7cbb1cc59d8500101d9f27 (patch) | |
tree | 28bb620b5a39a9f649393e5ad113b07089fafe2b /doc/nx-X11_vs_XOrg69_patches/nx-X11_programs_Xserver_os_auth.c.X.original | |
parent | 74a52dd354cc638c9f5fdedb0606b3b69e2b488a (diff) | |
download | nx-libs-d14cc5361f7db7016b7cbb1cc59d8500101d9f27.tar.gz nx-libs-d14cc5361f7db7016b7cbb1cc59d8500101d9f27.tar.bz2 nx-libs-d14cc5361f7db7016b7cbb1cc59d8500101d9f27.zip |
doc/_attic_/: Introduce an "_attic_" folder. Move diffs between NoMachine's nx-X11 3.5 and X.org 6.9 here.
Diffstat (limited to 'doc/nx-X11_vs_XOrg69_patches/nx-X11_programs_Xserver_os_auth.c.X.original')
-rw-r--r-- | doc/nx-X11_vs_XOrg69_patches/nx-X11_programs_Xserver_os_auth.c.X.original | 271 |
1 files changed, 0 insertions, 271 deletions
diff --git a/doc/nx-X11_vs_XOrg69_patches/nx-X11_programs_Xserver_os_auth.c.X.original b/doc/nx-X11_vs_XOrg69_patches/nx-X11_programs_Xserver_os_auth.c.X.original deleted file mode 100644 index d7549c487..000000000 --- a/doc/nx-X11_vs_XOrg69_patches/nx-X11_programs_Xserver_os_auth.c.X.original +++ /dev/null @@ -1,271 +0,0 @@ ---- ./nx-X11/programs/Xserver/os/auth.c.X.original 2015-02-13 14:03:44.788440645 +0100 -+++ ./nx-X11/programs/Xserver/os/auth.c 2015-02-10 19:13:13.452699065 +0100 -@@ -28,6 +28,23 @@ - */ - /* $XFree86: auth.c,v 1.13 2003/04/27 21:31:08 herrb Exp $ */ - -+/**************************************************************************/ -+/* */ -+/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */ -+/* */ -+/* NX-X11, NX protocol compression and NX extensions to this software */ -+/* are copyright of NoMachine. Redistribution and use of the present */ -+/* software is allowed according to terms specified in the file LICENSE */ -+/* which comes in the source distribution. */ -+/* */ -+/* Check http://www.nomachine.com/licensing.html for applicability. */ -+/* */ -+/* NX and NoMachine are trademarks of Medialogic S.p.A. */ -+/* */ -+/* All rights reserved. */ -+/* */ -+/**************************************************************************/ -+ - /* - * authorization hooks for the server - * Author: Keith Packard, MIT X Consortium -@@ -129,7 +146,24 @@ - void - InitAuthorization (char *file_name) - { -+#ifdef __sun -+ char * envBuffer; -+#endif - authorization_file = file_name; -+#ifdef NX_TRANS_AUTH -+#ifdef NX_TRANS_TEST -+ fprintf(stderr, "InitAuthorization: Going to propagate auth file '%s' to the environment.\n", -+ authorization_file); -+#endif -+#ifdef __sun -+ envBuffer = malloc(15+strlen(authorization_file)); -+ sprintf(envBuffer,"NX_XAUTHORITY=%s",authorization_file); -+ putenv(envBuffer); -+#else -+ setenv("NX_XAUTHORITY", authorization_file, 1); -+#endif -+#endif -+ - } - - static int -@@ -144,6 +178,68 @@ - if (!authorization_file) - return 0; - -+#ifdef NX_TRANS_AUTH -+ -+ /* -+ * We think that the way LoadAuthorization() is working is wrong. -+ * It doesn't reset the list of stored authorizations before reading -+ * the new cookies. Our take is that if a new auth file is to be -+ * read, the only cookies that are to be accepted are those that are -+ * in the new file, not those in the file -plus- those that have -+ * been in the file in the past. Furthermore, if the list can't be -+ * read or it is empty, it should assume that it ignores which co- -+ * okies are valid and thus it should disable any access. Your mile- -+ * age can vary. A less draconian approach could be to leave the old -+ * cookies if the file can't be read and remove them only if the -+ * file is empty. -+ * -+ * Adding the cookies without removing the old values for the same -+ * protocol has an important implication. If an user shares the co- -+ * okie with somebody and later wants to revoke the access to the -+ * display, changing the cookie will not work. This is especially -+ * important with NX. For security reasons, after reconnecting the -+ * session to a different display, it is advisable to generate a -+ * new set of cookies, but doing that it is useless with the current -+ * code, as the old cookies are going to be still accepted. On the -+ * same topic, consider that once an user has got access to the X -+ * server, he/she can freely enable host authentication from any -+ * host, so the safe behaviour should be to reset the host based -+ * authenthication at least at reconnection, and keep as valid only -+ * the cookies that are actually in the file. This behaviour would -+ * surely break many applications, among them a SSH connection run -+ * inside a NX session, as ssh -X reads the cookie for the display -+ * only at session startup and does not read the cookies again -+ * when the auth file is changed. -+ * -+ * Another bug (or feature, depending on how you want to consider -+ * it) is that if the authority file contains entries for different -+ * displays (as it is the norm when the authority file is the default -+ * .Xauthority in the user's home), the server will match -any- of -+ * the cookies, even cookies that are not for its own display. This -+ * means that you have be careful when passing an authority file to -+ * nxagent or Xnest and maybe keep separate files for letting nxagent -+ * find the cookie to be used to connect to the remote display and -+ * for letting it find what cookies to accept. If the file is the -+ * same, clients will be able to connect to nxagent with both the -+ * cookies. -+ */ -+ -+#ifdef NX_TRANS_AUTH_RESET -+ -+ #ifdef NX_TRANS_TEST -+ fprintf(stderr, "LoadAuthorization: Resetting authorization info.\n"); -+ #endif -+ -+ for (i = 0; i < NUM_AUTHORIZATION; i++) { -+ if (protocols[i].Reset) { -+ (*protocols[i].Reset) (); -+ } -+ } -+ -+#endif -+ -+#endif /* #ifdef NX_TRANS_AUTH */ -+ - f = Fopen (authorization_file, "r"); - if (!f) - return -1; -@@ -154,6 +250,14 @@ - memcmp (protocols[i].name, auth->name, (int) auth->name_length) == 0 && - protocols[i].Add) - { -+#ifdef NX_TRANS_AUTH -+ -+ #ifdef NX_TRANS_TEST -+ fprintf(stderr, "LoadAuthorization: Adding new record from file [%s].\n", -+ authorization_file); -+ #endif -+ -+#endif - ++count; - (*protocols[i].Add) (auth->data_length, auth->data, - FakeClientID(0)); -@@ -162,7 +266,46 @@ - XauDisposeAuth (auth); - } - -+#ifdef NX_TRANS_AUTH -+ -+ if (count == 0) -+ { -+ fprintf(stderr, "Warning: No authorization record could be read from file '%s'.\n", -+ authorization_file); -+ -+ fprintf(stderr, "Warning: Please, create a valid authorization cookie using the command\n" -+ "Warning: 'xauth -f %s add <display> MIT-MAGIC-COOKIE-1 <cookie>'.\n", -+ authorization_file); -+ } -+ -+#endif -+ -+#ifdef NX_TRANS_AUTH -+ if (Fclose (f) != 0) -+ { -+ /* -+ * If the Fclose() fails, for example because of a signal, -+ * it's advisable to return the number of protocols read, -+ * if any, or otherwise the server would believe that no -+ * cookie is valid and eventually fall back to host based -+ * authentication. Note anyway that the new code in Check- -+ * Authorization() doesn't care the return value and gives -+ * a chance to the function to check the file at the next -+ * connection. -+ */ -+ -+ if (count > 0) -+ { -+ return count; -+ } -+ else -+ { -+ return -1; -+ } -+ } -+#else - Fclose (f); -+#endif - return count; - } - -@@ -194,7 +337,10 @@ - int i; - struct stat buf; - static time_t lastmod = 0; -+ -+ #ifndef NX_TRANS_AUTH - static Bool loaded = FALSE; -+ #endif - - if (!authorization_file || stat(authorization_file, &buf)) - { -@@ -225,7 +371,67 @@ - * entries for this server), and reloading it later fails, don't - * change anything. (loadauth == -1 && loaded) - */ -- -+ -+#ifdef NX_TRANS_AUTH -+ -+ /* -+ * The implementation of CheckAuthorization() was changed. The way -+ * the auth file was handled previously was questionable and could -+ * open the way to a vast array of security problems. There might be -+ * ways for an attacker to prevent the server from reading the file -+ * and it was enough for the server to fail reading the file once -+ * (because of a not blocked signal, for example) to leave the dis- -+ * play open to all the users running a session on the same terminal -+ * server. -+ * -+ * In NX we want to have only two cases: either we have to check an -+ * authorization file or we don't. In the first case we need to do our -+ * best to read the file at any new client access and never fall back -+ * to host based authentication. Falling back to local host access has -+ * no way back, as it will always take precedence over the auth cookie -+ * (unless the user explicitly disables, one by one, all the rules -+ * allowing local access, if and only if he/she becomes aware of the -+ * problem). In the second case we assume that user doesn't care secu- -+ * rity and so allow unrestricted access from the local machine. -+ */ -+ -+ #ifdef NX_TRANS_TEST -+ fprintf(stderr, "CheckAuthorization: Going to set authorization with loadauth [%d].\n", -+ loadauth); -+ #endif -+ -+ if (authorization_file) -+ { -+ #ifdef NX_TRANS_TEST -+ fprintf(stderr, "CheckAuthorization: Disabling local host access.\n"); -+ #endif -+ -+ DisableLocalHost(); -+ } -+ else -+ { -+ /* -+ * Enable host-based authentication only if -+ * the authorization file was not specified -+ * either on the command line or in the env- -+ * ironment. -+ */ -+ -+ #ifdef NX_TRANS_TEST -+ fprintf(stderr, "CheckAuthorization: Enabling local host access.\n"); -+ #endif -+ -+ EnableLocalHost(); -+ } -+ -+ /* -+ * Avoid the 'unused variable' warning. -+ */ -+ -+ loadauth = loadauth; -+ -+#else /* #ifdef NX_TRANS_AUTH */ -+ - if (loadauth > 0) - { - DisableLocalHost(); /* got at least one */ -@@ -233,6 +439,8 @@ - } - else if (loadauth == 0 || !loaded) - EnableLocalHost (); -+ -+#endif /* #ifdef NX_TRANS_AUTH */ - } - if (name_length) { - for (i = 0; i < NUM_AUTHORIZATION; i++) { |