--- /dev/null
+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\r
+--- ./orig/xephem-3.7.7/GUI/xephem/auxil/mpcorb2edb.pl 2014-07-11 04:46:35.000000000 +0200\r
++++ ./patched/xephem-3.7.7/GUI/xephem/auxil/mpcorb2edb.pl 2018-01-08 02:54:53.603935652 +0100\r
+@@ -78,7 +78,7 @@\r
+ # setup cutoff mag\r
+ my $dimmag = 13; # dimmest mag to be saved in "bright" file\r
+ # set site and file in case of -f\r
+-my $MPCSITE = "http://www.minorplanetcenter.net";\r
++my $MPCSITE = "https://www.minorplanetcenter.net";\r
+ my $MPCFTPDIR = "/iau/MPCORB";\r
+ my $MPCFILE = "MPCORB.DAT";\r
+ my $MPCZIPFILE = "MPCORB.DAT.gz";\r
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/fallbacks.c ./patched/xephem-3.7.7/GUI/xephem/fallbacks.c\r
+--- ./orig/xephem-3.7.7/GUI/xephem/fallbacks.c 2015-04-09 02:20:19.000000000 +0200\r
++++ ./patched/xephem-3.7.7/GUI/xephem/fallbacks.c 2018-01-08 21:26:23.529915768 +0100\r
+@@ -747,10 +747,10 @@\r
+ "XEphem*WebDB*URL1.value: http://celestrak.com/NORAD/elements/science.txt",\r
+ "XEphem*WebDB*URL2.value: http://celestrak.com/NORAD/elements/tle-new.txt",\r
+ "XEphem*WebDB*URL3.value: http://celestrak.com/NORAD/elements/amateur.txt",\r
+- "XEphem*WebDB*URL4.value: http://www.minorplanetcenter.org/iau/Ephemerides/Comets/Soft03Cmt.txt",\r
+- "XEphem*WebDB*URL5.value: http://www.minorplanetcenter.org/iau/Ephemerides/CritList/Soft03CritList.txt",\r
+- "XEphem*WebDB*URL6.value: http://www.minorplanetcenter.org/iau/Ephemerides/Distant/Soft03Distant.txt",\r
+- "XEphem*WebDB*URL7.value: http://www.minorplanetcenter.org/iau/Ephemerides/Unusual/Soft03Unusual.txt",\r
++ "XEphem*WebDB*URL4.value: https://www.minorplanetcenter.org/iau/Ephemerides/Comets/Soft03Cmt.txt",\r
++ "XEphem*WebDB*URL5.value: https://www.minorplanetcenter.org/iau/Ephemerides/CritList/Soft03CritList.txt",\r
++ "XEphem*WebDB*URL6.value: https://www.minorplanetcenter.org/iau/Ephemerides/Distant/Soft03Distant.txt",\r
++ "XEphem*WebDB*URL7.value: https://www.minorplanetcenter.org/iau/Ephemerides/Unusual/Soft03Unusual.txt",\r
+ "XEphem*WebDB.x: 200",\r
+ "XEphem*WebDB.y: 200",\r
+ "XEphem*WeekStart.Monday.set: False",\r
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/Makefile ./patched/xephem-3.7.7/GUI/xephem/Makefile\r
+--- ./orig/xephem-3.7.7/GUI/xephem/Makefile 2015-08-09 23:36:50.000000000 +0200\r
++++ ./patched/xephem-3.7.7/GUI/xephem/Makefile 2018-01-08 21:20:45.200717791 +0100\r
+@@ -35,7 +35,7 @@\r
+ CFLAGS = $(LIBINC) $(CLDFLAGS) -O2 -Wall -I$(MOTIFI) -I/opt/X11/include\r
+ LDFLAGS = $(LIBLNK) $(CLDFLAGS) -L$(MOTIFL) -L/opt/X11/lib\r
+ XLIBS = -lXm -lXp -lXt -lXext -lXmu -lX11\r
+-LIBS = $(XLIBS) $(LIBLIB) -lm\r
++LIBS = $(XLIBS) $(LIBLIB) -lm -lssl\r
+ \r
+ # static linking on Apple using X11 libs from ports\r
+ # CC = gcc\r
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/net.h ./patched/xephem-3.7.7/GUI/xephem/net.h\r
+--- ./orig/xephem-3.7.7/GUI/xephem/net.h 2005-03-20 12:04:50.000000000 +0100\r
++++ ./patched/xephem-3.7.7/GUI/xephem/net.h 2018-01-08 19:45:27.561208366 +0100\r
+@@ -20,6 +20,13 @@\r
+ #include <sys/select.h>\r
+ #endif\r
+ \r
++#include <openssl/ssl.h>\r
++\r
++typedef struct {\r
++ int fd; //file desciptor for the underlying connection socket\r
++ SSL *ssl; //ssl connection for use with SSL_read( )and SSL_write()\r
++} XE_SSL_FD;\r
++\r
+ /* support functions */\r
+ \r
+ extern int httpGET (char *host, char *GETcmd, char msg[]);\r
+@@ -29,8 +36,11 @@\r
+ extern int recvline (int fd, char buf[], int max);\r
+ extern int recvlineb (int sock, char *buf, int size);\r
+ extern int sendbytes (int fd, unsigned char buf[], int n);\r
+-\r
+-\r
++extern int httpsGET (char *host, char *GETcmd, char msg[], XE_SSL_FD *ssl_fd);\r
++extern int ssl_recvbytes (XE_SSL_FD *ssl_fd, unsigned char buf[], int n);\r
++extern int ssl_readbytes (XE_SSL_FD *ssl_fd, unsigned char buf[], int n);\r
++extern int ssl_recvline (XE_SSL_FD *ssl_fd, char buf[], int max);\r
++extern int ssl_recvlineb (XE_SSL_FD *ssl_fd, char *buf, int size);\r
+ \r
+ /* For RCS Only -- Do Not Edit\r
+ * @(#) $RCSfile: net.h,v $ $Date: 2003/03/17 07:26:21 $ $Revision: 1.3 $ $Name: $\r
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/netmenu.c ./patched/xephem-3.7.7/GUI/xephem/netmenu.c\r
+--- ./orig/xephem-3.7.7/GUI/xephem/netmenu.c 2010-10-06 23:12:40.000000000 +0200\r
++++ ./patched/xephem-3.7.7/GUI/xephem/netmenu.c 2018-01-08 22:02:16.090940142 +0100\r
+@@ -9,6 +9,8 @@\r
+ #include <string.h>\r
+ #include <unistd.h>\r
+ \r
++#include <openssl/ssl.h>\r
++\r
+ #include <Xm/Form.h>\r
+ #include <Xm/Label.h>\r
+ #include <Xm/PushB.h>\r
+@@ -70,12 +72,24 @@\r
+ \r
+ static char netcategory[] = "Network"; /* Save category */\r
+ \r
++static SSL_METHOD *ssl_method; /* global ssl dispatch structure for creating a ssl context */\r
++static SSL_CTX *ssl_ctx; /* global ssl context structure for creating ssl connections */\r
++\r
+ /* call to set up without actually bringing up the menus.\r
+ */\r
+ void\r
+ net_create()\r
+ {\r
+ if (!netshell_w) {\r
++ if (SSL_library_init() < 0) {\r
++ fprintf (stderr, "Could not initialize the OpenSSL library !\n");\r
++ } else {\r
++ ssl_method = SSLv23_client_method(); /* deprecated since openssl 1.1.x */\r
++// ssl_method = TLS_client_method(); /* since openssl 1.1.x */\r
++ ssl_ctx = SSL_CTX_new (ssl_method);\r
++ SSL_CTX_set_options (ssl_ctx, SSL_OP_NO_SSLv2);\r
++ };\r
++\r
+ net_create_form();\r
+ (void) net_save(); /* confirming here is just annoying */\r
+ }\r
+@@ -251,8 +265,8 @@\r
+ struct {\r
+ unsigned char VN; /* version number */\r
+ unsigned char CD; /* command code */\r
+- unsigned short DSTPORT; /* destination port */\r
+- unsigned long DSTIP; /* destination IP addres */\r
++ uint16_t DSTPORT; /* destination port */\r
++ uint32_t DSTIP; /* destination IP address */\r
+ } SocksPacket;\r
+ \r
+ struct hostent *hs = gethostbyname (socks_host);\r
+@@ -390,7 +404,7 @@\r
+ \r
+ /* read up to and including the next '\n' from socket fd into buf[max].\r
+ * we silently ignore all '\r'. we add a trailing '\0'.\r
+- * return line lenth (not counting \0) if all ok, else -1.\r
++ * return line length (not counting \0) if all ok, else -1.\r
+ * N.B. this never reads ahead -- if that's ok, recvlineb() is better\r
+ */\r
+ int\r
+@@ -445,6 +459,216 @@\r
+ if (nr <= 0) {\r
+ ok = nr;\r
+ rb_next = 0;\r
++ rb_unk = 0;\r
++ break;\r
++ }\r
++ rb_next = 0;\r
++ rb_unk = nr;\r
++ }\r
++\r
++ if ((c = rb_linebuf[rb_next++]) != '\r')\r
++ *buf++ = c;\r
++\r
++ } while (buf-origbuf < size && c != '\n');\r
++\r
++ /* always give back a real line regardless, else status */\r
++ if (ok > 0) {\r
++ *buf = '\0';\r
++ ok = buf - origbuf;\r
++ }\r
++\r
++ return (ok);\r
++}\r
++\r
++/* open the host, do the given GET cmd, and return a socket fd for the result.\r
++ * on success it fills the XE_SSL_FD structure for later use by SSL_read() and necessary cleanup.\r
++ * return -1 and with excuse in msg[], else 0 if ok.\r
++ * N.B. can be called before we are created if net set in app defaults.\r
++ */\r
++int\r
++httpsGET (char *host, char *GETcmd, char msg[], XE_SSL_FD *ssl_fd)\r
++{\r
++ char buf[2048];\r
++ int fd;\r
++ int connected;\r
++ SSL *ssl;\r
++ int n;\r
++ int ret;\r
++ int httpsport = 443;\r
++\r
++ /* open connection */\r
++ if (proxy_on) {\r
++ fd = mkconnection (proxy_host, proxy_port, msg);\r
++ if (fd < 0)\r
++ return (-1);\r
++\r
++ /* fill buf with CONNECT */\r
++ (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);\r
++\r
++ /* add proxy auth if enabled */\r
++ if (!auth_w)\r
++ net_create_form();\r
++ if (XmToggleButtonGetState (auth_w))\r
++ addAuth(buf);\r
++\r
++ /* log it */\r
++ xe_msg (0, "https proxy connect: %s", buf);\r
++\r
++ /* send it */\r
++ n = strlen (buf);\r
++ if (sendbytes(fd, (unsigned char *)buf, n) < 0) {\r
++ (void) sprintf (msg, "%s: send error: %s", proxy_host, syserrstr());\r
++ (void) close (fd);\r
++ return (-1);\r
++ }\r
++\r
++ connected = 0;\r
++ while (recvline (fd, buf, sizeof(buf)) > 1) {\r
++ xe_msg (0, "Rcv: %s", buf);\r
++ if (strstr (buf, "200 "))\r
++ connected = 1;\r
++ }\r
++ if (!connected) {\r
++ (void) sprintf (msg, "%s: connect error: %s", proxy_host, syserrstr());\r
++ (void) close (fd);\r
++ return (-1);\r
++ }\r
++ } else {\r
++ /* SOCKS or direct are both handled by mkconnection() */\r
++ fd = mkconnection (host, httpsport, msg);\r
++ if (fd < 0)\r
++ return (-1);\r
++ }\r
++\r
++ /* fill buf with GETcmd */\r
++ (void) sprintf (buf, "%s", GETcmd);\r
++\r
++ /* start ssl connection */\r
++ ssl = SSL_new (ssl_ctx);\r
++ SSL_set_fd (ssl, fd);\r
++ SSL_connect (ssl);\r
++\r
++ /* log it */\r
++ xe_msg (0, "https: %s", buf);\r
++\r
++ /* send it */\r
++ n = strlen (buf);\r
++ ret = SSL_write (ssl, (unsigned char *)buf, n);\r
++ if (ret <= 0) {\r
++ (void) sprintf (msg, "%s: ssl send error code: %d", host, SSL_get_error (ssl, ret));\r
++ (void) SSL_free (ssl);\r
++ (void) close (fd);\r
++ return (-1);\r
++ }\r
++\r
++ /* caller can read response */\r
++ ssl_fd->fd = fd;\r
++ ssl_fd->ssl = ssl;\r
++ return (fd);\r
++}\r
++\r
++/* receive exactly n bytes from ssl connection ssl_fd into buf.\r
++ * return -1, 0 or n.\r
++ * N.B. with fallback to ordinary read from socket if ssl_fd->ssl is NULL\r
++ */\r
++int\r
++ssl_recvbytes (XE_SSL_FD *ssl_fd, unsigned char buf[], int n)\r
++{\r
++ int ns, tot;\r
++\r
++ for (tot = 0; tot < n; tot += ns) {\r
++ if (tout (TOUT, ssl_fd->fd, 0) < 0)\r
++ return (-1);\r
++ if (ssl_fd->ssl)\r
++ ns = SSL_read (ssl_fd->ssl, (void *)(buf+tot), n-tot);\r
++ else\r
++ ns = read (ssl_fd->fd, (void *)(buf+tot), n-tot);\r
++ if (ns <= 0)\r
++ return (ns);\r
++ }\r
++ return (n);\r
++}\r
++\r
++/* like read(2) except we time out and allow user to cancel.\r
++ * receive up to n bytes from ssl connection ssl_fd into buf.\r
++ * return count, or 0 on eof or -1 on error.\r
++ * N.B. with fallback to ordinary read from socket if ssl_fd->ssl is NULL\r
++ */\r
++int\r
++ssl_readbytes (XE_SSL_FD *ssl_fd, unsigned char buf[], int n)\r
++{\r
++ int ns;\r
++\r
++ if (tout (TOUT, ssl_fd->fd, 0) < 0)\r
++ return (-1);\r
++ if (ssl_fd->ssl)\r
++ ns = SSL_read (ssl_fd->ssl, (void *)buf, n);\r
++ else\r
++ ns = read (ssl_fd->fd, (void *)buf, n);\r
++ return (ns);\r
++}\r
++\r
++/* read up to and including the next '\n' from ssl into buf[max].\r
++ * we silently ignore all '\r'. we add a trailing '\0'.\r
++ * return line length (not counting \0) if all ok, else -1.\r
++ * N.B. with fallback to ordinary read from socket if ssl_fd->ssl is NULL\r
++ */\r
++int\r
++ssl_recvline (XE_SSL_FD *ssl_fd, char buf[], int max)\r
++{\r
++ unsigned char c;\r
++ int n;\r
++\r
++ max--; /* leave room for trailing \0 */\r
++\r
++ for (n = 0; n < max && ssl_recvbytes (ssl_fd, &c, 1) == 1; ) {\r
++ if (c != '\r') {\r
++ buf[n++] = c;\r
++ if (c == '\n') {\r
++ buf[n] = '\0';\r
++ return (n);\r
++ }\r
++ }\r
++ }\r
++\r
++ return (-1);\r
++}\r
++\r
++/* rather like ssl_recvline but reads ahead in big chunk for efficiency.\r
++ * return length if read a line ok, 0 if hit eof, -1 if error.\r
++ * N.B. we silently swallow all '\r'.\r
++ * N.B. we read ahead and can hide bytes after each call.\r
++ * N.B. with fallback to ordinary read from socket if ssl_fd->ssl is NULL\r
++ */\r
++int\r
++ssl_recvlineb (XE_SSL_FD *ssl_fd, char *buf, int size)\r
++{\r
++ char *origbuf = buf; /* save to prevent overfilling buf */\r
++ char c = '\0';\r
++ int ok = 1;\r
++\r
++ /* always leave room for trailing \n */\r
++ size -= 1;\r
++\r
++ /* read and copy linebuf[next] to buf until buf fills or copied a \n */\r
++ do {\r
++\r
++ if (rb_next >= rb_unk) {\r
++ /* linebuf is empty -- refill */\r
++\r
++ int nr;\r
++\r
++ if (tout (TOUT, ssl_fd->fd, 0) < 0) {\r
++ nr = -1;\r
++ break;\r
++ }\r
++ if (ssl_fd->ssl)\r
++ nr = SSL_read (ssl_fd->ssl, rb_linebuf, sizeof(rb_linebuf));\r
++ else\r
++ nr = read (ssl_fd->fd, rb_linebuf, sizeof(rb_linebuf));\r
++ if (nr <= 0) {\r
++ ok = nr;\r
++ rb_next = 0;\r
+ rb_unk = 0;\r
+ break;\r
+ }\r
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/sunmenu.c ./patched/xephem-3.7.7/GUI/xephem/sunmenu.c\r
+--- ./orig/xephem-3.7.7/GUI/xephem/sunmenu.c 2012-04-02 00:38:50.000000000 +0200\r
++++ ./patched/xephem-3.7.7/GUI/xephem/sunmenu.c 2018-01-08 22:09:43.585825210 +0100\r
+@@ -884,9 +884,11 @@\r
+ int isjpeg, jpegl;\r
+ int njpeg;\r
+ unsigned char *jpeg;\r
++ XE_SSL_FD ssl_fd;\r
+ int fd, nr;\r
+ struct tm tm;\r
+ \r
++ memset(&ssl_fd, 0, sizeof(ssl_fd));\r
+ memset(&tm, 0, sizeof(struct tm));\r
+ \r
+ /* get desired type and size */\r
+@@ -899,18 +901,18 @@\r
+ \r
+ /* build GET command */\r
+ sprintf (get, "GET http://%s%s HTTP/1.0\r\nUser-Agent: xephem/%s\r\n\r\n", sohohost, fn, PATCHLEVEL);\r
+-\r
++ \r
+ /* query server */\r
+- fd = httpGET (sohohost, get, buf);\r
++ fd = httpsGET (sohohost, get, buf, &ssl_fd);\r
+ if (fd < 0) {\r
+- xe_msg (1, "http get: %s", buf);\r
++ xe_msg (1, "https get: %s", buf);\r
+ return (-1);\r
+ }\r
+ \r
+ /* read header (everything to first blank line), looking for jpeg */\r
+ isjpeg = 0;\r
+ jpegl = 0;\r
+- while (recvline (fd, buf, sizeof(buf)) > 1) {\r
++ while (ssl_recvline (&ssl_fd, buf, sizeof(buf)) > 1) {\r
+ xe_msg (0, "Rcv: %s", buf);\r
+ if (strstr (buf, "Content-Type:") && strstr (buf, "image/jpeg"))\r
+ isjpeg = 1;\r
+@@ -923,15 +925,17 @@\r
+ }\r
+ }\r
+ if (!isjpeg) {\r
+- while (recvline (fd, buf, sizeof(buf)) > 0)\r
++ while (ssl_recvline (&ssl_fd, buf, sizeof(buf)) > 0)\r
+ xe_msg (0, "Rcv: %s", buf);\r
+ xe_msg (1, "Error talking to SOHO .. see File->System log\n");\r
+- close (fd);\r
++ SSL_free (ssl_fd.ssl);\r
++ close (ssl_fd.fd);\r
+ return (-1);\r
+ }\r
+ if (jpegl == 0) {\r
+ xe_msg (1, "No Content-Length in header");\r
+- close (fd);\r
++ SSL_free (ssl_fd.ssl);\r
++ close (ssl_fd.fd);\r
+ return (-1);\r
+ }\r
+ \r
+@@ -941,20 +945,22 @@\r
+ for (njpeg = 0; njpeg < jpegl; njpeg += nr) {\r
+ pm_set (100*njpeg/jpegl);\r
+ jpeg = (unsigned char *) XtRealloc ((char*)jpeg, njpeg+NSREAD);\r
+- nr = readbytes (fd, jpeg+njpeg, NSREAD);\r
+- if (nr < 0) {\r
+- xe_msg (1, "%s:\n%s", sohohost, syserrstr());\r
++ nr = SSL_read (ssl_fd.ssl, jpeg+njpeg, NSREAD);\r
++ if (nr <= 0) {\r
++ xe_msg (1, "%s: ssl read error code: %d", sohohost, SSL_get_error(ssl_fd.ssl, nr));\r
+ pm_down();\r
+- close (fd);\r
++ SSL_free (ssl_fd.ssl);\r
++ close (ssl_fd.fd);\r
+ return (-1);\r
+ }\r
+ if (nr == 0)\r
+ break;\r
+ }\r
+ pm_down();\r
+- close (fd);\r
++ SSL_free (ssl_fd.ssl);\r
++ close (ssl_fd.fd);\r
+ \r
+- sprintf (fn, "/%s_%s.jpg", filetime, filetype);\r
++ sprintf (fn, "/%s_%s.jpg", filetime, filetype);\r
+ /* display jpeg */\r
+ if (displayPic (fn, jpeg, njpeg) < 0)\r
+ return (-1);\r
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/ucac.c ./patched/xephem-3.7.7/GUI/xephem/ucac.c\r
+--- ./orig/xephem-3.7.7/GUI/xephem/ucac.c 2013-03-02 03:41:37.000000000 +0100\r
++++ ./patched/xephem-3.7.7/GUI/xephem/ucac.c 2018-01-08 21:53:08.398538689 +0100\r
+@@ -18,15 +18,15 @@\r
+ \r
+ #define MAXFOV 15.0 /* max fov, degs */\r
+ \r
+-typedef unsigned char UC; /* byte */\r
+-typedef unsigned int UI; /* unsigned integer */\r
++typedef unsigned char XE_UC; /* byte */\r
++typedef unsigned int XE_UI; /* unsigned integer */\r
+ \r
+ /* access an I*2 or I*4 at offset i in UC array a in little-endian byte order.\r
+ * a bit slow but ultra portable.\r
+ */\r
+-#define I2(a,i) ((int)(short)((((UI)(a)[i]) | (((UI)(a)[i+1])<<8))))\r
+-#define I4(a,i) ((int)((((UI)(a)[i]) | (((UI)(a)[i+1])<<8) | \\r
+- (((UI)(a)[i+2])<<16) | (((UI)(a)[i+3])<<24))))\r
++#define I2(a,i) ((int)(short)((((XE_UI)(a)[i]) | (((XE_UI)(a)[i+1])<<8))))\r
++#define I4(a,i) ((int)((((XE_UI)(a)[i]) | (((XE_UI)(a)[i+1])<<8) | \\r
++ (((XE_UI)(a)[i+2])<<16) | (((XE_UI)(a)[i+3])<<24))))\r
+ \r
+ /* keep track of an array of ObjF */\r
+ typedef struct {\r
+@@ -48,9 +48,9 @@\r
+ \r
+ #define DPMAS (1.0/3600000.0) /* degrees per milliarcsecond */\r
+ \r
+-typedef UC U2Star[44]; /* UCAC2 record */\r
+-typedef UC U3Star[84]; /* UCAC3 record */\r
+-typedef UC U4Star[78]; /* UCAC4 record */\r
++typedef XE_UC U2Star[44]; /* UCAC2 record */\r
++typedef XE_UC U3Star[84]; /* UCAC3 record */\r
++typedef XE_UC U4Star[78]; /* UCAC4 record */\r
+ static char *basedir; /* full dir with zone files and index */\r
+ static FILE *indexfp; /* index file handle */\r
+ \r
+@@ -293,7 +293,7 @@\r
+ read4Index (int rz, int dz, int *nskip, int *nnew)\r
+ {\r
+ off_t offset;\r
+- UC i4[4];\r
++ XE_UC i4[4];\r
+ \r
+ offset = (rz*NZH4 + dz)*sizeof(i4);\r
+ if (fseek (indexfp, offset, SEEK_SET) < 0) {\r
+@@ -508,7 +508,7 @@\r
+ read3Index (int rz, int dz, int *nskip, int *nnew)\r
+ {\r
+ off_t offset;\r
+- UC i4[4];\r
++ XE_UC i4[4];\r
+ \r
+ offset = (rz*NZH + dz)*sizeof(i4);\r
+ if (fseek (indexfp, offset, SEEK_SET) < 0) {\r
+@@ -663,7 +663,7 @@\r
+ get2N (int rz, int dz, int *idp)\r
+ {\r
+ off_t offset;\r
+- UC nat[4];\r
++ XE_UC nat[4];\r
+ \r
+ offset = (dz*NZW + rz)*sizeof(nat);\r
+ if (fseek (indexfp, offset, SEEK_SET) < 0)\r
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/usno.c ./patched/xephem-3.7.7/GUI/xephem/usno.c\r
+--- ./orig/xephem-3.7.7/GUI/xephem/usno.c 2005-03-20 12:04:51.000000000 +0100\r
++++ ./patched/xephem-3.7.7/GUI/xephem/usno.c 2016-10-26 18:59:16.469149437 +0200\r
+@@ -14,8 +14,8 @@\r
+ #define CATBPR 12 /* bytes per star record in .cat file */\r
+ #define ACCBPR 30 /* bytes per record in .acc file */\r
+ \r
+-typedef unsigned int UI;\r
+-typedef unsigned char UC;\r
++typedef unsigned int XE_UI;\r
++typedef unsigned char XE_UC;\r
+ \r
+ /* One Field star */\r
+ typedef struct {\r
+@@ -36,7 +36,7 @@\r
+ double lr[2], int *nd, double fd[2], double ld[2], int zone[2], char msg[]);\r
+ static int fetchSwath (int zone, double maxmag, double fr, double lr,\r
+ double fd, double ld, StarArray *sap, char msg[]);\r
+-static int crackCatBuf (UC buf[CATBPR], FieldStar *fsp);\r
++static int crackCatBuf (XE_UC buf[CATBPR], FieldStar *fsp);\r
+ static int addGS (StarArray *sap, FieldStar *fsp);\r
+ \r
+ static char *cdpath; /* where CD rom is mounted */\r
+@@ -236,7 +236,7 @@\r
+ {\r
+ char fn[1024];\r
+ char buf[ACCBPR];\r
+- UC catbuf[CATBPR];\r
++ XE_UC catbuf[CATBPR];\r
+ FieldStar fs;\r
+ long frec;\r
+ long os;\r
+@@ -314,13 +314,13 @@\r
+ * return 0 if ok, else -1.\r
+ */\r
+ static int\r
+-crackCatBuf (UC buf[CATBPR], FieldStar *fsp)\r
++crackCatBuf (XE_UC buf[CATBPR], FieldStar *fsp)\r
+ {\r
+-#define BEUPACK(b) (((UI)((b)[0])<<24) | ((UI)((b)[1])<<16) | ((UI)((b)[2])<<8)\\r
+- | ((UI)((b)[3])))\r
++#define BEUPACK(b) (((XE_UI)((b)[0])<<24) | ((XE_UI)((b)[1])<<16) | ((XE_UI)((b)[2])<<8)\\r
++ | ((XE_UI)((b)[3])))\r
+ double ra, dec;\r
+ int red, blu;\r
+- UI mag;\r
++ XE_UI mag;\r
+ \r
+ /* first 4 bytes are packed RA, big-endian */\r
+ ra = BEUPACK(buf)/(100.0*3600.0*15.0);\r
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/webdbmenu.c ./patched/xephem-3.7.7/GUI/xephem/webdbmenu.c\r
+--- ./orig/xephem-3.7.7/GUI/xephem/webdbmenu.c 2012-11-23 06:22:09.000000000 +0100\r
++++ ./patched/xephem-3.7.7/GUI/xephem/webdbmenu.c 2018-01-08 21:58:01.975042039 +0100\r
+@@ -404,6 +404,10 @@\r
+ char *url;\r
+ {\r
+ static char http[] = "http://";\r
++ static char https[] = "https://";\r
++ char *transport = http;\r
++ int ltransport = strlen (transport);\r
++ int ishttp = 0;\r
+ char buf[512], msg[1024];\r
+ char l0[512], l1[512], l2[512];\r
+ char *l0p = l0, *l1p = l1, *l2p = l2;\r
+@@ -411,21 +415,31 @@\r
+ char *slash, *dot;\r
+ char filename[256];\r
+ FILE *fp;\r
++ XE_SSL_FD ssl_fd;\r
+ int sockfd;\r
+ int nfound;\r
+ \r
++ memset(&ssl_fd, 0, sizeof(ssl_fd));\r
++\r
+ /* start */\r
+ watch_cursor(1);\r
+ l0[0] = l1[0] = l2[0] = '\0';\r
+ \r
+ /* find transport and host */\r
+- if (strncmp (url, http, 7)) {\r
+- xe_msg (1, "URL must begin with %s", http);\r
++ if (!strncmp (url, transport, ltransport)) {\r
++ ishttp = 1;\r
++ } else {\r
++ transport = https;\r
++ ltransport = strlen (transport);\r
++ }\r
++\r
++ if ((!ishttp) && (strncmp (url, transport, ltransport))) {\r
++ xe_msg (1, "URL must begin with %s or %s", http, https);\r
+ watch_cursor (0);\r
+ return;\r
+ }\r
+ \r
+- slash = strchr (url+7, '/');\r
++ slash = strchr (url+ltransport, '/');\r
+ dot = strrchr (url, '.');\r
+ if (!slash || !dot) {\r
+ xe_msg (1, "Badly formed URL");\r
+@@ -434,11 +448,16 @@\r
+ }\r
+ \r
+ /* connect to check url */\r
+- sprintf (host, "%.*s", (int)(slash-url-7), url+7);\r
++ sprintf (host, "%.*s", (int)(slash-url-ltransport), url+ltransport);\r
+ sprintf (buf, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nUser-Agent: xephem/%s\r\n\r\n",\r
+ url, host, PATCHLEVEL);\r
+ stopd_up();\r
+- sockfd = httpGET (host, buf, msg);\r
++ if (ishttp) {\r
++ sockfd = httpGET (host, buf, msg);\r
++ ssl_fd.fd = sockfd;\r
++ } else {\r
++ sockfd = httpsGET (host, buf, msg, &ssl_fd);\r
++ }\r
+ if (sockfd < 0) {\r
+ xe_msg (1, "http GET to %s failed: %s%s\n", host, buf, msg);\r
+ stopd_down();\r
+@@ -447,20 +466,22 @@\r
+ }\r
+ \r
+ /* create local file */\r
+- slash = strrchr (url+7, '/');\r
++ slash = strrchr (url+ltransport, '/');\r
+ sprintf (filename, "%s/%.*sedb", getPrivateDir(), (int)(dot-slash), slash+1);\r
+ fp = fopen (filename, "w");\r
+ if (!fp) {\r
+ xe_msg (1, "%s:\n%s", filename, syserrstr());\r
+ watch_cursor (0);\r
+- close (sockfd);\r
++ if (!ishttp)\r
++ SSL_free (ssl_fd.ssl);\r
++ close (ssl_fd.fd);\r
+ return;\r
+ }\r
+ \r
+ /* copy to file, insuring only .edb lines.\r
+ */\r
+ nfound = 0;\r
+- while (recvlineb (sockfd, l2p, sizeof(l2)) > 0) {\r
++ while (ssl_recvlineb (&ssl_fd, l2p, sizeof(l2)) > 0) {\r
+ char *lrot;\r
+ Obj o;\r
+ \r
+@@ -484,7 +505,9 @@\r
+ \r
+ /* tidy up and done */\r
+ fclose (fp);\r
+- close (sockfd);\r
++ if (!ishttp)\r
++ SSL_free (ssl_fd.ssl);\r
++ close (ssl_fd.fd);\r
+ if (!nfound) {\r
+ xe_msg (1, "No objects in file");\r
+ remove (filename);\r
+diff -Naur ./orig/xephem-3.7.7/GUI/xephem/xephem.h ./patched/xephem-3.7.7/GUI/xephem/xephem.h\r
+--- ./orig/xephem-3.7.7/GUI/xephem/xephem.h 2012-12-30 18:01:12.000000000 +0100\r
++++ ./patched/xephem-3.7.7/GUI/xephem/xephem.h 2016-10-26 20:09:47.000000000 +0200\r
+@@ -12,12 +12,12 @@\r
+ \r
+ #include <stdarg.h> /* be kind to those who don't use xe_msg() */\r
+ \r
++#include "net.h" /* has to be included before astro.h because of openssl */\r
+ #include "astro.h"\r
+ #include "ip.h"\r
+ \r
+ /* local glue files */\r
+ #include "map.h"\r
+-#include "net.h"\r
+ #include "patchlevel.h"\r
+ #include "preferences.h"\r
+ #include "db.h"\r
# 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
%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
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"
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}
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
%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}/*