/ appl / rsh / rsh_locl.h
rsh_locl.h
  1  /*
  2   * Copyright (c) 1997 - 2004 Kungliga Tekniska Högskolan
  3   * (Royal Institute of Technology, Stockholm, Sweden).
  4   * All rights reserved.
  5   *
  6   * Redistribution and use in source and binary forms, with or without
  7   * modification, are permitted provided that the following conditions
  8   * are met:
  9   *
 10   * 1. Redistributions of source code must retain the above copyright
 11   *    notice, this list of conditions and the following disclaimer.
 12   *
 13   * 2. Redistributions in binary form must reproduce the above copyright
 14   *    notice, this list of conditions and the following disclaimer in the
 15   *    documentation and/or other materials provided with the distribution.
 16   *
 17   * 3. Neither the name of the Institute nor the names of its contributors
 18   *    may be used to endorse or promote products derived from this software
 19   *    without specific prior written permission.
 20   *
 21   * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
 22   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 23   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 24   * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
 25   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 26   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 27   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 28   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 29   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 30   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 31   * SUCH DAMAGE.
 32   */
 33  
 34  /* $Id$ */
 35  
 36  #ifdef HAVE_CONFIG_H
 37  #include <config.h>
 38  #endif
 39  
 40  #include <stdio.h>
 41  #include <assert.h>
 42  #include <stdarg.h>
 43  #include <ctype.h>
 44  #ifdef HAVE_SYS_TYPES_H
 45  #include <sys/types.h>
 46  #endif
 47  #ifdef HAVE_UNISTD_H
 48  #include <unistd.h>
 49  #endif
 50  #ifdef HAVE_SYS_WAIT_H
 51  #include <sys/wait.h>
 52  #endif
 53  #ifdef HAVE_SYS_SELECT_H
 54  #include <sys/select.h>
 55  #endif
 56  #ifdef HAVE_SYS_SOCKET_H
 57  #include <sys/socket.h>
 58  #endif
 59  #ifdef HAVE_NETINET_IN_H
 60  #include <netinet/in.h>
 61  #endif
 62  #ifdef HAVE_NETINET_IN6_H
 63  #include <netinet/in6.h>
 64  #endif
 65  #ifdef HAVE_NETINET6_IN6_H
 66  #include <netinet6/in6.h>
 67  #endif
 68  #ifdef HAVE_ARPA_INET_H
 69  #include <arpa/inet.h>
 70  #endif
 71  
 72  #ifdef HAVE_PWD_H
 73  #include <pwd.h>
 74  #endif
 75  #ifdef HAVE_SHADOW_H
 76  #include <shadow.h>
 77  #endif
 78  #ifdef HAVE_NETDB_H
 79  #include <netdb.h>
 80  #endif
 81  #ifdef HAVE_LIMITS_H
 82  #include <limits.h>
 83  #endif
 84  #include <errno.h>
 85  
 86  #ifdef HAVE_SYS_PARAM_H
 87  #include <sys/param.h>
 88  #endif
 89  
 90  #ifdef HAVE_SYSLOG_H
 91  #include <syslog.h>
 92  #endif
 93  #ifdef HAVE_PATHS_H
 94  #include <paths.h>
 95  #endif
 96  #include <err.h>
 97  #include <roken.h>
 98  #include <getarg.h>
 99  #ifdef KRB5
100  #include <krb5.h>
101  /* XXX */
102  struct hx509_certs_data;
103  struct krb5_pk_identity;
104  struct krb5_pk_cert;
105  struct ContentInfo;
106  struct AlgorithmIdentifier;
107  struct _krb5_krb_auth_data;
108  struct krb5_dh_moduli;
109  struct _krb5_key_data;
110  struct _krb5_encryption_type;
111  struct _krb5_srv_query_ctx;
112  struct _krb5_key_type;
113  #include "crypto-headers.h"
114  #include <krb5-private.h> /* for _krb5_{get,put}_int */
115  #endif
116  #if defined(KRB5)
117  #include <kafs.h>
118  #endif
119  
120  #ifndef _PATH_BSHELL
121  #define _PATH_BSHELL	"/bin/sh"
122  #endif
123  
124  #ifndef _PATH_DEFPATH
125  #define _PATH_DEFPATH	"/usr/bin:/bin"
126  #endif
127  
128  #include "loginpaths.h"
129  
130  /*
131   *
132   */
133  
134  enum auth_method { AUTH_KRB5, AUTH_BROKEN };
135  
136  extern enum auth_method auth_method;
137  extern int do_encrypt;
138  #ifdef KRB5
139  extern krb5_context context;
140  extern krb5_keyblock *keyblock;
141  extern krb5_crypto crypto;
142  extern int key_usage;
143  extern void *ivec_in[2];
144  extern void *ivec_out[2];
145  void init_ivecs(int, int);
146  #endif
147  
148  #define KCMD_OLD_VERSION "KCMDV0.1"
149  #define KCMD_NEW_VERSION "KCMDV0.2"
150  
151  #define USERNAME_SZ 16
152  #ifndef ARG_MAX
153  #define ARG_MAX 8192
154  #endif
155  
156  #define RSH_BUFSIZ (5 * 1024) /* MIT kcmd can't handle larger buffers */
157  #define RSHD_BUFSIZ (16 * 1024) /* Old maxize for Heimdal 0.4 rsh */
158  
159  #define PATH_RSH BINDIR "/rsh"
160  
161  #if defined(KRB5)
162  ssize_t do_read (int, void*, size_t, void*);
163  ssize_t do_write (int, void*, size_t, void*);
164  #else
165  #define do_write(F, B, L, I) write((F), (B), (L))
166  #define do_read(F, B, L, I) read((F), (B), (L))
167  #endif