Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 426398 | Differences between
and this patch

Collapse All | Expand All

(-)pptp-1.7.2/pptp.c.alias (-4 / +7 lines)
Lines 463-469 int open_callmgr(struct in_addr inetaddr Link Here
463
        char **envp, int pty_fd, int gre_fd)
463
        char **envp, int pty_fd, int gre_fd)
464
{
464
{
465
    /* Try to open unix domain socket to call manager. */
465
    /* Try to open unix domain socket to call manager. */
466
    struct sockaddr_un where;
466
    union {
467
        struct sockaddr a;
468
        struct sockaddr_un u;
469
    } where;
467
    const int NUM_TRIES = 3;
470
    const int NUM_TRIES = 3;
468
    int i, fd;
471
    int i, fd;
469
    pid_t pid;
472
    pid_t pid;
Lines 473-484 int open_callmgr(struct in_addr inetaddr Link Here
473
        fatal("Could not create unix domain socket: %s", strerror(errno));
476
        fatal("Could not create unix domain socket: %s", strerror(errno));
474
    }
477
    }
475
    /* Make address */
478
    /* Make address */
476
    callmgr_name_unixsock(&where, inetaddr, localbind);
479
    callmgr_name_unixsock(&where.u, inetaddr, localbind);
477
    for (i = 0; i < NUM_TRIES; i++) {
480
    for (i = 0; i < NUM_TRIES; i++) {
478
        if (connect(fd, (struct sockaddr *) &where, sizeof(where)) < 0) {
481
        if (connect(fd, &where.a, sizeof(where.u)) < 0) {
479
            /* couldn't connect.  We'll have to launch this guy. */
482
            /* couldn't connect.  We'll have to launch this guy. */
480
483
481
            unlink (where.sun_path);	
484
            unlink (where.u.sun_path);
482
485
483
            /* fork and launch call manager process */
486
            /* fork and launch call manager process */
484
            switch (pid = fork()) {
487
            switch (pid = fork()) {
(-)pptp-1.7.2/pptp_callmgr.c.alias (-18 / +27 lines)
Lines 196-209 int callmgr_main(int argc, char **argv, Link Here
196
        /* Step 5b: Handle new connection to UNIX socket */
196
        /* Step 5b: Handle new connection to UNIX socket */
197
        if (FD_ISSET(unix_sock, &read_set)) {
197
        if (FD_ISSET(unix_sock, &read_set)) {
198
            /* New call! */
198
            /* New call! */
199
            struct sockaddr_un from;
199
            union {
200
            socklen_t len = sizeof(from);
200
                struct sockaddr a;
201
                struct sockaddr_un u;
202
            } from;
203
            socklen_t len = sizeof(from.u);
201
            PPTP_CALL * call;
204
            PPTP_CALL * call;
202
            struct local_callinfo *lci;
205
            struct local_callinfo *lci;
203
            int s;
206
            int s;
204
            /* Accept the socket */
207
            /* Accept the socket */
205
            FD_CLR (unix_sock, &read_set);
208
            FD_CLR (unix_sock, &read_set);
206
            if ((s = accept(unix_sock, (struct sockaddr *) &from, &len)) < 0) {
209
            if ((s = accept(unix_sock, &from.a, &len)) < 0) {
207
                warn("Socket not accepted: %s", strerror(errno));
210
                warn("Socket not accepted: %s", strerror(errno));
208
                goto skip_accept;
211
                goto skip_accept;
209
            }
212
            }
Lines 313-323 cleanup: Link Here
313
/*** open_inetsock ************************************************************/
316
/*** open_inetsock ************************************************************/
314
int open_inetsock(struct in_addr inetaddr)
317
int open_inetsock(struct in_addr inetaddr)
315
{
318
{
316
    struct sockaddr_in dest, src;
319
    union {
320
        struct sockaddr a;
321
        struct sockaddr_in i;
322
    } dest, src;
317
    int s;
323
    int s;
318
    dest.sin_family = AF_INET;
324
    dest.i.sin_family = AF_INET;
319
    dest.sin_port   = htons(PPTP_PORT);
325
    dest.i.sin_port   = htons(PPTP_PORT);
320
    dest.sin_addr   = inetaddr;
326
    dest.i.sin_addr   = inetaddr;
321
    if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
327
    if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
322
        warn("socket: %s", strerror(errno));
328
        warn("socket: %s", strerror(errno));
323
        return s;
329
        return s;
Lines 332-345 int open_inetsock(struct in_addr inetadd Link Here
332
#endif
338
#endif
333
    if (localbind.s_addr != INADDR_NONE) {
339
    if (localbind.s_addr != INADDR_NONE) {
334
        bzero(&src, sizeof(src));
340
        bzero(&src, sizeof(src));
335
        src.sin_family = AF_INET;
341
        src.i.sin_family = AF_INET;
336
        src.sin_addr   = localbind;
342
        src.i.sin_addr   = localbind;
337
        if (bind(s, (struct sockaddr *) &src, sizeof(src)) != 0) {
343
        if (bind(s, &src.a, sizeof(src.i)) != 0) {
338
            warn("bind: %s", strerror(errno));
344
            warn("bind: %s", strerror(errno));
339
            close(s); return -1;
345
            close(s); return -1;
340
        }
346
        }
341
    }
347
    }
342
    if (connect(s, (struct sockaddr *) &dest, sizeof(dest)) < 0) {
348
    if (connect(s, &dest.a, sizeof(dest.i)) < 0) {
343
        warn("connect: %s", strerror(errno));
349
        warn("connect: %s", strerror(errno));
344
        close(s); return -1;
350
        close(s); return -1;
345
    }
351
    }
Lines 349-355 int open_inetsock(struct in_addr inetadd Link Here
349
/*** open_unixsock ************************************************************/
355
/*** open_unixsock ************************************************************/
350
int open_unixsock(struct in_addr inetaddr)
356
int open_unixsock(struct in_addr inetaddr)
351
{
357
{
352
    struct sockaddr_un where;
358
    union {
359
        struct sockaddr a;
360
        struct sockaddr_un u;
361
    } where;
353
    struct stat st;
362
    struct stat st;
354
    char *dir;
363
    char *dir;
355
    int s;
364
    int s;
Lines 357-377 int open_unixsock(struct in_addr inetadd Link Here
357
        warn("socket: %s", strerror(errno));
366
        warn("socket: %s", strerror(errno));
358
        return s;
367
        return s;
359
    }
368
    }
360
    callmgr_name_unixsock( &where, inetaddr, localbind);
369
    callmgr_name_unixsock( &where.u, inetaddr, localbind);
361
    if (stat(where.sun_path, &st) >= 0) {
370
    if (stat(where.u.sun_path, &st) >= 0) {
362
        warn("Call manager for %s is already running.", inet_ntoa(inetaddr));
371
        warn("Call manager for %s is already running.", inet_ntoa(inetaddr));
363
        close(s); return -1;
372
        close(s); return -1;
364
    }
373
    }
365
    /* Make sure path is valid. */
374
    /* Make sure path is valid. */
366
    dir = dirname(where.sun_path);
375
    dir = dirname(where.u.sun_path);
367
    if (!make_valid_path(dir, 0770))
376
    if (!make_valid_path(dir, 0770))
368
        fatal("Could not make path to %s: %s", where.sun_path, strerror(errno));
377
        fatal("Could not make path to %s: %s", where.u.sun_path, strerror(errno));
369
    free(dir);
378
    free(dir);
370
    if (bind(s, (struct sockaddr *) &where, sizeof(where)) < 0) {
379
    if (bind(s, &where.a, sizeof(where.u)) < 0) {
371
        warn("bind: %s", strerror(errno));
380
        warn("bind: %s", strerror(errno));
372
        close(s); return -1;
381
        close(s); return -1;
373
    }
382
    }
374
    chmod(where.sun_path, 0777);
383
    chmod(where.u.sun_path, 0777);
375
    listen(s, 127);
384
    listen(s, 127);
376
    return s;
385
    return s;
377
}
386
}
(-)pptp-1.7.2/pptp_gre.c.alias (-8 / +11 lines)
Lines 85-91 uint64_t time_now_usecs(void) Link Here
85
/*** Open IP protocol socket **************************************************/
85
/*** Open IP protocol socket **************************************************/
86
int pptp_gre_bind(struct in_addr inetaddr)
86
int pptp_gre_bind(struct in_addr inetaddr)
87
{
87
{
88
    struct sockaddr_in src_addr, loc_addr;
88
    union {
89
        struct sockaddr a;
90
        struct sockaddr_in i;
91
    } loc_addr, src_addr;
89
    int s = socket(AF_INET, SOCK_RAW, PPTP_PROTO);
92
    int s = socket(AF_INET, SOCK_RAW, PPTP_PROTO);
90
    if (s < 0) { warn("socket: %s", strerror(errno)); return -1; }
93
    if (s < 0) { warn("socket: %s", strerror(errno)); return -1; }
91
#ifdef SO_MARK
94
#ifdef SO_MARK
Lines 98-113 int pptp_gre_bind(struct in_addr inetadd Link Here
98
#endif
101
#endif
99
    if (localbind.s_addr != INADDR_NONE) {
102
    if (localbind.s_addr != INADDR_NONE) {
100
        bzero(&loc_addr, sizeof(loc_addr));
103
        bzero(&loc_addr, sizeof(loc_addr));
101
        loc_addr.sin_family = AF_INET;
104
        loc_addr.i.sin_family = AF_INET;
102
        loc_addr.sin_addr   = localbind;
105
        loc_addr.i.sin_addr   = localbind;
103
        if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) != 0) {
106
        if (bind(s, &loc_addr.a, sizeof(loc_addr.i)) != 0) {
104
            warn("bind: %s", strerror(errno)); close(s); return -1;
107
            warn("bind: %s", strerror(errno)); close(s); return -1;
105
        }
108
        }
106
    }
109
    }
107
    src_addr.sin_family = AF_INET;
110
    src_addr.i.sin_family = AF_INET;
108
    src_addr.sin_addr   = inetaddr;
111
    src_addr.i.sin_addr   = inetaddr;
109
    src_addr.sin_port   = 0;
112
    src_addr.i.sin_port   = 0;
110
    if (connect(s, (struct sockaddr *) &src_addr, sizeof(src_addr)) < 0) {
113
    if (connect(s, &src_addr.a, sizeof(src_addr.i)) < 0) {
111
        warn("connect: %s", strerror(errno)); close(s); return -1;
114
        warn("connect: %s", strerror(errno)); close(s); return -1;
112
    }
115
    }
113
    my = test_redirections();
116
    my = test_redirections();

Return to bug 426398