adding zephyr-im master branch
This commit is contained in:
		
							
								
								
									
										14
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| *.c ident | ||||
| *.h ident | ||||
| *.y ident | ||||
| *.et ident | ||||
| *.ct ident | ||||
| *.py ident | ||||
| *.1.in ident | ||||
| *.1 ident | ||||
| *.8.in ident | ||||
| *.8 ident | ||||
| debian export-ignore | ||||
| .gitignore export-ignore | ||||
| .gitattributes export-ignore | ||||
| release export-ignore | ||||
							
								
								
									
										89
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| *~ | ||||
| .\#* | ||||
| \#*# | ||||
| autom4te.cache | ||||
| TAGS | ||||
| *.pyc | ||||
| /build-stamp | ||||
| /debian/files | ||||
| /debian/*.substvars | ||||
| /debian/*.debhelper.log | ||||
| /configure-stamp | ||||
| /debian/libzephyr-dev/* | ||||
| /debian/*.debhelper | ||||
| /debian/libzephyr-python/* | ||||
| /debian/libzephyr4-krb/* | ||||
| /debian/libzephyr4-krb45/* | ||||
| /debian/libzephyr4-krb5/* | ||||
| /debian/libzephyr4/* | ||||
| /debian/tmp-krb5/* | ||||
| /debian/tmp/* | ||||
| /debian/zephyr-clients/* | ||||
| /debian/zephyr-server-krb/* | ||||
| /debian/zephyr-server-krb45/* | ||||
| /debian/zephyr-server-krb5.README.Debian | ||||
| /debian/zephyr-server-krb5.docs | ||||
| /debian/zephyr-server-krb5.files | ||||
| /debian/zephyr-server-krb5.postinst | ||||
| /debian/zephyr-server-krb5.postrm | ||||
| /debian/zephyr-server-krb5.templates | ||||
| /debian/zephyr-server-krb5/* | ||||
| /debian/zephyr-server/* | ||||
| /krb5/* | ||||
| /no-krb/* | ||||
| /debian/libzephyr4-krb5.files | ||||
| aclocal.m4 | ||||
| configure | ||||
| h/config.h.in | ||||
| ltmain.sh | ||||
| m4 | ||||
| config.guess | ||||
| config.sub | ||||
| libtool | ||||
| install-sh | ||||
| config.log | ||||
| config.status | ||||
| *.o | ||||
| *.lo | ||||
| *.la | ||||
| /lib/zephyr_err.c | ||||
| /lib/zephyr_err.h | ||||
| /server/zsrv_err.c | ||||
| /server/zsrv_err.h | ||||
| .libs | ||||
| Makefile | ||||
| /server/test_server | ||||
| /server/zephyrd | ||||
| /server/zephyrd.8 | ||||
| /zhm/zhm | ||||
| /zhm/zhm.8 | ||||
| /zwgc/char_stack.h | ||||
| /zwgc/int_dictionary.c | ||||
| /zwgc/int_dictionary.h | ||||
| /zwgc/pointer_dictionary.c | ||||
| /zwgc/pointer_dictionary.h | ||||
| /zwgc/port_dictionary.c | ||||
| /zwgc/port_dictionary.h | ||||
| /zwgc/string_dictionary.c | ||||
| /zwgc/string_dictionary.h | ||||
| /zwgc/string_stack.h | ||||
| /zwgc/unsigned_long_dictionary.c | ||||
| /zwgc/unsigned_long_dictionary.h | ||||
| /zwgc/xmode_stack.h | ||||
| /zwgc/y.tab.c | ||||
| /zwgc/y.tab.h | ||||
| /zwgc/zwgc | ||||
| /zwgc/zwgc.1 | ||||
| /clients/zaway/zaway | ||||
| /clients/zctl/zctl | ||||
| /clients/zctl/zctl.1 | ||||
| /clients/zctl/zctl_cmds.c | ||||
| /clients/zleave/zleave | ||||
| /clients/zlocate/zlocate | ||||
| /clients/znol/znol | ||||
| /clients/zshutdown_notify/zshutdown_notify | ||||
| /clients/zstat/zstat | ||||
| /clients/zwrite/zwrite | ||||
| /h/config.h | ||||
| /h/zephyr/zephyr_err.h | ||||
| /h/zephyr_version.h | ||||
							
								
								
									
										78
									
								
								INSTALL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								INSTALL
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| This file explains how to build and install Zephyr on a machine.  To | ||||
| learn how to use Zephyr once you've installed it, read the file USING. | ||||
| To learn how to set up Zephyr service at a site, read the file | ||||
| OPERATING. | ||||
|  | ||||
| To build and install Zephyr, run: | ||||
|  | ||||
| 	./configure | ||||
| 	make | ||||
| 	make install | ||||
|  | ||||
| This will build Zephyr without Hesiod or Kerberos support, and install | ||||
| in /usr/local.  To install in a location other than /usr/local, add | ||||
| "--prefix=INSTPREFIX" to the configure line, where INSTPREFIX is the | ||||
| directory you want to install Zephyr in. | ||||
|  | ||||
| If your site has a Hesiod service with a valid zephyr.sloc entry (or | ||||
| you can add one), you can enable Hesiod support by adding the option | ||||
| "--with-hesiod=HESPREFIX" to the configure line, where | ||||
| HESPREFIX/include and HESPREFIX/lib are the directories you have the | ||||
| Hesiod libraries installed in. | ||||
|  | ||||
| If your site has a Kerberos 5 service, you can enable Kerberos 5 support | ||||
| by adding the option "--with-krb5=KRBPREFIX" to the configure line, | ||||
| where KRBPREFIX/include and KRBPREFIX/lib are the directories you | ||||
| have the Kerberos libraries installed in. | ||||
|  | ||||
| If your site has a Kerberos 4 service, you can enable Kerberos 4 support | ||||
| by adding the option "--with-krb4=KRBPREFIX" to the configure line, | ||||
| where KRBPREFIX/include and KRBPREFIX/lib are the directories you | ||||
| have the Kerberos libraries installed in.  Note that this is | ||||
| deprecated, and should only be enabled for transitions. | ||||
|  | ||||
| If you build with both krb5 and krb4, you will get a client that only | ||||
| knows how to authenticate with krb5 servers, but a server that can | ||||
| understand authentication from both krb4 and krb5 clients. | ||||
|  | ||||
| If you want/need a krb4 client, you have to build without krb5. | ||||
|  | ||||
| If you have a make which supports VPATH in a manner compatible with | ||||
| GNU make, you can build in a separate directory.  Simply invoke the | ||||
| configure script from within the build directory and configure will | ||||
| locate the source directory for you.  (If that doesn't work for some | ||||
| reason, you can also specify "--srcdir=SOURCEDIR" on the configuration | ||||
| line.) | ||||
|  | ||||
| If configure can't properly find your X11 include or library | ||||
| directories, add "--x-includes=INCDIR" and "--x-libraries=LIBDIR" to | ||||
| the configure line.  To build without X11 support, add "--without-x" | ||||
| to the configure line. | ||||
|  | ||||
| If you have Hesiod and/or Kerberos installed such that you can't | ||||
| specify a single prefix for both include files and libraries, set the | ||||
| environment variables CPPFLAGS and LDFLAGS to include the relevant | ||||
| directories, and just configure with "--with-krb4" and | ||||
| "--with-hesiod".  For instance (for a csh-like shell): | ||||
|  | ||||
| 	setenv CPPFLAGS "-I/opt/athena/include" | ||||
| 	setenv LDFLAGS "-I/opt/athena/arch/sparc/lib" | ||||
| 	./configure --with-hesiod --with-krb4 | ||||
| 	make | ||||
| 	make install | ||||
|  | ||||
| Although it's not necessary for Zephyr to function correctly, you | ||||
| should add the following services to /etc/services if possible: | ||||
|  | ||||
| zephyr-clt      2103/udp                        # Zephyr serv-hm connection | ||||
| zephyr-hm       2104/udp                        # Zephyr hostmanager | ||||
| zephyr-hm-srv	2105/udp			# Zephyr hm-serv connection | ||||
|  | ||||
| To learn how to use Zephyr, read the file USING and the man pages for | ||||
| the various Zephyr programs.  To learn how to operate a Zephyr | ||||
| service, read the file OPERATING. | ||||
|  | ||||
| We have tried to make Zephyr as portable as is reasonably possible, | ||||
| but have not taken into account every possible kind of system.  If you | ||||
| have any problems building or installing Zephyr according to these | ||||
| instructions, please go to http://zephyr.1ts.org and open a ticket. | ||||
							
								
								
									
										65
									
								
								Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| SHELL = /bin/sh | ||||
|  | ||||
| prefix=@prefix@ | ||||
| exec_prefix=@exec_prefix@ | ||||
| datadir=@datadir@ | ||||
| sysconfdir=@sysconfdir@ | ||||
| sbindir=@sbindir@ | ||||
| datarootdir=@datarootdir@ | ||||
|  | ||||
| includedir=@includedir@ | ||||
| mandir=@mandir@ | ||||
| bindir=@bindir@ | ||||
| libdir=@libdir@ | ||||
|  | ||||
| srcdir=@srcdir@ | ||||
| top_srcdir=@top_srcdir@ | ||||
| INSTALL=@INSTALL@ | ||||
|  | ||||
| SUBDIRS=lib clients server zhm zwgc | ||||
|  | ||||
| build: | ||||
| 	$(MAKE) all | ||||
|  | ||||
| h/zephyr_version.h: always | ||||
| 	sh -x ${srcdir}/new_vers.sh $(top_srcdir) | ||||
|  | ||||
| clean: clean_version | ||||
|  | ||||
| clean_version: | ||||
| 	$(RM) h/zephyr_version.h | ||||
|  | ||||
| all: h/zephyr_version.h | ||||
|  | ||||
| all check clean: | ||||
| 	for i in ${SUBDIRS}; do (cd $$i; ${MAKE} $@) || exit 1; done | ||||
|  | ||||
| install: | ||||
| 	${INSTALL} -d ${DESTDIR}${prefix} | ||||
| 	${INSTALL} -d ${DESTDIR}${exec_prefix} | ||||
| 	${INSTALL} -d ${DESTDIR}${bindir} | ||||
| 	${INSTALL} -d ${DESTDIR}${libdir} | ||||
| 	${INSTALL} -d ${DESTDIR}${libdir}/pkgconfig | ||||
| 	${INSTALL} -d ${DESTDIR}${datadir} | ||||
| 	${INSTALL} -d ${DESTDIR}${datadir}/zephyr | ||||
| 	${INSTALL} -d ${DESTDIR}${sysconfdir} | ||||
| 	${INSTALL} -d ${DESTDIR}${sysconfdir}/zephyr/acl | ||||
| 	${INSTALL} -d ${DESTDIR}${sbindir} | ||||
| 	${INSTALL} -d ${DESTDIR}${includedir} | ||||
| 	${INSTALL} -d ${DESTDIR}${includedir}/zephyr | ||||
| 	${INSTALL} -d ${DESTDIR}${mandir} | ||||
| 	${INSTALL} -d ${DESTDIR}${mandir}/man1 | ||||
| 	${INSTALL} -d ${DESTDIR}${mandir}/man3 | ||||
| 	${INSTALL} -d ${DESTDIR}${mandir}/man8 | ||||
| 	${INSTALL} -m 644 ${srcdir}/h/zephyr/mit-copyright.h \ | ||||
| 		${DESTDIR}${includedir}/zephyr | ||||
| 	${INSTALL} -m 644 ${srcdir}/h/zephyr/zephyr.h \ | ||||
| 		${DESTDIR}${includedir}/zephyr | ||||
| 	${INSTALL} -m 644 zephyr.pc ${DESTDIR}${libdir}/pkgconfig | ||||
| 	${INSTALL} -m 644 h/zephyr/zephyr_err.h ${DESTDIR}${includedir}/zephyr | ||||
| 	for i in ${SUBDIRS}; do (cd $$i; ${MAKE} $@) || exit 1; done | ||||
|  | ||||
| always: | ||||
|  | ||||
| .PHONY: all build check install clean clean_version always | ||||
|  | ||||
							
								
								
									
										27
									
								
								NOTES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								NOTES
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| Please observe the following notes when making changes to the source | ||||
| tree. | ||||
|  | ||||
| The directory h contains header files used internally in the zephyr | ||||
| source tree.  The directory h/zephyr contains header files containing | ||||
| declarations for the Zephyr API.  h/zephyr/zephyr_err.h is generated | ||||
| from lib/zephyr/zephyr_err.et when lib/zephyr is built. | ||||
| h/zephyr/zephyr.h is generated by configure, as is h/config.h.  Those | ||||
| header files live in the build tree.  All other header files in h live | ||||
| in the source tree. | ||||
|  | ||||
| h/config.h is generated by configure and contains the results of | ||||
| configure tests as well as definitions for the installation | ||||
| configuration directory and data directory.  h/sysdep.h uses | ||||
| h/config.h to include various header files or make various external | ||||
| declarations which many programs might be interested in.  h/internal.h | ||||
| contains declarations internal to the "Zephyr system proper," which | ||||
| includes the Zephyr library, the server, the hostmanager, and (for | ||||
| now) zstat. | ||||
|  | ||||
| h/zephyr/zephyr.h is a public header file; that is, it is installed | ||||
| with the Zephyr system.  As such, this header file may need to work | ||||
| with compilers other than the compiler used to build the Zephyr system | ||||
| itself.  Thus, we use __STDC__ (both in h/sysdep.h and in zephyr.h) to | ||||
| guess whether the compiler will handle const, prototypes, and stdarg. | ||||
| This is unfortunately not as reliable as using autoconf features like | ||||
| AC_C_CONST. | ||||
							
								
								
									
										58
									
								
								OPERATING
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								OPERATING
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| This file explains how to operate a Zephyr service once you have | ||||
| installed Zephyr on all the relevant machines and file servers in your | ||||
| environment.  To learn how to configure, build, and install Zephyr, | ||||
| read the file INSTALL. | ||||
|  | ||||
| To set up Zephyr service at a site, follow these steps: | ||||
|  | ||||
| 1. Choose the machines you wish to have act as Zephyr servers at your | ||||
| site.  Expect the server to be CPU-efficient but to consume a bit more | ||||
| memory than you might expect (at MIT, with around a thousand | ||||
| simultaneous users, the Zephyr server's data size is 40MB).  If you | ||||
| have a lot of users, the server should have enough memory so that the | ||||
| process doesn't swap. | ||||
|  | ||||
| 2a. If you configured Zephyr with Hesiod support, make sure your | ||||
| Hesiod realm has a "zephyr.sloc" entry containing a record for each | ||||
| server.  (Each entry should contain the name of the server, nothing | ||||
| else.)  The Zephyr servers will use the zephyr.sloc entry to find the | ||||
| other servers.  Host managers will use the zephyr.sloc entry to find | ||||
| the Zephyr servers by default; however, you can control the set of | ||||
| servers for each host manager by giving each host a | ||||
| "<hostname>.cluster" entry containing a record "zcluster <serverset>". | ||||
| If such a record is found, the host manager will resolve | ||||
| "<serverset>.sloc" instead of "zephyr.sloc". | ||||
|  | ||||
| 2b. If you configured Zephyr without Hesiod support, and you have | ||||
| multiple Zephyr servers, each server should have a file "server.list" | ||||
| in the configuration directory (which is /etc/athena/zephyr if you | ||||
| configured with --enable-athena, or /usr/local/etc/zephyr if you | ||||
| installed Zephyr in /usr/local and didn't use --enable-athena).  This | ||||
| file should contain a list of the servers, one per line.  The server | ||||
| will read and use this file if it exists even if the server was built | ||||
| with hesiod support. | ||||
|  | ||||
| 3. If you configured Zephyr with Kerberos 5 support, make a service | ||||
| key "zephyr/zephyr@<your realm>" and install a keytab for that service | ||||
| as "krb5.keytab" in the configuration directory of each of your zephyr | ||||
| servers.  Note that you need to ktadd the keytab only once and copy it | ||||
| around; the files on all the servers should be identical. | ||||
|  | ||||
| 4. Start zephyrd from the system binary directory (/usr/athena/etc if | ||||
| you configured with --enable-athena, /usr/local/sbin if you installed | ||||
| in /usr/local and didn't use --enable-athena).  zephyrd logs as | ||||
| service "local6"; watch the syslogs for error messages.  Arrange for | ||||
| zephyrd to be run at boot time on your server machines. | ||||
|  | ||||
| 5. Each client machine should run zhm (the Zephyr Host Manager) from | ||||
| the local system binary directory (/etc/athena for --enable-athena, | ||||
| /usr/local/sbin if you installed in /usr/local and didn't use | ||||
| --enable-athena).  If you built Zephyr without Hesiod support, you | ||||
| should start zhm as "zhm server1 server2 server3 ..." so that zhm | ||||
| knows where the Zephyr servers are.  Do not use "localhost" or | ||||
| "127.0.0.1" as a server name, or zhm will become confused. | ||||
|  | ||||
| You can send a SIGFPE signal to the server process to make it dump its | ||||
| subscription database to /var/tmp/zephyr.db.  (If /var/tmp didn't | ||||
| exist when Zephyr was built, the subscription database will be dumped | ||||
| in /usr/tmp or /tmp instead.) | ||||
							
								
								
									
										25
									
								
								README.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								README.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| This is version @VERSION@ of the Project Athena Zephyr | ||||
| notification system. | ||||
|  | ||||
| Zephyr allows users to send messages to other users or to groups of | ||||
| users.  Users can view incoming Zephyr messages as windowgrams | ||||
| (transient X windows) or as text on a terminal. Zephyr can optionally | ||||
| make use of the Kerberos version 4 security library or the Hesiod | ||||
| service name resolution library. | ||||
|  | ||||
| Bug reports or patches should go to bug-zephyr@mit.edu.  Please do not | ||||
| send questions about snapshots; they are not supported. | ||||
|  | ||||
| To find out how to configure, build, and install Zephyr, read the file | ||||
| INSTALL. | ||||
|  | ||||
| To find out how to operate a Zephyr service, read the file OPERATING. | ||||
|  | ||||
| To find out how to use an existing Zephyr service, read the file | ||||
| USING. | ||||
|  | ||||
| Please read the file NOTES before making any modifications to the | ||||
| source tree. | ||||
|  | ||||
| --Karl Ramm | ||||
| http://zephyr.1ts.org/ | ||||
							
								
								
									
										77
									
								
								USING
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								USING
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| This file explains how to use an existing Zephyr service once you've | ||||
| built and installed the Zephyr distribution.  To learn how to build | ||||
| and install Zephyr, read the file INSTALL.  To learn how to set up | ||||
| Zephyr service at a site, read the file OPERATING. | ||||
|  | ||||
| First, before you can do anything else, your client machine must be | ||||
| running zhm from the local system binary directory (/etc/athena/zephyr | ||||
| if you built Zephyr with --enable-athena, /usr/local/sbin/zephyr if | ||||
| you installed Zephyr in /usr/local and didn't use --enable-athena). | ||||
| Only one copy of zhm can be running on a given machine, and it can be | ||||
| started by any user.  If you're using a machine you don't administer, | ||||
| you may want to check if the machine is configured to start up zhm | ||||
| automatically at boot time. | ||||
|  | ||||
| Once you have zhm running, you can start receiving zephyrgrams by | ||||
| running the command: | ||||
|  | ||||
| 	zwgc | ||||
|  | ||||
| "zwgc" stands for "Zephyr WindowGram Client".  If you built Zephyr | ||||
| with X support and are using an X display, you will receive messages | ||||
| as windows on your screen (click on them to get rid of them); | ||||
| otherwise, you will receive messages in your terminal as text.  Read | ||||
| the man page on zwgc to find out how to configure it using the | ||||
| .zwgc.desc file in your home directory. | ||||
|  | ||||
| You can send messages to another user with: | ||||
|  | ||||
| 	zwrite username | ||||
|  | ||||
| To write to groups of users, you must agree on a "class" and/or | ||||
| "instance" to write to (this will be explained in greater detail | ||||
| below).  At MIT, most users communicate in private groups via classes. | ||||
| Suppose a bunch of people wanted to communicate on a class "newclass". | ||||
| They would all subscribe to the class with the command: | ||||
|  | ||||
| 	zctl add newclass \* \* | ||||
|  | ||||
| and send messages with: | ||||
|  | ||||
| 	zwrite -c newclass | ||||
|  | ||||
| The "zctl add" command adds the subscription to the .zephyr.subs file | ||||
| in your home directory, so that you will automatically be subscribed | ||||
| to the class the next time you run zwgc.  If you just want to | ||||
| subscribe without adding the subscription to your .zephyr.subs file, | ||||
| use "zctl sub" instead of "zctl add". | ||||
|  | ||||
| Now for a bit more explanation about what classes and instances are: | ||||
| every Zephyr message is send to a class, an instance, and a recipient, | ||||
| commonly written as <class,instance,recipient>.  The default class is | ||||
| "MESSAGE"; the default instance is "PERSONAL".  When you use "zwrite | ||||
| username", you are sending a message to <MESSAGE,PERSONAL,username>. | ||||
| If you don't specify a username on the zwrite command line, you will | ||||
| be sending to the recipient "*", so when you use "zwrite -c newclass", | ||||
| you are sending a message to <newclass,PERSONAL,*>. | ||||
|  | ||||
| Similarly, every time you request a subscription, you are subscribing | ||||
| to a class, an instance, and a recipient.  The recipient must be | ||||
| either "*" or your username.  The instance can be any string; however, | ||||
| if you subscribe to instance "*", you will receive messages to any | ||||
| instance as long as the class and recipient also match.  The class can | ||||
| be any string; "*" has no special meaning for class names.  When you | ||||
| start zwgc, you are automatically subscribed to | ||||
| <MESSAGE,PERSONAL,yourusername> and <MESSAGE,URGENT,yourusername> even | ||||
| if you don't explicitly request those subscriptions. | ||||
|  | ||||
| As an example of how you might use these features, at MIT we have | ||||
| several frequently-used instances of class MESSAGE, called | ||||
| "white-magic", "help", "weather", "tmbg" and so forth.  These are | ||||
| commonly known as "public" instances because they are not intended to | ||||
| exclude anyone.  Users can subscribe to individual instances using | ||||
| "zctl add message help \*", or they can subscribe to all of them at | ||||
| once using "zctl add message \* \*".  (If users do this, they can tell | ||||
| zwgc to filter out messages from certain instances; see the man page | ||||
| for zwgc.)  If users want to have semi-private group conversations, | ||||
| they use separate classes, as described earlier. | ||||
							
								
								
									
										13
									
								
								clients/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								clients/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| SHELL = /bin/sh | ||||
|  | ||||
| SUBDIRS=zaway zctl zleave zlocate znol \ | ||||
| 	zshutdown_notify zstat zwrite | ||||
|  | ||||
| all: | ||||
| 	for i in ${SUBDIRS}; do (cd $$i; ${MAKE} $@) || exit 1; done | ||||
|  | ||||
| check install clean: | ||||
| 	for i in ${SUBDIRS}; do (cd $$i; ${MAKE} $@) || exit 1; done | ||||
|  | ||||
| .PHONY: all check install clean | ||||
|  | ||||
							
								
								
									
										56
									
								
								clients/zaway/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								clients/zaway/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| SHELL=@SHELL@ | ||||
|  | ||||
| prefix=@prefix@ | ||||
| exec_prefix=@exec_prefix@ | ||||
| datadir=@datadir@ | ||||
| sysconfdir=@sysconfdir@ | ||||
| sbindir=@sbindir@ | ||||
| lsbindir=@lsbindir@ | ||||
| datarootdir=@datarootdir@ | ||||
| top_builddir=../.. | ||||
|  | ||||
| includedir=@includedir@ | ||||
| mandir=@mandir@ | ||||
| libdir=@libdir@ | ||||
| bindir=@bindir@ | ||||
|  | ||||
| srcdir=@srcdir@ | ||||
| top_srcdir=@top_srcdir@ | ||||
| BUILDTOP=../.. | ||||
| VPATH=@srcdir@ | ||||
| LIBTOOL=@LIBTOOL@ | ||||
| CC=@CC@ | ||||
| INSTALL=@INSTALL@ | ||||
|  | ||||
| LIBZEPHYR=${BUILDTOP}/lib/libzephyr.la | ||||
| CPPFLAGS=@CPPFLAGS@ | ||||
| CFLAGS=@CFLAGS@ | ||||
| ALL_CFLAGS=${CFLAGS} -I${top_srcdir}/h -I${BUILDTOP}/h ${CPPFLAGS} | ||||
| LDFLAGS=@LDFLAGS@ | ||||
| LIBS=${LIBZEPHYR} @LIBS@ -lcom_err | ||||
|  | ||||
| OBJS=	zaway.o | ||||
|  | ||||
| all: zaway | ||||
|  | ||||
| zaway: ${OBJS} ${LIBZEPHYR} | ||||
| 	${LIBTOOL} --mode=link ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LIBS} | ||||
|  | ||||
| .c.o: | ||||
| 	${CC} -c ${ALL_CFLAGS} $< | ||||
|  | ||||
| check: | ||||
|  | ||||
| install: zaway | ||||
| 	${LIBTOOL} --mode=install ${INSTALL} -m 755 zaway ${DESTDIR}${bindir} | ||||
| 	${INSTALL} -m 644 ${srcdir}/zaway.1 ${DESTDIR}${mandir}/man1 | ||||
|  | ||||
| clean: | ||||
| 	${LIBTOOL} --mode=clean rm -f zaway | ||||
| 	rm -f ${OBJS} | ||||
|  | ||||
| ${OBJS}: ${top_srcdir}/h/sysdep.h ${BUILDTOP}/h/config.h | ||||
| ${OBJS}: ${BUILDTOP}/h/zephyr/zephyr.h ${BUILDTOP}/h/zephyr/zephyr_err.h | ||||
|  | ||||
| .PHONY: all check install clean | ||||
|  | ||||
							
								
								
									
										120
									
								
								clients/zaway/zaway.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								clients/zaway/zaway.1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| .\"	$Id$ | ||||
| .\" | ||||
| .\" Copyright 1987,1988 by the Massachusetts Institute of Technology | ||||
| .\" All rights reserved.  The file /usr/include/zephyr/mit-copyright.h | ||||
| .\" specifies the terms and conditions for redistribution. | ||||
| .\" | ||||
| .\"	@(#)zaway.1	6.1 (MIT) 7/9/87 | ||||
| .\" | ||||
| .TH ZAWAY 1 "July 1, 1988" "MIT Project Athena" | ||||
| .ds ]W MIT Project Athena | ||||
| .SH NAME | ||||
| zaway \- tell other people via Zephyr that you aren't around | ||||
| .SH SYNOPSIS | ||||
| .B zaway | ||||
| [ | ||||
| .I OPTIONS | ||||
| ] | ||||
| [ | ||||
| .I FILE | ||||
| ] | ||||
| .SH DESCRIPTION | ||||
| .I zaway | ||||
| provides a way for you to automatically send replies when other people | ||||
| contact you using | ||||
| .I zwrite(1). zaway | ||||
| subscribes itself to class "MESSAGE", instance "*", so that it can | ||||
| monitor your incoming messages.  It does not affect the operation of any | ||||
| other client receiving messages. | ||||
| .I zaway | ||||
| is typically run when you are leaving your terminal or display | ||||
| temporarily. | ||||
| .I zaway | ||||
| usually never exits; when you return to your terminal you should type | ||||
| the interrupt character (usually ^C) in order to make | ||||
| .I zaway | ||||
| exit. | ||||
| .SS OPTIONS | ||||
| .TP | ||||
| .I "\-m STRING" | ||||
| Use STRING as the body of the auto-reply message.  Any message file | ||||
| (specified on the command line or the default) is ignored. | ||||
| .TP | ||||
| .I "\-w" | ||||
| Watch the invoking user's location status.  If the user is locatable | ||||
| anywhere, no auto-replies will be sent. | ||||
| .TP | ||||
| .I "\-h" | ||||
| Displays a short usage message and exits. | ||||
| .PP | ||||
| .I zaway | ||||
| uses a message file (which defaults | ||||
| to $HOME/.away) to describe what reponses should be sent to which | ||||
| senders.  The general format of this file | ||||
| is: | ||||
| .PP | ||||
| .nf | ||||
| 	>name | ||||
| 	>name | ||||
| 	message | ||||
| 	>name | ||||
| 	message | ||||
| .fi | ||||
| .PP | ||||
| Any number of user names may be specified preceding the message to send | ||||
| to those senders.  If a user name appears more than once, the message will | ||||
| be a concatenation of each of the appropriate messages.  There are | ||||
| two special names: "*" indicates that the following message should be | ||||
| sent to all senders and "%" indicates that the following message should | ||||
| only be sent if the user name has not matched yet.  | ||||
| .PP | ||||
| If no file is specified, | ||||
| and no default file can be found, the following message is returned: | ||||
| .sp | ||||
| .in +5 | ||||
| I'm sorry, but I am currently away from the terminal and am | ||||
| not able to receive your message. | ||||
| .in -5 | ||||
| .sp | ||||
| If a user name does not match any of those listed in the file, and no | ||||
| "*" or "%" field is specified, no return message is sent.  All | ||||
| messages are preceded by a signature "Automated reply:".  To avoid | ||||
| loops, messages are not sent in response to messages beginning with an | ||||
| "Automated reply:" signature or sent by the same Kerberos principal as | ||||
| the user running | ||||
| .I zaway. | ||||
|  | ||||
| .SH SAMPLE FILE | ||||
| .nf | ||||
| >eichin | ||||
| >tony | ||||
| Hi there guys!  I'm in the other room right now. | ||||
| I'll be back in 5 minutes or so. | ||||
| >jruser | ||||
| Sorry, but I'm gone for the day... | ||||
| >% | ||||
| Hello...I'm not sure who you are.  I'll be back soon, | ||||
| though. | ||||
| >* | ||||
| This message comes to you compliments of zaway! | ||||
| .fi | ||||
|  | ||||
| The final "compliments" message will be included in all messages, | ||||
| whereas the "I'm not sure" message will only be included in messages that | ||||
| are not from "eichin", "tony", or "jruser". | ||||
| .SH FILES | ||||
| $HOME/.away | ||||
| .SH SEE ALSO | ||||
| zephyr(1), zwgc(1), zwrite(1), zhm(8), zephyrd(8) | ||||
| .br | ||||
| Project Athena Technical Plan Section E.4.1, `Zephyr Notification | ||||
| Service' | ||||
| .SH AUTHOR | ||||
| .PP | ||||
| Robert S. French (MIT-Project Athena) | ||||
| .SH RESTRICTIONS | ||||
| Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
| All Rights Reserved. | ||||
| .br | ||||
| .I zephyr(1) | ||||
| specifies the terms and conditions for redistribution. | ||||
							
								
								
									
										270
									
								
								clients/zaway/zaway.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										270
									
								
								clients/zaway/zaway.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,270 @@ | ||||
| /* This file is part of the Project Athena Zephyr Notification System. | ||||
|  * It contains code for the "zaway" command. | ||||
|  * | ||||
|  *	Created by:	Robert French | ||||
|  * | ||||
|  *	$Id$ | ||||
|  * | ||||
|  *	Copyright (c) 1987, 1993 by the Massachusetts Institute of Technology. | ||||
|  *	For copying and distribution information, see the file | ||||
|  *	"mit-copyright.h".  | ||||
|  */ | ||||
|  | ||||
| #include <sysdep.h> | ||||
| #include <zephyr/mit-copyright.h> | ||||
| #include <zephyr/zephyr.h> | ||||
| #include <pwd.h> | ||||
|  | ||||
| #ifndef lint | ||||
| static const char rcsid_zaway_c[] = "$Id$"; | ||||
| #endif | ||||
|  | ||||
| #define MESSAGE_CLASS "MESSAGE" | ||||
| #define DEFAULT_MSG "I'm sorry, but I am currently away from the terminal and am\nnot able to receive your message.\n" | ||||
| #define RESPONSE_OPCODE "" | ||||
|  | ||||
| static char *find_message(ZNotice_t *, FILE *); | ||||
|  | ||||
| RETSIGTYPE cleanup(int); | ||||
| u_short port; | ||||
|  | ||||
| static void | ||||
| usage(char *name) | ||||
| { | ||||
| 	printf("Usage: %s [OPTIONS] [FILE]\n" | ||||
| 	       "\n" | ||||
| 	       "  -m STRING    use STRING as the body of the reply message\n" | ||||
| 	       "  -w           watch your location and only reply if you aren't locatable\n" | ||||
| 	       "  -h           display this help and exit\n", | ||||
| 	       name); | ||||
| } | ||||
|  | ||||
| int | ||||
| main(int argc, | ||||
|      char *argv[]) | ||||
| { | ||||
| 	FILE *fp; | ||||
| 	ZNotice_t notice; | ||||
| 	ZSubscription_t sub; | ||||
| 	register int retval; | ||||
| 	struct passwd *pw; | ||||
| 	register char *ptr; | ||||
| 	char awayfile[BUFSIZ],*msg[2],*envptr; | ||||
| 	int optchar, watch_location; | ||||
| 	char *cmdline_msg; | ||||
| 	int nlocs; | ||||
| 	char *charset = NULL; | ||||
| 	unsigned short zcharset; | ||||
| 	     | ||||
| #ifdef _POSIX_VERSION | ||||
| 	struct sigaction sa; | ||||
| #endif | ||||
| 	 | ||||
| 	if ((retval = ZInitialize()) != ZERR_NONE) { | ||||
| 		com_err(argv[0],retval,"while initializing"); | ||||
| 		exit(1); | ||||
| 	} | ||||
|  | ||||
| 	port = 0; | ||||
| 	if ((retval = ZOpenPort(&port)) != ZERR_NONE) { | ||||
| 		com_err(argv[0],retval,"while opening port"); | ||||
| 		exit(1); | ||||
| 	} | ||||
|  | ||||
| 	sub.zsub_class = MESSAGE_CLASS; | ||||
| 	sub.zsub_classinst = "*"; | ||||
| 	sub.zsub_recipient = ZGetSender(); | ||||
|  | ||||
| 	cmdline_msg = 0; | ||||
| 	watch_location = 0; | ||||
| 	while ((optchar = getopt(argc, argv, "m:whx:")) != EOF) { | ||||
| 		switch (optchar) { | ||||
| 		case 'm': | ||||
| 			cmdline_msg = optarg; | ||||
| 			break; | ||||
|  | ||||
| 		case 'w': | ||||
| 			watch_location = 1; | ||||
| 			break; | ||||
|  | ||||
| 		case 'h': | ||||
| 			usage(argv[0]); | ||||
| 			return 0; | ||||
|  | ||||
| 		case 'x': | ||||
| 			charset = optarg; | ||||
| 			break; | ||||
|  | ||||
| 		case '?': | ||||
| 			fprintf(stderr, | ||||
| 				"Unrecognized option '-%c'.\n" | ||||
| 				"Try '%s -h' for more information.\n", | ||||
| 				optopt, argv[0]); | ||||
| 			return 1; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	zcharset = ZGetCharset(charset); | ||||
|  | ||||
| 	if (argc > optind) | ||||
| 		(void) strcpy(awayfile,argv[optind]); | ||||
| 	else { | ||||
| 		envptr = getenv("HOME"); | ||||
| 		if (envptr) | ||||
| 			(void) sprintf(awayfile,"%s/.away",envptr); | ||||
| 		else { | ||||
| 			if (!(pw = getpwuid((int) getuid()))) { | ||||
| 				fprintf(stderr,"Who are you?\n"); | ||||
| 				exit(1); | ||||
| 			} | ||||
| 			(void) sprintf(awayfile,"%s/.away",pw->pw_dir); | ||||
| 		}  | ||||
| 	} | ||||
|  | ||||
| 	fp = fopen(awayfile,"r"); | ||||
| 	if (!fp && argc > optind) { | ||||
| 		fprintf(stderr,"File %s not found!\n",awayfile); | ||||
| 		exit(1); | ||||
| 	}  | ||||
| #ifdef _POSIX_VERSION | ||||
| 	(void) sigemptyset(&sa.sa_mask); | ||||
| 	sa.sa_flags = 0; | ||||
| 	sa.sa_handler = cleanup; | ||||
| 	(void) sigaction(SIGINT, &sa, (struct sigaction *)0); | ||||
| 	(void) sigaction(SIGTERM, &sa, (struct sigaction *)0); | ||||
| 	(void) sigaction(SIGHUP, &sa, (struct sigaction *)0); | ||||
| #else | ||||
| 	(void) signal(SIGINT, cleanup); | ||||
| 	(void) signal(SIGTERM, cleanup); | ||||
| 	(void) signal(SIGHUP, cleanup); | ||||
| #endif | ||||
| 	if ((retval = ZSubscribeToSansDefaults(&sub,1,port)) != ZERR_NONE) { | ||||
| 		com_err(argv[0],retval,"while subscribing"); | ||||
| 		exit(1); | ||||
| 	} | ||||
|  | ||||
| 	for (;;) { | ||||
| 		if ((retval = ZReceiveNotice(¬ice, (struct sockaddr_in *)0)) != ZERR_NONE) { | ||||
| 			if (retval != ETIMEDOUT) | ||||
| 				com_err(argv[0],retval,"while receiving notice"); | ||||
| 			continue; | ||||
| 		} | ||||
|  | ||||
| 		if (strcmp(notice.z_sender,ZGetSender()) == 0 || | ||||
| 		    strcmp(notice.z_opcode,"PING") == 0 || | ||||
| 		    strcmp(notice.z_opcode,"AUTO") == 0 || | ||||
| 		    strcmp(notice.z_message,"Automated reply:") == 0) { | ||||
| 		     ZFreeNotice(¬ice); | ||||
| 		     continue; | ||||
| 		} | ||||
|  | ||||
| 		if (watch_location) { | ||||
| 			if ((retval = ZLocateUser(ZGetSender(), &nlocs, ZNOAUTH)) | ||||
| 			    != ZERR_NONE) { | ||||
| 				com_err(argv[0],retval,"while locating self"); | ||||
| 				continue; | ||||
| 			} | ||||
|  | ||||
| 			if (nlocs != 0) { | ||||
| 				/* User is logged in.  Don't send an autoreply. */ | ||||
| 				continue; | ||||
| 			} | ||||
|  | ||||
| 			ZFlushLocations(); | ||||
| 		} | ||||
|  | ||||
| 		if (cmdline_msg) { | ||||
| 		    ptr = strdup(cmdline_msg); | ||||
| 		    if (!ptr) { | ||||
| 			com_err(argv[0],ENOMEM,"while getting cmdline message"); | ||||
| 			exit(1); | ||||
| 		    } | ||||
| 		} | ||||
| 		else if (fp) { | ||||
| 			if (!(ptr = find_message(¬ice,fp))) { | ||||
| 				ZFreeNotice(¬ice); | ||||
| 				continue; | ||||
| 			} | ||||
| 		} | ||||
| 		else { | ||||
| 			ptr = malloc(sizeof(DEFAULT_MSG)+1); | ||||
| 			if (!ptr) { | ||||
| 				com_err(argv[0],ENOMEM,"while getting default message"); | ||||
| 				exit(1); | ||||
| 			} | ||||
| 			(void) strcpy(ptr,DEFAULT_MSG); | ||||
| 		} | ||||
| 		notice.z_recipient = notice.z_sender; | ||||
| 		notice.z_sender = 0; | ||||
| 		notice.z_default_format = ""; | ||||
| 		notice.z_opcode = RESPONSE_OPCODE; | ||||
| 		notice.z_charset = zcharset; | ||||
|  | ||||
| 		msg[0] = "Automated reply:"; | ||||
| 		msg[1] = ptr; | ||||
| 		 | ||||
| 		notice.z_message_len = strlen(notice.z_message)+1; | ||||
| 		if ((retval = ZSendList(¬ice,msg,2,ZNOAUTH)) != ZERR_NONE) { | ||||
| 			com_err(argv[0],retval,"while sending notice"); | ||||
| 		} | ||||
| 		free(ptr); | ||||
| 		ZFreeNotice(¬ice); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| char * | ||||
| find_message(ZNotice_t *notice, | ||||
| 	     FILE *fp) | ||||
| { | ||||
| 	char *ptr,*ptr2; | ||||
| 	char bfr[BUFSIZ],sender[BUFSIZ]; | ||||
| 	int gotone,lastwasnt; | ||||
| 	 | ||||
| 	rewind(fp); | ||||
|  | ||||
| 	(void) strcpy(sender,notice->z_sender); | ||||
| 	ptr2 = strchr(sender,'@'); | ||||
| 	if (ptr2) | ||||
| 		*ptr2 = '\0'; | ||||
| 	 | ||||
| 	ptr = 0; | ||||
| 	gotone = 0; | ||||
| 	lastwasnt = 0; | ||||
| 	 | ||||
| 	while (fgets(bfr,sizeof bfr,fp) != (char *)0) { | ||||
| 		if (*bfr == '>') { | ||||
| 			if (lastwasnt) | ||||
| 				gotone = 0; | ||||
| 			bfr[strlen(bfr)-1] = '\0'; | ||||
| 			ptr2 = strchr(bfr,'@'); | ||||
| 			if (ptr2) | ||||
| 				*ptr2 = '\0'; | ||||
| 			if (!strcmp(bfr+1,sender) || | ||||
| 			    !strcmp(bfr+1,"*") || | ||||
| 			    (!strcmp(bfr+1,"%") && !ptr)) | ||||
| 				gotone = 1; | ||||
| 			lastwasnt = 0; | ||||
| 		}  | ||||
| 		else { | ||||
| 			if (gotone) { | ||||
| 				if (!ptr) { | ||||
| 					ptr = malloc((unsigned)(strlen(bfr)+1)); | ||||
| 					*ptr = '\0'; | ||||
| 				}  | ||||
| 				else | ||||
| 					ptr = realloc(ptr,(unsigned)(strlen(bfr)+strlen(ptr)+1)); | ||||
| 				(void) strcat(ptr,bfr); | ||||
| 			} | ||||
| 			lastwasnt = 1; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return (ptr); | ||||
| } | ||||
|  | ||||
| RETSIGTYPE | ||||
| cleanup(int ignored) | ||||
| { | ||||
|     ZCancelSubscriptions(port); | ||||
|     exit(1); | ||||
| } | ||||
							
								
								
									
										71
									
								
								clients/zctl/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								clients/zctl/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| SHELL=@SHELL@ | ||||
|  | ||||
| prefix=@prefix@ | ||||
| exec_prefix=@exec_prefix@ | ||||
| datadir=@datadir@ | ||||
| sysconfdir=@sysconfdir@ | ||||
| sbindir=@sbindir@ | ||||
| lsbindir=@lsbindir@ | ||||
| datarootdir=@datarootdir@ | ||||
|  | ||||
| includedir=@includedir@ | ||||
| mandir=@mandir@ | ||||
| libdir=@libdir@ | ||||
| bindir=@bindir@ | ||||
| top_builddir=../.. | ||||
|  | ||||
| srcdir=@srcdir@ | ||||
| top_srcdir=@top_srcdir@ | ||||
| BUILDTOP=../.. | ||||
| VPATH=@srcdir@ | ||||
| LIBTOOL=@LIBTOOL@ | ||||
| CC=@CC@ | ||||
| INSTALL=@INSTALL@ | ||||
|  | ||||
| editman = sed \ | ||||
|           -e 's|@datadir[@]|${datadir}|g' \ | ||||
|           -e 's|@sysconfdir[@]|${sysconfdir}|g' \ | ||||
|           -e 's|@sbindir[@]|${sbindir}|g' \ | ||||
|           -e 's|@lsbindir[@]|${lsbindir}|g' | ||||
|  | ||||
| LIBZEPHYR=${BUILDTOP}/lib/libzephyr.la | ||||
| CPPFLAGS=@CPPFLAGS@ | ||||
| CFLAGS=@CFLAGS@ | ||||
| ALL_CFLAGS=${CFLAGS} -I${top_srcdir}/h -I${BUILDTOP}/h @X_CFLAGS@ ${CPPFLAGS} | ||||
| LDFLAGS=@LDFLAGS@ | ||||
| LIBS=${LIBZEPHYR} @SS_LIBS@ @LIBS@ -lcom_err | ||||
|  | ||||
| SS_OBJS=zctl_cmds.o | ||||
| OBJS=	zctl.o @SS_OBJS@ | ||||
|  | ||||
| all: zctl zctl.1 | ||||
|  | ||||
| zctl: ${OBJS} ${LIBZEPHYR} | ||||
| 	${LIBTOOL} --mode=link ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LIBS} | ||||
|  | ||||
| zctl_cmds.c: zctl_cmds.ct | ||||
| 	mk_cmds ${srcdir}/zctl_cmds.ct | ||||
|  | ||||
| .c.o: | ||||
| 	${CC} -c ${ALL_CFLAGS} $< | ||||
|  | ||||
| zctl.1: ${srcdir}/zctl.1.in Makefile | ||||
| 	${editman} ${srcdir}/$@.in > $@.tmp | ||||
| 	mv $@.tmp $@ | ||||
|  | ||||
| check: | ||||
|  | ||||
| install: zctl zctl.1 | ||||
| 	${LIBTOOL} --mode=install ${INSTALL} -m 755 zctl ${DESTDIR}${bindir} | ||||
| 	${INSTALL} -m 644 zctl.1 ${DESTDIR}${mandir}/man1 | ||||
|  | ||||
| clean: | ||||
| 	${LIBTOOL} --mode=clean rm -f zctl | ||||
| 	rm -f ${OBJS} zctl_cmds.c | ||||
| 	rm -f zctl.1 | ||||
|  | ||||
| ${OBJS}: ${top_srcdir}/h/sysdep.h ${BUILDTOP}/h/config.h | ||||
| ${OBJS}: ${BUILDTOP}/h/zephyr/zephyr.h ${BUILDTOP}/h/zephyr/zephyr_err.h | ||||
|  | ||||
| .PHONY: all check install clean | ||||
|  | ||||
							
								
								
									
										319
									
								
								clients/zctl/zctl.1.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										319
									
								
								clients/zctl/zctl.1.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,319 @@ | ||||
| .\"	$Id$ | ||||
| .\" | ||||
| .\" Copyright 1987,1988 by the Massachusetts Institute of Technology | ||||
| .\" All rights reserved.  The file /usr/include/zephyr/mit-copyright.h | ||||
| .\" specifies the terms and conditions for redistribution. | ||||
| .\" | ||||
| .\" | ||||
| .TH ZCTL 1 "July 1, 1988" "MIT Project Athena" | ||||
| .ds ]W MIT Project Athena | ||||
| .SH NAME | ||||
| zctl \- zephyr control program | ||||
| .SH SYNOPSIS | ||||
| .B zctl | ||||
| [ | ||||
| .I options | ||||
| ] | ||||
| .SH DESCRIPTION | ||||
| .I Zctl | ||||
| is a general purpose control program for the | ||||
| .I Zephyr(1) | ||||
| Notification Service.  It allows the user to subscribe to specific | ||||
| notice types, to save the subscriptions in a file (default | ||||
| $HOME/.zephyr.subs), to change his location information, and to send | ||||
| control messages to the HostManager, | ||||
| .I zhm(8), | ||||
| and the WindowGram client, | ||||
| .I zwgc(1). | ||||
| .PP | ||||
| The commands may be typed on the command line, or may be entered | ||||
| interactively by just typing | ||||
| .I zctl | ||||
| and then typing commands to the prompt. | ||||
| .br | ||||
| .B NOTE: | ||||
| For all commands accepting an optional \fIrecipient\fR argument, the | ||||
| \fIrecipient\fR defaults to your Kerberos principal.  You may also | ||||
| subscribe to recipient ``\fI*\fR''.  If you specify a recipient, it is | ||||
| silently converted to ``\fI*\fR''. | ||||
| .br | ||||
| The commands are as follows: | ||||
| .TP 15 | ||||
| .B add \fIclass instance\fR [ \fIrecipient\fR ] | ||||
| Subscribe to \fIclass, instance, recipient\fR, and add this triplet to | ||||
| the subscriptions file. | ||||
| .TP | ||||
| .B add_unsubscription \fIclass instance\fR [ \fIrecipient\fR ] | ||||
| Unsubscribe to \fIclass, instance, recipient\fR, and add this triplet | ||||
| to the subscriptions file as an un-subscription. | ||||
| For an explanation of un-subscriptions, see below. | ||||
| .TP | ||||
| .B cancel | ||||
| Cancel all subscriptions. | ||||
| .TP | ||||
| .B defaults | ||||
| Retrieve the default subscription list from the Zephyr server. | ||||
| .TP | ||||
| .B delete \fIclass instance\fR [ \fIrecipient\fR ] | ||||
| Unsubscribe to \fIclass, instance, recipient\fR, and remove this triplet | ||||
| from the subscriptions file. | ||||
| .TP | ||||
| .B delete_unsubscription \fIclass instance\fR [ \fIrecipient\fR ] | ||||
| Unsubscribe to \fIclass, instance, recipient\fR, and remove this triplet | ||||
| from the subscriptions file as an un-subscription. | ||||
| .TP | ||||
| .B file \fR[ \fIfile\fR ] | ||||
| Set default subscriptions file to \fIfile\fR.  If \fIfile\fR isn't specified, | ||||
| show what the current subscriptions file is. | ||||
| .TP | ||||
| .B flush_locs \fR[ \fIuser\fR ] | ||||
| Tell the Zephyr servers to flush all location information associated with | ||||
| \fIuser\fR, or with the user running the command if none is given.  This | ||||
| should only be used to remove any incorrect data that may have been left | ||||
| after a system crash.  Note that only Operations staff may flush location | ||||
| information associated with another user. | ||||
| .TP | ||||
| .B flush_subs \fR[ \fIrecipient\fR ] | ||||
| Tell the Zephyr servers to flush all of \fIrecipient\fR's subscriptions, | ||||
| This differs from the cancel command in that it affects subscriptions for | ||||
| all of \fIrecipient\fR's clients.  Note that only Operations staff may flush | ||||
| the subscriptions of another user. | ||||
| .TP | ||||
| .B hide | ||||
| Hide your location as maintained by the Zephyr server.  This does not | ||||
| affect the value of the exposure variable (see below, under | ||||
| .B set). | ||||
| .TP | ||||
| .B hm_flush | ||||
| Tell the HostManager, | ||||
| .I zhm(8), | ||||
| to ask the server to flush all state associated with the current host. | ||||
| .TP | ||||
| .B list \fR[ \fIfile\fR ] | ||||
| List contents of current subscriptions file or | ||||
| .I file. | ||||
| Any macros in the file (see below) are displayed verbatim and not expanded. | ||||
| .TP | ||||
| .B list_requests | ||||
| List all available commands.  May be abbreviated by '?'. | ||||
| .TP | ||||
| .B load \fR[ \fIfile\fR ] | ||||
| Subscribe to all subscription triplets and unsubscribe to all | ||||
| un-subscription triplets in current subscriptions file or \fIfile\fR. | ||||
| .TP | ||||
| .B new_server | ||||
| Tell the HostManager, | ||||
| .I zhm(8), | ||||
| to find a new Zephyr server. | ||||
| .TP | ||||
| .B quit | ||||
| Exit from \fIzctl. | ||||
| .TP | ||||
| .B retrieve | ||||
| Retrieve all current subscriptions from the Zephyr server.  These include | ||||
| subscriptions that might have been made by other programs, such as | ||||
| .I znol(1). | ||||
| .TP | ||||
| .B save \fR[ \fIfile\fR ] | ||||
| Save all current subscriptions (as returned by the Zephyr server) | ||||
| into current subscriptions file or \fIfile\fR.  The  | ||||
| file will be replaced. | ||||
| .TP | ||||
| .B set \fIvar\fR [ \fIvalue\fR ] | ||||
| Set the value of Zephyr variable \fIvar\fR to \fIvalue\fR, or null if | ||||
| no \fIvalue\fR is specified.  The variable \fBexposure\fR has special | ||||
| significance, and can only be set to the values none, opstaff, realm-visible, | ||||
| realm-announced, net-visible, and net-announced.  Setting this variable | ||||
| immediately updates the information in the Zephyr servers (see below for | ||||
| an explanation of the exposure levels).  In addition, | ||||
| setting this variable to none automatically performs the equivalent of a  | ||||
| .B wg_shutdown | ||||
| command, and setting it to one of the other values automatically | ||||
| performs the equivalent of a  | ||||
| .B wg_startup | ||||
| command. | ||||
| .br | ||||
| The variable \fBresolved_addresses\fR determines whether zwgc will, | ||||
| for an IP address indicating the origin of a message, attempt to look | ||||
| up the hostname corresponding to that IP address. The value none | ||||
| indicates that hostnames will never be found, and that the zwgc | ||||
| fromhost variable will thus always contain an IP address (in | ||||
| dotted-decimal form). The value all indicates that there will always | ||||
| be an attempt to look up a hostname. Note that in this case, if you | ||||
| have any subscriptions with recipient ``\fI*\fR'', these subscriptions | ||||
| may be revealed to other Zephyr users who operate their own DNS name | ||||
| servers. Any other value is interpreted as a regular expression; | ||||
| hostname lookup attempts will occur only if the IP address matches | ||||
| this regular expression. | ||||
| .br | ||||
| Any variable settings you make will be stored in \fI$HOME/.zephyr.vars\fR | ||||
| .TP | ||||
| .B show \fIvar\fR [ \fIvar\fR \ ... ] | ||||
| Show the value of the specified Zephyr variables.  If a variable is not | ||||
| defined in the user's own variables file, the system variables file | ||||
| (\fI@sysconfdir@/zephyr/zephyr.vars\fR) is searched for a default value. | ||||
| .TP | ||||
| .B subscribe \fIclass instance\fR [ \fIrecipient\fR ] | ||||
| Subscribe to \fIclass, instance, recipient\fR, but don't add this triplet to | ||||
| the subscriptions file. | ||||
| .TP | ||||
| .B unhide | ||||
| Make your location as maintained by the Zephyr server visible.  This does not | ||||
| affect the value of the exposure variable. | ||||
| .TP | ||||
| .B unload \fR[ \fIfile\fR ] | ||||
| Unsubscribe to all subscription triplets in current subscriptions file | ||||
| or \fIfile\fR.  Un-subscriptions in the file are ignored. | ||||
| .TP | ||||
| .B unset \fIvar\fR [ \fIvar\fR \ ... ] | ||||
| Delete the definitions of the specified Zephyr variables. | ||||
| .TP | ||||
| .B unsubscribe \fIclass instance\fR [ \fIrecipient\fR ] | ||||
| Unsubscribe to \fIclass, instance, recipient\fR, but don't remove this triplet | ||||
| from the subscriptions file. | ||||
| .TP | ||||
| .B wg_exit | ||||
| Tell the WindowGram client, | ||||
| .I zwgc(1), | ||||
| to exit. | ||||
| .TP | ||||
| .B wg_read | ||||
| Tell the WindowGram client, | ||||
| .I zwgc(1), | ||||
| to reread its description file. | ||||
| .TP | ||||
| .B wg_shutdown | ||||
| Tell the WindowGram client to shutdown; this causes it to ignore all | ||||
| notices until a wg_startup command is issued. | ||||
| .TP | ||||
| .B wg_startup | ||||
| Tell the WindowGram client to start accepting notices again; useful | ||||
| after a wg_shutdown command has been issued. | ||||
| .SH MACROS and SUBSCRIPTION FILES | ||||
| There are three macros, | ||||
| .I %host%, %canon%, \fRand\fI %me%.  %host% | ||||
| is converted to the current hostname, \fI%canon%\fR is converted to the | ||||
| official hostname as returned by  | ||||
| .I gethostbyname(3), | ||||
| and \fI%me%\fR is converted to your Kerberos principal.  These macros can be | ||||
| used in your \fI$HOME/.zephyr.subs\fR file or as arguments to commands | ||||
| to specify the | ||||
| .I class | ||||
| or  | ||||
| .I instance | ||||
| fields.  A sample \fI$HOME/.zephyr.subs\fR file might contain the following: | ||||
| .PP | ||||
| .nf | ||||
| 	message,urgent,%me% | ||||
| 	syslog,%host%,* | ||||
| 	mail,pop,%me% | ||||
| .fi | ||||
| .PP | ||||
| .I Zctl | ||||
| reads the environment variable \fBWGFILE\fR, to find the name of the | ||||
| file where the windowgram port resides.  If \fBWGFILE\fR is not set, | ||||
| the file name defaults to /tmp/wg.\fIuid\fR, where \fIuid\fR is the | ||||
| user's UNIX uid. | ||||
| .SH UN-SUBSCRIPTIONS | ||||
| The zephyr server, | ||||
| .I zephyrd(8), | ||||
| maintains default subscriptions which are automatically added to all | ||||
| users' subscriptions at the time of their first subscription during a | ||||
| login session.  If you wish to automatically remove some of these | ||||
| default subscriptions, you use  | ||||
| .B un-subscriptions. | ||||
| When you  | ||||
| .B load | ||||
| a subscription file containing | ||||
| un-subscriptions, the un-subscriptions are automatically sent to the | ||||
| server as if you had used the | ||||
| .B unsubscribe | ||||
| command. | ||||
| .SH EXPOSURE LEVELS | ||||
| The different exposure levels affect the operation of zephyr and its | ||||
| interaction with the user, as follows: | ||||
| .TP 10 | ||||
| .I none | ||||
| This completely disables Zephyr for the user. The user is not | ||||
| registered with Zephyr.  No user location information is | ||||
| retained by Zephyr.  No login or logout announcements will be | ||||
| sent.  No subscriptions will be entered for the user, and no notices | ||||
| will be displayed by  | ||||
| .I zwgc(1). | ||||
| .TP | ||||
| .I opstaff | ||||
| The user is registered with Zephyr.  No login or logout | ||||
| announcements will be sent, and location information will only be | ||||
| visible to Operations staff.  Default subscriptions and any additional | ||||
| personal subscriptions will be entered for the user. | ||||
| .TP | ||||
| .I realm-visible | ||||
| The user is registered with Zephyr.  User location information is retained by | ||||
| Zephyr and made available only to users within the user's | ||||
| Kerberos realm.  No login or logout announcements will be sent.  This | ||||
| is the system default.  Default subscriptions and any additional | ||||
| personal subscriptions will be entered for the user. | ||||
| .TP | ||||
| .I realm-announced | ||||
| The user is registered with Zephyr.  User location information is retained by | ||||
| Zephyr and made available only to users authenticated within the user's | ||||
| Kerberos realm.  Login and logout announcements will be sent, but only to | ||||
| users within the user's Kerberos realm who have explicitly requested | ||||
| such via subscriptions.  Default subscriptions and any additional | ||||
| personal subscriptions will be entered for the user. | ||||
| .TP | ||||
| .I net-visible | ||||
| The user is registered with Zephyr.  User location information is | ||||
| retained by Zephyr and made available to any authenticated user who | ||||
| requests such. Login and logout announcements will be sent only to users | ||||
| within the user's Kerberos realm who have explicitly requested such via | ||||
| subscriptions.  Default subscriptions and any additional personal | ||||
| subscriptions will be entered for the user. | ||||
| .TP | ||||
| .I net-announced | ||||
| The user is registered with Zephyr. User location information is retained by | ||||
| Zephyr and made available to any authenticated user who requests such.  Login | ||||
| and logout announcements will be sent to any user has requested such. | ||||
| Default subscriptions and any additional personal | ||||
| subscriptions will be entered for the user. | ||||
| .SH EXAMPLES | ||||
| .TP 25 | ||||
| .B zctl | ||||
| Runs \fIzctl\fR in interactive mode. | ||||
| .TP | ||||
| .B zctl load | ||||
| Load subscriptions and un-subscriptions from \fI$HOME/.zephyr.subs\fR file. | ||||
| .TP | ||||
| .B zctl sub message personal | ||||
| Subscribe to personal messages, but don't add this to the | ||||
| subscriptions file. | ||||
| .TP | ||||
| .B zctl save | ||||
| Save all current subscriptions to the default subscriptions file. | ||||
| .TP | ||||
| .B zctl set exposure none | ||||
| Set your exposure level to `none', effectively turning off Zephyr. | ||||
| .SH SEE ALSO | ||||
| zephyr(1), zwgc(1), zhm(8), zephyrd(8) | ||||
| gethostbyname(3) | ||||
| .br | ||||
| Project Athena Technical Plan Section E.4.1, `Zephyr Notification | ||||
| Service' | ||||
| .SH FILES | ||||
| /tmp/wg.* | ||||
| .br | ||||
| $HOME/.zephyr.subs | ||||
| .br | ||||
| $ZEPHYR_VARS or $HOME/.zephyr.vars | ||||
| .br | ||||
| @sysconfdir@/zephyr/zephyr.vars | ||||
| .SH AUTHOR | ||||
| .PP | ||||
| Robert S. French (MIT-Project Athena) | ||||
| .sp | ||||
| .SH RESTRICTIONS | ||||
| Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
| All Rights Reserved. | ||||
| .br | ||||
| .I zephyr(1) | ||||
| specifies the terms and conditions for redistribution. | ||||
							
								
								
									
										1391
									
								
								clients/zctl/zctl.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1391
									
								
								clients/zctl/zctl.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										101
									
								
								clients/zctl/zctl_cmds.ct
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								clients/zctl/zctl_cmds.ct
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| #	$Id$ | ||||
| # | ||||
| 	command_table	zctl_cmds; | ||||
|  | ||||
| 	request		set_file, "Set default subscriptions file.", | ||||
| 			file; | ||||
|  | ||||
| 	request		cancel_subs, "Cancel all subscriptions.", | ||||
| 			cancel; | ||||
|  | ||||
| 	request		load_subs, "Subscribe to a subscriptions file.", | ||||
| 			load, ld; | ||||
|  | ||||
| 	request		load_subs, "Unsubscribe to a subscriptions file.", | ||||
| 			unload, unld; | ||||
|  | ||||
| 	request		load_subs, "List a subscriptions file.", | ||||
| 			list, ls; | ||||
|  | ||||
| 	request		subscribe, "Subscribe to a class/class instance.", | ||||
| 			subscribe, sub; | ||||
|  | ||||
| 	request		subscribe, "Unsubscribe to a class/class instance.", | ||||
| 			unsubscribe, unsub; | ||||
|  | ||||
| 	request		sub_file, "Subscribe and add to subscriptions file.", | ||||
| 			add; | ||||
|  | ||||
| 	request		sub_file, "Unsubscribe and add to subscriptions file\n                         as un-subscription.", | ||||
| 			add_unsubscription, add_un; | ||||
|  | ||||
| 	request		sub_file, "Unsubscribe and delete subscription from\n                         subscriptions file.", | ||||
| 			delete, del, dl; | ||||
| 	request		sub_file, "Delete un-subscription from subscriptions file.", | ||||
| 			delete_unsubscription, del_un; | ||||
|  | ||||
| 	request		current, "Retrieve current subscriptions.", | ||||
| 			retrieve, ret; | ||||
|  | ||||
| 	request		current, "Retrieve system-wide default subscriptions.", | ||||
| 			defaults, defs; | ||||
|  | ||||
| 	request		current, "Save current subscriptions (replacing existing file).", | ||||
| 			save; | ||||
|  | ||||
| 	request		show_var, "Show a variable's value.", | ||||
| 			show; | ||||
|  | ||||
| 	request		set_var, "Set a variable's value.", | ||||
| 			set; | ||||
|  | ||||
| 	request		unset_var, "Delete a variable's value.", | ||||
| 			unset; | ||||
|  | ||||
| 	request		wgc_control, "Get the WindowGram to reread its description file.", | ||||
| 			wg_read; | ||||
|  | ||||
| 	request		wgc_control, "Tell the WindowGram not to react to incoming notices.", | ||||
| 			wg_shutdown; | ||||
|  | ||||
| 	request		wgc_control, "Tell the WindowGram to react to incoming notices.", | ||||
| 			wg_startup; | ||||
|  | ||||
| 	request		wgc_control, "Tell the WindowGram to exit completely.", | ||||
| 			wg_exit; | ||||
|  | ||||
| 	request		hm_control, "Tell the server to flush information about this host.", | ||||
| 			hm_flush; | ||||
|  | ||||
| 	request		hm_control, "Tell the HostManager to find a new server.", | ||||
| 			new_server; | ||||
|  | ||||
| 	request		flush_locations, "Flush all location information.", | ||||
| 			flush_locs; | ||||
|  | ||||
| 	request		flush_subscr, "Flush all subscription information.", | ||||
| 			flush_subs; | ||||
|  | ||||
| 	request		do_hide, "Hide your location.", | ||||
| 			hide; | ||||
|  | ||||
| 	request		do_hide, "Show (un-hide) your location.", | ||||
| 			unhide; | ||||
|  | ||||
| 	request		ss_list_requests, "List available commands.", | ||||
| 			list_requests, lr, "?"; | ||||
|  | ||||
| 	request		ss_quit, "Quit.", | ||||
| 			quit, exit, q; | ||||
| #ifdef CMU_ZCTL_PUNT | ||||
| 	request		do_punt, "Ignore specified messages.", | ||||
| 			punt; | ||||
|  | ||||
| 	request		do_punt, "Stop ignoring specified messages.", | ||||
| 			unpunt; | ||||
|  | ||||
| 	request		list_punts, "List current messages to ignore.", | ||||
| 			list_punts, lp; | ||||
|  | ||||
| #endif | ||||
| 	end; | ||||
							
								
								
									
										56
									
								
								clients/zleave/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								clients/zleave/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| SHELL=@SHELL@ | ||||
|  | ||||
| prefix=@prefix@ | ||||
| exec_prefix=@exec_prefix@ | ||||
| datadir=@datadir@ | ||||
| sysconfdir=@sysconfdir@ | ||||
| sbindir=@sbindir@ | ||||
| lsbindir=@lsbindir@ | ||||
| datarootdir=@datarootdir@ | ||||
|  | ||||
| includedir=@includedir@ | ||||
| mandir=@mandir@ | ||||
| libdir=@libdir@ | ||||
| bindir=@bindir@ | ||||
| top_builddir=../.. | ||||
|  | ||||
| srcdir=@srcdir@ | ||||
| top_srcdir=@top_srcdir@ | ||||
| BUILDTOP=../.. | ||||
| VPATH=@srcdir@ | ||||
| LIBTOOL=@LIBTOOL@ | ||||
| CC=@CC@ | ||||
| INSTALL=@INSTALL@ | ||||
|  | ||||
| LIBZEPHYR=${BUILDTOP}/lib/libzephyr.la | ||||
| CPPFLAGS=@CPPFLAGS@ | ||||
| CFLAGS=@CFLAGS@ | ||||
| ALL_CFLAGS=${CFLAGS} -I${top_srcdir}/h -I${BUILDTOP}/h ${CPPFLAGS} | ||||
| LDFLAGS=@LDFLAGS@ | ||||
| LIBS=${LIBZEPHYR} @LIBS@ -lcom_err | ||||
|  | ||||
| OBJS=	zleave.o | ||||
|  | ||||
| all: zleave | ||||
|  | ||||
| zleave: ${OBJS} ${LIBZEPHYR} | ||||
| 	${LIBTOOL} --mode=link ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LIBS} | ||||
|  | ||||
| .c.o: | ||||
| 	${CC} -c ${ALL_CFLAGS} $< | ||||
|  | ||||
| check: | ||||
|  | ||||
| install: zleave | ||||
| 	${LIBTOOL} --mode=install ${INSTALL} -m 755 zleave ${DESTDIR}${bindir} | ||||
| 	${INSTALL} -m 644 ${srcdir}/zleave.1 ${DESTDIR}${mandir}/man1 | ||||
|  | ||||
| clean: | ||||
| 	${LIBTOOL} --mode=clean rm -f zleave | ||||
| 	rm -f ${OBJS} | ||||
|  | ||||
| ${OBJS}: ${top_srcdir}/h/sysdep.h ${BUILDTOP}/h/config.h | ||||
| ${OBJS}: ${BUILDTOP}/h/zephyr/zephyr.h ${BUILDTOP}/h/zephyr/zephyr_err.h | ||||
|  | ||||
| .PHONY: all check install clean | ||||
|  | ||||
							
								
								
									
										107
									
								
								clients/zleave/zleave.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								clients/zleave/zleave.1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| .\"	$Id$ | ||||
| .\" | ||||
| .\" Copyright (c) 1980 Regents of the University of California. | ||||
| .\" All rights reserved.  The Berkeley software License Agreement | ||||
| .\" specifies the terms and conditions for redistribution. | ||||
| .\" | ||||
| .\" | ||||
| .TH ZLEAVE 1 "July 1, 1988" "MIT Project Athena" | ||||
| .ds ]W MIT Project Athena | ||||
| .SH NAME | ||||
| zleave \- notify you via Zephyr when you have to leave  | ||||
| .SH SYNOPSIS | ||||
| .B zleave | ||||
| [  | ||||
| .RI [+] hhmm | ||||
| [ | ||||
| .I -m "Reminder Message" | ||||
| ] ] | ||||
| .br | ||||
| .B zleave  | ||||
| .I can\fR[\fIcel\fR] | ||||
| .SH DESCRIPTION | ||||
| .I Zleave | ||||
| waits until the specified time, then reminds you that you | ||||
| have to leave, using the \fIZephyr(1)\fR Notification Service. | ||||
| You are reminded 5 minutes and 1 minute before the actual | ||||
| time, at the time, and every minute thereafter. | ||||
| When you log off, | ||||
| .I zleave | ||||
| exits just before it would have sent the next message. | ||||
| .PP | ||||
| The time of day is in the form hhmm where hh is a time in | ||||
| hours (on a 12 or 24 hour clock). | ||||
| All times are converted to a 12 hour clock, and assumed to | ||||
| be in the next 12 hours. | ||||
| .PP | ||||
| If the time is preceded by `+', the alarm will go off in hours and minutes | ||||
| from the current time. | ||||
| .PP | ||||
| If no argument is given, | ||||
| .I zleave | ||||
| prompts with "When do you | ||||
| have to leave?". A reply of newline causes | ||||
| .I zleave | ||||
| to exit, | ||||
| otherwise the reply is assumed to be a time. | ||||
| This form is suitable for inclusion in a | ||||
| .I .login | ||||
| or | ||||
| .I .profile. | ||||
| .PP | ||||
| The | ||||
| .I cancel | ||||
| option cancels the currently running \fIzleave\fR.  If another | ||||
| .I zleave | ||||
| is running, it is automatically killed when a new time to leave is | ||||
| set.  The process id is stored in the file /tmp/zleave.\fIuid\fR, where | ||||
| \fIuid\fR is the user's UNIX uid. | ||||
| .PP | ||||
| If the | ||||
| .I -m | ||||
| argument is specified, the next argument | ||||
| is appended to the standard message  | ||||
| (a sentence describing how much time remains until the appointed hour) | ||||
| sent at appropriate times. | ||||
| If you want to append a multiple-word message, you normally must quote it with | ||||
| double quotes (") (This is necessary for users of | ||||
| .IR csh (1) | ||||
| and | ||||
| .IR sh (1).) | ||||
| .PP | ||||
| .I Zleave | ||||
| automatically subscribes you to Zephyr class "MESSAGE", | ||||
| instance "LEAVE".  You do not have to add anything to your | ||||
| default subscriptions file (see  | ||||
| .IR zctl (1)). | ||||
| The reminder message is displayed by the WindowGram client (usually | ||||
| .IR zwgc (1)). | ||||
| .PP | ||||
| If Zephyr is unavailable, | ||||
| .I zleave  | ||||
| acts essentially like  | ||||
| .IR leave (1). | ||||
| .PP | ||||
| Zleave ignores SIGINT, SIGQUIT, and SIGTERM. | ||||
| To get rid of it you should either log off or use the | ||||
| .I cancel | ||||
| option. | ||||
| .SH FILES | ||||
| /tmp/zleave.\fIuid\fR | ||||
| /tmp/wg.* | ||||
| .SH SEE ALSO | ||||
| calendar(1), zephyr(1), leave(1), zwgc(1), zctl(1), csh(1), sh(1) | ||||
| .br | ||||
| Project Athena Technical Plan Section E.4.1, `Zephyr Notification | ||||
| Service' | ||||
| .SH RESTRICTIONS | ||||
| Copyright (c) 1980,  Regents of the University of California. | ||||
| All rights reserved. | ||||
| Redistribution and use in source and binary forms are permitted | ||||
| provided that this notice is preserved and that due credit is given | ||||
| to the University of California at Berkeley. The name of the University | ||||
| may not be used to endorse or promote products derived from this | ||||
| software without specific written prior permission. This software | ||||
| is provided ``as is'' without express or implied warranty. | ||||
| .sp | ||||
| Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
							
								
								
									
										424
									
								
								clients/zleave/zleave.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										424
									
								
								clients/zleave/zleave.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,424 @@ | ||||
| /* This file is part of the Project Athena Zephyr Notification System. | ||||
|  * It contains code for the "zleave" command. | ||||
|  * | ||||
|  *      Created by:     David Jedlinsky | ||||
|  * | ||||
|  *      $Id$ | ||||
|  * | ||||
|  *      Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
|  *      For copying and distribution information, see the file | ||||
|  *      "mit-copyright.h".  | ||||
|  */ | ||||
|  | ||||
| #include <sysdep.h> | ||||
| #include <zephyr/mit-copyright.h> | ||||
| #include <zephyr/zephyr.h> | ||||
|  | ||||
| #ifndef lint | ||||
| static const char rcsid_zlocate_c[] = "$Id$"; | ||||
| #endif /* lint */ | ||||
|  | ||||
| /* | ||||
|  * Copyright (c) 1980 Regents of the University of California. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms are permitted | ||||
|  * provided that this notice is preserved and that due credit is given | ||||
|  * to the University of California at Berkeley. The name of the University | ||||
|  * may not be used to endorse or promote products derived from this | ||||
|  * software without specific written prior permission. This software | ||||
|  * is provided ``as is'' without express or implied warranty. | ||||
|  */ | ||||
|  | ||||
| #ifndef lint | ||||
| char copyright[] = | ||||
| "@(#) Copyright (c) 1980 Regents of the University of California.\n\ | ||||
|  All rights reserved.\n"; | ||||
| #endif /* not lint */ | ||||
|  | ||||
| #define MESSAGE_CLASS "MESSAGE" | ||||
| #define INSTANCE "LEAVE" | ||||
| /* | ||||
|  * zleave [[+]hhmm [ -m "Reminder Message" ]] | ||||
|  *  or | ||||
|  * zleave can[cel] | ||||
|  * | ||||
|  * Reminds you when you have to leave. | ||||
|  * Leave prompts for input and goes away if you hit return. | ||||
|  * Messages are sent through Zephyr.  Subscriptions are handled automagically. | ||||
|  * It nags you like a mother hen. | ||||
|  */ | ||||
| char origlogin[20]; | ||||
| char tempfile[40]; | ||||
| char *whenleave; | ||||
| char *reminder_message = NULL; | ||||
| char buff[100]; | ||||
| int use_zephyr=1, oldpid; | ||||
|  | ||||
| void usage(void); | ||||
| void doalarm(long); | ||||
| void bother(long, char *); | ||||
| void delay(long); | ||||
| int gethm(char *, int *, int*); | ||||
|  | ||||
| int | ||||
| main(int argc, | ||||
|      char **argv) | ||||
| { | ||||
| 	time_t now; | ||||
| 	long when, diff; | ||||
| 	int hours, minutes; | ||||
| 	char *cp; | ||||
| 	FILE *fp; | ||||
| 	struct tm *nv; | ||||
| 	int port, c; | ||||
| 	ZSubscription_t sub; | ||||
| 	 | ||||
| 	if (ZInitialize() != ZERR_NONE) { | ||||
| 	      fprintf(stderr,"No Zephyr! Will write directly to terminal.\n"); | ||||
| 	      use_zephyr = 0; | ||||
| 	} | ||||
| 	(void) sprintf(tempfile, "/tmp/zleave.%d", (int) getuid()); | ||||
|  | ||||
| 	if (use_zephyr) { | ||||
| 		if ((port = ZGetWGPort()) == -1) { | ||||
| 			fprintf(stderr, | ||||
| 				"Can't find WindowGram subscription port.\n"); | ||||
| 			fprintf(stderr,"Will write directly to terminal.\n"); | ||||
| 			use_zephyr = 0; | ||||
| 		} else { | ||||
| 			sub.zsub_class = MESSAGE_CLASS; | ||||
| 			sub.zsub_classinst = INSTANCE; | ||||
| 			sub.zsub_recipient = ZGetSender(); | ||||
| 			if (ZSubscribeToSansDefaults(&sub,1,(u_short)port) | ||||
| 			    != ZERR_NONE) { | ||||
| 				fprintf(stderr, | ||||
| 					"Subscription error!  Writing to your terminal...\n"); | ||||
| 				use_zephyr = 0; | ||||
| 			}  | ||||
| 		} | ||||
| 	}	 | ||||
| 	if (!use_zephyr) { | ||||
| 	    if ((cp = getlogin()) == NULL) { | ||||
| 		fputs("leave: You are not logged in.\n", stderr); | ||||
| 		exit(1); | ||||
| 	    } | ||||
| 	    (void) strcpy(origlogin, cp); | ||||
| 	} | ||||
|  | ||||
| 	c = 1; | ||||
| 	while ((c<argc) && (! reminder_message)) | ||||
| 	    if (!strcmp(argv[c++],"-m")) { | ||||
| 		if (argv[c]) | ||||
| 		    reminder_message = argv[c]; | ||||
| 		else | ||||
| 		    usage(); | ||||
| 	    } | ||||
|  | ||||
| 	if (!reminder_message) | ||||
| 	    reminder_message = ""; | ||||
|  | ||||
| 	if (argc < 2) { | ||||
| 		printf("When do you have to leave? "); | ||||
| 		(void) fflush(stdout); | ||||
| 		buff[read(0, buff, sizeof buff)] = 0; | ||||
| 		cp = buff; | ||||
| 	} else | ||||
| 		cp = argv[1]; | ||||
| 	if (*cp == '\n') | ||||
| 		exit(0); | ||||
| 	if (*cp == '+') { | ||||
| 		cp++; | ||||
| 		if (!gethm(cp, &hours, &minutes)) | ||||
| 			usage(); | ||||
| 		if (minutes < 0 || minutes > 59) | ||||
| 			usage(); | ||||
| 		diff = 60*hours+minutes; | ||||
| 		doalarm(diff); | ||||
| 		exit(0); | ||||
| 	} | ||||
| 	if (!strcmp(cp, "cancel") || !strcmp(cp, "can")) { | ||||
| 	      if (!(fp = fopen(tempfile,"r"))) { | ||||
| 		    printf("No zleave is currently running.\n"); | ||||
| 		    exit(0); | ||||
| 	      } | ||||
| 	      if (fscanf(fp, "%d", &oldpid) != 1) { | ||||
| 		      printf("The zleave pid file is corrupted.\n"); | ||||
| 		      (void) fclose(fp); | ||||
| 		      exit(0); | ||||
| 	      } | ||||
| 	      (void) fclose(fp); | ||||
| 	      if (kill(oldpid,9)) | ||||
| 		    printf("No zleave is currently running.\n"); | ||||
| 	      (void) unlink(tempfile); | ||||
| 	      exit(0); | ||||
| 	} | ||||
| 	if (!gethm(cp, &hours, &minutes)) | ||||
| 		usage(); | ||||
| 	if (hours > 12) | ||||
| 		hours -= 12; | ||||
| 	if (hours == 12) | ||||
| 		hours = 0; | ||||
|  | ||||
| 	if (hours < 0 || hours > 12 || minutes < 0 || minutes > 59) | ||||
| 		usage(); | ||||
|  | ||||
| 	(void) time(&now); | ||||
| 	nv = localtime(&now); | ||||
| 	when = 60*hours+minutes; | ||||
| 	if (nv->tm_hour > 12) | ||||
| 		nv->tm_hour -= 12;	/* do am/pm bit */ | ||||
| 	now = 60 * nv->tm_hour + nv->tm_min; | ||||
| 	diff = when - now; | ||||
| 	while (diff < 0) | ||||
| 		diff += 12*60; | ||||
| 	if (diff > 11*60) { | ||||
| 		fprintf(stderr, "That time has already passed!\n"); | ||||
| 		exit(1); | ||||
| 	} | ||||
|  | ||||
| 	doalarm(diff); | ||||
| 	exit(0); | ||||
| } | ||||
|  | ||||
| void | ||||
| usage(void) | ||||
| { | ||||
| 	fprintf(stderr, "usage: zleave [[+]hhmm [-m \"Reminder Message\"]]\n\ | ||||
| \tor: zleave can[cel]\n"); | ||||
| 	exit(1); | ||||
| } | ||||
|  | ||||
| int | ||||
| gethm(char *cp, | ||||
|       int *hp, | ||||
|       int *mp) | ||||
| { | ||||
| 	char c; | ||||
| 	int tod; | ||||
|  | ||||
| 	tod = 0; | ||||
| 	while ((c = *cp++) != '\0') { | ||||
| 		if (!isdigit(c)) | ||||
| 			return(0); | ||||
| 		tod = tod * 10 + (c - '0'); | ||||
| 	} | ||||
| 	*hp = tod / 100; | ||||
| 	*mp = tod % 100; | ||||
| 	return(1); | ||||
| } | ||||
|  | ||||
| void | ||||
| doalarm(long nmins) | ||||
| { | ||||
| 	time_t daytime; | ||||
| 	char *msg1, *msg2, *msg3, *msg4; | ||||
| 	register int i; | ||||
| 	long slp1, slp2, slp3, slp4; | ||||
| 	long seconds, gseconds; | ||||
| 	FILE *fp; | ||||
| #ifdef _POSIX_VERSION | ||||
| 	struct sigaction sa; | ||||
| #endif | ||||
|  | ||||
| 	seconds = 60 * nmins; | ||||
| 	if (seconds <= 0) | ||||
| 		seconds = 1; | ||||
| 	gseconds = seconds; | ||||
|  | ||||
| 	msg1 = "You have to leave in 5 minutes"; | ||||
| 	if (seconds <= 60*5) { | ||||
| 		slp1 = 0; | ||||
| 	} else { | ||||
| 		slp1 = seconds - 60*5; | ||||
| 		seconds = 60*5; | ||||
| 	} | ||||
|  | ||||
| 	msg2 = "Just one more minute!"; | ||||
| 	if (seconds <= 60) { | ||||
| 		slp2 = 0; | ||||
| 	} else { | ||||
| 		slp2 = seconds - 60; | ||||
| 		seconds = 60; | ||||
| 	} | ||||
|  | ||||
| 	msg3 = "Time to leave!"; | ||||
| 	slp3 = seconds; | ||||
|  | ||||
| 	msg4 = "You're going to be late!"; | ||||
| 	slp4 = 60L; | ||||
|  | ||||
| 	(void) time(&daytime); | ||||
| 	daytime += gseconds; | ||||
| 	whenleave = ctime(&daytime); | ||||
|  | ||||
| 	fp = fopen(tempfile,"r"); | ||||
| 	if (fp) { | ||||
| 	      if (fscanf(fp, "%d", &oldpid) == 1) | ||||
| 		      if (!kill(oldpid,9)) | ||||
| 			      printf("Old zleave process killed.\n"); | ||||
| 	      (void) fclose(fp); | ||||
| 	} | ||||
| 	printf("Alarm set for %s", whenleave); | ||||
|  | ||||
| /* Subscribe to MESSAGE.LEAVE here */ | ||||
|  | ||||
| 	switch(fork()) { | ||||
| 	    case -1: | ||||
| 	      perror("fork"); | ||||
| 	      exit(-1); | ||||
| 	      break; | ||||
| 	    case 0: | ||||
| 	      break; | ||||
| 	    default: | ||||
| 	      exit(0); | ||||
| 	      break; | ||||
| 	} | ||||
| 	if (!(fp = fopen(tempfile, "w"))) | ||||
| 	  fprintf(stderr, "Cannot open pid file.\n"); | ||||
| 	else { | ||||
| 	      fprintf(fp, "%d\n", getpid()); | ||||
| 	      if (fclose(fp) == EOF) | ||||
| 		      (void) perror("fclose on pid file"); | ||||
| 	} | ||||
|  | ||||
| #ifdef _POSIX_VERSION | ||||
| 	sigemptyset(&sa.sa_mask); | ||||
| 	sa.sa_flags = 0; | ||||
| 	sa.sa_handler = SIG_IGN; | ||||
| 	sigaction(SIGINT, &sa, (struct sigaction *)0); | ||||
| 	sigaction(SIGQUIT, &sa, (struct sigaction *)0); | ||||
| 	sigaction(SIGTERM, &sa, (struct sigaction *)0); | ||||
| 	sigaction(SIGTTOU, &sa, (struct sigaction *)0); | ||||
| #else | ||||
| 	(void) signal(SIGINT, SIG_IGN); | ||||
| 	(void) signal(SIGQUIT, SIG_IGN); | ||||
| 	(void) signal(SIGTERM, SIG_IGN); | ||||
| 	(void) signal(SIGTTOU, SIG_IGN); | ||||
| #endif | ||||
|  | ||||
| 	if (slp1) | ||||
| 		bother(slp1, msg1); | ||||
| 	if (slp2) | ||||
| 		bother(slp2, msg2); | ||||
| 	bother(slp3, msg3); | ||||
| 	for (i = 0; i < 10; i++) | ||||
| 		bother(slp4, msg4); | ||||
|  | ||||
| 	bother(0L, "That was the last time I'll tell you. Bye."); | ||||
| 	(void) unlink(tempfile); | ||||
| 	exit(0); | ||||
| } | ||||
|  | ||||
| void | ||||
| bother(long slp, | ||||
|        char *msg) | ||||
| { | ||||
|       ZNotice_t notice; | ||||
|       ZNotice_t retnotice; | ||||
|       int retval; | ||||
|       char *real_message; | ||||
|  | ||||
|       delay(slp); | ||||
|  | ||||
|       if (use_zephyr) { | ||||
| 	    real_message = (char *) malloc(strlen(msg) + | ||||
| 					   strlen(reminder_message) + 3); | ||||
| 	    if (real_message == NULL) { | ||||
| 		fprintf (stderr, "zleave: out of memory\n"); | ||||
| 		exit (1); | ||||
| 	    } | ||||
| 	    sprintf(real_message,"%c%s\n%s",'\0',msg,reminder_message); | ||||
|  | ||||
| 	    (void) memset((char *)¬ice, 0, sizeof(notice)); | ||||
| 	    notice.z_kind = ACKED; | ||||
| 	    notice.z_port = 0; | ||||
| 	    notice.z_charset = ZCHARSET_UNKNOWN; | ||||
| 	    notice.z_class = MESSAGE_CLASS; | ||||
| 	    notice.z_class_inst = INSTANCE; | ||||
| 	    notice.z_recipient = ZGetSender(); | ||||
| 	    notice.z_opcode = ""; | ||||
| 	    notice.z_sender = (char *) 0; | ||||
| 	    notice.z_default_format = "\n$2"; | ||||
| 	    notice.z_message = real_message; | ||||
| 	    /* +3: initial null, newline, final null */ | ||||
| 	    notice.z_message_len = strlen(msg)+strlen(reminder_message)+3; | ||||
| 	     | ||||
| 	    if (ZSendNotice(¬ice, ZAUTH) != ZERR_NONE) { | ||||
| 		  printf("\7\7\7%s\n%s", msg, reminder_message); | ||||
| 		  use_zephyr = 0; | ||||
| 	    } else | ||||
| 	    if ((retval = ZIfNotice(&retnotice, (struct sockaddr_in *) 0, | ||||
| 				    ZCompareUIDPred,  | ||||
| 				    (char *)¬ice.z_uid)) != ZERR_NONE) { | ||||
| 		fprintf(stderr, | ||||
| 			"zleave: %s while waiting for acknowledgement\n",  | ||||
| 			error_message(retval)); | ||||
| 		use_zephyr = 0; | ||||
| 	    } else | ||||
| 	    if (retnotice.z_kind == SERVNAK) { | ||||
| 		fprintf(stderr, | ||||
| 			"zleave: authorization failure while sending\n"); | ||||
| 		use_zephyr = 0; | ||||
| 	    } else | ||||
| 	    if (retnotice.z_kind != SERVACK || !retnotice.z_message_len) { | ||||
| 		fprintf(stderr, "zleave: Detected server failure while receiving acknowledgement\n"); | ||||
| 		use_zephyr = 0; | ||||
| 	    } else | ||||
| 	    if (strcmp(retnotice.z_message, ZSRVACK_SENT)) { | ||||
| 		/* it wasn't sent */ | ||||
| 		exit(0); | ||||
| 	    } | ||||
| 	    if (!use_zephyr) | ||||
| 		exit(1); | ||||
| 	    ZFreeNotice(&retnotice); | ||||
| 	    free(real_message); | ||||
|       } else | ||||
| #ifdef __STDC__ | ||||
| 	printf("\a\a\a%s\n%s", msg, reminder_message); | ||||
| #else | ||||
| 	printf("\7\7\7%s\n%s", msg, reminder_message); | ||||
| #endif | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * delay is like sleep but does it in 100 sec pieces and | ||||
|  * knows what zero means. | ||||
|  */ | ||||
| void | ||||
| delay(long secs) | ||||
| { | ||||
| 	long n; | ||||
| 	register char *l; | ||||
|  | ||||
| 	while (secs > 0) { | ||||
| 		n = 100; | ||||
| 		if (secs < n) | ||||
| 			n = secs; | ||||
| 		secs -= n; | ||||
| 		if (n > 0) | ||||
| 			sleep((unsigned) n); | ||||
| 		if (!use_zephyr) { | ||||
| 		    l = getlogin(); | ||||
| 		    if (l == NULL) | ||||
| 			exit(0); | ||||
| 		    if (strcmp(origlogin, l) != 0) | ||||
| 			exit(0); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| #ifndef HAVE_GETLOGIN | ||||
| char *getlogin() { | ||||
| #include <utmp.h> | ||||
|  | ||||
| 	static struct utmp ubuf; | ||||
| 	int ufd; | ||||
|  | ||||
| 	ufd = open("/etc/utmp",0); | ||||
| 	seek(ufd, ttyn(0)*sizeof(ubuf), 0); | ||||
| 	read(ufd, &ubuf, sizeof(ubuf)); | ||||
| 	ubuf.ut_name[sizeof(ubuf.ut_name)] = 0; | ||||
| 	return(&ubuf.ut_name); | ||||
| } | ||||
| #endif | ||||
							
								
								
									
										56
									
								
								clients/zlocate/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								clients/zlocate/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| SHELL=@SHELL@ | ||||
|  | ||||
| prefix=@prefix@ | ||||
| exec_prefix=@exec_prefix@ | ||||
| datadir=@datadir@ | ||||
| sysconfdir=@sysconfdir@ | ||||
| sbindir=@sbindir@ | ||||
| lsbindir=@lsbindir@ | ||||
| datarootdir=@datarootdir@ | ||||
|  | ||||
| includedir=@includedir@ | ||||
| mandir=@mandir@ | ||||
| libdir=@libdir@ | ||||
| bindir=@bindir@ | ||||
| top_builddir=../.. | ||||
|  | ||||
| srcdir=@srcdir@ | ||||
| top_srcdir=@top_srcdir@ | ||||
| BUILDTOP=../.. | ||||
| VPATH=@srcdir@ | ||||
| LIBTOOL=@LIBTOOL@ | ||||
| CC=@CC@ | ||||
| INSTALL=@INSTALL@ | ||||
|  | ||||
| LIBZEPHYR=${BUILDTOP}/lib/libzephyr.la | ||||
| CPPFLAGS=@CPPFLAGS@ | ||||
| CFLAGS=@CFLAGS@ | ||||
| ALL_CFLAGS=${CFLAGS} -I${top_srcdir}/h -I${BUILDTOP}/h ${CPPFLAGS} | ||||
| LDFLAGS=@LDFLAGS@ | ||||
| LIBS=${LIBZEPHYR} @LIBS@ -lcom_err | ||||
|  | ||||
| OBJS=	zlocate.o | ||||
|  | ||||
| all: zlocate | ||||
|  | ||||
| zlocate: ${OBJS} ${LIBZEPHYR} | ||||
| 	${LIBTOOL} --mode=link ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LIBS} | ||||
|  | ||||
| .c.o: | ||||
| 	${CC} -c ${ALL_CFLAGS} $< | ||||
|  | ||||
| check: | ||||
|  | ||||
| install: zlocate | ||||
| 	${LIBTOOL} --mode=install ${INSTALL} -m 755 zlocate ${DESTDIR}${bindir} | ||||
| 	${INSTALL} -m 644 ${srcdir}/zlocate.1 ${DESTDIR}${mandir}/man1 | ||||
|  | ||||
| clean: | ||||
| 	${LIBTOOL} --mode=clean rm -f zlocate | ||||
| 	rm -f ${OBJS} | ||||
|  | ||||
| ${OBJS}: ${top_srcdir}/h/sysdep.h ${BUILDTOP}/h/config.h | ||||
| ${OBJS}: ${BUILDTOP}/h/zephyr/zephyr.h ${BUILDTOP}/h/zephyr/zephyr_err.h | ||||
|  | ||||
| .PHONY: all check install clean | ||||
|  | ||||
							
								
								
									
										76
									
								
								clients/zlocate/zlocate.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								clients/zlocate/zlocate.1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| .\"	$Id$ | ||||
| .\" | ||||
| .\" Copyright 1987,1988 by the Massachusetts Institute of Technology | ||||
| .\" All rights reserved.  The file /usr/include/zephyr/mit-copyright.h | ||||
| .\" specifies the terms and conditions for redistribution. | ||||
| .\" | ||||
| .\" | ||||
| .TH ZLOCATE 1 "April 17, 1990" "MIT Project Athena" | ||||
| .ds ]W MIT Project Athena | ||||
| .SH NAME | ||||
| zlocate \- find a user using Zephyr | ||||
| .SH SYNOPSIS | ||||
| .B zlocate | ||||
| [ | ||||
| .B -a | ||||
| |  | ||||
| .B -d | ||||
| ] [ | ||||
| .B -1 | ||||
| ] [ | ||||
| .B -p | ||||
| ] user ... | ||||
| .SH DESCRIPTION | ||||
| .I Zlocate | ||||
| uses the | ||||
| .I Zephyr(1) | ||||
| Notification Service to find where a user is currently logged in.  If | ||||
| the user is not logged in, or has set his location information such that | ||||
| you do not have access to see it, | ||||
| .I zlocate | ||||
| prints "Hidden or not logged-in".  Otherwise, each machine that the | ||||
| user is currently logged into is printed, along with the time of | ||||
| login and location.  The location is usually the X window system display | ||||
| name of the user's display, but may be the terminal name if he is not | ||||
| using X or for some other reason is only using the terminal interface to | ||||
| .I zwgc(1). | ||||
|  | ||||
| By default, all zlocate requests are authenticated using | ||||
| .IR Kerberos . | ||||
| If you do not have Kerberos tickets, or for some other reason do not | ||||
| want to authenticate, the | ||||
| .B -d | ||||
| option will turn off authentication.  The | ||||
| .B -a | ||||
| option is the default, authentication on. | ||||
|  | ||||
| When locating multiple users, | ||||
| .I zlocate | ||||
| will display the user name on a line by itself, followed by the locations for that user. To display the user name on the same line as the output, use the | ||||
| .B -1 | ||||
| option (the numeral one). | ||||
|  | ||||
| To look up multiple users in parallel asynchronously, use the | ||||
| .B -p | ||||
| option. | ||||
|  | ||||
| .SH DIAGNOSTICS | ||||
| .I zlocate | ||||
| exits with status zero (0) if at least one user was found, and one (1) | ||||
| if no users were found. | ||||
| .SH SEE ALSO | ||||
| zctl(1), zephyr(1), znol(1), zwgc(1), zhm(8), zephyrd(8), X(1) | ||||
| .br | ||||
| Project Athena Technical Plan Section E.4.1, `Zephyr Notification | ||||
| Service' | ||||
| .SH AUTHORS | ||||
| .PP | ||||
| Robert S. French (MIT-Project Athena) | ||||
| .br | ||||
| Marc Horowitz (MIT-Project Athena) | ||||
| .SH RESTRICTIONS | ||||
| Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
| All Rights Reserved. | ||||
| .br | ||||
| .I zephyr(1) | ||||
| specifies the terms and conditions for redistribution. | ||||
							
								
								
									
										182
									
								
								clients/zlocate/zlocate.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								clients/zlocate/zlocate.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,182 @@ | ||||
| /* This file is part of the Project Athena Zephyr Notification System. | ||||
|  * It contains code for the "zlocate" command. | ||||
|  * | ||||
|  *	Created by:	Robert French | ||||
|  * | ||||
|  *	$Id$ | ||||
|  * | ||||
|  *	Copyright (c) 1987 by the Massachusetts Institute of Technology. | ||||
|  *	For copying and distribution information, see the file | ||||
|  *	"mit-copyright.h".  | ||||
|  */ | ||||
|  | ||||
| #include <sysdep.h> | ||||
| #include <zephyr/zephyr.h> | ||||
| #include <sys/socket.h> | ||||
|  | ||||
| #if !defined(lint) && !defined(SABER) | ||||
| static const char rcsid_zlocate_c[] = "$Id$"; | ||||
| #endif | ||||
|  | ||||
| int numusers=0, numleft=0, parallel=0, oneline=0; | ||||
| char *whoami; | ||||
|  | ||||
| static RETSIGTYPE | ||||
| timeout(int sig) | ||||
| { | ||||
|   fprintf (stderr, "%s: no response from server\n", whoami); | ||||
|   exit(1); | ||||
| } | ||||
|  | ||||
| static void | ||||
| usage(void) | ||||
| { | ||||
|    printf("Usage: %s [ -a | -d ] [ -p ] [ -1 ] user ... \n",whoami); | ||||
|    exit(1); | ||||
| } | ||||
|  | ||||
| static void | ||||
| print_locs(char *user, | ||||
| 	   int nlocs) | ||||
| { | ||||
|    int one = 1, retval; | ||||
|    ZLocations_t locations; | ||||
|  | ||||
|    if ((!oneline) && (numusers>1)) | ||||
|      printf("\t%s:\n",user); | ||||
|  | ||||
|    if ((!oneline) && (nlocs == 0)) | ||||
|       printf("Hidden or not logged-in\n"); | ||||
|  | ||||
|    for (;nlocs;nlocs--) { | ||||
|       if ((retval = ZGetLocations(&locations,&one)) != ZERR_NONE) { | ||||
| 	 com_err(whoami,retval,"while getting location"); | ||||
| 	 exit(1); | ||||
|       } | ||||
|   | ||||
|       if (oneline) { | ||||
| 	 printf("%s:\t%s\t%s\t%s\n",user,locations.host,locations.tty, | ||||
| 		locations.time); | ||||
|       } else { | ||||
| 	 printf("%-42s %-7s %s\n",locations.host, locations.tty, locations.time); | ||||
|       } | ||||
|    } | ||||
|  | ||||
|    if ((!oneline) && (numusers > 1) && (numleft > 0)) | ||||
|      printf("\n"); | ||||
| } | ||||
|  | ||||
| /*ARGSUSED*/ | ||||
| int | ||||
| main(int argc, | ||||
|      char *argv[]) | ||||
| { | ||||
|     char user[BUFSIZ],*whichuser; | ||||
|     ZAsyncLocateData_t ald; | ||||
|     int retval,i,numlocs,numfound,loc,auth,rlen; | ||||
|     ZNotice_t notice; | ||||
| #ifdef _POSIX_VERSION | ||||
|     struct sigaction sa; | ||||
| #endif | ||||
|     | ||||
|     whoami = argv[0]; | ||||
|     auth = -1; | ||||
|  | ||||
|     argv++; | ||||
|     argc--; | ||||
|  | ||||
|     for (i=0; i < argc; i++) | ||||
| 	if (argv[i][0] == '-') | ||||
| 	    switch (argv[i][1]) { | ||||
| 	    case 'a': | ||||
| 		if (auth != -1) usage(); | ||||
| 		auth = 1; | ||||
| 		break; | ||||
| 	    case 'd': | ||||
| 		if (auth != -1) usage(); | ||||
| 		auth = 0; | ||||
| 		break; | ||||
| 	    case 'p': | ||||
| 		parallel = 1; | ||||
| 		break; | ||||
| 	    case '1': | ||||
| 		oneline = 1; | ||||
| 		break; | ||||
| 	    default: | ||||
| 		usage(); | ||||
| 		break; | ||||
| 	    } | ||||
| 	else | ||||
| 	    numusers++; | ||||
|  | ||||
|     if (numusers == 0) | ||||
| 	usage(); | ||||
|  | ||||
|     if (auth == -1) auth = 1; | ||||
|     | ||||
|     if ((retval = ZInitialize()) != ZERR_NONE) { | ||||
| 	com_err(whoami,retval,"while initializing"); | ||||
| 	exit(1); | ||||
|     }  | ||||
|  | ||||
|     numleft = numusers; | ||||
|     numfound = 0; | ||||
|     rlen = strlen(ZGetRealm()); | ||||
|  | ||||
|     i = 0; | ||||
|     for (loc = 0; loc < argc; loc++) { | ||||
| 	if (argv[loc][0] == '-') continue; | ||||
|  | ||||
| 	(void) strncpy(user,argv[loc],sizeof(user) - rlen - 2); | ||||
| 	user[sizeof(user) - rlen - 2] = '\0'; | ||||
| 	if (!strchr(user,'@')) { | ||||
| 	    (void) strcat(user,"@"); | ||||
| 	    (void) strcat(user,ZGetRealm()); | ||||
| 	}  | ||||
| 	if (parallel) { | ||||
| 	    if ((retval = ZRequestLocations(user, &ald, i ? UNSAFE : UNACKED, | ||||
| 					    auth?ZAUTH:ZNOAUTH)) != ZERR_NONE) { | ||||
| 		com_err(whoami,retval,"requesting location of %s",user); | ||||
| 		exit(1); | ||||
| 	    } | ||||
| 	    i = 1; | ||||
| 	} else { | ||||
| 	    if ((retval = ZLocateUser(user,&numlocs,auth?ZAUTH:ZNOAUTH)) != ZERR_NONE) { | ||||
| 		com_err(whoami,retval,"while locating user %s",user); | ||||
| 		exit(1); | ||||
| 	    } | ||||
| 	    print_locs(user,numlocs); | ||||
| 	    numfound += numlocs; | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|     if (parallel) { | ||||
| #ifdef _POSIX_VERSION | ||||
| 	sigemptyset(&sa.sa_mask); | ||||
| 	sa.sa_flags = 0; | ||||
| 	sa.sa_handler = timeout; | ||||
| 	sigaction(SIGALRM, &sa, (struct sigaction *)0); | ||||
| #else | ||||
| 	signal (SIGALRM, timeout); | ||||
| #endif | ||||
| 	while (numleft-- > 0) { | ||||
| 	    alarm(SRV_TIMEOUT); | ||||
| 	    if ((retval = ZReceiveNotice(¬ice, NULL)) != ZERR_NONE) { | ||||
| 		com_err(whoami,retval,"while searching notice queue"); | ||||
| 		continue; | ||||
| 	    } | ||||
| 	    if ((retval = ZParseLocations(¬ice, (ZAsyncLocateData_t *)NULL, | ||||
| 					  &numlocs, &whichuser)) != ZERR_NONE) { | ||||
| 		com_err(whoami,retval,"while parsing locations"); | ||||
| 		continue; | ||||
| 	    } | ||||
| 	    if (numlocs >= 0) { | ||||
| 		print_locs(whichuser,numlocs); | ||||
| 		free(whichuser); | ||||
| 		numfound += numlocs; | ||||
| 	    } | ||||
| 	    ZFreeNotice(¬ice); | ||||
| 	} | ||||
|     } | ||||
|     return((numfound > 0) ? 0 : 1); | ||||
| } | ||||
							
								
								
									
										56
									
								
								clients/znol/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								clients/znol/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| SHELL=@SHELL@ | ||||
|  | ||||
| prefix=@prefix@ | ||||
| exec_prefix=@exec_prefix@ | ||||
| datadir=@datadir@ | ||||
| sysconfdir=@sysconfdir@ | ||||
| sbindir=@sbindir@ | ||||
| lsbindir=@lsbindir@ | ||||
| datarootdir=@datarootdir@ | ||||
|  | ||||
| includedir=@includedir@ | ||||
| mandir=@mandir@ | ||||
| libdir=@libdir@ | ||||
| bindir=@bindir@ | ||||
| top_builddir=../.. | ||||
|  | ||||
| srcdir=@srcdir@ | ||||
| top_srcdir=@top_srcdir@ | ||||
| BUILDTOP=../.. | ||||
| VPATH=@srcdir@ | ||||
| LIBTOOL=@LIBTOOL@ | ||||
| CC=@CC@ | ||||
| INSTALL=@INSTALL@ | ||||
|  | ||||
| LIBZEPHYR=${BUILDTOP}/lib/libzephyr.la | ||||
| CPPFLAGS=@CPPFLAGS@ | ||||
| CFLAGS=@CFLAGS@ | ||||
| ALL_CFLAGS=${CFLAGS} -I${top_srcdir}/h -I${BUILDTOP}/h ${CPPFLAGS} | ||||
| LDFLAGS=@LDFLAGS@ | ||||
| LIBS=${LIBZEPHYR} @LIBS@ -lcom_err | ||||
|  | ||||
| OBJS=	znol.o | ||||
|  | ||||
| all: znol | ||||
|  | ||||
| znol: ${OBJS} ${LIBZEPHYR} | ||||
| 	${LIBTOOL} --mode=link ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LIBS} | ||||
|  | ||||
| .c.o: | ||||
| 	${CC} -c ${ALL_CFLAGS} $< | ||||
|  | ||||
| check: | ||||
|  | ||||
| install: znol | ||||
| 	${LIBTOOL} --mode=install ${INSTALL} -m 755 znol ${DESTDIR}${bindir} | ||||
| 	${INSTALL} -m 644 ${srcdir}/znol.1 ${DESTDIR}${mandir}/man1 | ||||
|  | ||||
| clean: | ||||
| 	${LIBTOOL} --mode=clean rm -f znol | ||||
| 	rm -f ${OBJS} | ||||
|  | ||||
| ${OBJS}: ${top_srcdir}/h/sysdep.h ${BUILDTOP}/h/config.h | ||||
| ${OBJS}: ${BUILDTOP}/h/zephyr/zephyr.h ${BUILDTOP}/h/zephyr/zephyr_err.h | ||||
|  | ||||
| .PHONY: all check install clean | ||||
|  | ||||
							
								
								
									
										109
									
								
								clients/znol/znol.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								clients/znol/znol.1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,109 @@ | ||||
| .\"	$Id$ | ||||
| .\" | ||||
| .\" Copyright 1987,1988 by the Massachusetts Institute of Technology | ||||
| .\" All rights reserved.  The file /usr/include/zephyr/mit-copyright.h | ||||
| .\" specifies the terms and conditions for redistribution. | ||||
| .\" | ||||
| .\"	@(#)znol.1	6.1 (MIT) 7/9/87 | ||||
| .\" | ||||
| .TH ZNOL 1 "July 1, 1988" "MIT Project Athena" | ||||
| .ds ]W MIT Project Athena | ||||
| .SH NAME | ||||
| znol \- notify via Zephyr upon login or logout of interesting people | ||||
| .SH SYNOPSIS | ||||
| .B znol | ||||
| [ | ||||
| .BI on|off | ||||
| ] [ | ||||
| .BI \-f \ file | ||||
| ] [ | ||||
| .BI \-u \ username | ||||
| ] [ | ||||
| .BI \-l | ||||
| ] [ | ||||
| .BI \-q | ||||
| ] | ||||
| .SH DESCRIPTION | ||||
| .I Znol | ||||
| provides a way for you to be notified when "interesting" people log in | ||||
| or out.  It uses the | ||||
| .I Zephyr(1) | ||||
| Notification Service, which causes a message to appear on your screen | ||||
| for every person specified in a namelist (which defaults to | ||||
| $HOME/.anyone).  The namelist should have one login name per line.  Any | ||||
| line starting with `#' is considered a comment and ignored. | ||||
| Anyone in the namelist who is logged in when | ||||
| .I znol | ||||
| is executed is printed to stdout.  The control arguments are as | ||||
| follows: | ||||
| .TP 12 | ||||
| .B on|off | ||||
| Turns notification on or off. | ||||
| .TP | ||||
| .B \-f | ||||
| The namelist file is taken to be | ||||
| .I file. | ||||
| If | ||||
| .I file | ||||
| is "-", then the standard input is used instead of a file. If | ||||
| .I file | ||||
| does not exist, an error message is printed, and | ||||
| .I znol | ||||
| exits. | ||||
| This option may not be used in conjunction with the | ||||
| .B \-u | ||||
| option. | ||||
| .TP | ||||
| .B \-l | ||||
| Causes | ||||
| .I znol | ||||
| to just list the people in the namelist who are currently logged in, | ||||
| without subscribing to the login messages.   This option may not be used | ||||
| in conjunction with the | ||||
| .BI \-q | ||||
| option. | ||||
| .TP | ||||
| .B \-q | ||||
| Disables printing who is currently logged in when subscribing.  This | ||||
| option may not be used in conjunction with the | ||||
| .BI \-l | ||||
| option. | ||||
| .TP | ||||
| .B \-u | ||||
| Instead of reading a file to specify the "interesting" users, the next | ||||
| argument is used as the only "interesting" user.  This option may not be | ||||
| used in conjunction with the | ||||
| .B \-f | ||||
| option. | ||||
| .SH EXAMPLES | ||||
| .nf | ||||
| .in +.5in | ||||
| znol | ||||
| .in -.5in | ||||
| .fi | ||||
| reads the standard namelist file, prints the locations of any users | ||||
| named therein which can be found on the system, and enters subscriptions | ||||
| for notices about those users. | ||||
| .nf | ||||
| .in +.5in | ||||
| znol \-l \-u foo | ||||
| .in -.5in | ||||
| .fi | ||||
| prints the location (if visible) of the user 'foo'. | ||||
| .SH FILES | ||||
| $HOME/.anyone | ||||
| .SH SEE ALSO | ||||
| anyone(SIPB), nol(SIPB), zctl(1), zephyr(1), zwgc(1), zhm(8), zephyrd(8) | ||||
| .br | ||||
| Project Athena Technical Plan Section E.4.1, `Zephyr Notification | ||||
| Service' | ||||
| .SH AUTHOR | ||||
| .PP | ||||
| Robert S. French (MIT-Project Athena) | ||||
| .sp | ||||
| .SH RESTRICTIONS | ||||
| Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
| All Rights Reserved. | ||||
| .br | ||||
| .I zephyr(1) | ||||
| specifies the terms and conditions for redistribution. | ||||
							
								
								
									
										256
									
								
								clients/znol/znol.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								clients/znol/znol.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,256 @@ | ||||
| /* This file is part of the Project Athena Zephyr Notification System. | ||||
|  * It contains code for the "znol" command. | ||||
|  * | ||||
|  *	Created by:	Robert French | ||||
|  * | ||||
|  *	$Id$ | ||||
|  * | ||||
|  *	Copyright (c) 1987 by the Massachusetts Institute of Technology. | ||||
|  *	For copying and distribution information, see the file | ||||
|  *	"mit-copyright.h".  | ||||
|  */ | ||||
|  | ||||
| #include <sysdep.h> | ||||
| #include <zephyr/zephyr.h> | ||||
|  | ||||
| #include <pwd.h> | ||||
|  | ||||
| #ifndef lint | ||||
| static const char rcsid_znol_c[] = "$Id$"; | ||||
| #endif  | ||||
|  | ||||
| #define SUBSATONCE 7 | ||||
| #define ON 1 | ||||
| #define OFF 0 | ||||
|  | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
| 	register char *cp; | ||||
| 	char *realm; | ||||
| 	ZSubscription_t subs[SUBSATONCE]; | ||||
| 	ZLocations_t locations; | ||||
| 	FILE *fp = NULL; | ||||
| 	struct passwd *pwd; | ||||
| 	char anyonename[BUFSIZ],name[BUFSIZ],cleanname[BUFSIZ],*envptr; | ||||
| 	char *comment_ptr; | ||||
| 	int onoff = ON,quiet = 0,justlist = 0,useronly = 0, filenamed = 0; | ||||
| 	int retval,arg,ind,one,numlocs,i; | ||||
| 	int wgport = 0; | ||||
|  | ||||
| 	if ((retval = ZInitialize()) != ZERR_NONE) { | ||||
| 		com_err(argv[0],retval,"initializing"); | ||||
| 		exit (1); | ||||
| 	} | ||||
|  | ||||
| 	for (arg=1;arg<argc;arg++) { | ||||
| 		if (!strcmp(argv[arg],"on")) { | ||||
| 			onoff = ON; | ||||
| 			continue; | ||||
| 		} | ||||
| 		if (!strcmp(argv[arg],"off")) { | ||||
| 			onoff = OFF; | ||||
| 			continue; | ||||
| 		}  | ||||
| 		if (argv[arg][0] == '-') { | ||||
| 			char opt = argv[arg][1]; | ||||
| 			if (opt == 0 || argv[arg][2] != 0) | ||||
| 				goto usage; | ||||
| 			switch (argv[arg][1]) { | ||||
| 			case 'q': | ||||
| 				quiet = 1; | ||||
| 				break; | ||||
| 			case 'l': | ||||
| 				justlist = 1; | ||||
| 				break; | ||||
| 			case 'f': | ||||
| 				if (arg == argc-1) { | ||||
| 					fprintf(stderr,"No file name specified\n"); | ||||
| 					goto usage; | ||||
| 				} | ||||
| 				(void) strcpy(anyonename,argv[++arg]); | ||||
| 				filenamed = 1; | ||||
| 				break; | ||||
| 			case 'u': | ||||
| 				if (arg == argc-1) { | ||||
| 					fprintf(stderr,"No username specified\n"); | ||||
| 					goto usage; | ||||
| 				} | ||||
| 				(void) strcpy(cleanname,argv[++arg]); | ||||
| 				useronly = 1; | ||||
| 				break; | ||||
| 			default: | ||||
| 				goto usage; | ||||
| 			} | ||||
| 			continue; | ||||
| 		} | ||||
| 	    usage: | ||||
| 		fprintf(stderr,"Usage: %s [on|off] [-q | -l] [-f file | -u username]\n", argv[0]); | ||||
| 		exit (1); | ||||
| 	} | ||||
|  | ||||
| 	if (quiet && justlist) { | ||||
| 		fprintf(stderr,"-q and -l cannot both be used\n"); | ||||
| 		goto usage; | ||||
| 	}  | ||||
| 	if (useronly && filenamed) { | ||||
| 		fprintf(stderr,"-u and -f cannot both be used\n"); | ||||
| 		goto usage; | ||||
| 	}  | ||||
| 	if (!justlist) | ||||
| 		if ((wgport = ZGetWGPort()) == -1) { | ||||
| 			com_err(argv[0],errno,"while getting WindowGram port"); | ||||
| 			exit(1); | ||||
| 		} | ||||
| 	 | ||||
| 	if (!useronly) { | ||||
| 		/* If no filename specified, get the default */ | ||||
| 		if (!filenamed) { | ||||
| 			envptr = getenv("HOME"); | ||||
| 			if (envptr) | ||||
| 			    (void) strcpy(anyonename,envptr); | ||||
| 			else { | ||||
| 				if (!(pwd = getpwuid((int) getuid()))) { | ||||
| 					fprintf(stderr,"You are not listed in the password file.\n"); | ||||
| 					exit (1); | ||||
| 				} | ||||
| 				(void) strcpy(anyonename,pwd->pw_dir); | ||||
| 			} | ||||
| 			(void) strcat(anyonename,"/.anyone"); | ||||
| 		} | ||||
|  | ||||
| 		/* if the filename is "-", read stdin */ | ||||
| 		if (strcmp(anyonename,"-") == 0) { | ||||
| 			fp = stdin; | ||||
| 		} else if (!(fp = fopen(anyonename,"r"))) { | ||||
| 			fprintf(stderr,"Can't open %s for input\n",anyonename); | ||||
| 			exit (1); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	ind = 0; | ||||
| 	 | ||||
| 	for (;;) { | ||||
| 		if (!useronly) { | ||||
| 		    if (!fgets(cleanname,sizeof cleanname,fp)) | ||||
| 			break; | ||||
| 		    if (cleanname[0] == '#' || cleanname[0] == '\0' || | ||||
| 			cleanname[0] == '\n') | ||||
| 			continue;	/* ignore comment and empty lines */ | ||||
| 		    comment_ptr = strchr(cleanname, '#'); | ||||
| 		    if (comment_ptr) | ||||
| 			*comment_ptr = '\0'; /* Ignore from # onwards */ | ||||
| 		    /* Get rid of old-style nol entries, just in case */ | ||||
| 		    cp = cleanname + strlen(cleanname) - 1; | ||||
| 		    *cp = '\0'; | ||||
| 		    while(*--cp == ' ') | ||||
| 			*cp = '\0'; | ||||
| 		    if (*cleanname == '@' || !*cleanname) | ||||
| 			continue; | ||||
| 		} else if (ind) | ||||
| 		    break;		/* only do the one name */ | ||||
|  | ||||
| 		subs[ind].zsub_class = LOGIN_CLASS; | ||||
| 		(void) strcpy(name,cleanname); | ||||
| 		if (!strchr(name,'@')) { | ||||
| 			cp = name + strlen(name); | ||||
| 			*cp++ = '@'; | ||||
| 			(void) strcpy(cp,ZGetRealm()); | ||||
| 		} | ||||
| 		cp = strchr(name,'@'); | ||||
| 		if (cp[0] && strcmp(cp+1,ZGetRealm())) { | ||||
| 		    realm = cp + 1; | ||||
| 		    *cp = '\0'; | ||||
| 		    if ((subs[ind].zsub_classinst = | ||||
| 			 malloc((unsigned)(strlen(name) + strlen(realm) + 2))) | ||||
| 			== NULL) | ||||
| 		    { | ||||
| 			fprintf (stderr, "znol: out of memory"); | ||||
| 			exit (1); | ||||
| 		    } | ||||
| 		    (void) sprintf(subs[ind].zsub_classinst, "%s@%s", name, | ||||
| 				   realm); | ||||
| 		    (void) strcpy(name, subs[ind].zsub_classinst); | ||||
| 		    if ((subs[ind].zsub_recipient = | ||||
| 			 malloc((unsigned)(strlen(realm)+2))) == NULL) { | ||||
| 			fprintf (stderr, "znol: out of memory"); | ||||
| 			exit (1); | ||||
| 		    } | ||||
| 		    (void) sprintf(subs[ind++].zsub_recipient, "@%s", realm); | ||||
| 		} else { | ||||
| 		    if ((subs[ind].zsub_classinst = | ||||
| 			 malloc((unsigned)(strlen(name)+1))) == NULL) | ||||
| 		    { | ||||
| 			fprintf (stderr, "znol: out of memory"); | ||||
| 			exit (1); | ||||
| 		    } | ||||
| 		    (void) strcpy(subs[ind].zsub_classinst, name); | ||||
| 		    subs[ind++].zsub_recipient = ""; | ||||
| 		} | ||||
|  | ||||
| 		if (!quiet && onoff == ON) { | ||||
| 			if ((retval = ZLocateUser(name,&numlocs,ZAUTH)) | ||||
| 			    != ZERR_NONE) { | ||||
| 				com_err(argv[0],retval,"locating user"); | ||||
| 				exit(1); | ||||
| 			} | ||||
| 			one = 1; | ||||
| 			if (numlocs) { | ||||
| 				for (i=0;i<numlocs;i++) { | ||||
| 					if ((retval = | ||||
| 					     ZGetLocations(&locations,&one)) | ||||
| 					    != ZERR_NONE) { | ||||
| 						com_err(argv[0],retval, | ||||
| 							"getting location"); | ||||
| 						continue; | ||||
| 					} | ||||
| 					if (one != 1) { | ||||
| 						printf("%s: internal failure while getting location\n",argv[0]); | ||||
| 						exit(1); | ||||
| 					} | ||||
| 					printf("%s: %s\t%s\t%s\n",cleanname, | ||||
| 					       locations.host, | ||||
| 					       locations.tty, | ||||
| 					       locations.time); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if (ind == SUBSATONCE) { | ||||
| 			if (!justlist) | ||||
| 				if ((retval = (onoff==ON)? | ||||
| 				     ZSubscribeToSansDefaults(subs,ind, | ||||
| 							      (u_short)wgport): | ||||
| 				     ZUnsubscribeTo(subs,ind,(u_short)wgport)) != | ||||
| 				    ZERR_NONE) { | ||||
| 					com_err(argv[0],retval,(onoff==ON)? | ||||
| 						"subscribing": | ||||
| 						"unsubscribing"); | ||||
| 					exit(1); | ||||
| 				}  | ||||
| 			for (ind=0;ind<SUBSATONCE;ind++) | ||||
| 			  { | ||||
| 			    if (subs[ind].zsub_recipient[0] != '\0') | ||||
| 			      free(subs[ind].zsub_recipient); | ||||
| 			    free(subs[ind].zsub_classinst); | ||||
| 			  } | ||||
| 			ind = 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (ind && !justlist) | ||||
| 		if ((retval = (onoff==ON)? | ||||
| 		     ZSubscribeToSansDefaults(subs,ind,(u_short)wgport): | ||||
| 		     ZUnsubscribeTo(subs,ind,(u_short)wgport)) != | ||||
| 		    ZERR_NONE) { | ||||
| 			com_err(argv[0],retval,(onoff==ON)? | ||||
| 				"subscribing": | ||||
| 				"unsubscribing"); | ||||
| 			exit(1); | ||||
| 		}  | ||||
|  | ||||
| 	if (!useronly) | ||||
| 	    (void) fclose(fp);		/* file is open read-only, | ||||
| 					   ignore errs */ | ||||
| 	exit(0); | ||||
| } | ||||
							
								
								
									
										57
									
								
								clients/zshutdown_notify/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								clients/zshutdown_notify/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| SHELL=@SHELL@ | ||||
|  | ||||
| prefix=@prefix@ | ||||
| exec_prefix=@exec_prefix@ | ||||
| datadir=@datadir@ | ||||
| sysconfdir=@sysconfdir@ | ||||
| sbindir=@sbindir@ | ||||
| lsbindir=@lsbindir@ | ||||
| datarootdir=@datarootdir@ | ||||
|  | ||||
| includedir=@includedir@ | ||||
| mandir=@mandir@ | ||||
| libdir=@libdir@ | ||||
| bindir=@bindir@ | ||||
| top_builddir=../.. | ||||
|  | ||||
| srcdir=@srcdir@ | ||||
| top_srcdir=@top_srcdir@ | ||||
| BUILDTOP=../.. | ||||
| VPATH=@srcdir@ | ||||
| LIBTOOL=@LIBTOOL@ | ||||
| CC=@CC@ | ||||
| INSTALL=@INSTALL@ | ||||
|  | ||||
| LIBZEPHYR=${BUILDTOP}/lib/libzephyr.la | ||||
| CPPFLAGS=@CPPFLAGS@ | ||||
| CFLAGS=@CFLAGS@ | ||||
| ALL_CFLAGS=${CFLAGS} -I${top_srcdir}/h -I${BUILDTOP}/h ${CPPFLAGS} | ||||
| LDFLAGS=@LDFLAGS@ | ||||
| LIBS=${LIBZEPHYR} @LIBS@ -lcom_err | ||||
|  | ||||
| OBJS=	zshutdown_notify.o | ||||
|  | ||||
| all: zshutdown_notify | ||||
|  | ||||
| zshutdown_notify: ${OBJS} ${LIBZEPHYR} | ||||
| 	${LIBTOOL} --mode=link ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LIBS} | ||||
|  | ||||
| .c.o: | ||||
| 	${CC} -c ${ALL_CFLAGS} $< | ||||
|  | ||||
| check: | ||||
|  | ||||
| install: zshutdown_notify | ||||
| 	${LIBTOOL} --mode=install ${INSTALL} -m 755 zshutdown_notify \ | ||||
| 	  ${DESTDIR}${lsbindir} | ||||
| 	${INSTALL} -m 644 ${srcdir}/zshutdown_notify.8 ${DESTDIR}${mandir}/man8 | ||||
|  | ||||
| clean: | ||||
| 	${LIBTOOL} --mode=clean rm -f zshutdown_notify | ||||
| 	rm -f ${OBJS} | ||||
|  | ||||
| ${OBJS}: ${top_srcdir}/h/sysdep.h ${BUILDTOP}/h/config.h | ||||
| ${OBJS}: ${BUILDTOP}/h/zephyr/zephyr.h ${BUILDTOP}/h/zephyr/zephyr_err.h | ||||
|  | ||||
| .PHONY: all check install clean | ||||
|  | ||||
							
								
								
									
										43
									
								
								clients/zshutdown_notify/zshutdown_notify.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								clients/zshutdown_notify/zshutdown_notify.8
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| .\"	$Id$ | ||||
| .\" | ||||
| .\" Copyright 1988 by the Massachusetts Institute of Technology | ||||
| .\" All rights reserved.  The file /usr/include/zephyr/mit-copyright.h | ||||
| .\" specifies the terms and conditions for redistribution. | ||||
| .\" | ||||
| .TH ZSHUTDOWN_NOTIFY 8 "July 8, 1988" "MIT Project Athena" | ||||
| .ds ]W MIT Project Athena | ||||
| .SH NAME | ||||
| zshutdown_notify \- notify users of impending shutdown via Zephyr | ||||
| .SH SYNOPSIS | ||||
| .B zshutdown_notify | ||||
| .SH DESCRIPTION | ||||
| .I zshutdown_notify | ||||
| reads the standard input until EOF is reached, and then sends a Zephyr | ||||
| notice with the official hostname, the collected input, and a warning | ||||
| message as the message body of the notice. | ||||
| The notice is sent to class FILSRV, instance  | ||||
| .I <hostname>, | ||||
| recipient "*", where <hostname> is the official hostname of the sending host. | ||||
| .PP | ||||
| Any users who are using resources on the sending host are expected to | ||||
| subscribe to these messages so they will be warned of any impending | ||||
| shutdowns. | ||||
| .PP | ||||
| .I zshutdown_notify | ||||
| is usually invoked from within | ||||
| .I /etc/shutdown. | ||||
| .SH SEE ALSO | ||||
| attach(1), zephyr(1), zwgc(1), shutdown(8), zhm(8), zephyrd(8) | ||||
| .br | ||||
| Project Athena Technical Plan Section E.4.1, `Zephyr Notification | ||||
| Service' | ||||
| .SH AUTHOR | ||||
| .PP | ||||
| C. Anthony Della Fera (Digital Equipment Corporation-Project Athena) | ||||
| .sp | ||||
| .SH RESTRICTIONS | ||||
| Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
| All Rights Reserved. | ||||
| .br | ||||
| .I zephyr(1) | ||||
| specifies the terms and conditions for redistribution. | ||||
							
								
								
									
										143
									
								
								clients/zshutdown_notify/zshutdown_notify.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								clients/zshutdown_notify/zshutdown_notify.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,143 @@ | ||||
| /* This file is part of the Project Athena Zephyr Notification System. | ||||
|  * It contains code for "zshutdown_notify", a utility called by | ||||
|  * shutdown(8) to do Zephyr notification on shutdown. | ||||
|  * | ||||
|  *	Created by:	C. Anthony Della Fera | ||||
|  * | ||||
|  *	$Id$ | ||||
|  * | ||||
|  *	Copyright (c) 1987, 1993 by the Massachusetts Institute of Technology. | ||||
|  *	For copying and distribution information, see the file | ||||
|  *	"mit-copyright.h". | ||||
|  */ | ||||
|  | ||||
| #include <sysdep.h> | ||||
| #include <zephyr/mit-copyright.h> | ||||
| #include <zephyr/zephyr.h> | ||||
|  | ||||
| #include <sys/socket.h> | ||||
| #include <netdb.h> | ||||
| #include <arpa/nameser.h> | ||||
|  | ||||
| #ifndef lint | ||||
| static const char rcsid_zshutdown_notify_c[] = | ||||
|     "$Id$"; | ||||
| #endif | ||||
|  | ||||
| #define N_KIND		UNSAFE | ||||
| #define N_CLASS		"FILSRV" | ||||
| #define N_OPCODE	"SHUTDOWN" | ||||
| #define N_DEF_FORMAT	"From $sender:\n@bold(Shutdown message from $1 at $time)\n@center(System going down, message is:)\n\n$2\n\n@center(@bold($3))" | ||||
| #define N_FIELD_CNT	3 | ||||
|  | ||||
| #ifdef HAVE_KRB4 | ||||
| #define SVC_NAME	"rcmd" | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Standard warning strings appended as extra fields to | ||||
|  * the message body. | ||||
|  */ | ||||
|  | ||||
| static char warning[] = "Please detach any filesystems you may have\nattached from this host by typing detach -host %s"; | ||||
|  | ||||
| /*ARGSUSED*/ | ||||
| int | ||||
| main(int argc, | ||||
|      char *argv[]) | ||||
| { | ||||
|     ZNotice_t notice; | ||||
|     struct hostent *hp; | ||||
|     int retval; | ||||
|     char hostname[NS_MAXDNAME]; | ||||
|     char msgbuff[BUFSIZ], message[Z_MAXPKTLEN], *ptr; | ||||
|     char scratch[BUFSIZ]; | ||||
|     char *msg[N_FIELD_CNT]; | ||||
| #ifdef HAVE_KRB4 | ||||
|     char tkt_filename[MAXPATHLEN]; | ||||
|     char rlm[REALM_SZ]; | ||||
|     char hn2[NS_MAXDNAME]; | ||||
|     char *cp; | ||||
| #endif | ||||
|  | ||||
|     if (gethostname(hostname, sizeof(hostname)) < 0) { | ||||
| 	com_err(argv[0], errno, "while finding hostname"); | ||||
| 	exit(1); | ||||
|     } | ||||
|  | ||||
|     if ((hp = gethostbyname(hostname)) != NULL) | ||||
| 	    (void) strcpy(hostname, hp->h_name); | ||||
|  | ||||
|     msg[0] = hostname; | ||||
|     msg[1] = message; | ||||
|     sprintf(scratch, warning, hostname); | ||||
|     msg[2] = scratch; | ||||
|  | ||||
| #ifdef HAVE_KRB4 | ||||
|     (void) sprintf(tkt_filename, "/tmp/tkt_zshut_%d", getpid()); | ||||
|     krb_set_tkt_string(tkt_filename); | ||||
|  | ||||
|     cp = krb_get_phost(hostname); | ||||
|     if (cp) | ||||
| 	(void) strcpy(hn2, cp); | ||||
|     else { | ||||
| 	fprintf(stderr, "%s: can't figure out canonical hostname\n",argv[0]); | ||||
| 	exit(1); | ||||
|     } | ||||
|     retval = krb_get_lrealm(rlm, 1); | ||||
|     if (retval) { | ||||
| 	fprintf(stderr, "%s: can't get local realm: %s\n", | ||||
| 		argv[0], krb_get_err_text(retval)); | ||||
| 	exit(1); | ||||
|     } | ||||
|     retval = krb_get_svc_in_tkt(SVC_NAME, hn2, rlm, | ||||
| 				SERVER_SERVICE, SERVER_INSTANCE, 1, | ||||
| 				(char *)KEYFILE); | ||||
|     if (retval) { | ||||
| 	fprintf(stderr, "%s: can't get tickets: %s\n", | ||||
| 		argv[0], krb_get_err_text(retval)); | ||||
| 	exit(1); | ||||
|     } | ||||
| #endif | ||||
|  | ||||
|     if ((retval = ZInitialize()) != ZERR_NONE) { | ||||
| 	com_err(argv[0], retval, "while initializing"); | ||||
| 	exit(1); | ||||
|     } | ||||
|  | ||||
|     ptr = message; | ||||
|  | ||||
|     for (;;) { | ||||
| 	if (!fgets(msgbuff, sizeof(msgbuff), stdin)) | ||||
| 	    break; | ||||
| 	if ((strlen(msgbuff) + (ptr - message)) > Z_MAXPKTLEN){ | ||||
| 	    break; | ||||
| 	} | ||||
| 	(void) strcpy(ptr, msgbuff); | ||||
| 	ptr += strlen(ptr); | ||||
|     } | ||||
|  | ||||
|     (void) memset((char *)¬ice, 0, sizeof(notice)); | ||||
|  | ||||
|     notice.z_kind = N_KIND; | ||||
|     notice.z_port = 0; | ||||
|     notice.z_charset = ZCHARSET_UNKNOWN; | ||||
|     notice.z_class = N_CLASS; | ||||
|     notice.z_class_inst = hostname; | ||||
|     notice.z_opcode = N_OPCODE; | ||||
|     notice.z_sender = 0; | ||||
|     notice.z_message_len = 0; | ||||
|     notice.z_recipient = ""; | ||||
|     notice.z_default_format = N_DEF_FORMAT; | ||||
|  | ||||
|     retval = ZSendList(¬ice, msg, N_FIELD_CNT, ZAUTH); | ||||
| #ifdef HAVE_KRB4 | ||||
|     (void) dest_tkt(); | ||||
| #endif | ||||
|  | ||||
|     if (retval != ZERR_NONE) { | ||||
| 	com_err(argv[0], retval, "while sending notice"); | ||||
| 	exit(1); | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
							
								
								
									
										56
									
								
								clients/zstat/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								clients/zstat/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| SHELL=@SHELL@ | ||||
|  | ||||
| prefix=@prefix@ | ||||
| exec_prefix=@exec_prefix@ | ||||
| datadir=@datadir@ | ||||
| sysconfdir=@sysconfdir@ | ||||
| sbindir=@sbindir@ | ||||
| lsbindir=@lsbindir@ | ||||
| datarootdir=@datarootdir@ | ||||
|  | ||||
| includedir=@includedir@ | ||||
| mandir=@mandir@ | ||||
| libdir=@libdir@ | ||||
| bindir=@bindir@ | ||||
| top_builddir=../.. | ||||
|  | ||||
| srcdir=@srcdir@ | ||||
| top_srcdir=@top_srcdir@ | ||||
| BUILDTOP=../.. | ||||
| VPATH=@srcdir@ | ||||
| LIBTOOL=@LIBTOOL@ | ||||
| CC=@CC@ | ||||
| INSTALL=@INSTALL@ | ||||
|  | ||||
| LIBZEPHYR=${BUILDTOP}/lib/libzephyr.la | ||||
| CPPFLAGS=@CPPFLAGS@ | ||||
| CFLAGS=@CFLAGS@ | ||||
| ALL_CFLAGS=${CFLAGS} -I${top_srcdir}/h -I${BUILDTOP}/h ${CPPFLAGS} | ||||
| LDFLAGS=@LDFLAGS@ | ||||
| LIBS=${LIBZEPHYR} @LIBS@ -lcom_err | ||||
|  | ||||
| OBJS=	zstat.o | ||||
|  | ||||
| all: zstat | ||||
|  | ||||
| zstat: ${OBJS} ${LIBZEPHYR} | ||||
| 	${LIBTOOL} --mode=link ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LIBS} | ||||
|  | ||||
| .c.o: | ||||
| 	${CC} -c ${ALL_CFLAGS} $< | ||||
|  | ||||
| check: | ||||
|  | ||||
| install: zstat | ||||
| 	${LIBTOOL} --mode=install ${INSTALL} -m 755 zstat ${DESTDIR}${bindir} | ||||
| 	${INSTALL} -m 644 ${srcdir}/zstat.8 ${DESTDIR}${mandir}/man8 | ||||
|  | ||||
| clean: | ||||
| 	${LIBTOOL} --mode=clean rm -f zstat | ||||
| 	rm -f ${OBJS} | ||||
|  | ||||
| ${OBJS}: zserver.h ${top_srcdir}/h/sysdep.h ${BUILDTOP}/h/config.h | ||||
| ${OBJS}: ${BUILDTOP}/h/zephyr/zephyr.h ${BUILDTOP}/h/zephyr/zephyr_err.h | ||||
|  | ||||
| .PHONY: all check install clean | ||||
|  | ||||
							
								
								
									
										26
									
								
								clients/zstat/zserver.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								clients/zstat/zserver.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| #ifndef __ZSERVER_H__ | ||||
| #define __ZSERVER_H__ | ||||
| /* This file is part of the Project Athena Zephyr Notification System. | ||||
|  * It contains declarations for use in the server. | ||||
|  * | ||||
|  *	Created by:	John T. Kohl | ||||
|  * | ||||
|  *	$Id$ | ||||
|  * | ||||
|  *	Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
|  *	For copying and distribution information, see the file | ||||
|  *	"mit-copyright.h".  | ||||
|  */ | ||||
|  | ||||
| #define	ADMIN_HELLO	"HELLO"		/* Opcode: hello, are you there */ | ||||
| #define	ADMIN_IMHERE	"IHEARDYOU"	/* Opcode: yes, I am here */ | ||||
| #define	ADMIN_SHUTDOWN	"GOODBYE"	/* Opcode: I am shutting down */ | ||||
| #define ADMIN_BDUMP	"DUMP_AVAIL"	/* Opcode: I will give you a dump */ | ||||
| #define	ADMIN_DONE	"DUMP_DONE"	/* Opcode: brain dump for this server | ||||
| 					   is complete */ | ||||
| #define	ADMIN_NEWCLT	"NEXT_CLIENT"	/* Opcode: this is a new client */ | ||||
| #define	ADMIN_LOST_CLT	"LOST_CLIENT"	/* Opcode: client not ack'ing */ | ||||
| #define	ADMIN_KILL_CLT	"KILL_CLIENT"	/* Opcode: client is dead, remove */ | ||||
| #define	ADMIN_STATUS	"STATUS"	/* Opcode: please send status */ | ||||
|  | ||||
| #endif /* !__ZSERVER_H__ */ | ||||
							
								
								
									
										51
									
								
								clients/zstat/zstat.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								clients/zstat/zstat.8
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| .\"	$Id$ | ||||
| .\" | ||||
| .\" Copyright 1987,1988 by the Massachusetts Institute of Technology | ||||
| .\" All rights reserved.  The file /usr/include/zephyr/mit-copyright.h | ||||
| .\" specifies the terms and conditions for redistribution. | ||||
| .\" | ||||
| .\" | ||||
| .TH ZSTAT 8 "July 1, 1988" "MIT Project Athena" | ||||
| .ds ]W MIT Project Athena | ||||
| .SH NAME | ||||
| zstat \- display Zephyr statistics | ||||
| .SH SYNOPSIS | ||||
| .B zstat | ||||
| [ | ||||
| .BI -h | ||||
| ] [ | ||||
| .BI -s | ||||
| ] [ | ||||
| .BI host \ ... | ||||
| ] | ||||
| .SH DESCRIPTION | ||||
| .I Zstat | ||||
| is used to display statistics reported by a HostManager, | ||||
| .I zhm(8), | ||||
| or a Zephyr Server | ||||
| .I zephyrd(8), | ||||
| or both. | ||||
| .TP 12 | ||||
| .B \-h | ||||
| is used to indicate that only HostManager statistics should be displayed. | ||||
| .TP | ||||
| .B \-s | ||||
| is used to indicate that only server statistics should be displayed. | ||||
| .TP | ||||
| If no hosts are specified, the current host is assumed. | ||||
| When both HostManager and server statistics are displayed, | ||||
| statistics from the current server for each host are displayed. | ||||
| .SH SEE ALSO | ||||
| zephyr(1), zhm(8), zephyrd(8) | ||||
| .br | ||||
| Project Athena Technical Plan Section E.4.1, `Zephyr Notification | ||||
| Service' | ||||
| .SH AUTHOR | ||||
| .PP | ||||
| David C. Jedlinsky (MIT-Project Athena) | ||||
| .SH RESTRICTIONS | ||||
| Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
| All Rights Reserved. | ||||
| .br | ||||
| .I zephyr(1) | ||||
| specifies the terms and conditions for redistribution. | ||||
							
								
								
									
										312
									
								
								clients/zstat/zstat.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										312
									
								
								clients/zstat/zstat.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,312 @@ | ||||
| /* This file is part of the Project Athena Zephyr Notification System. | ||||
|  * It contains the zstat program. | ||||
|  * | ||||
|  *      Created by:     David C. Jedlinsky | ||||
|  * | ||||
|  *      $Id$ | ||||
|  * | ||||
|  *      Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
|  *      For copying and distribution information, see the file | ||||
|  *      "mit-copyright.h". | ||||
|  */ | ||||
|  | ||||
| /* There should be library interfaces for the operations in zstat; for now, | ||||
|  * however, zstat is more or less internal to the Zephyr system. */ | ||||
| #include <internal.h> | ||||
|  | ||||
| #include <sys/socket.h> | ||||
| #include <netinet/in.h> | ||||
| #include <arpa/inet.h> | ||||
| #include <arpa/nameser.h> | ||||
| #include "zserver.h" | ||||
|  | ||||
| #if !defined(lint) && !defined(SABER) | ||||
| static const char rcsid_zstat_c[] = "$Id$"; | ||||
| #endif | ||||
|  | ||||
| const char *hm_head[] = { | ||||
|     "Current server =", | ||||
|     "Items in queue:", | ||||
|     "Client packets received:", | ||||
|     "Server packets received:", | ||||
|     "Server changes:", | ||||
|     "Version:", | ||||
|     "Looking for a new server:", | ||||
|     "Time running:", | ||||
|     "Size:", | ||||
|     "Machine type:" | ||||
| }; | ||||
| #define	HM_SIZE	(sizeof(hm_head) / sizeof (char *)) | ||||
| const char *srv_head[] = { | ||||
|     "Current server version =", | ||||
|     "Packets handled:", | ||||
|     "Uptime:", | ||||
|     "Server states:", | ||||
| }; | ||||
| #define	SRV_SIZE	(sizeof(srv_head) / sizeof (char *)) | ||||
|  | ||||
| int outoftime = 0; | ||||
|  | ||||
| int serveronly = 0,hmonly = 0; | ||||
| u_short srv_port; | ||||
|  | ||||
| void usage(char *); | ||||
| void do_stat(char *); | ||||
| int srv_stat(char *); | ||||
| int hm_stat(char *, char *); | ||||
|  | ||||
| static RETSIGTYPE | ||||
| timeout(int ignored) | ||||
| { | ||||
| 	outoftime = 1; | ||||
| } | ||||
|  | ||||
| int | ||||
| main(int argc, | ||||
|      char *argv[]) | ||||
| { | ||||
| 	Code_t ret; | ||||
| 	char hostname[NS_MAXDNAME]; | ||||
| 	int optchar; | ||||
| 	struct servent *sp; | ||||
|  | ||||
| 	if ((ret = ZInitialize()) != ZERR_NONE) { | ||||
| 		com_err("zstat", ret, "initializing"); | ||||
| 		exit(-1); | ||||
| 	} | ||||
|  | ||||
| 	if ((ret = ZOpenPort((u_short *)0)) != ZERR_NONE) { | ||||
| 		com_err("zstat", ret, "opening port"); | ||||
| 		exit(-1); | ||||
| 	} | ||||
|  | ||||
| 	while ((optchar = getopt(argc, argv, "sh")) != EOF) { | ||||
| 		switch(optchar) { | ||||
| 		case 's': | ||||
| 			serveronly++; | ||||
| 			break; | ||||
| 		case 'h': | ||||
| 			hmonly++; | ||||
| 			break; | ||||
| 		case '?': | ||||
| 		default: | ||||
| 			usage(argv[0]); | ||||
| 			exit(1); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (serveronly && hmonly) { | ||||
| 		fprintf(stderr,"Only one of -s and -h may be specified\n"); | ||||
| 		exit(1); | ||||
| 	} | ||||
|  | ||||
| 	sp = getservbyname(SERVER_SVCNAME,"udp"); | ||||
| 	srv_port = (sp) ? sp->s_port : SERVER_SVC_FALLBACK; | ||||
|  | ||||
| 	if (optind == argc) { | ||||
| 		do_stat("127.0.0.1"); | ||||
| 		exit(0); | ||||
| 	} | ||||
|  | ||||
| 	for (;optind<argc;optind++) | ||||
| 		do_stat(argv[optind]); | ||||
|  | ||||
| 	exit(0); | ||||
| } | ||||
|  | ||||
| void | ||||
| do_stat(char *host) | ||||
| { | ||||
| 	char srv_host[NS_MAXDNAME]; | ||||
|  | ||||
| 	if (serveronly) { | ||||
| 		(void) srv_stat(host); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	if (hm_stat(host,srv_host)) | ||||
| 		return; | ||||
|  | ||||
| 	if (!hmonly) | ||||
| 		(void) srv_stat(srv_host); | ||||
| } | ||||
|  | ||||
| int | ||||
| hm_stat(char *host, | ||||
| 	char *server) | ||||
| { | ||||
| 	struct in_addr inaddr; | ||||
| 	Code_t code; | ||||
|  | ||||
| 	char *line[20],*mp; | ||||
| 	unsigned int i,nf; | ||||
| 	struct hostent *hp; | ||||
| 	time_t runtime; | ||||
| 	struct tm *tim; | ||||
| 	ZNotice_t notice; | ||||
|  | ||||
| 	if ((inaddr.s_addr = inet_addr(host)) == (unsigned)(-1)) { | ||||
| 	    if ((hp = gethostbyname(host)) == NULL) { | ||||
| 		fprintf(stderr,"Unknown host: %s\n",host); | ||||
| 		exit(-1); | ||||
| 	    } | ||||
| 	    (void) memcpy((char *) &inaddr, hp->h_addr, hp->h_length); | ||||
|  | ||||
| 	    printf("Hostmanager stats: %s\n", hp->h_name); | ||||
| 	} else { | ||||
| 	    printf("Hostmanager stats: %s\n", host); | ||||
| 	} | ||||
|  | ||||
| 	if ((code = ZhmStat(&inaddr, ¬ice)) != ZERR_NONE) { | ||||
| 	    com_err("zstat", code, "getting hostmanager status"); | ||||
| 	    exit(-1); | ||||
| 	} | ||||
|  | ||||
| 	mp = notice.z_message; | ||||
| 	for (nf=0;mp<notice.z_message+notice.z_message_len;nf++) { | ||||
| 		line[nf] = mp; | ||||
| 		mp += strlen(mp)+1; | ||||
| 	} | ||||
|  | ||||
| 	(void) strcpy(server,line[0]); | ||||
|  | ||||
| 	printf("HostManager protocol version = %s\n",notice.z_version); | ||||
|  | ||||
| 	for (i=0; (i < nf) && (i < HM_SIZE); i++) { | ||||
| 		if (!strncmp("Time",hm_head[i],4)) { | ||||
| 			runtime = atol(line[i]); | ||||
| 			tim = gmtime(&runtime); | ||||
| 			printf("%s %d days, %02d:%02d:%02d\n", hm_head[i], | ||||
| 				tim->tm_yday, | ||||
| 				tim->tm_hour, | ||||
| 				tim->tm_min, | ||||
| 				tim->tm_sec); | ||||
| 		} | ||||
| 		else | ||||
| 			printf("%s %s\n",hm_head[i],line[i]); | ||||
| 	} | ||||
|  | ||||
| 	printf("\n"); | ||||
|  | ||||
| 	ZFreeNotice(¬ice); | ||||
| 	return(0); | ||||
| } | ||||
|  | ||||
| int | ||||
| srv_stat(char *host) | ||||
| { | ||||
| 	char *line[20],*mp; | ||||
| 	int sock,i,nf,ret; | ||||
| 	struct hostent *hp; | ||||
| 	struct sockaddr_in sin; | ||||
| 	ZNotice_t notice; | ||||
| 	time_t runtime; | ||||
| 	struct tm *tim; | ||||
| #ifdef _POSIX_VERSION | ||||
| 	struct sigaction sa; | ||||
| #endif | ||||
|  | ||||
| 	(void) memset((char *) &sin, 0, sizeof(struct sockaddr_in)); | ||||
|  | ||||
| 	sin.sin_port = srv_port; | ||||
|  | ||||
| 	if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0) { | ||||
| 		perror("socket:"); | ||||
| 		exit(-1); | ||||
| 	} | ||||
|  | ||||
| 	sin.sin_family = AF_INET; | ||||
|  | ||||
| 	if ((sin.sin_addr.s_addr = inet_addr(host)) == (unsigned)(-1)) { | ||||
| 	    if ((hp = gethostbyname(host)) == NULL) { | ||||
| 		fprintf(stderr,"Unknown host: %s\n",host); | ||||
| 		exit(-1); | ||||
| 	    } | ||||
| 	    (void) memcpy((char *) &sin.sin_addr, hp->h_addr, hp->h_length); | ||||
|  | ||||
| 	    printf("Server stats: %s\n", hp->h_name); | ||||
| 	} else { | ||||
| 	    printf("Server stats: %s\n", host); | ||||
| 	} | ||||
|  | ||||
| 	(void) memset((char *)¬ice, 0, sizeof(notice)); | ||||
| 	notice.z_kind = UNSAFE; | ||||
| 	notice.z_port = 0; | ||||
| 	notice.z_charset = ZCHARSET_UNKNOWN; | ||||
| 	notice.z_class = ZEPHYR_ADMIN_CLASS; | ||||
| 	notice.z_class_inst = ""; | ||||
| 	notice.z_opcode = ADMIN_STATUS; | ||||
| 	notice.z_sender = ""; | ||||
| 	notice.z_recipient = ""; | ||||
| 	notice.z_default_format = ""; | ||||
| 	notice.z_message_len = 0; | ||||
|  | ||||
| 	if ((ret = ZSetDestAddr(&sin)) != ZERR_NONE) { | ||||
| 		com_err("zstat", ret, "setting destination"); | ||||
| 		exit(-1); | ||||
| 	} | ||||
| 	if ((ret = ZSendNotice(¬ice, ZNOAUTH)) != ZERR_NONE) { | ||||
| 		com_err("zstat", ret, "sending notice"); | ||||
| 		exit(-1); | ||||
| 	} | ||||
|  | ||||
| #ifdef _POSIX_VERSION | ||||
| 	sigemptyset(&sa.sa_mask); | ||||
| 	sa.sa_flags = 0; | ||||
| 	sa.sa_handler = timeout; | ||||
| 	(void) sigaction(SIGALRM, &sa, (struct sigaction *)0); | ||||
| #else | ||||
| 	(void) signal(SIGALRM,timeout); | ||||
| #endif | ||||
| 	outoftime = 0; | ||||
| 	(void) alarm(10); | ||||
| 	if (((ret = ZReceiveNotice(¬ice, (struct sockaddr_in *) 0)) | ||||
| 	    != ZERR_NONE) && | ||||
| 	    ret != EINTR) { | ||||
| 		com_err("zstat", ret, "receiving notice"); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	(void) alarm(0); | ||||
| 	if (outoftime) { | ||||
| 		fprintf(stderr,"No response after 10 seconds.\n"); | ||||
| 		return (1); | ||||
| 	} | ||||
|  | ||||
| 	mp = notice.z_message; | ||||
| 	for (nf=0;mp<notice.z_message+notice.z_message_len;nf++) { | ||||
| 		line[nf] = mp; | ||||
| 		mp += strlen(mp)+1; | ||||
| 	} | ||||
|  | ||||
| 	printf("Server protocol version = %s\n",notice.z_version); | ||||
|  | ||||
| 	for (i=0; i < nf; i++) { | ||||
| 		if (i < 2) | ||||
| 			printf("%s %s\n",srv_head[i],line[i]); | ||||
| 		else if (i == 2) { /* uptime field */ | ||||
| 			runtime = atol(line[i]); | ||||
| 			tim = gmtime(&runtime); | ||||
| 			printf("%s %d days, %02d:%02d:%02d\n", | ||||
| 			       srv_head[i], | ||||
| 			       tim->tm_yday, | ||||
| 			       tim->tm_hour, | ||||
| 			       tim->tm_min, | ||||
| 			       tim->tm_sec); | ||||
| 		} else if (i == 3) { | ||||
| 			printf("%s\n",srv_head[i]); | ||||
| 			printf("%s\n",line[i]); | ||||
| 		} else printf("%s\n",line[i]); | ||||
| 	} | ||||
| 	printf("\n"); | ||||
|  | ||||
| 	(void) close(sock); | ||||
| 	ZFreeNotice(¬ice); | ||||
| 	return(0); | ||||
| } | ||||
|  | ||||
| void | ||||
| usage(char *s) | ||||
| { | ||||
| 	fprintf(stderr,"usage: %s [-s] [-h] [host ...]\n",s); | ||||
| 	exit(1); | ||||
| } | ||||
							
								
								
									
										56
									
								
								clients/zwrite/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								clients/zwrite/Makefile.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| SHELL=@SHELL@ | ||||
|  | ||||
| prefix=@prefix@ | ||||
| exec_prefix=@exec_prefix@ | ||||
| datadir=@datadir@ | ||||
| sysconfdir=@sysconfdir@ | ||||
| sbindir=@sbindir@ | ||||
| lsbindir=@lsbindir@ | ||||
| datarootdir=@datarootdir@ | ||||
|  | ||||
| includedir=@includedir@ | ||||
| mandir=@mandir@ | ||||
| libdir=@libdir@ | ||||
| bindir=@bindir@ | ||||
| top_builddir=../.. | ||||
|  | ||||
| srcdir=@srcdir@ | ||||
| top_srcdir=@top_srcdir@ | ||||
| BUILDTOP=../.. | ||||
| VPATH=@srcdir@ | ||||
| LIBTOOL=@LIBTOOL@ | ||||
| CC=@CC@ | ||||
| INSTALL=@INSTALL@ | ||||
|  | ||||
| LIBZEPHYR=${BUILDTOP}/lib/libzephyr.la | ||||
| CPPFLAGS=@CPPFLAGS@ | ||||
| CFLAGS=@CFLAGS@ | ||||
| ALL_CFLAGS=${CFLAGS} -I${top_srcdir}/h -I${BUILDTOP}/h ${CPPFLAGS} | ||||
| LDFLAGS=@LDFLAGS@ | ||||
| LIBS=${LIBZEPHYR} @LIBS@ -lcom_err | ||||
|  | ||||
| OBJS=	zwrite.o | ||||
|  | ||||
| all: zwrite | ||||
|  | ||||
| zwrite: ${OBJS} ${LIBZEPHYR} | ||||
| 	${LIBTOOL} --mode=link ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LIBS} | ||||
|  | ||||
| .c.o: | ||||
| 	${CC} -c ${ALL_CFLAGS} $< | ||||
|  | ||||
| check: | ||||
|  | ||||
| install: zwrite | ||||
| 	${LIBTOOL} --mode=install ${INSTALL} -m 755 zwrite ${DESTDIR}${bindir} | ||||
| 	${INSTALL} -m 644 ${srcdir}/zwrite.1 ${DESTDIR}${mandir}/man1 | ||||
|  | ||||
| clean: | ||||
| 	${LIBTOOL} --mode=clean rm -f zwrite | ||||
| 	rm -f ${OBJS} | ||||
|  | ||||
| ${OBJS}: ${top_srcdir}/h/sysdep.h ${BUILDTOP}/h/config.h | ||||
| ${OBJS}: ${BUILDTOP}/h/zephyr/zephyr.h ${BUILDTOP}/h/zephyr/zephyr_err.h | ||||
|  | ||||
| .PHONY: all check install clean | ||||
|  | ||||
							
								
								
									
										290
									
								
								clients/zwrite/zwrite.1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										290
									
								
								clients/zwrite/zwrite.1
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,290 @@ | ||||
| .\"	$Id$ | ||||
| .\" | ||||
| .\" Copyright 1987,1988 by the Massachusetts Institute of Technology | ||||
| .\" All rights reserved.  The file /usr/include/zephyr/mit-copyright.h | ||||
| .\" specifies the terms and conditions for redistribution. | ||||
| .\" | ||||
| .\" | ||||
| .TH ZWRITE 1 "October 26, 1989" "MIT Project Athena" | ||||
| .ds ]W MIT Project Athena | ||||
| .SH NAME | ||||
| zwrite \- write to another user via Zephyr | ||||
| .SH SYNOPSIS | ||||
| .B zwrite | ||||
| [ | ||||
| .BI \-a | ||||
| ] [ | ||||
| .BI \-d | ||||
| ] [ | ||||
| .BI \-v | ||||
| ] [ | ||||
| .BI \-q | ||||
| ] [ | ||||
| .BI \-t | ||||
| ] [ | ||||
| .BI \-u | ||||
| ] [ | ||||
| .BI \-o | ||||
| ] [ | ||||
| .BI \-n | ||||
| ] [ | ||||
| .BI \-l | ||||
| ] [ | ||||
| .BI \-C | ||||
| ] [ | ||||
| .BI \-U | ||||
| ] [ | ||||
| .BI \-O | ||||
| opcode ] [ | ||||
| .BI \-s | ||||
| signature ] [ | ||||
| .BI \-c | ||||
| class ] [ | ||||
| .BI \-i | ||||
| instance ] [ | ||||
| .BI \-r | ||||
| realm ] [ | ||||
| .BI \-f | ||||
| arg ] [ | ||||
| .BI \-S | ||||
| sender ] [ | ||||
| .BI user \ ... | ||||
| ] [ | ||||
| .BI \-m | ||||
| .BI message | ||||
| ] | ||||
| .SH DESCRIPTION | ||||
| .I Zwrite | ||||
| sends a message from you to another user through the | ||||
| .I zephyr(1) | ||||
| notification service.  The user must have subscribed to messages of | ||||
| the appropriate class and instance using the | ||||
| .I zctl(1) | ||||
| program. | ||||
| .PP | ||||
| .I Zwrite | ||||
| understands the following options. | ||||
| .TP 12 | ||||
| .B \-a | ||||
| Causes | ||||
| .I zwrite | ||||
| to send the message authenticated, using | ||||
| .I Kerberos | ||||
| to perform the authentication.  This is the default. | ||||
| .TP | ||||
| .B \-d | ||||
| Causes | ||||
| .I zwrite | ||||
| to send the message unauthenticated. | ||||
| .TP | ||||
| .B \-v | ||||
| Causes | ||||
| .I zwrite | ||||
| to print what type of message it is sending, and whether or not it was | ||||
| successful. | ||||
| .TP | ||||
| .B \-q | ||||
| Forces | ||||
| .I zwrite | ||||
| to suppress information about whether or not the message was sent. | ||||
| .TP | ||||
| .B \-t | ||||
| Prevents | ||||
| .I zwrite | ||||
| from expanding tabs in the message into appropriate spaces.  Normally | ||||
| .I zwrite | ||||
| will expand any tabs it finds into the appropriate number of spaces to | ||||
| maintain separation based on 8-character tab stops. | ||||
| .TP | ||||
| .B \-l | ||||
| Causes | ||||
| .I zwrite | ||||
| to ignore `.' on a line by itself in the input and only end a typed | ||||
| message when the user types the end-of-file character (usually | ||||
| control-D).  When the input is not a terminal, this is the default action. | ||||
| .TP | ||||
| .B \-u | ||||
| Sends an urgent message.  This changes the | ||||
| .I zephyr | ||||
| instance of the message to ``URGENT''. | ||||
| .TP | ||||
| .B \-o | ||||
| Causes | ||||
| .I zwrite | ||||
| to ignore the Zephyr variables  | ||||
| .IR zwrite-class , | ||||
| .IR zwrite-inst , | ||||
| and | ||||
| .I zwrite-opcode | ||||
| when picking a default class, instance, and opcode. | ||||
| .TP | ||||
| .B \-n | ||||
| prevents | ||||
| .I zwrite | ||||
| from sending a PING message to verify the recipient is subscribing to | ||||
| messages.  By default, | ||||
| .I zwrite | ||||
| will send a notice to the destination class, instance, and recipient, | ||||
| with opcode ``PING'' before sending the message.  If the PING is sent, | ||||
| and the server response indicates there are no recipients subscribed to | ||||
| your message, | ||||
| .I zwrite | ||||
| exits without sending a message. | ||||
| When the | ||||
| .B \-n | ||||
| option is used, no PING is sent. | ||||
| .TP | ||||
| .B \-C | ||||
| prepends a "CC:" line to the body of the message indicating the | ||||
| recipients of the message. This is strictly a convenience: the | ||||
| presence of a "CC:" line at the top of a zephyr body does not | ||||
| necessarily indicate that this option was used, or that the message | ||||
| really was sent to the listed users, and its lack doesn't indicate | ||||
| that the message was not sent to multiple users. | ||||
| .TP | ||||
| .B \-U | ||||
| Send an unacked message. | ||||
| .I zwrite | ||||
| will not wait for acknowledgement that the message was sent, nor will | ||||
| it issue a PING before sending. | ||||
| .TP | ||||
| .B \-s \fIsignature\fR | ||||
| sets the signature to be included in the message.  This overrides both | ||||
| the user's name (as found in the password file) and any | ||||
| setting of the Zephyr variable  | ||||
| .IR zwrite-signature . | ||||
| .I signature | ||||
| must | ||||
| be a single argument, hence when using a shell it should be quoted with | ||||
| double quotes.  A | ||||
| .I signature | ||||
| argument of "" leaves the signature in | ||||
| the message empty. | ||||
| .TP | ||||
| .B \-c \fIclass\fR | ||||
| Allows a user to specify a different class for the message.  This allows | ||||
| a message to be sent to a large group of people with some degree of | ||||
| security.  See | ||||
| .I zephyr(1) | ||||
| and | ||||
| .I zephyrd(8) | ||||
| for a description of how to restrict access to classes.  When this option | ||||
| is specified, the message is sent to recipient "*" unless an additional | ||||
| list of recipients is specified. | ||||
| .br | ||||
| This argument may not be used in conjunction with the \-f option. | ||||
| .TP | ||||
| .B \-i \fIinstance\fR | ||||
| Allows a user to specify a different instance than the default. | ||||
| When this option is used, the message is sent to recipient "*" unless an | ||||
| additional list of recipients is specified.  This allows a message to be | ||||
| sent to a large group of people (e.g. a development group) just by having | ||||
| the members subscribe to messages of class "MESSAGE", the specified instance, | ||||
| and recipient "*". | ||||
| .br | ||||
| This argument may not be used in conjunction with the \-f option. | ||||
| .TP | ||||
| .B \-r \fIrealm\fR | ||||
| Allows a user to specify a different realm for the message, if the | ||||
| server supports interrealm Zephyr. | ||||
| .TP | ||||
| .B \-S \fIsender\fR | ||||
| Specify a sender.  The message will be sent unauthenticated. | ||||
| .TP | ||||
| .B \-F \fIformat\fR | ||||
| Allows a user to specify a different default format for the message. | ||||
| .TP | ||||
| .B \-O \fIopcode\fR | ||||
| Allows a user to specify a different opcode for the message. | ||||
| Some Zephyr notice display programs may use the opcode to decide how | ||||
| to display a notice. | ||||
| .TP | ||||
| .B \-f \fIarg\fR | ||||
| Allows a user to specify an argument to be interpreted as a filesystem | ||||
| specification.  The class is set to  | ||||
| .BR FILSRV . | ||||
| he instance is set | ||||
| to | ||||
| .I arg | ||||
| as modified: | ||||
| If | ||||
| .I arg | ||||
| contains no colons (`:'), it is assumed to | ||||
| be a host name, and it is converted into an official host name via  | ||||
| .I gethostbyname(3). | ||||
| If | ||||
| .I arg | ||||
| contains a colon, the portion preceding the colon is | ||||
| treated as a host name, and the colon and any trailing characters are | ||||
| appended to the offical host name returned by | ||||
| .I gethostbyname. | ||||
| If the name fails to resolve into an official host name, the instance is | ||||
| set to | ||||
| .I arg | ||||
| unmodified. | ||||
| .br | ||||
| This option may not be used in conjunction with the \-c or \-i option. | ||||
| .TP | ||||
| .B \-m | ||||
| .I Zwrite | ||||
| sends the remaining arguments on the command line as the message. | ||||
| .PP | ||||
| If the | ||||
| .I \-m | ||||
| option is not specified, the user is prompted for the message to be | ||||
| sent.  The message may be terminated by typing ^D or ``.'' on a line | ||||
| by itself. | ||||
| .PP | ||||
| The default class for messages is ``MESSAGE'', the default instance | ||||
| is ``PERSONAL'', andthe default opcode is ``'' (an empty string). | ||||
| These defaults can be overridden by setting the Zephyr | ||||
| variables | ||||
| .IR zwrite-class , | ||||
| .IR zwrite-inst , | ||||
| and | ||||
| .IR zwrite-opcode , | ||||
| respectively. | ||||
| Command-line options can override the defaults. | ||||
| .PP | ||||
| If the class is ``MESSAGE'' and the instance is either ``PERSONAL'' or | ||||
| ``URGENT'', a recipient must be specified.  These comparisons are | ||||
| case-sensitive. | ||||
| .PP | ||||
| Unless the | ||||
| .B \-s | ||||
| option is used, the contents of the Zephyr variable | ||||
| .I zwrite-signature | ||||
| are used to augment the user's username in the | ||||
| message.  If | ||||
| .I zwrite-signature | ||||
| is not set and the | ||||
| .B \-s | ||||
| option is not specified, the user's full name (as specified in the | ||||
| password file) is used instead. | ||||
| .SH BUGS | ||||
| Tab expansion should really be done by the receiver of the message. | ||||
| .br | ||||
| The \-u option is provided for compatibility with old versions of | ||||
| .I zwrite | ||||
| and is not necessarily useful for sending messages to users who do not | ||||
| have old subscription files. | ||||
| .SH SEE ALSO | ||||
| kerberosintro(1), zctl(1), zephyr(1), zwgc(1), zhm(8), zephyrd(8), | ||||
| gethostbyname(3) | ||||
| .br | ||||
| Project Athena Technical Plan Section E.4.1, `Zephyr Notification | ||||
| Service' | ||||
| .SH FILES | ||||
| /etc/passwd | ||||
| .br | ||||
| $ZEPHYR_VARS or $HOME/.zephyr.vars | ||||
| .SH AUTHOR | ||||
| .PP | ||||
| .br | ||||
| Robert S. French (MIT-Project Athena) | ||||
| .SH RESTRICTIONS | ||||
| Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
| All Rights Reserved. | ||||
| .br | ||||
| .I zephyr(1) | ||||
| specifies the terms and conditions for redistribution. | ||||
							
								
								
									
										568
									
								
								clients/zwrite/zwrite.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										568
									
								
								clients/zwrite/zwrite.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,568 @@ | ||||
| /* This file is part of the Project Athena Zephyr Notification System. | ||||
|  * It contains code for the "zwrite" command. | ||||
|  * | ||||
|  *	Created by:	Robert French | ||||
|  * | ||||
|  *	$Id$ | ||||
|  * | ||||
|  *	Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. | ||||
|  *	For copying and distribution information, see the file | ||||
|  *	"mit-copyright.h".  | ||||
|  */ | ||||
|  | ||||
| #include <sysdep.h> | ||||
| #include <zephyr/mit-copyright.h> | ||||
| #include <zephyr/zephyr.h> | ||||
| #include <netdb.h> | ||||
| #include <pwd.h> | ||||
|  | ||||
| #ifndef lint | ||||
| static const char rcsid_zwrite_c[] = "$Id$"; | ||||
| #endif /* lint */ | ||||
|  | ||||
| #define DEFAULT_CLASS "MESSAGE" | ||||
| #define DEFAULT_INSTANCE "PERSONAL" | ||||
| #define URGENT_INSTANCE "URGENT" | ||||
| #define DEFAULT_OPCODE "" | ||||
| #define FILSRV_CLASS "FILSRV" | ||||
|  | ||||
| #define MAXRECIPS 100 | ||||
|  | ||||
| int nrecips, msgarg, verbose, quiet, nodot, cc; | ||||
| char *whoami, *inst, *class, *opcode, *realm, *recips[MAXRECIPS], *sender = 0; | ||||
| Z_AuthProc auth; | ||||
| ZNotice_Kind_t kind = ACKED; | ||||
| void un_tabify(char **, int *); | ||||
|  | ||||
| char *fix_filsrv_inst(char *); | ||||
| void usage(char *); | ||||
| void send_off(ZNotice_t *, int); | ||||
|  | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
|     int retval, arg, nocheck, nchars, msgsize, filsys, tabexpand; | ||||
|     char *message, *signature = NULL, *format = NULL; | ||||
|     static char bfr[BUFSIZ], classbfr[BUFSIZ], instbfr[BUFSIZ], sigbfr[BUFSIZ]; | ||||
|     static char opbfr[BUFSIZ]; | ||||
|     static ZNotice_t notice; | ||||
|     char *charset = NULL; | ||||
|  | ||||
|     whoami = argv[0]; | ||||
|  | ||||
|     if ((retval = ZInitialize()) != ZERR_NONE) { | ||||
| 	com_err(whoami, retval, "while initializing"); | ||||
| 	exit(1); | ||||
|     } | ||||
|  | ||||
|     if (argc < 2) | ||||
| 	usage(whoami); | ||||
|  | ||||
|     auth = ZAUTH; | ||||
|     verbose = quiet = msgarg = nrecips = nocheck = filsys = nodot = 0; | ||||
|     tabexpand = 1; | ||||
|  | ||||
|     class = ZGetVariable("zwrite-class"); | ||||
|     if (class) { | ||||
| 	(void) strcpy(classbfr, class); | ||||
| 	class = classbfr; | ||||
|     } | ||||
|     else | ||||
| 	class = DEFAULT_CLASS; | ||||
|     inst = ZGetVariable("zwrite-inst"); | ||||
|     if (inst) { | ||||
| 	(void) strcpy(instbfr, inst); | ||||
| 	inst = instbfr; | ||||
|     } | ||||
|     else | ||||
| 	inst = DEFAULT_INSTANCE; | ||||
|  | ||||
|     opcode = ZGetVariable("zwrite-opcode"); | ||||
|     if (opcode) | ||||
|       opcode = strcpy(opbfr, opcode); | ||||
|     else | ||||
|       opcode = DEFAULT_OPCODE; | ||||
|  | ||||
|       signature = ZGetVariable("zwrite-signature"); | ||||
|     if (signature) { | ||||
| 	(void) strcpy(sigbfr, signature); | ||||
| 	signature = sigbfr; | ||||
|     }  | ||||
| 	 | ||||
|     arg = 1; | ||||
| 	 | ||||
|     for (;arg<argc && !msgarg; arg++) { | ||||
| 	if (*argv[arg] != '-') { | ||||
| 	    recips[nrecips++] = argv[arg]; | ||||
| 	    continue; | ||||
| 	}  | ||||
| 	if (strlen(argv[arg]) > 2) | ||||
| 	    usage(whoami); | ||||
| 	switch (argv[arg][1]) { | ||||
| 	case 'a':		/* Backwards compatibility */ | ||||
| 	    auth = ZAUTH; | ||||
| 	    break; | ||||
| 	case 'o': | ||||
| 	    class = DEFAULT_CLASS; | ||||
| 	    inst = DEFAULT_INSTANCE; | ||||
| 	    opcode = DEFAULT_OPCODE; | ||||
| 	    break; | ||||
| 	case 'd': | ||||
| 	    auth = ZNOAUTH; | ||||
| 	    break; | ||||
| 	case 'v': | ||||
| 	    verbose = 1; | ||||
| 	    break; | ||||
| 	case 'q': | ||||
| 	    quiet = 1; | ||||
| 	    break; | ||||
| 	case 'n': | ||||
| 	    nocheck = 1; | ||||
| 	    break; | ||||
| 	case 't': | ||||
| 	    tabexpand = 0; | ||||
| 	    break; | ||||
| 	case 'u': | ||||
| 	    inst = URGENT_INSTANCE; | ||||
| 	    break; | ||||
| 	case 'O': | ||||
| 	    if (arg == argc-1) | ||||
| 	      usage(whoami); | ||||
| 	    arg++; | ||||
| 	    opcode = argv[arg]; | ||||
| 	    break; | ||||
| 	case 'i': | ||||
| 	    if (arg == argc-1 || filsys == 1) | ||||
| 		usage(whoami); | ||||
| 	    arg++; | ||||
| 	    inst = argv[arg]; | ||||
| 	    filsys = -1; | ||||
| 	    break; | ||||
| 	case 'c': | ||||
| 	    if (arg == argc-1 || filsys == 1) | ||||
| 		usage(whoami); | ||||
| 	    arg++; | ||||
| 	    class = argv[arg]; | ||||
| 	    filsys = -1; | ||||
| 	    break; | ||||
| 	case 'f': | ||||
| 	    if (arg == argc-1 || filsys == -1) | ||||
| 		usage(whoami); | ||||
| 	    arg++; | ||||
| 	    class = FILSRV_CLASS; | ||||
| 	    inst = fix_filsrv_inst(argv[arg]); | ||||
| 	    filsys = 1; | ||||
| 	    nocheck = 1;		/* implied -n (no ping) */ | ||||
| 	    break; | ||||
| 	case 's': | ||||
| 	    if (arg == argc-1) | ||||
| 		usage(whoami); | ||||
| 	    arg++; | ||||
| 	    signature = argv[arg]; | ||||
| 	    break; | ||||
| 	case 'm': | ||||
| 	    if (arg == argc-1) | ||||
| 		usage(whoami); | ||||
| 	    nocheck = 1;		/* implied -n (no ping) */ | ||||
| 	    msgarg = arg+1; | ||||
| 	    break; | ||||
| 	case 'l':			/* literal */ | ||||
| 	    nodot = 1; | ||||
| 	    break; | ||||
| 	case 'F': | ||||
| 	    if (arg == argc-1) | ||||
| 		usage(whoami); | ||||
| 	    arg++; | ||||
| 	    format = argv[arg]; | ||||
| 	    break; | ||||
| 	case 'r': | ||||
| 	    if (arg == argc-1) | ||||
| 		usage(whoami); | ||||
| 	    arg++; | ||||
| 	    realm = argv[arg]; | ||||
| 	    break; | ||||
| 	case 'C': | ||||
| 	    cc = 1; | ||||
| 	    break; | ||||
| 	case 'x': | ||||
| 	    if (arg == argc-1) | ||||
| 		usage(whoami); | ||||
| 	    arg++; | ||||
| 	    charset = argv[arg]; | ||||
| 	    break; | ||||
| 	case 'S': | ||||
| 	    if (arg == argc-1) | ||||
| 		usage(whoami); | ||||
| 	    arg++; | ||||
| 	    sender = argv[arg]; | ||||
| 	    auth = ZNOAUTH; | ||||
| 	    break; | ||||
| 	case 'U': | ||||
| 	    kind = UNACKED; | ||||
| 	    nocheck = 1;		/* implied -n (no ping) */ | ||||
| 	    break; | ||||
| 	default: | ||||
| 	    usage(whoami); | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|     if (!nrecips && !(strcmp(class, DEFAULT_CLASS) || | ||||
| 		      (strcmp(inst, DEFAULT_INSTANCE) && | ||||
| 		       strcmp(inst, URGENT_INSTANCE)))) { | ||||
| 	/* must specify recipient if using default class and | ||||
| 	   (default instance or urgent instance) */ | ||||
| 	fprintf(stderr, "No recipients specified.\n"); | ||||
| 	usage(whoami); | ||||
|     } | ||||
|  | ||||
|     if (!signature) { | ||||
| 	/* try to find name in the password file */ | ||||
| 	register struct passwd *pwd; | ||||
| 	register char *cp = sigbfr; | ||||
| 	register char *cp2, *pp; | ||||
|  | ||||
| 	pwd = getpwuid(getuid()); | ||||
| 	if (pwd) { | ||||
| 	    cp2 = pwd->pw_gecos; | ||||
| 	    for (; *cp2 && *cp2 != ',' ; cp2++) { | ||||
| 		if (*cp2 == '&') { | ||||
| 		    pp = pwd->pw_name; | ||||
| 		    *cp++ = islower(*pp) ? toupper(*pp) : *pp; | ||||
| 		    pp++; | ||||
| 		    while (*pp) | ||||
| 			*cp++ = *pp++; | ||||
| 		} else | ||||
| 		    *cp++ = *cp2; | ||||
| 	    } | ||||
| 	    signature = sigbfr; | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|     memset(¬ice, 0, sizeof(ZNotice_t)); | ||||
|     notice.z_kind = kind; | ||||
|     notice.z_port = 0; | ||||
|     notice.z_class = class; | ||||
|     notice.z_class_inst = inst; | ||||
|     notice.z_opcode = "PING"; | ||||
|     notice.z_sender = sender; | ||||
|     notice.z_message_len = 0; | ||||
|     notice.z_recipient = ""; | ||||
|     notice.z_charset = ZGetCharset(charset); | ||||
|     if (format) | ||||
| 	    notice.z_default_format = format; | ||||
|     else | ||||
| 	    notice.z_default_format = "http://zephyr.1ts.org/wiki/df"; | ||||
|     if (!nocheck && nrecips) | ||||
| 	send_off(¬ice, 0); | ||||
| 	 | ||||
|     if (!msgarg && isatty(0)) { | ||||
| 	if (nodot) | ||||
| 	    printf("Type your message now.  End with the end-of-file character.\n"); | ||||
| 	else | ||||
| 	    printf("Type your message now.  End with control-D or a dot on a line by itself.\n"); | ||||
|     } | ||||
| 	 | ||||
|     message = NULL; | ||||
|     msgsize = 0; | ||||
|     if (signature) { | ||||
| 	message = malloc((unsigned)(strlen(signature)+2)); | ||||
| 	(void) strcpy(message, signature); | ||||
| 	msgsize = strlen(message); | ||||
| 	message[msgsize++] = '\0'; | ||||
|     } else { | ||||
| 	message = malloc(1); | ||||
| 	message[msgsize++] = '\0'; | ||||
|     } | ||||
|  | ||||
|     if (cc && nrecips > 1) { | ||||
|         int size = msgsize; | ||||
|     	for (arg=0;arg<nrecips;arg++) | ||||
| 	    size += (strlen(recips[arg]) + 2); | ||||
| 	size += 6;			/* for the newlines and "cc: " */ | ||||
| 	message = realloc(message, (unsigned) size); | ||||
| 	(void) strcpy(message+msgsize, "CC: "); | ||||
| 	msgsize += 4; | ||||
| 	for (arg=0;arg<nrecips;arg++) { | ||||
| 	    (void) strcpy(message+msgsize, recips[arg]); | ||||
| 	    msgsize += strlen(recips[arg]); | ||||
| 	    if (arg != nrecips-1) { | ||||
| 		message[msgsize] = ' '; | ||||
| 		msgsize++; | ||||
| 	    } | ||||
| 	} | ||||
| 	message[msgsize] = '\n'; | ||||
| 	msgsize += 1; | ||||
|     } | ||||
|  | ||||
|     if (msgarg) { | ||||
| 	int size = msgsize; | ||||
| 	for (arg=msgarg;arg<argc;arg++) | ||||
| 		size += (strlen(argv[arg]) + 1); | ||||
| 	size++;				/* for the newline */ | ||||
| 	message = realloc(message, (unsigned) size); | ||||
| 	for (arg=msgarg;arg<argc;arg++) { | ||||
| 	    (void) strcpy(message+msgsize, argv[arg]); | ||||
| 	    msgsize += strlen(argv[arg]); | ||||
| 	    if (arg != argc-1) { | ||||
| 		message[msgsize] = ' '; | ||||
| 		msgsize++; | ||||
| 	    }  | ||||
| 	} | ||||
| 	message[msgsize] = '\n'; | ||||
| 	msgsize += 1; | ||||
|     } else { | ||||
| 	if (isatty(0)) { | ||||
| 	    for (;;) { | ||||
| 		unsigned int l; | ||||
| 		if (!fgets(bfr, sizeof bfr, stdin)) | ||||
| 		    break; | ||||
| 		if (!nodot && bfr[0] == '.' && | ||||
| 		    (bfr[1] == '\n' || bfr[1] == '\0')) | ||||
| 		    break; | ||||
| 		l = strlen(bfr); | ||||
| 		message = realloc(message, msgsize+l+1); | ||||
| 		(void) strcpy(message+msgsize, bfr); | ||||
| 		msgsize += l; | ||||
| 	    } | ||||
| 	    if (ferror(stdin)) /* drop the message */ | ||||
| 		exit(1); | ||||
| 	    message = realloc(message, (unsigned)(msgsize+1)); | ||||
| 	} | ||||
| 	else {	/* Use read so you can send binary messages... */ | ||||
| 	    while ((nchars = read(fileno(stdin), bfr, sizeof bfr))) { | ||||
| 		if (nchars == -1) { | ||||
| 		    fprintf(stderr, "Read error from stdin!  Can't continue!\n"); | ||||
| 		    exit(1); | ||||
| 		} | ||||
| 		message = realloc(message, (unsigned)(msgsize+nchars)); | ||||
| 		(void) memcpy(message+msgsize, bfr, nchars); | ||||
| 		msgsize += nchars; | ||||
| 	    } | ||||
| 	    /* end of msg */ | ||||
| 	    message = realloc(message, (unsigned)(msgsize+1)); | ||||
| 	}  | ||||
|     } | ||||
|  | ||||
|     notice.z_opcode = opcode; | ||||
|     if (tabexpand) | ||||
| 	un_tabify(&message, &msgsize); | ||||
|     notice.z_message = message; | ||||
|     notice.z_message_len = msgsize; | ||||
|  | ||||
|     send_off(¬ice, 1); | ||||
|     exit(0); | ||||
| } | ||||
|  | ||||
| void | ||||
| send_off(ZNotice_t *notice, int real) | ||||
| { | ||||
|     int i, success, retval; | ||||
|     char realm_recip[BUFSIZ], dest[3 * BUFSIZ]; | ||||
|     ZNotice_t retnotice; | ||||
|  | ||||
|     success = 0; | ||||
| 	 | ||||
|     for (i=0;i<nrecips || i==0;i++) { | ||||
| 	if (realm) { | ||||
| 	    sprintf(realm_recip, "%s@%s", (nrecips) ? recips[i] : "", realm); | ||||
| 	    notice->z_recipient = realm_recip; | ||||
| 	} else { | ||||
| 	    notice->z_recipient = (nrecips) ? recips[i] : ""; | ||||
| 	} | ||||
| 	if (nrecips) | ||||
| 	    strcpy(dest, recips[i]); | ||||
| 	else if (!strcmp(class, DEFAULT_CLASS)) | ||||
| 	    sprintf(dest, "instance \"%s\"", inst); | ||||
| 	else if (!strcmp(inst, DEFAULT_INSTANCE)) | ||||
| 	    sprintf(dest, "class \"%s\"", class); | ||||
| 	else | ||||
| 	    sprintf(dest, "class \"%s\", instance \"%s\"", class, inst); | ||||
| 	if (verbose && real) | ||||
| 	    printf("Sending %smessage, class %s, instance %s, to %s\n",  | ||||
| 		   auth?"authenticated ":"",  | ||||
| 		   class, inst,  | ||||
| 		   nrecips?notice->z_recipient:"everyone"); | ||||
| 	if ((retval = ZSendNotice(notice, auth)) != ZERR_NONE) { | ||||
| 	    com_err(whoami, retval, "while sending notice to %s", dest); | ||||
| 	    break; | ||||
| 	} | ||||
| 	if (kind == UNACKED) | ||||
| 	    continue; | ||||
| 	if (real && !quiet) { | ||||
| 	    if (verbose) | ||||
| 		printf("Queued... "); | ||||
| 	    else | ||||
| 		printf("Message queued for %s... ", dest); | ||||
| 	    fflush(stdout); | ||||
| 	} | ||||
| 	if ((retval = ZIfNotice(&retnotice, (struct sockaddr_in *) 0, | ||||
| 				ZCompareUIDPred,  | ||||
| 				(char *)¬ice->z_uid)) != ZERR_NONE) { | ||||
| 	    com_err(whoami, retval, "while waiting for acknowledgement for %s", | ||||
| 		    dest); | ||||
| 	    continue; | ||||
| 	} | ||||
| 	if (retnotice.z_kind == SERVNAK) { | ||||
| 	    if (!quiet) { | ||||
| 		printf("Received authorization failure while sending to %s\n",  | ||||
| 		       dest); | ||||
| 	    } | ||||
| 	    ZFreeNotice(&retnotice); | ||||
| 	    break;			/* if auth fails, punt */ | ||||
| 	}  | ||||
| 	if (retnotice.z_kind != SERVACK || !retnotice.z_message_len) { | ||||
| 	    if (!quiet) { | ||||
| 		printf("Detected server failure while receiving acknowledgement for %s\n",  | ||||
| 		       dest); | ||||
| 	    } | ||||
| 	    ZFreeNotice(&retnotice); | ||||
| 	    continue; | ||||
| 	} | ||||
| 	if (!strcmp(retnotice.z_message, ZSRVACK_SENT)) { | ||||
| 	    success = 1; | ||||
| 	    if (real && !quiet) | ||||
| 		printf("sent\n"); | ||||
| 	} else if (!strcmp(retnotice.z_message, ZSRVACK_NOTSENT)) { | ||||
| 	    if (verbose && real && !quiet) { | ||||
| 		if (strcmp(class, DEFAULT_CLASS)) { | ||||
| 		    fprintf(stderr, "Not logged in or not subscribing to class %s, instance %s\n",  | ||||
| 			   class, inst); | ||||
| 		} else { | ||||
| 		    fprintf(stderr, | ||||
| 			    "Not logged in or not subscribing to messages\n"); | ||||
| 		} | ||||
| 	    }  | ||||
| 	    else if (!quiet) { | ||||
| 		if (!nrecips) { | ||||
| 		    fprintf(stderr, | ||||
| 			    "No one subscribing to class %s, instance %s\n",  | ||||
| 			    class, inst); | ||||
| 		} else { | ||||
| 		    if (strcmp(class, DEFAULT_CLASS)) { | ||||
| 			fprintf(stderr, "%s: Not logged in or not subscribing to class %s, instance %s\n",  | ||||
| 			       notice->z_recipient, class, inst); | ||||
| 		    } else { | ||||
| 			fprintf(stderr, "%s: Not logged in or not subscribing to messages\n",  | ||||
| 			       notice->z_recipient); | ||||
| 		    } | ||||
| 		} | ||||
| 	    } | ||||
| 	}  | ||||
| 	else | ||||
| 	    printf("Internal failure - illegal message field in server response\n"); | ||||
| 	ZFreeNotice(&retnotice); | ||||
|     } | ||||
|     if (!success) | ||||
| 	exit(1); | ||||
| }  | ||||
|  | ||||
| void | ||||
| usage(char *s) | ||||
| { | ||||
|     fprintf(stderr, | ||||
| 	    "Usage: %s [-a] [-o] [-d] [-v] [-q] [-n] [-t] [-u] [-l]\n\ | ||||
| \t[-c class] [-i inst] [-O opcode] [-f fsname] [-s signature] [-C]\n\ | ||||
| \t[user ...] [-F format] [-r realm] [-x charset] [-m message]\n", s); | ||||
|     fprintf(stderr,"\t-f and -c are mutually exclusive\n\ | ||||
| \t-f and -i are mutually exclusive\n\ | ||||
| \trecipients must be specified unless -c or -f specifies a class\n\ | ||||
| \tother than the default class or -i or -f specifies an instance\n\ | ||||
| \tother than the default or urgent instance\n"); | ||||
|     exit(1); | ||||
| }  | ||||
|  | ||||
| /* | ||||
|   if the -f option is specified, this routine is called to canonicalize | ||||
|   an instance of the form hostname[:pack].  It turns the hostname into the | ||||
|   name returned by gethostbyname(hostname) | ||||
|  */ | ||||
|  | ||||
| char * | ||||
| fix_filsrv_inst(char *str) | ||||
| { | ||||
| 	static char fsinst[BUFSIZ]; | ||||
| 	char *ptr; | ||||
| 	struct hostent *hp; | ||||
|  | ||||
| 	ptr = strchr(str,':'); | ||||
| 	if (ptr) | ||||
| 		*ptr = '\0'; | ||||
| 	 | ||||
| 	hp = gethostbyname(str); | ||||
| 	if (!hp) { | ||||
| 		if (ptr) | ||||
| 			*ptr = ':'; | ||||
| 		return(str); | ||||
| 	} | ||||
| 	(void) strcpy(fsinst, hp->h_name); | ||||
| 	if (ptr) { | ||||
| 		(void) strcat(fsinst, ":"); | ||||
| 		ptr++; | ||||
| 		(void) strcat(fsinst, ptr); | ||||
| 	} | ||||
| 	return(fsinst); | ||||
| } | ||||
|  | ||||
| /* convert tabs in the buffer into appropriate # of spaces. | ||||
|    slightly tricky since the buffer can have NUL's in it. */ | ||||
|  | ||||
| #ifndef TABSTOP | ||||
| #define	TABSTOP	8			/* #chars between tabstops */ | ||||
| #endif /* ! TABSTOP */ | ||||
|  | ||||
| void | ||||
| un_tabify(char **bufp, | ||||
| 	  int *sizep) | ||||
| { | ||||
|     register char *cp, *cp2; | ||||
|     char *cp3; | ||||
|     register int i; | ||||
|     register int column;		/* column of next character */ | ||||
|     register int size = *sizep; | ||||
|  | ||||
|     for (cp = *bufp, i = 0; size; size--, cp++) | ||||
| 	if (*cp == '\t') | ||||
| 	    i++;			/* count tabs in buffer */ | ||||
|  | ||||
|     if (!i) | ||||
| 	return;				/* no tabs == no work */ | ||||
|  | ||||
|     /* To avoid allocation churning, allocate enough extra space to convert | ||||
|        every tab into TABSTOP spaces */ | ||||
|     /* only add (TABSTOP-1)x because we re-use the cell holding the | ||||
|        tab itself */ | ||||
|     cp = malloc((unsigned)(*sizep + (i * (TABSTOP-1)))); | ||||
|     if (!cp)				/* XXX */ | ||||
| 	return;				/* punt expanding if memory fails */ | ||||
|     cp3 = cp; | ||||
|     /* Copy buffer, converting tabs to spaces as we go */ | ||||
|     for (cp2 = *bufp, column = 1, size = *sizep; size; cp2++, size--) { | ||||
| 	switch (*cp2) { | ||||
| 	case '\n': | ||||
| 	case '\0': | ||||
| 	    /* newline or null: reset column */ | ||||
| 	    column = 1; | ||||
| 	    *cp++ = *cp2;		/* copy the newline */ | ||||
| 	    break; | ||||
| 	default: | ||||
| 	    /* copy the character */ | ||||
| 	    *cp = *cp2; | ||||
| 	    cp++; | ||||
| 	    column++; | ||||
| 	    break; | ||||
| 	case '\t': | ||||
| 	    /* it's a tab, compute how many spaces to expand into. */ | ||||
| 	    i = TABSTOP - ((column - 1) % TABSTOP); | ||||
| 	    for (; i > 0; i--) { | ||||
| 		*cp++ = ' ';		/* fill in the spaces */ | ||||
| 		column++; | ||||
| 		(*sizep)++;		/* increment the size */ | ||||
| 	    } | ||||
| 	    (*sizep)--;			/* remove one (we replaced the tab) */ | ||||
| 	    break; | ||||
| 	} | ||||
|     } | ||||
|     free(*bufp);			/* free the old buf */ | ||||
|     *bufp = cp3; | ||||
|     return; | ||||
| } | ||||
							
								
								
									
										414
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										414
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,414 @@ | ||||
| dnl Process this file with autoconf to produce a configure script. | ||||
| AC_INIT([zephyr],[__DEV__]) | ||||
| AC_CONFIG_MACRO_DIR([m4]) | ||||
|  | ||||
| test -d h || mkdir h | ||||
| test -d h/zephyr || mkdir h/zephyr | ||||
|  | ||||
| test -z "$lbindir" && lbindir='${bindir}' | ||||
| test -z "$lsbindir" && lsbindir='${sbindir}' | ||||
| AC_SUBST(lbindir) | ||||
| AC_SUBST(lsbindir) | ||||
|  | ||||
| AC_CANONICAL_SYSTEM | ||||
| AC_CANONICAL_TARGET | ||||
| AC_DEFINE_UNQUOTED(MACHINE_TYPE, "$host", [Define to the type of the host system.]) | ||||
|  | ||||
| dnl Checks for programs. | ||||
| AC_PROG_CC | ||||
| AC_PROG_YACC | ||||
| AC_PROG_LEX | ||||
| AC_PROG_INSTALL | ||||
| AC_PROG_LIBTOOL | ||||
|  | ||||
| AC_MSG_CHECKING(location of temporary directory) | ||||
| if test -d /var/tmp; then | ||||
| 	found_tmp=/var/tmp/ | ||||
| elif test -d /usr/tmp; then | ||||
| 	found_tmp=/usr/tmp/ | ||||
| else | ||||
| 	found_tmp=/tmp/ | ||||
| fi | ||||
| AC_DEFINE_UNQUOTED(FOUND_TMP, "${found_tmp}", [Define to a temporary directory on your system.]) | ||||
| AC_MSG_RESULT(${found_tmp}) | ||||
|  | ||||
| dnl Checks for header files. | ||||
| AC_PATH_XTRA | ||||
| AC_HEADER_STDC | ||||
| AC_HEADER_SYS_WAIT | ||||
| AC_CHECK_HEADERS(fcntl.h paths.h sgtty.h unistd.h malloc.h) | ||||
| AC_CHECK_HEADERS(sys/filio.h sys/ioctl.h sys/time.h sys/file.h sys/utsname.h) | ||||
| AC_CHECK_HEADERS(sys/select.h sys/msgbuf.h sys/cdefs.h krb5_err.h termcap.h) | ||||
| AC_CHECK_HEADERS(arpa/nameser_compat.h stdbool.h termio.h curses.h) | ||||
| AC_CHECK_HEADERS([term.h], [], [], | ||||
| [#ifdef HAVE_CURSES_H | ||||
| #include <curses.h> | ||||
| #endif | ||||
| ]) | ||||
|  | ||||
| if test "$no_x" != "yes"; then | ||||
| 	ZWGC_LIBX11=-lX11 | ||||
| fi | ||||
| AC_SUBST(XCLIENTS) | ||||
| AC_SUBST(ZWGC_LIBX11) | ||||
|  | ||||
| dnl Checks for typedefs, structures, and compiler characteristics. | ||||
| AC_TYPE_SIGNAL | ||||
| AC_TYPE_UID_T | ||||
| AC_CHECK_SIZEOF(short) | ||||
| AC_CHECK_SIZEOF(int) | ||||
| AC_CHECK_SIZEOF(long) | ||||
| AC_MSG_CHECKING(for 32-bit integer type) | ||||
| if test "$ac_cv_sizeof_long" = 4; then | ||||
| 	int32=long | ||||
| elif test "$ac_cv_sizeof_int" = 4; then | ||||
| 	int32=int | ||||
| elif test "$ac_cv_sizeof_short" = 4; then | ||||
| 	int32=short | ||||
| else | ||||
| 	AC_WARN([Can't find 32-bit type, using long]) | ||||
| 	int32=long | ||||
| fi | ||||
| AC_DEFINE_UNQUOTED(ZEPHYR_INT32, ${int32}, [Define to a signed 32-bit integral type.]) | ||||
| AC_MSG_RESULT(${int32}) | ||||
|  | ||||
| AC_CHECK_LIB(w, wslen) | ||||
| # XXX? AC_CHECK_LIB(dl, dlopen) | ||||
|  | ||||
| AC_CHECK_MEMBER([struct sockaddr_in.sin_len], | ||||
| 		[AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, | ||||
| 		 [sockaddr_in has sin_len member])], | ||||
| 		[], [ | ||||
| #include <sys/types.h> | ||||
| #include <sys/socket.h> | ||||
| #include <netinet/in.h> | ||||
| ]) | ||||
|  | ||||
| AC_CHECK_MEMBER([struct sockaddr_in6.sin6_len], | ||||
| 		[AC_DEFINE(HAVE_SOCKADDR_IN6_SIN6_LEN, 1, | ||||
| 		 [sockaddr_in6 has sin6_len member])], | ||||
| 		[], [ | ||||
| #include <sys/types.h> | ||||
| #include <sys/socket.h> | ||||
| #include <netinet/in.h> | ||||
| ]) | ||||
|  | ||||
| AC_SEARCH_LIBS(gethostbyname, nsl) | ||||
| AC_SEARCH_LIBS(socket, socket) | ||||
|  | ||||
| AC_CHECK_LIB(44bsd, strerror) | ||||
|  | ||||
| AC_ARG_WITH(libiconv, | ||||
|         [  --with-libiconv=PREFIX  Location for libiconv], | ||||
|         [libiconv="$withval"], [libiconv=no]) | ||||
| if test "$libiconv" != no; then | ||||
|         CPPFLAGS="$CPPFLAGS -I$libiconv/include" | ||||
|         LDFLAGS="$LDFLAGS -L$libiconv/lib" | ||||
|         AC_CHECK_LIB(iconv, iconv_open, [LIBICONV=-liconv; AC_SUBST(LIBICONV)]) | ||||
| else | ||||
|         AC_CHECK_FUNC(iconv_open, :, | ||||
|                       AC_CHECK_LIB(iconv, iconv_open, [LIBICONV=-liconv; AC_SUBST(LIBICONV)])) | ||||
| fi | ||||
| AC_SUBST(LIBICONV) | ||||
|  | ||||
| AC_CHECK_LIB(curses, tgetstr, [TLIB=-lcurses], [TLIB=-ltermcap]) | ||||
| AC_SUBST(TLIB) | ||||
|  | ||||
| AC_ARG_WITH(krb4, | ||||
| 	[  --with-krb4=PREFIX      Use Kerberos 4], | ||||
| 	[krb4="$withval"], [krb4=no]) | ||||
| if test "$krb4" != no; then | ||||
| 	AC_CHECK_FUNC(gethostbyname, :, AC_CHECK_LIB(nsl, gethostbyname)) | ||||
| 	AC_CHECK_FUNC(socket, :, AC_CHECK_LIB(socket, socket)) | ||||
| 	AC_CHECK_LIB(gen, compile) | ||||
| 	if test "$krb4" != yes; then | ||||
| 	   CPPFLAGS="$CPPFLAGS -I$krb4/include" | ||||
| 	   if test -d "$krb4/include/kerberosIV"; then | ||||
| 	      CPPFLAGS="$CPPFLAGS -I$krb4/include/kerberosIV" | ||||
| 	   fi | ||||
| 	   LDFLAGS="$LDFLAGS -L$krb4/lib" | ||||
| 	fi | ||||
| 	AC_CHECK_LIB(krb4, krb_rd_req, | ||||
| 	     [KRB4_LIBS="-lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err"], | ||||
| 	     [AC_CHECK_LIB(des, des_quad_cksum, | ||||
| 			   [KRB4_DES_LIBS="-ldes"],,,) | ||||
| 	     AC_CHECK_LIB(krb, krb_rd_req, | ||||
| 			   [KRB4_LIBS="-lkrb $KRB4_DES_LIBS"], | ||||
| 			   [AC_MSG_ERROR(Kerberos 4 libraries not found)], | ||||
| 			   $KRB4_DES_LIBS)], | ||||
| 	     -ldes425 -lkrb5 -lk5crypto -lcom_err) | ||||
| 	AC_DEFINE(HAVE_KRB4, 1, [Define to compile with Kerberos support.]) | ||||
| 	LIBZEPHYR_LIBS="$LIBZEPHYR_LIBS $KRB4_LIBS" | ||||
| fi | ||||
| AC_SUBST(KRB4_LIBS) | ||||
|  | ||||
| AC_ARG_WITH(krb5, | ||||
| 	    [  --with-krb5=PREFIX      Use Kerberos 5], | ||||
| 	    [krb5="$withval"], [krb5=no]) | ||||
| if test "$krb5" != no; then | ||||
|    AC_SEARCH_LIBS(gethostbyname, nsl) | ||||
|    AC_SEARCH_LIBS(socket, socket) | ||||
|    AC_CHECK_LIB(gen, compile) | ||||
|    if test "$krb5" != yes; then | ||||
|       PATH="$krb5/bin:$PATH" | ||||
|    fi | ||||
|    AC_CHECK_PROG(krb5config, krb5-config,yes) | ||||
|    if test "$krb5config" = yes; then | ||||
|       CPPFLAGS="$CPPFLAGS $(krb5-config --cflags krb5)" | ||||
|       KRB5_LIBS="$(krb5-config --libs krb5)" | ||||
|    else | ||||
|       if test "$krb5" != yes; then | ||||
|       	 CPPFLAGS="$CPPFLAGS -I$krb5/include" | ||||
|       	 LDFLAGS="$LDFLAGS -L$krb5/lib" | ||||
|       fi | ||||
|       KRB5_LIBS="-lkrb5 -lk5crypto -lcom_err" | ||||
|    fi | ||||
|    AC_CHECK_HEADER(krb5.h, :, [AC_MSG_ERROR(Kerberos 5 headers not found)]) | ||||
|    local_save_LIBS=$LIBS | ||||
|    LIBS="$libs $KRB5_LIBS" | ||||
|    AC_CHECK_FUNC(krb5_init_context, :, | ||||
| 	           [AC_MSG_ERROR(Kerberos 5 libraries not found)]) | ||||
|    LIBS="$local_save_LIBS" | ||||
|    AC_DEFINE(HAVE_KRB5, 1, [Define to compile with Kerberos 5 support.]) | ||||
|    LIBZEPHYR_LIBS="$LIBZEPHYR_LIBS $KRB5_LIBS" | ||||
|    case "$target_os" in  | ||||
|       darwin*) KRB5_LIBS="$KRB5_LIBS -framework Kerberos" ;; | ||||
|    esac  | ||||
| fi | ||||
|  | ||||
| AC_ARG_WITH(hesiod, | ||||
| 	[  --with-hesiod=PREFIX    Use Hesiod], | ||||
| 	[hesiod="$withval"], [hesiod=no]) | ||||
|  | ||||
| if test "$krb5" != no || test "$hesiod" != no; then | ||||
|    # the zephyr library needs -lresolv if it's built with krb5 or hesiod | ||||
|    AC_CHECK_LIB([resolv], [res_mkquery], [], [ | ||||
|        AC_MSG_CHECKING([if res_mkquery is provided by libresolv with mangled symbols]) | ||||
|        save_LIBS="$LIBS" | ||||
|        LIBS="-lresolv $LIBS" | ||||
|        AC_TRY_LINK([#include <resolv.h>], | ||||
|            [res_mkquery(0,NULL,0,0,NULL,0,NULL,NULL,0);], [ | ||||
|                AC_DEFINE(HAVE_LIBRESOLV, [1], [Define if your libresolv provides res_mkquery.]) | ||||
|                LIBZEPHYR_LIBS="-lresolv $LIBZEPHYR_LIBS" | ||||
|                AC_MSG_RESULT(yes)], [ | ||||
|                LIBS="$save_LIBS" | ||||
|                AC_MSG_RESULT(no) | ||||
|                AC_MSG_ERROR(Zephyr requires libresolv along with Kerberos V or Hesiod.) | ||||
|                ])]) | ||||
| fi | ||||
|  | ||||
| AC_SUBST(KRB5_LIBS) | ||||
|  | ||||
| AC_SUBST(LIBZEPHYR_LIBS) | ||||
| if test "$hesiod" != no; then | ||||
|         if test "$hesiod" != yes; then | ||||
|         	CPPFLAGS="$CPPFLAGS -I$hesiod/include" | ||||
|         	LDFLAGS="$LDFLAGS -L$hesiod/lib" | ||||
|         fi | ||||
|         AC_CHECK_FUNC(hes_resolve, :, | ||||
|                       AC_CHECK_LIB(hesiod, hes_resolve, HESIOD_LIBS="-lhesiod", | ||||
|                                    [AC_MSG_ERROR(Hesiod library not found)],$LIBS)) | ||||
| 	AC_DEFINE(HAVE_HESIOD, 1, [Define to compile with Hesiod support.]) | ||||
| fi | ||||
|  | ||||
| AC_SUBST(HESIOD_LIBS) | ||||
|  | ||||
| AC_ARG_WITH(regex, | ||||
| 	[  --with-regex=PREFIX     Use installed regex library], | ||||
| 	[regex="$withval"], [regex=no]) | ||||
| if test "$regex" != no; then | ||||
| 	if test "$regex" != yes; then | ||||
| 		CPPFLAGS="$CPPFLAGS -I$regex/include" | ||||
| 		LDFLAGS="$LDFLAGS -L$regex/lib" | ||||
| 	fi | ||||
| 	AC_CHECK_LIB(regex, regcomp, REGEX_LIBS=-lregex, | ||||
| 		     [AC_MSG_ERROR(regex library not found)]) | ||||
| else | ||||
| 	AC_CHECK_FUNC(regcomp, :, | ||||
| 		      [AC_MSG_ERROR(can't find POSIX regexp support)]) | ||||
| fi | ||||
| AC_SUBST(REGEX_LIBS) | ||||
|  | ||||
| AC_ARG_WITH(com_err, | ||||
| 	[  --with-com_err=PREFIX   Specify location of com_err], | ||||
| 	[com_err="$withval"], [com_err=yes]) | ||||
| if test "$com_err" != no; then | ||||
| 	if test "$com_err" != yes; then | ||||
| 		CPPFLAGS="$CPPFLAGS -I$com_err/include" | ||||
| 		LDFLAGS="$LDFLAGS -L$com_err/lib" | ||||
| 	fi | ||||
| 	AC_CHECK_LIB(com_err, com_err, :, | ||||
| 		     [AC_MSG_ERROR(com_err library not found)]) | ||||
| else | ||||
| 	AC_MSG_ERROR(This package requires com_err.) | ||||
| fi | ||||
|  | ||||
| AC_ARG_WITH(ss, | ||||
| 	[  --with-ss=PREFIX        Specify location of ss (requires com_err)], | ||||
| 	[ss="$withval"], [ss=maybe]) | ||||
| if test "$ss" != no; then | ||||
| 	if test "$ss" != yes -a "$ss" != maybe; then | ||||
| 		CPPFLAGS="$CPPFLAGS -I$ss/include" | ||||
| 		LDFLAGS="$LDFLAGS -L$ss/lib" | ||||
| 	fi | ||||
| 	AC_CHECK_LIB(ss, ss_perror,  | ||||
|                      [SS_LIBS="-lss" | ||||
|                      AC_DEFINE(HAVE_SS, 1, [Define if we are building with the ss library])], | ||||
| 		     AS_IF([test "x$ss" != "xmaybe"], AC_MSG_ERROR(ss library not found)), | ||||
|                      -lcom_err) | ||||
|         SS_OBJS='${SS_OBJS}' | ||||
| fi | ||||
| AC_SUBST(SS_LIBS) | ||||
| AC_SUBST(SS_OBJS) | ||||
|  | ||||
| LIBS="$KRB5_LIBS $KRB4_LIBS $LIBS" | ||||
|  | ||||
| dnl Checks for library functions. | ||||
| #XXX more looking for res_send | ||||
| #AC_CHECK_FUNC(res_send, :, AC_CHECK_LIB(resolv, res_send)) | ||||
|  | ||||
| AC_ARG_WITH([cares], AS_HELP_STRING([--with-cares], [Use libcares])) | ||||
| if test "x$with_ares" != "xno"; then | ||||
|    AC_CHECK_LIB(cares, ares_getnameinfo, | ||||
| 		       [ARES_LIBS="-lcares" | ||||
| 		       AC_DEFINE(HAVE_ARES, 1, [Define to compile with c-ares support.])], | ||||
| 		       AS_IF([test "x$with_ares" = "xyes"], | ||||
| 			     AC_MSG_ERROR(libcares not found))) | ||||
| fi | ||||
| AC_SUBST(ARES_LIBS) | ||||
| 		     | ||||
| AC_PROG_GCC_TRADITIONAL | ||||
| AC_FUNC_VPRINTF | ||||
| AC_FUNC_GETPGRP | ||||
| AC_FUNC_SETPGRP | ||||
| AC_CHECK_FUNCS(putenv strchr memcpy memmove waitpid getlogin strerror random) | ||||
| AC_CHECK_FUNCS(lrand48 gethostid getsid getpgid etext) | ||||
| AC_CHECK_FUNCS(krb_get_err_text krb_log) | ||||
| AC_CHECK_FUNCS(krb5_free_data krb5_c_make_checksum krb5_cc_set_default_name) | ||||
| AC_CHECK_FUNCS(krb5_crypto_init krb5_c_decrypt krb5_free_unparsed_name) | ||||
|  | ||||
| AC_MSG_CHECKING(krb5_auth_con_getauthenticator out argument type) | ||||
| AC_CACHE_VAL(ac_cv_krb5_auth_con_getauthenticator_takes_double_pointer, [ | ||||
| local_save_CPPFLAGS="$CPPFLAGS" | ||||
| CPPFLAGS="${CPPFLAGS} ${KRB5_INC_FLAGS}" | ||||
| AC_TRY_COMPILE( | ||||
| [#include <krb5.h> | ||||
| krb5_error_code | ||||
| krb5_auth_con_getauthenticator(krb5_context context, | ||||
|                            krb5_auth_context auth_context, | ||||
|                            krb5_authenticator *authenticator);], | ||||
| [krb5_error_code foo = krb5_auth_con_getauthenticator(0, 0, 0);], | ||||
| ac_cv_krb5_auth_con_getauthenticator_takes_double_pointer=no, | ||||
| [AC_TRY_COMPILE( | ||||
| [#include <krb5.h> | ||||
| krb5_error_code | ||||
| krb5_auth_con_getauthenticator(krb5_context context, | ||||
|                            krb5_auth_context auth_context, | ||||
|                            krb5_authenticator **authenticator);], | ||||
| [krb5_error_code foo = krb5_auth_con_getauthenticator(0, 0, 0);], | ||||
| ac_cv_krb5_auth_con_getauthenticator_takes_double_pointer=yes, | ||||
| [AC_MSG_ERROR([Cannot identify krb5_auth_con_getauthenticator function signature])] | ||||
| )]) | ||||
| CPPFLAGS="${local_save_CPPFLAGS}" | ||||
| ]) | ||||
| krb5_authent_type='krb5_authenticator *' | ||||
| if test "$ac_cv_krb5_auth_con_getauthenticator_takes_double_pointer" = yes; then | ||||
|         AC_DEFINE(KRB5_AUTH_CON_GETAUTHENTICATOR_TAKES_DOUBLE_POINTER, 1, | ||||
|                   [Define if `krb5_auth_con_getauthenticator' takes a double pointer third arg.])dnl | ||||
|         krb5_authent_type='krb5_authenticator **' | ||||
| fi | ||||
| AC_MSG_RESULT($krb5_authent_type) | ||||
|  | ||||
| AC_CACHE_CHECK([krb5_auth_con_getflags out argument type], | ||||
| 	       [ac_cv_krb5_auth_con_flags_type], [ | ||||
| local_save_CPPFLAGS="$CPPFLAGS" | ||||
| CPPFLAGS="${CPPFLAGS} ${KRB5_INC_FLAGS}" | ||||
| for t in krb5_flags int32_t ; do | ||||
|    AC_TRY_COMPILE( | ||||
|       [#include <krb5.h> | ||||
|        extern krb5_error_code | ||||
|        krb5_auth_con_getflags(krb5_context, krb5_auth_context, $t *);], | ||||
|        [krb5_error_code foo = krb5_auth_con_getflags(0, 0, 0);], | ||||
|        [ac_cv_krb5_auth_con_flags_type=$t; break]) | ||||
| done | ||||
| CPPFLAGS="${local_save_CPPFLAGS}" | ||||
| if test "x$ac_cv_krb5_auth_con_flags_type" = x ; then | ||||
|    AC_MSG_ERROR([Cannot identify krb5_auth_con_getflags function signature]) | ||||
| fi | ||||
| ]) | ||||
| AC_DEFINE_UNQUOTED([KRB5_AUTH_CON_FLAGS_TYPE], | ||||
| 		   [$ac_cv_krb5_auth_con_flags_type], | ||||
| 		   [krb5_auth_con_getflags() output arg type]) | ||||
|  | ||||
| AC_MSG_CHECKING(for enc_part2 in struct krb5_ticket) | ||||
| AC_CACHE_VAL(ac_cv_have_krb5_ticket_enc_part2, [ | ||||
| local_save_CPPFLAGS="$CPPFLAGS" | ||||
| CPPFLAGS="${CPPFLAGS} ${KRB5_INC_FLAGS}" | ||||
| AC_TRY_COMPILE( | ||||
| [#include <krb5.h>], [krb5_ticket _tkt; _tkt.enc_part2;], | ||||
| ac_cv_have_krb5_ticket_enc_part2=yes, | ||||
| ac_cv_have_krb5_ticket_enc_part2=no) | ||||
| ]) | ||||
| CPPFLAGS="${local_save_CPPFLAGS}" | ||||
| if test "$ac_cv_have_krb5_ticket_enc_part2" = yes; then | ||||
| 	AC_DEFINE(HAVE_KRB5_TICKET_ENC_PART2, 1, | ||||
|                   [Define to 1 if `enc_part2' is member of `krb5_ticket'.])dnl | ||||
| fi | ||||
| AC_MSG_RESULT($ac_cv_have_krb5_ticket_enc_part2) | ||||
|  | ||||
| AC_MSG_CHECKING(for enctype in struct krb5_keyblock) | ||||
| AC_CACHE_VAL(ac_cv_have_krb5_creds_keyblock_enctype, [ | ||||
| local_save_CPPFLAGS="$CPPFLAGS" | ||||
| CPPFLAGS="${CPPFLAGS} ${KRB5_INC_FLAGS}" | ||||
| AC_TRY_COMPILE( | ||||
| [#include <krb5.h>], [krb5_creds _creds; _creds.keyblock.enctype;], | ||||
| ac_cv_have_krb5_creds_keyblock_enctype=yes, | ||||
| ac_cv_have_krb5_creds_keyblock_enctype=no) | ||||
| ]) | ||||
| CPPFLAGS="${local_save_CPPFLAGS}" | ||||
| if test "$ac_cv_have_krb5_creds_keyblock_enctype" = yes; then | ||||
| 	AC_DEFINE(HAVE_KRB5_CREDS_KEYBLOCK_ENCTYPE, 1, | ||||
|                   [Define if `keyblock.enctype' is member of `krb5_creds'.])dnl | ||||
| fi | ||||
| AC_MSG_RESULT($ac_cv_have_krb5_creds_keyblock_enctype) | ||||
|  | ||||
| AC_ARG_ENABLE(cmu-zwgcplus, | ||||
| [  --enable-cmu-zwgcplus   enable CMU zwgcplus extensions],[ | ||||
| if test "$enableval" = "yes"; then | ||||
|         AC_DEFINE(CMU_ZWGCPLUS, 1, [Define to enable zwgcplus support]) | ||||
| fi | ||||
| ]) | ||||
|  | ||||
| AC_ARG_ENABLE(cmu-zctl-punt, | ||||
| [  --enable-cmu-zctl-punt  enable CMU zctl punt extensions],[ | ||||
| if test "$enableval" = "yes"; then | ||||
|         AC_DEFINE(CMU_ZCTL_PUNT, 1, | ||||
|                   [Define to pull in CMU zctl punt backward compat foo]) | ||||
| fi | ||||
| ]) | ||||
|  | ||||
| AC_ARG_ENABLE(cmu-hm-flush-restrict, | ||||
| [  --enable-cmu-hm-flush-restrict   enable CMU zctl hm flush restriction],[ | ||||
| if test "$enableval" = "yes"; then | ||||
|         AC_DEFINE(HM_FLUSH_RESTRICT, 1, | ||||
|                   [Define to get hm_flush restrictions in zctl]) | ||||
| fi | ||||
| ]) | ||||
|  | ||||
| AC_ARG_ENABLE(cmu-opstaff-locate-self, | ||||
| [  --enable-cmu-opstaff-locate-self enable CMU opstaff locate-self ability],[ | ||||
| if test "$enableval" = "yes"; then | ||||
|         AC_DEFINE(OPSTAFF_LOCATE_SELF, 1, | ||||
|                   [Define to allow users to locate themselves if they are opstaff]) | ||||
| fi | ||||
| ]) | ||||
|  | ||||
| AC_CONFIG_HEADER(h/config.h) | ||||
| AC_OUTPUT(Makefile clients/Makefile clients/zaway/Makefile | ||||
|           clients/zctl/Makefile clients/zleave/Makefile | ||||
|           clients/zlocate/Makefile clients/znol/Makefile | ||||
|           clients/zshutdown_notify/Makefile clients/zstat/Makefile | ||||
|           clients/zwrite/Makefile lib/Makefile | ||||
|           server/Makefile zhm/Makefile zwgc/Makefile | ||||
|           zephyr.pc | ||||
|           ) | ||||
							
								
								
									
										233
									
								
								contrib/zephyr-dissector.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								contrib/zephyr-dissector.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,233 @@ | ||||
| -- Wireshark dissector for Zephyr | ||||
| -- Place in ~/.local/lib/wireshark/plugins/2.6/ | ||||
|  | ||||
| zephyr_protocol = Proto("Zephyr",  "Zephyr IM Protocol") | ||||
|  | ||||
| local kind_names = { | ||||
|    [0] = "UNSAFE", | ||||
|    [1] = "UNACKED", | ||||
|    [2] = "ACKED", | ||||
|    [3] = "HMACK", | ||||
|    [4] = "HMCTL", | ||||
|    [5] = "SERVACK", | ||||
|    [6] = "SERVNAK", | ||||
|    [7] = "CLIENTACK", | ||||
|    [8] = "STAT" | ||||
| } | ||||
| zephyr_protocol.fields.version = ProtoField.stringz("zephyr.version", "Version") | ||||
| zephyr_protocol.fields.numfields = ProtoField.uint32("zephyr.fields", "Field Count") | ||||
| zephyr_protocol.fields.z_kind = ProtoField.uint32("zephyr.z_kind", "Kind", base.DEC, kind_names) | ||||
| zephyr_protocol.fields.z_uid = ProtoField.stringz("zephyr.z_uid", "UID") | ||||
| zephyr_protocol.fields.z_uid_addr = ProtoField.ipv4("zephyr.z_uid.zuid_addr", "Address") | ||||
| zephyr_protocol.fields.z_uid_tv = ProtoField.absolute_time("zephyr.z_uid.tv", "Time") | ||||
| zephyr_protocol.fields.z_port = ProtoField.uint16("zephyr.z_port", "Port") | ||||
| zephyr_protocol.fields.z_auth = ProtoField.uint32("zephyr.z_auth", "Auth") | ||||
| zephyr_protocol.fields.z_authent_len = ProtoField.uint32("zephyr.z_authent_len", "Authenticator Length") | ||||
| zephyr_protocol.fields.z_ascii_authent = ProtoField.stringz("zephyr.z_ascii_authent", "Authenticator") | ||||
| zephyr_protocol.fields.z_class = ProtoField.stringz("zephyr.z_class", "Class") | ||||
| zephyr_protocol.fields.z_class_inst = ProtoField.stringz("zephyr.z_class_inst", "Instance") | ||||
| zephyr_protocol.fields.z_opcode = ProtoField.stringz("zephyr.z_opcode", "Opcode") | ||||
| zephyr_protocol.fields.z_sender = ProtoField.stringz("zephyr.z_sender", "Sender") | ||||
| zephyr_protocol.fields.z_recipient = ProtoField.stringz("zephyr.z_recipient", "Recipient") | ||||
| zephyr_protocol.fields.z_default_format = ProtoField.stringz("zephyr.z_default_format", "Default Format") | ||||
| zephyr_protocol.fields.z_ascii_checksum = ProtoField.stringz("zephyr.z_ascii_checksum", "ASCII Checksum") | ||||
| zephyr_protocol.fields.z_checksum = ProtoField.uint32("zephyr.z_checksum", "Checksum") | ||||
| zephyr_protocol.fields.z_multinotice = ProtoField.stringz("zephyr.z_multinotice", "Multinotice") | ||||
| zephyr_protocol.fields.z_multiuid = ProtoField.stringz("zephyr.z_multiuid", "MultiUID") | ||||
| zephyr_protocol.fields.z_multiuid_addr = ProtoField.ipv4("zephyr.z_multiuid.zuid_addr", "Address") | ||||
| zephyr_protocol.fields.z_multiuid_tv = ProtoField.absolute_time("zephyr.z_multiuid.tv", "Time") | ||||
| zephyr_protocol.fields.z_sender_sockaddr = ProtoField.ipv4("zephyr.z_sender_sockaddr", "Sender sockaddr") | ||||
| zephyr_protocol.fields.z_charset = ProtoField.uint16("zephyr.z_charset", "Character Set") | ||||
| zephyr_protocol.fields.z_message = ProtoField.string("zephyr.z_message", "Message") | ||||
| zephyr_protocol.fields.z_message_len = ProtoField.uint32("zephyr.z_message_len", "Message Length") | ||||
|  | ||||
| function parse_ascii(range) | ||||
|    local v = range(2):string() | ||||
|    return tonumber(string.match(v, "[0-9A-F]+"), 16) | ||||
| end | ||||
|  | ||||
| function parse_ascii_ip(range) | ||||
|    local ip = "" .. tonumber(range(2, 2):string(), 16) .. "." .. tonumber(range(4, 2):string(), 16) .. "." .. tonumber(range(6, 2):string(), 16) .. "." .. tonumber(range(8, 2):string(), 16) | ||||
|    return Address.ip(ip) | ||||
| end | ||||
|  | ||||
| function parse_zcode_ip(range) | ||||
|    local bytes = {} | ||||
|    local str = range(1,range:len()-2):bytes() | ||||
|    local i = 0 | ||||
|    while i < str:len() do | ||||
|       local byte = str:get_index(i) | ||||
|       info(i .. ": " .. byte) | ||||
|       if (byte == 0xFF) then | ||||
| 	 if (str:get_index(i+1) == 0xF0) then | ||||
| 	    table.insert(bytes, 0) | ||||
| 	 elseif (str:get_index(i+1) == 0xF1) then | ||||
| 	    table.insert(bytes, 0xFF) | ||||
| 	 end | ||||
| 	 i = i + 2 | ||||
|       else | ||||
| 	 table.insert(bytes, byte) | ||||
| 	 i = i + 1 | ||||
|       end | ||||
|    end | ||||
|    info(bytes[1]) | ||||
|    info(table.concat(bytes, ".")) | ||||
|    return Address.ip(table.concat(bytes, ".")) | ||||
| end | ||||
|  | ||||
| function parse_ascii_tv(range) | ||||
|    info(range:string()) | ||||
|    local seconds = parse_ascii(range) | ||||
|    local microseconds = parse_ascii(range(11)) | ||||
|    return NSTime.new(seconds, microseconds*1000) | ||||
| end | ||||
|  | ||||
| function zephyr_protocol.dissector(buffer, pinfo, tree) | ||||
|   length = buffer:len() | ||||
|   if length == 0 then return end | ||||
|  | ||||
|   pinfo.cols.protocol = zephyr_protocol.name | ||||
|  | ||||
|   local subtree = tree:add(zephyr_protocol, buffer(), "Zephyr") | ||||
|  | ||||
|   local range = buffer() | ||||
|   local length = range:strsize() | ||||
|   local v = range:stringz() | ||||
|   subtree:add(zephyr_protocol.fields.version, range) | ||||
|    | ||||
|   if v == "ZEPH0.2" then | ||||
|      range = buffer(range:offset()+range:len()) | ||||
|      range = range(0, range:strsize()) | ||||
|      local numfields = parse_ascii(range) | ||||
|      subtree:add(zephyr_protocol.fields.numfields, range, numfields) | ||||
|      numfields = numfields - 2 | ||||
|  | ||||
|      range = buffer(range:offset()+range:len()) | ||||
|      range = range(0, range:strsize()) | ||||
|      local kind = parse_ascii(range) | ||||
|      subtree:add(zephyr_protocol.fields.z_kind, range, kind) | ||||
|      numfields = numfields - 1 | ||||
|  | ||||
|      range = buffer(range:offset()+range:len()) | ||||
|      range = range(0, range:strsize()) | ||||
|      local z_uid = subtree:add(zephyr_protocol.fields.z_uid, range) | ||||
|  | ||||
|      local addr = parse_ascii_ip(range) | ||||
|      local tv = parse_ascii_tv(range(11)) | ||||
|      z_uid:add(zephyr_protocol.fields.z_uid_addr, range(0, 11), addr) | ||||
|      z_uid:add(zephyr_protocol.fields.z_uid_tv, range(11), tv) | ||||
|      z_uid:set_text("UID: " .. tostring(addr) .. " " .. tostring(tv)) | ||||
|       | ||||
|      numfields = numfields - 1 | ||||
|  | ||||
|      range = buffer(range:offset()+range:len()) | ||||
|      range = range(0, range:strsize()) | ||||
|      subtree:add(zephyr_protocol.fields.z_port, range, parse_ascii(range)) | ||||
|      numfields = numfields - 1 | ||||
|  | ||||
|      range = buffer(range:offset()+range:len()) | ||||
|      range = range(0, range:strsize()) | ||||
|      subtree:add(zephyr_protocol.fields.z_auth, range, parse_ascii(range)) | ||||
|      numfields = numfields - 1 | ||||
|  | ||||
|      range = buffer(range:offset()+range:len()) | ||||
|      range = range(0, range:strsize()) | ||||
|      local authent_length = parse_ascii(range) | ||||
|      subtree:add(zephyr_protocol.fields.z_authent_len, range, authent_length) | ||||
|      numfields = numfields - 1 | ||||
|  | ||||
|      function add(field) | ||||
| 	range = buffer(range:offset()+range:len()) | ||||
| 	subtree:add(field, range) | ||||
| 	numfields = numfields - 1 | ||||
|      end | ||||
|  | ||||
|      add(zephyr_protocol.fields.z_ascii_authent) | ||||
|      add(zephyr_protocol.fields.z_class) | ||||
|      local class = range:stringz() | ||||
|      add(zephyr_protocol.fields.z_class_inst) | ||||
|      local instance = range:stringz() | ||||
|      add(zephyr_protocol.fields.z_opcode) | ||||
|      local opcode = range:stringz() | ||||
|      add(zephyr_protocol.fields.z_sender) | ||||
|      add(zephyr_protocol.fields.z_recipient) | ||||
|      add(zephyr_protocol.fields.z_default_format) | ||||
|  | ||||
|      if (numfields > 0) then | ||||
| 	range = buffer(range:offset()+range:len()) | ||||
| 	range = range(0, range:strsize()) | ||||
| 	subtree:add(zephyr_protocol.fields.z_ascii_checksum, range) | ||||
| 	local status, value = pcall(function() return parse_ascii(range) end) | ||||
| 	if status then | ||||
| 	   subtree:add(zephyr_protocol.fields.z_checksum, range, value) | ||||
| 	end | ||||
| 	numfields = numfields - 1 | ||||
| 	-- TODO: validate checksum and flag if wrong | ||||
|      end | ||||
|  | ||||
|      if (numfields > 0) then | ||||
| 	range = buffer(range:offset()+range:len()) | ||||
| 	subtree:add(zephyr_protocol.fields.z_multinotice, range) | ||||
| 	numfields = numfields - 1 | ||||
|      end | ||||
|  | ||||
|      if (numfields > 0) then | ||||
| 	range = buffer(range:offset()+range:len()) | ||||
| 	range = range(0, range:strsize()) | ||||
| 	local z_multiuid = subtree:add(zephyr_protocol.fields.z_multiuid, range) | ||||
|  | ||||
| 	local addr = parse_ascii_ip(range) | ||||
| 	local tv = parse_ascii_tv(range(11)) | ||||
| 	z_multiuid:add(zephyr_protocol.fields.z_multiuid_addr, range(0, 11), addr) | ||||
| 	z_multiuid:add(zephyr_protocol.fields.z_multiuid_tv, range(11), tv) | ||||
| 	z_multiuid:set_text("MultiUID: " .. tostring(addr) .. " " .. tostring(tv)) | ||||
| 	numfields = numfields - 1 | ||||
| 	-- else z_multiuid = z_uid | ||||
|      end | ||||
|  | ||||
|      if (numfields > 0) then | ||||
| 	range = buffer(range:offset()+range:len()) | ||||
| 	range = range(0, range:strsize()) | ||||
| 	if (range:string():byte(1) == 90) then | ||||
| 	   -- TODO: parse Zcode address for real | ||||
| 	   subtree:add(zephyr_protocol.fields.z_sender_sockaddr, range, parse_zcode_ip(range)):append_text(" (Zcode)") | ||||
| 	else | ||||
| 	   subtree:add(zephyr_protocol.fields.z_sender_sockaddr, range, parse_ascii_ip(range)):append_text(" (NetASCII)") | ||||
| 	end | ||||
| 	numfields = numfields - 1 | ||||
|      end | ||||
|  | ||||
|      if (numfields > 0) then | ||||
| 	range = buffer(range:offset()+range:len()) | ||||
| 	range = range(0, range:strsize()) | ||||
| 	subtree:add(zephyr_protocol.fields.z_charset, range, parse_ascii(range)) | ||||
| 	numfields = numfields - 1 | ||||
|      end | ||||
|  | ||||
|      if (numfields > 0) then | ||||
| 	local otherfields = subtree:add("Other Fields") | ||||
| 	for i = 1,numfields do | ||||
| 	   range = buffer(range:offset()+range:len()) | ||||
| 	   range = range(0, range:strsize()) | ||||
| 	   otherfields:add(range) | ||||
| 	   numfields = numfields - 1 | ||||
| 	end | ||||
|      end | ||||
|  | ||||
|      range = buffer(range:offset()+range:len()) | ||||
|      if (range:len() > 0) then | ||||
| 	subtree:add(zephyr_protocol.fields.z_message_len, range:len()) | ||||
| 	subtree:add(zephyr_protocol.fields.z_message, range) | ||||
|      end | ||||
|      local info = kind_names[kind] .. " " .. class .. " " .. instance .. " " .. opcode | ||||
|      pinfo.columns.info = info | ||||
|      subtree.text = "Zephyr, " .. info | ||||
|   end | ||||
| end | ||||
|  | ||||
|  | ||||
|  | ||||
| local udp_port = DissectorTable.get("udp.port") | ||||
| udp_port:add(2102, zephyr_protocol) | ||||
| udp_port:add(2103, zephyr_protocol) | ||||
| udp_port:add(2104, zephyr_protocol) | ||||
							
								
								
									
										1
									
								
								debian/.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| zephyr.vars ident | ||||
							
								
								
									
										1
									
								
								debian/README.krb4-5
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/README.krb4-5
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| Placehold that will explain how to build an agile server goes here. | ||||
							
								
								
									
										9
									
								
								debian/acl/class-registry.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								debian/acl/class-registry.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| wg_ctl: | ||||
| hm_ctl: | ||||
| hm_stat: | ||||
| locate: | ||||
| login: | ||||
| zephyr_admin: | ||||
| zephyr_ctl: | ||||
| zmatch_all: | ||||
| operations: | ||||
							
								
								
									
										1
									
								
								debian/acl/iui-hm_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iui-hm_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iui-hm_stat.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iui-hm_stat.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iui-login.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iui-login.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iui-operations.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iui-operations.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| *.*@* | ||||
							
								
								
									
										1
									
								
								debian/acl/iui-user_locate.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iui-user_locate.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iui-wg_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iui-wg_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iui-zephyr_admin.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iui-zephyr_admin.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iui-zephyr_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iui-zephyr_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iws-hm_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iws-hm_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iws-hm_stat.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iws-hm_stat.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iws-login.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iws-login.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iws-operations.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iws-operations.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| *.*@* | ||||
							
								
								
									
										1
									
								
								debian/acl/iws-user_locate.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iws-user_locate.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iws-wg_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iws-wg_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iws-zephyr_admin.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iws-zephyr_admin.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/iws-zephyr_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/iws-zephyr_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/sub-hm_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/sub-hm_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/sub-hm_stat.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/sub-hm_stat.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/sub-login.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/sub-login.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| *.*@* | ||||
							
								
								
									
										1
									
								
								debian/acl/sub-operations.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/sub-operations.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| *.*@* | ||||
							
								
								
									
										1
									
								
								debian/acl/sub-user_locate.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/sub-user_locate.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| *.*@* | ||||
							
								
								
									
										1
									
								
								debian/acl/sub-wg_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/sub-wg_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/sub-zephyr_admin.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/sub-zephyr_admin.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/sub-zephyr_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/sub-zephyr_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/xmt-hm_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/xmt-hm_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/xmt-hm_stat.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/xmt-hm_stat.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/xmt-login.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/xmt-login.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| *.*@* | ||||
							
								
								
									
										1
									
								
								debian/acl/xmt-operations.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/xmt-operations.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/xmt-user_locate.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/xmt-user_locate.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| *.*@* | ||||
							
								
								
									
										1
									
								
								debian/acl/xmt-wg_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/xmt-wg_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/xmt-zephyr_admin.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/xmt-zephyr_admin.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
|  | ||||
							
								
								
									
										1
									
								
								debian/acl/xmt-zephyr_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/acl/xmt-zephyr_ctl.acl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| *.*@* | ||||
							
								
								
									
										89
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| zephyr (1:3.1.999-trunk) unstable; urgency=low | ||||
|  | ||||
|   * The next actual release on this branch will be 3.2... someday | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Mon, 28 Oct 2013 00:32:21 -0400 | ||||
|  | ||||
| zephyr (1:3.1.1-trunk) unstable; urgency=low | ||||
|  | ||||
|   * release 3.1.1 | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Fri, 25 Oct 2013 01:15:29 -0400 | ||||
|  | ||||
| zephyr (1:3.1-trunk) unstable; urgency=low | ||||
|  | ||||
|   * release 3.1 | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Sat, 12 Oct 2013 13:15:58 -0400 | ||||
|  | ||||
| zephyr (1:3.1~rc2-trunk) unstable; urgency=low | ||||
|  | ||||
|   * release 3.1~rc2 | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Sun, 06 Oct 2013 20:53:42 -0400 | ||||
|  | ||||
| zephyr (1:3.1~rc1-trunk) unstable; urgency=low | ||||
|  | ||||
|   * release 3.1~rc1 | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Sat, 28 Sep 2013 19:45:21 -0400 | ||||
|  | ||||
| zephyr (1:3.1~rc0-trunk) unstable; urgency=low | ||||
|  | ||||
|   * release 3.1~rc0 | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Sat, 28 Sep 2013 15:18:25 -0400 | ||||
|  | ||||
| zephyr (1:3.1~beta1-trunk) unstable; urgency=low | ||||
|  | ||||
|   * release 3.1~beta1 | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Thu, 08 Aug 2013 02:23:32 -0400 | ||||
|  | ||||
| zephyr (1:3.1-beta0-trunk) unstable; urgency=low | ||||
|  | ||||
|   * release 3.1-beta0 | ||||
|   | ||||
|  -- Karl Ramm <kcr@1ts.org>  Sun, 07 Jul 2013 22:08:01 -0400 | ||||
|  | ||||
| zephyr (1:3.0.999-trunk) UNRELEASED; urgency=low | ||||
|  | ||||
|   * Any further revisions to 3.0.x go on the 3.0.x branch; the mainline is for 3.1 stuff | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Sat, 11 Feb 2012 10:53:49 -0500 | ||||
|  | ||||
| zephyr (1:3.0.2-trunk) unstable; urgency=low | ||||
|  | ||||
|   * release 3.0.2 | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Sun, 22 Jan 2012 02:12:41 -0500 | ||||
|  | ||||
| zephyr (1:3.0.1) unstable; urgency=low | ||||
|  | ||||
|   * 80% more nelhage proof | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Sun, 06 Mar 2011 10:54:46 -0500 | ||||
|  | ||||
| zephyr (1:3.0.1~rc.HEAD) unstable; urgency=low | ||||
|  | ||||
|   * bugfixes ahoy. | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Wed, 07 Jul 2010 16:26:49 -0400 | ||||
|  | ||||
| zephyr (1:3.0) unstable; urgency=low | ||||
|  | ||||
|   * Might as well let it escape. | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Mon, 05 Oct 2009 19:56:17 -0400 | ||||
|  | ||||
| zephyr (1:3.0~rc.HEAD) unstable; urgency=low | ||||
|  | ||||
|   * It's Release Candidate Time! | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Mon, 03 Aug 2009 01:27:46 -0400 | ||||
|  | ||||
| zephyr (1:3.0~beta.HEAD) inconceivable; urgency=low | ||||
|  | ||||
|   * Mark version for upstream trunk  | ||||
|  | ||||
|  -- Karl Ramm <kcr@1ts.org>  Sat, 28 Mar 2009 12:59:14 -0400 | ||||
							
								
								
									
										1
									
								
								debian/compat
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/compat
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| 5 | ||||
							
								
								
									
										191
									
								
								debian/control
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								debian/control
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | ||||
| Source: zephyr | ||||
| Section: net | ||||
| Priority: optional | ||||
| Maintainer: Karl Ramm <kcr@1ts.org> | ||||
| Build-Depends: debhelper (>= 5), libc-ares-dev, libkrb5-dev (>= 1.2.2-4), | ||||
|                comerr-dev, ss-dev, libreadline-dev | libreadline5-dev, | ||||
|                libx11-dev, libxt-dev, x11proto-core-dev, libncurses5-dev, | ||||
| 	       bison, libhesiod-dev, autotools-dev, python (>= 2.5), python-central, | ||||
|                autoconf, libtool, automake, git-core | git, devscripts | ||||
| Build-Conflicts: autoconf2.13 | ||||
| Standards-Version: 3.9.2.0 | ||||
| Homepage: http://zephyr.1ts.org/ | ||||
| Vcs-Svn: git://zephyr.1ts.org/zephyr.git | ||||
| Vcs-Browser: http://zephyr.1ts.org/browser/zephyr | ||||
| XS-Python-Version: 2.5 | ||||
|  | ||||
| Package: libzephyr4 | ||||
| Section: libs | ||||
| Architecture: any | ||||
| Depends: ${shlibs:Depends}, ${misc:Depends} | ||||
| Conflicts: libzephyr4-krb, libzephyr4-krb5, libzephyr4-krb45 | ||||
| Description: Project Athena's notification service - non-Kerberos libraries | ||||
|  Zephyr is derived from the original Project Athena 'Instant Message' system | ||||
|  and allows users to send messages to other users or to groups of users. | ||||
|  Users can view incoming Zephyr messages as windowgrams (transient X | ||||
|  windows) or as text on a terminal. | ||||
|  . | ||||
|  This package provides the libraries without Kerberos support. | ||||
|  | ||||
| Package: libzephyr4-krb | ||||
| Section: libs | ||||
| Architecture: any | ||||
| Depends: ${shlibs:Depends}, ${misc:Depends}, krb4-config | ||||
| Conflicts: libzephyr4, libzephyr4-krb5, libzephyr4-krb45 | ||||
| Replaces: libzephyr4, libzephyr4-krb5, libzephyr4-krb45 | ||||
| Provides: libzephyr4 | ||||
| Description: Project Athena's notification service - libraries with Kerberos | ||||
|  Zephyr is derived from the original Project Athena 'Instant Message' system | ||||
|  and allows users to send messages to other users or to groups of users. | ||||
|  Users can view incoming Zephyr messages as windowgrams (transient X | ||||
|  windows) or as text on a terminal. | ||||
|  . | ||||
|  This package provides libraries that use Kerberos. | ||||
|  | ||||
| Package: libzephyr4-krb5 | ||||
| Section: libs | ||||
| Architecture: any | ||||
| Depends: ${shlibs:Depends}, ${misc:Depends}, krb5-config | ||||
| Conflicts: libzephyr4, libzephyr4-krb, libzephyr4-krb45 | ||||
| Replaces: libzephyr4, libzephyr4-krb, libzephyr4-krb45 | ||||
| Provides: libzephyr4 | ||||
| Description: The original "Instant Message" system libraries with Kerberos 5 | ||||
|  This version of the library uses Kerberos for message authentication. | ||||
|  . | ||||
|  This is the Project Athena Zephyr notification system. | ||||
|  Zephyr allows users to send messages to other users or to groups of | ||||
|  users.  Users can view incoming Zephyr messages as windowgrams | ||||
|  (transient X windows) or as text on a terminal. | ||||
|  | ||||
| Package: libzephyr4-krb45 | ||||
| Section: libs | ||||
| Architecture: any | ||||
| Depends: ${shlibs:Depends}, ${misc:Depends}, krb5-config | ||||
| Conflicts: libzephyr4, libzephyr4-krb, libzephyr4-krb5 | ||||
| Replaces: libzephyr4, libzephyr4-krb, libzephyr4-krb5 | ||||
| Provides: libzephyr4 | ||||
| Description: The original "Instant Message" system libraries with Kerberos 4+5 | ||||
|  This version of the library uses Kerberos for message authentication. | ||||
|  . | ||||
|  This is the Project Athena Zephyr notification system. | ||||
|  Zephyr allows users to send messages to other users or to groups of | ||||
|  users.  Users can view incoming Zephyr messages as windowgrams | ||||
|  (transient X windows) or as text on a terminal. | ||||
|  | ||||
| Package: libzephyr-python | ||||
| Section: python | ||||
| Architecture: any | ||||
| Depends: ${python:Depends}, ${misc:Depends}, libzephyr4 | ||||
| Provides: ${python:Provides} | ||||
| XB-Python-Version: ${python:Verions} | ||||
| Description: Python bindings for zephyr library | ||||
|  Get at the zephyr library from python. | ||||
|  | ||||
| Package: zephyr-clients | ||||
| Section: net | ||||
| Replaces: zephyr-client | ||||
| Architecture: any | ||||
| Depends: ${shlibs:Depends}, ${misc:Depends}, debianutils (>= 1.6), debconf | debconf-2.0 | ||||
| Description: Project Athena's notification service - client programs | ||||
|  Zephyr is derived from the original Project Athena 'Instant Message' system | ||||
|  and allows users to send messages to other users or to groups of users. | ||||
|  Users can view incoming Zephyr messages as windowgrams (transient X | ||||
|  windows) or as text on a terminal. | ||||
|  . | ||||
|  This package provides client programs for the messaging service. | ||||
|  | ||||
| Package: zephyr-server | ||||
| Section: net | ||||
| Architecture: any | ||||
| Depends: ${shlibs:Depends}, ${misc:Depends}, debconf | debconf-2.0 | ||||
| Conflicts: zephyr-server-krb, zephyr-server-krb5, zephyr-server-krb45 | ||||
| Description: Project Athena's notification service - non-Kerberos server | ||||
|  Zephyr is derived from the original Project Athena 'Instant Message' system | ||||
|  and allows users to send messages to other users or to groups of users. | ||||
|  Users can view incoming Zephyr messages as windowgrams (transient X | ||||
|  windows) or as text on a terminal. | ||||
|  . | ||||
|  This package provides the server for the messaging service, which | ||||
|  maintains a location and subscription database for all the receiving | ||||
|  clients. All zephyrgrams are sent to the server to be routed to the | ||||
|  intended recipient. Only one server is required for a group of clients. | ||||
|  | ||||
| Package: zephyr-server-krb | ||||
| Section: net | ||||
| Architecture: any | ||||
| Depends: ${shlibs:Depends}, ${misc:Depends}, debconf | debconf-2.0, libzephyr4-krb | ||||
| Conflicts: zephyr-server, zephyr-server-krb5, zephyr-server-krb45 | ||||
| Replaces: zephyr-server, zephyr-server-krb5, zephyr-server-krb45 | ||||
| Provides: zephyr-server | ||||
| Description: Project Athena's notification service - server with Kerberos | ||||
|  Zephyr is derived from the original Project Athena 'Instant Message' system | ||||
|  and allows users to send messages to other users or to groups of users. | ||||
|  Users can view incoming Zephyr messages as windowgrams (transient X | ||||
|  windows) or as text on a terminal. | ||||
|  . | ||||
|  This package provides the server for the messaging service. Only one | ||||
|  server is needed for a group of client. The program consumes much memory, | ||||
|  especially for very large sites. | ||||
|  . | ||||
|  The server maintains a location and subscription database for all the | ||||
|  receiving clients. All zephyrgrams are sent to the server to be routed | ||||
|  to the intended recipient. | ||||
|  . | ||||
|  This version of the server uses Kerberos. | ||||
|  | ||||
| Package: zephyr-server-krb5 | ||||
| Section: net | ||||
| Architecture: any | ||||
| Depends: ${shlibs:Depends}, ${misc:Depends}, debconf | debconf-2.0, libzephyr4-krb5 | ||||
| Conflicts: zephyr-server, zephyr-server-krb, zephyr-server-krb45 | ||||
| Replaces: zephyr-server, zephyr-server-krb, zephyr-server-krb45 | ||||
| Provides: zephyr-server | ||||
| Description: The original "Instant Message" system-server with Kerberos 5 | ||||
|  You probably only need one server for a group of clients. | ||||
|  This can be a memory-intensive server, especially for very large sites. | ||||
|  . | ||||
|  The server maintains a location and subscription database for all the | ||||
|  receiving clients. All zephyrgrams are sent to the server to be routed | ||||
|  to the intended recipient. | ||||
|  . | ||||
|  This version of the server uses Kerberos for message authentication. | ||||
|  . | ||||
|  This is the Project Athena Zephyr notification system. | ||||
|  Zephyr allows users to send messages to other users or to groups of | ||||
|  users.  Users can view incoming Zephyr messages as windowgrams | ||||
|  (transient X windows) or as text on a terminal. | ||||
|  | ||||
| Package: zephyr-server-krb45 | ||||
| Section: net | ||||
| Architecture: any | ||||
| Depends: ${shlibs:Depends}, ${misc:Depends}, debconf | debconf-2.0, libzephyr4-krb45 | ||||
| Conflicts: zephyr-server, zephyr-server-krb, zephyr-server-krb5 | ||||
| Replaces: zephyr-server, zephyr-server-krb, zephyr-server-krb5 | ||||
| Provides: zephyr-server | ||||
| Description: The original "Instant Message" system-server with Kerberos 4+5 | ||||
|  You probably only need one server for a group of clients. | ||||
|  This can be a memory-intensive server, especially for very large sites. | ||||
|  . | ||||
|  The server maintains a location and subscription database for all the | ||||
|  receiving clients. All zephyrgrams are sent to the server to be routed | ||||
|  to the intended recipient. | ||||
|  . | ||||
|  This version of the server uses Kerberos for message authentication. | ||||
|  . | ||||
|  This is the Project Athena Zephyr notification system. | ||||
|  Zephyr allows users to send messages to other users or to groups of | ||||
|  users.  Users can view incoming Zephyr messages as windowgrams | ||||
|  (transient X windows) or as text on a terminal. | ||||
|  | ||||
| Package: libzephyr-dev | ||||
| Section: libdevel | ||||
| Architecture: any | ||||
| Depends: libzephyr4 (= ${binary:Version}) | libzephyr4-krb (= ${binary:Version}) | libzephyr4-krb5 (= ${binary:Version}) | libzephyr4-krb45 (= ${binary:Version}), ${misc:Depends}, libc6-dev | ||||
| Description: Project Athena's notification service - development files | ||||
|  Zephyr is derived from the original Project Athena 'Instant Message' system | ||||
|  and allows users to send messages to other users or to groups of users. | ||||
|  Users can view incoming Zephyr messages as windowgrams (transient X | ||||
|  windows) or as text on a terminal. | ||||
|  . | ||||
|  This package provides development libraries and files, which are | ||||
|  needed to compile alternative Zephyr clients. | ||||
							
								
								
									
										125
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | ||||
| This package was debianized by Karl Ramm <kcr@1ts.org> on | ||||
| Mon,  4 Dec 2000 05:28:22 -0500. | ||||
|  | ||||
| It was downloaded from ftp://athena-dist.mit.edu/pub/ATHENA/zephyr | ||||
|  | ||||
| Copyright: | ||||
|  | ||||
| /* | ||||
|  | ||||
| Copyright 1987,1988,1995 by the Massachusetts Institute of Technology | ||||
|  | ||||
| All rights reserved. | ||||
|  | ||||
| Permission to use, copy, modify, and distribute this software and its | ||||
| documentation for any purpose and without fee is hereby granted, | ||||
| provided that the above copyright notice appear in all copies and that | ||||
| both that copyright notice and this permission notice appear in | ||||
| supporting documentation, and that the name of the Massachusetts | ||||
| Institute of Technology (M.I.T.) not be used in advertising or publicity | ||||
| pertaining to distribution of the software without specific, written | ||||
| prior permission. | ||||
|  | ||||
| M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING | ||||
| ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL | ||||
| M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR | ||||
| ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | ||||
| WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | ||||
| ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | ||||
| SOFTWARE. | ||||
|  | ||||
| */ | ||||
| /* | ||||
|  * lib/quad_cksum.c | ||||
|  * | ||||
|  * Copyright 1985, 1986, 1987, 1988,1990 by the Massachusetts Institute | ||||
|  * of Technology. | ||||
|  * All Rights Reserved. | ||||
|  * | ||||
|  * Export of this software from the United States of America may | ||||
|  *   require a specific license from the United States Government. | ||||
|  *   It is the responsibility of any person or organization contemplating | ||||
|  *   export to obtain such a license before exporting. | ||||
|  *  | ||||
|  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and | ||||
|  * distribute this software and its documentation for any purpose and | ||||
|  * without fee is hereby granted, provided that the above copyright | ||||
|  * notice appear in all copies and that both that copyright notice and | ||||
|  * this permission notice appear in supporting documentation, and that | ||||
|  * the name of M.I.T. not be used in advertising or publicity pertaining | ||||
|  * to distribution of the software without specific, written prior | ||||
|  * permission.  Furthermore if you modify this software you must label | ||||
|  * your software as modified software and not distribute it in such a | ||||
|  * fashion that it might be confused with the original M.I.T. software. | ||||
|  * M.I.T. makes no representations about the suitability of | ||||
|  * this software for any purpose.  It is provided "as is" without express | ||||
|  * or implied warranty. | ||||
|  */ | ||||
|  | ||||
| server/utf8proc.[ch]: | ||||
| /* | ||||
|  *  Copyright (c) 2006-2007 Jan Behrens, FlexiGuided GmbH, Berlin | ||||
|  * | ||||
|  *  Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  *  copy of this software and associated documentation files (the "Software"), | ||||
|  *  to deal in the Software without restriction, including without limitation | ||||
|  *  the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  *  and/or sell copies of the Software, and to permit persons to whom the | ||||
|  *  Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  *  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 | ||||
|  *  AUTHORS OR COPYRIGHT HOLDERS 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. | ||||
|  */ | ||||
|  | ||||
| server/utf8proc_data.c: | ||||
| /* | ||||
|  *  This file contains derived data from a modified version of the | ||||
|  *  Unicode data files. | ||||
|  * | ||||
|  *  The original data files are available at | ||||
|  *  http://www.unicode.org/Public/UNIDATA/ | ||||
|  * | ||||
|  * | ||||
|  *  COPYRIGHT AND PERMISSION NOTICE | ||||
|  * | ||||
|  *  Copyright (c) 1991-2007 Unicode, Inc. All rights reserved. Distributed | ||||
|  *  under the Terms of Use in http://www.unicode.org/copyright.html. | ||||
|  * | ||||
|  *  Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  *  copy of the Unicode data files and any associated documentation (the "Data | ||||
|  *  Files") or Unicode software and any associated documentation (the | ||||
|  *  "Software") to deal in the Data Files or Software without restriction, | ||||
|  *  including without limitation the rights to use, copy, modify, merge, | ||||
|  *  publish, distribute, and/or sell copies of the Data Files or Software, and | ||||
|  *  to permit persons to whom the Data Files or Software are furnished to do | ||||
|  *  so, provided that (a) the above copyright notice(s) and this permission | ||||
|  *  notice appear with all copies of the Data Files or Software, (b) both the | ||||
|  *  above copyright notice(s) and this permission notice appear in associated | ||||
|  *  documentation, and (c) there is clear notice in each modified Data File or | ||||
|  *  in the Software as well as in the documentation associated with the Data | ||||
|  *  File(s) or Software that the data or software has been modified. | ||||
|  * | ||||
|  *  THE DATA FILES AND SOFTWARE ARE 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 OF | ||||
|  *  THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS | ||||
|  *  INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR | ||||
|  *  CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF | ||||
|  *  USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | ||||
|  *  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | ||||
|  *  PERFORMANCE OF THE DATA FILES OR SOFTWARE. | ||||
|  * | ||||
|  *  Except as contained in this notice, the name of a copyright holder shall | ||||
|  *  not be used in advertising or otherwise to promote the sale, use or other | ||||
|  *  dealings in these Data Files or Software without prior written | ||||
|  *  authorization of the copyright holder. | ||||
|  */ | ||||
|  | ||||
							
								
								
									
										3
									
								
								debian/default.subscriptions
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								debian/default.subscriptions
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| operations,message,* | ||||
| message,personal,%me% | ||||
| message,urgent,%me% | ||||
							
								
								
									
										2
									
								
								debian/dirs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								debian/dirs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| usr/bin | ||||
| usr/sbin | ||||
							
								
								
									
										6
									
								
								debian/libzephyr-dev.files
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								debian/libzephyr-dev.files
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| usr/lib/libzephyr.a | ||||
| usr/lib/libzephyr.so | ||||
| usr/lib/pkgconfig/zephyr.pc | ||||
| usr/include/zephyr/mit-copyright.h | ||||
| usr/include/zephyr/zephyr.h | ||||
| usr/include/zephyr/zephyr_err.h | ||||
							
								
								
									
										1
									
								
								debian/libzephyr-python.files
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/libzephyr-python.files
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| usr/lib/python2.5/site-packages/zephyr_ctypes.py | ||||
							
								
								
									
										15
									
								
								debian/libzephyr4-krb5.templates
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								debian/libzephyr4-krb5.templates
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| Template: libzephyr4-krb5/no-more-krb4 | ||||
| Type: boolean | ||||
| Default: true | ||||
| Description: Potentially incompatible upgrade | ||||
|  You appear to be upgrading from a version of zephyr that uses | ||||
|  Kerberos version 4 to authenticate.  Kerberos version 4 support has | ||||
|  been removed from Debian, and accordingly from zephyr.  This version | ||||
|  of zephyr uses Kerberos 5 to authenticate, and thus your servers must | ||||
|  have been upgraded for it to be useful. | ||||
|  . | ||||
|  A server that authenticates both ways can be built for lenny from the | ||||
|  zephyr source package, see: | ||||
|    /usr/share/doc/libzephyr4-krb5/README.krb4-5 | ||||
|  . | ||||
|  Continue with the upgrade? | ||||
							
								
								
									
										1
									
								
								debian/libzephyr4.files
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/libzephyr4.files
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| usr/lib/libzephyr.so.* | ||||
							
								
								
									
										2
									
								
								debian/po/POTFILES.in
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								debian/po/POTFILES.in
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| [type: gettext/rfc822deb] zephyr-clients.templates | ||||
| [type: gettext/rfc822deb] zephyr-server.templates | ||||
							
								
								
									
										91
									
								
								debian/po/cs.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								debian/po/cs.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
| # | ||||
| #    Translators, if you are not familiar with the PO format, gettext | ||||
| #    documentation is worth reading, especially sections dedicated to | ||||
| #    this format, e.g. by running: | ||||
| #         info -n '(gettext)PO Files' | ||||
| #         info -n '(gettext)Header Entry' | ||||
| # | ||||
| #    Some information specific to po-debconf are available at | ||||
| #            /usr/share/doc/po-debconf/README-trans | ||||
| #         or http://www.debian.org/intl/l10n/po-debconf/README-trans | ||||
| # | ||||
| #    Developers do not need to manually edit POT or PO files. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: zephyr\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2007-12-08 17:00+0100\n" | ||||
| "Last-Translator: Miroslav Kure <kurem@debian.cz>\n" | ||||
| "Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Zephyr servery:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "" | ||||
| "Zadejte prosím plná jména Zephyr serverů; jednotlivá jména oddělte mezerami." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "Seznam definovaný na klientech může být podmnožinou seznamu definovaného na " | ||||
| "serverech." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
| "Pokud pro oznamování Zephyr serverů používáte Hesiod, můžete ponechat " | ||||
| "prázdné." | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "We want to try and capture user changes when they edit a config file " | ||||
| #~ "manually.  To do this we look at the file in the config script. However, " | ||||
| #~ "in the case of preconfigure, the config script is run twice before the " | ||||
| #~ "postinst is run.  Thus we may read the wrong value before the edited " | ||||
| #~ "value is written out in postinst. If this is false we skip reading config " | ||||
| #~ "files until postinst runs." | ||||
| #~ msgstr "" | ||||
| #~ "Snažíme se rozpoznat a zachytit uživatelovy ruční změny v konfiguračním " | ||||
| #~ "souboru, což se děje v konfiguračním skriptu. Ovšem v případě " | ||||
| #~ "předkonfigurace je konfigurační skript spuštěn dvakrát před spuštěním " | ||||
| #~ "poinstalačního skriptu a tudíž můžeme přečíst chybnou hodnotu před tím, " | ||||
| #~ "než je upravená hodnota zapsána v poinstalačním kroku. Pokud je to " | ||||
| #~ "chybně, přeskočíme čtení kofiguračních souborů až do poinstalační fáze." | ||||
|  | ||||
| #~ msgid "You have no zephyr servers specified for the client" | ||||
| #~ msgstr "Pro klienta jste nezadali žádné zephyr servery" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "The zephyr-clients package for whatever reason does not have any zephyr " | ||||
| #~ "servers configured.  Please edit the file /etc/default/zephyr-clients and " | ||||
| #~ "add the names of your zephyr servers, separated by spaces to the zhm_args " | ||||
| #~ "variable." | ||||
| #~ msgstr "" | ||||
| #~ "Balíček zephyr-clients nemá z nějakého důvodu nakonfigurován žádný zephyr " | ||||
| #~ "server. Upravte prosím soubor /etc/default/zephyr-clients a přidejte do " | ||||
| #~ "něj do proměnné zhm_args mezerami oddělená jména zephyr serverů." | ||||
|  | ||||
| #~ msgid "What are your zephyr servers?" | ||||
| #~ msgstr "Jaké jsou vaše zephyr servery?" | ||||
|  | ||||
| #~ msgid "You should never see this" | ||||
| #~ msgstr "Toto jste nikdy neměli vidět" | ||||
							
								
								
									
										65
									
								
								debian/po/es.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								debian/po/es.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| # zephyr debconf translation to spanish | ||||
| # Copyright (C) 2001, 2006, 2007 Software in the Public Interest | ||||
| # This file is distributed under the same license as the zephyr package. | ||||
| # | ||||
| # Changes: | ||||
| # - Initial translation | ||||
| #        Carlos Valdivia Yagüe <valyag@dat.etsit.upm.es>, 2001, 2006, 2007 | ||||
| # | ||||
| #    Translators, if you are not familiar with the PO format, gettext | ||||
| #    documentation is worth reading, especially sections dedicated to | ||||
| #    this format, e.g. by running: | ||||
| #         info -n '(gettext)PO Files' | ||||
| #         info -n '(gettext)Header Entry' | ||||
| # | ||||
| #    Some information specific to po-debconf are available at | ||||
| #            /usr/share/doc/po-debconf/README-trans | ||||
| #         or http://www.debian.org/intl/l10n/po-debconf/README-trans | ||||
| # | ||||
| #    Developers do not need to manually edit POT or PO files. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: zephyr 2.1.20070719.SNAPSHOT-4\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2007-12-05 15:50+0100\n" | ||||
| "Last-Translator: Carlos Valdivia Yagüe <valyag@dat.etsit.upm.es>\n" | ||||
| "Language-Team: Debian L10n Spanish <debian-l10n-spanish@lists.debian.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Servidores Zephyr:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "" | ||||
| "Por favor, introduzca el nombre completo de los servidores Zephyr como una " | ||||
| "lista separada por espacios." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "La lista configurada en los clientes puede ser un subconjunto de la lista " | ||||
| "configurada en los servidores." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
| "Puede dejarlo en blanco si se utiliza Hesiod para anunciar los servidores " | ||||
| "Zephyr." | ||||
							
								
								
									
										56
									
								
								debian/po/fr.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								debian/po/fr.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| # translation of fr.po to French | ||||
| # | ||||
| #    Translators, if you are not familiar with the PO format, gettext | ||||
| #    documentation is worth reading, especially sections dedicated to | ||||
| #    this format, e.g. by running: | ||||
| #         info -n '(gettext)PO Files' | ||||
| #         info -n '(gettext)Header Entry' | ||||
| #    Some information specific to po-debconf are available at | ||||
| #            /usr/share/doc/po-debconf/README-trans | ||||
| #         or http://www.debian.org/intl/l10n/po-debconf/README-trans# | ||||
| #    Developers do not need to manually edit POT or PO files. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: zephyr_2.1.20070913.SNAPSHOT-3\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2007-12-23 15:01+0100\n" | ||||
| "Last-Translator: Michel Grentzinger <mic.grentz@online.fr>\n" | ||||
| "Language-Team: French <debian-l10n-french@lists.debian.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=ISO-8859-15\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Serveurs Zephyr<79>:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "" | ||||
| "Veuillez indiquer le nom complet des serveurs Zephyr, s<>par<61>s par un espace." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "La liste configur<75>e sur les clients peut <20>tre un sous-ensemble de la liste " | ||||
| "configur<75>e sur les serveurs." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
| "Ce champ peut <20>tre laiss<73> vide si Hesiod est employ<6F> pour annoncer les " | ||||
| "serveurs Zephyr." | ||||
							
								
								
									
										100
									
								
								debian/po/gl.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								debian/po/gl.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| # Galician translation of zephyr's debconf templates | ||||
| # This file is distributed under the same license as the zephyr package. | ||||
| # Jacobo Tarrio <jtarrio@debian.org>, 2007. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: zephyr\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2007-12-05 20:45+0000\n" | ||||
| "Last-Translator: Jacobo Tarrio <jtarrio@debian.org>\n" | ||||
| "Language-Team: Galician <proxecto@trasno.net>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Servidores zephyr:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "" | ||||
| "Indique os nomes completos dos servidores Zephyr, nunha lista de nomes " | ||||
| "separados por comas." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "A lista configurada nos clientes pode ser un subconxunto da lista " | ||||
| "configurada nos servidores." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
| "Pódese deixar baleiro se se emprega Hesiod para anunciar os servidores " | ||||
| "Zephyr." | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "" | ||||
| #~ "Please type the full names of your zephyr servers, separated by spaces. " | ||||
| #~ "(note that this can be a subset of what you're telling the servers) If " | ||||
| #~ "you are using hesiod to advertise your zephyr servers, leave this blank." | ||||
| #~ msgstr "" | ||||
| #~ "Escriba os nomes completos dos seus servidores zephyr, separados por " | ||||
| #~ "espazos. (Teña en conta que isto pode ser un subconxunto do que lles " | ||||
| #~ "conta aos servidores)" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "Please type the full names of your zephyr servers, separated by spaces. " | ||||
| #~ "(Note that this can be a superset of that you're telling the clients.)" | ||||
| #~ msgstr "" | ||||
| #~ "Escriba os nomes completos dos seus servidores zephyr, separados por " | ||||
| #~ "espazos. (Teña en conta que pode ser un superconxunto do que lles di aos " | ||||
| #~ "clientes)." | ||||
|  | ||||
| #~ msgid "for internal use" | ||||
| #~ msgstr "para uso interno" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "We want to try and capture user changes when they edit a config file " | ||||
| #~ "manually.  To do this we look at the file in the config script. However, " | ||||
| #~ "in the case of preconfigure, the config script is run twice before the " | ||||
| #~ "postinst is run.  Thus we may read the wrong value before the edited " | ||||
| #~ "value is written out in postinst. If this is false we skip reading config " | ||||
| #~ "files until postinst runs." | ||||
| #~ msgstr "" | ||||
| #~ "Preténdes capturar os cambios que fan os usuarios cando modifican " | ||||
| #~ "manualmente un ficheiro de configuración. Para facelo consúltase o " | ||||
| #~ "ficheiro no script de configuración. Nembargantes, no caso da " | ||||
| #~ "preconfiguración, o script de configuración execútase dúas veces antes de " | ||||
| #~ "executar o script de post-instalación. Polo tanto, pódese ler o valor " | ||||
| #~ "incorrecto antes de que se grave o valor editado na post-instalación. Se " | ||||
| #~ "isto é falso omítese a lectura de ficheiros de configuración ata que se " | ||||
| #~ "execute o script de post-instalación." | ||||
|  | ||||
| #~ msgid "You have no zephyr servers specified for the client" | ||||
| #~ msgstr "Non especificou servidores zephyr para o cliente" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "The zephyr-clients package for whatever reason does not have any zephyr " | ||||
| #~ "servers configured.  Please edit the file /etc/default/zephyr-clients and " | ||||
| #~ "add the names of your zephyr servers, separated by spaces to the zhm_args " | ||||
| #~ "variable." | ||||
| #~ msgstr "" | ||||
| #~ "Por algún motivo, o paquete zephyr-clients non ten configurado ningún " | ||||
| #~ "servidor zephyr. Edite o ficheiro /etc/default/zephyr-clients e engada os " | ||||
| #~ "nomes dos servidores zephyr, separados por espazos, á variable zhm_args." | ||||
							
								
								
									
										45
									
								
								debian/po/ja.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								debian/po/ja.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| # Copyright (C) 2008 Karl Ramm <kcr@debian.org> | ||||
| # This file is distributed under the same license as the zephyr package. | ||||
| # Hideki Yamane (Debian-JP) <henrich@debian.or.jp>, 2008. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: zephyr 2.1.20070719.SNAPSHOT-1.2\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2008-12-28 22:26+0900\n" | ||||
| "Last-Translator: Hideki Yamane (Debian-JP) <henrich@debian.or.jp>\n" | ||||
| "Language-Team: Japanese <debian-japanese@lists.debian.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Zephyr サーバ:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "" | ||||
| "Zephyr サーバの名前を全て、スペースで区切ったリストで指定してください。" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "クライアント上で設定されたリストは、サーバ上で設定されたリストのサブセットになります。" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "Hesiod を Zephyr サーバの広報に利用している場合は、ここは空のままで構いません。" | ||||
							
								
								
									
										112
									
								
								debian/po/nl.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								debian/po/nl.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,112 @@ | ||||
| # | ||||
| #    Translators, if you are not familiar with the PO format, gettext | ||||
| #    documentation is worth reading, especially sections dedicated to | ||||
| #    this format, e.g. by running: | ||||
| #         info -n '(gettext)PO Files' | ||||
| #         info -n '(gettext)Header Entry' | ||||
| # | ||||
| #    Some information specific to po-debconf are available at | ||||
| #            /usr/share/doc/po-debconf/README-trans | ||||
| #         or http://www.debian.org/intl/l10n/po-debconf/README-trans | ||||
| # | ||||
| #    Developers do not need to manually edit POT or PO files. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: zephyr\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2007-12-09 14:00+0100\n" | ||||
| "Last-Translator: Bart Cornelis <cobaco@skolelinux.no>\n" | ||||
| "Language-Team: debian-l10n-dutch <debian-l10n-dutch@lists.debian.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=utf-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Poedit-Language: Dutch\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Zephyr-servers:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "" | ||||
| "Gelieve hier een (met spaties gescheiden) lijst van de de volledige namen " | ||||
| "van de Zephyr-servers op te geven." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "De op de clients ingestelde lijst mag een subset zijn van de op de servers " | ||||
| "ingestelde lijst." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
| "Als u Hesiod gebruikt om Zephyr-servers te adverteren kunt u dit veld " | ||||
| "leeglaten." | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "" | ||||
| #~ "Please type the full names of your zephyr servers, separated by spaces. " | ||||
| #~ "(note that this can be a subset of what you're telling the servers) If " | ||||
| #~ "you are using hesiod to advertise your zephyr servers, leave this blank." | ||||
| #~ msgstr "" | ||||
| #~ "Gelieve de volledige naam van uw zephyr-servers op te geven gescheiden " | ||||
| #~ "door spaties (merk op dat dit een subset kan zijn van wat u aan de " | ||||
| #~ "servers vertelt)." | ||||
|  | ||||
| #, fuzzy | ||||
| #~ msgid "" | ||||
| #~ "Please type the full names of your zephyr servers, separated by spaces. " | ||||
| #~ "(Note that this can be a superset of that you're telling the clients.)" | ||||
| #~ msgstr "" | ||||
| #~ "Gelieve de volledige namen van uw zephyr-servers op te geven, gescheiden " | ||||
| #~ "door spaties (merk op dat dit een superset kan zijn van wat u de clients " | ||||
| #~ "verteld)." | ||||
|  | ||||
| #~ msgid "for internal use" | ||||
| #~ msgstr "voor intern gebruik" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "We want to try and capture user changes when they edit a config file " | ||||
| #~ "manually.  To do this we look at the file in the config script. However, " | ||||
| #~ "in the case of preconfigure, the config script is run twice before the " | ||||
| #~ "postinst is run.  Thus we may read the wrong value before the edited " | ||||
| #~ "value is written out in postinst. If this is false we skip reading config " | ||||
| #~ "files until postinst runs." | ||||
| #~ msgstr "" | ||||
| #~ "Er wordt geprobeerd om gebruikersaanpassingen op te vangen wanneer een " | ||||
| #~ "configuratiebestand handmatig aangepast wordt.  Hiertoe kijkt het " | ||||
| #~ "'config'-script in het configuratiebestand, maar in het geval van " | ||||
| #~ "preconfigure wordt dit script tweemaal uitgevoerd voordat het 'postinst'-" | ||||
| #~ "script gedraaid wordt. Dit kan er toe leiden dat de verkeerde waarde " | ||||
| #~ "wordt uitgeschreven voordat de aangepaste waarde uitgeschreven wordt in " | ||||
| #~ "het 'postinst'-script. Als dit onwaar is slaan we het lezen van " | ||||
| #~ "configuratiebestanden over totdat het 'postinst'-script uitgevoerd is." | ||||
|  | ||||
| #~ msgid "You have no zephyr servers specified for the client" | ||||
| #~ msgstr "U heeft geen zephyr-servers opgegeven voor de client." | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "The zephyr-clients package for whatever reason does not have any zephyr " | ||||
| #~ "servers configured.  Please edit the file /etc/default/zephyr-clients and " | ||||
| #~ "add the names of your zephyr servers, separated by spaces to the zhm_args " | ||||
| #~ "variable." | ||||
| #~ msgstr "" | ||||
| #~ "Het 'zephyr-clients'-pakket heeft om wat voor reden dan ook geen zephyr-" | ||||
| #~ "servers ingesteld. Gelieve het bestand /etc/default/zephyr-clients aan te " | ||||
| #~ "passen en de namen van uw zephyr-servers gescheiden door spaties toe te " | ||||
| #~ "voegen aan de 'zhm_args'-variabele." | ||||
							
								
								
									
										98
									
								
								debian/po/pt.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								debian/po/pt.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | ||||
| # Portuguese translation for zephyr's debconf messages | ||||
| # Ricardo Silva <ardoric@gmail.com>, 2007 | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: zephyr 2.1.20070719.SNAPSHOT-3\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2007-12-19 22:05+0000\n" | ||||
| "Last-Translator: Ricardo Silva <ardoric@gmail.com>\n" | ||||
| "Language-Team: Portuguese <traduz@debianpt.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Servidores Zephyr:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "" | ||||
| "Por favor especifique o nome completo dos servidores Zephyr, numa lista " | ||||
| "separada por espaços." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "A lista configurada nos clientes pode ser um sub-conjunto da lista " | ||||
| "configurada nos servidores." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
| "Esta opção pode ser deixada vazia se o Hesiod for utilizado para anunciar os " | ||||
| "servidores Zephyr." | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "Please type the full names of your zephyr servers, separated by spaces. " | ||||
| #~ "(note that this can be a subset of what you're telling the servers) If " | ||||
| #~ "you are using hesiod to advertise your zephyr servers, leave this blank." | ||||
| #~ msgstr "" | ||||
| #~ "Por favor escreva os nomes completos dos seus servidores zephyr, " | ||||
| #~ "separados por espaços. (note que esta lista pode ser um subconjunto do " | ||||
| #~ "que diz aos servidores)" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "Please type the full names of your zephyr servers, separated by spaces. " | ||||
| #~ "(Note that this can be a superset of that you're telling the clients.)" | ||||
| #~ msgstr "" | ||||
| #~ "Por favor escreva os nomes completos dos seus servidores zephyr, " | ||||
| #~ "separados por espaços. (Note que esta lista pode ser um super-conjunto " | ||||
| #~ "do que diz aos clientes.)" | ||||
|  | ||||
| #~ msgid "for internal use" | ||||
| #~ msgstr "para uso interno" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "We want to try and capture user changes when they edit a config file " | ||||
| #~ "manually.  To do this we look at the file in the config script. However, " | ||||
| #~ "in the case of preconfigure, the config script is run twice before the " | ||||
| #~ "postinst is run.  Thus we may read the wrong value before the edited " | ||||
| #~ "value is written out in postinst. If this is false we skip reading config " | ||||
| #~ "files until postinst runs." | ||||
| #~ msgstr "" | ||||
| #~ "Tentamos determinar que alterações os utilizadores fazem quando editam " | ||||
| #~ "um ficheiro de configuração manualmente. Para tal analisamos o ficheiro " | ||||
| #~ "no script de configuração. No entanto quando há pré-configuração, o " | ||||
| #~ "script de configuração é corrido duas vezes antes do pós-instalaçÃ" | ||||
| #~ "£o. Assim podemos ler os valores errados antes que o valor editado seja " | ||||
| #~ "escrito no pós-instalação. Se esta opção for falsa não analisamos " | ||||
| #~ "os ficheiros de configuração até que o pós-instalação corra." | ||||
|  | ||||
| #~ msgid "You have no zephyr servers specified for the client" | ||||
| #~ msgstr "Não tem nenhum servidor zephyr especificado para o cliente" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "The zephyr-clients package for whatever reason does not have any zephyr " | ||||
| #~ "servers configured.  Please edit the file /etc/default/zephyr-clients and " | ||||
| #~ "add the names of your zephyr servers, separated by spaces to the zhm_args " | ||||
| #~ "variable." | ||||
| #~ msgstr "" | ||||
| #~ "O pacote zephyr-clients por alguma razão não tem nenhum servidor zephyr " | ||||
| #~ "configurado. Por favor edite o ficheiro /etc/default/zephyr-clients e " | ||||
| #~ "adicione os nomes dos seus servidores zephyr, separados por espaços à " | ||||
| #~ "variável zhm_args." | ||||
							
								
								
									
										111
									
								
								debian/po/pt_BR.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								debian/po/pt_BR.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| # Translators, if you are not familiar with the PO format, gettext | ||||
| # documentation is worth reading, especially sections dedicated to | ||||
| # this format, e.g. by running: | ||||
| # info -n '(gettext)PO Files' | ||||
| # info -n '(gettext)Header Entry' | ||||
| # Some information specific to po-debconf are available at | ||||
| # /usr/share/doc/po-debconf/README-trans | ||||
| # or http://www.debian.org/intl/l10n/po-debconf/README-trans | ||||
| # Developers do not need to manually edit POT or PO files. | ||||
| # | ||||
| # 	 | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: zephyr 2.1\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2008-10-06 02:33-0300\n" | ||||
| "Last-Translator: Felipe Augusto van de Wiel (faw) <faw@debian.org>\n" | ||||
| "Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian." | ||||
| "org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "pt_BR\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Servidores Zephyr:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "" | ||||
| "Por favor, especifique os nomes completos dos servidores Zephyr, use uma " | ||||
| "lista separada por espaços." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "A lista configurada nos clientes pode ser um subconjunto da lista " | ||||
| "configurada nos servidores." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
| "É possível deixar este campo vazio se o Hesiod for usado para anunciar os " | ||||
| "servidores Zephyr." | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "Please type the full names of your zephyr servers, separated by spaces. " | ||||
| #~ "(note that this can be a subset of what you're telling the servers) If " | ||||
| #~ "you are using hesiod to advertise your zephyr servers, leave this blank." | ||||
| #~ msgstr "" | ||||
| #~ "Por favor digite o nome completo dos seus servidores zephyr, separado por " | ||||
| #~ "espaços. (note que isso pode ser um subconjunto daquilo que você está " | ||||
| #~ "dizendo aos servidores)" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "Please type the full names of your zephyr servers, separated by spaces. " | ||||
| #~ "(Note that this can be a superset of that you're telling the clients.)" | ||||
| #~ msgstr "" | ||||
| #~ "Por favor digite os nomes completos de seus servidores zephyr, separado " | ||||
| #~ "por espaços. (Note que isso pode ser um subconjunto daquilo que você está " | ||||
| #~ "dizendo aos clientes.)" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "We want to try and capture user changes when they edit a config file " | ||||
| #~ "manually.  To do this we look at the file in the config script. However, " | ||||
| #~ "in the case of preconfigure, the config script is run twice before the " | ||||
| #~ "postinst is run.  Thus we may read the wrong value before the edited " | ||||
| #~ "value is written out in postinst. If this is false we skip reading config " | ||||
| #~ "files until postinst runs." | ||||
| #~ msgstr "" | ||||
| #~ "Nós queremos tentar e capturar mudanças de usuários quando eles editam um " | ||||
| #~ "arquivo de configuração manualmente. Para fazer isso nós olhamos no " | ||||
| #~ "arquivo do script de configuração. De qualquer forma, no caso de pré-" | ||||
| #~ "configuração, o script de configuração é executado duas vezes antes do " | ||||
| #~ "\"postinst\" ser executado. Se isso for falso nós continuamos lendo os " | ||||
| #~ "arquivos de configuração até que o \"postinst\" seja executado." | ||||
|  | ||||
| #~ msgid "You have no zephyr servers specified for the client" | ||||
| #~ msgstr "Você não tem servidores zephyr especificados para o cliente" | ||||
|  | ||||
| #~ msgid "" | ||||
| #~ "The zephyr-clients package for whatever reason does not have any zephyr " | ||||
| #~ "servers configured.  Please edit the file /etc/default/zephyr-clients and " | ||||
| #~ "add the names of your zephyr servers, separated by spaces to the zhm_args " | ||||
| #~ "variable." | ||||
| #~ msgstr "" | ||||
| #~ "Por uma razão qualquer o pacote zephyr-clients não possui qualquer " | ||||
| #~ "servidor zephyr configurado. Por favor edite o arquivo /etc/default/" | ||||
| #~ "zephyr-clients e adicione os nomes dos seus servidores zephyr, separado " | ||||
| #~ "por espaços na variável zhm_args." | ||||
|  | ||||
| #~ msgid "What are your zephyr servers?" | ||||
| #~ msgstr "Quais são os seus servidores zephyr?" | ||||
|  | ||||
| #~ msgid "You should never see this" | ||||
| #~ msgstr "Você nunca deveria ter visto isso" | ||||
							
								
								
									
										61
									
								
								debian/po/ru.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								debian/po/ru.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| # translation of ru.po to Russian | ||||
| # | ||||
| #    Translators, if you are not familiar with the PO format, gettext | ||||
| #    documentation is worth reading, especially sections dedicated to | ||||
| #    this format, e.g. by running: | ||||
| #         info -n '(gettext)PO Files' | ||||
| #         info -n '(gettext)Header Entry' | ||||
| # | ||||
| #    Some information specific to po-debconf are available at | ||||
| #            /usr/share/doc/po-debconf/README-trans | ||||
| #         or http://www.debian.org/intl/l10n/po-debconf/README-trans | ||||
| # | ||||
| #    Developers do not need to manually edit POT or PO files. | ||||
| # | ||||
| # Unknown, 2003,. | ||||
| # Yuri Kozlov <kozlov.y@gmail.com>, 2006, 2007. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: 2.1.20070719.SNAPSHOT-3\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2007-12-19 20:35+0300\n" | ||||
| "Last-Translator: Yuri Kozlov <kozlov.y@gmail.com>\n" | ||||
| "Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: KBabel 1.11.4\n" | ||||
| "Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" | ||||
| "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Серверы Zephyr:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "Введите список полных имён серверов Zephyr через пробел." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "На клиентах можно указывать подмножество списка, настроенного на серверах." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
| "Можно ничего не вводить, если для объявления серверов Zephyr используется " | ||||
| "Hesiod." | ||||
							
								
								
									
										57
									
								
								debian/po/sv.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								debian/po/sv.po
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| # translation of zephyr_2.1.20070719.SNAPSHOT-1.1_sv.po to Swedish | ||||
| # Translators, if you are not familiar with the PO format, gettext | ||||
| # documentation is worth reading, especially sections dedicated to | ||||
| # this format, e.g. by running: | ||||
| # info -n '(gettext)PO Files' | ||||
| # info -n '(gettext)Header Entry' | ||||
| # Some information specific to po-debconf are available at | ||||
| # /usr/share/doc/po-debconf/README-trans | ||||
| # or http://www.debian.org/intl/l10n/po-debconf/README-trans | ||||
| # Developers do not need to manually edit POT or PO files. | ||||
| # | ||||
| # Martin <20>gren <martin.agren@gmail.com>, 2008. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: zephyr_2.1.20070719.SNAPSHOT-1.1_sv\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: 2008-07-20 10:41+0200\n" | ||||
| "Last-Translator: Martin <20>gren <martin.agren@gmail.com>\n" | ||||
| "Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=ISO-8859-1\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: KBabel 1.11.4\n" | ||||
| "Plural-Forms:  nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "Zephyr-servrar:" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "Ange hela namnen p<> Zephyr-servrarna som en blankstegsseparerad lista." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
| "Den lista som konfigureras p<> klienter kan vara en delm<6C>ngd av listan som " | ||||
| "konfigureras p<> servrar." | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
| "Detta f<>lt kan l<>mnas tomt om Hesiod anv<6E>nds f<>r att tillk<6C>nnage Zephyr-" | ||||
| "servrar." | ||||
							
								
								
									
										45
									
								
								debian/po/templates.pot
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								debian/po/templates.pot
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
| #, fuzzy | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: Source: zephyr@packages.debian.org\n" | ||||
| "POT-Creation-Date: 2007-12-05 09:47+0530\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=CHARSET\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "Zephyr servers:" | ||||
| msgstr "" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "Please specify the full names of the Zephyr servers, as a space-separated " | ||||
| "list." | ||||
| msgstr "" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 ../zephyr-server.templates:2001 | ||||
| msgid "" | ||||
| "The list configured on clients can be a subset of the list configured on " | ||||
| "servers." | ||||
| msgstr "" | ||||
|  | ||||
| #. Type: string | ||||
| #. Description | ||||
| #: ../zephyr-clients.templates:2001 | ||||
| msgid "This can be left empty if Hesiod is used to advertise Zephyr servers." | ||||
| msgstr "" | ||||
							
								
								
									
										177
									
								
								debian/rules
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										177
									
								
								debian/rules
									
									
									
									
										vendored
									
									
										Executable file
									
								
							| @@ -0,0 +1,177 @@ | ||||
| #!/usr/bin/make -f | ||||
| # Sample debian/rules that uses debhelper.  | ||||
| # GNU copyright 1997 by Joey Hess. | ||||
| # | ||||
| # This version is for a hypothetical package that builds an | ||||
| # architecture-dependant package, as well as an architecture-independent | ||||
| # package. | ||||
|  | ||||
| # Uncomment this to turn on verbose mode.  | ||||
| #export DH_VERBOSE=1 | ||||
| VARIETALS=krb5 | ||||
| #VARIETALS=krb krb45 krb5 | ||||
|  | ||||
| PACKAGES:=-plibzephyr4 -pzephyr-clients -pzephyr-server -plibzephyr-dev -plibzephyr-python $(foreach i,$(VARIETALS),-plibzephyr4-$(i) -pzephyr-server-$(i)) | ||||
|  | ||||
| # This has to be exported to make some magic below work. | ||||
| export DH_OPTIONS | ||||
| CONFIGURE_ROOT=--prefix=/usr --mandir=\$${prefix}/share/man \ | ||||
| 	--infodir=\$${prefix}/share/info --sysconfdir=/etc --datadir=/etc \ | ||||
| 	--with-cares=/usr --with-hesiod=/usr --enable-cmu-zwgcplus | ||||
| CONFIGURE_krb5=--with-krb5=/usr | ||||
| CONFIGURE_krb45=--with-krb4=/usr --with-krb5=/usr | ||||
| CONFIGURE_krb=--with-krb4=/usr | ||||
| CONFIGURE_no-krb= | ||||
| CFLAGS=-g -O | ||||
| CHECK= | ||||
|  | ||||
| # see /usr/share/doc/autotools-dev/README.Debian.gz | ||||
| export DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) | ||||
| export DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) | ||||
|  | ||||
| # FOR AUTOCONF 2.52 AND NEWER ONLY | ||||
| ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) | ||||
|   CONFIGURE_ROOT += --build $(DEB_HOST_GNU_TYPE) | ||||
| else | ||||
|   CONFIGURE_ROOT += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) | ||||
| endif | ||||
|  | ||||
| BUILD_VARIETALS=$(VARIETALS) no-krb | ||||
|  | ||||
| configure: configure-stamp | ||||
| configure-stamp: | ||||
| 	dh_testdir | ||||
| 	# Add here commands to configure the package. | ||||
| 	libtoolize | ||||
| 	aclocal | ||||
| 	automake -a || true # we only want this for install-sh | ||||
| 	autoreconf | ||||
| 	mkdir -p $(BUILD_VARIETALS) | ||||
| 	$(foreach VARIETY,$(BUILD_VARIETALS),(cd $(VARIETY) && CFLAGS="$(CFLAGS)" ../configure $(CONFIGURE_$(VARIETY)) $(CONFIGURE_ROOT));) | ||||
| 	touch configure-stamp | ||||
|  | ||||
| build-arch: build-stamp | ||||
| build-indep: build-stamp | ||||
| build: build-stamp | ||||
| build-stamp: configure-stamp | ||||
| 	dh_testdir | ||||
|  | ||||
| 	# Add here commands to compile the package. | ||||
| 	set -e; \ | ||||
| 	for dir in $(VARIETALS) ; do  \ | ||||
| 		$(MAKE) -C $$dir h/zephyr_version.h; $(MAKE) -C $$dir/lib all $(CHECK); $(MAKE) -C $$dir/server; \ | ||||
| 	done | ||||
| 	$(MAKE) -C no-krb all $(CHECK) | ||||
|  | ||||
| 	touch build-stamp | ||||
|  | ||||
| clean: | ||||
| 	dh_testdir | ||||
| 	dh_testroot | ||||
| 	-rm -f build-stamp configure-stamp | ||||
|  | ||||
| 	# Add here commands to clean up after the build process. | ||||
| 	-rm -rf autom4te.cache m4 | ||||
| 	-rm aclocal.m4 config.guess config.sub configure h/config.h.in \ | ||||
| 		install-sh ltmain.sh | ||||
| 	-rm -rf $(VARIETALS) no-krb debian/tmp-krb* | ||||
| 	-rm debian/zephyr-server-krb.files | ||||
| 	-rm debian/zephyr-server-krb.templates | ||||
| 	-rm debian/zephyr-server-krb.config | ||||
| 	-rm debian/zephyr-server-krb.postinst | ||||
| 	-rm debian/zephyr-server-krb5.README.Debian \ | ||||
| 		debian/zephyr-server-krb5.docs debian/zephyr-server-krb5.files \ | ||||
| 		debian/zephyr-server-krb5.postinst debian/zephyr-server-krb5.postrm \ | ||||
| 		debian/zephyr-server-krb5.templates | ||||
| 	-rm debian/zephyr-server-krb45.* | ||||
| 	-rm debian/libzephyr4-krb.files debian/libzephyr4-krb5.files \ | ||||
| 		debian/libzephyr4-krb45.files | ||||
|  | ||||
| 	dh_clean -XTAGS | ||||
|  | ||||
| install: DH_OPTIONS= | ||||
| install: build | ||||
| 	dh_testdir | ||||
| 	dh_testroot | ||||
| 	dh_prep -XTAGS | ||||
| 	-rm -rf debian/tmp-krb* | ||||
| 	dh_installdirs | ||||
|  | ||||
| 	# Add here commands to install the package into debian/tmp. | ||||
| 	$(MAKE) -C no-krb DESTDIR=$(CURDIR)/debian/tmp install | ||||
| 	for dir in $(VARIETALS); do \ | ||||
| 		$(MAKE) -C $$dir SUBDIRS="lib server" DESTDIR=$(CURDIR)/debian/tmp-$$dir install; \ | ||||
| 	done | ||||
| 	mkdir -p debian/tmp/etc/zephyr/acl | ||||
| 	set -x; for i in debian/acl/*; do install -c -m 644 -o root $$i debian/tmp/etc/zephyr/acl; done; set +x | ||||
| 	install -c -m 644 debian/zephyr.vars debian/tmp/etc/zephyr | ||||
| 	install -c -m 644 debian/default.subscriptions debian/tmp/etc/zephyr | ||||
| 	for dir in $(VARIETALS); do \ | ||||
| 		cp -rp debian/tmp/etc/zephyr/acl debian/tmp-$$dir/etc/zephyr; \ | ||||
| 	done | ||||
| 	mkdir -p debian/tmp/usr/lib/python2.5/site-packages | ||||
| 	install -c -m 644 python/zephyr_ctypes.py debian/tmp/usr/lib/python2.5/site-packages | ||||
|  | ||||
| # Build architecture-independent files here. | ||||
| # Pass -i to all debhelper commands in this target to reduce clutter. | ||||
| binary-indep: build install | ||||
|  | ||||
| # Build architecture-dependent files here. | ||||
| # Pass -a to all debhelper commands in this target to reduce clutter. | ||||
| binary-arch: build install | ||||
| 	dh_testdir | ||||
| 	dh_testroot | ||||
| 	set -e; \ | ||||
| 	for file in files templates postinst docs; do \ | ||||
| 		for dir in $(VARIETALS); do \ | ||||
| 			cp debian/zephyr-server.$$file debian/zephyr-server-$$dir.$$file; \ | ||||
| 		done; \ | ||||
| 	done | ||||
| 	for file in config init; do \ | ||||
| 		for dir in $(filter-out krb5,$(VARIETALS)); do \ | ||||
| 			cp debian/zephyr-server.$$file debian/zephyr-server-$$dir.$$file; \ | ||||
| 		done; \ | ||||
| 	done | ||||
| 	for file in README.Debian docs postrm; do \ | ||||
| 		for dir in $(filter-out krb,$(VARIETALS)); do \ | ||||
| 			cp debian/zephyr-server-krb.$$file debian/zephyr-server-$$dir.$$file; \ | ||||
| 		done; \ | ||||
| 	done | ||||
| 	for dir in $(VARIETALS); do \ | ||||
| 		cp debian/libzephyr4.files debian/libzephyr4-$$dir.files; \ | ||||
| 	done | ||||
| 	dh_movefiles  -plibzephyr4 -pzephyr-clients -pzephyr-server -plibzephyr-dev -plibzephyr-python | ||||
| 	for dir in $(VARIETALS); do \ | ||||
| 		dh_movefiles --sourcedir=debian/tmp-$$dir -plibzephyr4-$$dir -pzephyr-server-$$dir; \ | ||||
| 	done | ||||
| 	dh_installdebconf  | ||||
| 	dh_installdocs | ||||
| 	dh_installinit -pzephyr-clients --init-script=zhm --no-start | ||||
| 	dh_installinit -pzephyr-server --init-script=zephyrd | ||||
| 	for dir in $(VARIETALS); do \ | ||||
| 		dh_installinit -pzephyr-server-$$dir --init-script=zephyrd; \ | ||||
| 	done | ||||
| 	dh_installchangelogs | ||||
| 	dh_pycentral -plibzephyr-python | ||||
| 	dh_python -plibzephyr-python | ||||
| 	dh_strip | ||||
| 	dh_compress | ||||
| 	dh_fixperms | ||||
| 	dh_makeshlibs | ||||
| 	# sigh | ||||
| 	for dir in $(VARIETALS); do \ | ||||
| 		cp debian/libzephyr4/DEBIAN/shlibs debian/libzephyr4-$$dir/DEBIAN/shlibs; \ | ||||
| 	done | ||||
| 	dh_shlibdeps $(PACKAGES) | ||||
| 	dh_installdeb $(PACKAGES) | ||||
| 	dh_gencontrol $(PACKAGES) | ||||
| 	dh_md5sums $(PACKAGES) | ||||
| 	dh_builddeb $(PACKAGES) | ||||
| 	for dir in $(VARIETALS); do \ | ||||
| 		dh_builddeb --sourcedir=debian/tmp-$$dir -plibzephyr4-$$dir -pzephyr-server-$$dir; \ | ||||
| 	done | ||||
|  | ||||
|  | ||||
| binary: binary-indep binary-arch | ||||
|  | ||||
| .PHONY: build clean binary-indep binary-arch binary install | ||||
							
								
								
									
										42
									
								
								debian/zephyr-clients.config
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								debian/zephyr-clients.config
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| #!/bin/sh -e | ||||
|  | ||||
| . /usr/share/debconf/confmodule | ||||
| db_version 2.0 | ||||
|  | ||||
| db_get zephyr-clients/servers || true | ||||
| if test -z "$RET" | ||||
| then | ||||
| 	# If there's an /etc/zephyr/server.list file lying around, read it | ||||
| 	if test -f /etc/zephyr/server.list | ||||
| 	then | ||||
| 		z="`cat /etc/zephyr/server.list`" | ||||
| 	 | ||||
| 		if test -n "$z" | ||||
| 		then | ||||
| 		    db_set zephyr-clients/servers "`echo $z`" | ||||
| 		fi | ||||
| 	else | ||||
| 		# if there happens to be zephyr server decconf on this machine, | ||||
| 		# see what its debconf knows about zephyr servers... | ||||
| 		if db_get zephyr-server/servers && test -n "$RET" | ||||
| 		then | ||||
| 			db_set zephyr-clients/servers $RET | ||||
| 		fi | ||||
| 	fi | ||||
| fi | ||||
|  | ||||
| db_get zephyr-clients/read_conf  | ||||
| if test -f /etc/default/zephyr-clients -a \( "$RET" = true \) | ||||
| then | ||||
| 	zhm_args="" | ||||
| 	. /etc/default/zephyr-clients | ||||
| 	if test -n "$zhm_args" | ||||
| 	then | ||||
| 		db_set zephyr-clients/read_conf false | ||||
| 		db_set zephyr-clients/servers "$zhm_args" | ||||
| 	fi | ||||
| fi | ||||
|  | ||||
| db_input high zephyr-clients/servers || true | ||||
|  | ||||
| db_go || true | ||||
							
								
								
									
										1
									
								
								debian/zephyr-clients.docs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/zephyr-clients.docs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| USING | ||||
							
								
								
									
										24
									
								
								debian/zephyr-clients.files
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								debian/zephyr-clients.files
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| usr/bin/zaway | ||||
| usr/bin/zctl | ||||
| usr/bin/zleave | ||||
| usr/bin/zlocate | ||||
| usr/bin/znol | ||||
| usr/bin/zstat | ||||
| usr/bin/zwrite | ||||
| usr/bin/zwgc | ||||
| usr/sbin/zshutdown_notify | ||||
| usr/sbin/zhm | ||||
| usr/share/man/man1/zephyr.1 | ||||
| usr/share/man/man1/zaway.1 | ||||
| usr/share/man/man1/zctl.1 | ||||
| usr/share/man/man1/zleave.1 | ||||
| usr/share/man/man1/zlocate.1 | ||||
| usr/share/man/man1/znol.1 | ||||
| usr/share/man/man1/zwrite.1 | ||||
| usr/share/man/man1/zwgc.1 | ||||
| usr/share/man/man8/zshutdown_notify.8 | ||||
| usr/share/man/man8/zstat.8 | ||||
| usr/share/man/man8/zhm.8 | ||||
| etc/zephyr/zwgc.desc | ||||
| etc/zephyr/zwgc_resources | ||||
| etc/zephyr/zephyr.vars | ||||
							
								
								
									
										74
									
								
								debian/zephyr-clients.init
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								debian/zephyr-clients.init
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| #! /bin/sh | ||||
| # | ||||
| # skeleton	example file to build /etc/init.d/ scripts. | ||||
| #		This file should be used to construct scripts for /etc/init.d. | ||||
| # | ||||
| #		Written by Miquel van Smoorenburg <miquels@cistron.nl>. | ||||
| #		Modified for Debian GNU/Linux | ||||
| #		by Ian Murdock <imurdock@gnu.ai.mit.edu>. | ||||
| # | ||||
| # Version:	@(#)skeleton  1.8  03-Mar-1998  miquels@cistron.nl | ||||
| # | ||||
| # This file was automatically customized by dh-make on Mon,  4 Dec 2000 05:28:22 -0500 | ||||
|  | ||||
| PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin | ||||
| DAEMON=/usr/sbin/zhm | ||||
| NAME=zhm | ||||
| DESC="zephyr host manager" | ||||
|  | ||||
| test -f $DAEMON || exit 0 | ||||
|  | ||||
| set -e | ||||
|  | ||||
| if test -f /etc/default/zephyr-clients | ||||
| then | ||||
| 	. /etc/default/zephyr-clients | ||||
| fi | ||||
|  | ||||
| case "$1" in | ||||
|   start) | ||||
| 	echo -n "Starting $DESC: " | ||||
| 	start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ | ||||
| 		--exec $DAEMON -- $zhm_args | ||||
| 	echo "$NAME." | ||||
| 	;; | ||||
|   stop) | ||||
| 	echo -n "Stopping $DESC: " | ||||
| 	start-stop-daemon --oknodo --stop --quiet --pidfile /var/run/$NAME.pid \ | ||||
| 		--name $NAME | ||||
| 	echo "$NAME."- | ||||
| 	;; | ||||
|   restart|force-reload) | ||||
| 	# | ||||
| 	#	If the "reload" option is implemented, move the "force-reload" | ||||
| 	#	option to the "reload" entry above. If not, "force-reload" is | ||||
| 	#	just the same as "restart". | ||||
| 	# | ||||
| 	echo -n "Restarting $DESC: " | ||||
| 	start-stop-daemon --oknodo --stop --retry 5 --quiet --pidfile \ | ||||
| 		/var/run/$NAME.pid --name $NAME | ||||
| 	start-stop-daemon --start --quiet --pidfile \ | ||||
| 		/var/run/$NAME.pid --exec $DAEMON -- -N $zhm_args | ||||
| 	echo "$NAME." | ||||
| 	;; | ||||
|   *) | ||||
| 	N=/etc/init.d/$NAME | ||||
| 	# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 | ||||
| 	echo "Usage: $N {start|stop|restart|force-reload}" >&2 | ||||
| 	exit 1 | ||||
| 	;; | ||||
| esac | ||||
|  | ||||
| exit 0 | ||||
|  | ||||
| ### BEGIN INIT INFO | ||||
| # Provides:          zhm | ||||
| # Required-Start:    $syslog $network $remote_fs | ||||
| # Required-Stop:     $syslog $remote_fs | ||||
| # Should-Stop:       $network | ||||
| # Default-Start:     2 3 4 5 | ||||
| # Default-Stop:      0 1 6 | ||||
| # Short-Description: Start the zephyr host manager daemon. | ||||
| # Description:       Start the zephyr host manager daemon. | ||||
| ### END INIT INFO | ||||
|  | ||||
							
								
								
									
										84
									
								
								debian/zephyr-clients.postinst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								debian/zephyr-clients.postinst
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
| #! /bin/sh | ||||
| # postinst script for zephyr | ||||
| # | ||||
| # see: dh_installdeb(1) | ||||
|  | ||||
| set -e | ||||
|  | ||||
| # summary of how this script can be called: | ||||
| #        * <postinst> `configure' <most-recently-configured-version> | ||||
| #        * <old-postinst> `abort-upgrade' <new version> | ||||
| #        * <conflictor's-postinst> `abort-remove' `in-favour' <package> | ||||
| #          <new-version> | ||||
| #        * <deconfigured's-postinst> `abort-deconfigure' `in-favour' | ||||
| #          <failed-install-package> <version> `removing' | ||||
| #          <conflicting-package> <version> | ||||
| # for details, see /usr/share/doc/packaging-manual/ | ||||
| # | ||||
| # quoting from the policy: | ||||
| #     Any necessary prompting should almost always be confined to the | ||||
| #     post-installation script, and should be protected with a conditional | ||||
| #     so that unnecessary prompting doesn't happen if a package's | ||||
| #     installation fails and the `postinst' is called with `abort-upgrade', | ||||
| #     `abort-remove' or `abort-deconfigure'. | ||||
|  | ||||
| case "$1" in | ||||
|     configure) | ||||
|  | ||||
| 	. /usr/share/debconf/confmodule | ||||
| 	db_version 2.0 | ||||
|  | ||||
| 	db_set zephyr-clients/read_conf true | ||||
|  | ||||
| 	if test -f /etc/zephyr/zephyr.conf | ||||
| 	then | ||||
| 		if test ! -f /etc/default/zephyr-clients | ||||
| 		then | ||||
| 			mv /etc/zephyr/zephyr.conf /etc/default/zephyr-clients | ||||
| 		fi | ||||
| 	fi | ||||
|  | ||||
| 	# if /etc/default/zephyr-clients already exists and has a zhm_args | ||||
|         # line, the config script should have sucked it into debconf | ||||
| 	db_get zephyr-clients/servers || true | ||||
|  | ||||
| 	tmpfile=/etc/default/zephyr-client.dpkg-new | ||||
| 	if test -f /etc/default/zephyr-clients | ||||
| 	then | ||||
| 		grep -v ^zhm_args /etc/default/zephyr-clients > $tmpfile || true | ||||
| 	else | ||||
| 		cat > $tmpfile << EOF | ||||
| # This file is automatically rewritten by the zephyr-clients post-install | ||||
| # script.  So treat it right. | ||||
| EOF | ||||
| 	fi | ||||
| 	echo zhm_args=\"${RET}\" >> $tmpfile | ||||
| 	cat $tmpfile > /etc/default/zephyr-clients | ||||
| 	rm $tmpfile | ||||
|     ;; | ||||
|  | ||||
|     abort-upgrade|abort-remove|abort-deconfigure) | ||||
|  | ||||
|     ;; | ||||
|  | ||||
|     *) | ||||
|         echo "postinst called with unknown argument \`$1'" >&2 | ||||
|         exit 0 | ||||
|     ;; | ||||
| esac | ||||
|  | ||||
| if [ -x "/etc/init.d/zhm" ]; then | ||||
| 	# this script does not necessarily fail if these do | ||||
|         if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then | ||||
|                 invoke-rc.d zhm restart | ||||
|         else | ||||
|                 /etc/init.d/zhm restart | ||||
|         fi | ||||
| fi | ||||
|  | ||||
| # dh_installdeb will replace this with shell code automatically | ||||
| # generated by other debhelper scripts. | ||||
|  | ||||
| #DEBHELPER# | ||||
|  | ||||
| exit 0 | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user