diff --git a/pptp-1.7.2-aliasing.patch b/pptp-1.7.2-aliasing.patch new file mode 100644 index 0000000..af901dd --- /dev/null +++ b/pptp-1.7.2-aliasing.patch @@ -0,0 +1,172 @@ +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(); diff --git a/pptp-1.7.2-const.patch b/pptp-1.7.2-const.patch new file mode 100644 index 0000000..7cea0b2 --- /dev/null +++ b/pptp-1.7.2-const.patch @@ -0,0 +1,52 @@ +diff -up pptp-1.7.2/pptp.c.const pptp-1.7.2/pptp.c +--- pptp-1.7.2/pptp.c.const 2011-11-30 18:58:39.713148113 +0000 ++++ pptp-1.7.2/pptp.c 2011-12-01 09:23:29.716446618 +0000 +@@ -565,10 +565,13 @@ int get_call_id(int sock, pid_t gre, pid + void launch_pppd(char *ttydev, int argc, char **argv) + { + char *new_argv[argc + 4];/* XXX if not using GCC, hard code a limit here. */ ++ char str_pppd[] = PPPD_BINARY; ++ char str_direct[] = "-direct"; ++ char str_38400[] = "38400"; + int i = 0, j; +- new_argv[i++] = PPPD_BINARY; ++ new_argv[i++] = str_pppd; + #ifdef USER_PPP +- new_argv[i++] = "-direct"; ++ new_argv[i++] = str_direct; + /* ppp expects to have stdin connected to ttydev */ + if ((j = open(ttydev, O_RDWR)) == -1) + fatal("Cannot open %s: %s", ttydev, strerror(errno)); +@@ -577,7 +580,7 @@ void launch_pppd(char *ttydev, int argc, + close(j); + #else + new_argv[i++] = ttydev; +- new_argv[i++] = "38400"; ++ new_argv[i++] = str_38400; + #endif + for (j = 0; j < argc; j++) + new_argv[i++] = argv[j]; +diff -up pptp-1.7.2/util.c.const pptp-1.7.2/util.c +--- pptp-1.7.2/util.c.const 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/util.c 2011-11-30 18:58:39.719148114 +0000 +@@ -16,7 +16,7 @@ + #endif + + /* implementation of log_string, defined as extern in util.h */ +-char *log_string = "anon"; ++const char *log_string = "anon"; + + static void open_log(void) __attribute__ ((constructor)); + static void close_log(void) __attribute__ ((destructor)); +diff -up pptp-1.7.2/util.h.const pptp-1.7.2/util.h +--- pptp-1.7.2/util.h.const 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/util.h 2011-11-30 18:59:47.458171318 +0000 +@@ -10,7 +10,7 @@ + /* log_string is an identifier for this pptp process, passed from + command line using --log-string=X, and included with every log message. + Useful for people with multiple pptp sessions open at a time */ +-extern char * log_string; ++extern const char * log_string; + + /* log_level sets the logging verbosity. Values range from 0 (errors only) + to 1 (errors and warnings) to 2 (high verbosity, for debugging) */ diff --git a/pptp-1.7.2-field-init.patch b/pptp-1.7.2-field-init.patch new file mode 100644 index 0000000..8164965 --- /dev/null +++ b/pptp-1.7.2-field-init.patch @@ -0,0 +1,11 @@ +--- pptp-1.7.2/orckit_quirks.c.field 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/orckit_quirks.c 2011-12-01 09:31:04.762035792 +0000 +@@ -62,7 +62,7 @@ int + orckit_atur3_start_ctrl_conn_hook(struct pptp_start_ctrl_conn* packet) + { + struct pptp_start_ctrl_conn fixed_packet = { +- {0}, /* we'll set the header later */ ++ {0, 0, 0, 0 , 0}, /* we'll set the header later */ + hton16(PPTP_VERSION), 0, 0, + hton32(PPTP_FRAME_ASYNC), hton32(PPTP_BEARER_ANALOG), + hton16(0) /* max channels */, diff --git a/pptp-1.7.2-fsf-update.patch b/pptp-1.7.2-fsf-update.patch new file mode 100644 index 0000000..8a2229f --- /dev/null +++ b/pptp-1.7.2-fsf-update.patch @@ -0,0 +1,182 @@ +Index: COPYING +=================================================================== +RCS file: /cvsroot/pptpclient/pptp-linux/COPYING,v +retrieving revision 1.1.1.1 +diff -u -r1.1.1.1 COPYING +--- COPYING 23 Dec 2000 08:19:51 -0000 1.1.1.1 ++++ COPYING 8 Nov 2011 16:01:32 -0000 +@@ -1,12 +1,12 @@ +- GNU GENERAL PUBLIC LICENSE +- Version 2, June 1991 ++ GNU GENERAL PUBLIC LICENSE ++ Version 2, June 1991 + +- Copyright (C) 1989, 1991 Free Software Foundation, Inc. +- 675 Mass Ave, Cambridge, MA 02139, USA ++ Copyright (C) 1989, 1991 Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +- Preamble ++ Preamble + + The licenses for most software are designed to take away your + freedom to share and change it. By contrast, the GNU General Public +@@ -15,7 +15,7 @@ + General Public License applies to most of the Free Software + Foundation's software and to any other program whose authors commit to + using it. (Some other Free Software Foundation software is covered by +-the GNU Library General Public License instead.) You can apply it to ++the GNU Lesser General Public License instead.) You can apply it to + your programs, too. + + When we speak of free software, we are referring to freedom, not +@@ -55,8 +55,8 @@ + + The precise terms and conditions for copying, distribution and + modification follow. +- +- GNU GENERAL PUBLIC LICENSE ++ ++ GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +@@ -110,7 +110,7 @@ + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) +- ++ + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, + and can be reasonably considered independent and separate works in +@@ -168,7 +168,7 @@ + access to copy the source code from the same place counts as + distribution of the source code, even though third parties are not + compelled to copy the source along with the object code. +- ++ + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense or distribute the Program is +@@ -225,7 +225,7 @@ + + This section is intended to make thoroughly clear what is believed to + be a consequence of the rest of this License. +- ++ + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License +@@ -255,7 +255,7 @@ + of preserving the free status of all derivatives of our free software and + of promoting the sharing and reuse of software generally. + +- NO WARRANTY ++ NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY + FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +@@ -277,9 +277,9 @@ + PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + +- END OF TERMS AND CONDITIONS +- +- Appendix: How to Apply These Terms to Your New Programs ++ END OF TERMS AND CONDITIONS ++ ++ How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it +@@ -291,7 +291,7 @@ + the "copyright" line and a pointer to where the full notice is found. + + +- Copyright (C) 19yy ++ Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -303,16 +303,16 @@ + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + +- You should have received a copy of the GNU General Public License +- along with this program; if not, write to the Free Software +- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + +- Gnomovision version 69, Copyright (C) 19yy name of author ++ Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. +@@ -335,5 +335,5 @@ + This General Public License does not permit incorporating your program into + proprietary programs. If your program is a subroutine library, you may + consider it more useful to permit linking proprietary applications with the +-library. If this is what you want to do, use the GNU Library General ++library. If this is what you want to do, use the GNU Lesser General + Public License instead of this License. +Index: README +=================================================================== +RCS file: /cvsroot/pptpclient/pptp-linux/README,v +retrieving revision 1.5 +diff -u -r1.5 README +--- README 28 Aug 2007 00:17:13 -0000 1.5 ++++ README 8 Nov 2011 16:01:32 -0000 +@@ -17,7 +17,8 @@ + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software +- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ++ 02110-1301, USA. + + You can find notes on installing in the file INSTALL, usage notes in + the file USING, design notes in the Documentation directory, and the +Index: pptp.c +=================================================================== +RCS file: /cvsroot/pptpclient/pptp-linux/pptp.c,v +retrieving revision 1.55 +diff -u -r1.55 pptp.c +--- pptp.c 3 Mar 2011 22:44:57 -0000 1.55 ++++ pptp.c 8 Nov 2011 16:01:33 -0000 +@@ -14,7 +14,8 @@ + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software +- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ++ 02110-1301, USA. + + pptp.c ... client shell to launch call managers, data handlers, and + the pppd from the command line. +Index: routing.c +=================================================================== +RCS file: /cvsroot/pptpclient/pptp-linux/routing.c,v +retrieving revision 1.5 +diff -u -r1.5 routing.c +--- routing.c 3 Mar 2011 22:44:57 -0000 1.5 ++++ routing.c 8 Nov 2011 16:01:33 -0000 +@@ -14,7 +14,8 @@ + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ++ 02110-1301, USA + + */ + diff --git a/pptp-1.7.2-nested-externs.patch b/pptp-1.7.2-nested-externs.patch new file mode 100644 index 0000000..a3751a9 --- /dev/null +++ b/pptp-1.7.2-nested-externs.patch @@ -0,0 +1,23 @@ +diff -up pptp-1.7.2/pptp_gre.c.nested pptp-1.7.2/pptp_gre.c +--- pptp-1.7.2/pptp_gre.c.nested 2011-12-06 16:45:34.605691678 +0000 ++++ pptp-1.7.2/pptp_gre.c 2011-12-06 19:07:14.169449813 +0000 +@@ -23,6 +23,10 @@ + #include "pqueue.h" + #include "test.h" + ++/* globals from pptp.c */ ++extern struct in_addr localbind; ++extern int rtmark; ++ + #define PACKET_MAX 8196 + /* test for a 32 bit counter overflow */ + #define WRAPPED( curseq, lastseq) \ +@@ -82,8 +86,6 @@ uint64_t time_now_usecs(void) + int pptp_gre_bind(struct in_addr inetaddr) + { + struct sockaddr_in src_addr, loc_addr; +- extern struct in_addr localbind; +- extern int rtmark; + int s = socket(AF_INET, SOCK_RAW, PPTP_PROTO); + if (s < 0) { warn("socket: %s", strerror(errno)); return -1; } + #ifdef SO_MARK diff --git a/pptp-1.7.2-prototype.patch b/pptp-1.7.2-prototype.patch new file mode 100644 index 0000000..34a0ac8 --- /dev/null +++ b/pptp-1.7.2-prototype.patch @@ -0,0 +1,219 @@ +diff -up pptp-1.7.2/pptp_ctrl.c.prototype pptp-1.7.2/pptp_ctrl.c +--- pptp-1.7.2/pptp_ctrl.c.prototype 2011-12-06 16:41:47.391574067 +0000 ++++ pptp-1.7.2/pptp_ctrl.c 2011-12-06 16:41:47.405574074 +0000 +@@ -174,7 +174,7 @@ int max_echo_wait = PPTP_TIMEOUT; + + /* Local prototypes */ + static void pptp_reset_timer(void); +-static void pptp_handle_timer(); ++static void pptp_handle_timer(void); + /* Write/read as much as we can without blocking. */ + int pptp_write_some(PPTP_CONN * conn); + int pptp_read_some(PPTP_CONN * conn); +@@ -1059,7 +1059,7 @@ static void pptp_reset_timer(void) + + + /*** Handle keep-alive timer **************************************************/ +-static void pptp_handle_timer() ++static void pptp_handle_timer(void) + { + int i; + /* "Keep Alives and Timers, 1": check connection state */ +diff -up pptp-1.7.2/pptp_gre.c.prototype pptp-1.7.2/pptp_gre.c +--- pptp-1.7.2/pptp_gre.c.prototype 2011-12-06 16:41:47.392574067 +0000 ++++ pptp-1.7.2/pptp_gre.c 2011-12-06 16:45:34.605691678 +0000 +@@ -71,7 +71,7 @@ void print_packet(int fd, void *pack, un + #endif + + /*** time_now_usecs ***********************************************************/ +-uint64_t time_now_usecs() ++uint64_t time_now_usecs(void) + { + struct timeval tv; + gettimeofday(&tv, NULL); +diff -up pptp-1.7.2/pptp_quirks.c.prototype pptp-1.7.2/pptp_quirks.c +--- pptp-1.7.2/pptp_quirks.c.prototype 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/pptp_quirks.c 2011-12-06 16:41:47.405574074 +0000 +@@ -30,7 +30,7 @@ int set_quirk_index(int index) + return -1; + } + +-int get_quirk_index() ++int get_quirk_index(void) + { + return quirk_index; + } +diff -up pptp-1.7.2/pptp_quirks.h.prototype pptp-1.7.2/pptp_quirks.h +--- pptp-1.7.2/pptp_quirks.h.prototype 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/pptp_quirks.h 2011-12-06 16:41:47.406574074 +0000 +@@ -53,7 +53,7 @@ int set_quirk_index(int index); + + /* get the global quirk index. return the index on success, + -1 if no quirk is defined */ +-int get_quirk_index(); ++int get_quirk_index(void); + + + #endif /* INC_PPTP_QUIRKS_H */ +diff -up pptp-1.7.2/pqueue.c.prototype pptp-1.7.2/pqueue.c +--- pptp-1.7.2/pqueue.c.prototype 2011-12-06 16:41:47.392574067 +0000 ++++ pptp-1.7.2/pqueue.c 2011-12-06 16:41:47.406574074 +0000 +@@ -217,7 +217,7 @@ int pqueue_del (pqueue_t *point) { + + + +-pqueue_t *pqueue_head () { ++pqueue_t *pqueue_head (void) { + return pq_head; + } + +diff -up pptp-1.7.2/pqueue.h.prototype pptp-1.7.2/pqueue.h +--- pptp-1.7.2/pqueue.h.prototype 2011-12-06 16:41:47.392574067 +0000 ++++ pptp-1.7.2/pqueue.h 2011-12-06 16:41:47.407574075 +0000 +@@ -24,7 +24,7 @@ typedef struct pqueue { + + int pqueue_add (u_int32_t seq, unsigned char *packet, int packlen); + int pqueue_del (pqueue_t *point); +-pqueue_t *pqueue_head (); ++pqueue_t *pqueue_head (void); + int pqueue_expiry_time (pqueue_t *entry); + + #endif /* PQUEUE_H */ +diff -up pptp-1.7.2/routing.c.prototype pptp-1.7.2/routing.c +--- pptp-1.7.2/routing.c.prototype 2011-12-06 16:41:47.388574065 +0000 ++++ pptp-1.7.2/routing.c 2011-12-06 16:41:47.407574075 +0000 +@@ -123,7 +123,7 @@ void routing_init(char *ip) { + #endif /* Solaris */ + } + +-void routing_start() { ++void routing_start(void) { + #if defined (__SVR4) && defined (__sun) /* Solaris */ + if ( ! dorouting ) + return; +@@ -153,7 +153,7 @@ void routing_start() { + #endif /* Solaris */ + } + +-void routing_end() { ++void routing_end(void) { + #if defined (__SVR4) && defined (__sun) /* Solaris */ + if ( ! dorouting) + return; +diff -up pptp-1.7.2/routing.h.prototype pptp-1.7.2/routing.h +--- pptp-1.7.2/routing.h.prototype 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/routing.h 2011-12-06 16:41:47.407574075 +0000 +@@ -1,3 +1,3 @@ + void routing_init(char *ip); +-void routing_start(); +-void routing_end(); ++void routing_start(void); ++void routing_end(void); +diff -up pptp-1.7.2/test.c.prototype pptp-1.7.2/test.c +--- pptp-1.7.2/test.c.prototype 2011-12-06 16:41:47.393574067 +0000 ++++ pptp-1.7.2/test.c 2011-12-06 16:41:47.408574076 +0000 +@@ -171,7 +171,7 @@ static ssize_t write_reordered(int fd, c + } + } + +-struct test_redirections *test_redirections() ++struct test_redirections *test_redirections(void) + { + static struct test_redirections *my = NULL; + +diff -up pptp-1.7.2/test.h.prototype pptp-1.7.2/test.h +--- pptp-1.7.2/test.h.prototype 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/test.h 2011-12-06 16:41:47.408574076 +0000 +@@ -2,4 +2,4 @@ struct test_redirections { + ssize_t (*write)(int fd, const void *buf, size_t count); + }; + +-struct test_redirections *test_redirections(); ++struct test_redirections *test_redirections(void); +diff -up pptp-1.7.2/util.c.prototype pptp-1.7.2/util.c +--- pptp-1.7.2/util.c.prototype 2011-12-06 16:41:47.396574070 +0000 ++++ pptp-1.7.2/util.c 2011-12-06 16:41:47.409574076 +0000 +@@ -87,7 +87,7 @@ int file2fd(const char *path, const char + static int sigpipe[2]; + + /* create a signal pipe, returns 0 for success, -1 with errno for failure */ +-int sigpipe_create() ++int sigpipe_create(void) + { + int rc; + +@@ -133,20 +133,20 @@ void sigpipe_assign(int signum) + } + + /* return the signal pipe read file descriptor for select(2) */ +-int sigpipe_fd() ++int sigpipe_fd(void) + { + return sigpipe[0]; + } + + /* read and return the pending signal from the pipe */ +-int sigpipe_read() ++int sigpipe_read(void) + { + int signum; + read(sigpipe[0], &signum, sizeof(signum)); + return signum; + } + +-void sigpipe_close() ++void sigpipe_close(void) + { + close(sigpipe[0]); + close(sigpipe[1]); +diff -up pptp-1.7.2/util.h.prototype pptp-1.7.2/util.h +--- pptp-1.7.2/util.h.prototype 2011-12-06 16:41:47.396574070 +0000 ++++ pptp-1.7.2/util.h 2011-12-06 16:41:47.409574076 +0000 +@@ -35,7 +35,7 @@ int file2fd(const char *path, const char + /* signal to pipe delivery implementation */ + + /* create a signal pipe, returns 0 for success, -1 with errno for failure */ +-int sigpipe_create(); ++int sigpipe_create(void); + + /* generic handler for signals, writes signal number to pipe */ + void sigpipe_handler(int signum); +@@ -44,11 +44,11 @@ void sigpipe_handler(int signum); + void sigpipe_assign(int signum); + + /* return the signal pipe read file descriptor for select(2) */ +-int sigpipe_fd(); ++int sigpipe_fd(void); + + /* read and return the pending signal from the pipe */ +-int sigpipe_read(); ++int sigpipe_read(void); + +-void sigpipe_close(); ++void sigpipe_close(void); + + #endif /* INC_UTIL_H */ +diff -up pptp-1.7.2/vector.c.prototype pptp-1.7.2/vector.c +--- pptp-1.7.2/vector.c.prototype 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/vector.c 2011-12-06 16:41:47.409574076 +0000 +@@ -35,7 +35,7 @@ struct vector_struct { + static struct vector_item *binary_search(VECTOR *v, int key); + + /*** vector_create ************************************************************/ +-VECTOR *vector_create() ++VECTOR *vector_create(void) + { + const int INITIAL_SIZE = 4; + +diff -up pptp-1.7.2/vector.h.prototype pptp-1.7.2/vector.h +--- pptp-1.7.2/vector.h.prototype 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/vector.h 2011-12-06 16:41:47.410574077 +0000 +@@ -12,7 +12,7 @@ + + typedef struct vector_struct VECTOR; + +-VECTOR *vector_create(); ++VECTOR *vector_create(void); + void vector_destroy(VECTOR *v); + + int vector_size(VECTOR *v); diff --git a/pptp-1.7.2-sign-compare.patch b/pptp-1.7.2-sign-compare.patch new file mode 100644 index 0000000..bb82904 --- /dev/null +++ b/pptp-1.7.2-sign-compare.patch @@ -0,0 +1,150 @@ +diff -up pptp-1.7.2/pptp_ctrl.c.sign-compare pptp-1.7.2/pptp_ctrl.c +--- pptp-1.7.2/pptp_ctrl.c.sign-compare 2011-11-30 16:33:00.877964659 +0000 ++++ pptp-1.7.2/pptp_ctrl.c 2011-11-30 18:49:17.603973525 +0000 +@@ -193,7 +193,7 @@ int ctrlp_disp(PPTP_CONN * conn, void * + void pptp_set_link(PPTP_CONN * conn, int peer_call_id); + + /*** log error information in control packets *********************************/ +-static void ctrlp_error( int result, int error, int cause, ++static void ctrlp_error( int result, u_int8_t error, int cause, + const char *result_text[], int max_result) + { + if( cause >= 0) +@@ -238,7 +238,7 @@ static const char *ctrl_msg_types[] = { + #define MAX_CTRLMSG_TYPE 15 + + /*** report a sent packet ****************************************************/ +-static void ctrlp_rep( void * buffer, int size, int isbuff) ++static void ctrlp_rep( void * buffer, size_t size, int isbuff) + { + struct pptp_header *packet = buffer; + unsigned int type; +@@ -532,7 +532,7 @@ int pptp_write_some(PPTP_CONN * conn) { + return -1; + } + } +- assert(retval <= conn->write_size); ++ assert((size_t)retval <= conn->write_size); + conn->write_size -= retval; + memmove(conn->write_buffer, conn->write_buffer + retval, conn->write_size); + ctrlp_rep(conn->write_buffer, retval, 0); +diff -up pptp-1.7.2/pptp_gre.c.sign-compare pptp-1.7.2/pptp_gre.c +--- pptp-1.7.2/pptp_gre.c.sign-compare 2011-11-30 16:33:00.899964648 +0000 ++++ pptp-1.7.2/pptp_gre.c 2011-11-30 16:33:00.911964643 +0000 +@@ -200,8 +200,7 @@ void pptp_gre_copy(u_int16_t call_id, u_ + int decaps_hdlc(int fd, int (*cb)(int cl, void *pack, unsigned int len), int cl) + { + unsigned char buffer[PACKET_MAX]; +- unsigned int start = 0; +- int end; ++ ssize_t start = 0, end; + int status; + static unsigned int len = 0, escape = 0; + static unsigned char copy[PACKET_MAX]; +@@ -210,7 +209,7 @@ int decaps_hdlc(int fd, int (*cb)(int cl + /* this is the only blocking read we will allow */ + if ((end = read (fd, buffer, sizeof(buffer))) <= 0) { + int saved_errno = errno; +- warn("short read (%d): %s", end, strerror(saved_errno)); ++ warn("short read (%zd): %s", end, strerror(saved_errno)); + switch (saved_errno) { + case EMSGSIZE: { + socklen_t optval, optlen = sizeof(optval); +@@ -499,7 +498,7 @@ int encaps_gre (int fd, void *pack, unsi + if (errno == ENOBUFS) + rc = 0; /* Simply ignore it */ + stats.tx_failed++; +- } else if (rc < sizeof(u.header) - sizeof(u.header.seq)) { ++ } else if ((size_t)rc < sizeof(u.header) - sizeof(u.header.seq)) { + stats.tx_short++; + } else { + stats.tx_acks++; +@@ -533,7 +532,7 @@ int encaps_gre (int fd, void *pack, unsi + if (errno == ENOBUFS) + rc = 0; /* Simply ignore it */ + stats.tx_failed++; +- } else if (rc < header_len + len) { ++ } else if ((size_t)rc < header_len + len) { + stats.tx_short++; + } else { + stats.tx_sent++; +diff -up pptp-1.7.2/pqueue.c.sign-compare pptp-1.7.2/pqueue.c +--- pptp-1.7.2/pqueue.c.sign-compare 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/pqueue.c 2011-11-30 16:41:39.598648652 +0000 +@@ -17,7 +17,7 @@ + + #define MIN_CAPACITY 128 /* min allocated buffer for a packet */ + +-static int pqueue_alloc (int seq, unsigned char *packet, int packlen, pqueue_t **new); ++static int pqueue_alloc (u_int32_t seq, unsigned char *packet, int packlen, pqueue_t **new); + + int packet_timeout_usecs = DEFAULT_PACKET_TIMEOUT * 1000000; + +@@ -29,7 +29,7 @@ static pqueue_t *pq_freelist_head = NULL + + + +-static int pqueue_alloc(int seq, unsigned char *packet, int packlen, pqueue_t **new) { ++static int pqueue_alloc(u_int32_t seq, unsigned char *packet, int packlen, pqueue_t **new) { + + pqueue_t *newent; + +@@ -125,7 +125,7 @@ static int pqueue_alloc(int seq, unsigne + + + +-int pqueue_add (int seq, unsigned char *packet, int packlen) { ++int pqueue_add (u_int32_t seq, unsigned char *packet, int packlen) { + pqueue_t *newent, *point; + + /* get a new entry */ +diff -up pptp-1.7.2/pqueue.h.sign-compare pptp-1.7.2/pqueue.h +--- pptp-1.7.2/pqueue.h.sign-compare 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/pqueue.h 2011-11-30 18:42:16.733706666 +0000 +@@ -15,14 +15,14 @@ extern int packet_timeout_usecs; + typedef struct pqueue { + struct pqueue *next; + struct pqueue *prev; +- int seq; ++ u_int32_t seq; + struct timeval expires; + unsigned char *packet; + int packlen; + int capacity; + } pqueue_t; + +-int pqueue_add (int seq, unsigned char *packet, int packlen); ++int pqueue_add (u_int32_t seq, unsigned char *packet, int packlen); + int pqueue_del (pqueue_t *point); + pqueue_t *pqueue_head (); + int pqueue_expiry_time (pqueue_t *entry); +diff -up pptp-1.7.2/test.c.sign-compare pptp-1.7.2/test.c +--- pptp-1.7.2/test.c.sign-compare 2008-05-14 07:33:55.000000000 +0100 ++++ pptp-1.7.2/test.c 2011-11-30 18:45:44.553853995 +0000 +@@ -52,7 +52,7 @@ static ssize_t write_reordered_swap(int + test_ordering_phase = 0; + /* send the new packet first */ + stat = write(fd, buf, count); +- if (stat != count) return stat; ++ if ((size_t)stat != count) return stat; + /* then send the old packet next */ + stat = write(fd, pocket_buf, pocket_count); + free(pocket_buf); +@@ -96,7 +96,7 @@ static ssize_t write_reordered_retransmi + test_ordering_phase = 0; + /* send the new packet first */ + stat = write(fd, buf, count); +- if (stat != count) return stat; ++ if ((size_t)stat != count) return stat; + /* send the buffered packets in normal order */ + for (n=0; n0; n--) { + stat = write(fd, pocket_buf[n], pocket_count[n]); diff --git a/pptp-1.7.2-unused.patch b/pptp-1.7.2-unused.patch new file mode 100644 index 0000000..635cd73 --- /dev/null +++ b/pptp-1.7.2-unused.patch @@ -0,0 +1,73 @@ +diff -up pptp-1.7.2/pptp_callmgr.c.unused pptp-1.7.2/pptp_callmgr.c +--- pptp-1.7.2/pptp_callmgr.c.unused 2011-12-01 09:58:47.127960697 +0000 ++++ pptp-1.7.2/pptp_callmgr.c 2011-12-01 09:58:47.149960723 +0000 +@@ -38,12 +38,12 @@ void close_unixsock(int fd, struct in_ad + + sigjmp_buf callmgr_env; + +-void callmgr_sighandler(int sig) { ++void callmgr_sighandler(int sig __attribute__ ((unused))) { + /* TODO: according to signal(2), siglongjmp() is unsafe used here */ + siglongjmp (callmgr_env, 1); + } + +-void callmgr_do_nothing(int sig) { ++void callmgr_do_nothing(int sig __attribute__ ((unused))) { + /* do nothing signal handler */ + } + +@@ -104,7 +104,7 @@ void call_callback(PPTP_CONN *conn, PPTP + *****************************************************************************/ + + /*** Call Manager *************************************************************/ +-int callmgr_main(int argc, char **argv, char **envp) ++int callmgr_main(int argc, char **argv, char **envp __attribute__ ((unused))) + { + struct in_addr inetaddr; + int inet_sock, unix_sock; +@@ -377,7 +377,7 @@ int open_unixsock(struct in_addr inetadd + } + + /*** close_inetsock ***********************************************************/ +-void close_inetsock(int fd, struct in_addr inetaddr) ++void close_inetsock(int fd, struct in_addr inetaddr __attribute__ ((unused))) + { + close(fd); + } +diff -up pptp-1.7.2/pptp.c.unused pptp-1.7.2/pptp.c +--- pptp-1.7.2/pptp.c.unused 2011-12-01 09:58:47.143960715 +0000 ++++ pptp-1.7.2/pptp.c 2011-12-01 10:01:40.171147875 +0000 +@@ -151,13 +151,13 @@ void do_nothing(int sig) + sigjmp_buf env; + + /*** signal handler ***********************************************************/ +-void sighandler(int sig) ++void sighandler(int sig __attribute__ ((unused))) + { + siglongjmp(env, 1); + } + + /*** report statistics signal handler (SIGUSR1) *******************************/ +-void sigstats(int sig) ++void sigstats(int sig __attribute__ ((unused))) + { + syslog(LOG_NOTICE, "GRE statistics:\n"); + #define LOG(name,value) syslog(LOG_NOTICE, name "\n", stats .value) +@@ -508,7 +508,7 @@ int open_callmgr(struct in_addr inetaddr + } + + /*** call the call manager main ***********************************************/ +-void launch_callmgr(struct in_addr inetaddr, char *phonenr, int argc, ++void launch_callmgr(struct in_addr inetaddr, char *phonenr, int argc __attribute__ ((unused)), + char**argv,char**envp) + { + char *my_argv[3] = { argv[0], inet_ntoa(inetaddr), phonenr }; +@@ -566,7 +566,7 @@ void launch_pppd(char *ttydev, int argc, + { + char *new_argv[argc + 4];/* XXX if not using GCC, hard code a limit here. */ + char str_pppd[] = PPPD_BINARY; +- char str_direct[] = "-direct"; ++ char str_direct[] __attribute__ ((unused)) = "-direct"; + char str_38400[] = "38400"; + int i = 0, j; + new_argv[i++] = str_pppd; diff --git a/pptp.spec b/pptp.spec index fa02066..da1fd67 100644 --- a/pptp.spec +++ b/pptp.spec @@ -1,6 +1,6 @@ Name: pptp Version: 1.7.2 -Release: 13.1%{?dist} +Release: 13.2%{?dist} Summary: Point-to-Point Tunneling Protocol (PPTP) Client Group: Applications/Internet License: GPLv2+ @@ -20,6 +20,14 @@ Patch9: pptp-1.7.2-call-disconnect-notify.patch Patch10: pptp-1.7.2-so_mark.patch Patch11: pptp-1.7.2-nohostroute-option.patch Patch12: pptp-1.7.2-parallel-build.patch +Patch13: pptp-1.7.2-fsf-update.patch +Patch101: pptp-1.7.2-sign-compare.patch +Patch102: pptp-1.7.2-const.patch +Patch103: pptp-1.7.2-field-init.patch +Patch104: pptp-1.7.2-unused.patch +Patch105: pptp-1.7.2-prototype.patch +Patch106: pptp-1.7.2-nested-externs.patch +Patch107: pptp-1.7.2-aliasing.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -nu) Requires: ppp >= 2.4.2, /sbin/ip %if 0%{?fedora} > 14 @@ -84,12 +92,36 @@ tunnels. # Implement the --nohostroute option that routing.c talks about (upstream patch) %patch11 -p1 -b .nohostroute +# Update the FSF address references and GPLv2 license text (upstream patch) +%patch13 -p0 -b .fsf + +# Fix comparisons between signed and unsigned integers +%patch101 -p1 -b .sign-compare + +# Fix const usage +%patch102 -p1 -b .const + +# Add missing field initializers +%patch103 -p1 -b .field + +# Suppress warnings about possibly unused variables +%patch104 -p1 -b .unused + +# Fix declarations that are not prototypes +%patch105 -p1 -b .prototype + +# Fix warnings about nested externs +%patch106 -p1 -b .nested + +# Fix aliasing issues +%patch107 -p1 -b .alias + # Pacify rpmlint perl -pi -e 's/install -o root -m 555 pptp/install -m 755 pptp/;' Makefile %build -OUR_CFLAGS="$(echo X%{optflags} | sed -e 's/^X//; s/-O[0-9]* /-O0 /')" -make %{?_smp_mflags} CFLAGS="-Wall $OUR_CFLAGS" IP=/sbin/ip +OUR_CFLAGS="-Wall %{optflags} -Wextra -Wstrict-aliasing=2 -Wnested-externs -Wstrict-prototypes" +make %{?_smp_mflags} CFLAGS="$OUR_CFLAGS" IP=/sbin/ip %install rm -rf %{buildroot} @@ -126,6 +158,19 @@ rm -rf %{buildroot} %{_mandir}/man8/pptpsetup.8* %changelog +* Wed Nov 30 2011 Paul Howarth 1.7.2-13.2 +- Add patch to fix highly-parallel build (e.g. -j16) +- Add additional compiler warning flags to highlight questionable code +- Add patch to fix comparisons between signed and unsigned integers +- Add patch to fix const usage +- Add patch to fix missing field initializers +- Add patch to suppress warnings about possibly unused variables +- Add patch to fix declarations that are not prototypes +- Add patch to fix warnings about nested externs +- Add patch to fix dubious typecasts that violate strict-aliasing rules +- Update the FSF address references and GPLv2 license text +- Use default optimization level (-O2) again + * Fri Nov 11 2011 Paul Howarth 1.7.2-13.1 - Drop compiler optimization level to -O0 as per upstream in attempt to resolve occasional segfault in pptpcm (#749455)