Goodbye push
This commit is contained in:
		
							
								
								
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -96,18 +96,8 @@ asn1_*.[cx] | |||||||
| /appl/gssmask/gssmask | /appl/gssmask/gssmask | ||||||
| /appl/kf/kf | /appl/kf/kf | ||||||
| /appl/kf/kfd | /appl/kf/kfd | ||||||
| /appl/kx/kx |  | ||||||
| /appl/kx/kxd |  | ||||||
| /appl/kx/rxtelnet |  | ||||||
| /appl/kx/rxterm |  | ||||||
| /appl/kx/tenletxr |  | ||||||
| /appl/otp/otp | /appl/otp/otp | ||||||
| /appl/otp/otpprint | /appl/otp/otpprint | ||||||
| /appl/popper/pop_debug |  | ||||||
| /appl/popper/popper |  | ||||||
| /appl/push/pfrom |  | ||||||
| /appl/push/push |  | ||||||
| /appl/rcp/rcp |  | ||||||
| /appl/su/su | /appl/su/su | ||||||
| /appl/test/gssapi_client | /appl/test/gssapi_client | ||||||
| /appl/test/gssapi_server | /appl/test/gssapi_server | ||||||
| @@ -118,7 +108,6 @@ asn1_*.[cx] | |||||||
| /appl/test/tcp_server | /appl/test/tcp_server | ||||||
| /appl/test/uu_client | /appl/test/uu_client | ||||||
| /appl/test/uu_server | /appl/test/uu_server | ||||||
| /appl/xnlock/xnlock |  | ||||||
| /cf/libtool.m4 | /cf/libtool.m4 | ||||||
| /cf/ltoptions.m4 | /cf/ltoptions.m4 | ||||||
| /cf/ltsugar.m4 | /cf/ltsugar.m4 | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ env: | |||||||
|  |  | ||||||
| before_install: | before_install: | ||||||
|     - sudo apt-get update -qq |     - sudo apt-get update -qq | ||||||
|     - sudo apt-get install -qq bison comerr-dev flex libcap-ng-dev libdb-dev libedit-dev libhesiod-dev libjson-perl libldap2-dev libncurses5-dev libperl4-corelibs-perl libsqlite3-dev libx11-dev libxau-dev libxt-dev pkg-config python ss-dev texinfo x11proto-core-dev unzip netbase |     - sudo apt-get install -qq bison comerr-dev flex libcap-ng-dev libdb-dev libedit-dev libjson-perl libldap2-dev libncurses5-dev libperl4-corelibs-perl libsqlite3-dev libx11-dev libxau-dev libxt-dev pkg-config python ss-dev texinfo x11proto-core-dev unzip netbase | ||||||
|     - mkdir ci-build |     - mkdir ci-build | ||||||
|     - mkdir coverity-build |     - mkdir coverity-build | ||||||
|     - ./autogen.sh |     - ./autogen.sh | ||||||
|   | |||||||
| @@ -16,7 +16,6 @@ SUBDIRS = 					\ | |||||||
| 	  dbutils				\ | 	  dbutils				\ | ||||||
| 	  $(dir_otp)				\ | 	  $(dir_otp)				\ | ||||||
| 	  gssmask				\ | 	  gssmask				\ | ||||||
| 	  push					\ |  | ||||||
| 	  su					\ | 	  su					\ | ||||||
| 	  test					\ | 	  test					\ | ||||||
| 	  kf					\ | 	  kf					\ | ||||||
|   | |||||||
| @@ -1,200 +0,0 @@ | |||||||
| 2005-04-19  Love Hörnquist Åstrand  <lha@it.su.se> |  | ||||||
|  |  | ||||||
| 	* push.c: catch when snprint needs a larger buffer |  | ||||||
|  |  | ||||||
| 2004-06-17  Johan Danielsson  <joda@pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* push.c: alloc memory to handle very long lines |  | ||||||
| 	 |  | ||||||
| 2003-04-03  Assar Westerlund  <assar@kth.se> |  | ||||||
|  |  | ||||||
| 	* push.c: fixed one incorrect fprintf to stderr |  | ||||||
|  |  | ||||||
| 2003-03-18  Love Hörnquist Åstrand  <lha@it.su.se> |  | ||||||
|  |  | ||||||
| 	* push.c: add names of pop states, add some more debugging and use |  | ||||||
| 	fprintf(stderr) for all dbg stmts. |  | ||||||
| 	 |  | ||||||
| 2001-09-04  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (doit): check return values from snprintf being negative |  | ||||||
|  |  | ||||||
| 2000-12-31  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (main): handle krb5_init_context failure consistently |  | ||||||
|  |  | ||||||
| 2000-12-26  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c: support several headers, from <mattiasa@e.kth.se> use |  | ||||||
| 	estrdup, emalloc, erealloc |  | ||||||
|  |  | ||||||
| 2000-11-29  Johan Danielsson  <joda@pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* pfrom.1: work around bug in grog that makes it think it needs |  | ||||||
| 	mdoc.old |  | ||||||
|  |  | ||||||
| 	* push.8: work around bug in grog that makes it think it needs |  | ||||||
| 	mdoc.old |  | ||||||
|  |  | ||||||
| 2000-11-27  Johan Danielsson  <joda@pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* push.c: add space to usage |  | ||||||
|  |  | ||||||
| 2000-10-08  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (doit): check that fds are not too large to select on |  | ||||||
|  |  | ||||||
| 2000-03-04  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* add man-page for pfrom |  | ||||||
|  |  | ||||||
| 1999-12-28  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (main): call k_getportbyname with port number in |  | ||||||
|  	network-byte-order |  | ||||||
|  |  | ||||||
| 1999-12-14  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (do_connect): remove bogus local block variable |  | ||||||
|  |  | ||||||
| 1999-12-05  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (do_connect): use `getaddrinfo' |  | ||||||
| 	* push.c: add --count (print number of messages and bytes at |  | ||||||
| 	beginning) |  | ||||||
|  |  | ||||||
| 1999-11-13  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c: make `-v' a arg_counter |  | ||||||
| 	 |  | ||||||
| 1999-11-02  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (main): redo the v4/v5 selection for consistency.  -4 -> |  | ||||||
|  	try only v4 -5 -> try only v5 none, -45 -> try v5, v4 |  | ||||||
|  |  | ||||||
| 1999-08-19  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (doit): remember to step over the error message when we |  | ||||||
|  	discover that XDELE is not supported |  | ||||||
|  |  | ||||||
| 1999-08-12  Johan Danielsson  <joda@pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* push.c: use XDELE |  | ||||||
|  |  | ||||||
| 1999-08-05  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (do_connect): v6-ify |  | ||||||
|  |  | ||||||
| 1999-06-15  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c: get_default_username and the resulting const propagation |  | ||||||
|  |  | ||||||
| 1999-05-21  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (parse_pobox): try $USERNAME |  | ||||||
|  |  | ||||||
| 1999-05-11  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (do_v5): remove unused and non-working code |  | ||||||
|  |  | ||||||
| 1999-05-10  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (do_v5): call krb5_sendauth with ccache == NULL |  | ||||||
| 	 |  | ||||||
| Wed Apr  7 23:40:00 1999  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.in: fix names of hesiod variables |  | ||||||
|  |  | ||||||
| Wed Mar 24 04:37:04 1999  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.am (pfrom): fix typo |  | ||||||
|  |  | ||||||
| 	* push.c (get_pobox): try to handle old and new hesiod APIs |  | ||||||
|  |  | ||||||
| Mon Mar 22 22:19:40 1999  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.am: hesoid -> hesiod |  | ||||||
|  |  | ||||||
| Sun Mar 21 18:02:10 1999  Johan Danielsson  <joda@hella.pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.am: bindir -> libexecdir |  | ||||||
|  |  | ||||||
| Sat Mar 20 00:12:26 1999  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.am: LDADD: add missing backslash |  | ||||||
|  |  | ||||||
| Thu Mar 18 15:28:35 1999  Johan Danielsson  <joda@hella.pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.am: clean pfrom |  | ||||||
|  |  | ||||||
| 	* Makefile.am: include Makefile.am.common |  | ||||||
|  |  | ||||||
| Mon Mar 15 18:26:16 1999  Johan Danielsson  <joda@blubb.pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* push.c: strncasecmp headers |  | ||||||
|  |  | ||||||
| Mon Feb 15 22:22:09 1999  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.in (pfrom): use libexecdir |  | ||||||
|  |  | ||||||
| 	* Makefile.am: build and install pfrom |  | ||||||
|  |  | ||||||
| 	* push.c (do_connect): init `s' |  | ||||||
| 	(pop_state): spell-check enums |  | ||||||
|  |  | ||||||
| Tue Nov 24 23:20:54 1998  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.in: build and install pfrom |  | ||||||
|  |  | ||||||
| 	* pfrom.in: bindir -> libexecdir |  | ||||||
|  |  | ||||||
| Sun Nov 22 15:33:52 1998  Johan Danielsson  <joda@hella.pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* push.c: eliminate some warnings |  | ||||||
|  |  | ||||||
| Sun Nov 22 10:34:54 1998  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.in (WFLAGS): set |  | ||||||
|  |  | ||||||
| Thu Nov 19 01:17:33 1998  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push_locl.h: add <hesiod.h> |  | ||||||
|  |  | ||||||
| 	* Makefile.am, Makefile.in: link and include hesiod |  | ||||||
|  |  | ||||||
| 	* push.c (get_pobox): new function. add hesiod support. |  | ||||||
|  |  | ||||||
| 1998-11-07  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.8: updated |  | ||||||
|  |  | ||||||
| 	* push.c: --from implementation from <lha@stacken.kth.se> |  | ||||||
|  |  | ||||||
| Fri Jul 10 01:14:45 1998  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (net_{read,write}): remove |  | ||||||
|  |  | ||||||
| Wed Jun 24 14:41:41 1998  Johan Danielsson  <joda@blubb.pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* push.c: allow `po:user@host' mailbox syntax |  | ||||||
|  |  | ||||||
| Tue Jun  2 17:35:06 1998  Johan Danielsson  <joda@emma.pdc.kth.se> |  | ||||||
|  |  | ||||||
| 	* push.c: quote '^From ' properly |  | ||||||
|  |  | ||||||
| Mon May 25 05:22:47 1998  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* Makefile.in (clean): PROGS -> PROGRAMS |  | ||||||
|  |  | ||||||
| Sun Apr 26 11:42:13 1998  Assar Westerlund  <assar@sics.se> |  | ||||||
|  |  | ||||||
| 	* push.c (main): better default for v4 and v5 |  | ||||||
|  |  | ||||||
| 	* push.c (main): init context correctly |  | ||||||
|  |  | ||||||
| 	* push.c: should work with krb4 |  | ||||||
|  |  | ||||||
| 	* push_locl.h: krb4 compat |  | ||||||
|  |  | ||||||
| 	* Makefile.in: new file |  | ||||||
|  |  | ||||||
| @@ -1,28 +0,0 @@ | |||||||
| # $Id$ |  | ||||||
|  |  | ||||||
| include $(top_srcdir)/Makefile.am.common |  | ||||||
|  |  | ||||||
| AM_CPPFLAGS += $(INCLUDE_hesiod) |  | ||||||
|  |  | ||||||
| WFLAGS += $(WFLAGS_LITE) |  | ||||||
|  |  | ||||||
| bin_SCRIPTS		= pfrom |  | ||||||
|  |  | ||||||
| libexec_PROGRAMS	= push |  | ||||||
|  |  | ||||||
| push_SOURCES = push.c push_locl.h |  | ||||||
|  |  | ||||||
| pfrom: pfrom.in |  | ||||||
| 	sed -e "s!%libexecdir%!$(libexecdir)!" $(srcdir)/pfrom.in > $@ |  | ||||||
| 	chmod +x $@ |  | ||||||
|  |  | ||||||
| man_MANS = push.8 pfrom.1 |  | ||||||
|  |  | ||||||
| CLEANFILES = pfrom |  | ||||||
|  |  | ||||||
| EXTRA_DIST = NTMakefile pfrom.in $(man_MANS) |  | ||||||
|  |  | ||||||
| LDADD = $(LIB_krb5) \ |  | ||||||
| 	$(LIB_hcrypto) \ |  | ||||||
| 	$(LIB_roken) \ |  | ||||||
| 	$(LIB_hesiod) |  | ||||||
| @@ -1,35 +0,0 @@ | |||||||
| ######################################################################## |  | ||||||
| # |  | ||||||
| # Copyright (c) 2009, Secure Endpoints Inc. |  | ||||||
| # All rights reserved. |  | ||||||
| #  |  | ||||||
| # Redistribution and use in source and binary forms, with or without |  | ||||||
| # modification, are permitted provided that the following conditions |  | ||||||
| # are met: |  | ||||||
| #  |  | ||||||
| # - Redistributions of source code must retain the above copyright |  | ||||||
| #   notice, this list of conditions and the following disclaimer. |  | ||||||
| #  |  | ||||||
| # - Redistributions in binary form must reproduce the above copyright |  | ||||||
| #   notice, this list of conditions and the following disclaimer in |  | ||||||
| #   the documentation and/or other materials provided with the |  | ||||||
| #   distribution. |  | ||||||
| #  |  | ||||||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |  | ||||||
| # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |  | ||||||
| # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |  | ||||||
| # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |  | ||||||
| # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |  | ||||||
| # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |  | ||||||
| # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |  | ||||||
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |  | ||||||
| # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
| # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |  | ||||||
| # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |  | ||||||
| # POSSIBILITY OF SUCH DAMAGE. |  | ||||||
| #  |  | ||||||
|  |  | ||||||
| RELDIR=appl\push  |  | ||||||
|  |  | ||||||
| !include ../../windows/NTMakefile.w32  |  | ||||||
|  |  | ||||||
| @@ -1,55 +0,0 @@ | |||||||
| .\" Copyright (c) 2000 - 2002 Kungliga Tekniska Högskolan |  | ||||||
| .\" (Royal Institute of Technology, Stockholm, Sweden). |  | ||||||
| .\" All rights reserved. |  | ||||||
| .\" |  | ||||||
| .\" Redistribution and use in source and binary forms, with or without |  | ||||||
| .\" modification, are permitted provided that the following conditions |  | ||||||
| .\" are met: |  | ||||||
| .\" |  | ||||||
| .\" 1. Redistributions of source code must retain the above copyright |  | ||||||
| .\"    notice, this list of conditions and the following disclaimer. |  | ||||||
| .\" |  | ||||||
| .\" 2. Redistributions in binary form must reproduce the above copyright |  | ||||||
| .\"    notice, this list of conditions and the following disclaimer in the |  | ||||||
| .\"    documentation and/or other materials provided with the distribution. |  | ||||||
| .\" |  | ||||||
| .\" 3. Neither the name of the Institute nor the names of its contributors |  | ||||||
| .\"    may be used to endorse or promote products derived from this software |  | ||||||
| .\"    without specific prior written permission. |  | ||||||
| .\" |  | ||||||
| .\" THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND |  | ||||||
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |  | ||||||
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |  | ||||||
| .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE |  | ||||||
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |  | ||||||
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |  | ||||||
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |  | ||||||
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |  | ||||||
| .\" SUCH DAMAGE. |  | ||||||
| .\" |  | ||||||
| .\" $Id$ |  | ||||||
| .\" |  | ||||||
| .Dd March 4, 2000 |  | ||||||
| .Dt PFROM 1 |  | ||||||
| .Os HEIMDAL |  | ||||||
| .Sh NAME |  | ||||||
| .Nm pfrom |  | ||||||
| .Nd "fetch a list of the current mail via POP" |  | ||||||
| .Sh SYNOPSIS |  | ||||||
| .Nm |  | ||||||
| .Op Fl 4 | Fl Fl krb4 |  | ||||||
| .Op Fl 5 | Fl Fl krb5 |  | ||||||
| .Op Fl v | Fl Fl verbose |  | ||||||
| .Op Fl c | -count |  | ||||||
| .Op Fl Fl header |  | ||||||
| .Oo Fl p Ar port-spec  \*(Ba Xo |  | ||||||
| .Fl Fl port= Ns Ar port-spec |  | ||||||
| .Xc |  | ||||||
| .Oc |  | ||||||
| .Sh DESCRIPTION |  | ||||||
| .Nm |  | ||||||
| is a script that does push --from. |  | ||||||
| .Sh SEE ALSO |  | ||||||
| .Xr push 8 |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
| # $Id$ |  | ||||||
| libexecdir=%libexecdir% |  | ||||||
| PATH=$libexecdir:$PATH |  | ||||||
| export PATH |  | ||||||
| push --from $* |  | ||||||
							
								
								
									
										132
									
								
								appl/push/push.8
									
									
									
									
									
								
							
							
						
						
									
										132
									
								
								appl/push/push.8
									
									
									
									
									
								
							| @@ -1,132 +0,0 @@ | |||||||
| .\" $Id$ |  | ||||||
| .\" |  | ||||||
| .Dd May 31, 1998 |  | ||||||
| .Dt PUSH 8 |  | ||||||
| .Os HEIMDAL |  | ||||||
| .Sh NAME |  | ||||||
| .Nm push |  | ||||||
| .Nd fetch mail via POP |  | ||||||
| .Sh SYNOPSIS |  | ||||||
| .Nm |  | ||||||
| .Op Fl 5 | Fl Fl krb5 |  | ||||||
| .Op Fl v | Fl Fl verbose |  | ||||||
| .Op Fl f | Fl Fl fork |  | ||||||
| .Op Fl l | -leave |  | ||||||
| .Op Fl Fl from |  | ||||||
| .Op Fl c | -count |  | ||||||
| .Op Fl Fl headers Ns = Ns Ar headers |  | ||||||
| .Oo Fl p Ar port-spec  \*(Ba Xo |  | ||||||
| .Fl Fl port Ns = Ns Ar port-spec |  | ||||||
| .Xc |  | ||||||
| .Oc |  | ||||||
| .Ar po-box |  | ||||||
| .Pa filename |  | ||||||
| .Sh DESCRIPTION |  | ||||||
| .Nm |  | ||||||
| retrieves mail from the post office box |  | ||||||
| .Ar po-box , |  | ||||||
| and stores the mail in mbox format in |  | ||||||
| .Pa filename . |  | ||||||
| The |  | ||||||
| .Ar po-box |  | ||||||
| can have any of the following formats: |  | ||||||
| .Bl -hang -compact -offset indent |  | ||||||
| .It Ql hostname:username |  | ||||||
| .It Ql po:hostname:username |  | ||||||
| .It Ql username@hostname |  | ||||||
| .It Ql po:username@hostname |  | ||||||
| .It Ql hostname |  | ||||||
| .It Ql po:username |  | ||||||
| .El |  | ||||||
| .Pp |  | ||||||
| If no username is specified, |  | ||||||
| .Nm |  | ||||||
| assumes that it's the same as on the local machine; |  | ||||||
| .Ar hostname |  | ||||||
| defaults to the value of the |  | ||||||
| .Ev MAILHOST |  | ||||||
| environment variable. |  | ||||||
| .Pp |  | ||||||
| Supported options: |  | ||||||
| .Bl -tag -width Ds |  | ||||||
| .It Xo |  | ||||||
| .Fl 5 , |  | ||||||
| .Fl Fl krb5 |  | ||||||
| .Xc |  | ||||||
| use Kerberos 5 (if compiled with support for Kerberos 5) |  | ||||||
| .It Xo |  | ||||||
| .Fl f , |  | ||||||
| .Fl Fl fork |  | ||||||
| .Xc |  | ||||||
| fork before starting to delete messages |  | ||||||
| .It Xo |  | ||||||
| .Fl l , |  | ||||||
| .Fl Fl leave |  | ||||||
| .Xc |  | ||||||
| don't delete fetched mail |  | ||||||
| .It Xo |  | ||||||
| .Fl Fl from |  | ||||||
| .Xc |  | ||||||
| behave like from. |  | ||||||
| .It Xo |  | ||||||
| .Fl c , |  | ||||||
| .Fl Fl count |  | ||||||
| .Xc |  | ||||||
| first print how many messages and bytes there are. |  | ||||||
| .It Xo |  | ||||||
| .Fl Fl headers Ns = Ns Ar headers |  | ||||||
| .Xc |  | ||||||
| a list of comma-separated headers that should get printed. |  | ||||||
| .It Xo |  | ||||||
| .Fl p Ar port-spec , |  | ||||||
| .Fl Fl port Ns = Ns Ar port-spec |  | ||||||
| .Xc |  | ||||||
| use this port instead of the default |  | ||||||
| .Ql kpop |  | ||||||
| or |  | ||||||
| .Ql 1109 . |  | ||||||
| .El |  | ||||||
| .Pp |  | ||||||
| The default is to first try Kerberos 5 authentication and then, if |  | ||||||
| that fails, Kerberos 4. |  | ||||||
| .Sh ENVIRONMENT |  | ||||||
| .Bl -tag -width Ds |  | ||||||
| .It Ev MAILHOST |  | ||||||
| points to the post office, if no other hostname is specified. |  | ||||||
| .El |  | ||||||
| .\".Sh FILES |  | ||||||
| .Sh EXAMPLES |  | ||||||
| .Bd -literal -offset indent |  | ||||||
| $ push cornfield:roosta ~/.emacs-mail-crash-box |  | ||||||
| .Ed |  | ||||||
| .Pp |  | ||||||
| tries to fetch mail for the user |  | ||||||
| .Ar roosta |  | ||||||
| from the post office at |  | ||||||
| .Dq cornfield , |  | ||||||
| and stores the mail in |  | ||||||
| .Pa ~/.emacs-mail-crash-box |  | ||||||
| (you are using Gnus, aren't you?) |  | ||||||
| .Bd -literal -offset indent |  | ||||||
| $ push --from -5 havregryn |  | ||||||
| .Ed |  | ||||||
| .Pp |  | ||||||
| tries to fetch |  | ||||||
| .Sy From: |  | ||||||
| lines for current user at post office |  | ||||||
| .Dq havregryn |  | ||||||
| using Kerberos 5. |  | ||||||
| .\".Sh DIAGNOSTICS |  | ||||||
| .Sh SEE ALSO |  | ||||||
| .Xr from 1 , |  | ||||||
| .Xr pfrom 1 , |  | ||||||
| .Xr movemail 8 , |  | ||||||
| .Xr popper 8 |  | ||||||
| .\".Sh STANDARDS |  | ||||||
| .Sh HISTORY |  | ||||||
| .Nm |  | ||||||
| was written while waiting for |  | ||||||
| .Nm movemail |  | ||||||
| to finish getting the mail. |  | ||||||
| .\".Sh AUTHORS |  | ||||||
| .\".Sh BUGS |  | ||||||
							
								
								
									
										788
									
								
								appl/push/push.c
									
									
									
									
									
								
							
							
						
						
									
										788
									
								
								appl/push/push.c
									
									
									
									
									
								
							| @@ -1,788 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 1997-2004 Kungliga Tekniska Högskolan |  | ||||||
|  * (Royal Institute of Technology, Stockholm, Sweden). |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without |  | ||||||
|  * modification, are permitted provided that the following conditions |  | ||||||
|  * are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright |  | ||||||
|  *    notice, this list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form must reproduce the above copyright |  | ||||||
|  *    notice, this list of conditions and the following disclaimer in the |  | ||||||
|  *    documentation and/or other materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of the Institute nor the names of its contributors |  | ||||||
|  *    may be used to endorse or promote products derived from this software |  | ||||||
|  *    without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND |  | ||||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |  | ||||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |  | ||||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE |  | ||||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |  | ||||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |  | ||||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |  | ||||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |  | ||||||
|  * SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include "push_locl.h" |  | ||||||
| RCSID("$Id$"); |  | ||||||
|  |  | ||||||
| #if defined(_AIX) && defined(STAT) |  | ||||||
| /* |  | ||||||
|  * AIX defines STAT to 1 in sys/dir.h |  | ||||||
|  */ |  | ||||||
| #  undef STAT |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef KRB5 |  | ||||||
| static int use_v5 = -1; |  | ||||||
| static krb5_context context; |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| static char *port_str; |  | ||||||
| static int verbose_level; |  | ||||||
| static int do_fork; |  | ||||||
| static int do_leave; |  | ||||||
| static int do_version; |  | ||||||
| static int do_help; |  | ||||||
| static int do_from; |  | ||||||
| static int do_count; |  | ||||||
| static char *header_str; |  | ||||||
|  |  | ||||||
| struct getargs args[] = { |  | ||||||
| #ifdef KRB5 |  | ||||||
|     { "krb5",	'5', arg_flag,		&use_v5,	"Use Kerberos V5", |  | ||||||
|       NULL }, |  | ||||||
| #endif |  | ||||||
|     { "verbose",'v', arg_counter,	&verbose_level,	"Verbose", |  | ||||||
|       NULL }, |  | ||||||
|     { "fork",	'f', arg_flag,		&do_fork,	"Fork deleting proc", |  | ||||||
|       NULL }, |  | ||||||
|     { "leave",	'l', arg_flag,		&do_leave,	"Leave mail on server", |  | ||||||
|       NULL }, |  | ||||||
|     { "port",	'p', arg_string,	&port_str,	"Use this port", |  | ||||||
|       "number-or-service" }, |  | ||||||
|     { "from",	 0,  arg_flag,		&do_from,	"Behave like from", |  | ||||||
|       NULL }, |  | ||||||
|     { "headers", 0,  arg_string,	&header_str,	"Headers to print", NULL }, |  | ||||||
|     { "count", 'c',  arg_flag,		&do_count,	"Print number of messages", NULL}, |  | ||||||
|     { "version", 0,  arg_flag,		&do_version,	"Print version", |  | ||||||
|       NULL }, |  | ||||||
|     { "help",	 0,  arg_flag,		&do_help,	NULL, |  | ||||||
|       NULL } |  | ||||||
|  |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| usage (int ret) |  | ||||||
| { |  | ||||||
|     arg_printusage (args, |  | ||||||
| 		    sizeof(args) / sizeof(args[0]), |  | ||||||
| 		    NULL, |  | ||||||
| 		    "[[{po:username[@hostname] | hostname[:username]}] ...] " |  | ||||||
| 		    "filename"); |  | ||||||
|     exit (ret); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static int |  | ||||||
| do_connect (const char *hostname, int port, int nodelay) |  | ||||||
| { |  | ||||||
|     struct addrinfo *ai, *a; |  | ||||||
|     struct addrinfo hints; |  | ||||||
|     int error; |  | ||||||
|     int s = -1; |  | ||||||
|     char portstr[NI_MAXSERV]; |  | ||||||
|  |  | ||||||
|     memset (&hints, 0, sizeof(hints)); |  | ||||||
|     hints.ai_socktype = SOCK_STREAM; |  | ||||||
|     hints.ai_protocol = IPPROTO_TCP; |  | ||||||
|  |  | ||||||
|     snprintf (portstr, sizeof(portstr), "%u", ntohs(port)); |  | ||||||
|  |  | ||||||
|     error = getaddrinfo (hostname, portstr, &hints, &ai); |  | ||||||
|     if (error) |  | ||||||
| 	errx (1, "getaddrinfo(%s): %s", hostname, gai_strerror(error)); |  | ||||||
|  |  | ||||||
|     for (a = ai; a != NULL; a = a->ai_next) { |  | ||||||
| 	s = socket (a->ai_family, a->ai_socktype, a->ai_protocol); |  | ||||||
| 	if (s < 0) |  | ||||||
| 	    continue; |  | ||||||
| 	if (connect (s, a->ai_addr, a->ai_addrlen) < 0) { |  | ||||||
| 	    warn ("connect(%s)", hostname); |  | ||||||
|  	    close (s); |  | ||||||
|  	    continue; |  | ||||||
| 	} |  | ||||||
| 	break; |  | ||||||
|     } |  | ||||||
|     freeaddrinfo (ai); |  | ||||||
|     if (a == NULL) { |  | ||||||
| 	warnx ("failed to contact %s", hostname); |  | ||||||
| 	return -1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if(setsockopt(s, IPPROTO_TCP, TCP_NODELAY, |  | ||||||
| 		  (void *)&nodelay, sizeof(nodelay)) < 0) |  | ||||||
| 	err (1, "setsockopt TCP_NODELAY"); |  | ||||||
|     return s; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| typedef enum { INIT = 0, GREET, USER, PASS, STAT, RETR, TOP, |  | ||||||
| 	       DELE, XDELE, QUIT} pop_state; |  | ||||||
|  |  | ||||||
| static char *pop_state_string[] = { |  | ||||||
|     "INIT", "GREET", "USER", "PASS", "STAT", "RETR", "TOP", |  | ||||||
|     "DELE", "XDELE", "QUIT" |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #define PUSH_BUFSIZ 65536 |  | ||||||
|  |  | ||||||
| #define STEP 16 |  | ||||||
|  |  | ||||||
| struct write_state { |  | ||||||
|     struct iovec *iovecs; |  | ||||||
|     size_t niovecs, maxiovecs, allociovecs; |  | ||||||
|     int fd; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| write_state_init (struct write_state *w, int fd) |  | ||||||
| { |  | ||||||
| #ifdef UIO_MAXIOV |  | ||||||
|     w->maxiovecs = UIO_MAXIOV; |  | ||||||
| #else |  | ||||||
|     w->maxiovecs = 16; |  | ||||||
| #endif |  | ||||||
|     w->allociovecs = min(STEP, w->maxiovecs); |  | ||||||
|     w->niovecs = 0; |  | ||||||
|     w->iovecs = emalloc(w->allociovecs * sizeof(*w->iovecs)); |  | ||||||
|     w->fd = fd; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| write_state_add (struct write_state *w, void *v, size_t len) |  | ||||||
| { |  | ||||||
|     if(w->niovecs == w->allociovecs) { |  | ||||||
| 	if(w->niovecs == w->maxiovecs) { |  | ||||||
| 	    if(writev (w->fd, w->iovecs, w->niovecs) < 0) |  | ||||||
| 		err(1, "writev"); |  | ||||||
| 	    w->niovecs = 0; |  | ||||||
| 	} else { |  | ||||||
| 	    w->allociovecs = min(w->allociovecs + STEP, w->maxiovecs); |  | ||||||
| 	    w->iovecs = erealloc (w->iovecs, |  | ||||||
| 				  w->allociovecs * sizeof(*w->iovecs)); |  | ||||||
| 	} |  | ||||||
|     } |  | ||||||
|     w->iovecs[w->niovecs].iov_base = v; |  | ||||||
|     w->iovecs[w->niovecs].iov_len  = len; |  | ||||||
|     ++w->niovecs; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| write_state_flush (struct write_state *w) |  | ||||||
| { |  | ||||||
|     if (w->niovecs) { |  | ||||||
| 	if (writev (w->fd, w->iovecs, w->niovecs) < 0) |  | ||||||
| 	    err (1, "writev"); |  | ||||||
| 	w->niovecs = 0; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| write_state_destroy (struct write_state *w) |  | ||||||
| { |  | ||||||
|     free (w->iovecs); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static int |  | ||||||
| doit(int s, |  | ||||||
|      const char *host, |  | ||||||
|      const char *user, |  | ||||||
|      const char *outfilename, |  | ||||||
|      const char *header_str, |  | ||||||
|      int leavep, |  | ||||||
|      int verbose, |  | ||||||
|      int forkp) |  | ||||||
| { |  | ||||||
|     int ret; |  | ||||||
|     char out_buf[PUSH_BUFSIZ]; |  | ||||||
|     int out_len = 0; |  | ||||||
|     char *in_buf; |  | ||||||
|     size_t in_buf_size; |  | ||||||
|     size_t in_len = 0; |  | ||||||
|     char *in_ptr; |  | ||||||
|     pop_state state = INIT; |  | ||||||
|     unsigned count = 0, bytes; |  | ||||||
|     unsigned asked_for = 0, retrieved = 0, asked_deleted = 0, deleted = 0; |  | ||||||
|     unsigned sent_xdele = 0; |  | ||||||
|     int out_fd; |  | ||||||
|     char from_line[128]; |  | ||||||
|     ssize_t from_line_length; |  | ||||||
|     time_t now; |  | ||||||
|     struct write_state write_state; |  | ||||||
|     unsigned int numheaders = 1; |  | ||||||
|     char **headers = NULL; |  | ||||||
|     int i; |  | ||||||
|     char *tmp = NULL; |  | ||||||
|  |  | ||||||
|     in_buf = emalloc(PUSH_BUFSIZ + 1); |  | ||||||
|     in_ptr = in_buf; |  | ||||||
|     in_buf_size = PUSH_BUFSIZ; |  | ||||||
|  |  | ||||||
|     if (do_from) { |  | ||||||
| 	char *tmp2; |  | ||||||
|  |  | ||||||
| 	tmp2 = tmp = estrdup(header_str); |  | ||||||
|  |  | ||||||
| 	out_fd = -1; |  | ||||||
| 	if (verbose) |  | ||||||
| 	    fprintf (stderr, "%s@%s\n", user, host); |  | ||||||
| 	while (*tmp != '\0') { |  | ||||||
| 	    tmp = strchr(tmp, ','); |  | ||||||
| 	    if (tmp == NULL) |  | ||||||
| 		break; |  | ||||||
| 	    tmp++; |  | ||||||
| 	    numheaders++; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	headers = emalloc(sizeof(char *) * (numheaders + 1)); |  | ||||||
| 	for (i = 0; i < numheaders; i++) { |  | ||||||
| 	    headers[i] = strtok_r(tmp2, ",", &tmp2); |  | ||||||
| 	} |  | ||||||
| 	headers[numheaders] = NULL; |  | ||||||
|     } else { |  | ||||||
| 	out_fd = open(outfilename, O_WRONLY | O_APPEND | O_CREAT, 0666); |  | ||||||
| 	if (out_fd < 0) |  | ||||||
| 	    err (1, "open %s", outfilename); |  | ||||||
| 	if (verbose) |  | ||||||
| 	    fprintf (stderr, "%s@%s -> %s\n", user, host, outfilename); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     now = time(NULL); |  | ||||||
|     from_line_length = snprintf (from_line, sizeof(from_line), |  | ||||||
| 				 "From %s %s", "push", ctime(&now)); |  | ||||||
|     if (from_line_length < 0 || from_line_length > sizeof(from_line)) |  | ||||||
| 	errx (1, "snprintf failed"); |  | ||||||
|  |  | ||||||
|     out_len = snprintf (out_buf, sizeof(out_buf), |  | ||||||
| 			"USER %s\r\nPASS hej\r\nSTAT\r\n", |  | ||||||
| 			user); |  | ||||||
|     if (out_len < 0 || out_len > sizeof(out_buf)) |  | ||||||
| 	errx (1, "snprintf failed"); |  | ||||||
|     if (net_write (s, out_buf, out_len) != out_len) |  | ||||||
| 	err (1, "write"); |  | ||||||
|     if (verbose > 1) |  | ||||||
| 	fprintf (stderr, "%s", out_buf); |  | ||||||
|  |  | ||||||
|     if (!do_from) |  | ||||||
| 	write_state_init (&write_state, out_fd); |  | ||||||
|  |  | ||||||
|     while(state != QUIT) { |  | ||||||
| 	fd_set readset, writeset; |  | ||||||
|  |  | ||||||
| 	FD_ZERO(&readset); |  | ||||||
| 	FD_ZERO(&writeset); |  | ||||||
| 	if (s >= FD_SETSIZE) |  | ||||||
| 	    errx (1, "fd too large"); |  | ||||||
| 	FD_SET(s,&readset); |  | ||||||
|  |  | ||||||
| 	if (verbose > 1) |  | ||||||
| 	    fprintf (stderr, "state: %s count: %d asked_for: %d " |  | ||||||
| 		     "retrieved: %d asked_deleted: %d\n", |  | ||||||
| 		     pop_state_string[state], |  | ||||||
| 		     count, asked_for, retrieved, asked_deleted); |  | ||||||
|  |  | ||||||
| 	if (((state == STAT || state == RETR || state == TOP) |  | ||||||
| 	     && asked_for < count) |  | ||||||
| 	    || (state == XDELE && !sent_xdele) |  | ||||||
| 	    || (state == DELE && asked_deleted < count)) |  | ||||||
| 	    FD_SET(s,&writeset); |  | ||||||
| 	ret = select (s + 1, &readset, &writeset, NULL, NULL); |  | ||||||
| 	if (ret < 0) { |  | ||||||
| 	    if (errno == EAGAIN) |  | ||||||
| 		continue; |  | ||||||
| 	    else |  | ||||||
| 		err (1, "select"); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (FD_ISSET(s, &readset)) { |  | ||||||
| 	    char *beg, *p; |  | ||||||
| 	    size_t rem; |  | ||||||
| 	    int blank_line = 0; |  | ||||||
|  |  | ||||||
| 	    if(in_len >= in_buf_size) { |  | ||||||
| 		char *tmp = erealloc(in_buf, in_buf_size + PUSH_BUFSIZ + 1); |  | ||||||
| 		in_ptr = tmp + (in_ptr - in_buf); |  | ||||||
| 		in_buf = tmp; |  | ||||||
| 		in_buf_size += PUSH_BUFSIZ; |  | ||||||
| 	    } |  | ||||||
|  |  | ||||||
| 	    ret = read (s, in_ptr, in_buf_size - in_len); |  | ||||||
| 	    if (ret < 0) |  | ||||||
| 		err (1, "read"); |  | ||||||
| 	    else if (ret == 0) |  | ||||||
| 		errx (1, "EOF during read"); |  | ||||||
|  |  | ||||||
| 	    in_len += ret; |  | ||||||
| 	    in_ptr += ret; |  | ||||||
| 	    *in_ptr = '\0'; |  | ||||||
|  |  | ||||||
| 	    beg = in_buf; |  | ||||||
| 	    rem = in_len; |  | ||||||
| 	    while(rem > 1 |  | ||||||
| 		  && (p = strstr(beg, "\r\n")) != NULL) { |  | ||||||
| 		if (state == TOP) { |  | ||||||
| 		    char *copy = beg; |  | ||||||
|  |  | ||||||
| 		    for (i = 0; i < numheaders; i++) { |  | ||||||
| 			size_t len; |  | ||||||
|  |  | ||||||
| 			len = min(p - copy + 1, strlen(headers[i])); |  | ||||||
| 			if (strncasecmp(copy, headers[i], len) == 0) { |  | ||||||
| 			    fprintf (stdout, "%.*s\n", (int)(p - copy), copy); |  | ||||||
| 			} |  | ||||||
| 		    } |  | ||||||
| 		    if (beg[0] == '.' && beg[1] == '\r' && beg[2] == '\n') { |  | ||||||
| 			if (numheaders > 1) |  | ||||||
| 			    fprintf (stdout, "\n"); |  | ||||||
| 			state = STAT; |  | ||||||
| 			if (++retrieved == count) { |  | ||||||
| 			    state = QUIT; |  | ||||||
| 			    net_write (s, "QUIT\r\n", 6); |  | ||||||
| 			    if (verbose > 1) |  | ||||||
| 				fprintf (stderr, "QUIT\r\n"); |  | ||||||
| 			} |  | ||||||
| 		    } |  | ||||||
| 		    rem -= p - beg + 2; |  | ||||||
| 		    beg = p + 2; |  | ||||||
| 		} else if (state == RETR) { |  | ||||||
| 		    char *copy = beg; |  | ||||||
| 		    if (beg[0] == '.') { |  | ||||||
| 			if (beg[1] == '\r' && beg[2] == '\n') { |  | ||||||
| 			    if(!blank_line) |  | ||||||
| 				write_state_add(&write_state, "\n", 1); |  | ||||||
| 			    state = STAT; |  | ||||||
| 			    rem -= p - beg + 2; |  | ||||||
| 			    beg = p + 2; |  | ||||||
| 			    if (++retrieved == count) { |  | ||||||
| 				write_state_flush (&write_state); |  | ||||||
| 				if (fsync (out_fd) < 0) |  | ||||||
| 				    err (1, "fsync"); |  | ||||||
| 				close(out_fd); |  | ||||||
| 				if (leavep) { |  | ||||||
| 				    state = QUIT; |  | ||||||
| 				    net_write (s, "QUIT\r\n", 6); |  | ||||||
| 				    if (verbose > 1) |  | ||||||
| 					fprintf (stderr, "QUIT\r\n"); |  | ||||||
| 				} else { |  | ||||||
| 				    if (forkp) { |  | ||||||
| 					pid_t pid; |  | ||||||
|  |  | ||||||
| 					pid = fork(); |  | ||||||
| 					if (pid < 0) |  | ||||||
| 					    warn ("fork"); |  | ||||||
| 					else if(pid != 0) { |  | ||||||
| 					    if(verbose) |  | ||||||
| 						fprintf (stderr, |  | ||||||
| 							 "(exiting)"); |  | ||||||
| 					    return 0; |  | ||||||
| 					} |  | ||||||
| 				    } |  | ||||||
|  |  | ||||||
| 				    state = XDELE; |  | ||||||
| 				    if (verbose) |  | ||||||
| 					fprintf (stderr, "deleting... "); |  | ||||||
| 				} |  | ||||||
| 			    } |  | ||||||
| 			    continue; |  | ||||||
| 			} else |  | ||||||
| 			    ++copy; |  | ||||||
| 		    } |  | ||||||
| 		    *p = '\n'; |  | ||||||
| 		    if(blank_line && |  | ||||||
| 		       strncmp(copy, "From ", min(p - copy + 1, 5)) == 0) |  | ||||||
| 			write_state_add(&write_state, ">", 1); |  | ||||||
| 		    write_state_add(&write_state, copy, p - copy + 1); |  | ||||||
| 		    blank_line = (*copy == '\n'); |  | ||||||
| 		    rem -= p - beg + 2; |  | ||||||
| 		    beg = p + 2; |  | ||||||
| 		} else if (rem >= 3 && strncmp (beg, "+OK", 3) == 0) { |  | ||||||
| 		    if (state == STAT) { |  | ||||||
| 			if (!do_from) |  | ||||||
| 			    write_state_add(&write_state, |  | ||||||
| 					    from_line, from_line_length); |  | ||||||
| 			blank_line = 0; |  | ||||||
| 			if (do_from) |  | ||||||
| 			    state = TOP; |  | ||||||
| 			else |  | ||||||
| 			    state = RETR; |  | ||||||
| 		    } else if (state == XDELE) { |  | ||||||
| 			state = QUIT; |  | ||||||
| 			net_write (s, "QUIT\r\n", 6); |  | ||||||
| 			if (verbose > 1) |  | ||||||
| 			    fprintf (stderr, "QUIT\r\n"); |  | ||||||
| 			break; |  | ||||||
| 		    } else if (state == DELE) { |  | ||||||
| 			if (++deleted == count) { |  | ||||||
| 			    state = QUIT; |  | ||||||
| 			    net_write (s, "QUIT\r\n", 6); |  | ||||||
| 			    if (verbose > 1) |  | ||||||
| 				fprintf (stderr, "QUIT\r\n"); |  | ||||||
| 			    break; |  | ||||||
| 			} |  | ||||||
| 		    } else if (++state == STAT) { |  | ||||||
| 			if(sscanf (beg + 4, "%u %u", &count, &bytes) != 2) |  | ||||||
| 			    errx(1, "Bad STAT-line: %.*s", (int)(p - beg), beg); |  | ||||||
| 			if (verbose) { |  | ||||||
| 			    fprintf (stderr, "%u message(s) (%u bytes). " |  | ||||||
| 				     "fetching... ", |  | ||||||
| 				     count, bytes); |  | ||||||
| 			    if (do_from) |  | ||||||
| 				fprintf (stderr, "\n"); |  | ||||||
| 			} else if (do_count) { |  | ||||||
| 			    fprintf (stderr, "%u message(s) (%u bytes).\n", |  | ||||||
| 				     count, bytes); |  | ||||||
| 			} |  | ||||||
| 			if (count == 0) { |  | ||||||
| 			    state = QUIT; |  | ||||||
| 			    net_write (s, "QUIT\r\n", 6); |  | ||||||
| 			    if (verbose > 1) |  | ||||||
| 				fprintf (stderr, "QUIT\r\n"); |  | ||||||
| 			    break; |  | ||||||
| 			} |  | ||||||
| 		    } |  | ||||||
|  |  | ||||||
| 		    rem -= p - beg + 2; |  | ||||||
| 		    beg = p + 2; |  | ||||||
| 		} else { |  | ||||||
| 		    if(state == XDELE) { |  | ||||||
| 			state = DELE; |  | ||||||
| 			rem -= p - beg + 2; |  | ||||||
| 			beg = p + 2; |  | ||||||
| 		    } else |  | ||||||
| 			errx (1, "Bad response: %.*s", (int)(p - beg), beg); |  | ||||||
| 		} |  | ||||||
| 	    } |  | ||||||
| 	    if (!do_from) |  | ||||||
| 		write_state_flush (&write_state); |  | ||||||
|  |  | ||||||
| 	    memmove (in_buf, beg, rem); |  | ||||||
| 	    in_len = rem; |  | ||||||
| 	    in_ptr = in_buf + rem; |  | ||||||
| 	} |  | ||||||
| 	if (FD_ISSET(s, &writeset)) { |  | ||||||
| 	    if ((state == STAT && !do_from) || state == RETR) |  | ||||||
| 		out_len = snprintf (out_buf, sizeof(out_buf), |  | ||||||
| 				    "RETR %u\r\n", ++asked_for); |  | ||||||
| 	    else if ((state == STAT && do_from) || state == TOP) |  | ||||||
| 		out_len = snprintf (out_buf, sizeof(out_buf), |  | ||||||
| 				    "TOP %u 0\r\n", ++asked_for); |  | ||||||
| 	    else if(state == XDELE) { |  | ||||||
| 		out_len = snprintf(out_buf, sizeof(out_buf), |  | ||||||
| 				   "XDELE %u %u\r\n", 1, count); |  | ||||||
| 		sent_xdele++; |  | ||||||
| 	    } |  | ||||||
| 	    else if(state == DELE) |  | ||||||
| 		out_len = snprintf (out_buf, sizeof(out_buf), |  | ||||||
| 				    "DELE %u\r\n", ++asked_deleted); |  | ||||||
| 	    if (out_len < 0 || out_len > sizeof(out_buf)) |  | ||||||
| 		errx (1, "snprintf failed"); |  | ||||||
| 	    if (net_write (s, out_buf, out_len) != out_len) |  | ||||||
| 		err (1, "write"); |  | ||||||
| 	    if (verbose > 1) |  | ||||||
| 		fprintf (stderr, "%s", out_buf); |  | ||||||
| 	} |  | ||||||
|     } |  | ||||||
|     if (verbose) |  | ||||||
| 	fprintf (stderr, "Done\n"); |  | ||||||
|     if (do_from) { |  | ||||||
| 	free (tmp); |  | ||||||
| 	free (headers); |  | ||||||
|     } else { |  | ||||||
| 	write_state_destroy (&write_state); |  | ||||||
|     } |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #ifdef KRB5 |  | ||||||
| static int |  | ||||||
| do_v5 (const char *host, |  | ||||||
|        int port, |  | ||||||
|        const char *user, |  | ||||||
|        const char *filename, |  | ||||||
|        const char *header_str, |  | ||||||
|        int leavep, |  | ||||||
|        int verbose, |  | ||||||
|        int forkp) |  | ||||||
| { |  | ||||||
|     krb5_error_code ret; |  | ||||||
|     krb5_auth_context auth_context = NULL; |  | ||||||
|     krb5_principal server; |  | ||||||
|     const char *estr; |  | ||||||
|     int s; |  | ||||||
|  |  | ||||||
|     s = do_connect (host, port, 1); |  | ||||||
|     if (s < 0) |  | ||||||
| 	return 1; |  | ||||||
|  |  | ||||||
|     ret = krb5_sname_to_principal (context, |  | ||||||
| 				   host, |  | ||||||
| 				   "pop", |  | ||||||
| 				   KRB5_NT_SRV_HST, |  | ||||||
| 				   &server); |  | ||||||
|     if (ret) { |  | ||||||
| 	estr = krb5_get_error_message(context, ret); |  | ||||||
| 	warnx ("krb5_sname_to_principal: %s", estr); |  | ||||||
| 	krb5_free_error_message(context, estr); |  | ||||||
| 	return 1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     ret = krb5_sendauth (context, |  | ||||||
| 			 &auth_context, |  | ||||||
| 			 &s, |  | ||||||
| 			 "KPOPV1.0", |  | ||||||
| 			 NULL, |  | ||||||
| 			 server, |  | ||||||
| 			 0, |  | ||||||
| 			 NULL, |  | ||||||
| 			 NULL, |  | ||||||
| 			 NULL, |  | ||||||
| 			 NULL, |  | ||||||
| 			 NULL, |  | ||||||
| 			 NULL); |  | ||||||
|     krb5_free_principal (context, server); |  | ||||||
|     if (ret) { |  | ||||||
| 	estr = krb5_get_error_message(context, ret); |  | ||||||
| 	warnx ("krb5_sendauth: %s", estr); |  | ||||||
| 	krb5_free_error_message(context, estr); |  | ||||||
| 	return 1; |  | ||||||
|     } |  | ||||||
|     return doit (s, host, user, filename, header_str, leavep, verbose, forkp); |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #ifdef HESIOD |  | ||||||
|  |  | ||||||
| #ifdef HESIOD_INTERFACES |  | ||||||
|  |  | ||||||
| static char * |  | ||||||
| hesiod_get_pobox (const char **user) |  | ||||||
| { |  | ||||||
|     void *context; |  | ||||||
|     struct hesiod_postoffice *hpo; |  | ||||||
|     char *ret = NULL; |  | ||||||
|  |  | ||||||
|     if(hesiod_init (&context) != 0) |  | ||||||
| 	err (1, "hesiod_init"); |  | ||||||
|  |  | ||||||
|     hpo = hesiod_getmailhost (context, *user); |  | ||||||
|     if (hpo == NULL) { |  | ||||||
| 	warn ("hesiod_getmailhost %s", *user); |  | ||||||
|     } else { |  | ||||||
| 	if (strcasecmp(hpo->hesiod_po_type, "pop") != 0) |  | ||||||
| 	    errx (1, "Unsupported po type %s", hpo->hesiod_po_type); |  | ||||||
|  |  | ||||||
| 	ret = estrdup(hpo->hesiod_po_host); |  | ||||||
| 	*user = estrdup(hpo->hesiod_po_name); |  | ||||||
| 	hesiod_free_postoffice (context, hpo); |  | ||||||
|     } |  | ||||||
|     hesiod_end (context); |  | ||||||
|     return ret; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #else /* !HESIOD_INTERFACES */ |  | ||||||
|  |  | ||||||
| static char * |  | ||||||
| hesiod_get_pobox (const char **user) |  | ||||||
| { |  | ||||||
|     char *ret = NULL; |  | ||||||
|     struct hes_postoffice *hpo; |  | ||||||
|  |  | ||||||
|     hpo = hes_getmailhost (*user); |  | ||||||
|     if (hpo == NULL) { |  | ||||||
| 	warn ("hes_getmailhost %s", *user); |  | ||||||
|     } else { |  | ||||||
| 	if (strcasecmp(hpo->po_type, "pop") != 0) |  | ||||||
| 	    errx (1, "Unsupported po type %s", hpo->po_type); |  | ||||||
|  |  | ||||||
| 	ret = estrdup(hpo->po_host); |  | ||||||
| 	*user = estrdup(hpo->po_name); |  | ||||||
|     } |  | ||||||
|     return ret; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #endif /* HESIOD_INTERFACES */ |  | ||||||
|  |  | ||||||
| #endif /* HESIOD */ |  | ||||||
|  |  | ||||||
| static char * |  | ||||||
| get_pobox (const char **user) |  | ||||||
| { |  | ||||||
|     char *ret = NULL; |  | ||||||
|  |  | ||||||
| #ifdef HESIOD |  | ||||||
|     ret = hesiod_get_pobox (user); |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|     if (ret == NULL) |  | ||||||
| 	ret = getenv("MAILHOST"); |  | ||||||
|     if (ret == NULL) |  | ||||||
| 	errx (1, "MAILHOST not set"); |  | ||||||
|     return ret; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void |  | ||||||
| parse_pobox (char *a0, const char **host, const char **user) |  | ||||||
| { |  | ||||||
|     const char *h, *u; |  | ||||||
|     char *p; |  | ||||||
|     int po = 0; |  | ||||||
|  |  | ||||||
|     if (a0 == NULL) { |  | ||||||
|  |  | ||||||
| 	*user = getenv ("USERNAME"); |  | ||||||
| 	if (*user == NULL) { |  | ||||||
| 	    struct passwd *pwd = getpwuid (getuid ()); |  | ||||||
|  |  | ||||||
| 	    if (pwd == NULL) |  | ||||||
| 		errx (1, "Who are you?"); |  | ||||||
| 	    *user = estrdup (pwd->pw_name); |  | ||||||
| 	} |  | ||||||
| 	*host = get_pobox (user); |  | ||||||
| 	return; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /* if the specification starts with po:, remember this information */ |  | ||||||
|     if(strncmp(a0, "po:", 3) == 0) { |  | ||||||
| 	a0 += 3; |  | ||||||
| 	po++; |  | ||||||
|     } |  | ||||||
|     /* if there is an `@', the hostname is after it, otherwise at the |  | ||||||
|        beginning of the string */ |  | ||||||
|     p = strchr(a0, '@'); |  | ||||||
|     if(p != NULL) { |  | ||||||
| 	*p++ = '\0'; |  | ||||||
| 	h = p; |  | ||||||
|     } else { |  | ||||||
| 	h = a0; |  | ||||||
|     } |  | ||||||
|     /* if there is a `:', the username comes before it, otherwise at |  | ||||||
|        the beginning of the string */ |  | ||||||
|     p = strchr(a0, ':'); |  | ||||||
|     if(p != NULL) { |  | ||||||
| 	*p++ = '\0'; |  | ||||||
| 	u = p; |  | ||||||
|     } else { |  | ||||||
| 	u = a0; |  | ||||||
|     } |  | ||||||
|     if(h == u) { |  | ||||||
| 	/* some inconsistent compatibility with various mailers */ |  | ||||||
| 	if(po) { |  | ||||||
| 	    h = get_pobox (&u); |  | ||||||
| 	} else { |  | ||||||
| 	    u = get_default_username (); |  | ||||||
| 	    if (u == NULL) |  | ||||||
| 		errx (1, "Who are you?"); |  | ||||||
| 	} |  | ||||||
|     } |  | ||||||
|     *host = h; |  | ||||||
|     *user = u; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int |  | ||||||
| main(int argc, char **argv) |  | ||||||
| { |  | ||||||
|     int port = 0; |  | ||||||
|     int optind = 0; |  | ||||||
|     int ret = 1; |  | ||||||
|     const char *host, *user, *filename = NULL; |  | ||||||
|     char *pobox = NULL; |  | ||||||
|  |  | ||||||
|     setprogname (argv[0]); |  | ||||||
|  |  | ||||||
| #ifdef KRB5 |  | ||||||
|     { |  | ||||||
| 	krb5_error_code ret; |  | ||||||
|  |  | ||||||
| 	ret = krb5_init_context (&context); |  | ||||||
| 	if (ret) |  | ||||||
| 	    errx (1, "krb5_init_context failed: %d", ret); |  | ||||||
|     } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|     if (getarg (args, sizeof(args) / sizeof(args[0]), argc, argv, |  | ||||||
| 		&optind)) |  | ||||||
| 	usage (1); |  | ||||||
|  |  | ||||||
|     argc -= optind; |  | ||||||
|     argv += optind; |  | ||||||
|  |  | ||||||
|     if (do_help) |  | ||||||
| 	usage (0); |  | ||||||
|  |  | ||||||
|     if (do_version) { |  | ||||||
| 	print_version(NULL); |  | ||||||
| 	return 0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (do_from && header_str == NULL) |  | ||||||
| 	header_str = "From:"; |  | ||||||
|     else if (header_str != NULL) |  | ||||||
| 	do_from = 1; |  | ||||||
|  |  | ||||||
|     if (do_from) { |  | ||||||
| 	if (argc == 0) |  | ||||||
| 	    pobox = NULL; |  | ||||||
| 	else if (argc == 1) |  | ||||||
| 	    pobox = argv[0]; |  | ||||||
| 	else |  | ||||||
| 	    usage (1); |  | ||||||
|     } else { |  | ||||||
| 	if (argc == 1) { |  | ||||||
| 	    filename = argv[0]; |  | ||||||
| 	    pobox    = NULL; |  | ||||||
| 	} else if (argc == 2) { |  | ||||||
| 	    filename = argv[1]; |  | ||||||
| 	    pobox    = argv[0]; |  | ||||||
| 	} else |  | ||||||
| 	    usage (1); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (port_str) { |  | ||||||
| 	struct servent *s = roken_getservbyname (port_str, "tcp"); |  | ||||||
|  |  | ||||||
| 	if (s) |  | ||||||
| 	    port = s->s_port; |  | ||||||
| 	else { |  | ||||||
| 	    char *ptr; |  | ||||||
|  |  | ||||||
| 	    port = strtol (port_str, &ptr, 10); |  | ||||||
| 	    if (port == 0 && ptr == port_str) |  | ||||||
| 		errx (1, "Bad port `%s'", port_str); |  | ||||||
| 	    port = htons(port); |  | ||||||
| 	} |  | ||||||
|     } |  | ||||||
|     if (port == 0) { |  | ||||||
| #ifdef KRB5 |  | ||||||
| 	port = krb5_getportbyname (context, "kpop", "tcp", 1109); |  | ||||||
| #else |  | ||||||
| #error must define KRB5 |  | ||||||
| #endif |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     parse_pobox (pobox, &host, &user); |  | ||||||
|  |  | ||||||
| #ifdef KRB5 |  | ||||||
|     if (ret && use_v5) { |  | ||||||
| 	ret = do_v5 (host, port, user, filename, header_str, |  | ||||||
| 		     do_leave, verbose_level, do_fork); |  | ||||||
|     } |  | ||||||
| #endif |  | ||||||
|     return ret; |  | ||||||
| } |  | ||||||
| @@ -1,94 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan |  | ||||||
|  * (Royal Institute of Technology, Stockholm, Sweden). |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without |  | ||||||
|  * modification, are permitted provided that the following conditions |  | ||||||
|  * are met: |  | ||||||
|  * |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright |  | ||||||
|  *    notice, this list of conditions and the following disclaimer. |  | ||||||
|  * |  | ||||||
|  * 2. Redistributions in binary form must reproduce the above copyright |  | ||||||
|  *    notice, this list of conditions and the following disclaimer in the |  | ||||||
|  *    documentation and/or other materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * 3. Neither the name of the Institute nor the names of its contributors |  | ||||||
|  *    may be used to endorse or promote products derived from this software |  | ||||||
|  *    without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND |  | ||||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |  | ||||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |  | ||||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE |  | ||||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |  | ||||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |  | ||||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |  | ||||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |  | ||||||
|  * SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /* $Id$ */ |  | ||||||
|  |  | ||||||
| #ifdef HAVE_CONFIG_H |  | ||||||
| #include <config.h> |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <string.h> |  | ||||||
| #ifdef HAVE_FCNTL_H |  | ||||||
| #include <fcntl.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_ERRNO_H |  | ||||||
| #include <errno.h> |  | ||||||
| #endif |  | ||||||
| #include <ctype.h> |  | ||||||
| #include <limits.h> |  | ||||||
| #include <time.h> |  | ||||||
| #ifdef HAVE_SYS_TYPES_H |  | ||||||
| #include <sys/types.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_SYS_SELECT_H |  | ||||||
| #include <sys/select.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_UNISTD_H |  | ||||||
| #include <unistd.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_SYS_UIO_H |  | ||||||
| #include <sys/uio.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_SYS_SOCKET_H |  | ||||||
| #include <sys/socket.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_NETINET_IN_H |  | ||||||
| #include <netinet/in.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_NETINET_IN6_H |  | ||||||
| #include <netinet/in6.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_NETINET6_IN6_H |  | ||||||
| #include <netinet6/in6.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_NETINET_TCP_H |  | ||||||
| #include <netinet/tcp.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_NETDB_H |  | ||||||
| #include <netdb.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HAVE_PWD_H |  | ||||||
| #include <pwd.h> |  | ||||||
| #endif |  | ||||||
| #ifdef HESIOD |  | ||||||
| #include <hesiod.h> |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| #include <roken.h> |  | ||||||
| #include <err.h> |  | ||||||
| #include <getarg.h> |  | ||||||
| #ifdef KRB5 |  | ||||||
| #include <krb5.h> |  | ||||||
| #endif |  | ||||||
| @@ -48,11 +48,6 @@ LIB_door_create		= @LIB_door_create@ | |||||||
| LIB_openssl_crypto      = @LIB_openssl_crypto@ | LIB_openssl_crypto      = @LIB_openssl_crypto@ | ||||||
| INCLUDE_openssl_crypto  = @INCLUDE_openssl_crypto@ | INCLUDE_openssl_crypto  = @INCLUDE_openssl_crypto@ | ||||||
|  |  | ||||||
| HESIODLIB = @HESIODLIB@ |  | ||||||
| HESIODINCLUDE = @HESIODINCLUDE@ |  | ||||||
| INCLUDE_hesiod = @INCLUDE_hesiod@ |  | ||||||
| LIB_hesiod = @LIB_hesiod@ |  | ||||||
|  |  | ||||||
| INCLUDE_krb4 = @INCLUDE_krb4@ | INCLUDE_krb4 = @INCLUDE_krb4@ | ||||||
| LIB_krb4 = @LIB_krb4@ | LIB_krb4 = @LIB_krb4@ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -309,8 +309,6 @@ rk_TEST_PACKAGE(libedit, | |||||||
|  |  | ||||||
| AC_CONFIG_SUBDIRS([lib/libedit]) | AC_CONFIG_SUBDIRS([lib/libedit]) | ||||||
|  |  | ||||||
| rk_TEST_PACKAGE(hesiod,[#include <hesiod.h>],-lhesiod,,, HESIOD) |  | ||||||
|  |  | ||||||
| KRB_C_BIGENDIAN | KRB_C_BIGENDIAN | ||||||
| AC_C_INLINE | AC_C_INLINE | ||||||
|  |  | ||||||
| @@ -634,7 +632,6 @@ AC_CONFIG_FILES(Makefile 		\ | |||||||
| 	appl/dbutils/Makefile		\ | 	appl/dbutils/Makefile		\ | ||||||
| 	appl/gssmask/Makefile		\ | 	appl/gssmask/Makefile		\ | ||||||
| 	appl/otp/Makefile		\ | 	appl/otp/Makefile		\ | ||||||
| 	appl/push/Makefile		\ |  | ||||||
| 	appl/su/Makefile		\ | 	appl/su/Makefile		\ | ||||||
| 	appl/test/Makefile		\ | 	appl/test/Makefile		\ | ||||||
| 	appl/kf/Makefile		\ | 	appl/kf/Makefile		\ | ||||||
|   | |||||||
| @@ -1234,9 +1234,6 @@ static const char *const rcsid[] = { (const char *)rcsid, "@(#)" msg } | |||||||
| /* Define if you have the `__progname' variable. */ | /* Define if you have the `__progname' variable. */ | ||||||
| /* #define HAVE___PROGNAME 1 */ | /* #define HAVE___PROGNAME 1 */ | ||||||
|  |  | ||||||
| /* Define if you have the hesiod package. */ |  | ||||||
| /* #undef HESIOD */ |  | ||||||
|  |  | ||||||
| /* Define if you are running IRIX 4. */ | /* Define if you are running IRIX 4. */ | ||||||
| /* #undef IRIX4 */ | /* #undef IRIX4 */ | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Viktor Dukhovni
					Viktor Dukhovni