diff --git a/.gitignore b/.gitignore index 56d72f4..abca92d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ screen-4.0.3.tar.gz /screen-20110819git450e8f.tar.bz2 /screen-20120314git3c2946.tar.bz2 /screen-4.2.1.tar.gz +/screen-4.3.1.tar.gz diff --git a/screen-4.2.1-crypt.patch b/screen-4.3.1-crypt.patch similarity index 100% rename from screen-4.2.1-crypt.patch rename to screen-4.3.1-crypt.patch diff --git a/screen-4.0.3-libs.patch b/screen-4.3.1-libs.patch similarity index 68% rename from screen-4.0.3-libs.patch rename to screen-4.3.1-libs.patch index a548787..4d98da8 100644 --- a/screen-4.0.3-libs.patch +++ b/screen-4.3.1-libs.patch @@ -1,18 +1,18 @@ -diff -up screen-4.0.3/configure.in.libs screen-4.0.3/configure.in ---- screen-4.0.3/configure.in.libs 2003-06-03 13:58:24.000000000 +0200 -+++ screen-4.0.3/configure.in 2008-02-26 13:58:29.000000000 +0100 -@@ -196,7 +196,9 @@ AC_EGREP_CPP(yes, +diff --git a/configure.ac b/configure.ac +index ffe2e37..768f762 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -203,7 +203,8 @@ AC_EGREP_CPP(yes, ], LIBS="$LIBS -lsocket -linet";seqptx=1) oldlibs="$LIBS" -LIBS="$LIBS -lelf" -+# Humm we don't actually need to link against libelf for linux -+#LIBS="$LIBS -lelf" ++# Humm we don't actually need to link against libelf for Linux +LIBS="$LIBS" AC_CHECKING(SVR4) AC_TRY_LINK([#include ],, -@@ -643,14 +645,10 @@ dnl +@@ -657,14 +658,10 @@ dnl AC_CHECKING(for tgetent) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, olibs="$LIBS" @@ -29,16 +29,16 @@ diff -up screen-4.0.3/configure.in.libs screen-4.0.3/configure.in ],, LIBS="-ltermcap $olibs" AC_CHECKING(libtermcap) -@@ -666,7 +664,7 @@ AC_MSG_ERROR(!!! no tgetent - no screen) +@@ -689,7 +686,7 @@ AC_MSG_ERROR(!!! no tgetent - no screen))))))))) AC_TRY_RUN([ main() { - exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); -+ return 1; ++ return 1; }], AC_NOTE(- you use the termcap database), AC_NOTE(- you use the terminfo database) AC_DEFINE(TERMINFO)) AC_CHECKING(ospeed) -@@ -864,9 +862,6 @@ fi +@@ -887,9 +884,6 @@ fi dnl dnl **** loadav **** dnl diff --git a/screen-4.0.3-screenrc.patch b/screen-4.3.1-screenrc.patch similarity index 100% rename from screen-4.0.3-screenrc.patch rename to screen-4.3.1-screenrc.patch diff --git a/screen-4.1.0-suppress_remap.patch b/screen-4.3.1-suppress_remap.patch similarity index 100% rename from screen-4.1.0-suppress_remap.patch rename to screen-4.3.1-suppress_remap.patch diff --git a/screen-ipv6.patch b/screen-ipv6.patch deleted file mode 100644 index 176b310..0000000 --- a/screen-ipv6.patch +++ /dev/null @@ -1,348 +0,0 @@ -diff --git a/doc/screen.1 b/doc/screen.1 -index fd5c06e..3703596 100644 ---- a/doc/screen.1 -+++ b/doc/screen.1 -@@ -403,6 +403,13 @@ several screen sessions running. You can use the \fB-d\fP or - \fB-r\fP option to tell screen to look only for attached or - detached screen sessions. Note that this command doesn't work if - the session is password protected. -+.TP 5 -+.B \-4 -+Resolve hostnames only to IPv4 addresses. -+.TP 5 -+.B \-6 -+Resolve hostnames only to IPv6 addresses. -+ - - .SH "DEFAULT KEY BINDINGS" - .ta 12n 26n -diff --git a/extern.h b/extern.h -index a3e3ca2..9b564e6 100644 ---- a/extern.h -+++ b/extern.h -@@ -459,8 +459,7 @@ extern void LayProcessMouseSwitch __P((struct layer *, int)); - - /* teln.c */ - #ifdef BUILTIN_TELNET --extern int TelOpen __P((char **)); --extern int TelConnect __P((struct win *)); -+extern int TelOpenAndConnect __P((struct win *)); - extern int TelIsline __P((struct win *p)); - extern void TelProcessLine __P((char **, int *)); - extern int DoTelnet __P((char *, int *, int)); -diff --git a/help.c b/help.c -index 8446f34..a2b8614 100644 ---- a/help.c -+++ b/help.c -@@ -66,6 +66,10 @@ char *myname, *message, *arg; - { - printf("Use: %s [-opts] [cmd [args]]\n", myname); - printf(" or: %s -r [host.tty]\n\nOptions:\n", myname); -+#ifdef BUILTIN_TELNET -+ printf("-4 Resolve hostnames only to IPv4 addresses.\n"); -+ printf("-6 Resolve hostnames only to IPv6 addresses.\n"); -+#endif - printf("-a Force all capabilities into each window's termcap.\n"); - printf("-A -[r|R] Adapt all windows to the new display width & height.\n"); - printf("-c file Read configuration file instead of '.screenrc'.\n"); -diff --git a/screen.c b/screen.c -index 473e4fa..c193f46 100644 ---- a/screen.c -+++ b/screen.c -@@ -250,6 +250,10 @@ struct win *windows; - struct win *console_window; - - -+#ifdef BUILTIN_TELNET -+int af; -+#endif -+ - - /* - * Do this last -@@ -507,6 +511,9 @@ char **av; - nwin = nwin_undef; - nwin_options = nwin_undef; - strcpy(screenterm, "screen"); -+#ifdef BUILTIN_TELNET -+ af = AF_UNSPEC; -+#endif - - logreopen_register(lf_secreopen); - -@@ -541,6 +548,14 @@ char **av; - { - switch (*ap) - { -+#ifdef BUILTIN_TELNET -+ case '4': -+ af = AF_INET; -+ break; -+ case '6': -+ af = AF_INET6; -+ break; -+#endif - case 'a': - nwin_options.aflag = 1; - break; -diff --git a/teln.c b/teln.c -index 1764dbc..5f0cb0b 100644 ---- a/teln.c -+++ b/teln.c -@@ -30,6 +30,7 @@ - #include - #include - #include -+#include - - #include "config.h" - -@@ -42,12 +43,14 @@ extern struct win *fore; - extern struct layer *flayer; - extern int visual_bell; - extern char screenterm[]; -+extern int af; - - static void TelReply __P((struct win *, char *, int)); - static void TelDocmd __P((struct win *, int, int)); - static void TelDosub __P((struct win *)); - --#define TEL_DEFPORT 23 -+// why TEL_DEFPORT has " -+#define TEL_DEFPORT "23" - #define TEL_CONNECTING (-2) - - #define TC_IAC 255 -@@ -105,86 +108,76 @@ char *data; - } - - int --TelOpen(args) --char **args; --{ -- int fd; -- int on = 1; -- -- if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) -- { -- Msg(errno, "TelOpen: socket"); -- return -1; -- } -- if (setsockopt(fd, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on))) -- Msg(errno, "TelOpen: setsockopt SO_OOBINLINE"); -- return fd; --} -- --int --TelConnect(p) --struct win *p; --{ -- int port = TEL_DEFPORT; -- struct hostent *hp; -- char **args; -+TelOpenAndConnect(struct win *p) { -+ int fd, on = 1; -+ struct addrinfo hints, *res0, *res; - char buf[256]; - -- args = p->w_cmdargs + 1; -- -- if (!*args) -- { -- Msg(0, "Usage: screen //telnet host [port]"); -- return -1; -+ if (!(p->w_cmdargs[1])) { -+ Msg(0, "Usage: screen //telnet host [port]"); -+ return -1; -+ } -+ -+ memset(&hints, 0, sizeof(hints)); -+ hints.ai_family = af; -+ hints.ai_socktype = SOCK_STREAM; -+ hints.ai_protocol = IPPROTO_TCP; -+ if(getaddrinfo(p->w_cmdargs[1], p->w_cmdargs[2] ? p->w_cmdargs[2] : TEL_DEFPORT, -+ &hints, &res0)) { -+ Msg(0, "unknown host: %s", p->w_cmdargs[1]); -+ return -1; -+ } -+ -+ for(res = res0; res; res = res->ai_next) { -+ if((fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1) { -+ if(res->ai_next) -+ continue; -+ else { -+ Msg(errno, "TelOpenAndConnect: socket"); -+ freeaddrinfo(res0); -+ return -1; -+ } - } -- if (args[1]) -- port = atoi(args[1]); -- p->w_telsa.sin_family = AF_INET; -- if((p->w_telsa.sin_addr.s_addr = inet_addr(*args)) == -1) -- { -- if ((hp = gethostbyname(*args)) == NULL) -- { -- Msg(0, "unknown host: %s", *args); -- return -1; -- } -- if (hp->h_length != sizeof(p->w_telsa.sin_addr.s_addr) || hp->h_addrtype != AF_INET) -- { -- Msg(0, "Bad address type for %s", hp->h_name); -- return -1; -- } -- bcopy((char *)hp->h_addr,(char *)&p->w_telsa.sin_addr.s_addr, hp->h_length); -- p->w_telsa.sin_family = hp->h_addrtype; -- } -- p->w_telsa.sin_port = htons(port); -- if (port != TEL_DEFPORT) -- sprintf(buf, "Trying %s %d...", inet_ntoa(p->w_telsa.sin_addr), port); -- else -- sprintf(buf, "Trying %s...", inet_ntoa(p->w_telsa.sin_addr)); -- WriteString(p, buf, strlen(buf)); -- if (connect(p->w_ptyfd, (struct sockaddr *)&p->w_telsa, sizeof(p->w_telsa))) -- { -- if (errno == EINPROGRESS) -- { -- p->w_telstate = TEL_CONNECTING; -- p->w_telconnev.fd = p->w_ptyfd; -- p->w_telconnev.handler = tel_connev_fn; -- p->w_telconnev.data = (char *)p; -- p->w_telconnev.type = EV_WRITE; -- p->w_telconnev.pri = 1; -- debug("telnet connect in progress...\n"); -- evenq(&p->w_telconnev); -- } -- else -- { -- Msg(errno, "TelOpen: connect"); -- return -1; -- } -+ if (setsockopt(fd, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on))) -+ Msg(errno, "TelOpenAndConnect: setsockopt SO_OOBINLINE"); -+ -+ if (p->w_cmdargs[2] && strcmp(p->w_cmdargs[2], TEL_DEFPORT)) -+ snprintf(buf, 256, "Trying %s %s...", p->w_cmdargs[1], p->w_cmdargs[2]); -+ else -+ snprintf(buf, 256, "Trying %s...", p->w_cmdargs[1]); -+ WriteString(p, buf, strlen(buf)); -+ if (connect(fd, res->ai_addr, res->ai_addrlen)) { -+ if (errno == EINPROGRESS) { -+ p->w_telstate = TEL_CONNECTING; -+ p->w_telconnev.fd = fd; -+ p->w_telconnev.handler = tel_connev_fn; -+ p->w_telconnev.data = (char *)p; -+ p->w_telconnev.type = EV_WRITE; -+ p->w_telconnev.pri = 1; -+ debug("telnet connect in progress...\n"); -+ evenq(&p->w_telconnev); -+ } -+ else { -+ close(fd); -+ if(res->ai_next) -+ continue; -+ else { -+ Msg(errno, "TelOpenAndConnect: connect"); -+ freeaddrinfo(res0); -+ return -1; -+ } -+ } - } -- else -- WriteString(p, "connected.\r\n", 12); -- if (port == TEL_DEFPORT) -- TelReply(p, (char *)tn_init, sizeof(tn_init)); -- return 0; -+ else -+ WriteString(p, "connected.\r\n", 12); -+ if (!(p->w_cmdargs[2] && strcmp(p->w_cmdargs[2], TEL_DEFPORT))) -+ TelReply(p, (char *)tn_init, sizeof(tn_init)); -+ p->w_ptyfd = fd; -+ memcpy(&p->w_telsa, &res->ai_addr, sizeof(res->ai_addr)); -+ freeaddrinfo(res0); -+ return 0; -+ } -+ return -1; - } - - int -diff --git a/window.c b/window.c -index c9d6817..2ad6041 100644 ---- a/window.c -+++ b/window.c -@@ -610,6 +610,13 @@ struct NewWindow *newwin; - #endif - n = pp - wtab; - debug1("Makewin creating %d\n", n); -+#ifdef BUILTIN_TELNET -+ if(!strcmp(nwin.args[0], "//telnet")) { -+ type = W_TYPE_TELNET; -+ TtyName = "telnet"; -+ } -+ else -+#endif - - if ((f = OpenDevice(nwin.args, nwin.lflag, &type, &TtyName)) < 0) - return -1; -@@ -772,7 +779,7 @@ struct NewWindow *newwin; - #ifdef BUILTIN_TELNET - if (type == W_TYPE_TELNET) - { -- if (TelConnect(p)) -+ if (TelOpenAndConnect(p)) - { - FreeWindow(p); - return -1; -@@ -884,6 +891,13 @@ struct win *p; - int lflag, f; - - lflag = nwin_default.lflag; -+#ifdef BUILTIN_TELNET -+ if(!strcmp(p->w_cmdargs[0], "//telnet")) { -+ p->w_type = W_TYPE_TELNET; -+ TtyName = "telnet"; -+ } -+ else -+#endif - if ((f = OpenDevice(p->w_cmdargs, lflag, &p->w_type, &TtyName)) < 0) - return -1; - -@@ -917,7 +931,7 @@ struct win *p; - #ifdef BUILTIN_TELNET - if (p->w_type == W_TYPE_TELNET) - { -- if (TelConnect(p)) -+ if (TelOpenAndConnect(p)) - return -1; - } - else -@@ -1076,16 +1090,6 @@ char **namep; - *namep = "telnet"; - return 0; - } --#ifdef BUILTIN_TELNET -- if (strcmp(arg, "//telnet") == 0) -- { -- f = TelOpen(args + 1); -- lflag = 0; -- *typep = W_TYPE_TELNET; -- *namep = "telnet"; -- } -- else --#endif - if (strncmp(arg, "//", 2) == 0) - { - Msg(0, "Invalid argument '%s'", arg); -diff --git a/window.h b/window.h -index 7311ecb..7fc7c72 100644 ---- a/window.h -+++ b/window.h -@@ -268,7 +268,7 @@ struct win - struct display *w_zdisplay; - #endif - #ifdef BUILTIN_TELNET -- struct sockaddr_in w_telsa; -+ struct sockaddr_storage w_telsa; - char w_telbuf[IOSIZE]; - int w_telbufl; - char w_telmopts[256]; diff --git a/screen.spec b/screen.spec index ce4f91a..f38a97b 100644 --- a/screen.spec +++ b/screen.spec @@ -1,34 +1,30 @@ %bcond_with multiuser %global _hardened_build 1 -Summary: A screen manager that supports multiple logins on one terminal -Name: screen -Version: 4.2.1 -Release: 6%{?dist} -License: GPLv2+ -Group: Applications/System -URL: http://www.gnu.org/software/screen -Requires(pre): /usr/sbin/groupadd +Summary: A screen manager that supports multiple logins on one terminal +Name: screen +Version: 4.3.1 +Release: 1%{?dist} +License: GPLv2+ +Group: Applications/System +URL: http://www.gnu.org/software/screen +Requires(pre): /usr/sbin/groupadd Requires(preun): /sbin/install-info Requires(post): /sbin/install-info -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: ncurses-devel pam-devel libutempter-devel autoconf texinfo -BuildRequires: automake +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: ncurses-devel pam-devel libutempter-devel autoconf texinfo +BuildRequires: automake # for %%_tmpfilesdir macro -BuildRequires: systemd +BuildRequires: systemd -#Source0: ftp://ftp.uni-erlangen.de/pub/utilities/screen/screen-%{version}.tar.gz -# snapshot from git://git.savannah.gnu.org/screen.git -Source0: screen-4.2.1.tar.gz -Source1: screen.pam +Source0: ftp://ftp.gnu.org/gnu/screen/screen-%{version}.tar.gz +Source1: screen.pam -Patch1: screen-4.0.3-libs.patch -Patch2: screen-4.0.3-screenrc.patch -Patch3: screen-ipv6.patch -Patch4: screen-E3.patch -Patch5: screen-4.1.0-suppress_remap.patch -Patch6: screen-4.2.1-crypt.patch -Patch7: screen-altscreen.patch +Patch1: screen-4.3.1-libs.patch +Patch2: screen-4.3.1-screenrc.patch +Patch3: screen-E3.patch +Patch4: screen-4.3.1-suppress_remap.patch +Patch5: screen-4.3.1-crypt.patch %description The screen utility allows you to have multiple logins on just one @@ -44,11 +40,9 @@ support multiple logins on one terminal. %setup -q -n %{name}-%{version} %patch1 -p1 -b .libs %patch2 -p1 -b .screenrc -%patch3 -p1 -b .ipv6 -%patch4 -p1 -b .E3 -%patch5 -p1 -b .suppress_remap -%patch6 -p1 -b .crypto -%patch7 -p1 -b .altscreen.patch +%patch3 -p1 -b .E3 +%patch4 -p1 -b .suppress_remap +%patch5 -p1 -b .crypto %build @@ -145,6 +139,9 @@ fi %endif %changelog +* Tue Jun 30 2015 Petr Hracek - 4.3.1-1 +- New upstream version 4.3.1 (#1237109) + * Fri Jun 19 2015 Fedora Release Engineering - 4.2.1-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild diff --git a/sources b/sources index 3d5e947..aaeb383 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -419a0594e2b25039239af8b90eda7d92 screen-4.2.1.tar.gz +5bb3b0ff2674e29378c31ad3411170ad screen-4.3.1.tar.gz