$OpenBSD: patch-kstars_kstars_indi_indidrivermain_c,v 1.1 2005/02/27 09:09:14 brad Exp $
--- kstars/kstars/indi/indidrivermain.c.orig	Fri Jun 25 05:10:04 2004
+++ kstars/kstars/indi/indidrivermain.c	Sun Feb 27 03:48:43 2005
@@ -45,8 +45,8 @@
 
 static void usage(void);
 static void clientMsgCB(int fd, void *arg);
-static int dispatch (XMLEle *root, char msg[]);
-static int crackDN (XMLEle *root, char **dev, char **name, char msg[]);
+static int dispatch (XMLEle *root, char errmsg[]);
+static int crackDN (XMLEle *root, char **dev, char **name, char errmsg[]);
 const  char *pstateStr(IPState s);
 const  char *sstateStr(ISState s);
 const  char *ruleStr(ISRule r);
@@ -60,6 +60,9 @@ static LilXML *clixml;			/* XML parser c
 int
 main (int ac, char *av[])
 {
+        setgid( getgid() );
+        setuid( getuid() );
+
 	/* save handy pointer to our base name */
 	for (me = av[0]; av[0][0]; av[0]++)
 	    if (av[0][0] == '/')
@@ -177,6 +180,7 @@ IDDefNumber (const INumberVectorProperty
 /* tell client to create a new switch vector property */
 void
 IDDefSwitch (const ISwitchVectorProperty *s, const char *fmt, ...)
+
 {
 	int i;
 
@@ -637,12 +641,12 @@ usage(void)
 static void
 clientMsgCB (int fd, void *arg)
 {
-	char buf[1024], msg[1024], *bp;
+	char buf[1024], errmsg[ERRMSG_SIZE], *bp;
 	int nr;
 	arg=arg;
 
 	/* one read */
-	nr = read (fd, buf, sizeof(buf));
+	nr = read (fd, buf, sizeof(buf)-1);
 	if (nr < 0) {
 	    fprintf (stderr, "%s: %s\n", me, strerror(errno));
 	    exit(1);
@@ -651,26 +655,27 @@ clientMsgCB (int fd, void *arg)
 	    fprintf (stderr, "%s: EOF\n", me);
 	    exit(1);
 	}
+        buf[ sizeof( buf )-1 ] = '\0';
 
 	/* crack and dispatch when complete */
 	for (bp = buf; nr-- > 0; bp++) {
-	    XMLEle *root = readXMLEle (clixml, *bp, msg);
+	    XMLEle *root = readXMLEle (clixml, *bp, errmsg);
 	    if (root) {
-		if (dispatch (root, msg) < 0)
-		    fprintf (stderr, "%s dispatch error: %s\n", me, msg);
+		if (dispatch (root, errmsg) < 0)
+		    fprintf (stderr, "%s dispatch error: %s\n", me, errmsg);
 		delXMLEle (root);
-	    } else if (msg[0])
-		fprintf (stderr, "%s XML error: %s\n", me, msg);
+	    } else if (errmsg[0])
+		fprintf (stderr, "%s XML error: %s\n", me, errmsg);
 	}
 }
 
 /* crack the given INDI XML element and call driver's IS* entry points as they
  *   are recognized.
- * return 0 if ok else -1 with reason in msg[].
+ * return 0 if ok else -1 with reason in errmsg[].
  * N.B. exit if getProperties does not proclaim a compatible version.
  */
 static int
-dispatch (XMLEle *root, char msg[])
+dispatch (XMLEle *root, char errmsg[])
 {
 	XMLEle *ep;
 	int n;
@@ -687,7 +692,7 @@ dispatch (XMLEle *root, char msg[])
 	    char *dev, *name;
 
 	    /* pull out device and name */
-	    if (crackDN (root, &dev, &name, msg) < 0)
+	    if (crackDN (root, &dev, &name, errmsg) < 0)
 		return (-1);
 
 	    /* pull out each name/value pair */
@@ -729,7 +734,7 @@ printf ("%s\n", valuXMLAtt(na));
 	    /*XMLEle *ep;*/
 
 	    /* pull out device and name */
-	    if (crackDN (root, &dev, &name, msg) < 0)
+	    if (crackDN (root, &dev, &name, errmsg) < 0)
 		return (-1);
 
 	    /* pull out each name/state pair */
@@ -775,7 +780,7 @@ printf ("%s\n", valuXMLAtt(na));
 	    char *dev, *name;
 
 	    /* pull out device and name */
-	    if (crackDN (root, &dev, &name, msg) < 0)
+	    if (crackDN (root, &dev, &name, errmsg) < 0)
 		return (-1);
 
 	    /* pull out each name/text pair */
@@ -828,28 +833,28 @@ printf ("%s\n", valuXMLAtt(na));
 	    return (0);
 	}
 
-	sprintf (msg, "Unknown command: %s", tagXMLEle(root));
+	snprintf (errmsg, ERRMSG_SIZE, "Unknown command: %s", tagXMLEle(root));
 	return(1);
 }
 
 /* pull out device and name attributes from root.
- * return 0 if ok else -1 with reason in msg[].
+ * return 0 if ok else -1 with reason in errmsg[].
  */
 static int
-crackDN (XMLEle *root, char **dev, char **name, char msg[])
+crackDN (XMLEle *root, char **dev, char **name, char errmsg[])
 {
 	XMLAtt *ap;
 
 	ap = findXMLAtt (root, "device");
 	if (!ap) {
-	    sprintf (msg, "%s requires 'device' attribute", tagXMLEle(root));
+	    snprintf (errmsg, ERRMSG_SIZE, "%s requires 'device' attribute", tagXMLEle(root));
 	    return (-1);
 	}
 	*dev = valuXMLAtt(ap);
 
 	ap = findXMLAtt (root, "name");
 	if (!ap) {
-	    sprintf (msg, "%s requires 'name' attribute", tagXMLEle(root));
+	    snprintf (errmsg, ERRMSG_SIZE, "%s requires 'name' attribute", tagXMLEle(root));
 	    return (-1);
 	}
 	*name = valuXMLAtt(ap);
