(#492090) - Use upstream versions of patches - Re-enable parallel build; Makefile dependencies now fixed - Use perl rather than sed to edit Makefile, for spec compatibility with ancient distro releases
187 lines
5.2 KiB
Diff
187 lines
5.2 KiB
Diff
Index: routing.c
|
|
===================================================================
|
|
RCS file: /cvsroot/pptpclient/pptp-linux/routing.c,v
|
|
retrieving revision 1.1
|
|
diff -u -r1.1 routing.c
|
|
--- routing.c 2 Aug 2006 07:07:37 -0000 1.1
|
|
+++ routing.c 25 Mar 2009 13:58:28 -0000
|
|
@@ -23,9 +23,26 @@
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "routing.h"
|
|
+#include "config.h"
|
|
|
|
+#if defined (__SVR4) && defined (__sun) /* Solaris */
|
|
+#include <sys/types.h>
|
|
+#include <sys/socket.h>
|
|
+#include <net/if.h>
|
|
+#include <arpa/inet.h>
|
|
+#include <errno.h>
|
|
+#include "util.h"
|
|
+/* PF_ROUTE socket*/
|
|
+int rts;
|
|
+/* Destination and gateway addresses */
|
|
+struct sockaddr_in rdst, rgw;
|
|
+/* Request sequence */
|
|
+int rseq;
|
|
+int dorouting;
|
|
+#else /* Solaris */
|
|
/* route to the server */
|
|
char *route;
|
|
+#endif /* Solaris */
|
|
|
|
/*
|
|
|
|
@@ -54,26 +71,113 @@
|
|
*/
|
|
|
|
void routing_init(char *ip) {
|
|
+#if defined (__SVR4) && defined (__sun) /* Solaris */
|
|
+ rdst.sin_family = AF_INET;
|
|
+ if ( ! inet_pton(AF_INET, ip, &rdst.sin_addr) ) {
|
|
+ log("Cannot convert address: %s", strerror(errno));
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if ( (rts = socket(PF_ROUTE, SOCK_RAW, AF_INET )) < 0 ) {
|
|
+ log("Cannot open routing socket: %s", strerror(errno));
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ struct rt_msg rtm = {
|
|
+ .hdr.rtm_msglen = sizeof(struct rt_msg),
|
|
+ .hdr.rtm_version = RTM_VERSION,
|
|
+ .hdr.rtm_type = RTM_GET,
|
|
+ .hdr.rtm_addrs = RTA_DST,
|
|
+ .hdr.rtm_pid = getpid(),
|
|
+ .hdr.rtm_seq = ++rseq,
|
|
+ .addrs[RTAX_DST] = rdst
|
|
+ };
|
|
+
|
|
+ if ( write(rts, &rtm, rtm.hdr.rtm_msglen) != rtm.hdr.rtm_msglen ) {
|
|
+ log("Error writing to routing socket: %s", strerror(errno));
|
|
+ close(rts);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ while ( read(rts, &rtm, sizeof(struct rt_msg)) > 0 )
|
|
+ if ( rtm.hdr.rtm_pid == getpid() && rtm.hdr.rtm_seq == rseq) {
|
|
+ /* Check if host route already present */
|
|
+ if ( ( rtm.hdr.rtm_flags & RTF_HOST ) != RTF_HOST ) {
|
|
+ rgw = rtm.addrs[RTAX_GATEWAY];
|
|
+ dorouting = 1;
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+#else /* Solaris */
|
|
char buf[256];
|
|
- snprintf(buf, 255, "/bin/ip route get %s", ip);
|
|
- FILE *p = popen(buf, "r");
|
|
+ FILE *p;
|
|
+
|
|
+ snprintf(buf, 255, "%s route get %s", IP_BINARY, ip);
|
|
+ p = popen(buf, "r");
|
|
fgets(buf, 255, p);
|
|
/* TODO: check for failure of fgets */
|
|
route = strdup(buf);
|
|
pclose(p);
|
|
/* TODO: check for failure of command */
|
|
+#endif /* Solaris */
|
|
}
|
|
|
|
void routing_start() {
|
|
+#if defined (__SVR4) && defined (__sun) /* Solaris */
|
|
+ if ( ! dorouting )
|
|
+ return;
|
|
+
|
|
+ struct rt_msg rtm = {
|
|
+ .hdr.rtm_msglen = sizeof(struct rt_msg),
|
|
+ .hdr.rtm_version = RTM_VERSION,
|
|
+ .hdr.rtm_type = RTM_ADD,
|
|
+ .hdr.rtm_flags = RTF_HOST | RTF_GATEWAY | RTF_STATIC,
|
|
+ .hdr.rtm_addrs = RTA_DST | RTA_GATEWAY,
|
|
+ .hdr.rtm_pid = getpid(),
|
|
+ .hdr.rtm_seq = ++rseq,
|
|
+ .addrs[RTAX_DST] = rdst,
|
|
+ .addrs[RTAX_GATEWAY] = rgw
|
|
+ };
|
|
+
|
|
+ if ( write(rts, &rtm, rtm.hdr.rtm_msglen) != rtm.hdr.rtm_msglen ) {
|
|
+ log("Error adding route: %s", strerror(errno));
|
|
+ }
|
|
+#else /* Solaris */
|
|
char buf[256];
|
|
- snprintf(buf, 255, "/bin/ip route replace %s", route);
|
|
- FILE *p = popen(buf, "r");
|
|
+ FILE *p;
|
|
+
|
|
+ snprintf(buf, 255, "%s route replace %s", IP_BINARY, route);
|
|
+ p = popen(buf, "r");
|
|
pclose(p);
|
|
+#endif /* Solaris */
|
|
}
|
|
|
|
void routing_end() {
|
|
+#if defined (__SVR4) && defined (__sun) /* Solaris */
|
|
+ if ( ! dorouting)
|
|
+ return;
|
|
+
|
|
+ struct rt_msg rtm = {
|
|
+ .hdr.rtm_msglen = sizeof(struct rt_msg),
|
|
+ .hdr.rtm_version = RTM_VERSION,
|
|
+ .hdr.rtm_type = RTM_DELETE,
|
|
+ .hdr.rtm_flags = RTF_HOST | RTF_GATEWAY | RTF_STATIC,
|
|
+ .hdr.rtm_addrs = RTA_DST | RTA_GATEWAY,
|
|
+ .hdr.rtm_pid = getpid(),
|
|
+ .hdr.rtm_seq = ++rseq,
|
|
+ .addrs[RTAX_DST] = rdst,
|
|
+ .addrs[RTAX_GATEWAY] = rgw
|
|
+ };
|
|
+
|
|
+ if ( write(rts, &rtm, rtm.hdr.rtm_msglen) != rtm.hdr.rtm_msglen ) {
|
|
+ log("Error deleting route: %s", strerror(errno));
|
|
+ }
|
|
+#else /* Solaris */
|
|
char buf[256];
|
|
- snprintf(buf, 255, "/bin/ip route delete %s", route);
|
|
- FILE *p = popen(buf, "r");
|
|
+ FILE *p;
|
|
+
|
|
+ snprintf(buf, 255, "%s route delete %s", IP_BINARY, route);
|
|
+ p = popen(buf, "r");
|
|
pclose(p);
|
|
+#endif /* Solaris */
|
|
}
|
|
Index: Makefile
|
|
===================================================================
|
|
RCS file: /cvsroot/pptpclient/pptp-linux/Makefile,v
|
|
retrieving revision 1.47
|
|
retrieving revision 1.49
|
|
diff -u -r1.47 -r1.49
|
|
--- Makefile 14 May 2008 06:32:52 -0000 1.47
|
|
+++ Makefile 24 Jul 2008 05:37:47 -0000 1.49
|
|
@@ -1,10 +1,13 @@
|
|
-# $Id: pptp-1.7.2-ip-path.patch,v 1.2 2009/03/25 15:57:57 pghmcfc Exp $
|
|
+# $Id: pptp-1.7.2-ip-path.patch,v 1.2 2009/03/25 15:57:57 pghmcfc Exp $
|
|
VERSION=1.7.2
|
|
RELEASE=
|
|
|
|
#################################################################
|
|
-# CHANGE THIS LINE to point to the location of your pppd binary.
|
|
+# CHANGE THIS LINE to point to the location of binaries
|
|
PPPD = /usr/sbin/pppd
|
|
+# Solaris
|
|
+# PPPD = /usr/bin/pppd
|
|
+IP = /bin/ip
|
|
#################################################################
|
|
|
|
BINDIR=$(DESTDIR)/usr/sbin
|
|
@@ -47,6 +52,7 @@
|
|
echo "/* text added by Makefile target config.h */" > config.h
|
|
echo "#define PPTP_LINUX_VERSION \"$(VERSION)$(RELEASE)\"" >> config.h
|
|
echo "#define PPPD_BINARY \"$(PPPD)\"" >> config.h
|
|
+ echo "#define IP_BINARY \"$(IP)\"" >> config.h
|
|
|
|
vector_test: vector_test.o vector.o
|
|
$(CC) -o vector_test vector_test.o vector.o
|