[screen] update to git snapshot 20101110git066b098
Miroslav Lichvar
mlichvar at fedoraproject.org
Fri Feb 4 15:20:47 UTC 2011
commit d24e64f9be850b5aef7dc34e8941f87fbf6d023d
Author: Miroslav Lichvar <mlichvar at redhat.com>
Date: Fri Feb 4 15:40:22 2011 +0100
update to git snapshot 20101110git066b098
.gitignore | 1 +
screen-4.0.1-args.patch | 31 ----
screen-4.0.2-maxstr.patch | 11 --
screen-4.0.3-configh.patch | 20 ---
screen-4.0.3-ipv6.patch | 339 -------------------------------------------
screen-4.0.3-resize.patch | 116 ---------------
screen-4.0.3-stropts.patch | 48 ------
screen-ipv6.patch | 345 ++++++++++++++++++++++++++++++++++++++++++++
screen.spec | 36 ++---
sources | 2 +-
10 files changed, 360 insertions(+), 589 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 366fdeb..724a152 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
screen-4.0.3.tar.gz
+/screen-20101110git066b098.tar.bz2
diff --git a/screen-ipv6.patch b/screen-ipv6.patch
new file mode 100644
index 0000000..baad227
--- /dev/null
+++ b/screen-ipv6.patch
@@ -0,0 +1,345 @@
+diff -up screen/src/doc/screen.1.ipv6 screen/src/doc/screen.1
+--- screen/src/doc/screen.1.ipv6 2010-11-11 03:47:46.000000000 +0100
++++ screen/src/doc/screen.1 2011-02-03 16:05:35.957087079 +0100
+@@ -398,6 +398,12 @@ Send the specified command to a running
+ 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 -up screen/src/extern.h.ipv6 screen/src/extern.h
+--- screen/src/extern.h.ipv6 2010-11-11 03:47:46.000000000 +0100
++++ screen/src/extern.h 2011-02-03 16:04:35.995743620 +0100
+@@ -455,8 +455,7 @@ extern void ExitOverlayPage __P((void))
+
+ /* 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 -up screen/src/help.c.ipv6 screen/src/help.c
+--- screen/src/help.c.ipv6 2010-11-11 03:47:46.000000000 +0100
++++ screen/src/help.c 2011-02-03 16:04:35.992744154 +0100
+@@ -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 -up screen/src/screen.c.ipv6 screen/src/screen.c
+--- screen/src/screen.c.ipv6 2010-11-11 03:47:46.000000000 +0100
++++ screen/src/screen.c 2011-02-03 16:04:35.994743798 +0100
+@@ -248,8 +248,9 @@ struct layer *flayer;
+ struct win *fore;
+ struct win *windows;
+ struct win *console_window;
+-
+-
++#ifdef BUILTIN_TELNET
++int af;
++#endif
+
+ /*
+ * Do this last
+@@ -507,6 +508,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 +545,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 -up screen/src/teln.c.ipv6 screen/src/teln.c
+--- screen/src/teln.c.ipv6 2010-11-11 03:47:46.000000000 +0100
++++ screen/src/teln.c 2011-02-03 16:04:35.992744154 +0100
+@@ -30,6 +30,7 @@
+ #include <sys/socket.h>
+ #include <fcntl.h>
+ #include <netdb.h>
++#include <stdio.h>
+
+ #include "config.h"
+
+@@ -42,12 +43,13 @@ 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 +107,78 @@ 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;
+ char buf[256];
+
+- args = p->w_cmdargs + 1;
+-
+- if (!*args)
+- {
+- Msg(0, "Usage: screen //telnet host [port]");
+- 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;
+- }
+- }
+- else
+- WriteString(p, "connected.\r\n", 12);
+- if (port == TEL_DEFPORT)
+- TelReply(p, (char *)tn_init, sizeof(tn_init));
+- return 0;
++ struct addrinfo hints, *res0, *res;
++
++ 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 (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 (!(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 -up screen/src/window.c.ipv6 screen/src/window.c
+--- screen/src/window.c.ipv6 2010-11-11 03:47:46.000000000 +0100
++++ screen/src/window.c 2011-02-03 16:30:56.900750293 +0100
+@@ -605,6 +605,13 @@ struct NewWindow *newwin;
+ 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;
+ if (type == W_TYPE_GROUP)
+@@ -766,7 +773,7 @@ struct NewWindow *newwin;
+ #ifdef BUILTIN_TELNET
+ if (type == W_TYPE_TELNET)
+ {
+- if (TelConnect(p))
++ if (TelOpenAndConnect(p))
+ {
+ FreeWindow(p);
+ return -1;
+@@ -878,6 +885,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;
+
+@@ -909,7 +923,7 @@ struct win *p;
+ #ifdef BUILTIN_TELNET
+ if (p->w_type == W_TYPE_TELNET)
+ {
+- if (TelConnect(p))
++ if (TelOpenAndConnect(p))
+ return -1;
+ }
+ else
+@@ -1068,16 +1082,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 -up screen/src/window.h.ipv6 screen/src/window.h
+--- screen/src/window.h.ipv6 2010-11-11 03:47:46.000000000 +0100
++++ screen/src/window.h 2011-02-03 16:04:35.989744687 +0100
+@@ -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 70658ff..cd2a467 100644
--- a/screen.spec
+++ b/screen.spec
@@ -1,7 +1,7 @@
Summary: A screen manager that supports multiple logins on one terminal
Name: screen
-Version: 4.0.3
-Release: 16%{?dist}
+Version: 4.1.0
+Release: 0.1.20101110git066b098%{?dist}
License: GPLv2+
Group: Applications/System
URL: http://www.gnu.org/software/screen
@@ -10,23 +10,17 @@ 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
-# The one and only true source
-Source0: ftp://ftp.uni-erlangen.de/pub/utilities/screen/screen-%{version}.tar.gz
-# Except for the PAM configuration, that is.
+#Source0: ftp://ftp.uni-erlangen.de/pub/utilities/screen/screen-%{version}.tar.gz
+# snapshot from git://git.savannah.gnu.org/screen.git
+Source0: screen-20101110git066b098.tar.bz2
Source1: screen.pam
Source2: screen.tmpfs
Patch1: screen-4.0.3-libs.patch
-# Some tweaks of the default screenrc
Patch2: screen-4.0.3-screenrc.patch
-Patch3: screen-4.0.3-configh.patch
-Patch4: screen-4.0.3-stropts.patch
-# Fixes potential buffer overflow when > 2^31 semicolons are passed.
-Patch7: screen-4.0.1-args.patch
-Patch11: screen-4.0.2-maxstr.patch
-Patch12: screen-4.0.3-ipv6.patch
-Patch13: screen-4.0.3-resize.patch
+Patch3: screen-ipv6.patch
%description
The screen utility allows you to have multiple logins on just one
@@ -39,18 +33,13 @@ support multiple logins on one terminal.
%prep
-%setup -q
+%setup -q -n screen/src
%patch1 -p1 -b .libs
%patch2 -p1 -b .screenrc
-%patch3 -p1 -b .configh
-%patch4 -p1 -b .stropts
-%patch7 -p0 -b .args
-%patch11 -p1 -b .maxstr
-%patch12 -p1 -b .ipv6
-%patch13 -p2 -b .resize
+%patch3 -p2 -b .ipv6
%build
-autoconf
+./autogen.sh
%configure \
--enable-pam \
@@ -67,9 +56,10 @@ autoconf
sed -i -e 's/.*#.*undef.*HAVE_BRAILLE.*/#define HAVE_BRAILLE 1/;' config.h
sed -i -e 's/\(\/usr\)\?\/local\/etc/\/etc/g;' doc/screen.{1,texinfo}
-rm doc/screen.info*
+rm -f doc/screen.info*
-make %{?_smp_mflags}
+# fails with %{?_smp_mflags}
+make
%install
rm -rf $RPM_BUILD_ROOT
diff --git a/sources b/sources
index e9b4cf4..9d588b0 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-8506fd205028a96c741e4037de6e3c42 screen-4.0.3.tar.gz
+7c4808080e88f1eb3f7a149a7aa5686c screen-20101110git066b098.tar.bz2
More information about the scm-commits
mailing list