summaryrefslogtreecommitdiffstats
path: root/contrib/lukemftpd/src/extern.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/lukemftpd/src/extern.h')
-rw-r--r--contrib/lukemftpd/src/extern.h372
1 files changed, 372 insertions, 0 deletions
diff --git a/contrib/lukemftpd/src/extern.h b/contrib/lukemftpd/src/extern.h
new file mode 100644
index 0000000..15cf939
--- /dev/null
+++ b/contrib/lukemftpd/src/extern.h
@@ -0,0 +1,372 @@
+/* $NetBSD: extern.h,v 1.41 2001/04/25 01:46:25 lukem Exp $ */
+
+/*-
+ * Copyright (c) 1992, 1993
+ * The Regents of the University of California. 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
+ *
+ * @(#)extern.h 8.2 (Berkeley) 4/4/94
+ */
+
+/*-
+ * Copyright (c) 1997-2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Luke Mewburn.
+ *
+ * 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+ */
+
+/*
+ * Copyright (C) 1997 and 1998 WIDE Project.
+ * 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 project 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 PROJECT 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 PROJECT 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.
+ */
+
+#ifdef NO_LONG_LONG
+# define LLF "%ld"
+# define LLFP(x) "%" x "ld"
+# define LLT long
+# define ULLF "%lu"
+# define ULLFP(x) "%" x "lu"
+# define ULLT unsigned long
+# define STRTOLL(x,y,z) strtol(x,y,z)
+#else
+#if HAVE_PRINTF_QD
+# define LLF "%qd"
+# define LLFP(x) "%" x "qd"
+# define LLT long long
+# define ULLF "%qu"
+# define ULLFP(x) "%" x "qu"
+# define ULLT unsigned long long
+# define STRTOLL(x,y,z) strtoll(x,y,z)
+#else
+# define LLF "%lld"
+# define LLFP(x) "%" x "lld"
+# define LLT long long
+# define ULLF "%llu"
+# define ULLFP(x) "%" x "llu"
+# define ULLT unsigned long long
+# define STRTOLL(x,y,z) strtoll(x,y,z)
+#endif
+#endif
+
+#define FTP_BUFLEN 512
+
+void abor(void);
+void blkfree(char **);
+void closedataconn(FILE *);
+char *conffilename(const char *);
+char **copyblk(char **);
+void count_users(void);
+void cprintf(FILE *, const char *, ...)
+ ;
+void cwd(const char *);
+FILE *dataconn(const char *, off_t, const char *);
+void delete(const char *);
+int display_file(const char *, int);
+char **do_conversion(const char *);
+void dologout(int);
+void fatal(const char *);
+void feat(void);
+void format_path(char *, const char *);
+int ftpd_pclose(FILE *);
+FILE *ftpd_popen(char *[], const char *, int);
+char *getline(char *, int, FILE *);
+void init_curclass(void);
+void logxfer(const char *, off_t, const char *, const char *,
+ const struct timeval *, const char *);
+#if 0
+void logwtmp(const char *, const char *, const char *);
+#endif
+struct tab *lookup(struct tab *, const char *);
+void makedir(const char *);
+void mlsd(const char *);
+void mlst(const char *);
+void opts(const char *);
+void parse_conf(const char *);
+void pass(const char *);
+void passive(void);
+int lpsvproto2af(int);
+int af2lpsvproto(int);
+int epsvproto2af(int);
+int af2epsvproto(int);
+void long_passive(char *, int);
+int extended_port(const char *);
+void epsv_protounsupp(const char *);
+void perror_reply(int, const char *);
+void pwd(void);
+void removedir(const char *);
+void renamecmd(const char *, const char *);
+char *renamefrom(const char *);
+void reply(int, const char *, ...)
+ ;
+void retrieve(char *[], const char *);
+void send_file_list(const char *);
+void show_chdir_messages(int);
+void sizecmd(const char *);
+void statcmd(void);
+void statfilecmd(const char *);
+void statxfer(void);
+void store(const char *, const char *, int);
+LLT strsuftoll(const char *);
+void user(const char *);
+char *xstrdup(const char *);
+void yyerror(char *);
+
+#include <netinet/in.h>
+
+#ifdef BSD4_4
+# define HAVE_SETPROCTITLE 1
+# define HAVE_SOCKADDR_SA_LEN 1
+#endif
+
+struct sockinet {
+ union sockunion {
+ struct sockaddr_in su_sin;
+#ifdef INET6
+ struct sockaddr_in6 su_sin6;
+#endif
+ } si_su;
+#if !HAVE_SOCKADDR_SA_LEN
+ int si_len;
+#endif
+};
+
+#if !HAVE_SOCKADDR_SA_LEN
+# define su_len si_len
+#else
+# define su_len si_su.su_sin.sin_len
+#endif
+#define su_addr si_su.su_sin.sin_addr
+#define su_family si_su.su_sin.sin_family
+#define su_port si_su.su_sin.sin_port
+#ifdef INET6
+# define su_6addr si_su.su_sin6.sin6_addr
+# define su_scope_id si_su.su_sin6.sin6_scope_id
+#endif
+
+struct tab {
+ char *name;
+ short token;
+ short state;
+ short flags; /* 1 if command implemented, 2 if has options,
+ 4 if can occur OOB */
+ char *help;
+ char *options;
+};
+
+struct ftpconv {
+ struct ftpconv *next;
+ char *suffix; /* Suffix of requested name */
+ char *types; /* Valid file types */
+ char *disable; /* File to disable conversions */
+ char *command; /* Command to do the conversion */
+};
+
+typedef enum {
+ CLASS_GUEST,
+ CLASS_CHROOT,
+ CLASS_REAL
+} class_ft;
+
+typedef enum {
+ FLAG_checkportcmd = 1<<0, /* Check port commands */
+ FLAG_modify = 1<<1, /* Allow CHMOD, DELE, MKD, RMD, RNFR,
+ UMASK */
+ FLAG_passive = 1<<2, /* Allow PASV mode */
+ FLAG_sanenames = 1<<3, /* Restrict names of uploaded files */
+ FLAG_upload = 1<<4 /* As per modify, but also allow
+ APPE, STOR, STOU */
+} classflag_t;
+
+#define CURCLASS_FLAGS_SET(x) (curclass.flags |= (FLAG_ ## x))
+#define CURCLASS_FLAGS_CLR(x) (curclass.flags &= ~(FLAG_ ## x))
+#define CURCLASS_FLAGS_ISSET(x) (curclass.flags & (FLAG_ ## x))
+
+struct ftpclass {
+ struct sockinet advertise; /* PASV address to advertise as */
+ char *chroot; /* Directory to chroot(2) to at login */
+ char *classname; /* Current class */
+ struct ftpconv *conversions; /* List of conversions */
+ char *display; /* File to display upon chdir */
+ char *homedir; /* Directory to chdir(2) to at login */
+ classflag_t flags; /* Flags; see classflag_t above */
+ int limit; /* Max connections (-1 = unlimited) */
+ char *limitfile; /* File to display if limit reached */
+ LLT maxfilesize; /* Maximum file size of uploads */
+ LLT maxrateget; /* Maximum get transfer rate throttle */
+ LLT maxrateput; /* Maximum put transfer rate throttle */
+ unsigned int maxtimeout; /* Maximum permitted timeout */
+ char *motd; /* MotD file to display after login */
+ char *notify; /* Files to notify about upon chdir */
+ int portmin; /* Minumum port for passive mode */
+ int portmax; /* Maximum port for passive mode */
+ LLT rateget; /* Get (RETR) transfer rate throttle */
+ LLT rateput; /* Put (STOR) transfer rate throttle */
+ unsigned int timeout; /* Default timeout */
+ class_ft type; /* Class type */
+ mode_t umask; /* Umask to use */
+};
+
+extern void ftp_loop(void) __attribute__ ((noreturn));
+extern void ftp_handle_line(char *);
+
+#ifndef GLOBAL
+#define GLOBAL extern
+#endif
+
+
+GLOBAL struct sockinet ctrl_addr;
+GLOBAL struct sockinet data_dest;
+GLOBAL struct sockinet data_source;
+GLOBAL struct sockinet his_addr;
+GLOBAL struct sockinet pasv_addr;
+GLOBAL int connections;
+GLOBAL struct ftpclass curclass;
+GLOBAL int debug;
+GLOBAL jmp_buf errcatch;
+GLOBAL char *emailaddr;
+GLOBAL int form;
+GLOBAL int gidcount; /* number of entries in gidlist[] */
+GLOBAL gid_t gidlist[NGROUPS_MAX];
+GLOBAL int hasyyerrored;
+GLOBAL char hostname[MAXHOSTNAMELEN+1];
+GLOBAL char homedir[MAXPATHLEN];
+#ifdef KERBEROS5
+GLOBAL krb5_context kcontext;
+#endif
+GLOBAL int logged_in;
+GLOBAL int logging;
+GLOBAL int pdata; /* for passive mode */
+#if HAVE_SETPROCTITLE
+GLOBAL char proctitle[BUFSIZ]; /* initial part of title */
+#endif
+GLOBAL struct passwd *pw;
+GLOBAL int quietmessages;
+GLOBAL char remotehost[MAXHOSTNAMELEN+1];
+GLOBAL off_t restart_point;
+GLOBAL char tmpline[FTP_BUFLEN];
+GLOBAL sig_atomic_t transflag;
+GLOBAL int type;
+GLOBAL int usedefault; /* for data transfers */
+GLOBAL const char *version;
+GLOBAL int is_oob;
+
+ /* total file data bytes */
+GLOBAL off_t total_data_in, total_data_out, total_data;
+ /* total number of data files */
+GLOBAL off_t total_files_in, total_files_out, total_files;
+ /* total bytes */
+GLOBAL off_t total_bytes_in, total_bytes_out, total_bytes;
+ /* total number of xfers */
+GLOBAL off_t total_xfers_in, total_xfers_out, total_xfers;
+
+extern struct tab cmdtab[];
+
+#define INTERNAL_LS "/bin/ls"
+
+
+#define CMD_IMPLEMENTED(x) ((x)->flags != 0)
+#define CMD_HAS_OPTIONS(x) ((x)->flags & 0x2)
+#define CMD_OOB(x) ((x)->flags & 0x4)
+
+#define CPUTC(c, f) do { \
+ putc(c, f); total_bytes++; total_bytes_out++; \
+ } while (0);
+
+#define CURCLASSTYPE curclass.type == CLASS_GUEST ? "GUEST" : \
+ curclass.type == CLASS_CHROOT ? "CHROOT" : \
+ curclass.type == CLASS_REAL ? "REAL" : \
+ "<unknown>"
+
+#define ISDOTDIR(x) (x[0] == '.' && x[1] == '\0')
+#define ISDOTDOTDIR(x) (x[0] == '.' && x[1] == '.' && x[2] == '\0')
+
+#define EMPTYSTR(p) ((p) == NULL || *(p) == '\0')
+#define NEXTWORD(P, W) do { \
+ (W) = strsep(&(P), " \t"); \
+ } while ((W) != NULL && *(W) == '\0')
+#define PLURAL(s) ((s) == 1 ? "" : "s")
+#define REASSIGN(X,Y) do { if (X) free(X); (X)=(Y); } while (/*CONSTCOND*/0)
+
+#ifndef IPPORT_ANONMAX
+# define IPPORT_ANONMAX 65535
+#endif
OpenPOWER on IntegriCloud