/[smeserver]/rpms/openssl/sme8/openssl-0.9.8b-ipv6-apps.patch
ViewVC logotype

Annotation of /rpms/openssl/sme8/openssl-0.9.8b-ipv6-apps.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Tue Feb 18 03:03:08 2014 UTC (10 years, 3 months ago) by wellsi
Branch: MAIN
CVS Tags: openssl-0_9_8e-28_el5_sme, openssl-0_9_8e-33_1_el5_sme, openssl-0_9_8e-32_1_el5_sme, openssl-0_9_8e-27_1_el5_sme, openssl-0_9_8e-27_el5_10_1, openssl-0_9_8e-31_1_el5_sme, HEAD
Branch point for: upstream
Initial import

1 wellsi 1.1 diff --exclude-from=exclude-diff-openssl-0.9.8b -bru openssl-0.9.8b.orig/apps/s_apps.h openssl-0.9.8b/apps/s_apps.h
2     --- openssl-0.9.8b.orig/apps/s_apps.h 2006-07-11 16:14:29.000000000 +0200
3     +++ openssl-0.9.8b/apps/s_apps.h 2006-07-13 08:44:29.000000000 +0200
4     @@ -148,7 +148,7 @@
5     #define PORT_STR "4433"
6     #define PROTOCOL "tcp"
7    
8     -int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context);
9     +int do_server(char *port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context);
10     #ifdef HEADER_X509_H
11     int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
12     #endif
13     @@ -156,10 +156,9 @@
14     int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
15     int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key);
16     #endif
17     -int init_client(int *sock, char *server, int port, int type);
18     +int init_client(int *sock, char *server, char *port, int type);
19     int should_retry(int i);
20     -int extract_port(char *str, short *port_ptr);
21     -int extract_host_port(char *str,char **host_ptr,unsigned char *ip,short *p);
22     +int extract_host_port(char *str,char **host_ptr,char **port_ptr);
23    
24     long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
25     int argi, long argl, long ret);
26     diff --exclude-from=exclude-diff-openssl-0.9.8b -bru openssl-0.9.8b.orig/apps/s_client.c openssl-0.9.8b/apps/s_client.c
27     --- openssl-0.9.8b.orig/apps/s_client.c 2005-11-25 14:46:41.000000000 +0100
28     +++ openssl-0.9.8b/apps/s_client.c 2006-07-13 08:44:29.000000000 +0200
29     @@ -246,7 +246,7 @@
30     int cbuf_len,cbuf_off;
31     int sbuf_len,sbuf_off;
32     fd_set readfds,writefds;
33     - short port=PORT;
34     + char *port_str = PORT_STR;
35     int full_log=1;
36     char *host=SSL_HOST_NAME;
37     char *cert_file=NULL,*key_file=NULL;
38     @@ -330,13 +330,12 @@
39     else if (strcmp(*argv,"-port") == 0)
40     {
41     if (--argc < 1) goto bad;
42     - port=atoi(*(++argv));
43     - if (port == 0) goto bad;
44     + port_str= *(++argv);
45     }
46     else if (strcmp(*argv,"-connect") == 0)
47     {
48     if (--argc < 1) goto bad;
49     - if (!extract_host_port(*(++argv),&host,NULL,&port))
50     + if (!extract_host_port(*(++argv),&host,&port_str))
51     goto bad;
52     }
53     else if (strcmp(*argv,"-verify") == 0)
54     @@ -619,7 +618,7 @@
55    
56     re_start:
57    
58     - if (init_client(&s,host,port,sock_type) == 0)
59     + if (init_client(&s,host,port_str,sock_type) == 0)
60     {
61     BIO_printf(bio_err,"connect:errno=%d\n",get_last_socket_error());
62     SHUTDOWN(s);
63     diff --exclude-from=exclude-diff-openssl-0.9.8b -bru openssl-0.9.8b.orig/apps/s_server.c openssl-0.9.8b/apps/s_server.c
64     --- openssl-0.9.8b.orig/apps/s_server.c 2005-09-02 14:27:02.000000000 +0200
65     +++ openssl-0.9.8b/apps/s_server.c 2006-07-13 08:44:29.000000000 +0200
66     @@ -532,7 +532,7 @@
67     {
68     X509_STORE *store = NULL;
69     int vflags = 0;
70     - short port=PORT;
71     + char *port_str = PORT_STR;
72     char *CApath=NULL,*CAfile=NULL;
73     unsigned char *context = NULL;
74     char *dhfile = NULL;
75     @@ -597,8 +597,7 @@
76     (strcmp(*argv,"-accept") == 0))
77     {
78     if (--argc < 1) goto bad;
79     - if (!extract_port(*(++argv),&port))
80     - goto bad;
81     + port_str= *(++argv);
82     }
83     else if (strcmp(*argv,"-verify") == 0)
84     {
85     @@ -1086,9 +1085,9 @@
86    
87     BIO_printf(bio_s_out,"ACCEPT\n");
88     if (www)
89     - do_server(port,sock_type,&accept_socket,www_body, context);
90     + do_server(port_str,sock_type,&accept_socket,www_body, context);
91     else
92     - do_server(port,sock_type,&accept_socket,sv_body, context);
93     + do_server(port_str,sock_type,&accept_socket,sv_body, context);
94     print_stats(bio_s_out,ctx);
95     ret=0;
96     end:
97     diff --exclude-from=exclude-diff-openssl-0.9.8b -bru openssl-0.9.8b.orig/apps/s_socket.c openssl-0.9.8b/apps/s_socket.c
98     --- openssl-0.9.8b.orig/apps/s_socket.c 2005-06-13 05:21:00.000000000 +0200
99     +++ openssl-0.9.8b/apps/s_socket.c 2006-07-13 08:44:29.000000000 +0200
100     @@ -96,9 +96,7 @@
101     static void ssl_sock_cleanup(void);
102     #endif
103     static int ssl_sock_init(void);
104     -static int init_client_ip(int *sock,unsigned char ip[4], int port, int type);
105     -static int init_server(int *sock, int port, int type);
106     -static int init_server_long(int *sock, int port,char *ip, int type);
107     +static int init_server(int *sock, char *port, int type);
108     static int do_accept(int acc_sock, int *sock, char **host);
109     static int host_ip(char *str, unsigned char ip[4]);
110    
111     @@ -228,60 +226,69 @@
112     return(1);
113     }
114    
115     -int init_client(int *sock, char *host, int port, int type)
116     +int init_client(int *sock, char *host, char *port, int type)
117     {
118     - unsigned char ip[4];
119     - short p=0;
120     -
121     - if (!host_ip(host,&(ip[0])))
122     - {
123     - return(0);
124     - }
125     - if (p != 0) port=p;
126     - return(init_client_ip(sock,ip,port,type));
127     - }
128     -
129     -static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
130     - {
131     - unsigned long addr;
132     - struct sockaddr_in them;
133     - int s,i;
134     + struct addrinfo *res, *res0, hints;
135     + char * failed_call = NULL;
136     + int s;
137     + int e;
138    
139     if (!ssl_sock_init()) return(0);
140    
141     - memset((char *)&them,0,sizeof(them));
142     - them.sin_family=AF_INET;
143     - them.sin_port=htons((unsigned short)port);
144     - addr=(unsigned long)
145     - ((unsigned long)ip[0]<<24L)|
146     - ((unsigned long)ip[1]<<16L)|
147     - ((unsigned long)ip[2]<< 8L)|
148     - ((unsigned long)ip[3]);
149     - them.sin_addr.s_addr=htonl(addr);
150     -
151     - if (type == SOCK_STREAM)
152     - s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
153     - else /* ( type == SOCK_DGRAM) */
154     - s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
155     -
156     - if (s == INVALID_SOCKET) { perror("socket"); return(0); }
157     + memset(&hints, '\0', sizeof(hints));
158     + hints.ai_socktype = type;
159     + hints.ai_flags = AI_ADDRCONFIG;
160     +
161     + e = getaddrinfo(host, port, &hints, &res);
162     + if (e)
163     + {
164     + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(e));
165     + if (e == EAI_SYSTEM)
166     + perror("getaddrinfo");
167     + return (0);
168     + }
169    
170     + res0 = res;
171     + while (res)
172     + {
173     + s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
174     + if (s == INVALID_SOCKET)
175     + {
176     + failed_call = "socket";
177     + goto nextres;
178     + }
179     #ifndef OPENSSL_SYS_MPE
180     if (type == SOCK_STREAM)
181     {
182     - i=0;
183     - i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
184     - if (i < 0) { perror("keepalive"); return(0); }
185     + int i=0;
186     + i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,
187     + (char *)&i,sizeof(i));
188     + if (i < 0) {
189     + failed_call = "keepalive";
190     + goto nextres;
191     + }
192     }
193     #endif
194     -
195     - if (connect(s,(struct sockaddr *)&them,sizeof(them)) == -1)
196     - { close(s); perror("connect"); return(0); }
197     + if (connect(s,(struct sockaddr *)res->ai_addr,
198     + res->ai_addrlen) == 0)
199     + {
200     + freeaddrinfo(res0);
201     *sock=s;
202     return(1);
203     }
204     + failed_call = "socket";
205     +nextres:
206     + if (s != INVALID_SOCKET)
207     + close(s);
208     + res = res->ai_next;
209     + }
210     + freeaddrinfo(res0);
211     +
212     + perror(failed_call);
213     + return(0);
214     + }
215    
216     -int do_server(int port, int type, int *ret, int (*cb)(char *hostname, int s, unsigned char *context), unsigned char *context)
217     +int do_server(char *port, int type, int *ret, int (*cb)(char *hostname, int s, unsigned char *context), unsigned char *context)
218     {
219     int sock;
220     char *name = NULL;
221     @@ -319,33 +326,38 @@
222     }
223     }
224    
225     -static int init_server_long(int *sock, int port, char *ip, int type)
226     +static int init_server(int *sock, char *port, int type)
227     {
228     - int ret=0;
229     - struct sockaddr_in server;
230     - int s= -1,i;
231     + struct addrinfo *res, *res0, hints;
232     + char * failed_call = NULL;
233     + char port_name[8];
234     + int s;
235     + int e;
236    
237     if (!ssl_sock_init()) return(0);
238    
239     - memset((char *)&server,0,sizeof(server));
240     - server.sin_family=AF_INET;
241     - server.sin_port=htons((unsigned short)port);
242     - if (ip == NULL)
243     - server.sin_addr.s_addr=INADDR_ANY;
244     - else
245     -/* Added for T3E, address-of fails on bit field (beckman@acl.lanl.gov) */
246     -#ifndef BIT_FIELD_LIMITS
247     - memcpy(&server.sin_addr.s_addr,ip,4);
248     -#else
249     - memcpy(&server.sin_addr,ip,4);
250     -#endif
251     -
252     - if (type == SOCK_STREAM)
253     - s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
254     - else /* type == SOCK_DGRAM */
255     - s=socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP);
256     + memset(&hints, '\0', sizeof(hints));
257     + hints.ai_socktype = type;
258     + hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
259     +
260     + e = getaddrinfo(NULL, port, &hints, &res);
261     + if (e)
262     + {
263     + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(e));
264     + if (e == EAI_SYSTEM)
265     + perror("getaddrinfo");
266     + return (0);
267     + }
268    
269     - if (s == INVALID_SOCKET) goto err;
270     + res0 = res;
271     + while (res)
272     + {
273     + s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
274     + if (s == INVALID_SOCKET)
275     + {
276     + failed_call = "socket";
277     + goto nextres;
278     + }
279     #if defined SOL_SOCKET && defined SO_REUSEADDR
280     {
281     int j = 1;
282     @@ -353,36 +365,39 @@
283     (void *) &j, sizeof j);
284     }
285     #endif
286     - if (bind(s,(struct sockaddr *)&server,sizeof(server)) == -1)
287     +
288     + if (bind(s,(struct sockaddr *)res->ai_addr, res->ai_addrlen) == -1)
289     {
290     -#ifndef OPENSSL_SYS_WINDOWS
291     - perror("bind");
292     -#endif
293     - goto err;
294     + failed_call = "bind";
295     + goto nextres;
296     }
297     - /* Make it 128 for linux */
298     - if (type==SOCK_STREAM && listen(s,128) == -1) goto err;
299     - i=0;
300     - *sock=s;
301     - ret=1;
302     -err:
303     - if ((ret == 0) && (s != -1))
304     + if (type==SOCK_STREAM && listen(s,128) == -1)
305     {
306     - SHUTDOWN(s);
307     + failed_call = "listen";
308     + goto nextres;
309     }
310     - return(ret);
311     +
312     + *sock=s;
313     + return(1);
314     +
315     +nextres:
316     + if (s != INVALID_SOCKET)
317     + close(s);
318     + res = res->ai_next;
319     }
320     + freeaddrinfo(res0);
321    
322     -static int init_server(int *sock, int port, int type)
323     - {
324     - return(init_server_long(sock, port, NULL, type));
325     + if (s == INVALID_SOCKET) { perror("socket"); return(0); }
326     +
327     + perror(failed_call);
328     + return(0);
329     }
330    
331     static int do_accept(int acc_sock, int *sock, char **host)
332     {
333     - int ret,i;
334     - struct hostent *h1,*h2;
335     - static struct sockaddr_in from;
336     + static struct sockaddr_storage from;
337     + char buffer[NI_MAXHOST];
338     + int ret;
339     int len;
340     /* struct linger ling; */
341    
342     @@ -427,137 +442,62 @@
343     if (i < 0) { perror("keepalive"); return(0); }
344     */
345    
346     - if (host == NULL) goto end;
347     -#ifndef BIT_FIELD_LIMITS
348     - /* I should use WSAAsyncGetHostByName() under windows */
349     - h1=gethostbyaddr((char *)&from.sin_addr.s_addr,
350     - sizeof(from.sin_addr.s_addr),AF_INET);
351     -#else
352     - h1=gethostbyaddr((char *)&from.sin_addr,
353     - sizeof(struct in_addr),AF_INET);
354     -#endif
355     - if (h1 == NULL)
356     + if (host == NULL)
357     {
358     - BIO_printf(bio_err,"bad gethostbyaddr\n");
359     - *host=NULL;
360     - /* return(0); */
361     - }
362     - else
363     - {
364     - if ((*host=(char *)OPENSSL_malloc(strlen(h1->h_name)+1)) == NULL)
365     - {
366     - perror("OPENSSL_malloc");
367     - return(0);
368     + *sock=ret;
369     + return(1);
370     }
371     - BUF_strlcpy(*host,h1->h_name,strlen(h1->h_name)+1);
372    
373     - h2=GetHostByName(*host);
374     - if (h2 == NULL)
375     + if (getnameinfo((struct sockaddr *)&from, sizeof(from),
376     + buffer, sizeof(buffer),
377     + NULL, 0, 0))
378     {
379     - BIO_printf(bio_err,"gethostbyname failure\n");
380     + BIO_printf(bio_err,"getnameinfo failed\n");
381     + *host=NULL; *sock=ret;
382     + return(1);
383     - return(0);
384     }
385     - i=0;
386     - if (h2->h_addrtype != AF_INET)
387     + else
388     {
389     - BIO_printf(bio_err,"gethostbyname addr is not AF_INET\n");
390     + if ((*host=(char *)OPENSSL_malloc(strlen(buffer)+1)) == NULL)
391     + {
392     + perror("OPENSSL_malloc");
393     return(0);
394     }
395     - }
396     -end:
397     + strcpy(*host, buffer);
398     *sock=ret;
399     return(1);
400     }
401     + }
402    
403     -int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
404     - short *port_ptr)
405     +int extract_host_port(char *str, char **host_ptr,
406     + char **port_ptr)
407     {
408     - char *h,*p;
409     + char *h,*p,*x;
410    
411     - h=str;
412     - p=strchr(str,':');
413     + x=h=str;
414     + if (*h == '[')
415     + {
416     + h++;
417     + p=strchr(h,']');
418     if (p == NULL)
419     {
420     - BIO_printf(bio_err,"no port defined\n");
421     + BIO_printf(bio_err,"no ending bracket for IPv6 address\n");
422     return(0);
423     }
424     *(p++)='\0';
425     -
426     - if ((ip != NULL) && !host_ip(str,ip))
427     - goto err;
428     - if (host_ptr != NULL) *host_ptr=h;
429     -
430     - if (!extract_port(p,port_ptr))
431     - goto err;
432     - return(1);
433     -err:
434     - return(0);
435     + x = p;
436     }
437     -
438     -static int host_ip(char *str, unsigned char ip[4])
439     - {
440     - unsigned int in[4];
441     - int i;
442     -
443     - if (sscanf(str,"%u.%u.%u.%u",&(in[0]),&(in[1]),&(in[2]),&(in[3])) == 4)
444     - {
445     - for (i=0; i<4; i++)
446     - if (in[i] > 255)
447     - {
448     - BIO_printf(bio_err,"invalid IP address\n");
449     - goto err;
450     - }
451     - ip[0]=in[0];
452     - ip[1]=in[1];
453     - ip[2]=in[2];
454     - ip[3]=in[3];
455     - }
456     - else
457     - { /* do a gethostbyname */
458     - struct hostent *he;
459     -
460     - if (!ssl_sock_init()) return(0);
461     -
462     - he=GetHostByName(str);
463     - if (he == NULL)
464     - {
465     - BIO_printf(bio_err,"gethostbyname failure\n");
466     - goto err;
467     - }
468     - /* cast to short because of win16 winsock definition */
469     - if ((short)he->h_addrtype != AF_INET)
470     + p=strchr(x,':');
471     + if (p == NULL)
472     {
473     - BIO_printf(bio_err,"gethostbyname addr is not AF_INET\n");
474     - return(0);
475     - }
476     - ip[0]=he->h_addr_list[0][0];
477     - ip[1]=he->h_addr_list[0][1];
478     - ip[2]=he->h_addr_list[0][2];
479     - ip[3]=he->h_addr_list[0][3];
480     - }
481     - return(1);
482     -err:
483     + BIO_printf(bio_err,"no port defined\n");
484     return(0);
485     }
486     + *(p++)='\0';
487    
488     -int extract_port(char *str, short *port_ptr)
489     - {
490     - int i;
491     - struct servent *s;
492     + if (host_ptr != NULL) *host_ptr=h;
493     + if (port_ptr != NULL) *port_ptr=p;
494    
495     - i=atoi(str);
496     - if (i != 0)
497     - *port_ptr=(unsigned short)i;
498     - else
499     - {
500     - s=getservbyname(str,"tcp");
501     - if (s == NULL)
502     - {
503     - BIO_printf(bio_err,"getservbyname failure for %s\n",str);
504     - return(0);
505     - }
506     - *port_ptr=ntohs((unsigned short)s->s_port);
507     - }
508     return(1);
509     }
510    

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed