Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 318056 Details for
Bug 426398
net-dialup/pptpclient - stability fixes
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
fix warnings about type-punned pointers violating strict aliasing rules
pptpclient-1.7.2-aliasing.patch (text/plain), 6.61 KB, created by
Dirk Olmes
on 2012-07-13 06:17:55 UTC
(
hide
)
Description:
fix warnings about type-punned pointers violating strict aliasing rules
Filename:
MIME Type:
Creator:
Dirk Olmes
Created:
2012-07-13 06:17:55 UTC
Size:
6.61 KB
patch
obsolete
>diff -up pptp-1.7.2/pptp.c.alias pptp-1.7.2/pptp.c >--- pptp-1.7.2/pptp.c.alias 2011-12-06 22:24:06.617318769 +0000 >+++ pptp-1.7.2/pptp.c 2011-12-06 22:36:25.761692858 +0000 >@@ -463,7 +463,10 @@ int open_callmgr(struct in_addr inetaddr > char **envp, int pty_fd, int gre_fd) > { > /* Try to open unix domain socket to call manager. */ >- struct sockaddr_un where; >+ union { >+ struct sockaddr a; >+ struct sockaddr_un u; >+ } where; > const int NUM_TRIES = 3; > int i, fd; > pid_t pid; >@@ -473,12 +476,12 @@ int open_callmgr(struct in_addr inetaddr > fatal("Could not create unix domain socket: %s", strerror(errno)); > } > /* Make address */ >- callmgr_name_unixsock(&where, inetaddr, localbind); >+ callmgr_name_unixsock(&where.u, inetaddr, localbind); > for (i = 0; i < NUM_TRIES; i++) { >- if (connect(fd, (struct sockaddr *) &where, sizeof(where)) < 0) { >+ if (connect(fd, &where.a, sizeof(where.u)) < 0) { > /* couldn't connect. We'll have to launch this guy. */ > >- unlink (where.sun_path); >+ unlink (where.u.sun_path); > > /* fork and launch call manager process */ > switch (pid = fork()) { >diff -up pptp-1.7.2/pptp_callmgr.c.alias pptp-1.7.2/pptp_callmgr.c >--- pptp-1.7.2/pptp_callmgr.c.alias 2011-12-06 22:24:06.617318769 +0000 >+++ pptp-1.7.2/pptp_callmgr.c 2011-12-06 22:34:46.142647941 +0000 >@@ -196,14 +196,17 @@ int callmgr_main(int argc, char **argv, > /* Step 5b: Handle new connection to UNIX socket */ > if (FD_ISSET(unix_sock, &read_set)) { > /* New call! */ >- struct sockaddr_un from; >- socklen_t len = sizeof(from); >+ union { >+ struct sockaddr a; >+ struct sockaddr_un u; >+ } from; >+ socklen_t len = sizeof(from.u); > PPTP_CALL * call; > struct local_callinfo *lci; > int s; > /* Accept the socket */ > FD_CLR (unix_sock, &read_set); >- if ((s = accept(unix_sock, (struct sockaddr *) &from, &len)) < 0) { >+ if ((s = accept(unix_sock, &from.a, &len)) < 0) { > warn("Socket not accepted: %s", strerror(errno)); > goto skip_accept; > } >@@ -313,11 +316,14 @@ cleanup: > /*** open_inetsock ************************************************************/ > int open_inetsock(struct in_addr inetaddr) > { >- struct sockaddr_in dest, src; >+ union { >+ struct sockaddr a; >+ struct sockaddr_in i; >+ } dest, src; > int s; >- dest.sin_family = AF_INET; >- dest.sin_port = htons(PPTP_PORT); >- dest.sin_addr = inetaddr; >+ dest.i.sin_family = AF_INET; >+ dest.i.sin_port = htons(PPTP_PORT); >+ dest.i.sin_addr = inetaddr; > if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { > warn("socket: %s", strerror(errno)); > return s; >@@ -332,14 +338,14 @@ int open_inetsock(struct in_addr inetadd > #endif > if (localbind.s_addr != INADDR_NONE) { > bzero(&src, sizeof(src)); >- src.sin_family = AF_INET; >- src.sin_addr = localbind; >- if (bind(s, (struct sockaddr *) &src, sizeof(src)) != 0) { >+ src.i.sin_family = AF_INET; >+ src.i.sin_addr = localbind; >+ if (bind(s, &src.a, sizeof(src.i)) != 0) { > warn("bind: %s", strerror(errno)); > close(s); return -1; > } > } >- if (connect(s, (struct sockaddr *) &dest, sizeof(dest)) < 0) { >+ if (connect(s, &dest.a, sizeof(dest.i)) < 0) { > warn("connect: %s", strerror(errno)); > close(s); return -1; > } >@@ -349,7 +355,10 @@ int open_inetsock(struct in_addr inetadd > /*** open_unixsock ************************************************************/ > int open_unixsock(struct in_addr inetaddr) > { >- struct sockaddr_un where; >+ union { >+ struct sockaddr a; >+ struct sockaddr_un u; >+ } where; > struct stat st; > char *dir; > int s; >@@ -357,21 +366,21 @@ int open_unixsock(struct in_addr inetadd > warn("socket: %s", strerror(errno)); > return s; > } >- callmgr_name_unixsock( &where, inetaddr, localbind); >- if (stat(where.sun_path, &st) >= 0) { >+ callmgr_name_unixsock( &where.u, inetaddr, localbind); >+ if (stat(where.u.sun_path, &st) >= 0) { > warn("Call manager for %s is already running.", inet_ntoa(inetaddr)); > close(s); return -1; > } > /* Make sure path is valid. */ >- dir = dirname(where.sun_path); >+ dir = dirname(where.u.sun_path); > if (!make_valid_path(dir, 0770)) >- fatal("Could not make path to %s: %s", where.sun_path, strerror(errno)); >+ fatal("Could not make path to %s: %s", where.u.sun_path, strerror(errno)); > free(dir); >- if (bind(s, (struct sockaddr *) &where, sizeof(where)) < 0) { >+ if (bind(s, &where.a, sizeof(where.u)) < 0) { > warn("bind: %s", strerror(errno)); > close(s); return -1; > } >- chmod(where.sun_path, 0777); >+ chmod(where.u.sun_path, 0777); > listen(s, 127); > return s; > } >diff -up pptp-1.7.2/pptp_gre.c.alias pptp-1.7.2/pptp_gre.c >--- pptp-1.7.2/pptp_gre.c.alias 2011-12-06 22:24:06.627318773 +0000 >+++ pptp-1.7.2/pptp_gre.c 2011-12-06 22:24:06.629318775 +0000 >@@ -85,7 +85,10 @@ uint64_t time_now_usecs(void) > /*** Open IP protocol socket **************************************************/ > int pptp_gre_bind(struct in_addr inetaddr) > { >- struct sockaddr_in src_addr, loc_addr; >+ union { >+ struct sockaddr a; >+ struct sockaddr_in i; >+ } loc_addr, src_addr; > int s = socket(AF_INET, SOCK_RAW, PPTP_PROTO); > if (s < 0) { warn("socket: %s", strerror(errno)); return -1; } > #ifdef SO_MARK >@@ -98,16 +101,16 @@ int pptp_gre_bind(struct in_addr inetadd > #endif > if (localbind.s_addr != INADDR_NONE) { > bzero(&loc_addr, sizeof(loc_addr)); >- loc_addr.sin_family = AF_INET; >- loc_addr.sin_addr = localbind; >- if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) != 0) { >+ loc_addr.i.sin_family = AF_INET; >+ loc_addr.i.sin_addr = localbind; >+ if (bind(s, &loc_addr.a, sizeof(loc_addr.i)) != 0) { > warn("bind: %s", strerror(errno)); close(s); return -1; > } > } >- src_addr.sin_family = AF_INET; >- src_addr.sin_addr = inetaddr; >- src_addr.sin_port = 0; >- if (connect(s, (struct sockaddr *) &src_addr, sizeof(src_addr)) < 0) { >+ src_addr.i.sin_family = AF_INET; >+ src_addr.i.sin_addr = inetaddr; >+ src_addr.i.sin_port = 0; >+ if (connect(s, &src_addr.a, sizeof(src_addr.i)) < 0) { > warn("connect: %s", strerror(errno)); close(s); return -1; > } > my = test_redirections();
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 426398
:
318054
| 318056 |
318058
|
318060
|
318062
|
318064
|
318066
|
318068