Print this page
Reduce lint


 268 static int
 269 connect_zone_sock(const char *zname, const char *suffix, boolean_t verbose)
 270 {
 271         int sockfd = -1;
 272         struct sockaddr_un servaddr;
 273 
 274         if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
 275                 if (verbose)
 276                         zperror(gettext("could not create socket"));
 277                 return (-1);
 278         }
 279 
 280         bzero(&servaddr, sizeof (servaddr));
 281         servaddr.sun_family = AF_UNIX;
 282         (void) snprintf(servaddr.sun_path, sizeof (servaddr.sun_path),
 283             "%s/%s.%s", ZONES_TMPDIR, zname, suffix);
 284         if (connect(sockfd, (struct sockaddr *)&servaddr,
 285             sizeof (servaddr)) == -1) {
 286                 if (verbose)
 287                         zperror(gettext("Could not connect to zone"));
 288                 close(sockfd);
 289                 return (-1);
 290         }
 291         return (sockfd);
 292 }
 293 
 294 
 295 static int
 296 handshake_zone_sock(int sockfd, unsigned int flags)
 297 {
 298         char clientid[MAXPATHLEN];
 299         char handshake[MAXPATHLEN], c;
 300         int msglen;
 301         int i = 0, err = 0;
 302 
 303         msglen = snprintf(clientid, sizeof (clientid), "IDENT %s %u\n",
 304             setlocale(LC_MESSAGES, NULL), flags);
 305 
 306         if (msglen >= sizeof (clientid) || msglen < 0) {
 307                 zerror("protocol error");
 308                 return (-1);


 544                 return (-1);
 545         }
 546         effective_termios.c_cc[VEOF] = save_termios.c_cc[VEOF];
 547         effective_termios.c_cc[VEOL] = save_termios.c_cc[VEOL];
 548 
 549         return (0);
 550 }
 551 
 552 /*
 553  * Copy terminal window size from our terminal to the pts.
 554  */
 555 /*ARGSUSED*/
 556 static void
 557 sigwinch(int s)
 558 {
 559         struct winsize ws;
 560 
 561         if (ioctl(0, TIOCGWINSZ, &ws) == 0) {
 562                 if (ctlfd != -1) {
 563                         char buf[BUFSIZ];
 564                         snprintf(buf, sizeof (buf), "TIOCSWINSZ %hu %hu\n",
 565                             ws.ws_row, ws.ws_col);
 566                         (void) send_ctl_sock(buf, strlen(buf));
 567                 } else {
 568                         (void) ioctl(masterfd, TIOCSWINSZ, &ws);
 569                 }
 570         }
 571 }
 572 
 573 /*
 574  * Toggle zfd EOF mode and notify zoneadmd
 575  */
 576 /*ARGSUSED*/
 577 static void
 578 sigusr1(int s)
 579 {
 580         connect_flags ^= ZLOGIN_ZFD_EOF;
 581         if (ctlfd != -1) {
 582                 char buf[BUFSIZ];
 583                 snprintf(buf, sizeof (buf), "SETFLAGS %u\n",
 584                     connect_flags);
 585                 (void) send_ctl_sock(buf, strlen(buf));
 586         }
 587 }
 588 
 589 static volatile int close_on_sig = -1;
 590 
 591 static void
 592 /*ARGSUSED*/
 593 sigcld(int s)
 594 {
 595         int status;
 596         pid_t pid;
 597 
 598         /*
 599          * Peek at the exit status.  If this isn't the process we cared
 600          * about, then just reap it.
 601          */
 602         if ((pid = waitpid(child_pid, &status, WNOHANG|WNOWAIT)) != -1) {
 603                 if (pid == child_pid &&


2200                 }
2201 
2202                 /*
2203                  * Ensure that zoneadmd for this zone is running.
2204                  */
2205                 if (start_zoneadmd(zonename) == -1)
2206                         return (1);
2207 
2208                 /*
2209                  * Make contact with zoneadmd.
2210                  *
2211                  * Handshake with the control socket first. We handle retries
2212                  * here since the relevant thread in zoneadmd might not have
2213                  * finished setting up yet.
2214                  */
2215                 for (retry = 0; retry < MAX_RETRY; retry++) {
2216                         masterfd = connect_zone_sock(zonename,
2217                             (imode ? "server_ctl" : "console_sock"), B_FALSE);
2218                         if (masterfd != -1)
2219                                 break;
2220                         sleep(1);
2221                 }
2222 
2223                 if (retry == MAX_RETRY) {
2224                         zerror(gettext("unable to connect for %d seconds"),
2225                             MAX_RETRY);
2226                         return (1);
2227                 }
2228 
2229                 if (handshake_zone_sock(masterfd, connect_flags) != 0) {
2230                         (void) close(masterfd);
2231                         return (1);
2232                 }
2233 
2234                 if (imode) {
2235                         ctlfd = masterfd;
2236 
2237                         /* Now open the io-related sockets */
2238                         masterfd = connect_zone_sock(zonename, "server_out",
2239                             B_TRUE);
2240                         gz_stderr_fd = connect_zone_sock(zonename,




 268 static int
 269 connect_zone_sock(const char *zname, const char *suffix, boolean_t verbose)
 270 {
 271         int sockfd = -1;
 272         struct sockaddr_un servaddr;
 273 
 274         if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
 275                 if (verbose)
 276                         zperror(gettext("could not create socket"));
 277                 return (-1);
 278         }
 279 
 280         bzero(&servaddr, sizeof (servaddr));
 281         servaddr.sun_family = AF_UNIX;
 282         (void) snprintf(servaddr.sun_path, sizeof (servaddr.sun_path),
 283             "%s/%s.%s", ZONES_TMPDIR, zname, suffix);
 284         if (connect(sockfd, (struct sockaddr *)&servaddr,
 285             sizeof (servaddr)) == -1) {
 286                 if (verbose)
 287                         zperror(gettext("Could not connect to zone"));
 288                 (void) close(sockfd);
 289                 return (-1);
 290         }
 291         return (sockfd);
 292 }
 293 
 294 
 295 static int
 296 handshake_zone_sock(int sockfd, unsigned int flags)
 297 {
 298         char clientid[MAXPATHLEN];
 299         char handshake[MAXPATHLEN], c;
 300         int msglen;
 301         int i = 0, err = 0;
 302 
 303         msglen = snprintf(clientid, sizeof (clientid), "IDENT %s %u\n",
 304             setlocale(LC_MESSAGES, NULL), flags);
 305 
 306         if (msglen >= sizeof (clientid) || msglen < 0) {
 307                 zerror("protocol error");
 308                 return (-1);


 544                 return (-1);
 545         }
 546         effective_termios.c_cc[VEOF] = save_termios.c_cc[VEOF];
 547         effective_termios.c_cc[VEOL] = save_termios.c_cc[VEOL];
 548 
 549         return (0);
 550 }
 551 
 552 /*
 553  * Copy terminal window size from our terminal to the pts.
 554  */
 555 /*ARGSUSED*/
 556 static void
 557 sigwinch(int s)
 558 {
 559         struct winsize ws;
 560 
 561         if (ioctl(0, TIOCGWINSZ, &ws) == 0) {
 562                 if (ctlfd != -1) {
 563                         char buf[BUFSIZ];
 564                         (void) snprintf(buf, sizeof (buf),
 565                             "TIOCSWINSZ %hu %hu\n", ws.ws_row, ws.ws_col);
 566                         (void) send_ctl_sock(buf, strlen(buf));
 567                 } else {
 568                         (void) ioctl(masterfd, TIOCSWINSZ, &ws);
 569                 }
 570         }
 571 }
 572 
 573 /*
 574  * Toggle zfd EOF mode and notify zoneadmd
 575  */
 576 /*ARGSUSED*/
 577 static void
 578 sigusr1(int s)
 579 {
 580         connect_flags ^= ZLOGIN_ZFD_EOF;
 581         if (ctlfd != -1) {
 582                 char buf[BUFSIZ];
 583                 (void) snprintf(buf, sizeof (buf), "SETFLAGS %u\n",
 584                     connect_flags);
 585                 (void) send_ctl_sock(buf, strlen(buf));
 586         }
 587 }
 588 
 589 static volatile int close_on_sig = -1;
 590 
 591 static void
 592 /*ARGSUSED*/
 593 sigcld(int s)
 594 {
 595         int status;
 596         pid_t pid;
 597 
 598         /*
 599          * Peek at the exit status.  If this isn't the process we cared
 600          * about, then just reap it.
 601          */
 602         if ((pid = waitpid(child_pid, &status, WNOHANG|WNOWAIT)) != -1) {
 603                 if (pid == child_pid &&


2200                 }
2201 
2202                 /*
2203                  * Ensure that zoneadmd for this zone is running.
2204                  */
2205                 if (start_zoneadmd(zonename) == -1)
2206                         return (1);
2207 
2208                 /*
2209                  * Make contact with zoneadmd.
2210                  *
2211                  * Handshake with the control socket first. We handle retries
2212                  * here since the relevant thread in zoneadmd might not have
2213                  * finished setting up yet.
2214                  */
2215                 for (retry = 0; retry < MAX_RETRY; retry++) {
2216                         masterfd = connect_zone_sock(zonename,
2217                             (imode ? "server_ctl" : "console_sock"), B_FALSE);
2218                         if (masterfd != -1)
2219                                 break;
2220                         (void) sleep(1);
2221                 }
2222 
2223                 if (retry == MAX_RETRY) {
2224                         zerror(gettext("unable to connect for %d seconds"),
2225                             MAX_RETRY);
2226                         return (1);
2227                 }
2228 
2229                 if (handshake_zone_sock(masterfd, connect_flags) != 0) {
2230                         (void) close(masterfd);
2231                         return (1);
2232                 }
2233 
2234                 if (imode) {
2235                         ctlfd = masterfd;
2236 
2237                         /* Now open the io-related sockets */
2238                         masterfd = connect_zone_sock(zonename, "server_out",
2239                             B_TRUE);
2240                         gz_stderr_fd = connect_zone_sock(zonename,