From 4ab301def89893d11064f451c643605453bc9dad Mon Sep 17 00:00:00 2001 From: mdw Date: Mon, 23 May 2005 10:49:04 +0000 Subject: [PATCH] Various bug fixes. --- noip.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/noip.c b/noip.c index e674bed..2e2f1b1 100644 --- a/noip.c +++ b/noip.c @@ -127,7 +127,7 @@ static int unix_socket_status(struct sockaddr_un *sun, int quickp) if (stat(sun->sun_path, &st)) return (errno == ENOENT ? UNUSED : USED); - if (!S_ISSOCK(st.st_mode) || !quickp) + if (!S_ISSOCK(st.st_mode) || quickp) return (USED); rc = USED; if ((fp = fopen("/proc/net/unix", "r")) == 0) @@ -411,7 +411,7 @@ static int do_implicit_bind(int sk, const struct sockaddr **sa, if (mylen < sizeof(*sun)) ((char *)sun)[mylen] = 0; if (!sun->sun_path[0]) { sin.sin_family = AF_INET; - sin.sin_addr.s_addr = INADDR_LOOPBACK; + sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); sin.sin_port = 0; encode_inet_addr(sun, &sin, WANT_FRESH); if (real_bind(sk, SA(sun), SUN_LEN(sun))) @@ -654,10 +654,6 @@ static void readconfig(void) size_t n; char *p, *q, *cmd; - if ((p = getenv("NOIP_CONFIG")) == 0) - snprintf(p = buf, sizeof(buf), "%s/.noip", home()); - D( fprintf(stderr, "noip: config file: %s\n", p); ) - parse_acl_env("NOIP_REALBIND_BEFORE", &bind_tail); parse_acl_env("NOIP_REALCONNECT_BEFORE", &connect_tail); if ((p = getenv("NOIP_AUTOPORTS")) != 0) { @@ -665,8 +661,15 @@ static void readconfig(void) parse_autoports(&q); free(p); } - if ((fp = fopen(p, "r")) == 0) + if ((p = getenv("NOIP_CONFIG")) == 0) + snprintf(p = buf, sizeof(buf), "%s/.noip", home()); + D( fprintf(stderr, "noip: config file: %s\n", p); ) + + if ((fp = fopen(p, "r")) == 0) { + D( fprintf(stderr, "noip: couldn't read config: %s\n", + strerror(errno)); ) goto done; + } while (fgets(buf, sizeof(buf), fp)) { n = strlen(buf); p = buf; @@ -916,14 +919,18 @@ static void cleanup_sockdir(void) if ((dir = opendir(sockdir)) == 0) return; + sun.sun_family = AF_UNIX; while ((d = readdir(dir)) != 0) { if (d->d_name[0] == '.') continue; snprintf(sun.sun_path, sizeof(sun.sun_path), "%s/%s", sockdir, d->d_name); if (decode_inet_addr(&sin, &sun, SUN_LEN(&sun)) || stat(sun.sun_path, &st) || - !S_ISSOCK(st.st_mode)) + !S_ISSOCK(st.st_mode)) { + D( fprintf(stderr, "noip: ignoring unknown socketdir entry `%s'\n", + sun.sun_path); ) continue; + } if (unix_socket_status(&sun, 0) == STALE) { D( fprintf(stderr, "noip: clearing away stale socket %s\n", d->d_name); ) -- 2.11.0