428
+ − 1 /* -*-C-*-
+ − 2
613
+ − 3 Header file for the XEmacs server and client C code.
428
+ − 4
613
+ − 5 This file is part of XEmacs.
428
+ − 6
+ − 7 Copying is permitted under those conditions described by the GNU
+ − 8 General Public License.
+ − 9
+ − 10 Copyright (C) 1989 Free Software Foundation, Inc.
+ − 11
+ − 12 Author: Andy Norman (ange@hplb.hpl.hp.com), based on
+ − 13 'etc/server.c' and 'etc/emacsclient.c' from the 18.52 GNU
+ − 14 Emacs distribution.
+ − 15
+ − 16 Please mail bugs and suggestions to the author at the above address.
+ − 17 */
+ − 18
+ − 19 /* HISTORY
+ − 20 * 11-Nov-1990 bristor@simba
+ − 21 * Added EOT stuff.
+ − 22 */
+ − 23
+ − 24 /*
+ − 25 * This file incorporates new features added by Bob Weiner <weiner@mot.com>,
+ − 26 * Darrell Kindred <dkindred@cmu.edu> and Arup Mukherjee <arup@cmu.edu>.
+ − 27 * Please see the note at the end of the README file for details.
+ − 28 *
+ − 29 * (If gnuserv came bundled with your emacs, the README file is probably
+ − 30 * ../etc/gnuserv.README relative to the directory containing this file)
+ − 31 */
+ − 32
456
+ − 33 #define GNUSERV_VERSION "3.12"
428
+ − 34
464
+ − 35 /* Note: this setting can cause client-server connection failure if the
+ − 36 * value of TMPDIR is not shared by client and server at run-time.
+ − 37 */
428
+ − 38 #define USE_TMPDIR
+ − 39
+ − 40 #define PATCHLEVEL 2
+ − 41
+ − 42 #define NO_SHORTNAMES
+ − 43 /* gnuserv should not be compiled using SOCKS */
+ − 44 #define DO_NOT_SOCKSIFY
438
+ − 45 #include <config.h>
428
+ − 46 #undef signal
+ − 47
+ − 48 /* Define the communication method between server and clients:
+ − 49 * You can have either or both kinds of sockets, but you can't mix
+ − 50 * sockets with sysv ipc
+ − 51 */
+ − 52
+ − 53
+ − 54 #define INTERNET_DOMAIN_SOCKETS
+ − 55 #ifdef HAVE_SYS_UN_H
+ − 56 #define UNIX_DOMAIN_SOCKETS
+ − 57 /* #define SYSV_IPC */
+ − 58 #endif
+ − 59
+ − 60 /*
+ − 61 * Define additional authentication protocols to be used. These methods will
+ − 62 * be tried before falling back to the default gnuserv protocol (based on
+ − 63 * the GNU_SECURE environment variable). Currently, only MIT-MAGIC-COOKIE-1
+ − 64 * is also supported.
+ − 65 *
+ − 66 * Comment out the next line(s) if you don't want to enable the
+ − 67 * appropriate authentication protocol.
+ − 68 */
+ − 69
+ − 70 #if defined (HAVE_XAUTH)
+ − 71 #define AUTH_MAGIC_COOKIE
+ − 72 #endif /* HAVE_XAUTH */
+ − 73
+ − 74 /*
+ − 75 * stuff related to supporting MIT-MAGIC-COOKIE-1
+ − 76 */
+ − 77
+ − 78 #define MCOOKIE_SCREEN "999" /* screen # to use as the gnuserv cookie */
+ − 79 #define MCOOKIE_NAME "MAGIC-1" /* authentication protocol name */
+ − 80 #define MCOOKIE_X_NAME "MIT-MAGIC-COOKIE-1" /* as needed by X */
+ − 81
+ − 82
+ − 83 #define DEFAUTH_NAME "GNU-SECURE" /* name of default auth protocol */
+ − 84 #define AUTH_TIMEOUT 15 /* # seconds to wait for auth data */
+ − 85 #define AUTH_NAMESZ 15 /* max allows auth protocol name size */
+ − 86
+ − 87
+ − 88 /*
+ − 89 * Pick a default communication scheme, if none was specified.
+ − 90 */
+ − 91
+ − 92 #if !defined(SYSV_IPC) && !defined(UNIX_DOMAIN_SOCKETS) && !defined(INTERNET_DOMAIN_SOCKETS)
+ − 93
+ − 94 #ifdef HAVE_SYSVIPC
+ − 95 #define SYSV_IPC /* SYSV systems use SYSV IPC by default */
+ − 96 #endif /* HAVE_SYSVIPC */
+ − 97
+ − 98 #ifdef BSD
+ − 99 #define UNIX_DOMAIN_SOCKETS /* BSD systems use Unix Domain sockets by default */
+ − 100 #endif /* BSD */
+ − 101
+ − 102 #endif /* No communication method pre-defined */
+ − 103
978
+ − 104 #include <sys/types.h>
+ − 105 #include <sys/param.h>
+ − 106 #include <sys/stat.h>
+ − 107 #include <stdio.h>
+ − 108 #include <stdlib.h>
+ − 109 #include <string.h>
+ − 110 #include "syssignal.h"
+ − 111 #include <errno.h>
+ − 112
428
+ − 113 #ifdef HAVE_UNISTD_H
+ − 114 #include <unistd.h>
+ − 115 #endif
+ − 116
+ − 117 #ifdef HAVE_SYS_TIME_H
+ − 118 #include <sys/time.h>
+ − 119 #endif
+ − 120
+ − 121 /*
+ − 122 * If you are using SYSV_IPC, you might want to make the buffer size bigger
+ − 123 * since it limits the size of requests and responses. Don't make it bigger
+ − 124 * than your system's max message size though (usually a couple of k) or else
+ − 125 * msgsend will start failing. For sockets, using the system BUFSIZ is usually
+ − 126 * what you want.
+ − 127 */
+ − 128
+ − 129 # define GSERV_BUFSZ BUFSIZ
+ − 130
+ − 131
+ − 132 #ifdef SYSV_IPC
+ − 133 #include <sys/ipc.h>
+ − 134 #include <sys/msg.h>
+ − 135
+ − 136 #define send_string(s,str) \
+ − 137 if (strlen(msgp->mtext) + strlen(str) < GSERV_BUFSZ) \
+ − 138 strcat(msgp->mtext,str); \
+ − 139 else \
+ − 140 { \
+ − 141 fprintf(stderr,"%s: not enough message buffer space\n",progname); \
+ − 142 exit(1); \
+ − 143 } \
+ − 144
+ − 145 #endif /* SYSV_IPC */
+ − 146
+ − 147 #if defined(INTERNET_DOMAIN_SOCKETS) || defined(UNIX_DOMAIN_SOCKETS)
+ − 148 #include <sys/socket.h>
+ − 149 #endif /* INTERNET_DOMAIN_SOCKETS || UNIX_DOMAIN_SOCKETS */
+ − 150
+ − 151 #ifdef INTERNET_DOMAIN_SOCKETS
+ − 152 #include <netdb.h>
+ − 153 #include <netinet/in.h>
+ − 154 #include <arpa/inet.h>
+ − 155 #define TABLE_SIZE 101 /* The number of entries in the hash table */
+ − 156 #define HASH(host) host /* Rather simplistic hash function */
+ − 157 #define DEFAULT_PORT 21490 /* default port number to use is
+ − 158 * DEFAULT_PORT + uid */
+ − 159 #endif /* INTERNET_DOMAIN_SOCKETS */
+ − 160
+ − 161 #ifdef UNIX_DOMAIN_SOCKETS
+ − 162 #include <sys/un.h>
+ − 163 #define HIDE_UNIX_SOCKET /* put the unix socket in a protected dir */
+ − 164 #endif /* UNIX_DOMAIN_SOCKETS */
+ − 165
+ − 166 /* On some platforms, we need to do the equivalent of "stty litout" to get
+ − 167 * characters like ^D to pass through to emacs. This problem has only
+ − 168 * been observed under emacs18; fsf19 and lemacs are probably okay without it.
+ − 169 */
+ − 170 #ifndef DONT_USE_LITOUT
+ − 171 #if !defined(HAVE_TERMIO) && !defined(HAVE_TERMIOS) && !defined(VMS)
442
+ − 172 #if !defined(BSD4_1)
428
+ − 173 #define USE_LITOUT
+ − 174 #endif
+ − 175 #endif
+ − 176 #endif
+ − 177
+ − 178
+ − 179 #define HOSTNAMSZ 255 /* max size of a hostname */
+ − 180 #define REPLYSIZ 300 /* max size of reply from server to client */
+ − 181 #undef FALSE
+ − 182 #define FALSE 0
+ − 183 #undef TRUE
+ − 184 #define TRUE 1
+ − 185
+ − 186 extern char *optarg;
+ − 187 extern int optind;
+ − 188 extern char *progname;
+ − 189 extern char *tmpdir;
+ − 190
+ − 191 /* The casts shut Sun's compiler up and are safe in the context these
+ − 192 are actually used. */
+ − 193 #define max2(x,y) (((int) (x) > (int) (y)) ? (x) : (y))
+ − 194 #define min2(x,y) (((int) (x) < (int) (y)) ? (x) : (y))
+ − 195
+ − 196 #ifndef _NFILE /* rough guess at maximum number of open files */
+ − 197 #define _NFILE 20
+ − 198 #endif
+ − 199
+ − 200 #define EOT_STR "\004"
+ − 201 #define EOT_CHR '\004'
+ − 202
+ − 203 /* connection types */
+ − 204 #define CONN_UNIX 0
+ − 205 #define CONN_INTERNET 1
+ − 206 #define CONN_IPC 2
+ − 207
+ − 208 /* function declarations */
+ − 209 int make_connection (char *hostarg, int portarg, int *s);
+ − 210 #ifdef SYSV_IPC
+ − 211 void disconnect_from_ipc_server();
+ − 212 #endif
+ − 213 #if defined(INTERNET_DOMAIN_SOCKETS) || defined(UNIX_DOMAIN_SOCKETS)
442
+ − 214 void send_string (int s, const char *msg);
428
+ − 215 void disconnect_from_server (int s, int echo);
+ − 216 int read_line (int s, char *dest);
+ − 217 #endif
+ − 218 #ifdef INTERNET_DOMAIN_SOCKETS
+ − 219 int internet_addr (char *host);
+ − 220 #endif