LCOV - code coverage report
Current view: top level - openssh-6.6p1/openbsd-compat - pwcache.c (source / functions) Hit Total Coverage
Test: lcov_coverage_final.info Lines: 0 24 0.0 %
Date: 2014-08-01 Functions: 0 2 0.0 %
Branches: 0 28 0.0 %

           Branch data     Line data    Source code
       1                 :            : /*      $OpenBSD: pwcache.c,v 1.9 2005/08/08 08:05:34 espie Exp $ */
       2                 :            : /*
       3                 :            :  * Copyright (c) 1989, 1993
       4                 :            :  *      The Regents of the University of California.  All rights reserved.
       5                 :            :  *
       6                 :            :  * Redistribution and use in source and binary forms, with or without
       7                 :            :  * modification, are permitted provided that the following conditions
       8                 :            :  * are met:
       9                 :            :  * 1. Redistributions of source code must retain the above copyright
      10                 :            :  *    notice, this list of conditions and the following disclaimer.
      11                 :            :  * 2. Redistributions in binary form must reproduce the above copyright
      12                 :            :  *    notice, this list of conditions and the following disclaimer in the
      13                 :            :  *    documentation and/or other materials provided with the distribution.
      14                 :            :  * 3. Neither the name of the University nor the names of its contributors
      15                 :            :  *    may be used to endorse or promote products derived from this software
      16                 :            :  *    without specific prior written permission.
      17                 :            :  *
      18                 :            :  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      19                 :            :  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      20                 :            :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      21                 :            :  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      22                 :            :  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      23                 :            :  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      24                 :            :  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      25                 :            :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      26                 :            :  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      27                 :            :  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      28                 :            :  * SUCH DAMAGE.
      29                 :            :  */
      30                 :            : 
      31                 :            : /* OPENBSD ORIGINAL: lib/libc/gen/pwcache.c */
      32                 :            : 
      33                 :            : #include "includes.h"
      34                 :            : 
      35                 :            : #include <sys/types.h>
      36                 :            : 
      37                 :            : #include <grp.h>
      38                 :            : #include <pwd.h>
      39                 :            : #include <stdio.h>
      40                 :            : #include <stdlib.h>
      41                 :            : #include <string.h>
      42                 :            : 
      43                 :            : #define NCACHE  64                      /* power of 2 */
      44                 :            : #define MASK    (NCACHE - 1)            /* bits to store with */
      45                 :            : 
      46                 :            : #ifndef HAVE_USER_FROM_UID
      47                 :            : char *
      48                 :          0 : user_from_uid(uid_t uid, int nouser)
      49                 :            : {
      50                 :            :         static struct ncache {
      51                 :            :                 uid_t   uid;
      52                 :            :                 char    *name;
      53                 :            :         } c_uid[NCACHE];
      54                 :            :         static int pwopen;
      55                 :            :         static char nbuf[15];           /* 32 bits == 10 digits */
      56                 :            :         struct passwd *pw;
      57                 :            :         struct ncache *cp;
      58                 :            : 
      59                 :          0 :         cp = c_uid + (uid & MASK);
      60 [ #  # ][ #  # ]:          0 :         if (cp->uid != uid || cp->name == NULL) {
      61         [ #  # ]:          0 :                 if (pwopen == 0) {
      62                 :            : #ifdef HAVE_SETPASSENT
      63                 :            :                         setpassent(1);
      64                 :            : #endif
      65                 :          0 :                         pwopen = 1;
      66                 :            :                 }
      67         [ #  # ]:          0 :                 if ((pw = getpwuid(uid)) == NULL) {
      68         [ #  # ]:          0 :                         if (nouser)
      69                 :            :                                 return (NULL);
      70                 :            :                         (void)snprintf(nbuf, sizeof(nbuf), "%u", uid);
      71                 :            :                 }
      72                 :          0 :                 cp->uid = uid;
      73         [ #  # ]:          0 :                 if (cp->name != NULL)
      74                 :          0 :                         free(cp->name);
      75         [ #  # ]:          0 :                 cp->name = strdup(pw ? pw->pw_name : nbuf);
      76                 :            :         }
      77                 :          0 :         return (cp->name);
      78                 :            : }
      79                 :            : #endif
      80                 :            : 
      81                 :            : #ifndef HAVE_GROUP_FROM_GID
      82                 :            : char *
      83                 :          0 : group_from_gid(gid_t gid, int nogroup)
      84                 :            : {
      85                 :            :         static struct ncache {
      86                 :            :                 gid_t   gid;
      87                 :            :                 char    *name;
      88                 :            :         } c_gid[NCACHE];
      89                 :            :         static int gropen;
      90                 :            :         static char nbuf[15];           /* 32 bits == 10 digits */
      91                 :            :         struct group *gr;
      92                 :            :         struct ncache *cp;
      93                 :            : 
      94                 :          0 :         cp = c_gid + (gid & MASK);
      95 [ #  # ][ #  # ]:          0 :         if (cp->gid != gid || cp->name == NULL) {
      96         [ #  # ]:          0 :                 if (gropen == 0) {
      97                 :            : #ifdef HAVE_SETGROUPENT
      98                 :            :                         setgroupent(1);
      99                 :            : #endif
     100                 :          0 :                         gropen = 1;
     101                 :            :                 }
     102         [ #  # ]:          0 :                 if ((gr = getgrgid(gid)) == NULL) {
     103         [ #  # ]:          0 :                         if (nogroup)
     104                 :            :                                 return (NULL);
     105                 :            :                         (void)snprintf(nbuf, sizeof(nbuf), "%u", gid);
     106                 :            :                 }
     107                 :          0 :                 cp->gid = gid;
     108         [ #  # ]:          0 :                 if (cp->name != NULL)
     109                 :          0 :                         free(cp->name);
     110         [ #  # ]:          0 :                 cp->name = strdup(gr ? gr->gr_name : nbuf);
     111                 :            :         }
     112                 :          0 :         return (cp->name);
     113                 :            : }
     114                 :            : #endif

Generated by: LCOV version 1.9