Print this page
2989 Eliminate use of LOGNAME_MAX in ON
1166 useradd have warning with name more 8 chars
        
*** 18,27 ****
--- 18,29 ----
   *
   * CDDL HEADER END
   */
  
  /*
+  * Copyright (c) 2013 Gary Mills
+  *
   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
   * Use is subject to license terms.
   */
  
  /*
*** 74,84 ****
   * Set to ZONENAME_MAX, the minimum value needed to allow any
   * zone to be specified.
   */
  #define ARGSIZ ZONENAME_MAX
  
! #define MAXUGNAME 10    /* max chars in a user/group name or printed u/g id */
  
  /* Structure for storing user or group info */
  struct ugdata {
          id_t    id;                     /* numeric user-id or group-id */
          char    name[MAXUGNAME+1];      /* user/group name, null terminated */
--- 76,87 ----
   * Set to ZONENAME_MAX, the minimum value needed to allow any
   * zone to be specified.
   */
  #define ARGSIZ ZONENAME_MAX
  
! #define MAXUGNAME (LOGNAME_MAX+2)       /* max chars in a user/group */
!                                                 /* name or printed u/g id */
  
  /* Structure for storing user or group info */
  struct ugdata {
          id_t    id;                     /* numeric user-id or group-id */
          char    name[MAXUGNAME+1];      /* user/group name, null terminated */
*** 222,231 ****
--- 225,235 ----
  static  int     Gflg;
  static  int     aflg;
  static  int     dflg;
  static  int     Lflg;
  static  int     Pflg;
+ static  int     Wflg;
  static  int     yflg;
  static  int     pflg;
  static  int     fflg;
  static  int     cflg;
  static  int     jflg;
*** 422,432 ****
          if (len >= sizeof (loc_stime_str))
                  len = sizeof (loc_stime_str) - 1;
  
          fname[F_STIME].width = fname[F_STIME].minwidth = len;
  
!         while ((c = getopt(argc, argv, "jlfceAadLPyZHh:t:p:g:u:U:G:n:s:o:z:"))
              != EOF)
                  switch (c) {
                  case 'H':               /* Show home lgroups */
                          Hflg++;
                          break;
--- 426,436 ----
          if (len >= sizeof (loc_stime_str))
                  len = sizeof (loc_stime_str) - 1;
  
          fname[F_STIME].width = fname[F_STIME].minwidth = len;
  
!         while ((c = getopt(argc, argv, "jlfceAadLPWyZHh:t:p:g:u:U:G:n:s:o:z:"))
              != EOF)
                  switch (c) {
                  case 'H':               /* Show home lgroups */
                          Hflg++;
                          break;
*** 516,525 ****
--- 520,532 ----
                          Lflg++;
                          break;
                  case 'P':       /* show bound processor */
                          Pflg++;
                          break;
+                 case 'W':       /* truncate long names */
+                         Wflg++;
+                         break;
                  case 'y':       /* omit F & ADDR, report RSS & SZ in Kby */
                          yflg++;
                          break;
                  case 'n':       /* no longer needed; retain as no-op */
                          (void) fprintf(stderr,
*** 1055,1065 ****
  {
          struct def_field *df, *sorted[NFIELDS];
          int pos = 80, i = 0;
  
          static char usage1[] =
!             "ps [ -aAdefHlcjLPyZ ] [ -o format ] [ -t termlist ]";
          static char usage2[] =
              "\t[ -u userlist ] [ -U userlist ] [ -G grouplist ]";
          static char usage3[] =
              "\t[ -p proclist ] [ -g pgrplist ] [ -s sidlist ]";
          static char usage4[] =
--- 1062,1072 ----
  {
          struct def_field *df, *sorted[NFIELDS];
          int pos = 80, i = 0;
  
          static char usage1[] =
!             "ps [ -aAdefHlcjLPWyZ ] [ -o format ] [ -t termlist ]";
          static char usage2[] =
              "\t[ -u userlist ] [ -U userlist ] [ -G grouplist ]";
          static char usage3[] =
              "\t[ -p proclist ] [ -g pgrplist ] [ -s sidlist ]";
          static char usage4[] =
*** 1395,1413 ****
          if (Zflg) {                                             /* ZONE */
                  if (getzonenamebyid(psinfo->pr_zoneid, zonename,
                      sizeof (zonename)) < 0) {
                          (void) printf(" %7.7d ", ((int)psinfo->pr_zoneid));
                  } else {
                          (void) printf("%8.8s ", zonename);
                  }
          }
  
          if (fflg) {                                             /* UID */
!                 if ((pwd = getpwuid(psinfo->pr_euid)) != NULL)
!                         (void) printf("%8.8s ", pwd->pw_name);
                  else
                          (void) printf(" %7.7u ", psinfo->pr_euid);
          } else if (lflg) {
                  (void) printf("%6u ", psinfo->pr_euid);
          }
          (void) printf("%*d", pidwidth, (int)psinfo->pr_pid); /* PID */
          if (lflg || fflg)
--- 1402,1427 ----
          if (Zflg) {                                             /* ZONE */
                  if (getzonenamebyid(psinfo->pr_zoneid, zonename,
                      sizeof (zonename)) < 0) {
                          (void) printf(" %7.7d ", ((int)psinfo->pr_zoneid));
                  } else {
+                         if (strlen(zonename) > 8)
+                                 (void) printf("%7.7s%c ", zonename, '*');
+                         else
                                  (void) printf("%8.8s ", zonename);
                  }
          }
  
          if (fflg) {                                             /* UID */
!                 if ((pwd = getpwuid(psinfo->pr_euid)) != NULL) {
!                         if (strlen(pwd->pw_name) > 8)
!                                 (void) printf("%7.7s%c ", pwd->pw_name, '*');
                          else
+                                 (void) printf("%8.8s ", pwd->pw_name);
+                 } else {
                          (void) printf(" %7.7u ", psinfo->pr_euid);
+                 }
          } else if (lflg) {
                  (void) printf("%6u ", psinfo->pr_euid);
          }
          (void) printf("%*d", pidwidth, (int)psinfo->pr_pid); /* PID */
          if (lflg || fflg)
*** 1626,1645 ****
  
          zombie_lwp = (Lflg && psinfo->pr_lwp.pr_sname == 'Z');
  
          switch (f->fname) {
          case F_RUSER:
!                 if ((pwd = getpwuid(psinfo->pr_uid)) != NULL)
!                         (void) printf("%*s", width, pwd->pw_name);
                  else
                          (void) printf("%*u", width, psinfo->pr_uid);
                  break;
          case F_USER:
!                 if ((pwd = getpwuid(psinfo->pr_euid)) != NULL)
!                         (void) printf("%*s", width, pwd->pw_name);
                  else
                          (void) printf("%*u", width, psinfo->pr_euid);
                  break;
          case F_RGROUP:
                  if ((grp = getgrgid(psinfo->pr_gid)) != NULL)
                          (void) printf("%*s", width, grp->gr_name);
                  else
--- 1640,1669 ----
  
          zombie_lwp = (Lflg && psinfo->pr_lwp.pr_sname == 'Z');
  
          switch (f->fname) {
          case F_RUSER:
!                 if ((pwd = getpwuid(psinfo->pr_uid)) != NULL) {
!                         if (Wflg && strlen(pwd->pw_name) > width)
!                                 (void) printf("%.*s%c", width - 1,
!                                     pwd->pw_name, '*');
                          else
+                                 (void) printf("%*s", width, pwd->pw_name);
+                 } else {
                          (void) printf("%*u", width, psinfo->pr_uid);
+                 }
                  break;
          case F_USER:
!                 if ((pwd = getpwuid(psinfo->pr_euid)) != NULL) {
!                         if (Wflg && strlen(pwd->pw_name) > width)
!                                 (void) printf("%.*s%c", width - 1,
!                                     pwd->pw_name, '*');
                          else
+                                 (void) printf("%*s", width, pwd->pw_name);
+                 } else {
                          (void) printf("%*u", width, psinfo->pr_euid);
+                 }
                  break;
          case F_RGROUP:
                  if ((grp = getgrgid(psinfo->pr_gid)) != NULL)
                          (void) printf("%*s", width, grp->gr_name);
                  else
*** 1877,1894 ****
                  {
                          struct project cproj;
                          char proj_buf[PROJECT_BUFSZ];
  
                          if ((getprojbyid(psinfo->pr_projid, &cproj,
!                             (void *)&proj_buf, PROJECT_BUFSZ)) == NULL)
                                  (void) printf("%*d", width,
                                      (int)psinfo->pr_projid);
                          else
                                  (void) printf("%*s", width,
                                      (cproj.pj_name != NULL) ?
                                      cproj.pj_name : "---");
                  }
                  break;
          case F_PSET:
                  if (zombie_lwp || psinfo->pr_lwp.pr_bindpset == PS_NONE)
                          (void) printf("%*s", width, "-");
                  else
--- 1901,1924 ----
                  {
                          struct project cproj;
                          char proj_buf[PROJECT_BUFSZ];
  
                          if ((getprojbyid(psinfo->pr_projid, &cproj,
!                             (void *)&proj_buf, PROJECT_BUFSZ)) == NULL) {
                                  (void) printf("%*d", width,
                                      (int)psinfo->pr_projid);
+                         } else {
+                                 if (Wflg && cproj.pj_name != NULL &&
+                                     strlen(cproj.pj_name) > width)
+                                         (void) printf("%.*s%c", width - 1,
+                                             cproj.pj_name, '*');
                                  else
                                          (void) printf("%*s", width,
                                              (cproj.pj_name != NULL) ?
                                              cproj.pj_name : "---");
                          }
+                 }
                  break;
          case F_PSET:
                  if (zombie_lwp || psinfo->pr_lwp.pr_bindpset == PS_NONE)
                          (void) printf("%*s", width, "-");
                  else
*** 1904,1913 ****
--- 1934,1947 ----
                          if (getzonenamebyid(psinfo->pr_zoneid, zonename,
                              sizeof (zonename)) < 0) {
                                  (void) printf("%*d", width,
                                      ((int)psinfo->pr_zoneid));
                          } else {
+                                 if (Wflg && strlen(zonename) > width)
+                                         (void) printf("%.*s%c", width - 1,
+                                             zonename, '*');
+                                 else
                                          (void) printf("%*s", width, zonename);
                          }
                  }
                  break;
          case F_CTID:
*** 2181,2202 ****
          if (Zflg) {
                  if (getzonenamebyid(psinfo->pr_zoneid, zonename,
                      sizeof (zonename)) < 0) {
                          (void) printf(" %7.7d ", ((int)psinfo->pr_zoneid));
                  } else {
                          (void) printf("%8.8s ", zonename);
                  }
          }
          if (Hflg) {
                  /* Display home lgroup */
                  (void) printf(" %6d", (int)psinfo->pr_lwp.pr_lgrp); /* LGRP */
          }
          if (fflg) {
!                 if ((pwd = getpwuid(psinfo->pr_euid)) != NULL)
!                         (void) printf("%8.8s ", pwd->pw_name);
                  else
                          (void) printf(" %7.7u ", psinfo->pr_euid);
          } else if (lflg)
                  (void) printf("%6u ", psinfo->pr_euid);
  
          (void) printf("%*d", pidwidth, (int)psinfo->pr_pid);    /* PID */
          if (lflg || fflg)
--- 2215,2243 ----
          if (Zflg) {
                  if (getzonenamebyid(psinfo->pr_zoneid, zonename,
                      sizeof (zonename)) < 0) {
                          (void) printf(" %7.7d ", ((int)psinfo->pr_zoneid));
                  } else {
+                         if (strlen(zonename) > 8)
+                                 (void) printf("%7.7s%c ", zonename, '*');
+                         else
                                  (void) printf("%8.8s ", zonename);
                  }
          }
          if (Hflg) {
                  /* Display home lgroup */
                  (void) printf(" %6d", (int)psinfo->pr_lwp.pr_lgrp); /* LGRP */
          }
          if (fflg) {
!                 if ((pwd = getpwuid(psinfo->pr_euid)) != NULL) {
!                         if (strlen(pwd->pw_name) > 8)
!                                 (void) printf("%7.7s%c ", pwd->pw_name, '*');
                          else
+                                 (void) printf("%8.8s ", pwd->pw_name);
+                 } else {
                          (void) printf(" %7.7u ", psinfo->pr_euid);
+                 }
          } else if (lflg)
                  (void) printf("%6u ", psinfo->pr_euid);
  
          (void) printf("%*d", pidwidth, (int)psinfo->pr_pid);    /* PID */
          if (lflg || fflg)