]> sourceware.org Git - glibc.git/blobdiff - inet/rcmd.c
* include/libc-symbols.h (__libc_freeres_fn_section, libc_freeres_fn):
[glibc.git] / inet / rcmd.c
index 2c0a34de493fc7df5dfb4fb2251c5e770d3b8dc1..eed5ed389e4991ea34993fa0dbd316df5de6d29d 100644 (file)
@@ -99,7 +99,9 @@ int iruserok_af (const void *raddr, int superuser, const char *ruser,
 int iruserok (u_int32_t raddr, int superuser, const char *ruser,
              const char *luser);
 
-static char ahostbuf[NI_MAXHOST];
+libc_hidden_proto (iruserok_af)
+
+libc_freeres_ptr(static char *ahostbuf);
 
 int
 rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
@@ -151,11 +153,21 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
        pfd[1].events = POLLIN;
 
        if (res->ai_canonname){
-               strncpy(ahostbuf, res->ai_canonname, sizeof(ahostbuf));
-               ahostbuf[sizeof(ahostbuf)-1] = '\0';
+               free (ahostbuf);
+               ahostbuf = strdup (res->ai_canonname);
+               if (ahostbuf == NULL) {
+#ifdef USE_IN_LIBIO
+                       if (_IO_fwide (stderr, 0) > 0)
+                               __fwprintf(stderr, L"%s",
+                                          _("rcmd: Cannot allocate memory\n"));
+                       else
+#endif
+                               fputs(_("rcmd: Cannot allocate memory\n"),
+                                     stderr);
+                       return (-1);
+               }
                *ahost = ahostbuf;
-       }
-       else
+       } else
                *ahost = NULL;
        ai = res;
        refused = 0;
@@ -206,13 +218,17 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
                                    NULL, 0,
                                    NI_NUMERICHOST);
 
-                       __asprintf (&buf, _("connect to address %s: "), paddr);
+                       if (__asprintf (&buf, _("connect to address %s: "),
+                                       paddr) >= 0)
+                         {
 #ifdef USE_IN_LIBIO
-                       if (_IO_fwide (stderr, 0) > 0)
-                               __fwprintf(stderr, L"%s", buf);
-                       else
+                           if (_IO_fwide (stderr, 0) > 0)
+                             __fwprintf(stderr, L"%s", buf);
+                           else
 #endif
-                               fputs (buf, stderr);
+                             fputs (buf, stderr);
+                           free (buf);
+                         }
                        __set_errno (oerrno);
                        perror(0);
                        ai = ai->ai_next;
@@ -220,14 +236,16 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
                                    paddr, sizeof(paddr),
                                    NULL, 0,
                                    NI_NUMERICHOST);
