diff options
Diffstat (limited to 'nx-X11/programs/nxauth')
-rw-r--r-- | nx-X11/programs/nxauth/CHANGELOG | 108 | ||||
-rw-r--r-- | nx-X11/programs/nxauth/COPYING | 339 | ||||
-rw-r--r-- | nx-X11/programs/nxauth/Imakefile | 38 | ||||
-rw-r--r-- | nx-X11/programs/nxauth/LICENSE | 26 | ||||
-rw-r--r-- | nx-X11/programs/nxauth/gethost.c | 287 | ||||
-rw-r--r-- | nx-X11/programs/nxauth/nxauth.man | 236 | ||||
-rw-r--r-- | nx-X11/programs/nxauth/parsedpy.c | 259 | ||||
-rw-r--r-- | nx-X11/programs/nxauth/process.c | 1872 | ||||
-rw-r--r-- | nx-X11/programs/nxauth/xauth.c | 184 | ||||
-rw-r--r-- | nx-X11/programs/nxauth/xauth.h | 58 |
10 files changed, 0 insertions, 3407 deletions
diff --git a/nx-X11/programs/nxauth/CHANGELOG b/nx-X11/programs/nxauth/CHANGELOG deleted file mode 100644 index 9faf9eba2..000000000 --- a/nx-X11/programs/nxauth/CHANGELOG +++ /dev/null @@ -1,108 +0,0 @@ -ChangeLog: - -nxauth-3.5.0-1 - -- Opened the 3.5.0 branch based on nxauth-3.4.0-3. - -- Updated copyright to year 2011. - -nxauth-3.4.0-3 - -- Updated the launchd socket detection to support OSX versions relea- - sed so far. - -nxauth-3.4.0-2 - -- Updated copyright to year 2010. - -nxauth-3.4.0-1 - -- Opened the 3.4.0 branch based on nxauth-3.3.0-1. - -- Updated copyright to year 2009. - -nxauth-3.3.0-1 - -- Opened the 3.3.0 branch based on nxauth-3.2.0-1. - -nxauth-3.2.0-1 - -- Opened the 3.2.0 branch based on nxauth-3.1.0-2. - -nxauth-3.1.0-2 - -- Added support for launchd socket. - -nxauth-3.1.0-1 - -- Opened the 3.1.0 branch based on nxauth-3.0.0-6. - -nxauth-3.0.0-6 - -- Updated the NoMachine copyright notice. - -nxauth-3.0.0-5 - -- Changed the copyright attribution from Medialogic to NoMachine. - -nxauth-3.0.0-4 - -- Changed the LICENSE file to state that the software is only made - available under the version 2 of the GPL. - -- Added file COPYING. - -nxauth-3.0.0-3 - -- Updated copyright notices to year 2007. - -nxauth-3.0.0-2 - -- Imported changes up to nxauth-2.1.0-1. - -- Ignoring lock on '.Xauthority' file. - -- Using '__CYGWIN__' definition in process.c. 'WIN32' is not defined - during compilation under nx-X11 and wrong code block is used to - rename xauth temporary file. - -nxauth-3.0.0-1 - -- Opened the 3.0.0 branch based on nxauth-2.0.0-2. - -nxauth-2.0.0-2 - -- Updated the NoMachine copyright notices. - -nxauth-2.0.0-1 - -- Opened the 2.0.0 branch based on the 1.6.0-1. - -nxauth-1.6.0-1 - -- Opened the 1.6.0 branch based on nxauth-1.5.0-1. - -nxauth-1.5.0-1 - -- Opened the 1.5.0 branch. - -nxauth-1.4.1-1 - -- Opened the 1.4.1 branch. - -nxauth-1.4.0-2 - -- Removed debug message 'host name is'. - -nxauth-1.4.0-1 - -- Opened the 1.4.0 branch based on nxauth-1.3.2-1. - -nxauth-1.3.2-1 - -- Opened the 1.3.2 branch. - -nxauth-1.3.1-2 - -- Fixed problem with compilation on systems without - X11 includes instaled. diff --git a/nx-X11/programs/nxauth/COPYING b/nx-X11/programs/nxauth/COPYING deleted file mode 100644 index d511905c1..000000000 --- a/nx-X11/programs/nxauth/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/nx-X11/programs/nxauth/Imakefile b/nx-X11/programs/nxauth/Imakefile deleted file mode 100644 index 278904f05..000000000 --- a/nx-X11/programs/nxauth/Imakefile +++ /dev/null @@ -1,38 +0,0 @@ -XCOMM $Xorg: Imakefile,v 1.3 2000/08/17 19:54:11 cpqbld Exp $ - - - - -XCOMM $XFree86: xc/programs/xauth/Imakefile,v 3.5 2001/03/30 02:15:23 keithp Exp $ - -/**************************************************************************/ -/* */ -/* Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/. */ -/* */ -/* NXAUTH, 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. */ -/* */ -/**************************************************************************/ -/* LOCAL_LIBRARIES = $(DESTDIR)$(SHLIBDIR)/libXau.a */ - - - INCLUDES=-I../../lib - DEPLIBS = $(DEPXAUTHLIB) - LOCAL_LIBRARIES = $(XAUTHLIB) - SRCS = xauth.c gethost.c process.c parsedpy.c - OBJS = xauth.o gethost.o process.o parsedpy.o - CONN_DEFINES = $(CONNECTION_FLAGS) - -ComplexProgramTarget(nxauth) - -SpecialCObjectRule(gethost,$(ICONFIGFILES),$(CONN_DEFINES) $(SIGNAL_DEFINES)) -SpecialCObjectRule(process,$(ICONFIGFILES),$(SIGNAL_DEFINES)) -SpecialCObjectRule(parsedpy,$(ICONFIGFILES),$(CONN_DEFINES)) diff --git a/nx-X11/programs/nxauth/LICENSE b/nx-X11/programs/nxauth/LICENSE deleted file mode 100644 index 626b9c54f..000000000 --- a/nx-X11/programs/nxauth/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2001, 2010 NoMachine - http://www.nomachine.com/. - -NXAUTH and NX extensions to X are copyright of NoMachine. - -Redistribution and use of this software is allowed according to the -following terms: - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License Version 2, and -not any other version, as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTA- -BILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, you can request a copy to NoMachine -or write to the Free Software Foundation, Inc., 59 Temple Place, -Suite 330, Boston, MA 02111-1307 USA - -Parts of this software are derived from XFree86 project. Other copy- -rights and the MIT/X11 license applies to different sources. Please -check the applicable copyrights in each file or subdirectory. - -All rights reserved. diff --git a/nx-X11/programs/nxauth/gethost.c b/nx-X11/programs/nxauth/gethost.c deleted file mode 100644 index fa889f29b..000000000 --- a/nx-X11/programs/nxauth/gethost.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - * $Xorg: gethost.c,v 1.5 2001/02/09 02:05:38 xorgcvs Exp $ - * - * -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - * * - * Author: Jim Fulton, MIT X Consortium - */ - -/* $XFree86: xc/programs/xauth/gethost.c,v 3.16 2001/12/14 20:01:14 dawes Exp $ */ - -/* sorry, streams support does not really work yet */ -#if defined(STREAMSCONN) && defined(SVR4) -#undef STREAMSCONN -#define TCPCONN -#endif - -#ifdef WIN32 -#include <nx-X11/Xwinsock.h> -#define EPROTOTYPE WSAEPROTOTYPE -#endif -#include <nx-X11/X.h> -#include <signal.h> -#include <setjmp.h> -#include <ctype.h> -#ifndef __TYPES__ -#include <sys/types.h> -#define __TYPES__ -#endif -#ifndef WIN32 -#ifndef STREAMSCONN -#ifndef Lynx -#include <sys/socket.h> -#else -#include <socket.h> -#endif -#include <netdb.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#ifdef SYSV -#ifdef i386 -#ifndef sco -#include <net/errno.h> -#endif /* !sco */ -#endif /* i386 */ -#endif /* SYSV */ -#endif /* !STREAMSCONN */ -#endif /* !WIN32 */ -#include <errno.h> -#include "xauth.h" - -#ifdef DNETCONN -#include <netdnet/dn.h> -#include <netdnet/dnetdb.h> -#endif - -#ifdef SIGALRM -Bool nameserver_timedout = False; - - -/* - * get_hostname - Given an internet address, return a name (CHARON.MIT.EDU) - * or a string representing the address (18.58.0.13) if the name cannot - * be found. Stolen from xhost. - */ - -static jmp_buf env; -static -#ifdef SIGNALRETURNSINT -int -#else -void -#endif -nameserver_lost(int sig) -{ - nameserver_timedout = True; - longjmp (env, -1); - /* NOTREACHED */ -#ifdef SIGNALRETURNSINT - return -1; /* for picky compilers */ -#endif -} -#endif - -char * -get_hostname (auth) - Xauth *auth; -{ - static struct hostent *hp = NULL; -#ifdef DNETCONN - struct nodeent *np; - static char nodeaddr[4 + 2 * DN_MAXADDL]; -#endif /* DNETCONN */ - - if (auth->address_length == 0) - return "Illegal Address"; -#ifdef TCPCONN - if (auth->family == FamilyInternet) { -#ifdef SIGALRM - /* gethostbyaddr can take a LONG time if the host does not exist. - Assume that if it does not respond in NAMESERVER_TIMEOUT seconds - that something is wrong and do not make the user wait. - gethostbyaddr will continue after a signal, so we have to - jump out of it. - */ - nameserver_timedout = False; - signal (SIGALRM, nameserver_lost); - alarm (4); - if (setjmp(env) == 0) { -#endif - hp = gethostbyaddr (auth->address, auth->address_length, AF_INET); -#ifdef SIGALRM - } - alarm (0); -#endif - if (hp) - return (hp->h_name); - else - return (inet_ntoa(*((struct in_addr *)(auth->address)))); - } -#endif -#ifdef DNETCONN - if (auth->family == FamilyDECnet) { - struct dn_naddr *addr_ptr = (struct dn_naddr *) auth->address; - - if (np = getnodebyaddr(addr_ptr->a_addr, addr_ptr->a_len, AF_DECnet)) { - sprintf(nodeaddr, "%s:", np->n_name); - } else { - sprintf(nodeaddr, "%s:", dnet_htoa(auth->address)); - } - return(nodeaddr); - } -#endif - - return (NULL); -} - -#ifdef TCPCONN -/* - * cribbed from lib/X/XConnDis.c - */ -static Bool -get_inet_address(char *name, unsigned int *resultp) -{ - unsigned int hostinetaddr = inet_addr (name); - struct hostent *host_ptr; - struct sockaddr_in inaddr; /* dummy variable for size calcs */ - -#ifndef INADDR_NONE -#define INADDR_NONE -1 -#endif - - if (hostinetaddr == INADDR_NONE) { - if ((host_ptr = gethostbyname (name)) == NULL) { - /* No such host! */ - errno = EINVAL; - return False; - } - /* Check the address type for an internet host. */ - if (host_ptr->h_addrtype != AF_INET) { - /* Not an Internet host! */ - errno = EPROTOTYPE; - return False; - } - - memmove( (char *)&hostinetaddr, (char *)host_ptr->h_addr, - sizeof(inaddr.sin_addr)); - } - *resultp = hostinetaddr; - return True; -} -#endif - -#ifdef DNETCONN -static Bool get_dnet_address (name, resultp) - char *name; - struct dn_naddr *resultp; -{ - struct dn_naddr *dnaddrp, dnaddr; - struct nodeent *np; - - if (dnaddrp = dnet_addr (name)) { /* stolen from xhost */ - dnaddr = *dnaddrp; - } else { - if ((np = getnodebyname (name)) == NULL) return False; - dnaddr.a_len = np->n_length; - memmove( dnaddr.a_addr, np->n_addr, np->n_length); - } - *resultp = dnaddr; - return True; -} -#endif - -char *get_address_info (family, fulldpyname, prefix, host, lenp) - int family; - char *fulldpyname; - int prefix; - char *host; - int *lenp; -{ - char *retval = NULL; - int len = 0; - char *src = NULL; -#ifdef TCPCONN - unsigned int hostinetaddr; -#endif -#ifdef DNETCONN - struct dn_naddr dnaddr; -#endif - char buf[255]; - - /* - * based on the family, set the pointer src to the start of the address - * information to be copied and set len to the number of bytes. - */ - switch (family) { - case FamilyLocal: /* hostname/unix:0 */ - /* handle unix:0 and :0 specially */ - if (prefix == 0 && (strncmp (fulldpyname, "unix:", 5) == 0 || - fulldpyname[0] == ':')) { - - if (!get_local_hostname (buf, sizeof buf)) { - len = 0; - } else { - src = buf; - len = strlen (buf); - } - } else { - src = fulldpyname; - len = prefix; - } - break; - case FamilyInternet: /* host:0 */ -#ifdef TCPCONN - if (!get_inet_address (host, &hostinetaddr)) return NULL; - src = (char *) &hostinetaddr; - len = 4; /* sizeof inaddr.sin_addr, would fail on Cray */ - break; -#else - return NULL; -#endif - case FamilyDECnet: /* host::0 */ -#ifdef DNETCONN - if (!get_dnet_address (host, &dnaddr)) return NULL; - src = (char *) &dnaddr; - len = (sizeof dnaddr); - break; -#else - /* fall through since we don't have code for it */ -#endif - default: - src = NULL; - len = 0; - } - - /* - * if source was provided, allocate space and copy it - */ - if (len == 0 || !src) return NULL; - - retval = malloc (len); - if (retval) { - memmove( retval, src, len); - *lenp = len; - } - return retval; -} diff --git a/nx-X11/programs/nxauth/nxauth.man b/nx-X11/programs/nxauth/nxauth.man deleted file mode 100644 index b9df3737d..000000000 --- a/nx-X11/programs/nxauth/nxauth.man +++ /dev/null @@ -1,236 +0,0 @@ -.\" $Xorg: xauth.man,v 1.4 2001/02/09 02:05:38 xorgcvs Exp $ -.\" Copyright 1993, 1998 The Open Group -.\" -.\" Permission to use, copy, modify, distribute, and sell this software and its -.\" documentation for any purpose is hereby granted without fee, provided that -.\" the above copyright notice appear in all copies and that both that -.\" copyright notice and this permission notice appear in supporting -.\" documentation. -.\" -.\" The above copyright notice and this permission notice shall be included -.\" in all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -.\" IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR -.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -.\" OTHER DEALINGS IN THE SOFTWARE. -.\" -.\" Except as contained in this notice, the name of The Open Group shall -.\" not be used in advertising or otherwise to promote the sale, use or -.\" other dealings in this Software without prior written authorization -.\" from The Open Group. -.\" -.\" $XFree86: xc/programs/xauth/xauth.man,v 1.7 2001/12/14 20:01:15 dawes Exp $ -.\" -.TH XAUTH 1 __xorgversion__ -.SH NAME -nxauth \- NoMachine X authority file utility -.SH SYNOPSIS -.B nxauth -[ \fB\-f\fP \fIauthfile\fP ] [ \fB\-vqib\fP ] [ \fIcommand arg ...\fP ] -.SH DESCRIPTION -.PP -The \fInxauth\fP program is used to edit and display the authorization -information used in connecting to the X server. This program is usually -used to extract authorization records from one machine and merge them in on -another (as is the case when using remote logins or granting access to -other users). Commands (described below) may be entered interactively, -on the \fInxauth\fP command line, or in scripts. Note that this program -does \fBnot\fP contact the X server except when the generate command is used. -Normally \fInxauth\fP is not used to create the authority file entry in -the first place; \fIxdm\fP does that. -.SH OPTIONS -The following options may be used with \fInxauth\fP. They may be given -individually (e.g., \fI\-q \-i\|\fP) or may combined (e.g., \fI\-qi\|\fP). -.TP 8 -.B "\-f \fIauthfile\fP" -This option specifies the name of the authority file to use. By default, -\fInxauth\fP will use the file specified by the nxauthORITY environment variable -or \fI\.Xauthority\fP in the user's home directory. -.TP 8 -.B \-q -This option indicates that \fInxauth\fP should operate quietly and not print -unsolicited status messages. This is the default if an \fInxauth\fP command is -is given on the command line or if the standard output is not directed to a -terminal. -.TP 8 -.B \-v -This option indicates that \fInxauth\fP should operate verbosely and print -status messages indicating the results of various operations (e.g., how many -records have been read in or written out). This is the default if \fInxauth\fP -is reading commands from its standard input and its standard output is -directed to a terminal. -.TP 8 -.B \-i -This option indicates that \fInxauth\fP should ignore any authority file -locks. Normally, \fInxauth\fP will refuse to read or edit any authority files -that have been locked by other programs (usually \fIxdm\fP or another -\fInxauth\fP). -.TP 8 -.B \-b -This option indicates that \fInxauth\fP should attempt to break any authority -file locks before proceeding. Use this option only to clean up stale locks. -.SH COMMANDS -The following commands may be used to manipulate authority files: -.TP 8 -.B "add \fIdisplayname protocolname hexkey" -An authorization entry for the indicated display using the given protocol -and key data is added to the authorization file. The data is specified as -an even-lengthed string of hexadecimal digits, each pair representing -one octet. The first digit of each pair gives the most significant 4 bits -of the octet, and the second digit of the pair gives the least significant 4 -bits. For example, a 32 character hexkey would represent a 128-bit value. -A protocol name consisting of just a -single period is treated as an abbreviation for \fIMIT-MAGIC-COOKIE-1\fP. - -.TP 8 -.B "generate \fIdisplayname protocolname\fP \fR[\fPtrusted|untrusted\fR]\fP" -.B \fR[\fPtimeout \fIseconds\fP\fR]\fP \fR[\fPgroup \fIgroup-id\fP\fR]\fP \fR[\fBdata \fIhexdata\fR] - -This command is similar to add. The main difference is that instead -of requiring the user to supply the key data, it connects to the -server specified in \fIdisplayname\fP and uses the SECURITY extension -in order to get the key data to store in the authorization file. If -the server cannot be contacted or if it does not support the SECURITY -extension, the command fails. Otherwise, an authorization entry for -the indicated display using the given protocol is added to the -authorization file. A protocol name consisting of just a single -period is treated as an abbreviation for \fIMIT-MAGIC-COOKIE-1\fP. - -If the \fBtrusted\fP option is used, clients that connect using this -authorization will have full run of the display, as usual. If -\fBuntrusted\fP is used, clients that connect using this authorization -will be considered untrusted and prevented from stealing or tampering -with data belonging to trusted clients. See the SECURITY extension -specification for full details on the restrictions imposed on -untrusted clients. The default is \fBuntrusted\fP. - -The \fBtimeout\fP option specifies how long in seconds this -authorization will be valid. If the authorization remains unused (no -clients are connected with it) for longer than this time period, the -server purges the authorization, and future attempts to connect using -it will fail. Note that the purging done by the server does \fBnot\fP -delete the authorization entry from the authorization file. The -default timeout is 60 seconds. - -The \fBgroup\fP option specifies the application group that clients -connecting with this authorization should belong to. See the -application group extension specification for more details. The -default is to not belong to an application group. - -The \fBdata\fP option specifies data that the server should use to -generate the authorization. Note that this is \fBnot\fP the same data -that gets written to the authorization file. The interpretation of -this data depends on the authorization protocol. The \fIhexdata\fP is -in the same format as the \fIhexkey\fP described in the add command. -The default is to send no data. - -.TP 8 -.B "[n]extract \fIfilename displayname..." -Authorization entries for each of the specified displays are written to the -indicated file. If the \fInextract\fP command is used, the entries are written -in a numeric format suitable for non-binary transmission (such as secure -electronic mail). The extracted entries can be read back in using the -\fImerge\fP and \fInmerge\fP commands. If the filename consists of -just a single dash, the entries will be written to the standard output. -.TP 8 -.B "[n]list \fR[\fIdisplayname\fP...]" -Authorization entries for each of the specified displays (or all if no -displays are named) are printed on the standard output. If the \fInlist\fP -command is used, entries will be shown in the numeric format used by -the \fInextract\fP command; otherwise, they are shown in a textual format. -Key data is always displayed in the hexadecimal format given in the -description of the \fIadd\fP command. -.TP 8 -.B "[n]merge \fR[\fIfilename\fP...]" -Authorization entries are read from the specified files and are merged into -the authorization database, superceding any matching existing entries. If -the \fInmerge\fP command is used, the numeric format given in the description -of the \fIextract\fP command is used. If a filename consists of just a single -dash, the standard input will be read if it hasn't been read before. -.TP 8 -.B "remove \fIdisplayname\fR..." -Authorization entries matching the specified displays are removed from the -authority file. -.TP 8 -.B "source \fIfilename" -The specified file is treated as a script containing \fInxauth\fP commands -to execute. Blank lines and lines beginning with a sharp sign (#) are -ignored. A single dash may be used to indicate the standard input, if it -hasn't already been read. -.TP 8 -.B "info" -Information describing the authorization file, whether or not any changes -have been made, and from where \fInxauth\fP commands are being read -is printed on the standard output. -.TP 8 -.B "exit" -If any modifications have been made, the authority file is written out (if -allowed), and the program exits. An end of file is treated as an implicit -\fIexit\fP command. -.TP 8 -.B "quit" -The program exits, ignoring any modifications. This may also be accomplished -by pressing the interrupt character. -.TP 8 -.B "help [\fIstring\fP]" -A description of all commands that begin with the given string (or all -commands if no string is given) is printed on the standard output. -.TP 8 -.B "?" -A short list of the valid commands is printed on the standard output. -.SH "DISPLAY NAMES" -Display names for the \fIadd\fP, \fI[n]extract\fP, \fI[n]list\fP, -\fI[n]merge\fP, and \fIremove\fP commands use the same format as the -DISPLAY environment variable and the common \fI\-display\fP command line -argument. Display-specific information (such as the screen number) -is unnecessary and will be ignored. -Same-machine connections (such as local-host sockets, -shared memory, and the Internet Protocol hostname \fIlocalhost\fP) are -referred to as \fIhostname\fP/unix:\fIdisplaynumber\fP so that -local entries for different machines may be stored in one authority file. -.SH EXAMPLE -.PP -The most common use for \fInxauth\fP is to extract the entry for the -current display, copy it to another machine, and merge it into the -user's authority file on the remote machine: -.sp -.nf - % nxauth extract \- $DISPLAY | rsh otherhost nxauth merge \- -.fi -.PP -.sp -The following command contacts the server :0 to create an -authorization using the MIT-MAGIC-COOKIE-1 protocol. Clients that -connect with this authorization will be untrusted. -.nf - % nxauth generate :0 . -.fi -.SH ENVIRONMENT -This \fInxauth\fP program uses the following environment variables: -.TP 8 -.B XAUTHORITY -to get the name of the authority file to use if the \fI\-f\fP option isn't -used. -.TP 8 -.B HOME -to get the user's home directory if XAUTHORITY isn't defined. -.SH FILES -.TP 8 -.I $HOME/.Xauthority -default authority file if XAUTHORITY isn't defined. -.SH BUGS -.PP -Users that have unsecure networks should take care to use encrypted -file transfer mechanisms to copy authorization entries between machines. -Similarly, the \fIMIT-MAGIC-COOKIE-1\fP protocol is not very useful in -unsecure environments. Sites that are interested in additional security -may need to use encrypted authorization mechanisms such as Kerberos. -.PP -Spaces are currently not allowed in the protocol name. Quoting could be -added for the truly perverse. -.SH AUTHOR -Jim Fulton, MIT X Consortium diff --git a/nx-X11/programs/nxauth/parsedpy.c b/nx-X11/programs/nxauth/parsedpy.c deleted file mode 100644 index d0f022574..000000000 --- a/nx-X11/programs/nxauth/parsedpy.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - * $Xorg: parsedpy.c,v 1.4 2001/02/09 02:05:38 xorgcvs Exp $ - * - * parse_displayname - utility routine for splitting up display name strings - * - * -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - * * - * Author: Jim Fulton, MIT X Consortium - */ - -/* $XFree86: xc/programs/xauth/parsedpy.c,v 3.6 2001/12/14 20:01:15 dawes Exp $ */ -/**************************************************************************/ -/* */ -/* Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/. */ -/* */ -/* NXAUTH, 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. */ -/* */ -/**************************************************************************/ - -#include <stdio.h> /* for NULL */ -#include <ctype.h> /* for isascii() and isdigit() */ -#include <nx-X11/Xos.h> /* for strchr() and string routines */ -#include <nx-X11/Xlib.h> /* for Family contants */ -#ifdef hpux -#include <sys/utsname.h> /* for struct utsname */ -#endif -#include <nx-X11/Xauth.h> /* for FamilyLocal */ - -#if defined(UNIXCONN) || defined(LOCALCONN) -#define UNIX_CONNECTION "unix" -#define UNIX_CONNECTION_LENGTH 4 -#endif - -#include <stdlib.h> -#include "xauth.h" - -#define PANIC -#define WARNING -#undef TEST -#undef DEBUG - -/* - * private utility routines - */ - -char * -copystring (char *src, int len) -{ - char *cp; - - if (!src && len != 0) return NULL; - cp = malloc (len + 1); - if (cp) { - if (src) strncpy (cp, src, len); - cp[len] = '\0'; - } - return cp; -} - - -char * -get_local_hostname (char *buf, int maxlen) -{ - buf[0] = '\0'; -/* - (void) XmuGetHostname (buf, maxlen); -*/ - /*FIXME*/ - - (void) gethostname (buf, maxlen); - - buf [maxlen - 1] = '\0'; - - #ifdef TEST - printf("get_local_hostname: Host name is %s", buf); - #endif - - return (buf[0] ? buf : NULL); -} - -#ifndef UNIXCONN -static char * -copyhostname (void) -{ - char buf[256]; - - return (get_local_hostname (buf, sizeof buf) ? - copystring (buf, strlen (buf)) : NULL); -} -#endif - -/* - * parse_displayname - display a display string up into its component parts - */ -Bool -parse_displayname (char *displayname, - int *familyp, /* return */ - char **hostp, /* return */ - int *dpynump, /* return */ - int *scrnump, /* return */ - char **restp) /* return */ -{ - char *ptr; /* work variables */ - int len; /* work variable */ - int family = -1; /* value to be returned */ - char *host = NULL; /* must free if set and error return */ - int dpynum = -1; /* value to be returned */ - int scrnum = 0; /* value to be returned */ - char *rest = NULL; /* must free if set and error return */ - Bool dnet = False; /* if true then using DECnet */ - - /* check the name */ - if (!displayname || !displayname[0]) return False; - - /* must have at least :number */ - ptr = strchr(displayname, ':'); - if (!ptr || !ptr[1]) return False; - if (ptr[1] == ':') { - if (ptr[2] == '\0') return False; - dnet = True; - } - - - /* - * get the host string; if none is given, use the most effiecient path - */ - - len = (ptr - displayname); /* length of host name */ - if (len == 0) { /* choose most efficient path */ -#if defined(UNIXCONN) || defined(LOCALCONN) - host = copystring (UNIX_CONNECTION, UNIX_CONNECTION_LENGTH); - family = FamilyLocal; -#else - if (dnet) { - host = copystring ("0", 1); - family = FamilyDECnet; - } else { - host = copyhostname (); - family = FamilyInternet; - } -#endif - } else { - host = copystring (displayname, len); - if (dnet) { - family = dnet; - } else { -#if defined(UNIXCONN) || defined(LOCALCONN) - if (host && strcmp (host, UNIX_CONNECTION) == 0) - family = FamilyLocal; - else -#endif - family = FamilyInternet; - } - } - - if (!host) return False; - - - /* - * get the display number; we know that there is something after the - * colon (or colons) from above. note that host is now set and must - * be freed if there is an error. - */ - - if (dnet) ptr++; /* skip the extra DECnet colon */ - ptr++; /* move to start of display num */ - { - register char *cp; - - for (cp = ptr; *cp && isascii(*cp) && isdigit(*cp); cp++) ; - len = (cp - ptr); - /* check present and valid follow */ - if (len == 0 || (*cp && *cp != '.')) { - free (host); - return False; - } - - dpynum = atoi (ptr); /* it will handle num. as well */ - ptr = cp; - } - - /* - * now get screen number if given; ptr may point to nul at this point - */ - if (ptr[0] == '.') { - register char *cp; - - ptr++; - for (cp = ptr; *cp && isascii(*cp) && isdigit(*cp); cp++) ; - len = (cp - ptr); - if (len == 0 || (*cp && *cp != '.')) { /* all prop name */ - free (host); - return False; - } - - scrnum = atoi (ptr); /* it will handle num. as well */ - ptr = cp; - } - - /* - * and finally, get any additional stuff that might be following the - * the screen number; ptr must point to a period if there is anything - */ - - if (ptr[0] == '.') { - ptr++; - len = strlen (ptr); - if (len > 0) { - rest = copystring (ptr, len); - if (!rest) { - free (host); - return False; - } - } - } - - /* - * and we are done! - */ - - *familyp = family; - *hostp = host; - *dpynump = dpynum; - *scrnump = scrnum; - *restp = rest; - return True; -} - - diff --git a/nx-X11/programs/nxauth/process.c b/nx-X11/programs/nxauth/process.c deleted file mode 100644 index 86aba2b2a..000000000 --- a/nx-X11/programs/nxauth/process.c +++ /dev/null @@ -1,1872 +0,0 @@ -/* $Xorg: process.c,v 1.6 2001/02/09 02:05:38 xorgcvs Exp $ */ -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall -not be used in advertising or otherwise to promote the sale, use or -other dealings in this Software without prior written authorization -from The Open Group. - -*/ -/* $XFree86: xc/programs/xauth/process.c,v 3.18 2003/02/13 02:50:22 dawes Exp $ */ - -/**************************************************************************/ -/* */ -/* Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/. */ -/* */ -/* NXAUTH, 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. */ -/* */ -/**************************************************************************/ - -/* - * Author: Jim Fulton, MIT X Consortium - */ - -#include "xauth.h" -#include <ctype.h> -#include <errno.h> -#include <sys/stat.h> - -#include <signal.h> -/*#include <nx-X11/X.h>*/ /* for Family constants */ -/* -#include <nx-X11/Xlib.h> -#include <nx-X11/extensions/security.h> -*/ - -/*FIXME*/ -#define FamilyInternet 0 -#define FamilyDECnet 1 - -extern Bool naneserver_timedout; - -#ifndef DEFAULT_PROTOCOL_ABBREV /* to make add command easier */ -#define DEFAULT_PROTOCOL_ABBREV "." -#endif -#ifndef DEFAULT_PROTOCOL /* for protocol abbreviation */ -#define DEFAULT_PROTOCOL "MIT-MAGIC-COOKIE-1" -#endif - -#define SECURERPC "SUN-DES-1" -#define K5AUTH "MIT-KERBEROS-5" - -#define XAUTH_DEFAULT_RETRIES 10 /* number of competitors we expect */ -#define XAUTH_DEFAULT_TIMEOUT 2 /* in seconds, be quick */ -#define XAUTH_DEFAULT_DEADTIME 600L /* 10 minutes in seconds */ - -typedef struct _AuthList { /* linked list of entries */ - struct _AuthList *next; - Xauth *auth; -} AuthList; - -typedef int (*ProcessFunc)(char *, int, int, char**); - -#define add_to_list(h,t,e) {if (t) (t)->next = (e); else (h) = (e); (t) = (e);} - -typedef struct _CommandTable { /* commands that are understood */ - char *name; /* full name */ - int minlen; /* unique prefix */ - int maxlen; /* strlen(name) */ - ProcessFunc processfunc; /* handler */ - char *helptext; /* what to print for help */ -} CommandTable; - -struct _extract_data { /* for iterating */ - FILE *fp; /* input source */ - char *filename; /* name of input */ - Bool used_stdout; /* whether or not need to close */ - Bool numeric; /* format in which to write */ - int nwritten; /* number of entries written */ - char *cmd; /* for error messages */ -}; - -struct _list_data { /* for iterating */ - FILE *fp; /* output file */ - Bool numeric; /* format in which to write */ -}; - - -/* - * private data - */ -static char *stdin_filename = "(stdin)"; /* for messages */ -static char *stdout_filename = "(stdout)"; /* for messages */ -static char *Yes = "yes"; /* for messages */ -static char *No = "no"; /* for messages */ - -static int do_help ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_questionmark ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_list ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_merge ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_extract ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_add ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_remove ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_info ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_exit ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_quit ( char *inputfilename, int lineno, int argc, char **argv ); -static int do_source ( char *inputfilename, int lineno, int argc, char **argv ); -/* -static int do_generate ( char *inputfilename, int lineno, int argc, char **argv ); -*/ -static CommandTable command_table[] = { /* table of known commands */ - { "add", 2, 3, do_add, - "add dpyname protoname hexkey add entry" }, - { "exit", 3, 4, do_exit, - "exit save changes and exit program" }, - { "extract", 3, 7, do_extract, - "extract filename dpyname... extract entries into file" }, - { "help", 1, 4, do_help, - "help [topic] print help" }, - { "info", 1, 4, do_info, - "info print information about entries" }, - { "list", 1, 4, do_list, - "list [dpyname...] list entries" }, - { "merge", 1, 5, do_merge, - "merge filename... merge entries from files" }, - { "nextract", 2, 8, do_extract, - "nextract filename dpyname... numerically extract entries" }, - { "nlist", 2, 5, do_list, - "nlist [dpyname...] numerically list entries" }, - { "nmerge", 2, 6, do_merge, - "nmerge filename... numerically merge entries" }, - { "quit", 1, 4, do_quit, - "quit abort changes and exit program" }, - { "remove", 1, 6, do_remove, - "remove dpyname... remove entries" }, - { "source", 1, 6, do_source, - "source filename read commands from file" }, - { "?", 1, 1, do_questionmark, - "? list available commands" }, -/* { "generate", 1, 8, do_generate, - "generate dpyname protoname [options] use server to generate entry\n" - " options are:\n" - " timeout n authorization expiration time in seconds\n" - " trusted clients using this entry are trusted\n" - " untrusted clients using this entry are untrusted\n" - " group n clients using this entry belong to application group n\n" - " data hexkey auth protocol specific data needed to generate the entry\n" - }, */ - { NULL, 0, 0, NULL, NULL }, -}; - -#define COMMAND_NAMES_PADDED_WIDTH 10 /* wider than anything above */ - - -static Bool okay_to_use_stdin = True; /* set to false after using */ - -static char *hex_table[] = { /* for printing hex digits */ - "00", "01", "02", "03", "04", "05", "06", "07", - "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", - "10", "11", "12", "13", "14", "15", "16", "17", - "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", - "20", "21", "22", "23", "24", "25", "26", "27", - "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", - "30", "31", "32", "33", "34", "35", "36", "37", - "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", - "40", "41", "42", "43", "44", "45", "46", "47", - "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", - "50", "51", "52", "53", "54", "55", "56", "57", - "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", - "60", "61", "62", "63", "64", "65", "66", "67", - "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", - "70", "71", "72", "73", "74", "75", "76", "77", - "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", - "80", "81", "82", "83", "84", "85", "86", "87", - "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", - "90", "91", "92", "93", "94", "95", "96", "97", - "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", - "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", - "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", - "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", - "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", - "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", - "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", - "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", - "d8", "d9", "da", "db", "dc", "dd", "de", "df", - "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", - "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", - "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", - "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff", -}; - -static unsigned int hexvalues[256]; /* for parsing hex input */ - -static int original_umask = 0; /* for restoring */ - - -/* - * private utility procedures - */ - -static void -prefix(char *fn, int n) -{ - fprintf (stderr, "%s: %s:%d: ", ProgramName, fn, n); -} - -static void -baddisplayname(char *dpy, char *cmd) -{ - fprintf (stderr, "bad display name \"%s\" in \"%s\" command\n", - dpy, cmd); -} - -static void -badcommandline(char *cmd) -{ - fprintf (stderr, "bad \"%s\" command line\n", cmd); -} - -static char * -skip_space(register char *s) -{ - if (!s) return NULL; - - for ( ; *s && isascii(*s) && isspace(*s); s++) - ; - return s; -} - - -static char * -skip_nonspace(register char *s) -{ - if (!s) return NULL; - - /* put quoting into loop if need be */ - for ( ; *s && isascii(*s) && !isspace(*s); s++) - ; - return s; -} - -static char ** -split_into_words(char *src, int *argcp) /* argvify string */ -{ - char *jword; - char savec; - char **argv; - int cur, total; - - *argcp = 0; -#define WORDSTOALLOC 4 /* most lines are short */ - argv = (char **) malloc (WORDSTOALLOC * sizeof (char *)); - if (!argv) return NULL; - cur = 0; - total = WORDSTOALLOC; - - /* - * split the line up into separate, nul-terminated tokens; the last - * "token" will point to the empty string so that it can be bashed into - * a null pointer. - */ - - do { - jword = skip_space (src); - src = skip_nonspace (jword); - savec = *src; - *src = '\0'; - if (cur == total) { - total += WORDSTOALLOC; - argv = (char **) realloc (argv, total * sizeof (char *)); - if (!argv) return NULL; - } - argv[cur++] = jword; - if (savec) src++; /* if not last on line advance */ - } while (jword != src); - - argv[--cur] = NULL; /* smash empty token to end list */ - *argcp = cur; - return argv; -} - - -static FILE * -open_file(char **filenamep, - char *mode, - Bool *usedstdp, - char *srcfn, - int srcln, - char *cmd) -{ - FILE *fp; - - if (strcmp (*filenamep, "-") == 0) { - *usedstdp = True; - /* select std descriptor to use */ - if (mode[0] == 'r') { - if (okay_to_use_stdin) { - okay_to_use_stdin = False; - *filenamep = stdin_filename; - return stdin; - } else { - prefix (srcfn, srcln); - fprintf (stderr, "%s: stdin already in use\n", cmd); - return NULL; - } - } else { - *filenamep = stdout_filename; - return stdout; /* always okay to use stdout */ - } - } - - fp = fopen (*filenamep, mode); - if (!fp) { - prefix (srcfn, srcln); - fprintf (stderr, "%s: unable to open file %s\n", cmd, *filenamep); - } - return fp; -} - -static int -getinput(FILE *fp) -{ - register int c; - - while ((c = getc (fp)) != EOF && isascii(c) && c != '\n' && isspace(c)) ; - return c; -} - -static int -get_short(FILE *fp, unsigned short *sp) /* for reading numeric input */ -{ - int c; - int i; - unsigned short us = 0; - - /* - * read family: written with %04x - */ - for (i = 0; i < 4; i++) { - switch (c = getinput (fp)) { - case EOF: - case '\n': - return 0; - } - if (c < 0 || c > 255) return 0; - us = (us * 16) + hexvalues[c]; /* since msb */ - } - *sp = us; - return 1; -} - -static int -get_bytes(FILE *fp, unsigned int n, char **ptr) /* for reading numeric input */ -{ - char *s; - register char *cp; - int c1, c2; - - cp = s = malloc (n); - if (!cp) return 0; - - while (n > 0) { - if ((c1 = getinput (fp)) == EOF || c1 == '\n' || - (c2 = getinput (fp)) == EOF || c2 == '\n') { - free (s); - return 0; - } - *cp = (char) ((hexvalues[c1] * 16) + hexvalues[c2]); - cp++; - n--; - } - - *ptr = s; - return 1; -} - - -static Xauth * -read_numeric(FILE *fp) -{ - Xauth *auth; - - auth = (Xauth *) malloc (sizeof (Xauth)); - if (!auth) goto bad; - auth->family = 0; - auth->address = NULL; - auth->address_length = 0; - auth->number = NULL; - auth->number_length = 0; - auth->name = NULL; - auth->name_length = 0; - auth->data = NULL; - auth->data_length = 0; - - if (!get_short (fp, (unsigned short *) &auth->family)) - goto bad; - if (!get_short (fp, (unsigned short *) &auth->address_length)) - goto bad; - if (!get_bytes (fp, (unsigned int) auth->address_length, &auth->address)) - goto bad; - if (!get_short (fp, (unsigned short *) &auth->number_length)) - goto bad; - if (!get_bytes (fp, (unsigned int) auth->number_length, &auth->number)) - goto bad; - if (!get_short (fp, (unsigned short *) &auth->name_length)) - goto bad; - if (!get_bytes (fp, (unsigned int) auth->name_length, &auth->name)) - goto bad; - if (!get_short (fp, (unsigned short *) &auth->data_length)) - goto bad; - if (!get_bytes (fp, (unsigned int) auth->data_length, &auth->data)) - goto bad; - - switch (getinput (fp)) { /* get end of line */ - case EOF: - case '\n': - return auth; - } - - bad: - if (auth) XauDisposeAuth (auth); /* won't free null pointers */ - return NULL; -} - -typedef Xauth *(*ReadFunc)(FILE *); - -static int -read_auth_entries(FILE *fp, Bool numeric, AuthList **headp, AuthList **tailp) -{ - ReadFunc readfunc = (numeric ? read_numeric : XauReadAuth); - Xauth *auth; - AuthList *head, *tail; - int n; - - head = tail = NULL; - n = 0; - /* put all records into linked list */ - while ((auth = ((*readfunc) (fp))) != NULL) { - AuthList *l = (AuthList *) malloc (sizeof (AuthList)); - if (!l) { - fprintf (stderr, - "%s: unable to alloc entry reading auth file\n", - ProgramName); - exit (1); - } - l->next = NULL; - l->auth = auth; - if (tail) /* if not first time through append */ - tail->next = l; - else - head = l; /* first time through, so assign */ - tail = l; - n++; - } - *headp = head; - *tailp = tail; - return n; -} - -static Bool -get_displayname_auth(char *displayname, Xauth *auth) -{ - int family; - char *host = NULL, *rest = NULL; - int dpynum, scrnum; - char *cp; - int len; - Xauth proto; - int prelen = 0; - - /* - * check to see if the display name is of the form "host/unix:" - * which is how the list routine prints out local connections - */ - cp = strchr(displayname, '/'); - if (cp && strncmp (cp, "/unix:", 6) == 0) - prelen = (cp - displayname); - - #ifdef __APPLE__ - - /* - * FIXME: This is an attempt to get the right - * cookie, because no one can grant that the - * X server is running on the display number - * reported in the launchd display name. - */ - - if (strncmp (displayname, "/tmp/launch", 11) == 0) - displayname = strrchr(displayname, ':'); - - #endif - - if (!parse_displayname (displayname + ((prelen > 0) ? prelen + 1 : 0), - &family, &host, &dpynum, &scrnum, &rest)) { - return False; - } - - proto.family = family; - proto.address = get_address_info (family, displayname, prelen, host, &len); - if (proto.address) { - char buf[40]; /* want to hold largest display num */ - - proto.address_length = len; - buf[0] = '\0'; - sprintf (buf, "%d", dpynum); - proto.number_length = strlen (buf); - if (proto.number_length <= 0) { - free (proto.address); - proto.address = NULL; - } else { - proto.number = copystring (buf, proto.number_length); - } - } - - if (host) free (host); - if (rest) free (rest); - - if (proto.address) { - auth->family = proto.family; - auth->address = proto.address; - auth->address_length = proto.address_length; - auth->number = proto.number; - auth->number_length = proto.number_length; - auth->name = NULL; - auth->name_length = 0; - auth->data = NULL; - auth->data_length = 0; - return True; - } else { - return False; - } -} - -static int -cvthexkey(char *hexstr, char **ptrp) /* turn hex key string into octets */ -{ - int i; - int len = 0; - char *retval, *s; - unsigned char *us; - char c; - char savec = '\0'; - - /* count */ - for (s = hexstr; *s; s++) { - if (!isascii(*s)) return -1; - if (isspace(*s)) continue; - if (!isxdigit(*s)) return -1; - len++; - } - - /* if odd then there was an error */ - if ((len & 1) == 1) return -1; - - - /* now we know that the input is good */ - len >>= 1; - retval = malloc (len); - if (!retval) { - fprintf (stderr, "%s: unable to allocate %d bytes for hexkey\n", - ProgramName, len); - return -1; - } - - for (us = (unsigned char *) retval, i = len; i > 0; hexstr++) { - c = *hexstr; - if (isspace(c)) continue; /* already know it is ascii */ - if (isupper(c)) - c = tolower(c); - if (savec) { -#define atoh(c) ((c) - (((c) >= '0' && (c) <= '9') ? '0' : ('a'-10))) - *us = (unsigned char)((atoh(savec) << 4) + atoh(c)); -#undef atoh - savec = 0; /* ready for next character */ - us++; - i--; - } else { - savec = c; - } - } - *ptrp = retval; - return len; -} - -static int -dispatch_command(char *inputfilename, - int lineno, - int argc, - char **argv, - CommandTable *tab, - int *statusp) -{ - CommandTable *ct; - char *cmd; - int n; - /* scan table for command */ - cmd = argv[0]; - n = strlen (cmd); - for (ct = tab; ct->name; ct++) { - /* look for unique prefix */ - if (n >= ct->minlen && n <= ct->maxlen && - strncmp (cmd, ct->name, n) == 0) { - *statusp = (*(ct->processfunc))(inputfilename, lineno, argc, argv); - return 1; - } - } - - *statusp = 1; - return 0; -} - - -static AuthList *xauth_head = NULL; /* list of auth entries */ -static Bool xauth_existed = False; /* if was present at initialize */ -static Bool xauth_modified = False; /* if added, removed, or merged */ -static Bool xauth_allowed = True; /* if allowed to write auth file */ -static Bool xauth_locked = False; /* if has been locked */ -static char *xauth_filename = NULL; -static Bool dieing = False; - -#ifdef SIGNALRETURNSINT -#define _signal_t int -#else -#define _signal_t void -#endif - -/* poor man's puts(), for under signal handlers */ -#define WRITES(fd, S) (void)write((fd), (S), strlen((S))) - -/* ARGSUSED */ -static _signal_t -die(int sig) -{ - dieing = True; - _exit (auth_finalize ()); - /* NOTREACHED */ -#ifdef SIGNALRETURNSINT - return -1; /* for picky compilers */ -#endif -} - -static _signal_t -catchsig(int sig) -{ -#ifdef SYSV - if (sig > 0) signal (sig, die); /* re-establish signal handler */ -#endif - /* - * fileno() might not be reentrant, avoid it if possible, and use - * stderr instead of stdout - */ -#ifdef STDERR_FILENO - if (verbose && xauth_modified) WRITES(STDERR_FILENO, "\r\n"); -#else - if (verbose && xauth_modified) WRITES(fileno(stderr), "\r\n"); -#endif - die (sig); - /* NOTREACHED */ -#ifdef SIGNALRETURNSINT - return -1; /* for picky compilers */ -#endif -} - -static void -register_signals(void) -{ - signal (SIGINT, catchsig); - signal (SIGTERM, catchsig); -#ifdef SIGHUP - signal (SIGHUP, catchsig); -#endif - return; -} - - -/* - * public procedures for parsing lines of input - */ - -int -auth_initialize(char *authfilename) -{ - int n; - AuthList *head, *tail; - FILE *authfp; - Bool exists; - - xauth_filename = authfilename; /* used in cleanup, prevent race with - signals */ - register_signals (); - - bzero ((char *) hexvalues, sizeof hexvalues); - hexvalues['0'] = 0; - hexvalues['1'] = 1; - hexvalues['2'] = 2; - hexvalues['3'] = 3; - hexvalues['4'] = 4; - hexvalues['5'] = 5; - hexvalues['6'] = 6; - hexvalues['7'] = 7; - hexvalues['8'] = 8; - hexvalues['9'] = 9; - hexvalues['a'] = hexvalues['A'] = 0xa; - hexvalues['b'] = hexvalues['B'] = 0xb; - hexvalues['c'] = hexvalues['C'] = 0xc; - hexvalues['d'] = hexvalues['D'] = 0xd; - hexvalues['e'] = hexvalues['E'] = 0xe; - hexvalues['f'] = hexvalues['F'] = 0xf; - - if (break_locks && verbose) { - printf ("Attempting to break locks on authority file %s\n", - authfilename); - } - - if (ignore_locks) { - if (break_locks) XauUnlockAuth (authfilename); - } else { - n = XauLockAuth (authfilename, XAUTH_DEFAULT_RETRIES, - XAUTH_DEFAULT_TIMEOUT, - (break_locks ? 0L : XAUTH_DEFAULT_DEADTIME)); - if (n != LOCK_SUCCESS) { - char *reason = "unknown error"; - switch (n) { - case LOCK_ERROR: - reason = "error"; - break; - case LOCK_TIMEOUT: - reason = "timeout"; - break; - } - fprintf (stderr, "%s: %s in locking authority file %s\n", - ProgramName, reason, authfilename); - return -1; - } else - xauth_locked = True; - } - - /* these checks can only be done reliably after the file is locked */ - exists = (access (authfilename, F_OK) == 0); - if (exists && access (authfilename, W_OK) != 0) { - fprintf (stderr, - "%s: %s not writable, changes will be ignored\n", - ProgramName, authfilename); - xauth_allowed = False; - } - - original_umask = umask (0077); /* disallow non-owner access */ - - authfp = fopen (authfilename, "rb"); - if (!authfp) { - int olderrno = errno; - - /* if file there then error */ - if (access (authfilename, F_OK) == 0) { /* then file does exist! */ - errno = olderrno; - return -1; - } /* else ignore it */ - fprintf (stderr, - "%s: creating new authority file %s\n", - ProgramName, authfilename); - } else { - xauth_existed = True; - n = read_auth_entries (authfp, False, &head, &tail); - (void) fclose (authfp); - if (n < 0) { - fprintf (stderr, - "%s: unable to read auth entries from file \"%s\"\n", - ProgramName, authfilename); - return -1; - } - xauth_head = head; - } - - n = strlen (authfilename); - xauth_filename = malloc (n + 1); - if (xauth_filename) strcpy (xauth_filename, authfilename); - else { - fprintf(stderr,"cannot allocate memory\n"); - return -1; - } - - xauth_modified = False; - - if (verbose) { - printf ("%s authority file %s\n", - ignore_locks ? "Ignoring locks on" : "Using", authfilename); - } - return 0; -} - -static int -write_auth_file(char *tmp_nam) -{ - FILE *fp = NULL; - int fd; - AuthList *list; - - /* - * xdm and auth spec assumes auth file is 12 or fewer characters - */ - strcpy (tmp_nam, xauth_filename); - strcat (tmp_nam, "-n"); /* for new */ - (void) unlink (tmp_nam); - /* CPhipps 2000/02/12 - fix file unlink/fopen race */ - fd = open(tmp_nam, O_WRONLY | O_CREAT | O_EXCL, 0600); - if (fd != -1) fp = fdopen (fd, "wb"); - if (!fp) { - if (fd != -1) close(fd); - fprintf (stderr, "%s: unable to open tmp file \"%s\"\n", - ProgramName, tmp_nam); - return -1; - } - - /* - * Write MIT-MAGIC-COOKIE-1 first, because R4 Xlib knows - * only that and uses the first authorization it finds. - */ - for (list = xauth_head; list; list = list->next) { - if (list->auth->name_length == 18 - && strncmp(list->auth->name, "MIT-MAGIC-COOKIE-1", 18) == 0) { - if (!XauWriteAuth(fp, list->auth)) { - (void) fclose(fp); - return -1; - } - } - } - for (list = xauth_head; list; list = list->next) { - if (list->auth->name_length != 18 - || strncmp(list->auth->name, "MIT-MAGIC-COOKIE-1", 18) != 0) { - if (!XauWriteAuth(fp, list->auth)) { - (void) fclose(fp); - return -1; - } - } - } - - (void) fclose (fp); - return 0; -} - -int -auth_finalize(void) -{ - char temp_name[1024]; /* large filename size */ - - if (xauth_modified) { - if (dieing) { - if (verbose) { - /* - * called from a signal handler -- printf is *not* reentrant; also - * fileno() might not be reentrant, avoid it if possible, and use - * stderr instead of stdout - */ -#ifdef STDERR_FILENO - WRITES(STDERR_FILENO, "\nAborting changes to authority file "); - WRITES(STDERR_FILENO, xauth_filename); - WRITES(STDERR_FILENO, "\n"); -#else - WRITES(fileno(stderr), "\nAborting changes to authority file "); - WRITES(fileno(stderr), xauth_filename); - WRITES(fileno(stderr), "\n"); -#endif - } - } else if (!xauth_allowed) { - fprintf (stderr, - "%s: %s not writable, changes ignored\n", - ProgramName, xauth_filename); - } else { - if (verbose) { - printf ("%s authority file %s\n", - ignore_locks ? "Ignoring locks and writing" : - "Writing", xauth_filename); - } - temp_name[0] = '\0'; - if (write_auth_file (temp_name) == -1) { - fprintf (stderr, - "%s: unable to write authority file %s\n", - ProgramName, temp_name); - } else { - (void) unlink (xauth_filename); -#if defined(WIN32) || defined(__UNIXOS2__)|| defined(__CYGWIN__) - if (rename(temp_name, xauth_filename) == -1) -#else - if (link (temp_name, xauth_filename) == -1) -#endif - { - fprintf (stderr, - "%s: unable to link authority file %s, use %s\n", - ProgramName, xauth_filename, temp_name); - } else { - (void) unlink (temp_name); - } - } - } - } - - if (xauth_locked) { - XauUnlockAuth (xauth_filename); - } - (void) umask (original_umask); - return 0; -} - -int -process_command(char *inputfilename, int lineno, int argc, char **argv) -{ - int status; - - if (argc < 1 || !argv || !argv[0]) return 1; - - if (dispatch_command (inputfilename, lineno, argc, argv, - command_table, &status)) - return status; - - prefix (inputfilename, lineno); - fprintf (stderr, "unknown command \"%s\"\n", argv[0]); - return 1; -} - - -/* - * utility routines - */ - -static char * -bintohex(unsigned int len, char *bindata) -{ - char *hexdata, *starthex; - - /* two chars per byte, plus null termination */ - starthex = hexdata = (char *)malloc(2*len + 1); - if (!hexdata) - return NULL; - - for (; len > 0; len--, bindata++) { - register char *s = hex_table[(unsigned char)*bindata]; - *hexdata++ = s[0]; - *hexdata++ = s[1]; - } - *hexdata = '\0'; - return starthex; -} - -static void -fprintfhex(register FILE *fp, int len, char *cp) -{ - char *hex; - - hex = bintohex(len, cp); - fprintf(fp, "%s", hex); - free(hex); -} - -int -dump_numeric(register FILE *fp, register Xauth *auth) -{ - fprintf (fp, "%04x", auth->family); /* unsigned short */ - fprintf (fp, " %04x ", auth->address_length); /* short */ - fprintfhex (fp, auth->address_length, auth->address); - fprintf (fp, " %04x ", auth->number_length); /* short */ - fprintfhex (fp, auth->number_length, auth->number); - fprintf (fp, " %04x ", auth->name_length); /* short */ - fprintfhex (fp, auth->name_length, auth->name); - fprintf (fp, " %04x ", auth->data_length); /* short */ - fprintfhex (fp, auth->data_length, auth->data); - putc ('\n', fp); - return 1; -} - -/* ARGSUSED */ -static int -dump_entry(char *inputfilename, int lineno, Xauth *auth, char *data) -{ - struct _list_data *ld = (struct _list_data *) data; - FILE *fp = ld->fp; - - if (ld->numeric) { - dump_numeric (fp, auth); - } else { - char *dpyname = NULL; - - switch (auth->family) { - case FamilyLocal: - fwrite (auth->address, sizeof (char), auth->address_length, fp); - fprintf (fp, "/unix"); - break; - case FamilyInternet: - case FamilyDECnet: - dpyname = get_hostname (auth); - if (dpyname) { - fprintf (fp, "%s", dpyname); - break; - } - /* else fall through to default */ - default: - fprintf (fp, "#%04x#", auth->family); - fprintfhex (fp, auth->address_length, auth->address); - putc ('#', fp); - } - putc (':', fp); - fwrite (auth->number, sizeof (char), auth->number_length, fp); - putc (' ', fp); - putc (' ', fp); - fwrite (auth->name, sizeof (char), auth->name_length, fp); - putc (' ', fp); - putc (' ', fp); - if (!strncmp(auth->name, SECURERPC, auth->name_length) || - !strncmp(auth->name, K5AUTH, auth->name_length)) - fwrite (auth->data, sizeof (char), auth->data_length, fp); - else - fprintfhex (fp, auth->data_length, auth->data); - putc ('\n', fp); - } - return 0; -} - -static int -extract_entry(char *inputfilename, int lineno, Xauth *auth, char *data) -{ - struct _extract_data *ed = (struct _extract_data *) data; - - if (!ed->fp) { - ed->fp = open_file (&ed->filename, - ed->numeric ? "w" : "wb", - &ed->used_stdout, - inputfilename, lineno, ed->cmd); - if (!ed->fp) { - prefix (inputfilename, lineno); - fprintf (stderr, - "unable to open extraction file \"%s\"\n", - ed->filename); - return -1; - } - } - (*(ed->numeric ? dump_numeric : XauWriteAuth)) (ed->fp, auth); - ed->nwritten++; - - return 0; -} - - -static int -match_auth_dpy(register Xauth *a, register Xauth *b) -{ - return ((a->family == b->family && - a->address_length == b->address_length && - a->number_length == b->number_length && - memcmp(a->address, b->address, a->address_length) == 0 && - memcmp(a->number, b->number, a->number_length) == 0) ? 1 : 0); -} - -/* return non-zero iff display and authorization type are the same */ - -static int -match_auth(register Xauth *a, register Xauth *b) -{ - return ((match_auth_dpy(a, b) - && a->name_length == b->name_length - && memcmp(a->name, b->name, a->name_length) == 0) ? 1 : 0); -} - - -static int -merge_entries(AuthList **firstp, AuthList *second, int *nnewp, int *nreplp) -{ - AuthList *a, *b, *first, *tail; - int n = 0, nnew = 0, nrepl = 0; - - if (!second) return 0; - - if (!*firstp) { /* if nothing to merge into */ - *firstp = second; - for (tail = *firstp, n = 1; tail->next; n++, tail = tail->next) ; - *nnewp = n; - *nreplp = 0; - return n; - } - - first = *firstp; - /* - * find end of first list and stick second list on it - */ - for (tail = first; tail->next; tail = tail->next) ; - tail->next = second; - - /* - * run down list freeing duplicate entries; if an entry is okay, then - * bump the tail up to include it, otherwise, cut the entry out of - * the chain. - */ - for (b = second; b; ) { - AuthList *next = b->next; /* in case we free it */ - - a = first; - for (;;) { - if (match_auth (a->auth, b->auth)) { /* found a duplicate */ - AuthList tmp; /* swap it in for old one */ - tmp = *a; - *a = *b; - *b = tmp; - a->next = b->next; - XauDisposeAuth (b->auth); - free ((char *) b); - b = NULL; - tail->next = next; - nrepl++; - nnew--; - break; - } - if (a == tail) break; /* if have looked at left side */ - a = a->next; - } - if (b) { /* if we didn't remove it */ - tail = b; /* bump end of first list */ - } - b = next; - n++; - nnew++; - } - - *nnewp = nnew; - *nreplp = nrepl; - return n; - -} - -typedef int (*YesNoFunc)(char *, int, Xauth *, char *); - -static int -iterdpy (char *inputfilename, int lineno, int start, - int argc, char *argv[], - YesNoFunc yfunc, YesNoFunc nfunc, char *data) -{ - int i; - int status; - int errors = 0; - Xauth proto; - AuthList *l, *next; - - /* - * iterate - */ - for (i = start; i < argc; i++) { - char *displayname = argv[i]; - proto.address = proto.number = NULL; - if (!get_displayname_auth (displayname, &proto)) { - prefix (inputfilename, lineno); - baddisplayname (displayname, argv[0]); - errors++; - continue; - } - status = 0; - for (l = xauth_head; l; l = next) { - next = l->next; - if (match_auth_dpy (&proto, l->auth)) { - if (yfunc) { - status = (*yfunc) (inputfilename, lineno, - l->auth, data); - if (status < 0) break; - } - } else { - if (nfunc) { - status = (*nfunc) (inputfilename, lineno, - l->auth, data); - if (status < 0) break; - } - } - } - if (proto.address) free (proto.address); - if (proto.number) free (proto.number); - if (status < 0) { - errors -= status; /* since status is negative */ - break; - } - } - - return errors; -} - -/* ARGSUSED */ -static int -remove_entry(char *inputfilename, int lineno, Xauth *auth, char *data) -{ - int *nremovedp = (int *) data; - AuthList **listp = &xauth_head; - AuthList *list; - - /* - * unlink the auth we were asked to - */ - while ((list = *listp)->auth != auth) - listp = &list->next; - *listp = list->next; - XauDisposeAuth (list->auth); /* free the auth */ - free (list); /* free the link */ - xauth_modified = True; - (*nremovedp)++; - return 1; -} - -/* - * action routines - */ - -/* - * help - */ -int -print_help(FILE *fp, char *cmd, char *prefix) -{ - CommandTable *ct; - int n = 0; - - if (!prefix) prefix = ""; - - if (!cmd) { /* if no cmd, print all help */ - for (ct = command_table; ct->name; ct++) { - fprintf (fp, "%s%s\n", prefix, ct->helptext); - n++; - } - } else { - int len = strlen (cmd); - for (ct = command_table; ct->name; ct++) { - if (strncmp (cmd, ct->name, len) == 0) { - fprintf (fp, "%s%s\n", prefix, ct->helptext); - n++; - } - } - } - - return n; -} - -static int -do_help(char *inputfilename, int lineno, int argc, char **argv) -{ - char *cmd = (argc > 1 ? argv[1] : NULL); - int n; - - n = print_help (stdout, cmd, " "); /* a nice amount */ - - if (n < 0 || (n == 0 && !cmd)) { - prefix (inputfilename, lineno); - fprintf (stderr, "internal error with help"); - if (cmd) { - fprintf (stderr, " on command \"%s\"", cmd); - } - fprintf (stderr, "\n"); - return 1; - } - - if (n == 0) { - prefix (inputfilename, lineno); - /* already know that cmd is set in this case */ - fprintf (stderr, "no help for noexistent command \"%s\"\n", cmd); - } - - return 0; -} - -/* - * questionmark - */ -/* ARGSUSED */ -static int -do_questionmark(char *inputfilename, int lineno, int argc, char **argv) -{ - CommandTable *ct; - int i; -#define WIDEST_COLUMN 72 - int col = WIDEST_COLUMN; - - printf ("Commands:\n"); - for (ct = command_table; ct->name; ct++) { - if ((col + ct->maxlen) > WIDEST_COLUMN) { - if (ct != command_table) { - putc ('\n', stdout); - } - fputs (" ", stdout); - col = 8; /* length of string above */ - } - fputs (ct->name, stdout); - col += ct->maxlen; - for (i = ct->maxlen; i < COMMAND_NAMES_PADDED_WIDTH; i++) { - putc (' ', stdout); - col++; - } - } - if (col != 0) { - putc ('\n', stdout); - } - - /* allow bad lines since this is help */ - return 0; -} - -/* - * list [displayname ...] - */ -static int -do_list (char *inputfilename, int lineno, int argc, char **argv) -{ - struct _list_data ld; - - ld.fp = stdout; - ld.numeric = (argv[0][0] == 'n'); - - if (argc == 1) { - register AuthList *l; - - if (xauth_head) { - for (l = xauth_head; l; l = l->next) { - dump_entry (inputfilename, lineno, l->auth, (char *) &ld); - } - } - return 0; - } - - return iterdpy (inputfilename, lineno, 1, argc, argv, - dump_entry, NULL, (char *) &ld); - - return 0; -} - -/* - * merge filename [filename ...] - */ -static int -do_merge(char *inputfilename, int lineno, int argc, char **argv) -{ - int i; - int errors = 0; - AuthList *head, *tail, *listhead, *listtail; - int nentries, nnew, nrepl; - Bool numeric = False; - - if (argc < 2) { - prefix (inputfilename, lineno); - badcommandline (argv[0]); - return 1; - } - - if (argv[0][0] == 'n') numeric = True; - listhead = listtail = NULL; - - for (i = 1; i < argc; i++) { - char *filename = argv[i]; - FILE *fp; - Bool used_stdin = False; - - fp = open_file (&filename, - numeric ? "r" : "rb", - &used_stdin, inputfilename, lineno, - argv[0]); - if (!fp) { - errors++; - continue; - } - - head = tail = NULL; - nentries = read_auth_entries (fp, numeric, &head, &tail); - if (nentries == 0) { - prefix (inputfilename, lineno); - fprintf (stderr, "unable to read any entries from file \"%s\"\n", - filename); - errors++; - } else { /* link it in */ - add_to_list (listhead, listtail, head); - } - - if (!used_stdin) (void) fclose (fp); - } - - /* - * if we have new entries, merge them in (freeing any duplicates) - */ - if (listhead) { - nentries = merge_entries (&xauth_head, listhead, &nnew, &nrepl); - if (verbose) - printf ("%d entries read in: %d new, %d replacement%s\n", - nentries, nnew, nrepl, nrepl != 1 ? "s" : ""); - if (nentries > 0) xauth_modified = True; - } - - return 0; -} - -/* - * extract filename displayname [displayname ...] - */ -static int -do_extract(char *inputfilename, int lineno, int argc, char **argv) -{ - int errors; - struct _extract_data ed; - - if (argc < 3) { - prefix (inputfilename, lineno); - badcommandline (argv[0]); - return 1; - } - - ed.fp = NULL; - ed.filename = argv[1]; - ed.numeric = (argv[0][0] == 'n'); - ed.nwritten = 0; - ed.cmd = argv[0]; - - errors = iterdpy (inputfilename, lineno, 2, argc, argv, - extract_entry, NULL, (char *) &ed); - - if (!ed.fp) { - fprintf (stderr, - "No matches found, authority file \"%s\" not written\n", - ed.filename); - } else { - if (verbose) { - printf ("%d entries written to \"%s\"\n", - ed.nwritten, ed.filename); - } - if (!ed.used_stdout) { - (void) fclose (ed.fp); - } - } - - return errors; -} - - -/* - * add displayname protocolname hexkey - */ -static int -do_add(char *inputfilename, int lineno, int argc, char **argv) -{ - int n, nnew, nrepl; - int len; - char *dpyname; - char *protoname; - char *hexkey; - char *key; - Xauth *auth; - AuthList *list; - - if (argc != 4 || !argv[1] || !argv[2] || !argv[3]) { - prefix (inputfilename, lineno); - badcommandline (argv[0]); - return 1; - } - - dpyname = argv[1]; - protoname = argv[2]; - hexkey = argv[3]; - - len = strlen(hexkey); - if (hexkey[0] == '"' && hexkey[len-1] == '"') { - key = malloc(len-1); - strncpy(key, hexkey+1, len-2); - len -= 2; - } else if (!strcmp(protoname, SECURERPC) || - !strcmp(protoname, K5AUTH)) { - key = malloc(len+1); - strcpy(key, hexkey); - } else { - len = cvthexkey (hexkey, &key); - if (len < 0) { - prefix (inputfilename, lineno); - fprintf (stderr, - "key contains odd number of or non-hex characters\n"); - return 1; - } - } - - auth = (Xauth *) malloc (sizeof (Xauth)); - if (!auth) { - prefix (inputfilename, lineno); - fprintf (stderr, "unable to allocate %ld bytes for Xauth structure\n", - (unsigned long)sizeof (Xauth)); - free (key); - return 1; - } - - if (!get_displayname_auth (dpyname, auth)) { - prefix (inputfilename, lineno); - baddisplayname (dpyname, argv[0]); - free (auth); - free (key); - return 1; - } - - /* - * allow an abbreviation for common protocol names - */ - if (strcmp (protoname, DEFAULT_PROTOCOL_ABBREV) == 0) { - protoname = DEFAULT_PROTOCOL; - } - - auth->name_length = strlen (protoname); - auth->name = copystring (protoname, auth->name_length); - if (!auth->name) { - prefix (inputfilename, lineno); - fprintf (stderr, "unable to allocate %d character protocol name\n", - auth->name_length); - free (auth); - free (key); - return 1; - } - auth->data_length = len; - auth->data = key; - - list = (AuthList *) malloc (sizeof (AuthList)); - if (!list) { - prefix (inputfilename, lineno); - fprintf (stderr, "unable to allocate %ld bytes for auth list\n", - (unsigned long)sizeof (AuthList)); - free (auth); - free (key); - free (auth->name); - return 1; - } - - list->next = NULL; - list->auth = auth; - - /* - * merge it in; note that merge will deal with allocation - */ - n = merge_entries (&xauth_head, list, &nnew, &nrepl); - if (n <= 0) { - prefix (inputfilename, lineno); - fprintf (stderr, "unable to merge in added record\n"); - return 1; - } - - xauth_modified = True; - return 0; -} - -/* - * remove displayname - */ -static int -do_remove(char *inputfilename, int lineno, int argc, char **argv) -{ - int nremoved = 0; - int errors; - - if (argc < 2) { - prefix (inputfilename, lineno); - badcommandline (argv[0]); - return 1; - } - - errors = iterdpy (inputfilename, lineno, 1, argc, argv, - remove_entry, NULL, (char *) &nremoved); - if (verbose) printf ("%d entries removed\n", nremoved); - return errors; -} - -/* - * info - */ -static int -do_info(char *inputfilename, int lineno, int argc, char **argv) -{ - int n; - AuthList *l; - - if (argc != 1) { - prefix (inputfilename, lineno); - badcommandline (argv[0]); - return 1; - } - - for (l = xauth_head, n = 0; l; l = l->next, n++) ; - - printf ("Authority file: %s\n", - xauth_filename ? xauth_filename : "(none)"); - printf ("File new: %s\n", xauth_existed ? No : Yes); - printf ("File locked: %s\n", xauth_locked ? No : Yes); - printf ("Number of entries: %d\n", n); - printf ("Changes honored: %s\n", xauth_allowed ? Yes : No); - printf ("Changes made: %s\n", xauth_modified ? Yes : No); - printf ("Current input: %s:%d\n", inputfilename, lineno); - return 0; -} - - -/* - * exit - */ -static Bool alldone = False; - -/* ARGSUSED */ -static int -do_exit(char *inputfilename, int lineno, int argc, char **argv) -{ - /* allow bogus stuff */ - alldone = True; - return 0; -} - -/* - * quit - */ -/* ARGSUSED */ -static int -do_quit(char *inputfilename, int lineno, int argc, char **argv) -{ - /* allow bogus stuff */ - die (0); - /* NOTREACHED */ - return -1; /* for picky compilers */ -} - - -/* - * source filename - */ -static int -do_source(char *inputfilename, int lineno, int argc, char **argv) -{ - char *script; - char buf[BUFSIZ]; - FILE *fp; - Bool used_stdin = False; - int len; - int errors = 0, status; - int sublineno = 0; - char **subargv; - int subargc; - Bool prompt = False; /* only true if reading from tty */ - - if (argc != 2 || !argv[1]) { - prefix (inputfilename, lineno); - badcommandline (argv[0]); - return 1; - } - - script = argv[1]; - - fp = open_file (&script, "r", &used_stdin, inputfilename, lineno, argv[0]); - if (!fp) { - return 1; - } - - if (verbose && used_stdin && isatty (fileno (fp))) prompt = True; - - while (!alldone) { - buf[0] = '\0'; - if (prompt) { - printf ("xauth> "); - fflush (stdout); - } - if (fgets (buf, sizeof buf, fp) == NULL) break; - sublineno++; - len = strlen (buf); - if (len == 0 || buf[0] == '#') continue; - if (buf[len-1] != '\n') { - prefix (script, sublineno); - fprintf (stderr, "line too long\n"); - errors++; - break; - } - buf[--len] = '\0'; /* remove new line */ - subargv = split_into_words (buf, &subargc); - if (subargv) { - status = process_command (script, sublineno, subargc, subargv); - free ((char *) subargv); - errors += status; - } else { - prefix (script, sublineno); - fprintf (stderr, "unable to break line into words\n"); - errors++; - } - } - - if (!used_stdin) { - (void) fclose (fp); - } - return errors; -} - -/*static int -static int x_protocol_error; -catch_x_protocol_error(Display *dpy, XErrorEvent *errevent) -{ - char buf[80]; - XGetErrorText(dpy, errevent->error_code, buf, sizeof (buf)); - fprintf(stderr, "%s\n", buf); - x_protocol_error = errevent->error_code; - return 1; -} -*/ -/* - * generate - */ -/*static int -do_generate(char *inputfilename, int lineno, int argc, char **argv) -{ - char *displayname; - int major_version, minor_version; - XSecurityAuthorization id_return; - Xauth *auth_in, *auth_return; - XSecurityAuthorizationAttributes attributes; - unsigned long attrmask = 0; - Display *dpy; - int status; - char *args[4]; - char *protoname = "."; - int i; - int authdatalen = 0; - char *hexdata; - char *authdata = NULL; - - if (argc < 2 || !argv[1]) { - prefix (inputfilename, lineno); - badcommandline (argv[0]); - return 1; - } - - displayname = argv[1]; - - if (argc > 2) { - protoname = argv[2]; - } - - for (i = 3; i < argc; i++) { - if (0 == strcmp(argv[i], "timeout")) { - if (++i == argc) { - prefix (inputfilename, lineno); - badcommandline (argv[i-1]); - return 1; - } - attributes.timeout = atoi(argv[i]); - attrmask |= XSecurityTimeout; - - } else if (0 == strcmp(argv[i], "trusted")) { - attributes.trust_level = XSecurityClientTrusted; - attrmask |= XSecurityTrustLevel; - - } else if (0 == strcmp(argv[i], "untrusted")) { - attributes.trust_level = XSecurityClientUntrusted; - attrmask |= XSecurityTrustLevel; - - } else if (0 == strcmp(argv[i], "group")) { - if (++i == argc) { - prefix (inputfilename, lineno); - badcommandline (argv[i-1]); - return 1; - } - attributes.group = atoi(argv[i]); - attrmask |= XSecurityGroup; - - } else if (0 == strcmp(argv[i], "data")) { - if (++i == argc) { - prefix (inputfilename, lineno); - badcommandline (argv[i-1]); - return 1; - } - hexdata = argv[i]; - authdatalen = strlen(hexdata); - if (hexdata[0] == '"' && hexdata[authdatalen-1] == '"') { - authdata = malloc(authdatalen-1); - strncpy(authdata, hexdata+1, authdatalen-2); - authdatalen -= 2; - } else { - authdatalen = cvthexkey (hexdata, &authdata); - if (authdatalen < 0) { - prefix (inputfilename, lineno); - fprintf (stderr, - "data contains odd number of or non-hex characters\n"); - return 1; - } - } - } else { - prefix (inputfilename, lineno); - badcommandline (argv[i]); - return 1; - } - } - - // generate authorization using the Security extension / - - dpy = XOpenDisplay (displayname); - if (!dpy) { - prefix (inputfilename, lineno); - fprintf (stderr, "unable to open display \"%s\".\n", displayname); - return 1; - } - - status = XSecurityQueryExtension(dpy, &major_version, &minor_version); - if (!status) - { - prefix (inputfilename, lineno); - fprintf (stderr, "couldn't query Security extension on display \"%s\"\n", - displayname); - return 1; - } - - // fill in input Xauth struct / - - auth_in = XSecurityAllocXauth(); - if (strcmp (protoname, DEFAULT_PROTOCOL_ABBREV) == 0) { - auth_in->name = DEFAULT_PROTOCOL; - } - else - auth_in->name = protoname; - auth_in->name_length = strlen(auth_in->name); - auth_in->data = authdata; - auth_in->data_length = authdatalen; - - x_protocol_error = 0; - XSetErrorHandler(catch_x_protocol_error); - auth_return = XSecurityGenerateAuthorization(dpy, auth_in, attrmask, - &attributes, &id_return); - XSync(dpy, False); - - if (!auth_return || x_protocol_error) - { - prefix (inputfilename, lineno); - fprintf (stderr, "couldn't generate authorization\n"); - return 1; - } - - if (verbose) - printf("authorization id is %ld\n", id_return); - - // create a fake input line to give to do_add / - - args[0] = "add"; - args[1] = displayname; - args[2] = auth_in->name; - args[3] = bintohex(auth_return->data_length, auth_return->data); - - status = do_add(inputfilename, lineno, 4, args); - - if (authdata) free(authdata); - XSecurityFreeXauth(auth_in); - XSecurityFreeXauth(auth_return); - free(args[3]); // hex data / - XCloseDisplay(dpy); - return status; -} -*/ diff --git a/nx-X11/programs/nxauth/xauth.c b/nx-X11/programs/nxauth/xauth.c deleted file mode 100644 index 5a37c34c8..000000000 --- a/nx-X11/programs/nxauth/xauth.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * $Xorg: xauth.c,v 1.4 2001/02/09 02:05:38 xorgcvs Exp $ - * - * xauth - manipulate authorization file - * - * -Copyright 1989,1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - * * - * Author: Jim Fulton, MIT X Consortium - */ -/* $XFree86: xc/programs/xauth/xauth.c,v 1.5 2001/12/14 20:01:15 dawes Exp $ */ - -/**************************************************************************/ -/* */ -/* Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/. */ -/* */ -/* NXAUTH, 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. */ -/* */ -/**************************************************************************/ - -#include "xauth.h" - - -/* - * global data - */ -char *ProgramName; /* argv[0], set at top of main() */ -int verbose = -1; /* print certain messages */ -Bool ignore_locks = True; /* for error recovery */ -Bool break_locks = False; /* for error recovery */ - -/* - * local data - */ - -static char *authfilename = NULL; /* filename of cookie file */ -static char *defcmds[] = { "source", "-", NULL }; /* default command */ -static int ndefcmds = 2; -static char *defsource = "(stdin)"; - -/* - * utility routines - */ -static void -usage(void) -{ - static char *prefixmsg[] = { -"", -"where options include:", -" -f authfilename name of authority file to use", -" -v turn on extra messages", -" -q turn off extra messages", -" -i ignore locks on authority file", -" -b break locks on authority file", -"", -"and commands have the following syntax:", -"", -NULL }; - static char *suffixmsg[] = { -"A dash may be used with the \"merge\" and \"source\" to read from the", -"standard input. Commands beginning with \"n\" use numeric format.", -"", -NULL }; - char **msg; - - fprintf (stderr, "usage: %s [-options ...] [command arg ...]\n", - ProgramName); - for (msg = prefixmsg; *msg; msg++) { - fprintf (stderr, "%s\n", *msg); - } - print_help (stderr, NULL, " "); /* match prefix indentation */ - fprintf (stderr, "\n"); - for (msg = suffixmsg; *msg; msg++) { - fprintf (stderr, "%s\n", *msg); - } - exit (1); -} - - -/* - * The main routine - parses command line and calls action procedures - */ -int -main(int argc, char *argv[]) -{ - int i; - char *sourcename = defsource; - char **arglist = defcmds; - int nargs = ndefcmds; - int status; - - ProgramName = argv[0]; - - for (i = 1; i < argc; i++) { - char *arg = argv[i]; - - if (arg[0] == '-') { - char *flag; - - for (flag = (arg + 1); *flag; flag++) { - switch (*flag) { - case 'f': /* -f authfilename */ - if (++i >= argc) usage (); - authfilename = argv[i]; - continue; - case 'v': /* -v */ - verbose = 1; - continue; - case 'q': /* -q */ - verbose = 0; - continue; - case 'b': /* -b */ - break_locks = True; - continue; - case 'i': /* -i */ - ignore_locks = True; - continue; - default: - usage (); - } - } - } else { - sourcename = "(argv)"; - nargs = argc - i; - arglist = argv + i; - if (verbose == -1) verbose = 0; - break; - } - } - - if (verbose == -1) { /* set default, don't junk stdout */ - verbose = (isatty(fileno(stdout)) != 0); - } - - if (!authfilename) { - authfilename = XauFileName (); /* static name, do not free */ - if (!authfilename) { - fprintf (stderr, - "%s: unable to generate an authority file name\n", - ProgramName); - exit (1); - } - } - if (auth_initialize (authfilename) != 0) { - /* error message printed in auth_initialize */ - exit (1); - } - - status = process_command (sourcename, 1, nargs, arglist); - - (void) auth_finalize (); - exit ((status != 0) ? 1 : 0); -} - - diff --git a/nx-X11/programs/nxauth/xauth.h b/nx-X11/programs/nxauth/xauth.h deleted file mode 100644 index 4f8490070..000000000 --- a/nx-X11/programs/nxauth/xauth.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * $Xorg: xauth.h,v 1.4 2001/02/09 02:05:38 xorgcvs Exp $ - * - * -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - * * - * Author: Jim Fulton, MIT X Consortium - */ -/* $XFree86: xc/programs/xauth/xauth.h,v 1.6 2001/12/14 20:01:15 dawes Exp $ */ - -#include <stdio.h> -#include <nx-X11/Xos.h> -#include <nx-X11/Xauth.h> -#include <nx-X11/Xfuncs.h> - -#ifndef True -typedef int Bool; -#define False 0 -#define True 1 -#endif - -extern char *ProgramName; - -#include <stdlib.h> - -extern char *get_hostname ( Xauth *auth ); -extern char *get_address_info ( int family, char *fulldpyname, int prefix, char *host, int *lenp ); -extern char *copystring ( char *src, int len ); -extern char *get_local_hostname ( char *buf, int maxlen ); -extern Bool parse_displayname ( char *displayname, int *familyp, char **hostp, int *dpynump, int *scrnump, char **restp ); -extern int auth_initialize ( char *authfilename ); -extern int auth_finalize ( void ); -extern int process_command ( char *inputfilename, int lineno, int argc, char **argv ); -extern int dump_numeric ( FILE *fp, Xauth *auth ); -extern int print_help ( FILE *fp, char *cmd, char *prefix ); -extern int verbose; -extern Bool ignore_locks; -extern Bool break_locks; |