Attack compiler and rpmlint warnings

- 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

Some of these patches have already been accepted upstream, with the
rest having been submitted for review.
This commit is contained in:
Paul Howarth 2011-12-12 14:08:43 +00:00
parent d7cf92742a
commit a322d1799b
9 changed files with 930 additions and 3 deletions

172
pptp-1.7.2-aliasing.patch Normal file
View File

@ -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();

52
pptp-1.7.2-const.patch Normal file
View File

@ -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) */

View File

@ -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 */,

182
pptp-1.7.2-fsf-update.patch Normal file
View File

@ -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.
<one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
+ Copyright (C) <year> <name of author>
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
*/

View File

@ -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

219
pptp-1.7.2-prototype.patch Normal file
View File

@ -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);

View File

@ -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; n<test_length; n++) {
stat = write(fd, pocket_buf[n], pocket_count[n]);
@@ -142,7 +142,7 @@ static ssize_t write_reordered_reverse(i
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 reverse order */
for (n=test_length-1; n>0; n--) {
stat = write(fd, pocket_buf[n], pocket_count[n]);

73
pptp-1.7.2-unused.patch Normal file
View File

@ -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;

View File

@ -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 <paul@city-fan.org> 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 <paul@city-fan.org> 1.7.2-13.1
- Drop compiler optimization level to -O0 as per upstream in attempt to
resolve occasional segfault in pptpcm (#749455)