Compare commits
2 Commits
master
...
example-ze
Author | SHA1 | Date | |
---|---|---|---|
ee1236fa5c | |||
61f5ed8f01 |
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.
|
232
LICENSE
232
LICENSE
@ -1,232 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
“This License” refers to version 3 of the GNU General Public License.
|
||||
|
||||
“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
|
||||
|
||||
“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
|
||||
|
||||
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
|
||||
|
||||
A “covered work” means either the unmodified Program or a work based on the Program.
|
||||
|
||||
To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
|
||||
|
||||
To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
|
||||
|
||||
A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
|
||||
|
||||
The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
|
||||
|
||||
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
|
||||
|
||||
A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
|
||||
|
||||
“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
|
||||
|
||||
An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
|
||||
|
||||
A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
|
||||
|
||||
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
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/
|
@ -1,3 +0,0 @@
|
||||
# cpp-messenger-server
|
||||
|
||||
An exercise in C++ to make a messenger server akin to MSN/Yahoo/AOL Messenger.
|
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 :"
|
||||
|
||||
#. 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é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ée sur les clients peut être un sous-ensemble de la liste "
|
||||
"configuré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 être laissé vide si Hesiod est employé 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 Å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 Å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ä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änds för att tillkä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
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user