summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsnj <snj@pkgsrc.org>2005-02-20 18:45:05 +0000
committersnj <snj@pkgsrc.org>2005-02-20 18:45:05 +0000
commit7820775fa4a71d7632dc80549156f266a9ad5723 (patch)
tree2a5e37118b96834e42a36a04a05732156bec18ec
parent43ad2a9314bab973b3e20d3a5e76b63c6dc8925d (diff)
downloadpkgsrc-7820775fa4a71d7632dc80549156f266a9ad5723.tar.gz
Pullup ticket 299 - requested by Mark Davies
security fix for kdeedu3 Revisions pulled up: - pkgsrc/misc/kdeedu3/Makefile 1.29 - pkgsrc/misc/kdeedu3/distinfo 1.22 - pkgsrc/misc/kdeedu3/patches/patch-ac 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ad 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ae 1.1 - pkgsrc/misc/kdeedu3/patches/patch-af 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ag 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ah 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ai 1.1 - pkgsrc/misc/kdeedu3/patches/patch-aj 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ak 1.1 - pkgsrc/misc/kdeedu3/patches/patch-al 1.1 - pkgsrc/misc/kdeedu3/patches/patch-am 1.1 - pkgsrc/misc/kdeedu3/patches/patch-an 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ao 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ap 1.1 - pkgsrc/misc/kdeedu3/patches/patch-aq 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ar 1.1 - pkgsrc/misc/kdeedu3/patches/patch-as 1.1 - pkgsrc/misc/kdeedu3/patches/patch-at 1.1 - pkgsrc/misc/kdeedu3/patches/patch-au 1.1 - pkgsrc/misc/kdeedu3/patches/patch-av 1.1 - pkgsrc/misc/kdeedu3/patches/patch-aw 1.1 - pkgsrc/misc/kdeedu3/patches/patch-ax 1.1 Module Name: pkgsrc Committed By: markd Date: Sun Feb 20 11:31:11 UTC 2005 Modified Files: pkgsrc/misc/kdeedu3: Makefile distinfo Added Files: pkgsrc/misc/kdeedu3/patches: patch-ac patch-ad patch-ae patch-af patch-ag patch-ah patch-ai patch-aj patch-ak patch-al patch-am patch-an patch-ao patch-ap patch-aq patch-ar patch-as patch-at patch-au patch-av patch-aw patch-ax Log Message: Fix for http://www.kde.org/info/security/advisory-20050215-1.txt. Bump PKGREVISION.
-rw-r--r--misc/kdeedu3/Makefile3
-rw-r--r--misc/kdeedu3/distinfo24
-rw-r--r--misc/kdeedu3/patches/patch-ac102
-rw-r--r--misc/kdeedu3/patches/patch-ad121
-rw-r--r--misc/kdeedu3/patches/patch-ae48
-rw-r--r--misc/kdeedu3/patches/patch-af22
-rw-r--r--misc/kdeedu3/patches/patch-ag40
-rw-r--r--misc/kdeedu3/patches/patch-ah12
-rw-r--r--misc/kdeedu3/patches/patch-ai119
-rw-r--r--misc/kdeedu3/patches/patch-aj254
-rw-r--r--misc/kdeedu3/patches/patch-ak12
-rw-r--r--misc/kdeedu3/patches/patch-al135
-rw-r--r--misc/kdeedu3/patches/patch-am144
-rw-r--r--misc/kdeedu3/patches/patch-an51
-rw-r--r--misc/kdeedu3/patches/patch-ao111
-rw-r--r--misc/kdeedu3/patches/patch-ap13
-rw-r--r--misc/kdeedu3/patches/patch-aq33
-rw-r--r--misc/kdeedu3/patches/patch-ar184
-rw-r--r--misc/kdeedu3/patches/patch-as21
-rw-r--r--misc/kdeedu3/patches/patch-at41
-rw-r--r--misc/kdeedu3/patches/patch-au17
-rw-r--r--misc/kdeedu3/patches/patch-av93
-rw-r--r--misc/kdeedu3/patches/patch-aw261
-rw-r--r--misc/kdeedu3/patches/patch-ax12
24 files changed, 1871 insertions, 2 deletions
diff --git a/misc/kdeedu3/Makefile b/misc/kdeedu3/Makefile
index 20a145063ef..a9aa42e231a 100644
--- a/misc/kdeedu3/Makefile
+++ b/misc/kdeedu3/Makefile
@@ -1,6 +1,7 @@
-# $NetBSD: Makefile,v 1.28 2004/10/13 12:34:51 markd Exp $
+# $NetBSD: Makefile,v 1.28.2.1 2005/02/20 18:45:05 snj Exp $
DISTNAME= kdeedu-${_KDE_VERSION}
+PKGREVISION= 1
CATEGORIES= misc
COMMENT= Edu{tainment,cation} tools for the KDE integrated X11 desktop
diff --git a/misc/kdeedu3/distinfo b/misc/kdeedu3/distinfo
index 0ed87ec69ee..865612d52c4 100644
--- a/misc/kdeedu3/distinfo
+++ b/misc/kdeedu3/distinfo
@@ -1,6 +1,28 @@
-$NetBSD: distinfo,v 1.21 2004/12/10 06:19:47 markd Exp $
+$NetBSD: distinfo,v 1.21.2.1 2005/02/20 18:45:05 snj Exp $
SHA1 (kdeedu-3.3.2.tar.bz2) = 244399f073a5dea34d5e351871dbcfaa747b3eec
Size (kdeedu-3.3.2.tar.bz2) = 22069753 bytes
SHA1 (patch-aa) = d66c0a9fb5cf367b65c845e4a46b8353dd033cfc
SHA1 (patch-ab) = 6f7122f34d2894489b933d90644022f71192b023
+SHA1 (patch-ac) = 4a46edad3da8e292e5ee277bb82a87126df8d376
+SHA1 (patch-ad) = 33e331c2350466ef328f68569cdf0c4b77676a1c
+SHA1 (patch-ae) = 39278384caa77853ee1870e565c9fcd1946c670e
+SHA1 (patch-af) = c3277f0c6bda68eb48709bccaaf786f46c694503
+SHA1 (patch-ag) = 8f9962e26ae3d8e2cf1b8ea23a3a3d98645cfe8a
+SHA1 (patch-ah) = 55eebedd0fd7ba814573a38ab47711654e45c72b
+SHA1 (patch-ai) = a59e4e3cd0b4004c3064209a76a25d26ecf95c30
+SHA1 (patch-aj) = 79fb25f03bd97dfd140ecd4ed6c6ce0234393283
+SHA1 (patch-ak) = 62476e581941bb80fbac04d4f30be4b8ae88db1b
+SHA1 (patch-al) = 50e57ee4d0d930defd1d0c4aaaeb84b99e39600c
+SHA1 (patch-am) = f51920cd99c8478271bf4b336104593cb28906bb
+SHA1 (patch-an) = 841f920931ab0eae1fea385c4674bc326f07a14d
+SHA1 (patch-ao) = 594b2e210aa784951ce02a7072d5c85f570e7527
+SHA1 (patch-ap) = f665144c281b79f27ceebd0650e2822afd0c8c78
+SHA1 (patch-aq) = 924ab74ef90738afc7bbaccabb635bdaba138c19
+SHA1 (patch-ar) = 35253305bd8edbccbf8979c013f8f9a4887ca528
+SHA1 (patch-as) = 3595ff48db9cd3485729c98371d42597cc1cb929
+SHA1 (patch-at) = 95e18d6be3dc1bab88f1eee68bec87d09d77d0a2
+SHA1 (patch-au) = 27b68ee3d508add5746600d41c485be4749b0eee
+SHA1 (patch-av) = eb41ed317f91f0bc41447c59c9548c4a66d8acc0
+SHA1 (patch-aw) = d8c538a1be434ee5b3df98589849f9a2b9efd116
+SHA1 (patch-ax) = cf0b8c94e535a8b48c25d78a66dea4ec4b197734
diff --git a/misc/kdeedu3/patches/patch-ac b/misc/kdeedu3/patches/patch-ac
new file mode 100644
index 00000000000..4cf9b0ddf41
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ac
@@ -0,0 +1,102 @@
+$NetBSD: patch-ac,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/devicemanager.cpp.orig 2004-07-18 05:52:56.000000000 +1200
++++ kstars/kstars/devicemanager.cpp
+@@ -17,6 +17,7 @@
+ #include "indiproperty.h"
+ #include "indigroup.h"
+ #include "indidevice.h"
++#include "indi/indicom.h"
+ #include "kstars.h"
+ #include "kstarsdatetime.h"
+
+@@ -136,50 +137,51 @@ bool DeviceManager::indiConnect(QString
+ void DeviceManager::dataReceived()
+ {
+ char ibuf[32]; /* not so much user input lags */
+- char msg[1024];
++ char errmsg[ERRMSG_SIZE];
+ int i, nr;
+
+ /* read INDI command */
+- nr = read (serverFD, ibuf, sizeof(ibuf));
++ nr = read (serverFD, ibuf, sizeof(ibuf)-1);
+ if (nr <= 0)
+ {
+ if (nr < 0)
+- sprintf (msg, "INDI: input error.");
++ strcpy (errmsg, "INDI: input error.");
+ else
+- sprintf (msg, "INDI: agent closed connection.");
++ strcpy (errmsg, "INDI: agent closed connection.");
+
+
+ tcflush(serverFD, TCIFLUSH);
+ sNotifier->disconnect();
+ close(serverFD);
+ parent->removeDeviceMgr(mgrID);
+- KMessageBox::error(0, QString(msg));
++ KMessageBox::error(0, QString::fromLatin1(errmsg));
+
+ return;
+ }
+
++ ibuf[ sizeof( ibuf )-1 ] = '\0';
++
+ /* process each char */
+ for (i = 0; i < nr; i++)
+ {
+ if (!XMLParser)
+ return;
+
+- XMLEle *root = readXMLEle (XMLParser, (int)ibuf[i], msg);
++ XMLEle *root = readXMLEle (XMLParser, (int)ibuf[i], errmsg);
+ if (root)
+ {
+ //prXMLEle (stdout, root, 0);
+- if (dispatchCommand(root, msg) < 0)
++ if (dispatchCommand(root, errmsg) < 0)
+ {
+- //kdDebug() << msg << endl;
+- fprintf(stderr, msg);
++ fprintf(stderr, "%s", errmsg);
+ prXMLEle (stdout, root, 0);
+ }
+
+ delXMLEle (root);
+ }
+- else if (msg[0])
++ else if (*errmsg)
+ {
+- kdDebug() << msg << endl;
++ kdDebug() << errmsg << endl;
+ }
+ }
+ }
+@@ -271,7 +273,7 @@ int DeviceManager::removeDevice(QString
+ }
+ }
+
+- sprintf(errmsg, "Device %s not found" , devName.ascii());
++ snprintf(errmsg, ERRMSG_SIZE, "Device %.32s not found" , devName.ascii());
+ return -1;
+ }
+
+@@ -284,7 +286,7 @@ INDI_D * DeviceManager::findDev (QString
+ return (indi_dev.at(i));
+ }
+
+- sprintf (errmsg, "INDI: no such device %s", devName.ascii());
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: no such device %.32s", devName.ascii());
+ kdDebug() << errmsg;
+
+ return NULL;
+@@ -342,7 +344,7 @@ INDI_D * DeviceManager::findDev (XMLEle
+ return (addDevice (root, errmsg));
+
+
+- sprintf (errmsg, "INDI: <%s> no such device %s", tagXMLEle(root), dn);
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.32s> no such device %.32s", tagXMLEle(root), dn);
+ return NULL;
+ }
+
diff --git a/misc/kdeedu3/patches/patch-ad b/misc/kdeedu3/patches/patch-ad
new file mode 100644
index 00000000000..f16773991fd
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ad
@@ -0,0 +1,121 @@
+$NetBSD: patch-ad,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indidevice.cpp.orig 2004-06-25 21:10:00.000000000 +1200
++++ kstars/kstars/indidevice.cpp
+@@ -172,7 +172,7 @@ int INDI_D::setAnyCmd (XMLEle *root, cha
+ pp = findProp (valuXMLAtt(ap));
+ if (!pp)
+ {
+- sprintf (errmsg,"INDI: <%s> device %s has no property named %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.32s> device %.32s has no property named %.64s",
+ tagXMLEle(root), name.ascii(), valuXMLAtt(ap));
+ return (-1);
+ }
+@@ -197,7 +197,7 @@ int INDI_D::setValue (INDI_P *pp, XMLEle
+ pp->drawLt (pp->state);
+ else
+ {
+- sprintf (errmsg, "INDI: <%s> bogus state %s for %s %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> bogus state %.64s for %.64s %.64s",
+ tagXMLEle(root), valuXMLAtt(ap), name.ascii(), pp->name.ascii());
+ return (-1);
+ }
+@@ -265,7 +265,7 @@ int INDI_D::setTextValue (INDI_P *pp, XM
+
+ if (!lp)
+ {
+- sprintf(errmsg, "Error: unable to find element '%s' in property '%s'", elementName.ascii(), pp->name.ascii());
++ snprintf(errmsg, ERRMSG_SIZE, "Error: unable to find element '%.64s' in property '%.64s'", elementName.ascii(), pp->name.ascii());
+ return (-1);
+ }
+
+@@ -360,7 +360,7 @@ int INDI_D::setLabelState (INDI_P *pp, X
+ /* no name */
+ if (!ap)
+ {
+- sprintf (errmsg, "INDI: <%s> %s %s %s requires name",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> %.64s %.64s %.64s requires name",
+ tagXMLEle(root), name.ascii(), pp->name.ascii(), tagXMLEle(ep));
+ return (-1);
+ }
+@@ -368,7 +368,7 @@ int INDI_D::setLabelState (INDI_P *pp, X
+ if ((islight && crackLightState (pcdataXMLEle(ep), &state) < 0)
+ || (!islight && crackSwitchState (pcdataXMLEle(ep), &state) < 0))
+ {
+- sprintf (errmsg, "INDI: <%s> unknown state %s for %s %s %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> unknown state %.64s for %.64s %.64s %.64s",
+ tagXMLEle(root), pcdataXMLEle(ep), name.ascii(), pp->name.ascii(), tagXMLEle(ep));
+ return (-1);
+ }
+@@ -379,7 +379,7 @@ int INDI_D::setLabelState (INDI_P *pp, X
+
+ if (!lp)
+ {
+- sprintf (errmsg,"INDI: <%s> %s %s has no choice named %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> %.64s %.64s has no choice named %.64s",
+ tagXMLEle(root), name.ascii(), pp->name.ascii(), valuXMLAtt(ap));
+ return (-1);
+ }
+@@ -409,7 +409,7 @@ int INDI_D::setLabelState (INDI_P *pp, X
+ {
+ if (menuChoice)
+ {
+- sprintf(errmsg, "INDI: <%s> %s %s has multiple ON states", tagXMLEle(root), name.ascii(), pp->name.ascii());
++ snprintf(errmsg, ERRMSG_SIZE, "INDI: <%.64s> %.64s %.64s has multiple ON states", tagXMLEle(root), name.ascii(), pp->name.ascii());
+ return (-1);
+ }
+ menuChoice = 1;
+@@ -470,7 +470,7 @@ INDI_P * INDI_D::addProperty (XMLEle *ro
+
+ if (findProp (valuXMLAtt(ap)))
+ {
+- sprintf (errmsg, "INDI: <%s %s %s> already exists.\n", tagXMLEle(root),
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s %.64s %.64s> already exists.\n", tagXMLEle(root),
+ name.ascii(), valuXMLAtt(ap));
+ return NULL;
+ }
+@@ -492,7 +492,7 @@ INDI_P * INDI_D::addProperty (XMLEle *ro
+
+ if (crackLightState (valuXMLAtt(ap), &pp->state) < 0)
+ {
+- sprintf (errmsg, "INDI: <%s> bogus state %s for %s %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> bogus state %.64s for %.64s %.64s",
+ tagXMLEle(root), valuXMLAtt(ap), pp->pg->dp->name.ascii(), pp->name.ascii());
+ delete(pp);
+ return (NULL);
+@@ -544,7 +544,7 @@ INDI_G * INDI_D::findGroup (QString gro
+ return curGroup;
+ }
+
+- sprintf (errmsg, "INDI: group %s not found in %s", grouptag.ascii(), name.ascii());
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: group %.64s not found in %.64s", grouptag.ascii(), name.ascii());
+ return NULL;
+ }
+
+@@ -559,7 +559,7 @@ INDI_G * INDI_D::findGroup (QString gro
+
+ ap = findXMLAtt(root, "perm");
+ if (!ap) {
+- sprintf (errmsg, "INDI: <%s %s %s> missing attribute 'perm'",
++ snprintf (errmsg, ERRMSG_SIZE,"INDI: <%.64s %.64s %.64s> missing attribute 'perm'",
+ tagXMLEle(root), pp->pg->dp->name.ascii(), pp->name.ascii());
+ return (-1);
+ }
+@@ -570,7 +570,7 @@ INDI_G * INDI_D::findGroup (QString gro
+ else if (!strcmp(valuXMLAtt(ap), "rw") || !strcmp(valuXMLAtt(ap), "w"))
+ *permp = PP_RW;
+ else {
+- sprintf (errmsg, "INDI: <%s> unknown perm %s for %s %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> unknown perm %.64s for %.64s %.64s",
+ tagXMLEle(root), valuXMLAtt(ap), pp->pg->dp->name.ascii(), pp->name.ascii());
+ return (-1);
+ }
+@@ -769,7 +769,7 @@ int INDI_D::buildSwitchesGUI (XMLEle *ro
+ return (err);
+ }
+
+- sprintf (errmsg, "INDI: <%s> unknown rule %s for %s %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> unknown rule %.64s for %.64s %.64s",
+ tagXMLEle(root), valuXMLAtt(ap), name.ascii(), pp->name.ascii());
+
+ delete(pp);
diff --git a/misc/kdeedu3/patches/patch-ae b/misc/kdeedu3/patches/patch-ae
new file mode 100644
index 00000000000..7fa03261245
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ae
@@ -0,0 +1,48 @@
+$NetBSD: patch-ae,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indidriver.cpp.orig 2004-07-18 05:52:56.000000000 +1200
++++ kstars/kstars/indidriver.cpp
+@@ -19,6 +19,7 @@
+ #include "indihostconf.h"
+ #include "devicemanager.h"
+ #include "indidevice.h"
++#include "indi/indicom.h"
+
+ #include "kstars.h"
+ #include "kstarsdata.h"
+@@ -532,7 +533,7 @@ bool INDIDriver::buildDeviceGroup(XMLEle
+
+ if (!ap)
+ {
+- sprintf(errmsg, "Tag %s does not have a group attribute", tagXMLEle(root));
++ snprintf(errmsg, ERRMSG_SIZE, "Tag %.64s does not have a group attribute", tagXMLEle(root));
+ return false;
+ }
+
+@@ -580,7 +581,7 @@ bool INDIDriver::buildDriverElement(XMLE
+ ap = findXMLAtt(root, "label");
+ if (!ap)
+ {
+- sprintf(errmsg, "Tag %s does not have a label attribute", tagXMLEle(root));
++ snprintf(errmsg, ERRMSG_SIZE, "Tag %.64s does not have a label attribute", tagXMLEle(root));
+ return false;
+ }
+
+@@ -590,7 +591,7 @@ bool INDIDriver::buildDriverElement(XMLE
+ ap = findXMLAtt(root, "driver");
+ if (!ap)
+ {
+- sprintf(errmsg, "Tag %s does not have a driver attribute", tagXMLEle(root));
++ snprintf(errmsg, ERRMSG_SIZE, "Tag %.64s does not have a driver attribute", tagXMLEle(root));
+ return false;
+ }
+
+@@ -833,7 +834,7 @@ IDevice::IDevice(QString inLabel, QStrin
+
+ }
+
+-void IDevice::processstd(KProcess */*proc*/, char* buffer, int /*buflen*/)
++void IDevice::processstd(KProcess* /*proc*/, char* buffer, int /*buflen*/)
+ {
+ serverBuffer.append(buffer);
+ emit newServerInput();
diff --git a/misc/kdeedu3/patches/patch-af b/misc/kdeedu3/patches/patch-af
new file mode 100644
index 00000000000..a71e793eb0b
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-af
@@ -0,0 +1,22 @@
+$NetBSD: patch-af,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indielement.cpp.orig 2004-06-25 21:10:00.000000000 +1200
++++ kstars/kstars/indielement.cpp
+@@ -42,7 +42,7 @@ XMLAtt * findAtt (XMLEle *ep, const char
+ if (ap)
+ return (ap);
+ if (errmsg)
+- sprintf (errmsg, "INDI: <%s> missing attribute '%s'", tagXMLEle(ep),name);
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> missing attribute '%.64s'", tagXMLEle(ep),name);
+ return NULL;
+ }
+
+@@ -55,7 +55,7 @@ XMLEle * findEle (XMLEle *ep, INDI_P *pp
+ if (cp)
+ return (cp);
+ if (errmsg)
+- sprintf (errmsg, "INDI: <%s %s %s> missing child '%s'", tagXMLEle(ep),
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s %.64s %.64s> missing child '%.64s'", tagXMLEle(ep),
+ pp->pg->dp->name.ascii(), pp->name.ascii(), child);
+ return (NULL);
+ }
diff --git a/misc/kdeedu3/patches/patch-ag b/misc/kdeedu3/patches/patch-ag
new file mode 100644
index 00000000000..557eace2f8c
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ag
@@ -0,0 +1,40 @@
+$NetBSD: patch-ag,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indiproperty.cpp.orig 2004-07-18 05:52:57.000000000 +1200
++++ kstars/kstars/indiproperty.cpp
+@@ -521,7 +521,7 @@ int INDI_P::buildMenuGUI(XMLEle *root, c
+
+ if (pg->dp->crackSwitchState (pcdataXMLEle(sep), &(lp->state)) < 0)
+ {
+- sprintf (errmsg, "INDI: <%s> unknown state %s for %s %s %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> unknown state %.64s for %.64s %.64s %.64s",
+ tagXMLEle(root), valuXMLAtt(ap), name.ascii(), lp->name.ascii(), name.ascii());
+ return (-1);
+ }
+@@ -532,7 +532,7 @@ int INDI_P::buildMenuGUI(XMLEle *root, c
+ {
+ if (onItem != -1)
+ {
+- sprintf (errmsg,"INDI: <%s> %s %s has multiple On switches",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> %.64s %.64s has multiple On switches",
+ tagXMLEle(root), name.ascii(), lp->name.ascii());
+ return (-1);
+ }
+@@ -602,7 +602,7 @@ int INDI_P::buildSwitchesGUI(XMLEle *roo
+
+ if (pg->dp->crackSwitchState (pcdataXMLEle(sep), &(lp->state)) < 0)
+ {
+- sprintf (errmsg, "INDI: <%s> unknown state %s for %s %s %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> unknown state %.64s for %.64s %.64s %.64s",
+ tagXMLEle(root), valuXMLAtt(ap), name.ascii(), name.ascii(), lp->name.ascii());
+ return (-1);
+ }
+@@ -700,7 +700,7 @@ int INDI_P::buildLightsGUI(XMLEle *root,
+
+ if (pg->dp->crackLightState (pcdataXMLEle(lep), &lp->state) < 0)
+ {
+- sprintf (errmsg, "INDI: <%s> unknown state %s for %s %s %s",
++ snprintf (errmsg, ERRMSG_SIZE, "INDI: <%.64s> unknown state %.64s for %.64s %.64s %.64s",
+ tagXMLEle(root), valuXMLAtt(ap), pg->dp->name.ascii(), name.ascii(), sname.ascii());
+ return (-1);
+ }
diff --git a/misc/kdeedu3/patches/patch-ah b/misc/kdeedu3/patches/patch-ah
new file mode 100644
index 00000000000..5a464d571ae
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ah
@@ -0,0 +1,12 @@
+$NetBSD: patch-ah,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indi/Makefile.am.orig 2004-07-18 05:52:58.000000000 +1200
++++ kstars/kstars/indi/Makefile.am
+@@ -40,7 +40,6 @@ install-exec-hook:
+ $(LN_S) lx200generic $(DESTDIR)$(bindir)/lx200_16
+ rm -f $(DESTDIR)$(bindir)/lx200gps
+ $(LN_S) lx200generic $(DESTDIR)$(bindir)/lx200gps
+- chmod +s $(DESTDIR)$(bindir)/fliccd
+
+ uninstall-local:
+ rm $(DESTDIR)$(bindir)/lx200autostar $(DESTDIR)$(bindir)/lx200_16 $(DESTDIR)$(bindir)/lx200gps
diff --git a/misc/kdeedu3/patches/patch-ai b/misc/kdeedu3/patches/patch-ai
new file mode 100644
index 00000000000..1182071a04b
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ai
@@ -0,0 +1,119 @@
+$NetBSD: patch-ai,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indi/fitsrw.c.orig 2004-06-25 21:10:04.000000000 +1200
++++ kstars/kstars/indi/fitsrw.c
+@@ -155,31 +155,31 @@ int fits_ieee64_motorola = 0;
+
+ #define FITS_WRITE_BOOLCARD(fp,key,value) \
+ {char card[81]; \
+- sprintf (card, "%-8.8s= %20s%50s", key, value ? "T" : "F", " "); \
++ snprintf (card, sizeof( card ), "%-8.8s= %20s%50s", key, value ? "T" : "F", " "); \
+ fwrite (card, 1, 80, fp); }
+
+ #define FITS_WRITE_LONGCARD(fp,key,value) \
+ {char card[81]; \
+- sprintf (card, "%-8.8s= %20ld%50s", key, (long)value, " "); \
++ snprintf (card, sizeof( card ), "%-8.8s= %20ld%50s", key, (long)value, " "); \
+ fwrite (card, 1, 80, fp); }
+
+ #define FITS_WRITE_DOUBLECARD(fp,key,value) \
+ {char card[81], dbl[21], *istr; \
+- sprintf (dbl, "%20f", (double)value); istr = strstr (dbl, "e"); \
++ snprintf (dbl, sizeof( dbl ), "%20f", (double)value); istr = strstr (dbl, "e"); \
+ if (istr) *istr = 'E'; \
+- sprintf (card, "%-8.8s= %20.20s%50s", key, dbl, " "); \
++ snprintf (card, sizeof( card ), "%-8.8s= %20.20s%50s", key, dbl, " "); \
+ fwrite (card, 1, 80, fp); }
+
+ #define FITS_WRITE_STRINGCARD(fp,key,value) \
+ {char card[81]; int k;\
+- sprintf (card, "%-8.8s= \'%s", key, value); \
++ snprintf (card, sizeof( card ), "%-8.8s= \'%s", key, value); \
+ for (k = strlen (card); k < 81; k++) card[k] = ' '; \
+ k = strlen (key); if (k < 8) card[19] = '\''; else card[11+k] = '\''; \
+ fwrite (card, 1, 80, fp); }
+
+ #define FITS_WRITE_CARD(fp,value) \
+ {char card[81]; \
+- sprintf (card, "%-80.80s", value); \
++ snprintf (card, sizeof( card ), "%-80.80s", value); \
+ fwrite (card, 1, 80, fp); }
+
+
+@@ -474,7 +474,8 @@ static void fits_drop_error (void)
+ /* #END-PAR */
+ /*****************************************************************************/
+
+-FITS_FILE *fits_open (const char *filename, const char *openmode)
++
++FITS_FILE *fits_open (const char* filename, const char *openmode)
+
+ {int reading, writing, n_rec, n_hdr;
+ long fpos_header, fpos_data;
+@@ -483,8 +484,10 @@ FITS_FILE *fits_open (const char *filena
+ FITS_RECORD_LIST *hdrlist;
+ FITS_HDU_LIST *hdulist, *last_hdulist;
+
+- /* initialize */
++ if ((filename == NULL) || (*filename == '\0') || (openmode == NULL))
++ FITS_RETURN ("fits_open: Invalid parameters", NULL);
+
++ /* initialize */
+ hdulist = NULL;
+ last_hdulist = NULL;
+
+@@ -506,9 +509,6 @@ FITS_FILE *fits_open (const char *filena
+ }
+ }
+
+- if ((filename == NULL) || (*filename == '\0') || (openmode == NULL))
+- FITS_RETURN ("fits_open: Invalid parameters", NULL);
+-
+ reading = (strcmp (openmode, "r") == 0);
+ writing = (strcmp (openmode, "w") == 0);
+ if ((!reading) && (!writing))
+@@ -858,7 +858,7 @@ int fits_write_header (FITS_FILE *ff, FI
+
+ for (r = 0; r < hdulist->naxis; r++)
+ {char naxisn[10];
+- sprintf (naxisn, "NAXIS%d", r+1);
++ snprintf (naxisn, sizeof( naxisn ), "NAXIS%d", r+1);
+ FITS_WRITE_LONGCARD (ff->fp, naxisn, hdulist->naxisn[r]);
+ numcards++;
+ }
+@@ -1025,7 +1025,7 @@ static FITS_HDU_LIST *fits_decode_header
+ for (k = 1; k <= FITS_MAX_AXIS; k++)
+ {char naxisn[9];
+
+- sprintf (naxisn, "NAXIS%-3d", k);
++ snprintf (naxisn, sizeof( naxisn ), "NAXIS%-3d", k);
+ fdat = fits_decode_card (fits_search_card (hdr, naxisn), typ_flong);
+ if (fdat == NULL)
+ {
+@@ -1121,7 +1121,7 @@ static FITS_HDU_LIST *fits_decode_header
+ }
+ else
+ {char msg[160];
+- sprintf (msg, "fits_decode_header: IEEE floating point format required for\
++ snprintf (msg, sizeof( msg ), "fits_decode_header: IEEE floating point format required for\
+ BITPIX=%d\nis not supported on this machine", hdulist->bitpix);
+ fits_set_error (msg);
+ }
+@@ -1130,7 +1130,7 @@ static FITS_HDU_LIST *fits_decode_header
+ return (hdulist);
+
+ err_missing:
+- sprintf (errmsg, "fits_decode_header: missing/invalid %s card", key);
++ snprintf (errmsg, sizeof(errmsg), "fits_decode_header: missing/invalid %.50s card", key);
+
+ err_return:
+ fits_delete_hdulist (hdulist);
+@@ -1429,7 +1429,7 @@ FITS_DATA *fits_decode_card (const char
+
+ if (strncmp (card+8, "= ", 2) != 0)
+ {
+- sprintf (msg, "fits_decode_card (warning): Missing value indicator\
++ snprintf (msg, sizeof( msg ), "fits_decode_card (warning): Missing value indicator\
+ '= ' for %8.8s", l_card);
+ fits_set_error (msg);
+ }
diff --git a/misc/kdeedu3/patches/patch-aj b/misc/kdeedu3/patches/patch-aj
new file mode 100644
index 00000000000..bcb78e2f557
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-aj
@@ -0,0 +1,254 @@
+$NetBSD: patch-aj,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indi/fli_ccd.c.orig 2004-10-03 20:13:39.000000000 +1300
++++ kstars/kstars/indi/fli_ccd.c
+@@ -51,9 +51,9 @@ void getBasicData(void);
+ void initDataChannel(void);
+ void waitForData(int rp, int wp);
+ void updateDataChannel(void *p);
+-void uploadFile(char * filename);
++void uploadFile(const char* filename);
+ int findPort(void);
+-int writeFITS(char *filename, char errmsg[]);
++int writeFITS(const char* filename, char errmsg[]);
+ int findcam(flidomain_t domain);
+ int setImageArea(char errmsg[]);
+ int manageDefaults(char errmsg[]);
+@@ -419,7 +419,7 @@ void ISNewNumber (const char *dev, const
+ long err;
+ int i;
+ INumber *np;
+- char errmsg[1024];
++ char errmsg[ERRMSG_SIZE];
+
+ /* ignore if not ours */
+ if (dev && strcmp (dev, mydev))
+@@ -556,14 +556,14 @@ void ISNewNumber (const char *dev, const
+
+ if (nset < 4)
+ {
+- IDSetNumber(&FrameNP, "Invalid range. Valid range is (0,0) - (%0.f,%0.f)", FLICam->width, FLICam->height);
+- IDLog("Invalid range. Valid range is (0,0) - (%0.f,%0.f)", FLICam->width, FLICam->height);
++ IDSetNumber(&FrameNP, "Invalid range. Valid range is (0,0) - (%0d,%0d)", FLICam->width, FLICam->height);
++ IDLog("Invalid range. Valid range is (0,0) - (%0d,%0d)", FLICam->width, FLICam->height);
+ return;
+ }
+
+ if (setImageArea(errmsg))
+ {
+- IDSetNumber(&FrameNP, errmsg);
++ IDSetNumber(&FrameNP, "%s", errmsg);
+ return;
+ }
+
+@@ -600,8 +600,8 @@ void ISNewNumber (const char *dev, const
+ {
+ if (values[i] < 1 || values[i] > MAX_X_BIN)
+ {
+- IDSetNumber(&BinningNP, "Error: Valid X bin values are from 1 to %d", MAX_X_BIN);
+- IDLog("Error: Valid X bin values are from 1 to %d", MAX_X_BIN);
++ IDSetNumber(&BinningNP, "Error: Valid X bin values are from 1 to %g", MAX_X_BIN);
++ IDLog("Error: Valid X bin values are from 1 to %g", MAX_X_BIN);
+ return;
+ }
+
+@@ -618,8 +618,8 @@ void ISNewNumber (const char *dev, const
+ {
+ if (values[i] < 1 || values[i] > MAX_Y_BIN)
+ {
+- IDSetNumber(&BinningNP, "Error: Valid Y bin values are from 1 to %d", MAX_Y_BIN);
+- IDLog("Error: Valid X bin values are from 1 to %d", MAX_Y_BIN);
++ IDSetNumber(&BinningNP, "Error: Valid Y bin values are from 1 to %g", MAX_Y_BIN);
++ IDLog("Error: Valid X bin values are from 1 to %g", MAX_Y_BIN);
+ return;
+ }
+
+@@ -637,7 +637,7 @@ void ISNewNumber (const char *dev, const
+ if (setImageArea(errmsg))
+ {
+ IDSetNumber(&BinningNP, errmsg, NULL);
+- IDLog(errmsg);
++ IDLog("%s", errmsg);
+ return;
+ }
+
+@@ -817,8 +817,8 @@ int setImageArea(char errmsg[])
+
+ if ( (err = FLISetImageArea(fli_dev, x_1, y_1, x_2, y_2) ))
+ {
+- sprintf(errmsg, "FLISetImageArea() failed. %s.\n", strerror((int)-err));
+- IDLog(errmsg, NULL);
++ snprintf(errmsg, ERRMSG_SIZE, "FLISetImageArea() failed. %s.\n", strerror((int)-err));
++ IDLog("%s", errmsg);
+ return -1;
+ }
+
+@@ -832,13 +832,13 @@ int grabImage()
+ {
+ long err;
+ int img_size,i, fd;
+- char errmsg[1024];
++ char errmsg[ERRMSG_SIZE];
+ char filename[] = "/tmp/fitsXXXXXX";
+
+ if ((fd = mkstemp(filename)) < 0)
+ {
+- IDMessage(mydev, "Error making temporary filename.", NULL);
+- IDLog("Error making temporary filename.\n", NULL);
++ IDMessage(mydev, "Error making temporary filename.");
++ IDLog("Error making temporary filename.\n");
+ return -1;
+ }
+ close(fd);
+@@ -849,8 +849,8 @@ int grabImage()
+
+ if (FLIImg->img == NULL)
+ {
+- IDMessage(mydev, "Not enough memory to store image.", NULL);
+- IDLog("Not enough memory to store image.\n", NULL);
++ IDMessage(mydev, "Not enough memory to store image.");
++ IDLog("Not enough memory to store image.\n");
+ return -1;
+ }
+
+@@ -880,7 +880,7 @@ int grabImage()
+
+ }
+
+-int writeFITS(char *filename, char errmsg[])
++int writeFITS(const char* filename, char errmsg[])
+ {
+ FITS_FILE* ofp;
+ int i, j, bpp, bpsl, width, height;
+@@ -890,7 +890,7 @@ int writeFITS(char *filename, char errms
+ ofp = fits_open (filename, "w");
+ if (!ofp)
+ {
+- sprintf(errmsg, "Error: cannot open file for writing.");
++ snprintf(errmsg, ERRMSG_SIZE, "Error: cannot open file for writing.");
+ return (-1);
+ }
+
+@@ -903,12 +903,12 @@ int writeFITS(char *filename, char errms
+ hdu = create_fits_header (ofp, width, height, bpp);
+ if (hdu == NULL)
+ {
+- sprintf(errmsg, "Error: creating FITS header failed.");
++ snprintf(errmsg, ERRMSG_SIZE, "Error: creating FITS header failed.");
+ return (-1);
+ }
+ if (fits_write_header (ofp, hdu) < 0)
+ {
+- sprintf(errmsg, "Error: writing to FITS header failed.");
++ snprintf(errmsg, ERRMSG_SIZE, "Error: writing to FITS header failed.");
+ return (-1);
+ }
+
+@@ -932,7 +932,7 @@ int writeFITS(char *filename, char errms
+
+ if (ferror (ofp->fp))
+ {
+- sprintf(errmsg, "Error: write error occured");
++ snprintf(errmsg, ERRMSG_SIZE, "Error: write error occured");
+ return (-1);
+ }
+
+@@ -951,7 +951,7 @@ int writeFITS(char *filename, char errms
+
+ }
+
+-void uploadFile(char * filename)
++void uploadFile(const char* filename)
+ {
+ FILE * fitsFile;
+ char frameSize[FRAME_ILEN];
+@@ -962,7 +962,7 @@ void uploadFile(char * filename)
+
+ if ( -1 == stat (filename, &stat_p))
+ {
+- IDLog(" Error occoured attempting to stat %s\n", filename);
++ IDLog(" Error occoured attempting to stat file.\n");
+ return;
+ }
+
+@@ -1185,7 +1185,7 @@ int manageDefaults(char errmsg[])
+ IDLog("Setting default exposure time of %d ms.\n", exposeTimeMS);
+ if ( (err = FLISetExposureTime(fli_dev, exposeTimeMS) ))
+ {
+- sprintf(errmsg, "FLISetExposureTime() failed. %s.\n", strerror((int)-err));
++ snprintf(errmsg, ERRMSG_SIZE, "FLISetExposureTime() failed. %s.\n", strerror((int)-err));
+ IDLog(errmsg, NULL);
+ return -1;
+ }
+@@ -1193,7 +1193,7 @@ int manageDefaults(char errmsg[])
+ /* Default frame type is NORMAL */
+ if ( (err = FLISetFrameType(fli_dev, FLI_FRAME_TYPE_NORMAL) ))
+ {
+- sprintf(errmsg, "FLISetFrameType() failed. %s.\n", strerror((int)-err));
++ snprintf(errmsg, ERRMSG_SIZE, "FLISetFrameType() failed. %s.\n", strerror((int)-err));
+ IDLog(errmsg, NULL);
+ return -1;
+ }
+@@ -1201,7 +1201,7 @@ int manageDefaults(char errmsg[])
+ /* X horizontal binning */
+ if ( (err = FLISetHBin(fli_dev, BinningN[0].value) ))
+ {
+- sprintf(errmsg, "FLISetBin() failed. %s.\n", strerror((int)-err));
++ snprintf(errmsg, ERRMSG_SIZE, "FLISetBin() failed. %s.\n", strerror((int)-err));
+ IDLog(errmsg, NULL);
+ return -1;
+ }
+@@ -1209,7 +1209,7 @@ int manageDefaults(char errmsg[])
+ /* Y vertical binning */
+ if ( (err = FLISetVBin(fli_dev, BinningN[1].value) ))
+ {
+- sprintf(errmsg, "FLISetVBin() failed. %s.\n", strerror((int)-err));
++ snprintf(errmsg, ERRMSG_SIZE, "FLISetVBin() failed. %s.\n", strerror((int)-err));
+ IDLog(errmsg, NULL);
+ return -1;
+ }
+@@ -1293,7 +1293,7 @@ int checkPowerT(ITextVectorProperty *tp)
+ void connectCCD()
+ {
+ long err;
+- char errmsg[1024];
++ char errmsg[ERRMSG_SIZE];
+
+ IDLog ("In ConnectCCD\n");
+
+@@ -1332,7 +1332,7 @@ void connectCCD()
+ if (manageDefaults(errmsg))
+ {
+ IDMessage(mydev, errmsg, NULL);
+- IDLog(errmsg);
++ IDLog("%s", errmsg);
+ return;
+ }
+
+@@ -1495,7 +1495,7 @@ FITS_HDU_LIST * create_fits_header (FITS
+ fits_add_card (hdulist, temp_s);
+ fits_add_card (hdulist, expose_s);
+ fits_add_card (hdulist, pixel_s);
+- fits_add_card (hdulist, "INSTRUME= 'Finger Lakes Instruments'");
++ fits_add_card (hdulist, ( char* ) "INSTRUME= 'Finger Lakes Instruments'");
+ fits_add_card (hdulist, obsDate);
+
+ return (hdulist);
+@@ -1632,7 +1632,7 @@ int findPort()
+ /* bind to given port for any IP address */
+ memset (&serv_socket, 0, sizeof(serv_socket));
+ serv_socket.sin_family = AF_INET;
+- serv_socket.sin_addr.s_addr = htonl (INADDR_ANY);
++ serv_socket.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+
+ for (i=0; i < 100; i++)
+ {
+@@ -1675,7 +1675,7 @@ void waitForData(int rp, int wp)
+ /* bind to given port for any IP address */
+ memset (&serv_socket, 0, sizeof(serv_socket));
+ serv_socket.sin_family = AF_INET;
+- serv_socket.sin_addr.s_addr = htonl (INADDR_ANY);
++ serv_socket.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+
+ serv_socket.sin_port = htons ((unsigned short)DataPort);
+ if (setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) < 0){
diff --git a/misc/kdeedu3/patches/patch-ak b/misc/kdeedu3/patches/patch-ak
new file mode 100644
index 00000000000..dc2ecc119d9
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ak
@@ -0,0 +1,12 @@
+$NetBSD: patch-ak,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indi/indicom.h.orig 2004-06-25 21:10:04.000000000 +1200
++++ kstars/kstars/indi/indicom.h
+@@ -38,6 +38,7 @@
+
+ #define J2000 2451545.0
+ #define TRACKING_THRESHOLD 0.05 /* 3' for tracking */
++#define ERRMSG_SIZE 1024
+
+ extern const char * Direction[];
+ extern const char * SolarSystem[];
diff --git a/misc/kdeedu3/patches/patch-al b/misc/kdeedu3/patches/patch-al
new file mode 100644
index 00000000000..25dcad60c17
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-al
@@ -0,0 +1,135 @@
+$NetBSD: patch-al,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indi/indidevapi.h.orig 2004-06-25 21:10:04.000000000 +1200
++++ kstars/kstars/indi/indidevapi.h 2005-02-19 15:01:32.000000000 +1300
+@@ -66,25 +66,41 @@
+ \param t pointer to the vector text property to be defined.
+ \param msg message in printf style to send to the client. May be NULL.
+ */
+-extern void IDDefText (const ITextVectorProperty *t, const char *msg, ...);
++extern void IDDefText (const ITextVectorProperty *t, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 2, 3 ) ) )
++#endif
++;
+
+ /** \brief Tell client to create a number number property.
+ \param n pointer to the vector number property to be defined.
+ \param msg message in printf style to send to the client. May be NULL.
+ */
+-extern void IDDefNumber (const INumberVectorProperty *n, const char *msg, ...);
++extern void IDDefNumber (const INumberVectorProperty *n, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 2, 3 ) ) )
++#endif
++;
+
+ /** \brief Tell client to create a switch vector property.
+ \param s pointer to the vector switch property to be defined.
+ \param msg message in printf style to send to the client. May be NULL.
+ */
+-extern void IDDefSwitch (const ISwitchVectorProperty *s, const char *msg, ...);
++extern void IDDefSwitch (const ISwitchVectorProperty *s, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 2, 3 ) ) )
++#endif
++;
+
+ /** \brief Tell client to create a light vector property.
+ \param l pointer to the vector light property to be defined.
+ \param msg message in printf style to send to the client. May be NULL.
+ */
+-extern void IDDefLight (const ILightVectorProperty *l, const char *msg, ...);
++extern void IDDefLight (const ILightVectorProperty *l, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 2, 3 ) ) )
++#endif
++;
+
+ /*@}*/
+
+@@ -97,25 +113,41 @@
+ \param t pointer to the vector text property.
+ \param msg message in printf style to send to the client. May be NULL.
+ */
+-extern void IDSetText (const ITextVectorProperty *t, const char *msg, ...);
++extern void IDSetText (const ITextVectorProperty *t, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 2, 3 ) ) )
++#endif
++;
+
+ /** \brief Tell client to update an existing number vector property.
+ \param n pointer to the vector number property.
+ \param msg message in printf style to send to the client. May be NULL.
+ */
+-extern void IDSetNumber (const INumberVectorProperty *n, const char *msg, ...);
++extern void IDSetNumber (const INumberVectorProperty *n, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 2, 3 ) ) )
++#endif
++;
+
+ /** \brief Tell client to update an existing switch vector property.
+ \param s pointer to the vector switch property.
+ \param msg message in printf style to send to the client. May be NULL.
+ */
+-extern void IDSetSwitch (const ISwitchVectorProperty *s, const char *msg, ...);
++extern void IDSetSwitch (const ISwitchVectorProperty *s, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 2, 3 ) ) )
++#endif
++;
+
+ /** \brief Tell client to update an existing light vector property.
+ \param l pointer to the vector light property.
+ \param msg message in printf style to send to the client. May be NULL.
+ */
+-extern void IDSetLight (const ILightVectorProperty *l, const char *msg, ...);
++extern void IDSetLight (const ILightVectorProperty *l, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 2, 3 ) ) )
++#endif
++;
+
+ /*@}*/
+
+@@ -127,7 +159,11 @@
+ \param dev device name
+ \param msg message in printf style to send to the client.
+ */
+-extern void IDMessage (const char *dev, const char *msg, ...);
++extern void IDMessage (const char *dev, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 2, 3 ) ) )
++#endif
++;
+
+ /** \brief Function Drivers call to inform Clients a Property is no longer available, or the entire device is gone if name is NULL.
+
+@@ -135,7 +171,11 @@
+ \param name property name to be deleted.
+ \param msg message in printf style to send to the client.
+ */
+-extern void IDDelete (const char *dev, const char *name, const char *msg, ...);
++extern void IDDelete (const char *dev, const char *name, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 3, 4 ) ) )
++#endif
++;
+
+ /** \brief Function Drivers call to log a message locally.
+
+@@ -143,7 +183,11 @@
+
+ \param msg message in printf style to send to the client.
+ */
+-extern void IDLog (const char *msg, ...);
++extern void IDLog (const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ( ( format( printf, 1, 2 ) ) )
++#endif
++;
+
+ /**
+ * \defgroup deventFunctions Functions Drivers call to register with the INDI event utilities.
diff --git a/misc/kdeedu3/patches/patch-am b/misc/kdeedu3/patches/patch-am
new file mode 100644
index 00000000000..5232c71aabe
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-am
@@ -0,0 +1,144 @@
+$NetBSD: patch-am,v 1.1.2.2 2005/02/20 18:45:05 snj Exp $
+
+--- kstars/kstars/indi/indidrivermain.c.orig 2004-06-25 21:10:04.000000000 +1200
++++ kstars/kstars/indi/indidrivermain.c
+@@ -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);
diff --git a/misc/kdeedu3/patches/patch-an b/misc/kdeedu3/patches/patch-an
new file mode 100644
index 00000000000..bca0be28761
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-an
@@ -0,0 +1,51 @@
+$NetBSD: patch-an,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/indiserver.c.orig 2004-06-25 21:10:04.000000000 +1200
++++ kstars/kstars/indi/indiserver.c 2005-02-19 15:01:32.000000000 +1300
+@@ -288,10 +288,10 @@
+ exit(1);
+ }
+
+- /* bind to given port for any IP address */
++ /* bind to given port for local IP address */
+ memset (&serv_socket, 0, sizeof(serv_socket));
+ serv_socket.sin_family = AF_INET;
+- serv_socket.sin_addr.s_addr = htonl (INADDR_ANY);
++ serv_socket.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+ serv_socket.sin_port = htons ((unsigned short)port);
+ if (setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) < 0){
+ fprintf (stderr, "%s: setsockopt: %s", me, strerror(errno));
+@@ -423,7 +423,7 @@
+ int i, nr;
+
+ /* read client */
+- nr = read (cp->s, buf, sizeof(buf));
++ nr = read (cp->s, buf, sizeof(buf)-1);
+ if (nr < 0) {
+ fprintf (stderr, "Client %d: %s\n", cp->s, strerror(errno));
+ closeClient (cli);
+@@ -435,6 +435,7 @@
+ closeClient (cli);
+ return;
+ }
++ buf[ sizeof( buf )-1 ] = '\0';
+ if (verbose > 1)
+ fprintf (stderr, "Client %d: rcv from:\n%.*s", cp->s, nr, buf);
+
+@@ -464,7 +465,7 @@
+ int nr;
+
+ /* read driver */
+- nr = read (dp->rfd, buf, sizeof(buf));
++ nr = read (dp->rfd, buf, sizeof(buf)-1);
+ if (nr < 0) {
+ fprintf (stderr, "Driver %s: %s\n", dp->name, strerror(errno));
+ restartDvr (i);
+@@ -475,6 +476,7 @@
+ restartDvr (i);
+ return;
+ }
++ buf[ sizeof( buf )-1 ]='\0';
+ if (verbose > 1)
+ fprintf (stderr, "Driver %s: rcv from:\n%.*s", dp->name, nr, buf);
+
diff --git a/misc/kdeedu3/patches/patch-ao b/misc/kdeedu3/patches/patch-ao
new file mode 100644
index 00000000000..dd1cbd9ef33
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ao
@@ -0,0 +1,111 @@
+$NetBSD: patch-ao,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/lilxml.c.orig 2004-06-25 21:10:04.000000000 +1200
++++ kstars/kstars/indi/lilxml.c 2005-02-19 15:01:32.000000000 +1300
+@@ -32,6 +32,7 @@
+ #include <ctype.h>
+
+ #include "lilxml.h"
++#include "indicom.h"
+
+ static int oneXMLchar (LilXML *lp, int c, char errmsg[]);
+ static void initParser(LilXML *lp);
+@@ -156,7 +157,7 @@
+
+ /* EOF? */
+ if (newc == 0) {
+- sprintf (errmsg, "Line %d: XML EOF", lp->ln);
++ snprintf (errmsg, ERRMSG_SIZE, "Line %d: XML EOF", lp->ln);
+ initParser(lp);
+ return (NULL);
+ }
+@@ -344,7 +345,7 @@
+ /* search ep for an attribute with the given name and return its value.
+ * return "" if not found.
+ */
+-char *
++const char *
+ findXMLAttValu (XMLEle *ep, char *name)
+ {
+ XMLAtt *a = findXMLAtt (ep, name);
+@@ -428,7 +429,7 @@
+ growString (&lp->ce->tag, c);
+ lp->cs = INTAG;
+ } else if (!isspace(c)) {
+- sprintf (errmsg, "Line %d: Bogus tag char %c", lp->ln, c);
++ snprintf (errmsg, ERRMSG_SIZE, "Line %d: Bogus tag char %c", lp->ln, c);
+ return (-1);
+ }
+ break;
+@@ -454,7 +455,7 @@
+ growString (&lp->ce->at[lp->ce->nat-1]->name, c);
+ lp->cs = INATTRN;
+ } else if (!isspace(c)) {
+- sprintf (errmsg, "Line %d: Bogus leading attr name char: %c",
++ snprintf (errmsg, ERRMSG_SIZE, "Line %d: Bogus leading attr name char: %c",
+ lp->ln, c);
+ return (-1);
+ }
+@@ -467,7 +468,7 @@
+ popXMLEle(lp);
+ lp->cs = LOOK4CON;
+ } else {
+- sprintf (errmsg, "Line %d: Bogus char %c before >", lp->ln, c);
++ snprintf (errmsg, ERRMSG_SIZE, "Line %d: Bogus char %c before >", lp->ln, c);
+ return (-1);
+ }
+ break;
+@@ -478,7 +479,7 @@
+ else if (isspace(c) || c == '=')
+ lp->cs = LOOK4ATTRV;
+ else {
+- sprintf (errmsg, "Line %d: Bogus attr name char: %c", lp->ln,c);
++ snprintf (errmsg, ERRMSG_SIZE, "Line %d: Bogus attr name char: %c", lp->ln,c);
+ return (-1);
+ }
+ break;
+@@ -489,7 +490,7 @@
+ growString (&lp->ce->at[lp->ce->nat-1]->valu, '\0');
+ lp->cs = INATTRV;
+ } else if (!(isspace(c) || c == '=')) {
+- sprintf (errmsg, "Line %d: No value for attribute %s", lp->ln,
++ snprintf (errmsg, ERRMSG_SIZE, "Line %d: No value for attribute %.100s", lp->ln,
+ lp->ce->at[lp->ce->nat-1]->name);
+ return (-1);
+ }
+@@ -547,7 +548,7 @@
+ growString (&lp->endtag, c);
+ lp->cs = INCLOSETAG;
+ } else if (!isspace(c)) {
+- sprintf (errmsg, "Line %d: Bogus preend tag char %c", lp->ln,c);
++ snprintf (errmsg, ERRMSG_SIZE, "Line %d: Bogus preend tag char %c", lp->ln,c);
+ return (-1);
+ }
+ break;
+@@ -557,7 +558,7 @@
+ growString (&lp->endtag, c);
+ else if (c == '>') {
+ if (strcmp (lp->ce->tag, lp->endtag)) {
+- sprintf (errmsg,"Line %d: closing tag %s does not match %s",
++ snprintf (errmsg, ERRMSG_SIZE, "Line %d: closing tag %.64s does not match %.64s",
+ lp->ln, lp->endtag, lp->ce->tag);
+ return (-1);
+ } else if (lp->ce->pe) {
+@@ -566,7 +567,7 @@
+ } else
+ return (1); /* yes! */
+ } else if (!isspace(c)) {
+- sprintf (errmsg, "Line %d: Bogus end tag char %c", lp->ln, c);
++ snprintf (errmsg, ERRMSG_SIZE, "Line %d: Bogus end tag char %c", lp->ln, c);
+ return (-1);
+ }
+ break;
+@@ -723,7 +724,7 @@
+ main (int ac, char *av[])
+ {
+ LilXML *lp = newLilXML();
+- char errmsg[1024];
++ char errmsg[ERRMSG_SIZE];
+ XMLEle *root;
+
+ root = readXMLFile (stdin, lp, errmsg);
diff --git a/misc/kdeedu3/patches/patch-ap b/misc/kdeedu3/patches/patch-ap
new file mode 100644
index 00000000000..379d5d862be
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ap
@@ -0,0 +1,13 @@
+$NetBSD: patch-ap,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/lilxml.h.orig 2004-06-25 21:10:04.000000000 +1200
++++ kstars/kstars/indi/lilxml.h 2005-02-19 15:01:32.000000000 +1300
+@@ -189,7 +189,7 @@
+ \param name the name of the XML attribute to retrieve its value.
+ \return the value string of an XML element on success. NULL on failure.
+ */
+-extern char *findXMLAttValu (XMLEle *ep, char *name);
++extern const char *findXMLAttValu (XMLEle *ep, char *name);
+
+ /** \brief Handy wrapper to read one xml file.
+ \param fp pointer to FILE to read.
diff --git a/misc/kdeedu3/patches/patch-aq b/misc/kdeedu3/patches/patch-aq
new file mode 100644
index 00000000000..f8a802de2a6
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-aq
@@ -0,0 +1,33 @@
+$NetBSD: patch-aq,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/lx200_16.cpp.orig 2004-06-25 21:10:04.000000000 +1200
++++ kstars/kstars/indi/lx200_16.cpp
+@@ -224,8 +224,7 @@ void LX200_16::ISNewSwitch (const char *
+ }
+
+ FanStatusSw.s = IPS_OK;
+- strcpy(msg, index == 0 ? "Fan is ON" : "Fan is OFF");
+- IDSetSwitch (&FanStatusSw, msg);
++ IDSetSwitch (&FanStatusSw, index == 0 ? "Fan is ON" : "Fan is OFF");
+ return;
+ }
+
+@@ -240,7 +239,7 @@ void LX200_16::ISNewSwitch (const char *
+
+ index == 0 ? seekHomeAndSave() : seekHomeAndSet();
+ HomeSearchSw.s = IPS_BUSY;
+- IDSetSwitch (&HomeSearchSw, msg);
++ IDSetSwitch (&HomeSearchSw, index == 0 ? "Seek Home and Save" : "Seek Home and Set");
+ return;
+ }
+
+@@ -255,8 +254,7 @@ void LX200_16::ISNewSwitch (const char *
+
+ index == 0 ? seekHomeAndSave() : seekHomeAndSet();
+ FieldDeRotatorSw.s = IPS_OK;
+- strcpy(msg, index == 0 ? "Field deRotator is ON" : "Field deRotator is OFF");
+- IDSetSwitch (&FieldDeRotatorSw, msg);
++ IDSetSwitch (&FieldDeRotatorSw, index == 0 ? "Field deRotator is ON" : "Field deRotator is OFF");
+ return;
+ }
+
diff --git a/misc/kdeedu3/patches/patch-ar b/misc/kdeedu3/patches/patch-ar
new file mode 100644
index 00000000000..180535d2168
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ar
@@ -0,0 +1,184 @@
+$NetBSD: patch-ar,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/lx200driver.c.orig 2004-06-25 21:10:04.000000000 +1200
++++ kstars/kstars/indi/lx200driver.c
+@@ -584,7 +584,7 @@ int setCommandInt(int data, const char *
+
+ char tempString[16];
+
+- sprintf(tempString, "%s%d#", cmd, data);
++ snprintf(tempString, sizeof( tempString ), "%s%d#", cmd, data);
+
+ if (portWrite(tempString) < 0)
+ return -1;
+@@ -596,7 +596,7 @@ int setMinElevationLimit(int min)
+ {
+ char tempString[16];
+
+- sprintf(tempString, "#:Sh%02d#", min);
++ snprintf(tempString, sizeof( tempString ), "#:Sh%02d#", min);
+
+ return (setStandardProcedure(tempString));
+ }
+@@ -605,7 +605,7 @@ int setMaxElevationLimit(int max)
+ {
+ char tempString[16];
+
+- sprintf(tempString, "#:So%02d*#", max);
++ snprintf(tempString, sizeof( tempString ), "#:So%02d*#", max);
+
+ return (setStandardProcedure(tempString));
+
+@@ -619,7 +619,7 @@ int setMaxSlewRate(int slewRate)
+ if (slewRate < 2 || slewRate > 8)
+ return -1;
+
+- sprintf(tempString, "#:Sw%d#", slewRate);
++ snprintf(tempString, sizeof( tempString ), "#:Sw%d#", slewRate);
+
+ return (setStandardProcedure(tempString));
+
+@@ -634,7 +634,7 @@ int setObjectRA(double ra)
+
+ getSexComponents(ra, &h, &m, &s);
+
+- sprintf(tempString, "#:Sr %02d:%02d:%02d#", h, m, s);
++ snprintf(tempString, sizeof( tempString ), "#:Sr %02d:%02d:%02d#", h, m, s);
+ IDLog("Set Object RA String %s\n", tempString);
+ return (setStandardProcedure(tempString));
+ }
+@@ -649,9 +649,9 @@ int setObjectDEC(double dec)
+
+ /* case with negative zero */
+ if (!d && dec < 0)
+- sprintf(tempString, "#:Sd -%02d:%02d:%02d#", d, m, s);
++ snprintf(tempString, sizeof( tempString ), "#:Sd -%02d:%02d:%02d#", d, m, s);
+ else
+- sprintf(tempString, "#:Sd %+03d:%02d:%02d#", d, m, s);
++ snprintf(tempString, sizeof( tempString ), "#:Sd %+03d:%02d:%02d#", d, m, s);
+
+ IDLog("Set Object DEC String %s\n", tempString);
+
+@@ -663,7 +663,7 @@ int setCommandXYZ(int x, int y, int z, c
+ {
+ char tempString[16];
+
+- sprintf(tempString, "%s %02d:%02d:%02d#", cmd, x, y, z);
++ snprintf(tempString, sizeof( tempString ), "%s %02d:%02d:%02d#", cmd, x, y, z);
+
+ return (setStandardProcedure(tempString));
+ }
+@@ -698,7 +698,7 @@ int setCalenderDate(int dd, int mm, int
+ char boolRet[2];
+ yy = yy % 100;
+
+- sprintf(tempString, "#:SC %02d/%02d/%02d#", mm, dd, yy);
++ snprintf(tempString, sizeof( tempString ), "#:SC %02d/%02d/%02d#", mm, dd, yy);
+
+ if (portWrite(tempString) < 0)
+ return -1;
+@@ -725,7 +725,7 @@ int setUTCOffset(double hours)
+ char tempString[16];
+
+ /*TODO add fractions*/
+- sprintf(tempString, "#:SG %+03d#", (int) hours);
++ snprintf(tempString, sizeof( tempString ), "#:SG %+03d#", (int) hours);
+
+ fprintf(stderr, "UTC string is %s\n", tempString);
+
+@@ -740,7 +740,7 @@ int setSiteLongitude(double Long)
+
+ getSexComponents(Long, &d, &m, &s);
+
+- sprintf(tempString, "#:Sg%03d:%02d#", d, m);
++ snprintf(tempString, sizeof( tempString ), "#:Sg%03d:%02d#", d, m);
+
+ return (setStandardProcedure(tempString));
+ }
+@@ -752,7 +752,7 @@ int setSiteLatitude(double Lat)
+
+ getSexComponents(Lat, &d, &m, &s);
+
+- sprintf(tempString, "#:St%+03d:%02d:%02d#", d, m, s);
++ snprintf(tempString, sizeof( tempString ), "#:St%+03d:%02d:%02d#", d, m, s);
+
+ return (setStandardProcedure(tempString));
+ }
+@@ -764,7 +764,7 @@ int setObjAz(double az)
+
+ getSexComponents(az, &d, &m, &s);
+
+- sprintf(tempString, "#:Sz%03d:%02d#", d, m);
++ snprintf(tempString, sizeof( tempString ), "#:Sz%03d:%02d#", d, m);
+
+ return (setStandardProcedure(tempString));
+
+@@ -777,7 +777,7 @@ int setObjAlt(double alt)
+
+ getSexComponents(alt, &d, &m, &s);
+
+- sprintf(tempString, "#:Sa%+02d*%02d#", d, m);
++ snprintf(tempString, sizeof( tempString ), "#:Sa%+02d*%02d#", d, m);
+
+ return (setStandardProcedure(tempString));
+ }
+@@ -791,16 +791,16 @@ int setSiteName(char * siteName, int sit
+ switch (siteNum)
+ {
+ case 1:
+- sprintf(tempString, "#:SM %s#", siteName);
++ snprintf(tempString, sizeof( tempString ), "#:SM %s#", siteName);
+ break;
+ case 2:
+- sprintf(tempString, "#:SN %s#", siteName);
++ snprintf(tempString, sizeof( tempString ), "#:SN %s#", siteName);
+ break;
+ case 3:
+- sprintf(tempString, "#:SO %s#", siteName);
++ snprintf(tempString, sizeof( tempString ), "#:SO %s#", siteName);
+ break;
+ case 4:
+- sprintf(tempString, "#:SP %s#", siteName);
++ snprintf(tempString, sizeof( tempString ), "#:SP %s#", siteName);
+ break;
+ default:
+ return -1;
+@@ -883,7 +883,7 @@ int setTrackFreq(double trackF)
+ {
+ char tempString[16];
+
+- sprintf(tempString, "#:ST %04.1f#", trackF);
++ snprintf(tempString, sizeof( tempString ), "#:ST %04.1f#", trackF);
+
+ return (setStandardProcedure(tempString));
+
+@@ -1044,13 +1044,13 @@ int selectCatalogObject(int catalog, int
+ switch (catalog)
+ {
+ case LX200_STAR_C:
+- sprintf(tempString, "#:LS%d#", NNNN);
++ snprintf(tempString, sizeof( tempString ), "#:LS%d#", NNNN);
+ break;
+ case LX200_DEEPSKY_C:
+- sprintf(tempString, "#:LC%d#", NNNN);
++ snprintf(tempString, sizeof( tempString ), "#:LC%d#", NNNN);
+ break;
+ case LX200_MESSIER_C:
+- sprintf(tempString, "#:LM%d#", NNNN);
++ snprintf(tempString, sizeof( tempString ), "#:LM%d#", NNNN);
+ break;
+ default:
+ return -1;
+@@ -1068,10 +1068,10 @@ int selectSubCatalog(int catalog, int su
+ switch (catalog)
+ {
+ case LX200_STAR_C:
+- sprintf(tempString, "#:LsD%d#", subCatalog);
++ snprintf(tempString, sizeof( tempString ), "#:LsD%d#", subCatalog);
+ break;
+ case LX200_DEEPSKY_C:
+- sprintf(tempString, "#:LoD%d#", subCatalog);
++ snprintf(tempString, sizeof( tempString ), "#:LoD%d#", subCatalog);
+ break;
+ case LX200_MESSIER_C:
+ return 1;
diff --git a/misc/kdeedu3/patches/patch-as b/misc/kdeedu3/patches/patch-as
new file mode 100644
index 00000000000..11c02560b31
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-as
@@ -0,0 +1,21 @@
+$NetBSD: patch-as,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/lx200generic.cpp.orig 2004-10-03 20:13:39.000000000 +1300
++++ kstars/kstars/indi/lx200generic.cpp
+@@ -620,13 +620,13 @@ void LX200Generic::ISNewNumber (const ch
+ setSiteLatitude(newLat);
+ geoNum.np[0].value = newLat;
+ geoNum.np[1].value = newLong;
+- sprintf (msg, "Site location updated to Lat %s - Long %s", l, L);
++ snprintf (msg, sizeof(msg), "Site location updated to Lat %.32s - Long %.32s", l, L);
+ } else
+ {
+ geoNum.s = IPS_IDLE;
+- sprintf (msg, "Lat or Long missing or invalid");
++ strcpy(msg, "Lat or Long missing or invalid");
+ }
+- IDSetNumber (&geoNum, msg);
++ IDSetNumber (&geoNum, "%s", msg);
+ return;
+ }
+
diff --git a/misc/kdeedu3/patches/patch-at b/misc/kdeedu3/patches/patch-at
new file mode 100644
index 00000000000..181664f6844
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-at
@@ -0,0 +1,41 @@
+$NetBSD: patch-at,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/lx200gps.cpp.orig 2004-10-03 20:13:39.000000000 +1300
++++ kstars/kstars/indi/lx200gps.cpp
+@@ -133,8 +133,7 @@ void LX200GPS::ISNewNumber (const char *
+ index = getOnSwitch(&GPSPowerSw);
+ index == 0 ? turnGPSOn() : turnGPSOff();
+ GPSPowerSw.s = IPS_OK;
+- strcpy(msg, index == 0 ? "GPS System is ON" : "GPS System is OFF");
+- IDSetSwitch (&GPSPowerSw, msg);
++ IDSetSwitch (&GPSPowerSw, index == 0 ? "GPS System is ON" : "GPS System is OFF" );
+ return;
+ }
+
+@@ -164,7 +163,7 @@ void LX200GPS::ISNewNumber (const char *
+ }
+
+ GPSStatusSw.s = IPS_OK;
+- IDSetSwitch (&GPSStatusSw, msg);
++ IDSetSwitch (&GPSStatusSw, "%s", msg);
+ return;
+
+ }
+@@ -207,7 +206,7 @@ void LX200GPS::ISNewNumber (const char *
+ }
+
+ AltDecPecSw.s = IPS_OK;
+- IDSetSwitch(&AltDecPecSw, msg);
++ IDSetSwitch(&AltDecPecSw, "%s", msg);
+
+ return;
+ }
+@@ -233,7 +232,7 @@ void LX200GPS::ISNewNumber (const char *
+ }
+
+ AzRaPecSw.s = IPS_OK;
+- IDSetSwitch(&AzRaPecSw, msg);
++ IDSetSwitch(&AzRaPecSw, "%s", msg);
+
+ return;
+ }
diff --git a/misc/kdeedu3/patches/patch-au b/misc/kdeedu3/patches/patch-au
new file mode 100644
index 00000000000..f69688bcace
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-au
@@ -0,0 +1,17 @@
+$NetBSD: patch-au,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/mount_simulation.c.orig 2004-05-23 08:28:29.000000000 +1200
++++ kstars/kstars/indi/mount_simulation.c
+@@ -140,10 +140,10 @@ char *names[], int n)
+ targetDEC = newdec;
+ fs_sexa (r, targetRA, 2, 3600);
+ fs_sexa (d, targetDEC, 3, 3600);
+- sprintf (msg, "Moving to RA Dec %s %s", r, d);
++ snprintf (msg, sizeof(msg), "Moving to RA Dec %.32s %.32s", r, d);
+ } else {
+ eqNum.s = IPS_IDLE;
+- sprintf (msg, "RA or Dec absent or bogus");
++ snprintf (msg, sizeof(msg), "RA or Dec absent or bogus");
+ }
+ sendeq (msg);
+ return;
diff --git a/misc/kdeedu3/patches/patch-av b/misc/kdeedu3/patches/patch-av
new file mode 100644
index 00000000000..9fc9cdb3b97
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-av
@@ -0,0 +1,93 @@
+$NetBSD: patch-av,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/v4ldriver.cpp.orig 2004-10-03 20:13:39.000000000 +1300
++++ kstars/kstars/indi/v4ldriver.cpp
+@@ -51,8 +51,8 @@ void waitForData(int rp, int wp);
+ void updateDataChannel(void *p);
+ void updateStream(void * p);
+ void getBasicData(void);
+-void uploadFile(char * filename);
+-int writeFITS(char *filename, char errmsg[]);
++void uploadFile(const char * filename);
++int writeFITS(const char *filename, char errmsg[]);
+ int grabImage(void);
+ int checkPowerN(INumberVectorProperty *np);
+ int checkPowerS(ISwitchVectorProperty *sp);
+@@ -461,14 +461,14 @@ void ISNewNumber (const char *dev, const
+ int grabImage()
+ {
+ int err, fd;
+- char errmsg[1024];
++ char errmsg[ERRMSG_SIZE];
+ char filename[] = "/tmp/fitsXXXXXX";
+
+
+ if ((fd = mkstemp(filename)) < 0)
+ {
+- IDMessage(mydev, "Error making temporary filename.", NULL);
+- IDLog("Error making temporary filename.\n", NULL);
++ IDMessage(mydev, "Error making temporary filename.");
++ IDLog("Error making temporary filename.\n");
+ return -1;
+ }
+ close(fd);
+@@ -483,7 +483,7 @@ int grabImage()
+ return 0;
+ }
+
+-int writeFITS(char * filename, char errmsg[])
++int writeFITS(const char * filename, char errmsg[])
+ {
+ FITS_FILE* ofp;
+ int i, bpp, bpsl, width, height;
+@@ -495,7 +495,7 @@ int writeFITS(char * filename, char errm
+ ofp = fits_open (filename, "w");
+ if (!ofp)
+ {
+- sprintf(errmsg, "Error: cannot open file for writing.");
++ snprintf(errmsg, ERRMSG_SIZE, "Error: cannot open file for writing.");
+ return (-1);
+ }
+
+@@ -508,12 +508,12 @@ int writeFITS(char * filename, char errm
+ hdu = create_fits_header (ofp, width, height, bpp);
+ if (hdu == NULL)
+ {
+- sprintf(errmsg, "Error: creating FITS header failed.");
++ snprintf(errmsg, ERRMSG_SIZE, "Error: creating FITS header failed.");
+ return (-1);
+ }
+ if (fits_write_header (ofp, hdu) < 0)
+ {
+- sprintf(errmsg, "Error: writing to FITS header failed.");
++ snprintf(errmsg, ERRMSG_SIZE, "Error: writing to FITS header failed.");
+ return (-1);
+ }
+
+@@ -532,7 +532,7 @@ int writeFITS(char * filename, char errm
+
+ if (ferror (ofp->fp))
+ {
+- sprintf(errmsg, "Error: write error occured");
++ snprintf(errmsg, ERRMSG_SIZE, "Error: write error occured");
+ return (-1);
+ }
+
+@@ -730,7 +730,7 @@ FITS_HDU_LIST * create_fits_header (FITS
+ hdulist->used.bscale = 1;
+ hdulist->bscale = 1.0;
+
+- sprintf(expose_s, "EXPOSURE= %d / milliseconds", V4LFrame->expose);
++ snprintf(expose_s, sizeof(expose_s), "EXPOSURE= %d / milliseconds", V4LFrame->expose);
+
+ fits_add_card (hdulist, expose_s);
+ fits_add_card (hdulist, instrumentName);
+@@ -813,7 +813,7 @@ void updateStream(void *p)
+
+ }
+
+-void uploadFile(char * filename)
++void uploadFile(const char * filename)
+ {
+ FILE * fitsFile;
+ char frameSize[FRAME_ILEN];
diff --git a/misc/kdeedu3/patches/patch-aw b/misc/kdeedu3/patches/patch-aw
new file mode 100644
index 00000000000..a6e84e68098
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-aw
@@ -0,0 +1,261 @@
+$NetBSD: patch-aw,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/v4lphilips.cpp.orig 2004-10-03 20:13:39.000000000 +1300
++++ kstars/kstars/indi/v4lphilips.cpp
+@@ -52,8 +52,8 @@ void waitForData(int rp, int wp);
+ void updateDataChannel(void *p);
+ void updateStream(void * p);
+ void getBasicData(void);
+-void uploadFile(char * filename);
+-int writeFITS(char *filename, char errmsg[]);
++void uploadFile(const char* filename);
++int writeFITS(const char* filename, char errmsg[]);
+ int grabImage(void);
+ int checkPowerN(INumberVectorProperty *np);
+ int checkPowerS(ISwitchVectorProperty *sp);
+@@ -286,7 +286,7 @@ void ISGetProperties (const char *dev)
+
+ void ISNewSwitch (const char *dev, const char *name, ISState *states, char *names[], int n)
+ {
+- char errmsg[1024];
++ char errmsg[ERRMSG_SIZE];
+ int index=0;
+
+ /* ignore if not ours */
+@@ -364,7 +364,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ AntiFlickerS[0].s = ISS_OFF;
+ AntiFlickerS[1].s = ISS_ON;
+- IDSetSwitch(&AntiFlickerSP, errmsg);
++ IDSetSwitch(&AntiFlickerSP, "%s", errmsg);
+ return;
+ }
+
+@@ -377,7 +377,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ AntiFlickerS[0].s = ISS_ON;
+ AntiFlickerS[1].s = ISS_OFF;
+- IDSetSwitch(&AntiFlickerSP, errmsg);
++ IDSetSwitch(&AntiFlickerSP, "%s", errmsg);
+ return;
+ }
+
+@@ -403,7 +403,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ BackLightS[0].s = ISS_OFF;
+ BackLightS[1].s = ISS_ON;
+- IDSetSwitch(&BackLightSP, errmsg);
++ IDSetSwitch(&BackLightSP, "%s", errmsg);
+ return;
+ }
+
+@@ -416,7 +416,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ BackLightS[0].s = ISS_ON;
+ BackLightS[1].s = ISS_OFF;
+- IDSetSwitch(&BackLightSP, errmsg);
++ IDSetSwitch(&BackLightSP, "%s", errmsg);
+ return;
+ }
+
+@@ -447,7 +447,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ IUResetSwitches(&NoiseReductionSP);
+ NoiseReductionS[0].s = ISS_ON;
+- IDSetSwitch(&NoiseReductionSP, errmsg);
++ IDSetSwitch(&NoiseReductionSP, "%s", errmsg);
+ return;
+ }
+
+@@ -482,7 +482,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ IUResetSwitches(&WhiteBalanceModeSP),
+ WhiteBalanceModeS[0].s = ISS_ON;
+- IDSetSwitch(&WhiteBalanceModeSP, errmsg);
++ IDSetSwitch(&WhiteBalanceModeSP, "%s", errmsg);
+ return;
+ }
+ break;
+@@ -493,7 +493,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ IUResetSwitches(&WhiteBalanceModeSP),
+ WhiteBalanceModeS[0].s = ISS_ON;
+- IDSetSwitch(&WhiteBalanceModeSP, errmsg);
++ IDSetSwitch(&WhiteBalanceModeSP, "%s", errmsg);
+ return;
+ }
+ break;
+@@ -504,7 +504,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ IUResetSwitches(&WhiteBalanceModeSP),
+ WhiteBalanceModeS[0].s = ISS_ON;
+- IDSetSwitch(&WhiteBalanceModeSP, errmsg);
++ IDSetSwitch(&WhiteBalanceModeSP, "%s", errmsg);
+ return;
+ }
+ break;
+@@ -515,7 +515,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ IUResetSwitches(&WhiteBalanceModeSP),
+ WhiteBalanceModeS[0].s = ISS_ON;
+- IDSetSwitch(&WhiteBalanceModeSP, errmsg);
++ IDSetSwitch(&WhiteBalanceModeSP, "%s", errmsg);
+ return;
+ }
+ break;
+@@ -526,7 +526,7 @@ void ISNewSwitch (const char *dev, const
+ {
+ IUResetSwitches(&WhiteBalanceModeSP),
+ WhiteBalanceModeS[0].s = ISS_ON;
+- IDSetSwitch(&WhiteBalanceModeSP, errmsg);
++ IDSetSwitch(&WhiteBalanceModeSP, "%s", errmsg);
+ return;
+ }
+ break;
+@@ -555,7 +555,7 @@ void ISNewSwitch (const char *dev, const
+ if (saveSettings(errmsg) < 0)
+ {
+ IUResetSwitches(&CamSettingSP);
+- IDSetSwitch(&CamSettingSP, errmsg);
++ IDSetSwitch(&CamSettingSP, "%s", errmsg);
+ return;
+ }
+
+@@ -616,8 +616,7 @@ void ISNewText (const char *dev, const c
+
+ void ISNewNumber (const char *dev, const char *name, double values[], char *names[], int n)
+ {
+-
+- char errmsg[1024];
++ char errmsg[ERRMSG_SIZE];
+
+ /* ignore if not ours */
+ if (dev && strcmp (dev, mydev))
+@@ -672,7 +671,7 @@ void ISNewNumber (const char *dev, const
+ if (setFrameRate( (int) FrameRateN[0].value, errmsg) < 0)
+ {
+ FrameRateN[0].value = oldFP;
+- IDSetNumber(&FrameRateNP, errmsg);
++ IDSetNumber(&FrameRateNP, "%s", errmsg);
+ return;
+ }
+
+@@ -727,7 +726,7 @@ void ISNewNumber (const char *dev, const
+ for (int i=0; i < 6; i++)
+ ImageAdjustN[i].value = oldImgPar[i];
+
+- IDSetNumber(&ImageAdjustNP, errmsg);
++ IDSetNumber(&ImageAdjustNP, "%s", errmsg);
+ return;
+ }
+ else
+@@ -745,7 +744,7 @@ void ISNewNumber (const char *dev, const
+ for (int i=0; i < 6; i++)
+ ImageAdjustN[i].value = oldImgPar[i];
+
+- IDSetNumber(&ImageAdjustNP, errmsg);
++ IDSetNumber(&ImageAdjustNP, "%s", errmsg);
+ return;
+ }
+ else
+@@ -775,7 +774,7 @@ void ISNewNumber (const char *dev, const
+
+ if (setExposure( (int) values[0], errmsg) < 0)
+ {
+- IDSetNumber(&ShutterSpeedNP, errmsg);
++ IDSetNumber(&ShutterSpeedNP, "%s", errmsg);
+ return;
+ }
+
+@@ -803,14 +802,14 @@ void ISNewNumber (const char *dev, const
+ {
+ WhiteBalanceN[0].value = oldBalance[0];
+ WhiteBalanceN[1].value = oldBalance[1];
+- IDSetNumber(&WhiteBalanceNP, errmsg);
++ IDSetNumber(&WhiteBalanceNP, "%s", errmsg);
+ return;
+ }
+ if (setWhiteBalanceBlue( (int) WhiteBalanceN[1].value * 256, errmsg))
+ {
+ WhiteBalanceN[0].value = oldBalance[0];
+ WhiteBalanceN[1].value = oldBalance[1];
+- IDSetNumber(&WhiteBalanceNP, errmsg);
++ IDSetNumber(&WhiteBalanceNP, "%s", errmsg);
+ return;
+ }
+
+@@ -865,8 +864,8 @@ int grabImage()
+
+ if ((fd = mkstemp(filename)) < 0)
+ {
+- IDMessage(mydev, "Error making temporary filename.", NULL);
+- IDLog("Error making temporary filename.\n", NULL);
++ IDMessage(mydev, "Error making temporary filename.");
++ IDLog("Error making temporary filename.\n");
+ return -1;
+ }
+ close(fd);
+@@ -881,19 +880,17 @@ int grabImage()
+ return 0;
+ }
+
+-int writeFITS(char * filename, char errmsg[])
++int writeFITS(const char* filename, char errmsg[])
+ {
+ FITS_FILE* ofp;
+ int i, bpp, bpsl, width, height;
+ long nbytes;
+ FITS_HDU_LIST *hdu;
+
+- IDLog("in writeFITS with filename %s\n", filename);
+-
+ ofp = fits_open (filename, "w");
+ if (!ofp)
+ {
+- sprintf(errmsg, "Error: cannot open file for writing.");
++ strcpy(errmsg, "Error: cannot open file for writing.");
+ return (-1);
+ }
+
+@@ -906,12 +903,12 @@ int writeFITS(char * filename, char errm
+ hdu = create_fits_header (ofp, width, height, bpp);
+ if (hdu == NULL)
+ {
+- sprintf(errmsg, "Error: creating FITS header failed.");
++ strcpy(errmsg, "Error: creating FITS header failed.");
+ return (-1);
+ }
+ if (fits_write_header (ofp, hdu) < 0)
+ {
+- sprintf(errmsg, "Error: writing to FITS header failed.");
++ strcpy(errmsg, "Error: writing to FITS header failed.");
+ return (-1);
+ }
+
+@@ -930,7 +927,7 @@ int writeFITS(char * filename, char errm
+
+ if (ferror (ofp->fp))
+ {
+- sprintf(errmsg, "Error: write error occured");
++ strcpy(errmsg, "Error: write error occured");
+ return (-1);
+ }
+
+@@ -997,7 +994,7 @@ void getBasicData()
+ if (setFrameRate( (int) FrameRateN[0].value, errmsg) < 0)
+ {
+ FrameRateNP.s = IPS_ALERT;
+- IDSetNumber(&FrameRateNP, errmsg);
++ IDSetNumber(&FrameRateNP, "%s", errmsg);
+ }
+ else
+ {
+@@ -1295,7 +1292,7 @@ void updateStream(void *p)
+ // IDLog("Leaving update stream\n");
+ }
+
+-void uploadFile(char * filename)
++void uploadFile(const char* filename)
+ {
+ FILE * fitsFile;
+ char frameSize[FRAME_ILEN];
diff --git a/misc/kdeedu3/patches/patch-ax b/misc/kdeedu3/patches/patch-ax
new file mode 100644
index 00000000000..a3d9bcbb1c5
--- /dev/null
+++ b/misc/kdeedu3/patches/patch-ax
@@ -0,0 +1,12 @@
+$NetBSD: patch-ax,v 1.1.2.2 2005/02/20 18:45:06 snj Exp $
+
+--- kstars/kstars/indi/Makefile.in.orig 2005-02-20 23:46:21.000000000 +1300
++++ kstars/kstars/indi/Makefile.in
+@@ -962,7 +962,6 @@ install-exec-hook:
+ $(LN_S) lx200generic $(DESTDIR)$(bindir)/lx200_16
+ rm -f $(DESTDIR)$(bindir)/lx200gps
+ $(LN_S) lx200generic $(DESTDIR)$(bindir)/lx200gps
+- chmod +s $(DESTDIR)$(bindir)/fliccd
+
+ uninstall-local:
+ rm $(DESTDIR)$(bindir)/lx200autostar $(DESTDIR)$(bindir)/lx200_16 $(DESTDIR)$(bindir)/lx200gps