packages: links/links.spec, links/links-0.92-ipv6-20000921.patch (NEW), lin...

draenog draenog at pld-linux.org
Sat Nov 12 19:39:09 CET 2011


Author: draenog                      Date: Sat Nov 12 18:39:09 2011 GMT
Module: packages                      Tag: HEAD
---- Log message:
- store ipv6 patch in decompressed file

---- Files affected:
packages/links:
   links.spec (1.114 -> 1.115) , links-0.92-ipv6-20000921.patch (NONE -> 1.1)  (NEW), links-0.92-ipv6-20000921.patch.gz (1.1 -> NONE)  (REMOVED)

---- Diffs:

================================================================
Index: packages/links/links.spec
diff -u packages/links/links.spec:1.114 packages/links/links.spec:1.115
--- packages/links/links.spec:1.114	Mon Mar 14 19:04:28 2011
+++ packages/links/links.spec	Sat Nov 12 19:39:04 2011
@@ -16,7 +16,7 @@
 Source1:	%{name}.desktop
 Source2:	%{name}.1.pl
 Source3:	%{name}.png
-Patch0:		%{name}-0.92-ipv6-20000921.patch.gz
+Patch0:		%{name}-0.92-ipv6-20000921.patch
 Patch1:		%{name}-gzip_fallback.patch
 Patch2:		%{name}-content_encoding.patch
 Patch3:		%{name}-home_etc.patch
@@ -126,6 +126,9 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org
 
 $Log$
+Revision 1.115  2011/11/12 18:39:04  draenog
+- store ipv6 patch in decompressed file
+
 Revision 1.114  2011/03/14 18:04:28  qboosh
 - updated to 1.01
 

