[packages/xephem] - updated to 3.7.7 - https support added - uses system libjpeg
bszx
bszx at pld-linux.org
Tue Dec 25 23:40:26 CET 2018
commit d3faa542fafbbeeab89981fb62f50db1bce345d8
Author: Bartek Szady <bszx at bszx.eu>
Date: Tue Dec 25 23:38:28 2018 +0100
- updated to 3.7.7
- https support added
- uses system libjpeg
xephem-3.7.7_openssl.patch | 676 +++++++++++++++++++++++++++++++++++
xephem-3.7.7_openssl_earthmenu.patch | 87 +++++
xephem-format.patch | 26 --
xephem-makefile.patch | 30 +-
xephem.spec | 56 ++-
5 files changed, 798 insertions(+), 77 deletions(-)
---
diff --git a/xephem.spec b/xephem.spec
index 582359d..c2193e2 100644
--- a/xephem.spec
+++ b/xephem.spec
@@ -2,24 +2,26 @@
# TODO: Check INDI interface (anyone with telescope?), probably change
# fifo dir (/usr/share/xephem/fifo) as it needs to be writeable.
# And how it cooperates with http://indi.sf.net?
-# Consider using system-wide libjpeg instead of shipped libjpegd
#
Summary: Interactive astronomy program
Summary(pl.UTF-8): Interaktywny program astronomiczny
Name: xephem
-Version: 3.7.4
-Release: 4
+Version: 3.7.7
+Release: 1
License: distributable with free-unices distros, free for non-profit non-commercial purposes
Group: X11/Applications/Science
-Source0: http://97.74.56.125/free/%{name}-%{version}.tar.gz
-# Source0-md5: 4e9290609f36df469a2ba5a1b4fffd46
+Source0: http://www.clearskyinstitute.com/xephem/%{name}-%{version}.tgz
+# Source0-md5: 27c67061a89085bf2b0d4e9deb758a79
Source1: %{name}.desktop
Source2: %{name}.png
Source3: %{name}_sites
Patch0: %{name}-makefile.patch
Patch1: %{name}-format.patch
+Patch2: %{name}-3.7.7_openssl.patch
+Patch3: %{name}-3.7.7_openssl_earthmenu.patch
URL: http://www.clearskyinstitute.com/xephem/
BuildRequires: groff
+BuildRequires: libjpeg-devel
BuildRequires: libpng-devel
BuildRequires: motif-devel
BuildRequires: sed >= 4.0
@@ -68,13 +70,14 @@ XEphemdbd - filtr do odnajdywania obiektów astronomicznych wg zadanych
%prep
%setup -q
+%patch2 -p3
+%patch3 -p3
%patch0 -p1
%patch1 -p1
sed -i "s#X11R6/lib#X11R6/%{_lib}#g" GUI/xephem/Makefile
sed -i "s#/usr/local#%{_datadir}#g" GUI/xephem/tools/xephemdbd/start-xephemdbd.pl
-mv GUI/xephem/tools/indi/README GUI/xephem/tools/indi/README-indi
mv GUI/xephem/tools/lx200xed/README GUI/xephem/tools/lx200xed/README-lx200xed
mv GUI/xephem/tools/xedb/README GUI/xephem/tools/xedb/README-xedb
mv GUI/xephem/tools/xephemdbd/README GUI/xephem/tools/xephemdbd/README-xephemdbd
@@ -119,7 +122,7 @@ cd GUI/xephem
CC="%{__cc}" \
CFLAGS="-ffast-math %{rpmcflags} -I../../../../libastro"
-%{__make} -C tools/indi \
+%{__make} -C tools/simpleINDI \
CC="%{__cc}" \
CFLAGS="-ffast-math %{rpmcflags} -I../../../../liblilxml -I../../../../libastro -I../../../../libip"
@@ -128,7 +131,7 @@ rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT{%{_bindir},%{_datadir}/%{name},%{_mandir}/man1} \
$RPM_BUILD_ROOT{%{_desktopdir},%{_pixmapsdir},%{_appdefsdir}}
-install GUI/xephem/xephem $RPM_BUILD_ROOT%{_bindir}
+cp -p GUI/xephem/xephem $RPM_BUILD_ROOT%{_bindir}
cp -a GUI/xephem/auxil $RPM_BUILD_ROOT%{_datadir}/%{name}
cp -a GUI/xephem/catalogs $RPM_BUILD_ROOT%{_datadir}/%{name}
cp -a GUI/xephem/fifos $RPM_BUILD_ROOT%{_datadir}/%{name}
@@ -137,38 +140,21 @@ cp -a GUI/xephem/gallery $RPM_BUILD_ROOT%{_datadir}/%{name}
cp -a GUI/xephem/help $RPM_BUILD_ROOT%{_datadir}/%{name}
cp -a GUI/xephem/lo $RPM_BUILD_ROOT%{_datadir}/%{name}
-install GUI/xephem/xephem.man $RPM_BUILD_ROOT%{_mandir}/man1/xephem.1
+cp -p GUI/xephem/xephem.man $RPM_BUILD_ROOT%{_mandir}/man1/xephem.1
-install %{SOURCE1} $RPM_BUILD_ROOT%{_desktopdir}
-install %{SOURCE2} $RPM_BUILD_ROOT%{_pixmapsdir}
+cp -p %{SOURCE1} $RPM_BUILD_ROOT%{_desktopdir}
+cp -p %{SOURCE2} $RPM_BUILD_ROOT%{_pixmapsdir}
echo XEphem.ShareDir: %{_datadir}/%{name} > $RPM_BUILD_ROOT%{_appdefsdir}/XEphem
# INDI drivers
-install GUI/xephem/tools/indi/cam $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/indi/ota $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/indi/security $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/indi/tmount $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/indi/wx $RPM_BUILD_ROOT%{_bindir}
-
-install GUI/xephem/tools/indi/evalINDI $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/indi/getINDI $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/indi/indiserver $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/indi/setINDI $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/lx200xed/lx200xed $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/xedb/xedb $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/tools/xephemdbd/xephemdbd $RPM_BUILD_ROOT%{_bindir}
+cp -p GUI/xephem/tools/simpleINDI/simpleINDI $RPM_BUILD_ROOT%{_bindir}
+cp -p GUI/xephem/tools/lx200xed/lx200xed $RPM_BUILD_ROOT%{_bindir}
+cp -p GUI/xephem/tools/xedb/xedb $RPM_BUILD_ROOT%{_bindir}
+cp -p GUI/xephem/tools/xephemdbd/xephemdbd $RPM_BUILD_ROOT%{_bindir}
# xephemdbd.html and xephemdbd.pl are used for WWW interface to xephemdbd
# one can make http server subpackage
-install GUI/xephem/tools/xephemdbd/start-xephemdbd.pl $RPM_BUILD_ROOT%{_bindir}
-install GUI/xephem/auxil/*.pl $RPM_BUILD_ROOT%{_bindir}
-
-install GUI/xephem/tools/indi/evalINDI.man $RPM_BUILD_ROOT%{_mandir}/man1/evalINDI.1
-install GUI/xephem/tools/indi/getINDI.man $RPM_BUILD_ROOT%{_mandir}/man1/getINDI.1
-install GUI/xephem/tools/indi/indidevapi.man $RPM_BUILD_ROOT%{_mandir}/man1/indidevapi.1
-install GUI/xephem/tools/indi/indiserver.man $RPM_BUILD_ROOT%{_mandir}/man1/indiserver.1
-install GUI/xephem/tools/indi/setINDI.man $RPM_BUILD_ROOT%{_mandir}/man1/setINDI.1
-
-install GUI/xephem/tools/indi/*.fts $RPM_BUILD_ROOT%{_datadir}/%{name}/fits
+cp -p GUI/xephem/tools/xephemdbd/start-xephemdbd.pl $RPM_BUILD_ROOT%{_bindir}
+cp -p GUI/xephem/auxil/*.pl $RPM_BUILD_ROOT%{_bindir}
%clean
rm -rf $RPM_BUILD_ROOT
@@ -185,7 +171,7 @@ rm -rf $RPM_BUILD_ROOT
%files tools
%defattr(644,root,root,755)
-%doc GUI/xephem/tools/indi/README-indi GUI/xephem/tools/lx200xed/README-lx200xed
+%doc GUI/xephem/tools/lx200xed/README-lx200xed
%doc GUI/xephem/tools/xedb/README-xedb GUI/xephem/tools/xephemdbd/README-xephemdbd
%attr(755,root,root) %{_bindir}/*
diff --git a/xephem-3.7.7_openssl.patch b/xephem-3.7.7_openssl.patch
new file mode 100644
index 0000000..84e28e5
--- /dev/null
+++ b/xephem-3.7.7_openssl.patch
@@ -0,0 +1,676 @@
+Open SSL patch from Lutz Mändle < lmaendle at gmx dot net > available
+here (http://www.clearskyinstitute.com/xephem/contrib/xephem-3.7.7_openssl.patch).
+This is a new version dated Jan 2018 and replaces the previous one from
+Oct 2016. Many thanks for Lutz continued interest in XEphem.
+
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/auxil/mpcorb2edb.pl ./patched/xephem-3.7.7/GUI/xephem/auxil/mpcorb2edb.pl
+--- ./orig/xephem-3.7.7/GUI/xephem/auxil/mpcorb2edb.pl 2014-07-11 04:46:35.000000000 +0200
++++ ./patched/xephem-3.7.7/GUI/xephem/auxil/mpcorb2edb.pl 2018-01-08 02:54:53.603935652 +0100
+@@ -78,7 +78,7 @@
+ # setup cutoff mag
+ my $dimmag = 13; # dimmest mag to be saved in "bright" file
+ # set site and file in case of -f
+-my $MPCSITE = "http://www.minorplanetcenter.net";
++my $MPCSITE = "https://www.minorplanetcenter.net";
+ my $MPCFTPDIR = "/iau/MPCORB";
+ my $MPCFILE = "MPCORB.DAT";
+ my $MPCZIPFILE = "MPCORB.DAT.gz";
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/fallbacks.c ./patched/xephem-3.7.7/GUI/xephem/fallbacks.c
+--- ./orig/xephem-3.7.7/GUI/xephem/fallbacks.c 2015-04-09 02:20:19.000000000 +0200
++++ ./patched/xephem-3.7.7/GUI/xephem/fallbacks.c 2018-01-08 21:26:23.529915768 +0100
+@@ -747,10 +747,10 @@
+ "XEphem*WebDB*URL1.value: http://celestrak.com/NORAD/elements/science.txt",
+ "XEphem*WebDB*URL2.value: http://celestrak.com/NORAD/elements/tle-new.txt",
+ "XEphem*WebDB*URL3.value: http://celestrak.com/NORAD/elements/amateur.txt",
+- "XEphem*WebDB*URL4.value: http://www.minorplanetcenter.org/iau/Ephemerides/Comets/Soft03Cmt.txt",
+- "XEphem*WebDB*URL5.value: http://www.minorplanetcenter.org/iau/Ephemerides/CritList/Soft03CritList.txt",
+- "XEphem*WebDB*URL6.value: http://www.minorplanetcenter.org/iau/Ephemerides/Distant/Soft03Distant.txt",
+- "XEphem*WebDB*URL7.value: http://www.minorplanetcenter.org/iau/Ephemerides/Unusual/Soft03Unusual.txt",
++ "XEphem*WebDB*URL4.value: https://www.minorplanetcenter.org/iau/Ephemerides/Comets/Soft03Cmt.txt",
++ "XEphem*WebDB*URL5.value: https://www.minorplanetcenter.org/iau/Ephemerides/CritList/Soft03CritList.txt",
++ "XEphem*WebDB*URL6.value: https://www.minorplanetcenter.org/iau/Ephemerides/Distant/Soft03Distant.txt",
++ "XEphem*WebDB*URL7.value: https://www.minorplanetcenter.org/iau/Ephemerides/Unusual/Soft03Unusual.txt",
+ "XEphem*WebDB.x: 200",
+ "XEphem*WebDB.y: 200",
+ "XEphem*WeekStart.Monday.set: False",
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/Makefile ./patched/xephem-3.7.7/GUI/xephem/Makefile
+--- ./orig/xephem-3.7.7/GUI/xephem/Makefile 2015-08-09 23:36:50.000000000 +0200
++++ ./patched/xephem-3.7.7/GUI/xephem/Makefile 2018-01-08 21:20:45.200717791 +0100
+@@ -35,7 +35,7 @@
+ CFLAGS = $(LIBINC) $(CLDFLAGS) -O2 -Wall -I$(MOTIFI) -I/opt/X11/include
+ LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) -L/opt/X11/lib
+ XLIBS = -lXm -lXp -lXt -lXext -lXmu -lX11
+-LIBS = $(XLIBS) $(LIBLIB) -lm
++LIBS = $(XLIBS) $(LIBLIB) -lm -lssl
+
+ # static linking on Apple using X11 libs from ports
+ # CC = gcc
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/net.h ./patched/xephem-3.7.7/GUI/xephem/net.h
+--- ./orig/xephem-3.7.7/GUI/xephem/net.h 2005-03-20 12:04:50.000000000 +0100
++++ ./patched/xephem-3.7.7/GUI/xephem/net.h 2018-01-08 19:45:27.561208366 +0100
+@@ -20,6 +20,13 @@
+ #include <sys/select.h>
+ #endif
+
++#include <openssl/ssl.h>
++
++typedef struct {
++ int fd; //file desciptor for the underlying connection socket
++ SSL *ssl; //ssl connection for use with SSL_read( )and SSL_write()
++} XE_SSL_FD;
++
+ /* support functions */
+
+ extern int httpGET (char *host, char *GETcmd, char msg[]);
+@@ -29,8 +36,11 @@
+ extern int recvline (int fd, char buf[], int max);
+ extern int recvlineb (int sock, char *buf, int size);
+ extern int sendbytes (int fd, unsigned char buf[], int n);
+-
+-
++extern int httpsGET (char *host, char *GETcmd, char msg[], XE_SSL_FD *ssl_fd);
++extern int ssl_recvbytes (XE_SSL_FD *ssl_fd, unsigned char buf[], int n);
++extern int ssl_readbytes (XE_SSL_FD *ssl_fd, unsigned char buf[], int n);
++extern int ssl_recvline (XE_SSL_FD *ssl_fd, char buf[], int max);
++extern int ssl_recvlineb (XE_SSL_FD *ssl_fd, char *buf, int size);
+
+ /* For RCS Only -- Do Not Edit
+ * @(#) $RCSfile: net.h,v $ $Date: 2003/03/17 07:26:21 $ $Revision: 1.3 $ $Name: $
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/netmenu.c ./patched/xephem-3.7.7/GUI/xephem/netmenu.c
+--- ./orig/xephem-3.7.7/GUI/xephem/netmenu.c 2010-10-06 23:12:40.000000000 +0200
++++ ./patched/xephem-3.7.7/GUI/xephem/netmenu.c 2018-01-08 22:02:16.090940142 +0100
+@@ -9,6 +9,8 @@
+ #include <string.h>
+ #include <unistd.h>
+
++#include <openssl/ssl.h>
++
+ #include <Xm/Form.h>
+ #include <Xm/Label.h>
+ #include <Xm/PushB.h>
+@@ -70,12 +72,24 @@
+
+ static char netcategory[] = "Network"; /* Save category */
+
++static SSL_METHOD *ssl_method; /* global ssl dispatch structure for creating a ssl context */
++static SSL_CTX *ssl_ctx; /* global ssl context structure for creating ssl connections */
++
+ /* call to set up without actually bringing up the menus.
+ */
+ void
+ net_create()
+ {
+ if (!netshell_w) {
++ if (SSL_library_init() < 0) {
++ fprintf (stderr, "Could not initialize the OpenSSL library !\n");
++ } else {
++ ssl_method = SSLv23_client_method(); /* deprecated since openssl 1.1.x */
++// ssl_method = TLS_client_method(); /* since openssl 1.1.x */
++ ssl_ctx = SSL_CTX_new (ssl_method);
++ SSL_CTX_set_options (ssl_ctx, SSL_OP_NO_SSLv2);
++ };
++
+ net_create_form();
+ (void) net_save(); /* confirming here is just annoying */
+ }
+@@ -251,8 +265,8 @@
+ struct {
+ unsigned char VN; /* version number */
+ unsigned char CD; /* command code */
+- unsigned short DSTPORT; /* destination port */
+- unsigned long DSTIP; /* destination IP addres */
++ uint16_t DSTPORT; /* destination port */
++ uint32_t DSTIP; /* destination IP address */
+ } SocksPacket;
+
+ struct hostent *hs = gethostbyname (socks_host);
+@@ -390,7 +404,7 @@
+
+ /* read up to and including the next '\n' from socket fd into buf[max].
+ * we silently ignore all '\r'. we add a trailing '\0'.
+- * return line lenth (not counting \0) if all ok, else -1.
++ * return line length (not counting \0) if all ok, else -1.
+ * N.B. this never reads ahead -- if that's ok, recvlineb() is better
+ */
+ int
+@@ -445,6 +459,216 @@
+ if (nr <= 0) {
+ ok = nr;
+ rb_next = 0;
++ rb_unk = 0;
++ break;
++ }
++ rb_next = 0;
++ rb_unk = nr;
++ }
++
++ if ((c = rb_linebuf[rb_next++]) != '\r')
++ *buf++ = c;
++
++ } while (buf-origbuf < size && c != '\n');
++
++ /* always give back a real line regardless, else status */
++ if (ok > 0) {
++ *buf = '\0';
++ ok = buf - origbuf;
++ }
++
++ return (ok);
++}
++
++/* open the host, do the given GET cmd, and return a socket fd for the result.
++ * on success it fills the XE_SSL_FD structure for later use by SSL_read() and necessary cleanup.
++ * return -1 and with excuse in msg[], else 0 if ok.
++ * N.B. can be called before we are created if net set in app defaults.
++ */
++int
++httpsGET (char *host, char *GETcmd, char msg[], XE_SSL_FD *ssl_fd)
++{
++ char buf[2048];
++ int fd;
++ int connected;
++ SSL *ssl;
++ int n;
++ int ret;
++ int httpsport = 443;
++
++ /* open connection */
++ if (proxy_on) {
++ fd = mkconnection (proxy_host, proxy_port, msg);
++ if (fd < 0)
++ return (-1);
++
++ /* fill buf with CONNECT */
++ (void) sprintf (buf, "CONNECT %1$s:%2$d HTTP/1.0\r\nUser-Agent: xephem/%3$s\r\nHost: %1$s:%2$d\r\n\r\n", host, httpsport, PATCHLEVEL);
++
++ /* add proxy auth if enabled */
++ if (!auth_w)
++ net_create_form();
++ if (XmToggleButtonGetState (auth_w))
++ addAuth(buf);
++
++ /* log it */
++ xe_msg (0, "https proxy connect: %s", buf);
++
++ /* send it */
++ n = strlen (buf);
++ if (sendbytes(fd, (unsigned char *)buf, n) < 0) {
++ (void) sprintf (msg, "%s: send error: %s", proxy_host, syserrstr());
++ (void) close (fd);
++ return (-1);
++ }
++
++ connected = 0;
++ while (recvline (fd, buf, sizeof(buf)) > 1) {
++ xe_msg (0, "Rcv: %s", buf);
++ if (strstr (buf, "200 "))
++ connected = 1;
++ }
++ if (!connected) {
++ (void) sprintf (msg, "%s: connect error: %s", proxy_host, syserrstr());
++ (void) close (fd);
++ return (-1);
++ }
++ } else {
++ /* SOCKS or direct are both handled by mkconnection() */
++ fd = mkconnection (host, httpsport, msg);
++ if (fd < 0)
++ return (-1);
++ }
++
++ /* fill buf with GETcmd */
++ (void) sprintf (buf, "%s", GETcmd);
++
++ /* start ssl connection */
++ ssl = SSL_new (ssl_ctx);
++ SSL_set_fd (ssl, fd);
++ SSL_connect (ssl);
++
++ /* log it */
++ xe_msg (0, "https: %s", buf);
++
++ /* send it */
++ n = strlen (buf);
++ ret = SSL_write (ssl, (unsigned char *)buf, n);
++ if (ret <= 0) {
++ (void) sprintf (msg, "%s: ssl send error code: %d", host, SSL_get_error (ssl, ret));
++ (void) SSL_free (ssl);
++ (void) close (fd);
++ return (-1);
++ }
++
++ /* caller can read response */
++ ssl_fd->fd = fd;
++ ssl_fd->ssl = ssl;
++ return (fd);
++}
++
++/* receive exactly n bytes from ssl connection ssl_fd into buf.
++ * return -1, 0 or n.
++ * N.B. with fallback to ordinary read from socket if ssl_fd->ssl is NULL
++ */
++int
++ssl_recvbytes (XE_SSL_FD *ssl_fd, unsigned char buf[], int n)
++{
++ int ns, tot;
++
++ for (tot = 0; tot < n; tot += ns) {
++ if (tout (TOUT, ssl_fd->fd, 0) < 0)
++ return (-1);
++ if (ssl_fd->ssl)
++ ns = SSL_read (ssl_fd->ssl, (void *)(buf+tot), n-tot);
++ else
++ ns = read (ssl_fd->fd, (void *)(buf+tot), n-tot);
++ if (ns <= 0)
++ return (ns);
++ }
++ return (n);
++}
++
++/* like read(2) except we time out and allow user to cancel.
++ * receive up to n bytes from ssl connection ssl_fd into buf.
++ * return count, or 0 on eof or -1 on error.
++ * N.B. with fallback to ordinary read from socket if ssl_fd->ssl is NULL
++ */
++int
++ssl_readbytes (XE_SSL_FD *ssl_fd, unsigned char buf[], int n)
++{
++ int ns;
++
++ if (tout (TOUT, ssl_fd->fd, 0) < 0)
++ return (-1);
++ if (ssl_fd->ssl)
++ ns = SSL_read (ssl_fd->ssl, (void *)buf, n);
++ else
++ ns = read (ssl_fd->fd, (void *)buf, n);
++ return (ns);
++}
++
++/* read up to and including the next '\n' from ssl into buf[max].
++ * we silently ignore all '\r'. we add a trailing '\0'.
++ * return line length (not counting \0) if all ok, else -1.
++ * N.B. with fallback to ordinary read from socket if ssl_fd->ssl is NULL
++ */
++int
++ssl_recvline (XE_SSL_FD *ssl_fd, char buf[], int max)
++{
++ unsigned char c;
++ int n;
++
++ max--; /* leave room for trailing \0 */
++
++ for (n = 0; n < max && ssl_recvbytes (ssl_fd, &c, 1) == 1; ) {
++ if (c != '\r') {
++ buf[n++] = c;
++ if (c == '\n') {
++ buf[n] = '\0';
++ return (n);
++ }
++ }
++ }
++
++ return (-1);
++}
++
++/* rather like ssl_recvline but reads ahead in big chunk for efficiency.
++ * return length if read a line ok, 0 if hit eof, -1 if error.
++ * N.B. we silently swallow all '\r'.
++ * N.B. we read ahead and can hide bytes after each call.
++ * N.B. with fallback to ordinary read from socket if ssl_fd->ssl is NULL
++ */
++int
++ssl_recvlineb (XE_SSL_FD *ssl_fd, char *buf, int size)
++{
++ char *origbuf = buf; /* save to prevent overfilling buf */
++ char c = '\0';
++ int ok = 1;
++
++ /* always leave room for trailing \n */
++ size -= 1;
++
++ /* read and copy linebuf[next] to buf until buf fills or copied a \n */
++ do {
++
++ if (rb_next >= rb_unk) {
++ /* linebuf is empty -- refill */
++
++ int nr;
++
++ if (tout (TOUT, ssl_fd->fd, 0) < 0) {
++ nr = -1;
++ break;
++ }
++ if (ssl_fd->ssl)
++ nr = SSL_read (ssl_fd->ssl, rb_linebuf, sizeof(rb_linebuf));
++ else
++ nr = read (ssl_fd->fd, rb_linebuf, sizeof(rb_linebuf));
++ if (nr <= 0) {
++ ok = nr;
++ rb_next = 0;
+ rb_unk = 0;
+ break;
+ }
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/sunmenu.c ./patched/xephem-3.7.7/GUI/xephem/sunmenu.c
+--- ./orig/xephem-3.7.7/GUI/xephem/sunmenu.c 2012-04-02 00:38:50.000000000 +0200
++++ ./patched/xephem-3.7.7/GUI/xephem/sunmenu.c 2018-01-08 22:09:43.585825210 +0100
+@@ -884,9 +884,11 @@
+ int isjpeg, jpegl;
+ int njpeg;
+ unsigned char *jpeg;
++ XE_SSL_FD ssl_fd;
+ int fd, nr;
+ struct tm tm;
+
++ memset(&ssl_fd, 0, sizeof(ssl_fd));
+ memset(&tm, 0, sizeof(struct tm));
+
+ /* get desired type and size */
+@@ -899,18 +901,18 @@
+
+ /* build GET command */
+ sprintf (get, "GET http://%s%s HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n", sohohost, fn, PATCHLEVEL);
+-
++
+ /* query server */
+- fd = httpGET (sohohost, get, buf);
++ fd = httpsGET (sohohost, get, buf, &ssl_fd);
+ if (fd < 0) {
+- xe_msg (1, "http get: %s", buf);
++ xe_msg (1, "https get: %s", buf);
+ return (-1);
+ }
+
+ /* read header (everything to first blank line), looking for jpeg */
+ isjpeg = 0;
+ jpegl = 0;
+- while (recvline (fd, buf, sizeof(buf)) > 1) {
++ while (ssl_recvline (&ssl_fd, buf, sizeof(buf)) > 1) {
+ xe_msg (0, "Rcv: %s", buf);
+ if (strstr (buf, "Content-Type:") && strstr (buf, "image/jpeg"))
+ isjpeg = 1;
+@@ -923,15 +925,17 @@
+ }
+ }
+ if (!isjpeg) {
+- while (recvline (fd, buf, sizeof(buf)) > 0)
++ while (ssl_recvline (&ssl_fd, buf, sizeof(buf)) > 0)
+ xe_msg (0, "Rcv: %s", buf);
+ xe_msg (1, "Error talking to SOHO .. see File->System log\n");
+- close (fd);
++ SSL_free (ssl_fd.ssl);
++ close (ssl_fd.fd);
+ return (-1);
+ }
+ if (jpegl == 0) {
+ xe_msg (1, "No Content-Length in header");
+- close (fd);
++ SSL_free (ssl_fd.ssl);
++ close (ssl_fd.fd);
+ return (-1);
+ }
+
+@@ -941,20 +945,22 @@
+ for (njpeg = 0; njpeg < jpegl; njpeg += nr) {
+ pm_set (100*njpeg/jpegl);
+ jpeg = (unsigned char *) XtRealloc ((char*)jpeg, njpeg+NSREAD);
+- nr = readbytes (fd, jpeg+njpeg, NSREAD);
+- if (nr < 0) {
+- xe_msg (1, "%s:\n%s", sohohost, syserrstr());
++ nr = SSL_read (ssl_fd.ssl, jpeg+njpeg, NSREAD);
++ if (nr <= 0) {
++ xe_msg (1, "%s: ssl read error code: %d", sohohost, SSL_get_error(ssl_fd.ssl, nr));
+ pm_down();
+- close (fd);
++ SSL_free (ssl_fd.ssl);
++ close (ssl_fd.fd);
+ return (-1);
+ }
+ if (nr == 0)
+ break;
+ }
+ pm_down();
+- close (fd);
++ SSL_free (ssl_fd.ssl);
++ close (ssl_fd.fd);
+
+- sprintf (fn, "/%s_%s.jpg", filetime, filetype);
++ sprintf (fn, "/%s_%s.jpg", filetime, filetype);
+ /* display jpeg */
+ if (displayPic (fn, jpeg, njpeg) < 0)
+ return (-1);
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/ucac.c ./patched/xephem-3.7.7/GUI/xephem/ucac.c
+--- ./orig/xephem-3.7.7/GUI/xephem/ucac.c 2013-03-02 03:41:37.000000000 +0100
++++ ./patched/xephem-3.7.7/GUI/xephem/ucac.c 2018-01-08 21:53:08.398538689 +0100
+@@ -18,15 +18,15 @@
+
+ #define MAXFOV 15.0 /* max fov, degs */
+
+-typedef unsigned char UC; /* byte */
+-typedef unsigned int UI; /* unsigned integer */
++typedef unsigned char XE_UC; /* byte */
++typedef unsigned int XE_UI; /* unsigned integer */
+
+ /* access an I*2 or I*4 at offset i in UC array a in little-endian byte order.
+ * a bit slow but ultra portable.
+ */
+-#define I2(a,i) ((int)(short)((((UI)(a)[i]) | (((UI)(a)[i+1])<<8))))
+-#define I4(a,i) ((int)((((UI)(a)[i]) | (((UI)(a)[i+1])<<8) | \
+- (((UI)(a)[i+2])<<16) | (((UI)(a)[i+3])<<24))))
++#define I2(a,i) ((int)(short)((((XE_UI)(a)[i]) | (((XE_UI)(a)[i+1])<<8))))
++#define I4(a,i) ((int)((((XE_UI)(a)[i]) | (((XE_UI)(a)[i+1])<<8) | \
++ (((XE_UI)(a)[i+2])<<16) | (((XE_UI)(a)[i+3])<<24))))
+
+ /* keep track of an array of ObjF */
+ typedef struct {
+@@ -48,9 +48,9 @@
+
+ #define DPMAS (1.0/3600000.0) /* degrees per milliarcsecond */
+
+-typedef UC U2Star[44]; /* UCAC2 record */
+-typedef UC U3Star[84]; /* UCAC3 record */
+-typedef UC U4Star[78]; /* UCAC4 record */
++typedef XE_UC U2Star[44]; /* UCAC2 record */
++typedef XE_UC U3Star[84]; /* UCAC3 record */
++typedef XE_UC U4Star[78]; /* UCAC4 record */
+ static char *basedir; /* full dir with zone files and index */
+ static FILE *indexfp; /* index file handle */
+
+@@ -293,7 +293,7 @@
+ read4Index (int rz, int dz, int *nskip, int *nnew)
+ {
+ off_t offset;
+- UC i4[4];
++ XE_UC i4[4];
+
+ offset = (rz*NZH4 + dz)*sizeof(i4);
+ if (fseek (indexfp, offset, SEEK_SET) < 0) {
+@@ -508,7 +508,7 @@
+ read3Index (int rz, int dz, int *nskip, int *nnew)
+ {
+ off_t offset;
+- UC i4[4];
++ XE_UC i4[4];
+
+ offset = (rz*NZH + dz)*sizeof(i4);
+ if (fseek (indexfp, offset, SEEK_SET) < 0) {
+@@ -663,7 +663,7 @@
+ get2N (int rz, int dz, int *idp)
+ {
+ off_t offset;
+- UC nat[4];
++ XE_UC nat[4];
+
+ offset = (dz*NZW + rz)*sizeof(nat);
+ if (fseek (indexfp, offset, SEEK_SET) < 0)
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/usno.c ./patched/xephem-3.7.7/GUI/xephem/usno.c
+--- ./orig/xephem-3.7.7/GUI/xephem/usno.c 2005-03-20 12:04:51.000000000 +0100
++++ ./patched/xephem-3.7.7/GUI/xephem/usno.c 2016-10-26 18:59:16.469149437 +0200
+@@ -14,8 +14,8 @@
+ #define CATBPR 12 /* bytes per star record in .cat file */
+ #define ACCBPR 30 /* bytes per record in .acc file */
+
+-typedef unsigned int UI;
+-typedef unsigned char UC;
++typedef unsigned int XE_UI;
++typedef unsigned char XE_UC;
+
+ /* One Field star */
+ typedef struct {
+@@ -36,7 +36,7 @@
+ double lr[2], int *nd, double fd[2], double ld[2], int zone[2], char msg[]);
+ static int fetchSwath (int zone, double maxmag, double fr, double lr,
+ double fd, double ld, StarArray *sap, char msg[]);
+-static int crackCatBuf (UC buf[CATBPR], FieldStar *fsp);
++static int crackCatBuf (XE_UC buf[CATBPR], FieldStar *fsp);
+ static int addGS (StarArray *sap, FieldStar *fsp);
+
+ static char *cdpath; /* where CD rom is mounted */
+@@ -236,7 +236,7 @@
+ {
+ char fn[1024];
+ char buf[ACCBPR];
+- UC catbuf[CATBPR];
++ XE_UC catbuf[CATBPR];
+ FieldStar fs;
+ long frec;
+ long os;
+@@ -314,13 +314,13 @@
+ * return 0 if ok, else -1.
+ */
+ static int
+-crackCatBuf (UC buf[CATBPR], FieldStar *fsp)
++crackCatBuf (XE_UC buf[CATBPR], FieldStar *fsp)
+ {
+-#define BEUPACK(b) (((UI)((b)[0])<<24) | ((UI)((b)[1])<<16) | ((UI)((b)[2])<<8)\
+- | ((UI)((b)[3])))
++#define BEUPACK(b) (((XE_UI)((b)[0])<<24) | ((XE_UI)((b)[1])<<16) | ((XE_UI)((b)[2])<<8)\
++ | ((XE_UI)((b)[3])))
+ double ra, dec;
+ int red, blu;
+- UI mag;
++ XE_UI mag;
+
+ /* first 4 bytes are packed RA, big-endian */
+ ra = BEUPACK(buf)/(100.0*3600.0*15.0);
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/webdbmenu.c ./patched/xephem-3.7.7/GUI/xephem/webdbmenu.c
+--- ./orig/xephem-3.7.7/GUI/xephem/webdbmenu.c 2012-11-23 06:22:09.000000000 +0100
++++ ./patched/xephem-3.7.7/GUI/xephem/webdbmenu.c 2018-01-08 21:58:01.975042039 +0100
+@@ -404,6 +404,10 @@
+ char *url;
+ {
+ static char http[] = "http://";
++ static char https[] = "https://";
++ char *transport = http;
++ int ltransport = strlen (transport);
++ int ishttp = 0;
+ char buf[512], msg[1024];
+ char l0[512], l1[512], l2[512];
+ char *l0p = l0, *l1p = l1, *l2p = l2;
+@@ -411,21 +415,31 @@
+ char *slash, *dot;
+ char filename[256];
+ FILE *fp;
++ XE_SSL_FD ssl_fd;
+ int sockfd;
+ int nfound;
+
++ memset(&ssl_fd, 0, sizeof(ssl_fd));
++
+ /* start */
+ watch_cursor(1);
+ l0[0] = l1[0] = l2[0] = '\0';
+
+ /* find transport and host */
+- if (strncmp (url, http, 7)) {
+- xe_msg (1, "URL must begin with %s", http);
++ if (!strncmp (url, transport, ltransport)) {
++ ishttp = 1;
++ } else {
++ transport = https;
++ ltransport = strlen (transport);
++ }
++
++ if ((!ishttp) && (strncmp (url, transport, ltransport))) {
++ xe_msg (1, "URL must begin with %s or %s", http, https);
+ watch_cursor (0);
+ return;
+ }
+
+- slash = strchr (url+7, '/');
++ slash = strchr (url+ltransport, '/');
+ dot = strrchr (url, '.');
+ if (!slash || !dot) {
+ xe_msg (1, "Badly formed URL");
+@@ -434,11 +448,16 @@
+ }
+
+ /* connect to check url */
+- sprintf (host, "%.*s", (int)(slash-url-7), url+7);
++ sprintf (host, "%.*s", (int)(slash-url-ltransport), url+ltransport);
+ sprintf (buf, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nUser-Agent: xephem/%s\r\n\r\n",
+ url, host, PATCHLEVEL);
+ stopd_up();
+- sockfd = httpGET (host, buf, msg);
++ if (ishttp) {
++ sockfd = httpGET (host, buf, msg);
++ ssl_fd.fd = sockfd;
++ } else {
++ sockfd = httpsGET (host, buf, msg, &ssl_fd);
++ }
+ if (sockfd < 0) {
+ xe_msg (1, "http GET to %s failed: %s%s\n", host, buf, msg);
+ stopd_down();
+@@ -447,20 +466,22 @@
+ }
+
+ /* create local file */
+- slash = strrchr (url+7, '/');
++ slash = strrchr (url+ltransport, '/');
+ sprintf (filename, "%s/%.*sedb", getPrivateDir(), (int)(dot-slash), slash+1);
+ fp = fopen (filename, "w");
+ if (!fp) {
+ xe_msg (1, "%s:\n%s", filename, syserrstr());
+ watch_cursor (0);
+- close (sockfd);
++ if (!ishttp)
++ SSL_free (ssl_fd.ssl);
++ close (ssl_fd.fd);
+ return;
+ }
+
+ /* copy to file, insuring only .edb lines.
+ */
+ nfound = 0;
+- while (recvlineb (sockfd, l2p, sizeof(l2)) > 0) {
++ while (ssl_recvlineb (&ssl_fd, l2p, sizeof(l2)) > 0) {
+ char *lrot;
+ Obj o;
+
+@@ -484,7 +505,9 @@
+
+ /* tidy up and done */
+ fclose (fp);
+- close (sockfd);
++ if (!ishttp)
++ SSL_free (ssl_fd.ssl);
++ close (ssl_fd.fd);
+ if (!nfound) {
+ xe_msg (1, "No objects in file");
+ remove (filename);
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/xephem.h ./patched/xephem-3.7.7/GUI/xephem/xephem.h
+--- ./orig/xephem-3.7.7/GUI/xephem/xephem.h 2012-12-30 18:01:12.000000000 +0100
++++ ./patched/xephem-3.7.7/GUI/xephem/xephem.h 2016-10-26 20:09:47.000000000 +0200
+@@ -12,12 +12,12 @@
+
+ #include <stdarg.h> /* be kind to those who don't use xe_msg() */
+
++#include "net.h" /* has to be included before astro.h because of openssl */
+ #include "astro.h"
+ #include "ip.h"
+
+ /* local glue files */
+ #include "map.h"
+-#include "net.h"
+ #include "patchlevel.h"
+ #include "preferences.h"
+ #include "db.h"
diff --git a/xephem-3.7.7_openssl_earthmenu.patch b/xephem-3.7.7_openssl_earthmenu.patch
new file mode 100644
index 0000000..6869fc0
--- /dev/null
+++ b/xephem-3.7.7_openssl_earthmenu.patch
@@ -0,0 +1,87 @@
+Here
+(http://www.clearskyinstitute.com/xephem/contrib/xephem-3.7.7_openssl_earthmenu.patch)
+is another patch from Mr. Mändl dated 2018 September. This one fixes the
+weather map in the Earth view which also now requires https.
+
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/earthmenu.c ./patched/xephem-3.7.7/GUI/xephem/earthmenu.c
+--- ./orig/xephem-3.7.7/GUI/xephem/earthmenu.c 2012-11-23 05:15:39.000000000 +0100
++++ ./patched/xephem-3.7.7/GUI/xephem/earthmenu.c 2018-09-24 01:17:34.248048815 +0200
+@@ -4886,8 +4886,11 @@
+ int nrawgif;
+ char buf[1024];
+ int w, h;
++ XE_SSL_FD ssl_fd;
+ int fd;
+
++ memset(&ssl_fd, 0, sizeof(ssl_fd));
++
+ /* open test case, else real network */
+ fd = openh ("/tmp/latest_cmoll.gif", O_RDONLY);
+ if (fd >= 0) {
+@@ -4902,12 +4905,12 @@
+ stopd_up();
+
+ /* make connection to server for the file */
+- xe_msg (0, "Getting\nhttp://%s%s", wxhost, wxfile);
+- (void) sprintf (buf, "GET http://%s%s HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n",
+- wxhost, wxfile, PATCHLEVEL);
+- fd = httpGET (wxhost, buf, buf);
++ xe_msg (0, "Getting\nhttps://%s%s", wxhost, wxfile);
++ (void) sprintf (buf, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nUser-Agent: xephem/%s\r\n\r\n",
++ wxfile, wxhost, PATCHLEVEL);
++ fd = httpsGET (wxhost, buf, buf, &ssl_fd);
+ if (fd < 0) {
+- xe_msg (1, "http get:\n%s", buf);
++ xe_msg (1, "https get:\n%s", buf);
+ stopd_down();
+ return (-1);
+ }
+@@ -4915,7 +4918,7 @@
+ /* read header, looking for some header info */
+ isgif = 0;
+ length = 0;
+- while (recvline (fd, buf, sizeof(buf)) > 1) {
++ while (ssl_recvline (&ssl_fd, buf, sizeof(buf)) > 1) {
+ xe_msg (0, "Rcv: %s", buf);
+ if (strstr (buf, "image/gif"))
+ isgif = 1;
+@@ -4923,9 +4926,10 @@
+ length = atoi (buf+15);
+ }
+ if (!isgif) {
+- while (recvline (fd, buf, sizeof(buf)) > 1)
++ while (ssl_recvline (&ssl_fd, buf, sizeof(buf)) > 1)
+ xe_msg (0, "Rcv: %s", buf);
+- close (fd);
++ SSL_free (ssl_fd.ssl);
++ close (ssl_fd.fd);
+ stopd_down();
+ return (-1);
+ }
+@@ -4936,12 +4940,13 @@
+ pm_up();
+ for (nrawgif = 0; nrawgif < sizeof(rawgif); nrawgif += nr) {
+ pm_set (100*nrawgif/length);
+- nr = readbytes (fd, rawgif+nrawgif, 4096);
++ nr = SSL_read (ssl_fd.ssl, rawgif+nrawgif, 4096);
+ if (nr < 0) {
+- xe_msg (1, "%s:\n%s", wxhost, syserrstr());
++ xe_msg (1, "%s: ssl read error code: %d", wxhost, SSL_get_error(ssl_fd.ssl, nr));
+ stopd_down();
+ pm_down();
+- close (fd);
++ SSL_free (ssl_fd.ssl);
++ close (ssl_fd.fd);
+ return (-1);
+ }
+ if (nr == 0)
+@@ -4949,7 +4954,8 @@
+ }
+ stopd_down();
+ pm_down();
+- close (fd);
++ SSL_free (ssl_fd.ssl);
++ close (ssl_fd.fd);
+ if (nr > 0) {
+ xe_msg (1, "File too large");
+ return (-1);
diff --git a/xephem-format.patch b/xephem-format.patch
index 2cfdb64..3da8e65 100644
--- a/xephem-format.patch
+++ b/xephem-format.patch
@@ -11,32 +11,6 @@ index 63a0065..16bf565 100644
int tok = ERR; /* just something illegal */
char c;
-diff --git a/GUI/xephem/obslog.c b/GUI/xephem/obslog.c
-index e3912e2..7deb5a6 100644
---- a/GUI/xephem/obslog.c
-+++ b/GUI/xephem/obslog.c
-@@ -915,7 +915,7 @@ ol_writeLB()
- fprintf (fp, " </%s>\n", lbetag);
-
- /* finished */
-- fprintf (fp, cltag);
-+ fprintf (fp, "%s", cltag);
- xe_msg (1, "Added new log entry");
- fclose (fp);
- }
-diff --git a/GUI/xephem/tools/indi/compiler.c b/GUI/xephem/tools/indi/compiler.c
-index 2e16d93..736f2a1 100644
---- a/GUI/xephem/tools/indi/compiler.c
-+++ b/GUI/xephem/tools/indi/compiler.c
-@@ -268,7 +268,7 @@ next_token ()
- {
- static char toomv[] = "More than %d variables";
- static char toomc[] = "More than %d constants";
-- static char badop[] = "Illegal operator";
-+ static const char badop[] = "Illegal operator";
- int tok = ERR; /* just something illegal */
- char c;
-
diff --git a/GUI/xephem/tools/lx200xed/lx200xed.c b/GUI/xephem/tools/lx200xed/lx200xed.c
index 34bdb33..4c6e5b0 100644
--- a/GUI/xephem/tools/lx200xed/lx200xed.c
diff --git a/xephem-makefile.patch b/xephem-makefile.patch
index 3b75ed1..6387719 100644
--- a/xephem-makefile.patch
+++ b/xephem-makefile.patch
@@ -1,31 +1,29 @@
---- xephem-3.7.1.orig/GUI/xephem/Makefile 2005-11-18 14:43:09.000000000 +0100
-+++ xephem-3.7.1/GUI/xephem/Makefile 2006-07-22 18:28:04.305473250 +0200
+--- xephem-3.7.7/GUI/xephem/Makefile.orig 2015-08-09 23:36:50.000000000 +0200
++++ xephem-3.7.7/GUI/xephem/Makefile 2018-12-19 21:10:25.456956449 +0100
@@ -10,8 +10,8 @@
# one executable, xephem.
# These -I and -L flags point to the supporting XEphem libraries
-LIBINC = -I../../libastro -I../../libip -I../../liblilxml -I../../libjpegd -I../../libpng -I../../libz
-LIBLNK = -L../../libastro -L../../libip -L../../liblilxml -L../../libjpegd -L../../libpng -L../../libz
-+LIBINC = -I../../libastro -I../../libip -I../../liblilxml -I../../libjpegd
-+LIBLNK = -L../../libastro -L../../libip -L../../liblilxml -L../../libjpegd
- LIBLIB = -lastro -lip -llilxml -ljpegd -lpng -lz
++LIBINC = -I../../libastro -I../../libip -I../../liblilxml
++LIBLNK = -L../../libastro -L../../libip -L../../liblilxml
+-LIBLIB = -lastro -lip -llilxml -ljpegd -lpng -lz
++LIBLIB = -lastro -lip -llilxml -ljpeg -lpng -lz
# MOTIFI is the directory containing the Xm directory of include files.
-@@ -34,9 +34,9 @@
- # some systems now use just /usr/X11 (not /usr/X11R6)
+@@ -32,7 +32,7 @@
+ # for linux and Apple OS X
CC = gcc
CLDFLAGS = -g
--CFLAGS = $(LIBINC) $(CLDFLAGS) -O2 -Wall -I$(MOTIFI) -I/usr/X11R6/include
-+CFLAGS = $(LIBINC) $(CLDFLAGS) -Wall -I$(MOTIFI) -I/usr/X11R6/include
- LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) -L/usr/X11R6/lib
--XLIBS = $(MOTIFL)/libXm.a -lXp -lXt -lXext -lXmu -lX11
-+XLIBS = -lXm -lXp -lXt -lXext -lXmu -lX11
+-CFLAGS = $(LIBINC) $(CLDFLAGS) -O2 -Wall -I$(MOTIFI) -I/opt/X11/include
++CFLAGS = $(LIBINC) $(CLDFLAGS) -Wall -I$(MOTIFI) -I/opt/X11/include
+ LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) -L/opt/X11/lib
+ XLIBS = -lXm -lXp -lXt -lXext -lXmu -lX11
LIBS = $(XLIBS) $(LIBLIB) -lm
-
- # for ppc Apple OS X to make universal (i386 and ppc binary), requires
-@@ -191,8 +191,6 @@
+@@ -199,8 +199,5 @@
cd ../../libip; make
- cd ../../libjpegd; make
+- cd ../../libjpegd; make
cd ../../liblilxml; make
- cd ../../libpng; make
- cd ../../libz; make
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/xephem.git/commitdiff/d3faa542fafbbeeab89981fb62f50db1bce345d8
More information about the pld-cvs-commit
mailing list