struct group * getgrent() { if ((!_gr_fp && !start_gr()) || !grscan(0, 0, NULL)) return(NULL); return(&_gr_group); }
struct group * getgrent() { if (!_gr_fp && !start_gr()) { return NULL; } #ifdef YP if (_gr_stepping_yp) { if (_nextypgroup(&_gr_group)) return(&_gr_group); } tryagain: #endif if (!grscan(0, 0, NULL)) return(NULL); #ifdef YP if(_gr_group.gr_name[0] == '+' && _gr_group.gr_name[1]) { _getypgroup(&_gr_group, &_gr_group.gr_name[1], "group.byname"); } else if(_gr_group.gr_name[0] == '+') { if (!_nextypgroup(&_gr_group)) goto tryagain; else return(&_gr_group); } #endif return(&_gr_group); }
struct group * _getgrent_yp(int *foundyp) { struct group *p_gr = (struct group*)_THREAD_PRIVATE(gr, _gr_group, NULL); struct group_storage *gs = (struct group_storage *)_THREAD_PRIVATE(gr_storage, gr_storage, NULL); _THREAD_PRIVATE_MUTEX_LOCK(gr); if ((!_gr_fp && !start_gr()) || !grscan(0, 0, NULL, p_gr, gs, foundyp)) p_gr = NULL; _THREAD_PRIVATE_MUTEX_UNLOCK(gr); return (p_gr); }
int setgroupent(int stayopen) { int retval; _THREAD_PRIVATE_MUTEX_LOCK(gr); if (!start_gr()) retval = 0; else { _gr_stayopen = stayopen; retval = 1; } _THREAD_PRIVATE_MUTEX_UNLOCK(gr); return (retval); }
static struct group * getgrgid_gs(gid_t gid, struct group *p_gr, struct group_storage *gs) { int rval; _THREAD_PRIVATE_MUTEX_LOCK(gr); if (!start_gr()) rval = 0; else { rval = grscan(1, gid, NULL, p_gr, gs, NULL); if (!_gr_stayopen) endgrent_basic(); } _THREAD_PRIVATE_MUTEX_UNLOCK(gr); return(rval ? p_gr : NULL); }