================================================================
Index: packages/links/links-0.92-ipv6-20000921.patch
diff -u /dev/null packages/links/links-0.92-ipv6-20000921.patch:1.1
--- /dev/null	Sat Nov 12 19:39:09 2011
+++ packages/links/links-0.92-ipv6-20000921.patch	Sat Nov 12 19:39:04 2011
@@ -0,0 +1,326 @@
+;
+; IPv6 ready text web browser for PLD GNU/Linux
+; Note: FTP over IPv6 doesn't work, yet.
+;		Arkadiusz Miskiewicz <misiek at pld.org.pl>
+;
+diff -urN links-0.92.org/connect.c links-0.92/connect.c
+--- links-0.92.org/connect.c	Thu Jun 22 23:26:27 2000
++++ links-0.92/connect.c	Thu Sep 21 14:53:59 2000
+@@ -37,8 +37,8 @@
+ 
+ struct conn_info {
+ 	void (*func)(struct connection *);
+-	struct sockaddr_in sa;
+-	ip addr;
++	struct sockaddr_storage sa;
++	char addr[NI_MAXHOST];
+ 	int port;
+ 	int *sock;
+ };
+@@ -68,8 +68,8 @@
+ 	log_data("\nCONNECTION: ", 13);
+ 	log_data(host, strlen(host));
+ 	log_data("\n", 1);
+-	if (c->no_cache >= NC_RELOAD) as = find_host_no_cache(host, &b->addr, &c->dnsquery, (void(*)(void *, int))dns_found, c);
+-	else as = find_host(host, &b->addr, &c->dnsquery, (void(*)(void *, int))dns_found, c);
++	if (c->no_cache >= NC_RELOAD) as = find_host_no_cache(host, b->addr, &c->dnsquery, (void(*)(void *, int))dns_found, c);
++	else as = find_host(host, b->addr, &c->dnsquery, (void(*)(void *, int))dns_found, c);
+ 	mem_free(host);
+ 	if (as) setcstate(c, S_DNS);
+ }
+@@ -109,36 +110,59 @@
+ void dns_found(struct connection *c, int state)
+ {
+ 	int s;
++	struct addrinfo hints, *res, *res0;
+ 	struct conn_info *b = c->buffer;
++	char pbuf[NI_MAXSERV];
+ 	if (state) {
+ 		setcstate(c, S_NO_DNS);
+ 		retry_connection(c);
+ 		return;
+ 	}
+-	if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
+-		setcstate(c, -errno);
++	sprintf(pbuf, "%d", b->port);
++	pbuf[sizeof(pbuf)-1] = '\0';
++	memset(&hints, 0, sizeof(hints));
++	hints.ai_family = AF_UNSPEC;
++	hints.ai_socktype = SOCK_STREAM;
++	if (getaddrinfo(b->addr, pbuf, &hints, &res0)) {
++	    	setcstate(c, -EADDRNOTAVAIL);
+ 		retry_connection(c);
+ 		return;
+ 	}
+-	*b->sock = s;
+-	fcntl(s, F_SETFL, O_NONBLOCK);
+-	memset(&b->sa, 0, sizeof(struct sockaddr_in));
+-	b->sa.sin_family = PF_INET;
+-	b->sa.sin_addr.s_addr = b->addr;
+-	b->sa.sin_port = htons(b->port);
+-	if (connect(s, (struct sockaddr *)&b->sa, sizeof b->sa)) {
+-		if (errno != EALREADY && errno != EINPROGRESS) {
+-			setcstate(c, -errno);
+-			retry_connection(c);
+-			return;
++
++	for (res = res0; res != NULL; res = res->ai_next) {
++	    if ((s = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1) {
++		if (res->ai_next)
++		    continue;
++		else {
++		    setcstate(c, -errno);
++		    retry_connection(c);
++		    freeaddrinfo(res0);
++		    return;
++		}
++	    }
++	    *b->sock = s;
++	    fcntl(s, F_SETFL, O_NONBLOCK);
++	    memcpy(&b->sa, res->ai_addr, res->ai_addrlen);
++	    if (connect(s, res->ai_addr, res->ai_addrlen)) {
++		if (res->ai_next) {
++		    close(s);
++		    continue;
++		} else if (errno != EALREADY && errno != EINPROGRESS) {
++		    setcstate(c, -errno);
++		    retry_connection(c);
++		    freeaddrinfo(res0);
++		    return;
+ 		}
+ 		set_handlers(s, NULL, (void(*)(void *))connected, (void(*)(void *))exception, c);
+ 		setcstate(c, S_CONN);
+-	} else {
++	    } else {
+ 		c->buffer = NULL;
+ 		b->func(c);
+ 		mem_free(b);
++	    }
++	    break;
+ 	}
++	freeaddrinfo(res0);
+ }
+ 
+ void connected(struct connection *c)
+diff -urN links-0.92.org/default.c links-0.92/default.c
+--- links-0.92.org/default.c	Thu Jun 22 09:37:36 2000
++++ links-0.92/default.c	Thu Sep 21 14:12:32 2000
+@@ -631,20 +631,16 @@
+ 
+ unsigned char *lookup_cmd(struct option *o, unsigned char ***argv, int *argc)
+ {
+-	ip addr;
++	char addr;
+ 	unsigned char *p = (unsigned char *)&addr;
+ 	if (!*argc) return "Parameter expected";
+ 	if (*argc >= 2) return "Too many parameters";
+ 	(*argv)++; (*argc)--;
+ 	if (do_real_lookup(*(*argv - 1), &addr)) {
+-#ifdef HAVE_HERROR
+-		herror("error");
+-#else
+ 		fprintf(stderr, "error: host not found\n");
+-#endif
+ 		return "";
+ 	}
+-	printf("%d.%d.%d.%d\n", (int)p[0], (int)p[1], (int)p[2], (int)p[3]);
++	printf("%s\n", addr);
+ 	fflush(stdout);
+ 	return "";
+ }
+diff -urN links-0.92.org/dns.c links-0.92/dns.c
+--- links-0.92.org/dns.c	Wed Jun 14 18:32:01 2000
++++ links-0.92/dns.c	Thu Sep 21 15:09:55 2000
+@@ -4,7 +4,7 @@
+ 	struct dnsentry *next;
+ 	struct dnsentry *prev;
+ 	ttime get_time;
+-	ip addr;
++	char addr[NI_MAXHOST];
+ 	char name[1];
+ };
+ 
+@@ -23,31 +23,41 @@
+ 	void (*xfn)(struct dnsquery *, int);
+ 	int h;
+ 	struct dnsquery **s;
+-	ip *addr;
++	char *addr;
+ 	char name[1];
+ };
+ 
+ struct list_head dns_cache = {&dns_cache, &dns_cache};
+ 
+-int do_real_lookup(unsigned char *name, ip *host)
++int do_real_lookup(unsigned char *name, char *host)
+ {
+-	struct hostent *hst;
+-	if (!(hst = gethostbyname(name))) return -1;
+-	memcpy(host, hst->h_addr_list[0], sizeof(ip));
++    	struct addrinfo hints, *res;
++	char hbuf[NI_MAXHOST];
++	memset(&hints, 0, sizeof(hints));
++	hints.ai_family = AF_UNSPEC;
++	hints.ai_socktype = SOCK_STREAM;
++	if (getaddrinfo(name, "0", &hints, &res)) return -1;
++	if (getnameinfo(res->ai_addr, res->ai_addrlen,
++		    hbuf, sizeof(hbuf), NULL, 0, NI_NUMERICHOST)) {
++	    freeaddrinfo(res);
++	    return -1;
++	}
++	freeaddrinfo(res);
++	memcpy(host, hbuf, NI_MAXHOST-1);
+ 	return 0;
+ }
+ 
+ void lookup_fn(unsigned char *name, int h)
+ {
+-	ip host;
+-	if (do_real_lookup(name, &host)) return;
+-	write(h, &host, sizeof(ip));
++	char host[NI_MAXHOST];
++	if (do_real_lookup(name, host)) return;
++	write(h, host, NI_MAXHOST);
+ }
+ 
+ void end_real_lookup(struct dnsquery *q)
+ {
+ 	int r = 1;
+-	if (!q->addr || read(q->h, q->addr, sizeof(ip)) != sizeof(ip)) goto end;
++	if (!q->addr || read(q->h, q->addr, NI_MAXHOST) != NI_MAXHOST) goto end;
+ 	r = 0;
+ 
+ 	end:
+@@ -134,7 +144,7 @@
+ 	}
+ 	if (!find_in_dns_cache(q->name, &dnsentry)) {
+ 		if (a) {
+-			memcpy(q->addr, &dnsentry->addr, sizeof(ip));
++			memcpy(q->addr, &dnsentry->addr, NI_MAXHOST);
+ 			a = 0;
+ 			goto e;
+ 		}
+@@ -144,7 +154,7 @@
+ 	if (a) goto e;
+ 	if ((dnsentry = mem_alloc(sizeof(struct dnsentry) + strlen(q->name) + 1))) {
+ 		strcpy(dnsentry->name, q->name);
+-		memcpy(&dnsentry->addr, q->addr, sizeof(ip));
++		memcpy(&dnsentry->addr, q->addr, NI_MAXHOST);
+ 		dnsentry->get_time = get_time();
+ 		add_to_list(dns_cache, dnsentry);
+ 	}
+@@ -156,7 +166,7 @@
+ 	fn(data, a);
+ }
+ 
+-int find_host_no_cache(unsigned char *name, ip *addr, void **qp, void (*fn)(void *, int), void *data)
++int find_host_no_cache(unsigned char *name, char *addr, void **qp, void (*fn)(void *, int), void *data)
+ {
+ 	struct dnsquery *q;
+ 	if (!(q = malloc(sizeof(struct dnsquery) + strlen(name) + 1))) {
+@@ -173,13 +183,13 @@
+ 	return do_queued_lookup(q);
+ }
+ 
+-int find_host(unsigned char *name, ip *addr, void **qp, void (*fn)(void *, int), void *data)
++int find_host(unsigned char *name, char *addr, void **qp, void (*fn)(void *, int), void *data)
+ {
+ 	struct dnsentry *dnsentry;
+ 	if (qp) *qp = NULL;
+ 	if (!find_in_dns_cache(name, &dnsentry)) {
+ 		if (dnsentry->get_time + DNS_TIMEOUT < get_time()) goto timeout;
+-		memcpy(addr, &dnsentry->addr, sizeof(ip));
++		memcpy(addr, &dnsentry->addr, NI_MAXHOST);
+ 		fn(data, 0);
+ 		return 0;
+ 	}
+diff -urN links-0.92.org/http.c links-0.92/http.c
+--- links-0.92.org/http.c	Tue Jun 20 23:38:35 2000
++++ links-0.92/http.c	Thu Sep 21 15:52:33 2000
+@@ -181,7 +181,12 @@
+ 	else add_to_str(&hdr, &l, " HTTP/1.0\r\n");
+ 	if ((h = get_host_name(host))) {
+ 		add_to_str(&hdr, &l, "Host: ");
+-		add_to_str(&hdr, &l, h);
++		if (strchr(h, ':') != strrchr(h, ':')) {
++		    add_to_str(&hdr, &l, "[");
++		    add_to_str(&hdr, &l, h);
++		    add_to_str(&hdr, &l, "]");
++		} else
++		    add_to_str(&hdr, &l, h);
+ 		mem_free(h);
+ 		add_to_str(&hdr, &l, "\r\n");
+ 	}
+diff -urN links-0.92.org/links.h links-0.92/links.h
+--- links-0.92.org/links.h	Sun Jun 18 18:36:55 2000
++++ links-0.92/links.h	Thu Sep 21 14:10:01 2000
+@@ -549,12 +549,10 @@
+ 
+ /* dns.c */
+ 
+-typedef unsigned ip;
+-
+-int do_real_lookup(unsigned char *, ip *);
++int do_real_lookup(unsigned char *, char *);
+ void shrink_dns_cache(int);
+-int find_host(unsigned char *, ip *, void **, void (*)(void *, int), void *);
+-int find_host_no_cache(unsigned char *, ip *, void **, void (*)(void *, int), void *);
++int find_host(unsigned char *, char *, void **, void (*)(void *, int), void *);
++int find_host_no_cache(unsigned char *, char *, void **, void (*)(void *, int), void *);
+ void kill_dns_request(void **);
+ 
+ /* cache.c */
+diff -urN links-0.92.org/url.c links-0.92/url.c
+--- links-0.92.org/url.c	Thu Jun 22 23:07:08 2000
++++ links-0.92/url.c	Thu Sep 21 15:49:42 2000
+@@ -46,7 +46,9 @@
+ int parse_url(unsigned char *url, int *prlen, unsigned char **user, int *uslen, unsigned char **pass, int *palen, unsigned char **host, int *holen, unsigned char **port, int *polen, unsigned char **data, int *dalen, unsigned char **post)
+ {
+ 	unsigned char *p, *q;
++	unsigned char *lb, *rb;
+ 	unsigned char p_c[2];
++	static unsigned char hostbuf[NI_MAXHOST];
+ 	int a;
+ 	if (prlen) *prlen = 0;
+ 	if (user) *user = NULL;
+@@ -60,6 +62,9 @@
+ 	if (data) *data = NULL;
+ 	if (dalen) *dalen = 0;
+ 	if (post) *post = NULL;
++	lb = strchr(url, '[');
++	rb = strchr(url, ']');
++	if (lb && rb && lb > rb) return -1;
+ 	if (!url || !(p = strchr(url, ':'))) return -1;
+ 	if (prlen) *prlen = p - url;
+ 	if ((a = check_protocol(url, p - url)) == -1) return -1;
+@@ -88,10 +93,27 @@
+ 		}
+ 		p = q + 1;
+ 	} 
+-	q = p + strcspn(p, ":/");
++	if (lb && rb)
++	{
++	    q = rb;
++	    q = rb + strcspn(rb, ":/");
++	} else
++	    q = p + strcspn(p, ":/");
+ 	if (!*q && protocols[a].need_slash_after_host) return -1;
+-	if (host) *host = p;
+-	if (holen) *holen = q - p;
++	if (host) {
++	    if (lb && rb) {
++		strncpy(hostbuf, lb + 1, rb - lb - 1);
++		hostbuf[rb - lb - 1] = 0;
++		*host = hostbuf;
++	    } else 
++		*host = p;
++	}
++	if (holen) {
++	    if (lb && rb)
++		*holen = strlen(hostbuf);
++	    else
++		*holen = q - p;
++	}
+ 	if (*q == ':') {
+ 		unsigned char *pp = q + strcspn(q, "/");
+ 		int cc;
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/links/links.spec?r1=1.114&r2=1.115&f=u



More information about the pld-cvs-commit mailing list