/[smeserver]/rpms/ppp/sme10/ppp-2.4.4-fd_leak.patch
ViewVC logotype

Annotation of /rpms/ppp/sme10/ppp-2.4.4-fd_leak.patch

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


Revision 1.1 - (hide annotations) (download)
Thu Feb 4 13:23:45 2016 UTC (8 years, 9 months ago) by vip-ire
Branch: MAIN
CVS Tags: ppp-2_4_5-24_el7_sme, HEAD
sme10 branch

1 vip-ire 1.1 diff -up ppp-2.4.4/pppd/auth.c.fd_leak ppp-2.4.4/pppd/auth.c
2     --- ppp-2.4.4/pppd/auth.c.fd_leak 2006-06-18 13:26:00.000000000 +0200
3     +++ ppp-2.4.4/pppd/auth.c 2009-10-08 21:22:59.789547513 +0200
4     @@ -428,7 +428,7 @@ setupapfile(argv)
5     option_error("unable to reset uid before opening %s: %m", fname);
6     return 0;
7     }
8     - ufile = fopen(fname, "r");
9     + ufile = fopen_r(fname);
10     if (seteuid(euid) == -1)
11     fatal("unable to regain privileges: %m");
12     if (ufile == NULL) {
13     @@ -1414,7 +1414,7 @@ check_passwd(unit, auser, userlen, apass
14     filename = _PATH_UPAPFILE;
15     addrs = opts = NULL;
16     ret = UPAP_AUTHNAK;
17     - f = fopen(filename, "r");
18     + f = fopen_r(filename);
19     if (f == NULL) {
20     error("Can't open PAP password file %s: %m", filename);
21    
22     @@ -1511,7 +1511,7 @@ null_login(unit)
23     if (ret <= 0) {
24     filename = _PATH_UPAPFILE;
25     addrs = NULL;
26     - f = fopen(filename, "r");
27     + f = fopen_r(filename);
28     if (f == NULL)
29     return 0;
30     check_access(f, filename);
31     @@ -1558,7 +1558,7 @@ get_pap_passwd(passwd)
32     }
33    
34     filename = _PATH_UPAPFILE;
35     - f = fopen(filename, "r");
36     + f = fopen_r(filename);
37     if (f == NULL)
38     return 0;
39     check_access(f, filename);
40     @@ -1596,7 +1596,7 @@ have_pap_secret(lacks_ipp)
41     }
42    
43     filename = _PATH_UPAPFILE;
44     - f = fopen(filename, "r");
45     + f = fopen_r(filename);
46     if (f == NULL)
47     return 0;
48    
49     @@ -1641,7 +1641,7 @@ have_chap_secret(client, server, need_ip
50     }
51    
52     filename = _PATH_CHAPFILE;
53     - f = fopen(filename, "r");
54     + f = fopen_r(filename);
55     if (f == NULL)
56     return 0;
57    
58     @@ -1683,7 +1683,7 @@ have_srp_secret(client, server, need_ip,
59     struct wordlist *addrs;
60    
61     filename = _PATH_SRPFILE;
62     - f = fopen(filename, "r");
63     + f = fopen_r(filename);
64     if (f == NULL)
65     return 0;
66    
67     @@ -1739,7 +1739,7 @@ get_secret(unit, client, server, secret,
68     addrs = NULL;
69     secbuf[0] = 0;
70    
71     - f = fopen(filename, "r");
72     + f = fopen_r(filename);
73     if (f == NULL) {
74     error("Can't open chap secret file %s: %m", filename);
75     return 0;
76     @@ -1796,7 +1796,7 @@ get_srp_secret(unit, client, server, sec
77     filename = _PATH_SRPFILE;
78     addrs = NULL;
79    
80     - fp = fopen(filename, "r");
81     + fp = fopen_r(filename);
82     if (fp == NULL) {
83     error("Can't open srp secret file %s: %m", filename);
84     return 0;
85     @@ -2202,7 +2202,7 @@ scan_authfile(f, client, server, secret,
86     */
87     if (word[0] == '@' && word[1] == '/') {
88     strlcpy(atfile, word+1, sizeof(atfile));
89     - if ((sf = fopen(atfile, "r")) == NULL) {
90     + if ((sf = fopen_r(atfile)) == NULL) {
91     warn("can't open indirect secret file %s", atfile);
92     continue;
93     }
94     diff -up ppp-2.4.4/pppd/eap.c.fd_leak ppp-2.4.4/pppd/eap.c
95     --- ppp-2.4.4/pppd/eap.c.fd_leak 2004-11-09 23:39:25.000000000 +0100
96     +++ ppp-2.4.4/pppd/eap.c 2009-10-08 21:22:59.791544181 +0200
97     @@ -1226,7 +1226,7 @@ mode_t modebits;
98    
99     if ((path = name_of_pn_file()) == NULL)
100     return (-1);
101     - fd = open(path, modebits, S_IRUSR | S_IWUSR);
102     + fd = open_fd(path, modebits, S_IRUSR | S_IWUSR);
103     err = errno;
104     free(path);
105     errno = err;
106     diff -up ppp-2.4.4/pppd/main.c.fd_leak ppp-2.4.4/pppd/main.c
107     --- ppp-2.4.4/pppd/main.c.fd_leak 2009-10-08 21:22:59.769544859 +0200
108     +++ ppp-2.4.4/pppd/main.c 2009-10-08 21:30:32.356546561 +0200
109     @@ -201,6 +201,8 @@ int ngroups; /* How many groups valid
110    
111     static struct timeval start_time; /* Time when link was started. */
112    
113     +static int cloexec_works; /* controlls setting FD_CLOEXEC flag up */
114     +
115     static struct pppd_stats old_link_stats;
116     struct pppd_stats link_stats;
117     unsigned link_connect_time;
118     @@ -245,6 +247,7 @@ static void holdoff_end __P((void *));
119     static void forget_child __P((int pid, int status));
120     static int reap_kids __P((void));
121     static void childwait_end __P((void *));
122     +static void check_cloexec __P((int));
123    
124     #ifdef USE_TDB
125     static void update_db_entry __P((void));
126     @@ -419,7 +422,7 @@ main(argc, argv)
127     die(0);
128    
129     /* Make sure fds 0, 1, 2 are open to somewhere. */
130     - fd_devnull = open(_PATH_DEVNULL, O_RDWR);
131     + fd_devnull = open_fd(_PATH_DEVNULL, O_RDWR);
132     if (fd_devnull < 0)
133     fatal("Couldn't open %s: %m", _PATH_DEVNULL);
134     while (fd_devnull <= 2) {
135     @@ -865,6 +866,104 @@ holdoff_end(arg)
136     new_phase(PHASE_DORMANT);
137     }
138    
139     +
140     +/*
141     + * check_cloexec - checks for FD_CLOEXEC flag and adds it if necessary
142     + */
143     +static void
144     +check_cloexec(int fd)
145     +{
146     + if (cloexec_works == 0) {
147     + int fl = fcntl(fd, F_GETFD);
148     + cloexec_works = (fl & FD_CLOEXEC) ? 1 : -1;
149     + }
150     + if (cloexec_works > 0)
151     + return;
152     + fcntl(fd, F_SETFD, FD_CLOEXEC);
153     + return;
154     +}
155     +
156     +/*
157     + * socket_fd - create an endpoint for communication. uses FD_CLOEXEC if supported
158     + */
159     +int
160     +socket_fd(int domain, int type, int protocol)
161     +{
162     + int fd;
163     +
164     +#ifdef SOCK_CLOEXEC
165     + if (cloexec_works != -1)
166     + type |= SOCK_CLOEXEC;
167     +#endif
168     + fd = socket(domain, type, protocol);
169     + if (fd == -1)
170     + return -1;
171     + check_cloexec(fd);
172     + return fd;
173     +}
174     +
175     +/*
176     + * open_fd - open file with FD_CLOEXEC flag
177     + */
178     +int
179     +open_fd(const char *path, int flags)
180     +{
181     + int fd;
182     +
183     +#if defined(O_CLOEXEC) && defined(SOCK_CLOEXEC)
184     + if (cloexec_works != -1)
185     + flags |= O_CLOEXEC;
186     +#endif
187     + fd = open(path, flags);
188     + if (fd == -1)
189     + return -1;
190     + check_cloexec(fd);
191     + return fd;
192     +}
193     +
194     +/*
195     + * open_fd_mmode - open file with FD_CLOEXEC flag
196     + */
197     +int
198     +open_fd_mode(const char *path, int flags, int mode)
199     +{
200     + int fd;
201     +
202     +#if defined(O_CLOEXEC) && defined(SOCK_CLOEXEC)
203     + if (cloexec_works != -1)
204     + flags |= O_CLOEXEC;
205     +#endif
206     + fd = open(path, flags, mode);
207     + if (fd == -1)
208     + return -1;
209     + check_cloexec(fd);
210     + return fd;
211     +}
212     +
213     +/*
214     + * fopen_r - open file with FD_CLOEXEC flag
215     + */
216     +FILE *
217     +fopen_r(const char *path)
218     +{
219     + FILE *f;
220     +
221     +#if defined(O_CLOEXEC) && defined(SOCK_CLOEXEC)
222     + if (cloexec_works != -1) {
223     + f = fopen(path, "re");
224     + if (f != NULL) {
225     + check_cloexec(fileno(f));
226     + return f;
227     + }
228     + }
229     +#endif
230     + f = fopen(path, "r");
231     + if (f == NULL)
232     + return NULL;
233     + check_cloexec(fileno(f));
234     + return f;
235     +}
236     +
237     /* List of protocol names, to make our messages a little more informative. */
238     struct protocol_list {
239     u_short proto;
240     @@ -1618,7 +1717,7 @@ device_script(program, in, out, dont_wai
241     if (log_to_fd >= 0)
242     errfd = log_to_fd;
243     else
244     - errfd = open(_PATH_CONNERRS, O_WRONLY | O_APPEND | O_CREAT, 0600);
245     + errfd = open_fd_mode(_PATH_CONNERRS, O_WRONLY | O_APPEND | O_CREAT, 0600);
246    
247     ++conn_running;
248     pid = safe_fork(in, out, errfd);
249     diff -up ppp-2.4.4/pppd/options.c.fd_leak ppp-2.4.4/pppd/options.c
250     --- ppp-2.4.4/pppd/options.c.fd_leak 2006-06-18 13:26:00.000000000 +0200
251     +++ ppp-2.4.4/pppd/options.c 2009-10-08 21:22:59.797544174 +0200
252     @@ -409,7 +409,7 @@ options_from_file(filename, must_exist,
253     option_error("unable to drop privileges to open %s: %m", filename);
254     return 0;
255     }
256     - f = fopen(filename, "r");
257     + f = fopen_r(filename);
258     err = errno;
259     if (check_prot && seteuid(euid) == -1)
260     fatal("unable to regain privileges");
261     @@ -1528,9 +1528,9 @@ setlogfile(argv)
262     option_error("unable to drop permissions to open %s: %m", *argv);
263     return 0;
264     }
265     - fd = open(*argv, O_WRONLY | O_APPEND | O_CREAT | O_EXCL, 0644);
266     + fd = open_fd_mode(*argv, O_WRONLY | O_APPEND | O_CREAT | O_EXCL, 0644);
267     if (fd < 0 && errno == EEXIST)
268     - fd = open(*argv, O_WRONLY | O_APPEND);
269     + fd = open_fd(*argv, O_WRONLY | O_APPEND);
270     err = errno;
271     if (!privileged_option && seteuid(euid) == -1)
272     fatal("unable to regain privileges: %m");
273     diff -up ppp-2.4.4/pppd/pppd.h.fd_leak ppp-2.4.4/pppd/pppd.h
274     --- ppp-2.4.4/pppd/pppd.h.fd_leak 2005-08-26 01:59:34.000000000 +0200
275     +++ ppp-2.4.4/pppd/pppd.h 2009-10-08 21:22:59.800544904 +0200
276     @@ -494,6 +494,10 @@ int ppp_send_config __P((int, int, u_in
277     int ppp_recv_config __P((int, int, u_int32_t, int, int));
278     const char *protocol_name __P((int));
279     void remove_pidfiles __P((void));
280     +int socket_fd __P((int, int, int));
281     +int open_fd __P((const char *, int));
282     +int open_fd_mode __P((const char *, int, int));
283     +FILE *fopen_r __P((const char *));
284     void lock_db __P((void));
285     void unlock_db __P((void));
286    
287     diff -up ppp-2.4.4/pppd/sys-linux.c.fd_leak ppp-2.4.4/pppd/sys-linux.c
288     --- ppp-2.4.4/pppd/sys-linux.c.fd_leak 2009-10-08 21:22:59.778544744 +0200
289     +++ ppp-2.4.4/pppd/sys-linux.c 2009-10-08 21:22:59.803544377 +0200
290     @@ -308,12 +308,12 @@ static int modify_flags(int fd, int clea
291     void sys_init(void)
292     {
293     /* Get an internet socket for doing socket ioctls. */
294     - sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
295     + sock_fd = socket_fd(AF_INET, SOCK_DGRAM, 0);
296     if (sock_fd < 0)
297     fatal("Couldn't create IP socket: %m(%d)", errno);
298    
299     #ifdef INET6
300     - sock6_fd = socket(AF_INET6, SOCK_DGRAM, 0);
301     + sock6_fd = socket_fd(AF_INET6, SOCK_DGRAM, 0);
302     if (sock6_fd < 0)
303     sock6_fd = -errno; /* save errno for later */
304     #endif
305     @@ -459,7 +459,7 @@ int generic_establish_ppp (int fd)
306     goto err;
307     }
308     dbglog("using channel %d", chindex);
309     - fd = open("/dev/ppp", O_RDWR);
310     + fd = open_fd("/dev/ppp", O_RDWR);
311     if (fd < 0) {
312     error("Couldn't reopen /dev/ppp: %m");
313     goto err;
314     @@ -619,7 +619,7 @@ static int make_ppp_unit()
315     dbglog("in make_ppp_unit, already had /dev/ppp open?");
316     close(ppp_dev_fd);
317     }
318     - ppp_dev_fd = open("/dev/ppp", O_RDWR);
319     + ppp_dev_fd = open_fd("/dev/ppp", O_RDWR);
320     if (ppp_dev_fd < 0)
321     fatal("Couldn't open /dev/ppp: %m");
322     flags = fcntl(ppp_dev_fd, F_GETFL);
323     @@ -693,7 +693,7 @@ int bundle_attach(int ifnum)
324     if (!new_style_driver)
325     return -1;
326    
327     - master_fd = open("/dev/ppp", O_RDWR);
328     + master_fd = open_fd("/dev/ppp", O_RDWR);
329     if (master_fd < 0)
330     fatal("Couldn't open /dev/ppp: %m");
331     if (ioctl(master_fd, PPPIOCATTACH, &ifnum) < 0) {
332     @@ -1412,7 +1412,7 @@ static char *path_to_procfs(const char *
333     /* Default the mount location of /proc */
334     strlcpy (proc_path, "/proc", sizeof(proc_path));
335     proc_path_len = 5;
336     - fp = fopen(MOUNTED, "r");
337     + fp = fopen_r(MOUNTED);
338     if (fp != NULL) {
339     while ((mntent = getmntent(fp)) != NULL) {
340     if (strcmp(mntent->mnt_type, MNTTYPE_IGNORE) == 0)
341     @@ -1472,7 +1472,7 @@ static int open_route_table (void)
342     close_route_table();
343    
344     path = path_to_procfs("/net/route");
345     - route_fd = fopen (path, "r");
346     + route_fd = fopen_r(path);
347     if (route_fd == NULL) {
348     error("can't open routing table %s: %m", path);
349     return 0;
350     @@ -1713,7 +1713,7 @@ int sifproxyarp (int unit, u_int32_t his
351     if (tune_kernel) {
352     forw_path = path_to_procfs("/sys/net/ipv4/ip_forward");
353     if (forw_path != 0) {
354     - int fd = open(forw_path, O_WRONLY);
355     + int fd = open_fd(forw_path, O_WRONLY);
356     if (fd >= 0) {
357     if (write(fd, "1", 1) != 1)
358     error("Couldn't enable IP forwarding: %m");
359     @@ -1857,7 +1857,7 @@ get_if_hwaddr(u_char *addr, char *name)
360     struct ifreq ifreq;
361     int ret, sock_fd;
362    
363     - sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
364     + sock_fd = socket_fd(AF_INET, SOCK_DGRAM, 0);
365     if (sock_fd < 0)
366     return 0;
367     memset(&ifreq.ifr_hwaddr, 0, sizeof(struct sockaddr));
368     @@ -2030,7 +2030,7 @@ int ppp_available(void)
369     sscanf(utsname.release, "%d.%d.%d", &osmaj, &osmin, &ospatch);
370     kernel_version = KVERSION(osmaj, osmin, ospatch);
371    
372     - fd = open("/dev/ppp", O_RDWR);
373     + fd = open_fd("/dev/ppp", O_RDWR);
374     if (fd >= 0) {
375     new_style_driver = 1;
376    
377     @@ -2068,7 +2068,7 @@ int ppp_available(void)
378     /*
379     * Open a socket for doing the ioctl operations.
380     */
381     - s = socket(AF_INET, SOCK_DGRAM, 0);
382     + s = socket_fd(AF_INET, SOCK_DGRAM, 0);
383     if (s < 0)
384     return 0;
385    
386     @@ -2318,7 +2318,7 @@ int sifaddr (int unit, u_int32_t our_adr
387     int fd;
388    
389     path = path_to_procfs("/sys/net/ipv4/ip_dynaddr");
390     - if (path != 0 && (fd = open(path, O_WRONLY)) >= 0) {
391     + if (path != 0 && (fd = open_fd(path, O_WRONLY)) >= 0) {
392     if (write(fd, "1", 1) != 1)
393     error("Couldn't enable dynamic IP addressing: %m");
394     close(fd);
395     @@ -2494,7 +2494,7 @@ get_pty(master_fdp, slave_fdp, slave_nam
396     /*
397     * Try the unix98 way first.
398     */
399     - mfd = open("/dev/ptmx", O_RDWR);
400     + mfd = open_fd("/dev/ptmx", O_RDWR);
401     if (mfd >= 0) {
402     int ptn;
403     if (ioctl(mfd, TIOCGPTN, &ptn) >= 0) {
404     @@ -2505,7 +2505,7 @@ get_pty(master_fdp, slave_fdp, slave_nam
405     if (ioctl(mfd, TIOCSPTLCK, &ptn) < 0)
406     warn("Couldn't unlock pty slave %s: %m", pty_name);
407     #endif
408     - if ((sfd = open(pty_name, O_RDWR | O_NOCTTY)) < 0)
409     + if ((sfd = open_fd(pty_name, O_RDWR | O_NOCTTY)) < 0)
410     warn("Couldn't open pty slave %s: %m", pty_name);
411     }
412     }
413     @@ -2516,10 +2516,10 @@ get_pty(master_fdp, slave_fdp, slave_nam
414     for (i = 0; i < 64; ++i) {
415     slprintf(pty_name, sizeof(pty_name), "/dev/pty%c%x",
416     'p' + i / 16, i % 16);
417     - mfd = open(pty_name, O_RDWR, 0);
418     + mfd = open_fd_mode(pty_name, O_RDWR, 0);
419     if (mfd >= 0) {
420     pty_name[5] = 't';
421     - sfd = open(pty_name, O_RDWR | O_NOCTTY, 0);
422     + sfd = open_fd_mode(pty_name, O_RDWR | O_NOCTTY, 0);
423     if (sfd >= 0) {
424     fchown(sfd, uid, -1);
425     fchmod(sfd, S_IRUSR | S_IWUSR);
426     @@ -2784,7 +2784,7 @@ ether_to_eui64(eui64_t *p_eui64)
427     int skfd;
428     const unsigned char *ptr;
429    
430     - skfd = socket(PF_INET6, SOCK_DGRAM, 0);
431     + skfd = socket_fd(PF_INET6, SOCK_DGRAM, 0);
432     if(skfd == -1)
433     {
434     warn("could not open IPv6 socket");
435     diff -up ppp-2.4.4/pppd/tdb.c.fd_leak ppp-2.4.4/pppd/tdb.c
436     --- ppp-2.4.4/pppd/tdb.c.fd_leak 2004-11-13 08:13:07.000000000 +0100
437     +++ ppp-2.4.4/pppd/tdb.c 2009-10-08 21:22:59.806583590 +0200
438     @@ -1724,7 +1724,7 @@ TDB_CONTEXT *tdb_open_ex(const char *nam
439     goto internal;
440     }
441    
442     - if ((tdb->fd = open(name, open_flags, mode)) == -1) {
443     + if ((tdb->fd = open_fd_mode(name, open_flags, mode)) == -1) {
444     TDB_LOG((tdb, 5, "tdb_open_ex: could not open file %s: %s\n",
445     name, strerror(errno)));
446     goto fail; /* errno set by open(2) */
447     @@ -1967,7 +1967,7 @@ int tdb_reopen(TDB_CONTEXT *tdb)
448     }
449     if (close(tdb->fd) != 0)
450     TDB_LOG((tdb, 0, "tdb_reopen: WARNING closing tdb->fd failed!\n"));
451     - tdb->fd = open(tdb->name, tdb->open_flags & ~(O_CREAT|O_TRUNC), 0);
452     + tdb->fd = open_fd_mode(tdb->name, tdb->open_flags & ~(O_CREAT|O_TRUNC), 0);
453     if (tdb->fd == -1) {
454     TDB_LOG((tdb, 0, "tdb_reopen: open failed (%s)\n", strerror(errno)));
455     goto fail;
456     diff -up ppp-2.4.4/pppd/tty.c.fd_leak ppp-2.4.4/pppd/tty.c
457     --- ppp-2.4.4/pppd/tty.c.fd_leak 2006-06-04 09:04:57.000000000 +0200
458     +++ ppp-2.4.4/pppd/tty.c 2009-10-08 21:22:59.809544300 +0200
459     @@ -569,7 +569,7 @@ int connect_tty()
460     status = EXIT_OPEN_FAILED;
461     goto errret;
462     }
463     - real_ttyfd = open(devnam, O_NONBLOCK | O_RDWR, 0);
464     + real_ttyfd = open_fd_mode(devnam, O_NONBLOCK | O_RDWR, 0);
465     err = errno;
466     if (prio < OPRIO_ROOT && seteuid(0) == -1)
467     fatal("Unable to regain privileges");
468     @@ -723,7 +723,7 @@ int connect_tty()
469     if (connector == NULL && modem && devnam[0] != 0) {
470     int i;
471     for (;;) {
472     - if ((i = open(devnam, O_RDWR)) >= 0)
473     + if ((i = open_fd(devnam, O_RDWR)) >= 0)
474     break;
475     if (errno != EINTR) {
476     error("Failed to reopen %s: %m", devnam);
477     @@ -896,7 +896,8 @@ open_socket(dest)
478     *sep = ':';
479    
480     /* get a socket and connect it to the other end */
481     - sock = socket(PF_INET, SOCK_STREAM, 0);
482     + //sock = socket(PF_INET, SOCK_STREAM, 0);
483     + sock = socket_fd(PF_INET, SOCK_STREAM, 0);
484     if (sock < 0) {
485     error("Can't create socket: %m");
486     return -1;
487     diff -up ppp-2.4.4/pppd/utils.c.fd_leak ppp-2.4.4/pppd/utils.c
488     --- ppp-2.4.4/pppd/utils.c.fd_leak 2009-10-08 21:22:59.620325739 +0200
489     +++ ppp-2.4.4/pppd/utils.c 2009-10-08 21:22:59.811573725 +0200
490     @@ -931,14 +931,14 @@ lock(dev)
491     slprintf(lock_file, sizeof(lock_file), "%s/LCK..%s", LOCK_DIR, dev);
492     #endif
493    
494     - while ((fd = open(lock_file, O_EXCL | O_CREAT | O_RDWR, 0644)) < 0) {
495     + while ((fd = open_fd_mode(lock_file, O_EXCL | O_CREAT | O_RDWR, 0644)) < 0) {
496     if (errno != EEXIST) {
497     error("Can't create lock file %s: %m", lock_file);
498     break;
499     }
500    
501     /* Read the lock file to find out who has the device locked. */
502     - fd = open(lock_file, O_RDONLY, 0);
503     + fd = open_fd_mode(lock_file, O_RDONLY, 0);
504     if (fd < 0) {
505     if (errno == ENOENT) /* This is just a timing problem. */
506     continue;
507     @@ -1017,7 +1017,7 @@ relock(pid)
508    
509     if (lock_file[0] == 0)
510     return -1;
511     - fd = open(lock_file, O_WRONLY, 0);
512     + fd = open_fd_mode(lock_file, O_WRONLY, 0);
513     if (fd < 0) {
514     error("Couldn't reopen lock file %s: %m", lock_file);
515     lock_file[0] = 0;
516     diff -up ppp-2.4.5/pppd/plugins/pppoatm/pppoatm.c.test ppp-2.4.5/pppd/plugins/pppoatm/pppoatm.c
517     --- ppp-2.4.5/pppd/plugins/pppoatm/pppoatm.c.test 2010-11-16 09:56:56.083707000 +0100
518     +++ ppp-2.4.5/pppd/plugins/pppoatm/pppoatm.c 2010-11-16 09:56:59.382707272 +0100
519     @@ -137,7 +137,11 @@ static int connect_pppoatm(void)
520    
521     if (!device_got_set)
522     no_device_given_pppoatm();
523     +#ifdef SOCK_CLOEXEC
524     + fd = socket(AF_ATMPVC, SOCK_DGRAM | SOCK_CLOEXEC, 0);
525     +#else
526     fd = socket(AF_ATMPVC, SOCK_DGRAM, 0);
527     +#endif
528     if (fd < 0)
529     fatal("failed to create socket: %m");
530     memset(&qos, 0, sizeof qos);
531     diff -up ppp-2.4.5/pppd/plugins/pppol2tp/openl2tp.c.test ppp-2.4.5/pppd/plugins/pppol2tp/openl2tp.c
532     --- ppp-2.4.5/pppd/plugins/pppol2tp/openl2tp.c.test 2010-11-16 09:58:17.499711288 +0100
533     +++ ppp-2.4.5/pppd/plugins/pppol2tp/openl2tp.c 2010-11-16 10:00:15.791706960 +0100
534     @@ -83,7 +83,11 @@ static int openl2tp_client_create(void)
535     int result;
536    
537     if (openl2tp_fd < 0) {
538     +#ifdef SOCK_CLOEXEC
539     + openl2tp_fd = socket(PF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC, 0);
540     +#else
541     openl2tp_fd = socket(PF_UNIX, SOCK_DGRAM, 0);
542     +#endif
543     if (openl2tp_fd < 0) {
544     error("openl2tp connection create: %m");
545     return -ENOTCONN;
546     diff -up ppp-2.4.5/pppd/plugins/pppol2tp/pppol2tp.c.test ppp-2.4.5/pppd/plugins/pppol2tp/pppol2tp.c
547     --- ppp-2.4.5/pppd/plugins/pppol2tp/pppol2tp.c.test 2010-11-16 09:57:44.448709467 +0100
548     +++ ppp-2.4.5/pppd/plugins/pppol2tp/pppol2tp.c 2010-11-16 09:59:32.877707001 +0100
549     @@ -208,7 +208,11 @@ static void send_config_pppol2tp(int mtu
550     struct ifreq ifr;
551     int fd;
552    
553     +#ifdef SOCK_CLOEXEC
554     + fd = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
555     +#else
556     fd = socket(AF_INET, SOCK_DGRAM, 0);
557     +#endif
558     if (fd >= 0) {
559     memset (&ifr, '\0', sizeof (ifr));
560     strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
561     diff -up ppp-2.4.5/pppd/plugins/rp-pppoe/if.c.test ppp-2.4.5/pppd/plugins/rp-pppoe/if.c
562     --- ppp-2.4.5/pppd/plugins/rp-pppoe/if.c.test 2009-11-16 23:26:07.000000000 +0100
563     +++ ppp-2.4.5/pppd/plugins/rp-pppoe/if.c 2010-11-16 09:54:03.973706239 +0100
564     @@ -116,6 +116,10 @@ openInterface(char const *ifname, UINT16
565     stype = SOCK_PACKET;
566     #endif
567    
568     +#ifdef SOCK_CLOEXEC
569     + stype |= SOCK_CLOEXEC;
570     +#endif
571     +
572     if ((fd = socket(domain, stype, htons(type))) < 0) {
573     /* Give a more helpful message for the common error case */
574     if (errno == EPERM) {
575     diff -up ppp-2.4.5/pppd/plugins/rp-pppoe/plugin.c.test ppp-2.4.5/pppd/plugins/rp-pppoe/plugin.c
576     --- ppp-2.4.5/pppd/plugins/rp-pppoe/plugin.c.test 2009-11-16 23:26:07.000000000 +0100
577     +++ ppp-2.4.5/pppd/plugins/rp-pppoe/plugin.c 2010-11-16 09:40:23.355707001 +0100
578     @@ -158,7 +158,11 @@ PPPOEConnectDevice(void)
579     ppp_session_number = ntohs(conn->session);
580    
581     /* Make the session socket */
582     +#ifdef SOCK_CLOEXEC
583     + conn->sessionSocket = socket(AF_PPPOX, SOCK_STREAM | SOCK_CLOEXEC, PX_PROTO_OE);
584     +#else
585     conn->sessionSocket = socket(AF_PPPOX, SOCK_STREAM, PX_PROTO_OE);
586     +#endif
587     if (conn->sessionSocket < 0) {
588     error("Failed to create PPPoE socket: %m");
589     goto errout;
590     @@ -289,7 +293,11 @@ PPPoEDevnameHook(char *cmd, char **argv,
591     }
592    
593     /* Open a socket */
594     +#ifdef SOCK_CLOEXEC
595     + if ((fd = socket(PF_PACKET, SOCK_RAW | SOCK_CLOEXEC, 0)) < 0) {
596     +#else
597     if ((fd = socket(PF_PACKET, SOCK_RAW, 0)) < 0) {
598     +#endif
599     r = 0;
600     }
601    
602     diff -up ppp-2.4.5/pppd/plugins/rp-pppoe/pppoe-discovery.c.test ppp-2.4.5/pppd/plugins/rp-pppoe/pppoe-discovery.c
603     --- ppp-2.4.5/pppd/plugins/rp-pppoe/pppoe-discovery.c.test 2009-11-16 23:26:07.000000000 +0100
604     +++ ppp-2.4.5/pppd/plugins/rp-pppoe/pppoe-discovery.c 2010-11-16 09:55:08.726707003 +0100
605     @@ -121,6 +121,10 @@ openInterface(char const *ifname, UINT16
606     stype = SOCK_PACKET;
607     #endif
608    
609     +#ifdef SOCK_CLOEXEC
610     + stype |= SOCK_CLOEXEC;
611     +#endif
612     +
613     if ((fd = socket(domain, stype, htons(type))) < 0) {
614     /* Give a more helpful message for the common error case */
615     if (errno == EPERM) {

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