17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
50b6880ccSsp  * Common Development and Distribution License (the "License").
60b6880ccSsp  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
220b6880ccSsp  *	Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  *	Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate /*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/
27*92163adaSToomas Soome /*	All Rights Reserved	*/
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate /*
307c478bd9Sstevel@tonic-gate  *	University Copyright- Copyright (c) 1982, 1986, 1988
317c478bd9Sstevel@tonic-gate  *	The Regents of the University of California
327c478bd9Sstevel@tonic-gate  *	All Rights Reserved
337c478bd9Sstevel@tonic-gate  *
347c478bd9Sstevel@tonic-gate  *	University Acknowledgment- Portions of this document are derived from
357c478bd9Sstevel@tonic-gate  *	software developed by the University of California, Berkeley, and its
367c478bd9Sstevel@tonic-gate  *	contributors.
377c478bd9Sstevel@tonic-gate  */
387c478bd9Sstevel@tonic-gate 
397c478bd9Sstevel@tonic-gate #ifndef	_FTP_VAR_H
407c478bd9Sstevel@tonic-gate #define	_FTP_VAR_H
417c478bd9Sstevel@tonic-gate 
427c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
437c478bd9Sstevel@tonic-gate extern "C" {
447c478bd9Sstevel@tonic-gate #endif
457c478bd9Sstevel@tonic-gate 
467c478bd9Sstevel@tonic-gate #include <sys/param.h>
477c478bd9Sstevel@tonic-gate #include <sys/types.h>
487c478bd9Sstevel@tonic-gate #include <sys/socket.h>
497c478bd9Sstevel@tonic-gate #include <sys/ioctl.h>
507c478bd9Sstevel@tonic-gate #include <sys/stat.h>
517c478bd9Sstevel@tonic-gate #include <sys/wait.h>
527c478bd9Sstevel@tonic-gate #include <sys/resource.h>
537c478bd9Sstevel@tonic-gate #include <sys/ttold.h>
547c478bd9Sstevel@tonic-gate #include <sys/stropts.h>
557c478bd9Sstevel@tonic-gate #include <sys/time.h>
567c478bd9Sstevel@tonic-gate #include <netinet/in.h>
577c478bd9Sstevel@tonic-gate #include <netinet/tcp.h>
587c478bd9Sstevel@tonic-gate #include <arpa/ftp.h>
597c478bd9Sstevel@tonic-gate #include <arpa/telnet.h>
607c478bd9Sstevel@tonic-gate #include <arpa/inet.h>
617c478bd9Sstevel@tonic-gate #include <setjmp.h>
627c478bd9Sstevel@tonic-gate #include <libintl.h>
637c478bd9Sstevel@tonic-gate #include <string.h>
647c478bd9Sstevel@tonic-gate #include <fcntl.h>
657c478bd9Sstevel@tonic-gate #include <stdlib.h>
667c478bd9Sstevel@tonic-gate #include <stdio.h>
677c478bd9Sstevel@tonic-gate #include <widec.h>
687c478bd9Sstevel@tonic-gate #include <signal.h>
697c478bd9Sstevel@tonic-gate #include <netdb.h>
707c478bd9Sstevel@tonic-gate #include <pwd.h>
717c478bd9Sstevel@tonic-gate #include <locale.h>
727c478bd9Sstevel@tonic-gate #include <limits.h>
737c478bd9Sstevel@tonic-gate #include <fnmatch.h>
747c478bd9Sstevel@tonic-gate #include <dirent.h>
757c478bd9Sstevel@tonic-gate #include <termios.h>
767c478bd9Sstevel@tonic-gate #include <stdarg.h>
777c478bd9Sstevel@tonic-gate #include <unistd.h>
787c478bd9Sstevel@tonic-gate #include <malloc.h>
797c478bd9Sstevel@tonic-gate #include <strings.h>
807c478bd9Sstevel@tonic-gate #include <errno.h>
817c478bd9Sstevel@tonic-gate #include <ctype.h>
827c478bd9Sstevel@tonic-gate #include <gssapi/gssapi.h>
837c478bd9Sstevel@tonic-gate #include <gssapi/gssapi_ext.h>
847c478bd9Sstevel@tonic-gate 
857c478bd9Sstevel@tonic-gate #define	signal(s, f)	sigset(s, f)
867c478bd9Sstevel@tonic-gate #define	setjmp(e)	sigsetjmp(e, 1)
877c478bd9Sstevel@tonic-gate #define	longjmp(e, v)	siglongjmp(e, v)
887c478bd9Sstevel@tonic-gate #define	jmp_buf		sigjmp_buf
897c478bd9Sstevel@tonic-gate 
907c478bd9Sstevel@tonic-gate /*
917c478bd9Sstevel@tonic-gate  * FTP global variables.
927c478bd9Sstevel@tonic-gate  */
937c478bd9Sstevel@tonic-gate 
947c478bd9Sstevel@tonic-gate #define	DEFAULTFTPFILE	"/etc/default/ftp"
957c478bd9Sstevel@tonic-gate 
967c478bd9Sstevel@tonic-gate /*
977c478bd9Sstevel@tonic-gate  * Options and other state info.
987c478bd9Sstevel@tonic-gate  */
99*92163adaSToomas Soome extern int	trace;		/* trace packets exchanged */
100*92163adaSToomas Soome extern int	hash;		/* print # for each buffer transferred */
101*92163adaSToomas Soome extern int	sendport;	/* use PORT cmd for each data connection */
102*92163adaSToomas Soome extern int	verbose;	/* print messages coming back from server */
103*92163adaSToomas Soome extern int	connected;	/* connected to server */
104*92163adaSToomas Soome extern int	fromatty;	/* input is from a terminal */
105*92163adaSToomas Soome extern int	interactive;	/* interactively prompt on m* cmds */
106*92163adaSToomas Soome extern int	debug;		/* debugging level */
107*92163adaSToomas Soome extern int	bell;		/* ring bell on cmd completion */
108*92163adaSToomas Soome extern int	doglob;		/* glob local file names */
109*92163adaSToomas Soome extern int	autologin;	/* establish user account on connection */
110*92163adaSToomas Soome extern int	proxy;		/* proxy server connection active */
111*92163adaSToomas Soome extern int	proxflag;	/* proxy connection exists */
112*92163adaSToomas Soome extern int	sunique;	/* store files on server with unique name */
113*92163adaSToomas Soome extern int	runique;	/* store local files with unique name */
114*92163adaSToomas Soome extern int	mcase;		/* map upper to lower case for mget names */
115*92163adaSToomas Soome extern int	ntflag;		/* use ntin ntout tables for name translation */
116*92163adaSToomas Soome extern int	mapflag;	/* use mapin mapout templates on file names */
117*92163adaSToomas Soome extern int	code;		/* return/reply code for ftp command */
118*92163adaSToomas Soome extern int	crflag;		/* if 1, strip car. rets. on ascii gets */
119*92163adaSToomas Soome extern char	pasv[64];	/* passive port for proxy data connection */
120*92163adaSToomas Soome extern char	*altarg;	/* argv[1] with no shell-like preprocessing  */
121*92163adaSToomas Soome extern char	ntin[17];	/* input translation table */
122*92163adaSToomas Soome extern char	ntout[17];	/* output translation table */
123*92163adaSToomas Soome extern char	mapin[MAXPATHLEN]; /* input map template */
124*92163adaSToomas Soome extern char	mapout[MAXPATHLEN]; /* output map template */
125*92163adaSToomas Soome extern char	typename[32];	/* name of file transfer type */
126*92163adaSToomas Soome extern int	type;		/* file transfer type */
127*92163adaSToomas Soome extern char	structname[32];	/* name of file transfer structure */
128*92163adaSToomas Soome extern int	stru;		/* file transfer structure */
129*92163adaSToomas Soome extern char	formname[32];	/* name of file transfer format */
130*92163adaSToomas Soome extern int	form;		/* file transfer format */
131*92163adaSToomas Soome extern char	modename[32];	/* name of file transfer mode */
132*92163adaSToomas Soome extern int	mode;		/* file transfer mode */
133*92163adaSToomas Soome extern char	bytename[32];	/* local byte size in ascii */
134*92163adaSToomas Soome extern int	bytesize;	/* local byte size in binary */
135*92163adaSToomas Soome extern int	passivemode;	/* passive transfer mode toggle */
136*92163adaSToomas Soome extern off_t	restart_point;	/* transfer restart offset */
137*92163adaSToomas Soome extern int	tcpwindowsize;	/* TCP window size for the data connection */
138*92163adaSToomas Soome 
139*92163adaSToomas Soome extern boolean_t	ls_invokes_NLST;	/* behaviour of 'ls' */
140*92163adaSToomas Soome extern char		*hostname;		/* name of host connected to */
141*92163adaSToomas Soome extern char		*home;
142*92163adaSToomas Soome extern char		*globerr;
143*92163adaSToomas Soome 
144*92163adaSToomas Soome extern struct	sockaddr_in6 myctladdr;		/* for channel bindings */
145*92163adaSToomas Soome extern struct	sockaddr_in6 remctladdr;	/* for channel bindings */
146*92163adaSToomas Soome 
147*92163adaSToomas Soome extern int	clevel;		/* command channel protection level */
148*92163adaSToomas Soome extern int	dlevel;		/* data channel protection level */
149*92163adaSToomas Soome 
150*92163adaSToomas Soome extern int	autoauth;	/* do authentication on connect */
151*92163adaSToomas Soome extern int	auth_type;	/* authentication type */
152*92163adaSToomas Soome extern int	auth_error;	/* one error code for all auth types */
153*92163adaSToomas Soome extern int	autoencrypt;	/* do encryption on connect */
154*92163adaSToomas Soome extern int	fflag;		/* forward credentials */
155*92163adaSToomas Soome extern boolean_t goteof;
156*92163adaSToomas Soome 
157*92163adaSToomas Soome extern int	skipsyst;	/* enable automatic sending of SYST command */
158*92163adaSToomas Soome 
159*92163adaSToomas Soome extern uchar_t	*ucbuf;		/* clear text buffer */
1607c478bd9Sstevel@tonic-gate 
1617c478bd9Sstevel@tonic-gate #define	MECH_SZ		40
1627c478bd9Sstevel@tonic-gate #define	FTP_DEF_MECH	"kerberos_v5"
163*92163adaSToomas Soome extern char	mechstr[MECH_SZ];	/* mechanism type */
1647c478bd9Sstevel@tonic-gate 
165*92163adaSToomas Soome extern gss_OID	mechoid;	/* corresponding mechanism oid type */
166*92163adaSToomas Soome extern gss_ctx_id_t gcontext;	/* gss security context */
1677c478bd9Sstevel@tonic-gate 
1687c478bd9Sstevel@tonic-gate #define	FTPBUFSIZ	BUFSIZ*16
1697c478bd9Sstevel@tonic-gate #define	HASHSIZ		BUFSIZ*8
1707c478bd9Sstevel@tonic-gate 
171*92163adaSToomas Soome extern char *buf;		/* buffer for binary sends and gets */
1727c478bd9Sstevel@tonic-gate 
173*92163adaSToomas Soome extern jmp_buf toplevel;	/* non-local goto stuff for cmd scanner */
1747c478bd9Sstevel@tonic-gate 
1757c478bd9Sstevel@tonic-gate /*
1767c478bd9Sstevel@tonic-gate  * BUFSIZE includes
1777c478bd9Sstevel@tonic-gate  *	- (MAXPATHLEN)*2 to  accomodate 2 paths (remote and local file names).
1787c478bd9Sstevel@tonic-gate  *	- MAXCMDLEN to accomodate the longest command listed in cmdtab[]
1797c478bd9Sstevel@tonic-gate  *	  (defined in cmdtab.c) as this is stuffed into the buffer along
1807c478bd9Sstevel@tonic-gate  *	  with the remote and local file names.
1817c478bd9Sstevel@tonic-gate  *	- The 4 bytes are for the 2 blank separators, a carriage-return
1827c478bd9Sstevel@tonic-gate  *	  and a NULL terminator.
1837c478bd9Sstevel@tonic-gate  *
1847c478bd9Sstevel@tonic-gate  * NOTE : The arguments may not be always pathnames (they can be commands
1857c478bd9Sstevel@tonic-gate  *	  too). But, here we have considered the worst case of two pathnames.
1867c478bd9Sstevel@tonic-gate  */
1877c478bd9Sstevel@tonic-gate #define	MAXCMDLEN	10	/* The length of longest command in cmdtab[] */
1887c478bd9Sstevel@tonic-gate #define	BUFSIZE	((MAXPATHLEN)*2+MAXCMDLEN+4)
1897c478bd9Sstevel@tonic-gate 
190*92163adaSToomas Soome extern char	line[BUFSIZE];	/* input line buffer */
191*92163adaSToomas Soome extern char	*stringbase;	/* current scan point in line buffer */
192*92163adaSToomas Soome extern char	argbuf[BUFSIZE]; /* argument storage buffer */
193*92163adaSToomas Soome extern char	*argbase;	/* current storage point in arg buffer */
194*92163adaSToomas Soome extern int	margc;		/* count of arguments on input line */
195*92163adaSToomas Soome extern char	**margv;	/* args parsed from input line */
196*92163adaSToomas Soome extern int	cpend;		/* flag: if != 0, then pending server reply */
197*92163adaSToomas Soome extern int	mflag;		/* flag: if != 0, then active multi command */
198*92163adaSToomas Soome extern FILE	*tmp_nlst;	/* tmp file; holds NLST results for mget, etc */
1997c478bd9Sstevel@tonic-gate 
200*92163adaSToomas Soome extern char	*reply_parse;	/* for parsing replies to the ADAT command */
201*92163adaSToomas Soome extern char	reply_buf[FTPBUFSIZ];
202*92163adaSToomas Soome extern char	*reply_ptr;
2037c478bd9Sstevel@tonic-gate 
204*92163adaSToomas Soome extern int	options;	/* used during socket creation */
2057c478bd9Sstevel@tonic-gate 
206*92163adaSToomas Soome extern int	timeout;	/* connection timeout */
207*92163adaSToomas Soome extern int	timeoutms;	/* connection timeout in msec */
208*92163adaSToomas Soome extern jmp_buf	timeralarm;	/* to recover from global timeout */
2097c478bd9Sstevel@tonic-gate 
2107c478bd9Sstevel@tonic-gate 
2117c478bd9Sstevel@tonic-gate /*
2127c478bd9Sstevel@tonic-gate  * Format of command table.
2137c478bd9Sstevel@tonic-gate  */
2147c478bd9Sstevel@tonic-gate struct cmd {
2157c478bd9Sstevel@tonic-gate 	char	*c_name;	/* name of command */
2167c478bd9Sstevel@tonic-gate 	char	*c_help;	/* help string */
2177c478bd9Sstevel@tonic-gate 	char	c_bell;		/* give bell when command completes */
2187c478bd9Sstevel@tonic-gate 	char	c_conn;		/* must be connected to use command */
2197c478bd9Sstevel@tonic-gate 	char	c_proxy;	/* proxy server may execute */
2207c478bd9Sstevel@tonic-gate 	void	(*c_handler)(int argc, char *argv[]); /* function to call */
2217c478bd9Sstevel@tonic-gate };
2227c478bd9Sstevel@tonic-gate 
2237c478bd9Sstevel@tonic-gate struct macel {
2247c478bd9Sstevel@tonic-gate 	char mac_name[9];	/* macro name */
2257c478bd9Sstevel@tonic-gate 	char *mac_start;	/* start of macro in macbuf */
2267c478bd9Sstevel@tonic-gate 	char *mac_end;		/* end of macro in macbuf */
2277c478bd9Sstevel@tonic-gate };
2287c478bd9Sstevel@tonic-gate 
229*92163adaSToomas Soome extern int macnum;			/* number of defined macros */
230*92163adaSToomas Soome extern struct macel macros[16];
231*92163adaSToomas Soome extern char macbuf[4096];
2327c478bd9Sstevel@tonic-gate 
2337c478bd9Sstevel@tonic-gate extern void macdef(int argc, char *argv[]);
2347c478bd9Sstevel@tonic-gate extern void doproxy(int argc, char *argv[]);
2357c478bd9Sstevel@tonic-gate extern void setpeer(int argc, char *argv[]);
2367c478bd9Sstevel@tonic-gate extern void rmthelp(int argc, char *argv[]);
2377c478bd9Sstevel@tonic-gate extern void settype(int argc, char *argv[]);
2387c478bd9Sstevel@tonic-gate extern void setbinary(int argc, char *argv[]);
2397c478bd9Sstevel@tonic-gate extern void setascii(int argc, char *argv[]);
2407c478bd9Sstevel@tonic-gate extern void settenex(int argc, char *argv[]);
2417c478bd9Sstevel@tonic-gate extern void setebcdic(int argc, char *argv[]);
2427c478bd9Sstevel@tonic-gate extern void setmode(int argc, char *argv[]);
2437c478bd9Sstevel@tonic-gate extern void setform(int argc, char *argv[]);
2447c478bd9Sstevel@tonic-gate extern void setstruct(int argc, char *argv[]);
2457c478bd9Sstevel@tonic-gate extern void put(int argc, char *argv[]);
2467c478bd9Sstevel@tonic-gate extern void mput(int argc, char *argv[]);
2477c478bd9Sstevel@tonic-gate extern void get(int argc, char *argv[]);
2487c478bd9Sstevel@tonic-gate extern void mget(int argc, char *argv[]);
2497c478bd9Sstevel@tonic-gate extern void status(int argc, char *argv[]);
2507c478bd9Sstevel@tonic-gate extern void setbell(int argc, char *argv[]);
2517c478bd9Sstevel@tonic-gate extern void settrace(int argc, char *argv[]);
2527c478bd9Sstevel@tonic-gate extern void sethash(int argc, char *argv[]);
2537c478bd9Sstevel@tonic-gate extern void setverbose(int argc, char *argv[]);
2547c478bd9Sstevel@tonic-gate extern void setport(int argc, char *argv[]);
2557c478bd9Sstevel@tonic-gate extern void setprompt(int argc, char *argv[]);
2567c478bd9Sstevel@tonic-gate extern void setglob(int argc, char *argv[]);
2577c478bd9Sstevel@tonic-gate extern void setdebug(int argc, char *argv[]);
2587c478bd9Sstevel@tonic-gate extern void cd(int argc, char *argv[]);
2597c478bd9Sstevel@tonic-gate extern void lcd(int argc, char *argv[]);
2607c478bd9Sstevel@tonic-gate extern void delete(int argc, char *argv[]);
2617c478bd9Sstevel@tonic-gate extern void mdelete(int argc, char *argv[]);
2627c478bd9Sstevel@tonic-gate extern void renamefile(int argc, char *argv[]);
2637c478bd9Sstevel@tonic-gate extern void ls(int argc, char *argv[]);
2647c478bd9Sstevel@tonic-gate extern void mls(int argc, char *argv[]);
2657c478bd9Sstevel@tonic-gate extern void shell(int argc, char *argv[]);
2667c478bd9Sstevel@tonic-gate extern void user(int argc, char *argv[]);
2677c478bd9Sstevel@tonic-gate extern void pwd(int argc, char *argv[]);
2687c478bd9Sstevel@tonic-gate extern void makedir(int argc, char *argv[]);
2697c478bd9Sstevel@tonic-gate extern void removedir(int argc, char *argv[]);
2707c478bd9Sstevel@tonic-gate extern void quote(int argc, char *argv[]);
2717c478bd9Sstevel@tonic-gate extern void rmthelp(int argc, char *argv[]);
2727c478bd9Sstevel@tonic-gate extern void quit(int argc, char *argv[]);
2737c478bd9Sstevel@tonic-gate extern void disconnect(int argc, char *argv[]);
2747c478bd9Sstevel@tonic-gate extern void account(int argc, char *argv[]);
2757c478bd9Sstevel@tonic-gate extern void setcase(int argc, char *argv[]);
2767c478bd9Sstevel@tonic-gate extern void setcr(int argc, char *argv[]);
2777c478bd9Sstevel@tonic-gate extern void setntrans(int argc, char *argv[]);
2787c478bd9Sstevel@tonic-gate extern void setnmap(int argc, char *argv[]);
2797c478bd9Sstevel@tonic-gate extern void setsunique(int argc, char *argv[]);
2807c478bd9Sstevel@tonic-gate extern void setrunique(int argc, char *argv[]);
2817c478bd9Sstevel@tonic-gate extern void cdup(int argc, char *argv[]);
2827c478bd9Sstevel@tonic-gate extern void domacro(int argc, char *argv[]);
2837c478bd9Sstevel@tonic-gate extern void help(int argc, char *argv[]);
2847c478bd9Sstevel@tonic-gate extern void reset(int argc, char *argv[]);
2857c478bd9Sstevel@tonic-gate extern void reget(int argc, char *argv[]);
2867c478bd9Sstevel@tonic-gate extern void restart(int argc, char *argv[]);
2877c478bd9Sstevel@tonic-gate extern void setpassive(int argc, char *argv[]);
2887c478bd9Sstevel@tonic-gate extern void settcpwindow(int argc, char *argv[]);
2897c478bd9Sstevel@tonic-gate extern void site(int argc, char *argv[]);
2907c478bd9Sstevel@tonic-gate 
2917c478bd9Sstevel@tonic-gate extern void ccc(int argc, char *argv[]);
2927c478bd9Sstevel@tonic-gate extern void setclear(int argc, char *argv[]);
2937c478bd9Sstevel@tonic-gate extern void setclevel(int argc, char *argv[]);
2947c478bd9Sstevel@tonic-gate extern void setdlevel(int argc, char *argv[]);
2957c478bd9Sstevel@tonic-gate extern void setsafe(int argc, char *argv[]);
2967c478bd9Sstevel@tonic-gate extern void setmech(int argc, char *argv[]);
2977c478bd9Sstevel@tonic-gate 
2987c478bd9Sstevel@tonic-gate extern int do_auth(void);
2997c478bd9Sstevel@tonic-gate extern void setpbsz(uint_t size);
3007c478bd9Sstevel@tonic-gate extern char *radix_error(int);
3017c478bd9Sstevel@tonic-gate extern int radix_encode(uchar_t *, uchar_t *, size_t, int *, int);
3027c478bd9Sstevel@tonic-gate extern void user_gss_error(OM_uint32 maj_stat, OM_uint32 min_stat,
3037c478bd9Sstevel@tonic-gate 	char *errstr);
3047c478bd9Sstevel@tonic-gate extern void setprivate(int argc, char *argv[]);
3057c478bd9Sstevel@tonic-gate 
3067c478bd9Sstevel@tonic-gate extern int secure_flush(int);
3077c478bd9Sstevel@tonic-gate extern int secure_getc(FILE *);
3087c478bd9Sstevel@tonic-gate extern int secure_putc(int, FILE *);
3097c478bd9Sstevel@tonic-gate extern ssize_t secure_read(int, void *, size_t);
3107c478bd9Sstevel@tonic-gate extern ssize_t secure_write(int, const void *, size_t);
3117c478bd9Sstevel@tonic-gate 
3127c478bd9Sstevel@tonic-gate extern void fatal(char *msg);
3137c478bd9Sstevel@tonic-gate extern int getreply(int expecteof);
3147c478bd9Sstevel@tonic-gate extern void call(void (*routine)(int argc, char *argv[]), ...);
3157c478bd9Sstevel@tonic-gate extern void sendrequest(char *cmd, char *local, char *remote, int allowpipe);
3167c478bd9Sstevel@tonic-gate extern void recvrequest(char *cmd, char *local, char *remote, char *mode,
3177c478bd9Sstevel@tonic-gate     int allowpipe);
3187c478bd9Sstevel@tonic-gate extern void makeargv(void);
3197c478bd9Sstevel@tonic-gate extern int login(char *host);
3207c478bd9Sstevel@tonic-gate extern int command(char *fmt, ...);
3217c478bd9Sstevel@tonic-gate extern char **glob(char *v);
3227c478bd9Sstevel@tonic-gate extern void blkfree(char **);
3237c478bd9Sstevel@tonic-gate extern void pswitch(int flag);
3247c478bd9Sstevel@tonic-gate 
3257c478bd9Sstevel@tonic-gate extern char *hookup(char *host, char *);
3267c478bd9Sstevel@tonic-gate extern char *mygetpass(char *prompt);
3277c478bd9Sstevel@tonic-gate extern void lostpeer(int sig);
3287c478bd9Sstevel@tonic-gate extern int ruserpass(char *host, char **aname, char **apass, char **aacct);
3297c478bd9Sstevel@tonic-gate extern FILE *mypopen(char *cmd, char *mode);
3307c478bd9Sstevel@tonic-gate extern int mypclose(FILE *ptr);
3317c478bd9Sstevel@tonic-gate extern struct cmd *getcmd(char *name);
3327c478bd9Sstevel@tonic-gate 
3337c478bd9Sstevel@tonic-gate extern void stop_timer(void);
3347c478bd9Sstevel@tonic-gate extern void reset_timer(void);
3357c478bd9Sstevel@tonic-gate extern int getpagesize(void);
3367c478bd9Sstevel@tonic-gate 
3377c478bd9Sstevel@tonic-gate #define	ENCODELEN(l)	(((4 * (l)) / 3) + 4)
3387c478bd9Sstevel@tonic-gate #define	DECODELEN(l)	(((3 * (l)) / 4) + 4)
3397c478bd9Sstevel@tonic-gate 
3407c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
3417c478bd9Sstevel@tonic-gate }
3427c478bd9Sstevel@tonic-gate #endif
3437c478bd9Sstevel@tonic-gate 
3447c478bd9Sstevel@tonic-gate #endif	/* _FTP_VAR_H */
345