-                       __asprintf (&buf, _("Trying %s...\n"), paddr);
+                       if (__asprintf (&buf, _("Trying %s...\n"), paddr) >= 0)
+                         {
 #ifdef USE_IN_LIBIO
-                       if (_IO_fwide (stderr, 0) > 0)
-                               __fwprintf (stderr, L"%s", buf);
-                       else
+                           if (_IO_fwide (stderr, 0) > 0)
+                             __fwprintf (stderr, L"%s", buf);
+                           else
 #endif
-                               fputs (buf, stderr);
-                       free (buf);
+                             fputs (buf, stderr);
+                           free (buf);
+                         }
                        continue;
                }
                if (refused && timo <= 16) {
@@ -262,20 +280,22 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
 
                if (s2 < 0)
                        goto bad;
-               listen(s2, 1);
+               __listen(s2, 1);
                (void)__snprintf(num, sizeof(num), "%d", lport);
                if (__write(s, num, strlen(num)+1) != (ssize_t)strlen(num)+1) {
                        char *buf = NULL;
 
-                       __asprintf (&buf, _("\
-rcmd: write (setting up stderr): %m\n"));
+                       if (__asprintf (&buf, _("\
+rcmd: write (setting up stderr): %m\n")) >= 0)
+                         {
 #ifdef USE_IN_LIBIO
-                       if (_IO_fwide (stderr, 0) > 0)
-                               __fwprintf(stderr, L"%s", buf);
-                       else
+                           if (_IO_fwide (stderr, 0) > 0)
+                             __fwprintf(stderr, L"%s", buf);
+                           else
 #endif
-                               fputs (buf, stderr);
-                       free (buf);
+                             fputs (buf, stderr);
+                           free (buf);
+                         }
                        (void)__close(s2);
                        goto bad;
                }
@@ -285,19 +305,21 @@ rcmd: write (setting up stderr): %m\n"));
                if (__poll (pfd, 2, -1) < 1 || (pfd[1].revents & POLLIN) == 0){
                        char *buf = NULL;
 
-                       if (errno != 0)
-                               __asprintf(&buf,
-                                   _("rcmd: poll (setting up stderr): %m\n"));
-                       else
-                               __asprintf(&buf,
-                            _("poll: protocol failure in circuit setup\n"));
+                       if ((errno != 0
+                            && __asprintf(&buf, _("\
+rcmd: poll (setting up stderr): %m\n")) >= 0)
+                           || (errno == 0
+                               && __asprintf(&buf, _("\
+poll: protocol failure in circuit setup\n")) >= 0))
+                         {
 #ifdef USE_IN_LIBIO
-                       if (_IO_fwide (stderr, 0) > 0)
-                               __fwprintf (stderr, L"%s", buf);
-                       else
+                           if (_IO_fwide (stderr, 0) > 0)
+                             __fwprintf (stderr, L"%s", buf);
+                           else
 #endif
-                               fputs (buf, stderr);
-                       free  (buf);
+                             fputs (buf, stderr);
+                           free  (buf);
+                         }
                        (void)__close(s2);
                        goto bad;
                }
@@ -331,15 +353,17 @@ rcmd: write (setting up stderr): %m\n"));
                if (rport >= IPPORT_RESERVED || rport < IPPORT_RESERVED / 2){
                        char *buf = NULL;
 
-                       __asprintf(&buf,
-                            _("socket: protocol failure in circuit setup\n"));
+                       if (__asprintf(&buf, _("\
+socket: protocol failure in circuit setup\n")) >= 0)
+                         {
 #ifdef USE_IN_LIBIO
-                       if (_IO_fwide (stderr, 0) > 0)
-                               __fwprintf (stderr, L"%s", buf);
-                       else
+                           if (_IO_fwide (stderr, 0) > 0)
+                             __fwprintf (stderr, L"%s", buf);
+                           else
 #endif
-                               fputs (buf, stderr);
-                       free (buf);
+                             fputs (buf, stderr);
+                           free (buf);
+                         }
                        goto bad2;
                }
        }
@@ -350,17 +374,20 @@ rcmd: write (setting up stderr): %m\n"));
        if (n != 1) {
                char *buf = NULL;
 
-               if (n == 0)
-                       __asprintf(&buf, _("rcmd: %s: short read"), *ahost);
-               else
-                       __asprintf(&buf, "rcmd: %s: %m\n", *ahost);
+               if ((n == 0
+                    && __asprintf(&buf, _("rcmd: %s: short read"),
+                                  *ahost) >= 0)
+                   || (n != 0
+                       && __asprintf(&buf, "rcmd: %s: %m\n", *ahost) >= 0))
+                 {
 #ifdef USE_IN_LIBIO
-               if (_IO_fwide (stderr, 0) > 0)
-                       __fwprintf (stderr, L"%s", buf);
-               else
+                   if (_IO_fwide (stderr, 0) > 0)
+                     __fwprintf (stderr, L"%s", buf);
+                   else
 #endif
-                       fputs (buf, stderr);
-               free (buf);
+                     fputs (buf, stderr);
+                   free (buf);
+                 }
                goto bad2;
        }
        if (c != 0) {
@@ -383,6 +410,7 @@ bad:
        freeaddrinfo(res);
        return -1;
 }
+libc_hidden_def (rcmd_af)
 
 int
 rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
@@ -429,7 +457,7 @@ rresvport_af(alport, family)
 
        for (;;) {
                *sport = htons((uint16_t) *alport);
-               if (bind(s, (struct sockaddr *)&ss, len) >= 0)
+               if (__bind(s, (struct sockaddr *)&ss, len) >= 0)
                        return s;
                if (errno != EADDRINUSE) {
                        (void)__close(s);
@@ -443,6 +471,7 @@ rresvport_af(alport, family)
        __set_errno (EAGAIN);
        return -1;
 }
+libc_hidden_def (rresvport_af)
 
 int
 rresvport(alport)
@@ -479,6 +508,8 @@ ruserok_af(rhost, superuser, ruser, luser, af)
        freeaddrinfo(res0);
        return (ret);
 }
+libc_hidden_def (ruserok_af)
+
 int
 ruserok(rhost, superuser, ruser, luser)
        const char *rhost, *ruser, *luser;
@@ -643,6 +674,8 @@ iruserok_af (raddr, superuser, ruser, luser, af)
   }
   return ruserok_sa ((struct sockaddr *)&ra, ralen, superuser, ruser, luser);
 }
+libc_hidden_def (iruserok_af)
+
 int
 iruserok (raddr, superuser, ruser, luser)
      u_int32_t raddr;
This page took 0.032504 seconds and 5 git commands to generate.