xref: /freebsd/usr.sbin/inetd/inetd.h (revision d57dbd161538b5f0f0458ad37aed4a5fd515e70a)
1 /*
2  * Copyright (c) 1983, 1991, 1993, 1994
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *	This product includes software developed by the University of
16  *	California, Berkeley and its contributors.
17  * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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  * $FreeBSD$
34  */
35 
36 #include <sys/time.h>
37 #include <sys/socket.h>
38 
39 #include <netinet/in.h>
40 
41 #include <stdio.h>
42 
43 #define BUFSIZE 8192
44 #define LINESIZ 72
45 
46 #define NORM_TYPE	0
47 #define MUX_TYPE	1
48 #define MUXPLUS_TYPE	2
49 #define TTCP_TYPE	3
50 #define FAITH_TYPE	4
51 #define ISMUX(sep)	(((sep)->se_type == MUX_TYPE) || \
52 			 ((sep)->se_type == MUXPLUS_TYPE))
53 #define ISMUXPLUS(sep)	((sep)->se_type == MUXPLUS_TYPE)
54 #define ISTTCP(sep)	((sep)->se_type == TTCP_TYPE)
55 
56 struct	servtab {
57 	char	*se_service;		/* name of service */
58 	int	se_socktype;		/* type of socket to use */
59 	int	se_family;		/* address family */
60 	char	*se_proto;		/* protocol used */
61 	int	se_maxchild;		/* max number of children */
62 	int	se_maxcpm;		/* max connects per IP per minute */
63 	int	se_numchild;		/* current number of children */
64 	pid_t	*se_pids;		/* array of child pids */
65 	char	*se_user;		/* user name to run as */
66 	char    *se_group;              /* group name to run as */
67 #ifdef  LOGIN_CAP
68 	char    *se_class;              /* login class name to run with */
69 #endif
70 	struct	biltin *se_bi;		/* if built-in, description */
71 	char	*se_server;		/* server program */
72 	char	*se_server_name;	/* server program without path */
73 #define	MAXARGV 20
74 	char	*se_argv[MAXARGV+1];	/* program arguments */
75 #ifdef IPSEC
76 	char	*se_policy;		/* IPsec policy string */
77 #endif
78 	int	se_fd;			/* open descriptor */
79 	union {				/* bound address */
80 		struct	sockaddr se_un_ctrladdr;
81 		struct	sockaddr_in se_un_ctrladdr4;
82 		struct	sockaddr_in6 se_un_ctrladdr6;
83 	} se_un;
84 #define se_ctrladdr	se_un.se_un_ctrladdr
85 #define se_ctrladdr4	se_un.se_un_ctrladdr4
86 #define se_ctrladdr6	se_un.se_un_ctrladdr6
87   	socklen_t	se_ctrladdr_size;
88 	u_char	se_type;		/* type: normal, mux, or mux+ */
89 	u_char	se_checked;		/* looked at during merge */
90 	u_char	se_accept;		/* i.e., wait/nowait mode */
91 	u_char	se_rpc;			/* ==1 if RPC service */
92 	int	se_rpc_prog;		/* RPC program number */
93 	u_int	se_rpc_lowvers;		/* RPC low version */
94 	u_int	se_rpc_highvers;	/* RPC high version */
95 	int	se_count;		/* number started since se_time */
96 	struct	timeval se_time;	/* start of se_count */
97 	struct	servtab *se_next;
98 	struct se_flags {
99 		u_int se_nomapped : 1;
100 		u_int se_reset : 1;
101 	} se_flags;
102 };
103 
104 #define	se_nomapped		se_flags.se_nomapped
105 #define	se_reset		se_flags.se_reset
106 
107 void		chargen_dg __P((int, struct servtab *));
108 void		chargen_stream __P((int, struct servtab *));
109 void		close_sep __P((struct servtab *));
110 void		flag_signal __P((int));
111 void		flag_config __P((int));
112 void		config __P((void));
113 void		daytime_dg __P((int, struct servtab *));
114 void		daytime_stream __P((int, struct servtab *));
115 void		discard_dg __P((int, struct servtab *));
116 void		discard_stream __P((int, struct servtab *));
117 void		echo_dg __P((int, struct servtab *));
118 void		echo_stream __P((int, struct servtab *));
119 void		endconfig __P((void));
120 struct servtab *enter __P((struct servtab *));
121 void		freeconfig __P((struct servtab *));
122 struct servtab *getconfigent __P((void));
123 void		iderror __P((int, int, int, char *));
124 void		ident_stream __P((int, struct servtab *));
125 void		machtime_dg __P((int, struct servtab *));
126 void		machtime_stream __P((int, struct servtab *));
127 int		matchservent __P((char *, char *, char *));
128 char	       *newstr __P((char *));
129 char	       *nextline __P((FILE *));
130 void		print_service __P((char *, struct servtab *));
131 void		addchild __P((struct servtab *, int));
132 void		flag_reapchild __P((int));
133 void		reapchild __P((void));
134 void		enable __P((struct servtab *));
135 void		disable __P((struct servtab *));
136 void		flag_retry __P((int));
137 void		retry __P((void));
138 int		setconfig __P((void));
139 void		setup __P((struct servtab *));
140 #ifdef IPSEC
141 void		ipsecsetup __P((struct servtab *));
142 #endif
143 char	       *sskip __P((char **));
144 char	       *skip __P((char **));
145 struct servtab *tcpmux __P((int));
146 int		cpmip __P((struct servtab *, int));
147 void		inetd_setproctitle __P((char *, int));
148 int		check_loop __P((struct sockaddr *, struct servtab *sep));
149 
150 void		unregisterrpc __P((register struct servtab *sep));
151 
152 struct biltin {
153 	char	*bi_service;		/* internally provided service name */
154 	int	bi_socktype;		/* type of socket supported */
155 	short	bi_fork;		/* 1 if should fork before call */
156 	int	bi_maxchild;		/* max number of children, -1=default */
157 	void	(*bi_fn)();		/* function which performs it */
158 };
159