|
Lines 967-973
Link Here
|
| 967 |
int *errnop, keylen, resultlen, rv; |
967 |
int *errnop, keylen, resultlen, rv; |
| 968 |
|
968 |
|
| 969 |
name = NULL; |
969 |
name = NULL; |
| 970 |
key = NULL; |
|
|
| 971 |
gid = (gid_t)-1; |
970 |
gid = (gid_t)-1; |
| 972 |
how = (enum nss_lookup_type)mdata; |
971 |
how = (enum nss_lookup_type)mdata; |
| 973 |
switch (how) { |
972 |
switch (how) { |
|
Lines 1017-1032
Link Here
|
| 1017 |
result = NULL; |
1016 |
result = NULL; |
| 1018 |
if (how == nss_lt_all) { |
1017 |
if (how == nss_lt_all) { |
| 1019 |
if (st->key == NULL) |
1018 |
if (st->key == NULL) |
| 1020 |
rv = yp_first(st->domain, map, &key, |
1019 |
rv = yp_first(st->domain, map, &st->key, |
| 1021 |
&keylen, &result, &resultlen); |
1020 |
&st->keylen, &result, &resultlen); |
| 1022 |
else { |
1021 |
else { |
| 1023 |
rv = yp_next(st->domain, map, |
1022 |
key = st->key; |
| 1024 |
st->key, st->keylen, |
1023 |
keylen = st->keylen; |
| 1025 |
&key, &keylen, &result, &resultlen); |
1024 |
st->key = NULL; |
|
|
1025 |
rv = yp_next(st->domain, map, key, keylen, |
| 1026 |
&st->key, &st->keylen, &result, |
| 1027 |
&resultlen); |
| 1028 |
free(key); |
| 1026 |
} |
1029 |
} |
| 1027 |
if (rv != 0) { |
1030 |
if (rv != 0) { |
| 1028 |
free(result); |
1031 |
free(result); |
| 1029 |
free(key); |
|
|
| 1030 |
free(st->key); |
1032 |
free(st->key); |
| 1031 |
st->key = NULL; |
1033 |
st->key = NULL; |
| 1032 |
if (rv == YPERR_NOMORE) { |
1034 |
if (rv == YPERR_NOMORE) { |
|
Lines 1052-1086
Link Here
|
| 1052 |
* terminator, alignment padding, and one (char *) |
1054 |
* terminator, alignment padding, and one (char *) |
| 1053 |
* pointer for the member list terminator. |
1055 |
* pointer for the member list terminator. |
| 1054 |
*/ |
1056 |
*/ |
| 1055 |
if (resultlen >= bufsize - _ALIGNBYTES - sizeof(char *)) { |
1057 |
if (resultlen >= bufsize - _ALIGNBYTES - sizeof(char *)) |
| 1056 |
if (how == nss_lt_all) { |
1058 |
goto erange; |
| 1057 |
free(key); |
|
|
| 1058 |
} |
| 1059 |
goto erange; |
| 1060 |
} |
| 1061 |
memcpy(buffer, result, resultlen); |
1059 |
memcpy(buffer, result, resultlen); |
| 1062 |
buffer[resultlen] = '\0'; |
1060 |
buffer[resultlen] = '\0'; |
| 1063 |
free(result); |
1061 |
free(result); |
| 1064 |
rv = __gr_match_entry(buffer, resultlen, how, name, gid); |
1062 |
rv = __gr_match_entry(buffer, resultlen, how, name, gid); |
| 1065 |
if (rv == NS_SUCCESS) { |
1063 |
if (rv == NS_SUCCESS) |
| 1066 |
rv = __gr_parse_entry(buffer, resultlen, grp, |
1064 |
rv = __gr_parse_entry(buffer, resultlen, grp, |
| 1067 |
&buffer[resultlen+1], bufsize - resultlen - 1, |
1065 |
&buffer[resultlen+1], bufsize - resultlen - 1, |
| 1068 |
errnop); |
1066 |
errnop); |
| 1069 |
if (*errnop == ERANGE) { |
|
|
| 1070 |
if (how == nss_lt_all) { |
| 1071 |
free(key); |
| 1072 |
} |
| 1073 |
goto erange; |
| 1074 |
} |
| 1075 |
} |
| 1076 |
if (how == nss_lt_all) { |
| 1077 |
if (st->key != NULL) { |
| 1078 |
free(st->key); |
| 1079 |
} |
| 1080 |
st->key = key; |
| 1081 |
st->keylen = keylen; |
| 1082 |
key = NULL; |
| 1083 |
} |
| 1084 |
} while (how == nss_lt_all && !(rv & NS_TERMINATE)); |
1067 |
} while (how == nss_lt_all && !(rv & NS_TERMINATE)); |
| 1085 |
fin: |
1068 |
fin: |
| 1086 |
if (rv == NS_SUCCESS && retval != NULL) |
1069 |
if (rv == NS_SUCCESS && retval != NULL) |