Changeset View
Changeset View
Standalone View
Standalone View
head/lib/libc/gen/getgrent.c
Show First 20 Lines • Show All 160 Lines • ▼ Show 20 Lines | grp_id_func(char *buffer, size_t *buffer_size, va_list ap, void *cache_mdata) | ||||
char *name; | char *name; | ||||
gid_t gid; | gid_t gid; | ||||
size_t desired_size, size; | size_t desired_size, size; | ||||
int res = NS_UNAVAIL; | int res = NS_UNAVAIL; | ||||
enum nss_lookup_type lookup_type; | enum nss_lookup_type lookup_type; | ||||
lookup_type = (enum nss_lookup_type)cache_mdata; | lookup_type = (enum nss_lookup_type)(uintptr_t)cache_mdata; | ||||
switch (lookup_type) { | switch (lookup_type) { | ||||
case nss_lt_name: | case nss_lt_name: | ||||
name = va_arg(ap, char *); | name = va_arg(ap, char *); | ||||
size = strlen(name); | size = strlen(name); | ||||
desired_size = sizeof(enum nss_lookup_type) + size + 1; | desired_size = sizeof(enum nss_lookup_type) + size + 1; | ||||
if (desired_size > *buffer_size) { | if (desired_size > *buffer_size) { | ||||
res = NS_RETURN; | res = NS_RETURN; | ||||
goto fin; | goto fin; | ||||
Show All 37 Lines | grp_marshal_func(char *buffer, size_t *buffer_size, void *retval, va_list ap, | ||||
struct group *grp; | struct group *grp; | ||||
char *orig_buf; | char *orig_buf; | ||||
size_t orig_buf_size; | size_t orig_buf_size; | ||||
struct group new_grp; | struct group new_grp; | ||||
size_t desired_size, size, mem_size; | size_t desired_size, size, mem_size; | ||||
char *p, **mem; | char *p, **mem; | ||||
switch ((enum nss_lookup_type)cache_mdata) { | switch ((enum nss_lookup_type)(uintptr_t)cache_mdata) { | ||||
case nss_lt_name: | case nss_lt_name: | ||||
name = va_arg(ap, char *); | name = va_arg(ap, char *); | ||||
break; | break; | ||||
case nss_lt_id: | case nss_lt_id: | ||||
gid = va_arg(ap, gid_t); | gid = va_arg(ap, gid_t); | ||||
break; | break; | ||||
case nss_lt_all: | case nss_lt_all: | ||||
break; | break; | ||||
▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | grp_unmarshal_func(char *buffer, size_t buffer_size, void *retval, va_list ap, | ||||
struct group *grp; | struct group *grp; | ||||
char *orig_buf; | char *orig_buf; | ||||
size_t orig_buf_size; | size_t orig_buf_size; | ||||
int *ret_errno; | int *ret_errno; | ||||
char *p; | char *p; | ||||
char **mem; | char **mem; | ||||
switch ((enum nss_lookup_type)cache_mdata) { | switch ((enum nss_lookup_type)(uintptr_t)cache_mdata) { | ||||
case nss_lt_name: | case nss_lt_name: | ||||
name = va_arg(ap, char *); | name = va_arg(ap, char *); | ||||
break; | break; | ||||
case nss_lt_id: | case nss_lt_id: | ||||
gid = va_arg(ap, gid_t); | gid = va_arg(ap, gid_t); | ||||
break; | break; | ||||
case nss_lt_all: | case nss_lt_all: | ||||
break; | break; | ||||
▲ Show 20 Lines • Show All 472 Lines • ▼ Show 20 Lines | |||||
files_setgrent(void *retval, void *mdata, va_list ap) | files_setgrent(void *retval, void *mdata, va_list ap) | ||||
{ | { | ||||
struct files_state *st; | struct files_state *st; | ||||
int rv, stayopen; | int rv, stayopen; | ||||
rv = files_getstate(&st); | rv = files_getstate(&st); | ||||
if (rv != 0) | if (rv != 0) | ||||
return (NS_UNAVAIL); | return (NS_UNAVAIL); | ||||
switch ((enum constants)mdata) { | switch ((enum constants)(uintptr_t)mdata) { | ||||
case SETGRENT: | case SETGRENT: | ||||
stayopen = va_arg(ap, int); | stayopen = va_arg(ap, int); | ||||
if (st->fp != NULL) | if (st->fp != NULL) | ||||
rewind(st->fp); | rewind(st->fp); | ||||
else if (stayopen) | else if (stayopen) | ||||
st->fp = fopen(_PATH_GROUP, "re"); | st->fp = fopen(_PATH_GROUP, "re"); | ||||
break; | break; | ||||
case ENDGRENT: | case ENDGRENT: | ||||
Show All 20 Lines | files_group(void *retval, void *mdata, va_list ap) | ||||
char *buffer; | char *buffer; | ||||
size_t bufsize, linesize; | size_t bufsize, linesize; | ||||
off_t pos; | off_t pos; | ||||
int fresh, rv, stayopen, *errnop; | int fresh, rv, stayopen, *errnop; | ||||
fresh = 0; | fresh = 0; | ||||
name = NULL; | name = NULL; | ||||
gid = (gid_t)-1; | gid = (gid_t)-1; | ||||
how = (enum nss_lookup_type)mdata; | how = (enum nss_lookup_type)(uintptr_t)mdata; | ||||
switch (how) { | switch (how) { | ||||
case nss_lt_name: | case nss_lt_name: | ||||
name = va_arg(ap, const char *); | name = va_arg(ap, const char *); | ||||
break; | break; | ||||
case nss_lt_id: | case nss_lt_id: | ||||
gid = va_arg(ap, gid_t); | gid = va_arg(ap, gid_t); | ||||
break; | break; | ||||
case nss_lt_all: | case nss_lt_all: | ||||
▲ Show 20 Lines • Show All 236 Lines • ▼ Show 20 Lines | nis_group(void *retval, void *mdata, va_list ap) | ||||
char *buffer, *key, *result; | char *buffer, *key, *result; | ||||
size_t bufsize; | size_t bufsize; | ||||
gid_t gid; | gid_t gid; | ||||
enum nss_lookup_type how; | enum nss_lookup_type how; | ||||
int *errnop, keylen, resultlen, rv; | int *errnop, keylen, resultlen, rv; | ||||
name = NULL; | name = NULL; | ||||
gid = (gid_t)-1; | gid = (gid_t)-1; | ||||
how = (enum nss_lookup_type)mdata; | how = (enum nss_lookup_type)(uintptr_t)mdata; | ||||
switch (how) { | switch (how) { | ||||
case nss_lt_name: | case nss_lt_name: | ||||
name = va_arg(ap, const char *); | name = va_arg(ap, const char *); | ||||
map = "group.byname"; | map = "group.byname"; | ||||
break; | break; | ||||
case nss_lt_id: | case nss_lt_id: | ||||
gid = va_arg(ap, gid_t); | gid = va_arg(ap, gid_t); | ||||
map = "group.bygid"; | map = "group.bygid"; | ||||
▲ Show 20 Lines • Show All 142 Lines • ▼ Show 20 Lines | #define set_setent(x, y) do { \ | ||||
int i; \ | int i; \ | ||||
for (i = 0; i < (int)(nitems(x) - 1); i++) \ | for (i = 0; i < (int)(nitems(x) - 1); i++) \ | ||||
x[i].mdata = (void *)y; \ | x[i].mdata = (void *)y; \ | ||||
} while (0) | } while (0) | ||||
rv = compat_getstate(&st); | rv = compat_getstate(&st); | ||||
if (rv != 0) | if (rv != 0) | ||||
return (NS_UNAVAIL); | return (NS_UNAVAIL); | ||||
switch ((enum constants)mdata) { | switch ((enum constants)(uintptr_t)mdata) { | ||||
case SETGRENT: | case SETGRENT: | ||||
stayopen = va_arg(ap, int); | stayopen = va_arg(ap, int); | ||||
if (st->fp != NULL) | if (st->fp != NULL) | ||||
rewind(st->fp); | rewind(st->fp); | ||||
else if (stayopen) | else if (stayopen) | ||||
st->fp = fopen(_PATH_GROUP, "re"); | st->fp = fopen(_PATH_GROUP, "re"); | ||||
set_setent(dtab, mdata); | set_setent(dtab, mdata); | ||||
(void)_nsdispatch(NULL, dtab, NSDB_GROUP_COMPAT, "setgrent", | (void)_nsdispatch(NULL, dtab, NSDB_GROUP_COMPAT, "setgrent", | ||||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | #define set_lookup_type(x, y) do { \ | ||||
int i; \ | int i; \ | ||||
for (i = 0; i < (int)(nitems(x) - 1); i++) \ | for (i = 0; i < (int)(nitems(x) - 1); i++) \ | ||||
x[i].mdata = (void *)y; \ | x[i].mdata = (void *)y; \ | ||||
} while (0) | } while (0) | ||||
fresh = 0; | fresh = 0; | ||||
name = NULL; | name = NULL; | ||||
gid = (gid_t)-1; | gid = (gid_t)-1; | ||||
how = (enum nss_lookup_type)mdata; | how = (enum nss_lookup_type)(uintptr_t)mdata; | ||||
switch (how) { | switch (how) { | ||||
case nss_lt_name: | case nss_lt_name: | ||||
name = va_arg(ap, const char *); | name = va_arg(ap, const char *); | ||||
break; | break; | ||||
case nss_lt_id: | case nss_lt_id: | ||||
gid = va_arg(ap, gid_t); | gid = va_arg(ap, gid_t); | ||||
break; | break; | ||||
case nss_lt_all: | case nss_lt_all: | ||||
▲ Show 20 Lines • Show All 235 Lines • Show Last 20 Lines |