Changeset 428 for trunk/src/sh_unix.c


Ignore:
Timestamp:
Mar 12, 2013, 9:42:07 PM (9 years ago)
Author:
katerina
Message:

Fix for ticket #335 (warn if buffer for group reading is too small).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_unix.c

    r425 r428  
    10071007  struct group *           w;
    10081008  gid_t                    gid  = 0;
     1009  int                      status = 0;
    10091010
    10101011#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
     
    10351036#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
    10361037      buffer = SH_ALLOC(SH_GRBUF_SIZE);
    1037       sh_getgrnam_r(g, &grp, buffer, SH_GRBUF_SIZE, &w);
     1038      status = sh_getgrnam_r(g, &grp, buffer, SH_GRBUF_SIZE, &w);
    10381039#else
     1040      errno = 0;
    10391041      w = sh_getgrnam(g);
    1040 #endif
    1041 
    1042       if (w == NULL)
     1042      status = errno;
     1043#endif
     1044
     1045      if ((status == ERANGE) && (w == NULL))
     1046        {
     1047          static int seen = 0;
     1048         
     1049          if (seen == 0)
     1050            {
     1051              char errbuf[SH_ERRBUF_SIZE];
     1052
     1053              sh_error_handle (SH_ERR_ERR, FIL__, __LINE__, EINVAL, MSG_E_GRNULL,
     1054                               sh_error_message(status, errbuf, sizeof(errbuf)),
     1055                               _("sh_group_to_gid"), (long) -1, _("line too long in group entry"));
     1056              ++seen;
     1057            }
     1058          *fail = -1;
     1059        }
     1060      else if (w == NULL)
    10431061        {
    10441062          char * tmp = sh_util_strdup(g);
     
    28812899#endif
    28822900
     2901  if (status == ERANGE)
     2902    {
     2903      static int seen = 0;
     2904
     2905      if (seen == 0)
     2906        {
     2907          sh_error_handle (SH_ERR_ERR, FIL__, __LINE__, EINVAL, MSG_E_GRNULL,
     2908                           sh_error_message(status, errbuf, sizeof(errbuf)),
     2909                           _("getgrgid"), (long) gid, _("line too long in group entry"));
     2910          ++seen;
     2911        }
     2912     
     2913#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
     2914      SH_FREE(buffer);
     2915#endif
     2916
     2917      sh_userid_add(gid, NULL, CACHE_GID);
     2918      SL_RETURN( NULL, _("sh_unix_getGIDname"));
     2919    }
     2920
    28832921  if (tempres == NULL)
    28842922    {
Note: See TracChangeset for help on using the changeset viewer.