Mercurial > hg > xemacs-beta
view etc/gnuserv.1 @ 4690:257b468bf2ca
Move the #'query-coding-region implementation to C.
This is necessary because there is no reasonable way to access the
corresponding mswindows-multibyte functionality from Lisp, and we need such
functionality if we're going to have a reliable and portable
#'query-coding-region implementation. However, this change doesn't yet
provide #'query-coding-region for the mswindow-multibyte coding systems,
there should be no functional differences between an XEmacs with this change
and one without it.
src/ChangeLog addition:
2009-09-19 Aidan Kehoe <kehoea@parhasard.net>
Move the #'query-coding-region implementation to C.
This is necessary because there is no reasonable way to access the
corresponding mswindows-multibyte functionality from Lisp, and we
need such functionality if we're going to have a reliable and
portable #'query-coding-region implementation. However, this
change doesn't yet provide #'query-coding-region for the
mswindow-multibyte coding systems, there should be no functional
differences between an XEmacs with this change and one without it.
* mule-coding.c (struct fixed_width_coding_system):
Add a new coding system type, fixed_width, and implement it. It
uses the CCL infrastructure but has a much simpler creation API,
and its own query_method, formerly in lisp/mule/mule-coding.el.
* unicode.c:
Move the Unicode query method implementation here from
unicode.el.
* lisp.h: Declare Fmake_coding_system_internal, Fcopy_range_table
here.
* intl-win32.c (complex_vars_of_intl_win32):
Use Fmake_coding_system_internal, not Fmake_coding_system.
* general-slots.h: Add Qsucceeded, Qunencodable, Qinvalid_sequence
here.
* file-coding.h (enum coding_system_variant):
Add fixed_width_coding_system here.
(struct coding_system_methods):
Add query_method and query_lstream_method to the coding system
methods.
Provide flags for the query methods.
Declare the default query method; initialise it correctly in
INITIALIZE_CODING_SYSTEM_TYPE.
* file-coding.c (default_query_method):
New function, the default query method for coding systems that do
not set it. Moved from coding.el.
(make_coding_system_1):
Accept new elements in PROPS in #'make-coding-system; aliases, a
list of aliases; safe-chars and safe-charsets (these were
previously accepted but not saved); and category.
(Fmake_coding_system_internal):
New function, what used to be #'make-coding-system--on Mule
builds, we've now moved some of the functionality of this to
Lisp.
(Fcoding_system_canonical_name_p):
Move this earlier in the file, since it's now called from within
make_coding_system_1.
(Fquery_coding_region):
Move the implementation of this here, from coding.el.
(complex_vars_of_file_coding):
Call Fmake_coding_system_internal, not Fmake_coding_system;
specify safe-charsets properties when we're a mule build.
* extents.h (mouse_highlight_priority, Fset_extent_priority,
Fset_extent_face, Fmap_extents):
Make these available to other C files.
lisp/ChangeLog addition:
2009-09-19 Aidan Kehoe <kehoea@parhasard.net>
Move the #'query-coding-region implementation to C.
* coding.el:
Consolidate code that depends on the presence or absence of Mule
at the end of this file.
(default-query-coding-region, query-coding-region):
Move these functions to C.
(default-query-coding-region-safe-charset-skip-chars-map):
Remove this variable, the corresponding C variable is
Vdefault_query_coding_region_chartab_cache in file-coding.c.
(query-coding-string): Update docstring to reflect actual multiple
values, be more careful about not modifying a range table that
we're currently mapping over.
(encode-coding-char): Make the implementation of this simpler.
(featurep 'mule): Autoload #'make-coding-system from
mule/make-coding-system.el if we're a mule build; provide an
appropriate compiler macro.
Do various non-mule compatibility things if we're not a mule
build.
* update-elc.el (additional-dump-dependencies):
Add mule/make-coding-system as a dump time dependency if we're a
mule build.
* unicode.el (ccl-encode-to-ucs-2):
(decode-char):
(encode-char):
Move these earlier in the file, for the sake of some byte compile
warnings.
(unicode-query-coding-region):
Move this to unicode.c
* mule/make-coding-system.el:
New file, not dumped. Contains the functionality to rework the
arguments necessary for fixed-width coding systems, and contains
the implementation of #'make-coding-system, which now calls
#'make-coding-system-internal.
* mule/vietnamese.el (viscii):
* mule/latin.el (iso-8859-2):
(windows-1250):
(iso-8859-3):
(iso-8859-4):
(iso-8859-14):
(iso-8859-15):
(iso-8859-16):
(iso-8859-9):
(macintosh):
(windows-1252):
* mule/hebrew.el (iso-8859-8):
* mule/greek.el (iso-8859-7):
(windows-1253):
* mule/cyrillic.el (iso-8859-5):
(koi8-r):
(koi8-u):
(windows-1251):
(alternativnyj):
(koi8-ru):
(koi8-t):
(koi8-c):
(koi8-o):
* mule/arabic.el (iso-8859-6):
(windows-1256):
Move all these coding systems to being of type fixed-width, not of
type CCL. This allows the distinct query-coding-region for them to
be in C, something which will eventually allow us to implement
query-coding-region for the mswindows-multibyte coding systems.
* mule/general-late.el (posix-charset-to-coding-system-hash):
Document why we're pre-emptively persuading the byte compiler that
the ELC for this file needs to be written using escape-quoted.
Call #'set-unicode-query-skip-chars-args, now the Unicode
query-coding-region implementation is in C.
* mule/thai-xtis.el (tis-620):
Don't bother checking whether we're XEmacs or not here.
* mule/mule-coding.el:
Move the eight bit fixed-width functionality from this file to
make-coding-system.el.
tests/ChangeLog addition:
2009-09-19 Aidan Kehoe <kehoea@parhasard.net>
* automated/mule-tests.el:
Check a coding system's type, not an 8-bit-fixed property, for
whether that coding system should be treated as a fixed-width
coding system.
* automated/query-coding-tests.el:
Don't test the query coding functionality for mswindows-multibyte
coding systems, it's not yet implemented.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sat, 19 Sep 2009 22:53:13 +0100 |
parents | 807b51903ed4 |
children | 73eef12660cd |
line wrap: on
line source
.TH GNUSERV 1 "" "XEmacs Server" .UC 4 .SH NAME gnuserv, gnuclient \- Server and Clients for XEmacs .SH SYNOPSIS .B gnuclient [-nw] [-display display] [-q] [-v] [-l library] [-batch] [-f function] [-eval form] [-h hostname] [-p port] [-r remote-pathname] [[+line] file] ... .br .B gnudoit [-q] form .br .B gnuserv .br .B gnuattach Removed as of gnuserv 3.x .SH DESCRIPTION .PP \fIgnuserv\fP is a server program run as a subprocess of XEmacs to handle all incoming and outgoing requests from \fIgnuclient\fP. It is not usually invoked directly, but is started from XEmacs by loading the \fIgnuserv\fP package and evaluating the Lisp form (gnuserv-start). .PP \fIgnuclient\fP allows the user to request a running XEmacs process to edit the named files or directories and/or evaluate lisp forms. Depending on your environment, TTY, X, GTK, or MS Windows frames, as well as batch (frameless) execution of Lisp may be available. One typical use for this is with a dialup connection to a machine on which an XEmacs process is currently running. .PP \fIgnudoit\fP is a shell script frontend to ``gnuclient -batch -eval form''. Its use is deprecated. Try to get used to calling gnuclient directly. .PP \fIgnuattach\fP no longer exists. Its functionality has been replaced by \fIgnuclient -nw\fP. .SH OPTIONS .PP \fIgnuclient\fP supports as many of the command line options of Emacs as make sense in this context. In addition it adds a few of its own. .br For backward compatibility, ``long'' options (\fi.e.\fP, with doubled hyphen) may be specified using a single hyphen instead of a doubled one. Similarly, the ``-nw'' option is a historical artifact: a multiletter option with no double-hyphen version. .TP 8 .BI \-nw This option makes \fIgnuclient\fP act as a frontend such that XEmacs can attach to the current TTY. XEmacs will then open a new TTY frame. The effect is similar to having started a new XEmacs on this TTY with the ``-nw'' option. It currently only works if XEmacs is running on the same machine as gnuclient. This is the default if the `DISPLAY' environment variable is not set. .TP 8 .BI \--display " display, " \-display " display" If this option is given or the `DISPLAY' environment variable is set then gnuclient will tell XEmacs to edit files in a frame on the specified X device. .TP 8 .BI \-q This option informs \fIgnuclient\fP to exit once connection has been made with the XEmacs process. Normally \fIgnuclient\fP waits until all of the files on the command line have been finished with (their buffers killed) by the XEmacs process, and all the forms have been evaluated. Note that this is \fIdifferent\fP from XEmacs itself, where this option means to inhibit loading of the user init file. .TP 8 .BI \-v When this option is specified \fIgnuclient\fP will request for the specified files to be viewed instead of edited. .TP 8 .BI \-l " library" Tell Emacs to load the specified library. .TP 8 .BI \-batch Tell Emacs not to open any frames. Just load libraries and evaluate lisp code. If no files to execute, functions to call or forms to eval are given using the .BR \-l , .BR \-f , or .B \-eval options, then forms to eval are read from STDIN. .TP 8 .BI \-f " function," Make Emacs execute the lisp function. .TP 8 .BI \--eval " form, " \-eval " form" Make Emacs execute the Lisp form. .TP 8 .BI \-h " hostname" Used only with Internet-domain sockets, this option specifies the host machine which should be running \fIgnuserv\fP. If this option is not specified then the value of the environment variable GNU_HOST is used if set. If no hostname is specified, and the GNU_HOST variable is not set, an Internet connection will not be attempted. N\.B.: \fIgnuserv\fP does NOT allow Internet connections unless XAUTH authentication is used or the GNU_SECURE variable has been specified and points at a file listing all trusted hosts. (See SECURITY below.) .br An Internet address (``dotted-quad'') may be specified instead of a hostname. IPv6 support is not robust. .br A hostname of \fBunix\fP can be used to specify that the connection to the server should use a Unix-domain socket (if supported) rather than an Internet-domain socket. .TP 8 .BI \-p " port" Used only with Internet-domain sockets, this option specifies the service port used to communicate between server and clients. If this option is not specified, then the value of the environment variable GNU_PORT is used, if set, otherwise a service called ``gnuserv'' is looked up in the services database. Finally, if no other value can be found for the port, then a default port is used which is usually 21490 + uid. .br Note that since \fIgnuserv\fP doesn't allow command-line options, the port for it will have to be specified via one of the alternative methods. .TP 8 .BI \-r " pathname" Used only with Internet-domain sockets, the pathname argument may be needed to inform XEmacs how to reach the root directory of a remote machine. \fIgnuclient\fP prepends this string to each path argument given. For example, if you were trying to edit a file on a client machine called otter, whose root directory was accessible from the server machine via the path /net/otter, then this argument should be set to '/net/otter'. If this option is omitted, then the value is taken from the environment variable GNU_NODE, if set, or the empty string otherwise. .TP 8 .BI "[+n] file" This is the path of the file to be edited. If the file is a directory, then the directory browsers dired or monkey are usually invoked instead. The cursor is put at line number 'n' if specified. .SH SETUP \fIgnuserv\fP is included with recent versions of XEmacs; no installation is required. The server must be started before clients may attempt to connect. Start the server by evaluating the Lisp form (gnuserv-start), or interactively by typing `M-x gnuserv-start'. .SH CONFIGURATION The behavior of this suite of programs can be customized to a large extent. Type `M-x customize-group RET gnuserv RET'. More documentation can be found in the file `gnuserv.el' .SH EXAMPLE .RS 4 gnuclient -q -f mh-smail .br gnuclient -h cuckoo -r /ange@otter: /tmp/* .br gnuclient -nw ../src/listproc.c .RE .br .br More examples and sample wrapper scripts are provided in the etc/gnuserv directory of the XEmacs installation. .SH SYSV IPC SysV IPC is a build-time option, enabled by defining the symbol SYSV_IPC at the top of gnuserv.h. It is used to communicate between \fIgnuclient\fP and \fIgnuserv\fP. It is incompatible with both Unix-domain and Internet-domain socket communication as described below. A file called /tmp/gsrv??? is created as a key for the message queue, and if removed will cause the communication between server and client to fail until the server is restarted. .SH UNIX-DOMAIN SOCKETS Unix-domain sockets are a build-time option, enabled by defining the symbol UNIX_DOMAIN_SOCKETS at the top of gnuserv.h. A Unix-domain socket is used to communicate between \fIgnuclient\fP and \fIgnuserv\fP. A file called /tmp/gsrvdir????/gsrv is created for communication. If the symbol USE_TMPDIR is set at the top of gnuserv.h, $TMPDIR, when set, is used instead of /tmp. If that file is deleted, or TMPDIR has different values for the server and the client, communication between server and client will fail. Only the user running gnuserv will be able to connect to the socket. .SH INTERNET-DOMAIN SOCKETS Internet-domain sockets are a build-time option, enabled by defining the symbol INTERNET_DOMAIN_SOCKETS at the top of gnuserv.h. Internet-domain sockets are used to communicate between \fIgnuclient\fP and \fIgnuserv\fP. Both Internet-domain and Unix-domain sockets can be used at the same time. If a hostname is specified via -h or via the GNU_HOST environment variable, \fIgnuclient\fP establish connections using an Internet domain socket. If not, a local connection is attempted via either a Unix-domain socket or SYSV IPC. .SH SECURITY Using Internet-domain sockets, a more robust form of security is needed that wasn't necessary with either Unix-domain sockets or SysV IPC. Currently, two authentication protocols are supported to provide this: MIT-MAGIC-COOKIE-1 (based on the X11 xauth(1) program) and a simple host-based access control mechanism, hereafter called GNUSERV-1. The GNUSERV-1 protocol is always available. Support for MIT-MAGIC-COOKIE-1 is enabled (by defining AUTH_MAGIC_COOKIE at the top of gnuserv.h. .PP \fIgnuserv\fP, using GNUSERV-1, performs a limited form of access control at the machine level. By default no Internet-domain socket is opened. If the variable GNU_SECURE can be found in \fIgnuserv\fP's environment, and it names a readable filename, then this file is opened and assumed to be a list of hosts, one per line, from which the server will allow requests. Connections from any other host will be rejected. Even the machine on which \fIgnuserv\fP is running is not permitted to make connections via the Internet socket unless its hostname is explicitly specified in this file. Note that a host may be either a numeric IP address or a hostname, and that .I any user on an approved host may connect to your gnuserv and execute arbitrary Lisp (e.g., delete all your files). If this file contains a lot of hostnames then the server may take quite a long time to start up. .PP When the MIT-MAGIC-COOKIE-1 protocol is enabled, an Internet socket \fIis\fP opened by default. \fIgnuserv\fP will accept a connection from any host, and will wait for a "magic cookie" (essentially, a password) to be presented by the client. If the client doesn't present the cookie, or if the cookie is wrong, the authentication of the client is considered to have failed. At this point. \fIgnuserv\fP falls back to the GNUSERV-1 protocol; If the client is calling from a host listed in the GNU_SECURE file, the connection will be accepted, otherwise it will be rejected. .TP 4 .I Using MIT-MAGIC-COOKIE-1 authentication When the \fIgnuserv\fP server is started, it looks for a cookie defined for display 999 on the machine where it is running. If the cookie is found, it will be stored for use as the authentication cookie. These cookies are defined in an authorization file (usually ~/.Xauthority) that is manipulated by the X11 xauth(1) program. For example, a machine "kali" which runs an emacs that invokes \fIgnuserv\fP should respond as follows (at the shell prompt) when set up correctly. .PP .RS 8 kali% xauth list .br GS65.SP.CS.CMU.EDU:0 MIT-MAGIC-COOKIE-1 11223344 .br KALI.FTM.CS.CMU.EDU:999 MIT-MAGIC-COOKIE-1 1234 .RE .PP .RS 4 In the above case, the authorization file defines two cookies. The second one, defined for screen 999 on the server machine, is used for gnuserv authentication. .PP On the client machine's side, the authorization file must contain an identical line, specifying the .I server's cookie. In other words, on a machine "foobar" which wishes to connect to "kali," the `xauth list' output should contain the line: .PP .RS 4 KALI.FTM.CS.CMU.EDU:999 MIT-MAGIC-COOKIE-1 1234 .RE .PP For more information on authorization files, take a look at the xauth(1X11) man page, or invoke xauth interactively (without any arguments) and type "help" at the prompt. Remember that case in the name of the authorization protocol (i.e.`MIT-MAGIC-COOKIE-1') .I is significant! .RE .SH ENVIRONMENT .PP .TP 8 .B DISPLAY Default X (or GTK) device for display of edit frame. .SH FILES .PP .TP 8 .B /tmp/gsrv??? (SYSV_IPC only) .TP 8 .B /tmp/gsrvdir???/gsrv (unix domain sockets only) .TP 8 .B ~/.xemacs/init.el XEmacs customization file, see xemacs(1). .SH SEE ALSO .PP .TP 8 xauth(1X11), Xsecurity(1X11), gnuserv.el .SH BUGS .PP NULs occurring in result strings don't get passed back to gnudoit properly. .SH AUTHOR. Andy Norman (ange@hplb.hpl.hp.com), based heavily upon etc/emacsclient.c, etc/server.c and lisp/server.el from the GNU Emacs 18.52 distribution. Various modifications from Bob Weiner (weiner@mot.com), Darrell Kindred (dkindred@cmu.edu), Arup Mukherjee (arup@cmu.edu), Ben Wing (ben@xemacs.org) and Hrvoje Niksic (hniksic@xemacs.org).