Vanilla Development Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CVS update: Vanilla/newstartd



Date:	Monday February 28, 19100 @ 20:51
Author:	karthik

Update of /home/netrek/cvsroot/Vanilla/newstartd
In directory swashbuckler.fortress.real-time.com:/var/tmp/cvs-serv3695/newstartd

Modified Files:
	newstartd.c 
Log Message:
Added IP binding support to newstartd.


****************************************

Index: Vanilla/newstartd/newstartd.c
diff -u Vanilla/newstartd/newstartd.c:1.17 Vanilla/newstartd/newstartd.c:1.18
--- Vanilla/newstartd/newstartd.c:1.17	Sun Feb 20 07:36:16 2000
+++ Vanilla/newstartd/newstartd.c	Mon Feb 28 20:51:05 2000
@@ -1,7 +1,7 @@
-/* 	$Id: newstartd.c,v 1.17 2000/02/20 13:36:16 jeffno Exp $	 */
+/* 	$Id: newstartd.c,v 1.18 2000/02/29 02:51:05 karthik Exp $	 */
 
 #ifndef lint
-static char vcid[] = "$Id: newstartd.c,v 1.17 2000/02/20 13:36:16 jeffno Exp $";
+static char vcid[] = "$Id: newstartd.c,v 1.18 2000/02/29 02:51:05 karthik Exp $";
 #endif /* lint */
 
 /*
@@ -98,6 +98,7 @@
   int accepts;				/* count of accept() calls	*/
   int denials;				/* count of deny() calls	*/
   int forks;				/* count of fork() calls	*/
+  unsigned long addr;		/* address to bind() to		*/
 } prog[MAXPROG];
 
 extern char peerhostname[];		/* defined in newaccess.c	*/
@@ -400,7 +401,7 @@
       }
       
       addr.sin_family = AF_INET;
-      addr.sin_addr.s_addr = INADDR_ANY;
+      addr.sin_addr.s_addr = prog[i].addr;
       addr.sin_port = htons (prog[i].port);
       
       if (bind (sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
@@ -645,22 +646,35 @@
 int read_portfile (char *portfile)
 {
   FILE *fi;
-  char buf[BUFSIZ];
-  int i = 0, p, n;
+  char buf[BUFSIZ], addrbuf[BUFSIZ], *port;
+  int i = 0, n;
   struct stat sbuf;
 
   fi = fopen (portfile, "r");
   if (fi) {
     while (fgets (buf, BUFSIZ, fi)) {
-      if ((n = sscanf (buf, "%d %s \"%[^\"]\" %s %s %s %s", &p,
+	if (buf[0] == '#')
+		continue;
+      if ((n = sscanf (buf, "%s %s \"%[^\"]\" %s %s %s %s",
+               addrbuf,
 		       prog[i].prog,
 		       prog[i].progname,
 		       prog[i].arg[0],
 		       prog[i].arg[1],
 		       prog[i].arg[2],
 		       prog[i].arg[3])) >= 3) {
+	if (!(port = strchr(addrbuf, ':')))
+	{
+		prog[i].addr = INADDR_ANY;
+		prog[i].port = atoi(addrbuf);
+	}
+	else
+	{
+		*port++ = '\0';
+		prog[i].addr = inet_addr(addrbuf);
+		prog[i].port = atoi(port);
+	};
 	prog[i].nargs = n-3;
-	prog[i].port = (unsigned short) p;
 	prog[i].sock = -1;
 	prog[i].internal = (!strcmp (prog[i].prog, "special"));
 	prog[i].accepts = 0;