Changeset 227 for trunk/src/trustfile.c


Ignore:
Timestamp:
Apr 20, 2009, 5:59:31 PM (16 years ago)
Author:
katerina
Message:

Fix warnings with -fstack-check

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/trustfile.c

    r221 r227  
    422422#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
    423423  struct group    gr;
    424   char            buffer[SH_GRBUF_SIZE];
     424  char          * buffer = NULL;
    425425  struct passwd   pwd;
    426   char            pbuffer[SH_PWBUF_SIZE];
     426  char          * pbuffer = NULL;
    427427#endif
    428428
     
    430430
    431431#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
    432   sh_getgrgid_r(grp, &gr, buffer, sizeof(buffer), &g);
     432  buffer = malloc(SH_GRBUF_SIZE);
     433  sh_getgrgid_r(grp, &gr, buffer, SH_GRBUF_SIZE, &g);
    433434#else
    434435  g = sh_getgrgid(grp);
     
    437438  if (g == NULL)
    438439    {
    439       SL_IRETURN(SL_FALSE, _("isingrp") );
    440     }
    441   /*
    442   if(g->gr_mem == NULL || g->gr_mem[0] == NULL )
    443     SL_IRETURN(SL_FALSE, _("isingrp") );
    444   */
     440      goto end_false;
     441    }
    445442
    446443  /* this will return at the first match
    447444   */
     445#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
     446  pbuffer = malloc(SH_PWBUF_SIZE);
     447#endif
     448
    448449  for(p = g->gr_mem; *p != NULL; p++)
    449450    {
     
    452453          /* map user name to UID and compare */
    453454#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
    454           sh_getpwnam_r(*p, &pwd, pbuffer, sizeof(pbuffer), &w);
     455          sh_getpwnam_r(*p, &pwd, pbuffer, SH_PWBUF_SIZE, &w);
    455456#else
    456457          w = sh_getpwnam(*p);
     
    459460#ifdef TRUST_MAIN
    460461          if (w != NULL && *u == (uid_t)(w->pw_uid) )
    461             SL_IRETURN(SL_TRUE, _("isingrp"));
     462            goto end_true;
    462463#else
    463464          if (w != NULL && *u == (uid_t)(w->pw_uid) )
    464465            {
    465               SL_IRETURN(SL_TRUE, _("isingrp"));
     466              goto end_true;
    466467            }
    467468#endif
     
    474475    {
    475476#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWUID_R)
    476       sh_getpwuid_r(*u, &pwd, pbuffer, sizeof(pbuffer), &w);
     477      sh_getpwuid_r(*u, &pwd, pbuffer, SH_PWBUF_SIZE, &w);
    477478#else
    478479      w = sh_getpwuid(*u);
     
    480481#ifdef TRUST_MAIN
    481482      if (w != NULL && grp == (gid_t)(w->pw_gid) )
    482         SL_IRETURN(SL_TRUE, _("isingrp"));
     483        goto end_true;
    483484#else
    484485      if (w != NULL && grp == (gid_t)(w->pw_gid) )
    485486        {
    486           SL_IRETURN(SL_TRUE, _("isingrp"));
    487         }
    488 #endif
    489     }
    490 
     487          goto end_true;
     488        }
     489#endif
     490    }
     491
     492 end_false:
     493#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
     494  if (buffer)  free(buffer);
     495  if (pbuffer) free(pbuffer);
     496#endif
    491497  SL_IRETURN(SL_FALSE, _("isingrp"));
     498
     499 end_true:
     500#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
     501  if (buffer)  free(buffer);
     502  if (pbuffer) free(pbuffer);
     503#endif
     504  SL_IRETURN(SL_TRUE, _("isingrp"));
    492505}
    493506
     
    506519#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
    507520  struct group    gr;
    508   char            buffer[SH_GRBUF_SIZE];
     521  char          * buffer  = NULL;
    509522  struct passwd   pw;
    510   char            pbuffer[SH_PWBUF_SIZE];
     523  char          * pbuffer = NULL;
    511524#endif
    512525
     
    521534
    522535#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
    523   sh_getgrgid_r(grp, &gr, buffer, sizeof(buffer), &g);
     536  buffer = malloc(SH_GRBUF_SIZE);
     537  sh_getgrgid_r(grp, &gr, buffer, SH_GRBUF_SIZE, &g);
    524538#else
    525539  g = sh_getgrgid(grp);
     
    533547              (UID_CAST)grp);
    534548#endif
    535       SL_IRETURN(SL_FALSE, _("onlytrustedingrp") );
     549      retval = SL_FALSE;
     550      goto end_retval;
    536551    }
    537552
     
    544559  /* check for untrusted members of the group
    545560   */
     561#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
     562  pbuffer = malloc(SH_PWBUF_SIZE);
     563#endif
     564
    546565  for(p = g->gr_mem; *p != NULL; p++)
    547566    {
     
    553572       */
    554573#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETPWNAM_R)
    555       sh_getpwnam_r(*p, &pw, pbuffer, sizeof(pbuffer), &w);
     574      sh_getpwnam_r(*p, &pw, pbuffer, SH_PWBUF_SIZE, &w);
    556575#else
    557576      w = sh_getpwnam(*p);
     
    601620#endif
    602621          tf_baduid = w->pw_uid;
    603           SL_IRETURN(SL_FALSE, _("onlytrustedingrp"));
    604         }
    605     }
     622          retval = SL_FALSE;
     623#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
     624          if (pbuffer) free(pbuffer);
     625#endif
     626          goto end_retval;
     627        }
     628    }
     629
     630#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
     631  if (pbuffer) free(pbuffer);
     632#endif
    606633
    607634#ifndef TEST_ONLY       
     
    680707  /* all found
    681708   */
     709 end_retval:
     710#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
     711  if (buffer)  free(buffer);
     712#endif
    682713  SL_IRETURN(retval, _("onlytrustedingrp"));
    683714}
     
    685716int sl_trustfile(const char *fname, uid_t *okusers, uid_t *badusers)
    686717{
    687   char fexp[MAXFILENAME];       /* file name fully expanded        */
    688   register char *p = fexp;      /* used to hold name to be checked */
     718  char * fexp = NULL;           /* file name fully expanded        */
     719  register char *p;             /* used to hold name to be checked */
    689720  struct stat stbuf;            /* used to check file permissions  */
    690721  char c;                       /* used to hold temp char          */
     
    693724  if (fname == NULL)
    694725    SL_IRETURN(SL_EBADFILE, _("sl_trustfile"));
     726
     727  fexp = malloc( MAXFILENAME );
     728  if (!fexp)
     729    SL_IRETURN(SL_EMEM, _("sl_trustfile"));
     730
     731  p = fexp;
    695732
    696733  /*
     
    701738  sl_errno = getfname(fname, fexp, MAXFILENAME);
    702739  if (sl_errno != 0)
    703     return sl_errno;
     740    {
     741      free(fexp);
     742      return sl_errno;
     743    }
    704744#else
    705745  if (SL_ISERROR(getfname(fname, fexp, MAXFILENAME)))
     746    {
     747      free(fexp);
    706748      SL_IRETURN(sl_errno, _("sl_trustfile"));
     749    }
    707750#endif
    708751
     
    755798          fprintf(stderr, "---------------------------------------------\n");
    756799#endif
     800          free(fexp);
    757801          SL_IRETURN(SL_ESTAT, _("sl_trustfile"));
    758802        }
     
    781825           * got it?
    782826           */
    783           char csym[MAXFILENAME];       /* contents of symlink file  */
    784           char full[MAXFILENAME];       /* "full" name of symlink    */
     827          char * csym;                  /* contents of symlink file  */
     828          char * full;                  /* "full" name of symlink    */
    785829          register char *b, *t;         /* used to copy stuff around */
    786830          register int lsym;            /* num chars in symlink ref  */
     
    797841           * R.W. Tue May 29 22:05:16 CEST 2001
    798842           */
     843          csym = malloc( MAXFILENAME );
     844          if (!csym)
     845            {
     846              free(fexp);
     847              SL_IRETURN(SL_EMEM, _("sl_trustfile"));
     848            }
     849
    799850          lsym = readlink(fexp, csym, MAXFILENAME-1);
    800851          if (lsym >= 0)
     
    808859              fprintf(stderr, "---------------------------------------------\n");
    809860#endif
     861              free(csym);
     862              free(fexp);
    810863              SL_IRETURN(SL_EBADNAME, _("sl_trustfile"));
     864            }
     865
     866          full = malloc( MAXFILENAME );
     867          if (!full)
     868            {
     869              free(csym);
     870              free(fexp);
     871              SL_IRETURN(SL_EMEM, _("sl_trustfile"));
    811872            }
    812873
     
    857918                  fprintf(stderr, "---------------------------------------------\n");
    858919#endif
     920                  free(full);
     921                  free(csym);
     922                  free(fexp);
    859923                  SL_IRETURN(SL_ETRUNC, _("sl_trustfile"));
    860924                }
     
    872936           */
    873937          if ((i = sl_trustfile(full, okusers, badusers)) != SL_ENONE)
    874             SL_IRETURN(i, _("sl_trustfile"));
     938            {
     939              free(full);
     940              free(csym);
     941              free(fexp);
     942              SL_IRETURN(i, _("sl_trustfile"));
     943            }
    875944
    876945          /*
     
    891960                p++;
    892961            }
     962          free(full);
     963          free(csym);
    893964          continue;
    894965        }
     
    922993
    923994          tf_baduid = (uid_t) stbuf.st_uid;
     995          free(fexp);
    924996          SL_IRETURN(SL_EBADUID, _("sl_trustfile"));
    925997        }
     
    9611033
    9621034          tf_badgid = (gid_t) stbuf.st_gid;
     1035          free(fexp);
    9631036          SL_IRETURN(SL_EBADGID, _("sl_trustfile"));
    9641037        }
     
    9841057          tf_path[sizeof(tf_path)-1] = '\0';
    9851058
     1059          free(fexp);
    9861060          SL_IRETURN(SL_EBADOTH, _("sl_trustfile"));
    9871061        }
     
    10091083  tf_path[sizeof(tf_path)-1] = '\0';
    10101084
     1085  free(fexp);
    10111086  SL_IRETURN(SL_ENONE, _("sl_trustfile"));
    10121087}
Note: See TracChangeset for help on using the changeset viewer.