1: #ifndef lint
2: static char *sccsid = "@(#)netaux.c 1.3 (Berkeley) 3/12/86";
3: #endif
4:
5: /*
6: * Routines to deal with network stuff for
7: * stand-alone version of server.
8: */
9:
10: #include "common.h"
11: #include <sys/socket.h>
12: #include <netinet/in.h>
13: #include <netdb.h>
14: #include <sys/ioctl.h>
15: #include <sys/time.h>
16: #include <signal.h>
17:
18: #ifdef ALONE
19:
20:
21: /*
22: * disassoc -- disassociate user's terminal from this
23: * process. Closes all file descriptors, except
24: * the control socket.
25: *
26: * Parameters: None.
27: *
28: * Returns: Nothing.
29: *
30: * Side effects: Disassociates this process from
31: * a terminal; closes file descriptors.
32: */
33:
34: disassoc()
35: {
36: register int i;
37:
38: if (fork())
39: exit(0);
40:
41: for (i = 0; i < 10; i++)
42: (void) close(i);
43:
44: i = open("/dev/tty", O_RDWR);
45: if (i >= 0) {
46: ioctl(i, TIOCNOTTY, 0);
47: (void) close(i);
48: }
49: }
50:
51:
52: /*
53: * get_socket -- create a socket bound to the appropriate
54: * port number.
55: *
56: * Parameters: None.
57: *
58: * Returns: Socket bound to correct address.
59: *
60: * Side effects: None.
61: *
62: * Errors: Syslogd, cause aboriton.
63: */
64:
65: get_socket()
66: {
67: int s;
68: struct sockaddr_in sin;
69: struct servent *sp;
70:
71: sp = getservbyname("nntp", "tcp");
72: if (sp == NULL) {
73: syslog(LOG_ERR, "get_socket: tcp/nntp, unknown service.");
74: exit(1);
75: }
76:
77: bzero((char *) &sin, sizeof (sin));
78: sin.sin_family = AF_INET;
79: sin.sin_addr.s_addr = htonl(INADDR_ANY);
80: sin.sin_port = sp->s_port;
81:
82: s = socket(AF_INET, SOCK_STREAM, 0);
83: if (s < 0) {
84: syslog(LOG_ERR, "get_socket: socket: %m");
85: exit(1);
86: }
87:
88: if (bind(s, (struct sockaddr *) &sin, sizeof(sin)) < 0) {
89: syslog(LOG_ERR, "get_socket: bind: %m");
90: exit(1);
91: }
92:
93: return (s);
94: }
95:
96: /*
97: * make_stdio -- make a given socket be our standard input
98: * and output.
99: *
100: * Parameters: "sockt" is the socket we want to
101: * make be file descriptors 0 and 1.
102: *
103: * Returns: Nothing.
104: *
105: * Side effects: None.
106: */
107:
108: make_stdio(sockt)
109: int sockt;
110: {
111: int ttyd, i;
112:
113: (void) dup2(sockt, 0);
114: (void) close(sockt);
115: (void) dup2(0, 1);
116: for (i = getdtablesize(); --i > 2; )
117: (void) close(i);
118: ttyd = open("/dev/tty", O_RDWR);
119: if (ttyd >= 0) {
120: ioctl(ttyd, TIOCNOTTY, 0);
121: (void) close(ttyd);
122: }
123: }
124:
125: /*
126: * set_timer -- set up the interval timer so that
127: * the active file is read in every so often.
128: *
129: * Parameters: None.
130: *
131: * Returns: Nothing.
132: *
133: * Side effects: Sets interval timer to READINTVL seconds.
134: * Sets SIGALRM to call read_again.
135: */
136:
137: set_timer()
138: {
139: struct itimerval new, old;
140: extern int read_again();
141:
142: (void) signal(SIGALRM, read_again);
143:
144: new.it_value.tv_sec = READINTVL;
145: new.it_value.tv_usec = 0;
146: new.it_interval.tv_sec = READINTVL;
147: new.it_interval.tv_usec = 0;
148: old.it_value.tv_sec = 0;
149: old.it_value.tv_usec = 0;
150: old.it_interval.tv_sec = 0;
151: old.it_interval.tv_usec = 0;
152:
153: if (setitimer(ITIMER_REAL, &new, &old) < 0) {
154: syslog(LOG_ERR, "set_timer: setitimer: %m\n");
155: exit(1);
156: }
157: }
158:
159:
160: /*
161: * read_again -- (maybe) read in the active file again,
162: * if it's changed since the last time we checked.
163: *
164: * Parameters: None (called by interrupt).
165: *
166: * Returns: Nothing.
167: *
168: * Side effects: May change "num_groups" and "group_array".
169: */
170:
171: read_again()
172: {
173: static long last_mtime; /* Last time active file was changed */
174: struct stat statbuf;
175:
176: if (stat(ACTIVE_FILE, &statbuf) < 0)
177: return;
178:
179: if (statbuf.st_mtime != last_mtime) {
180: last_mtime = statbuf.st_mtime;
181: num_groups = read_groups();
182: }
183: }
184:
185:
186: /*
187: * reaper -- reap children who are ready to die.
188: * Called by signal.
189: *
190: * Parameters: None.
191: *
192: * Returns: Nothing.
193: *
194: * Side effects: None.
195: */
196:
197: reaper()
198: {
199: union wait status;
200:
201: while (wait3(&status, WNOHANG, (struct rusage *)0) > 0)
202: ;
203: }
204:
205: #endif
Defined functions
Defined variables
sccsid
defined in line
2;
never used