1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-12 09:18:10 +03:00

nss_wrapper: restructure nwrap calls.

Guenther
This commit is contained in:
Günther Deschner 2009-05-27 18:38:10 +02:00
parent bd11948107
commit ec9a091705

View File

@ -771,14 +771,11 @@ static int nwrap_gr_copy_r(const struct group *src, struct group *dst,
}
/* user functions */
_PUBLIC_ struct passwd *nwrap_getpwnam(const char *name)
static struct passwd *nwrap_files_getpwnam(const char *name)
{
int i;
if (!nwrap_enabled()) {
return real_getpwnam(name);
}
nwrap_cache_reload(nwrap_pw_global.cache);
for (i=0; i<nwrap_pw_global.num; i++) {
@ -798,15 +795,20 @@ _PUBLIC_ struct passwd *nwrap_getpwnam(const char *name)
return NULL;
}
_PUBLIC_ int nwrap_getpwnam_r(const char *name, struct passwd *pwdst,
char *buf, size_t buflen, struct passwd **pwdstp)
_PUBLIC_ struct passwd *nwrap_getpwnam(const char *name)
{
if (!nwrap_enabled()) {
return real_getpwnam(name);
}
return nwrap_files_getpwnam(name);
}
static int nwrap_files_getpwnam_r(const char *name, struct passwd *pwdst,
char *buf, size_t buflen, struct passwd **pwdstp)
{
struct passwd *pw;
if (!nwrap_enabled()) {
return real_getpwnam_r(name, pwdst, buf, buflen, pwdstp);
}
pw = nwrap_getpwnam(name);
if (!pw) {
if (errno == 0) {
@ -818,14 +820,20 @@ _PUBLIC_ int nwrap_getpwnam_r(const char *name, struct passwd *pwdst,
return nwrap_pw_copy_r(pw, pwdst, buf, buflen, pwdstp);
}
_PUBLIC_ struct passwd *nwrap_getpwuid(uid_t uid)
_PUBLIC_ int nwrap_getpwnam_r(const char *name, struct passwd *pwdst,
char *buf, size_t buflen, struct passwd **pwdstp)
{
if (!nwrap_enabled()) {
return real_getpwnam_r(name, pwdst, buf, buflen, pwdstp);
}
return nwrap_files_getpwnam_r(name, pwdst, buf, buflen, pwdstp);
}
static struct passwd *nwrap_files_getpwuid(uid_t uid)
{
int i;
if (!nwrap_enabled()) {
return real_getpwuid(uid);
}
nwrap_cache_reload(nwrap_pw_global.cache);
for (i=0; i<nwrap_pw_global.num; i++) {
@ -845,15 +853,22 @@ _PUBLIC_ struct passwd *nwrap_getpwuid(uid_t uid)
return NULL;
}
_PUBLIC_ int nwrap_getpwuid_r(uid_t uid, struct passwd *pwdst,
char *buf, size_t buflen, struct passwd **pwdstp)
_PUBLIC_ struct passwd *nwrap_getpwuid(uid_t uid)
{
struct passwd *pw;
int i;
if (!nwrap_enabled()) {
return real_getpwuid_r(uid, pwdst, buf, buflen, pwdstp);
return real_getpwuid(uid);
}
return nwrap_files_getpwuid(uid);
}
static int nwrap_files_getpwuid_r(uid_t uid, struct passwd *pwdst,
char *buf, size_t buflen, struct passwd **pwdstp)
{
struct passwd *pw;
pw = nwrap_getpwuid(uid);
if (!pw) {
if (errno == 0) {
@ -865,24 +880,35 @@ _PUBLIC_ int nwrap_getpwuid_r(uid_t uid, struct passwd *pwdst,
return nwrap_pw_copy_r(pw, pwdst, buf, buflen, pwdstp);
}
_PUBLIC_ int nwrap_getpwuid_r(uid_t uid, struct passwd *pwdst,
char *buf, size_t buflen, struct passwd **pwdstp)
{
if (!nwrap_enabled()) {
return real_getpwuid_r(uid, pwdst, buf, buflen, pwdstp);
}
return nwrap_files_getpwuid_r(uid, pwdst, buf, buflen, pwdstp);
}
/* user enum functions */
static void nwrap_files_setpwent(void)
{
nwrap_pw_global.idx = 0;
}
_PUBLIC_ void nwrap_setpwent(void)
{
if (!nwrap_enabled()) {
real_setpwent();
}
nwrap_pw_global.idx = 0;
nwrap_files_setpwent();
}
_PUBLIC_ struct passwd *nwrap_getpwent(void)
static struct passwd *nwrap_files_getpwent(void)
{
struct passwd *pw;
if (!nwrap_enabled()) {
return real_getpwent();
}
if (nwrap_pw_global.idx == 0) {
nwrap_cache_reload(nwrap_pw_global.cache);
}
@ -900,11 +926,34 @@ _PUBLIC_ struct passwd *nwrap_getpwent(void)
return pw;
}
_PUBLIC_ int nwrap_getpwent_r(struct passwd *pwdst, char *buf,
size_t buflen, struct passwd **pwdstp)
_PUBLIC_ struct passwd *nwrap_getpwent(void)
{
if (!nwrap_enabled()) {
return real_getpwent();
}
return nwrap_files_getpwent();
}
static int nwrap_files_getpwent_r(struct passwd *pwdst, char *buf,
size_t buflen, struct passwd **pwdstp)
{
struct passwd *pw;
pw = nwrap_getpwent();
if (!pw) {
if (errno == 0) {
return ENOENT;
}
return errno;
}
return nwrap_pw_copy_r(pw, pwdst, buf, buflen, pwdstp);
}
_PUBLIC_ int nwrap_getpwent_r(struct passwd *pwdst, char *buf,
size_t buflen, struct passwd **pwdstp)
{
if (!nwrap_enabled()) {
#ifdef SOLARIS_GETPWENT_R
pw = real_getpwent_r(pwdst, buf, buflen);
@ -923,15 +972,12 @@ _PUBLIC_ int nwrap_getpwent_r(struct passwd *pwdst, char *buf,
#endif
}
pw = nwrap_getpwent();
if (!pw) {
if (errno == 0) {
return ENOENT;
}
return errno;
}
return nwrap_files_getpwent_r(pwdst, buf, buflen, pwdstp);
}
return nwrap_pw_copy_r(pw, pwdst, buf, buflen, pwdstp);
static void nwrap_files_endpwent(void)
{
nwrap_pw_global.idx = 0;
}
_PUBLIC_ void nwrap_endpwent(void)
@ -940,29 +986,30 @@ _PUBLIC_ void nwrap_endpwent(void)
real_endpwent();
}
nwrap_pw_global.idx = 0;
nwrap_files_endpwent();
}
/* misc functions */
static int nwrap_files_initgroups(const char *user, gid_t group)
{
/* TODO: maybe we should also fake this... */
return EPERM;
}
_PUBLIC_ int nwrap_initgroups(const char *user, gid_t group)
{
if (!nwrap_enabled()) {
return real_initgroups(user, group);
}
/* TODO: maybe we should also fake this... */
return EPERM;
return nwrap_files_initgroups(user, group);
}
/* group functions */
_PUBLIC_ struct group *nwrap_getgrnam(const char *name)
static struct group *nwrap_files_getgrnam(const char *name)
{
int i;
if (!nwrap_enabled()) {
return real_getgrnam(name);
}
nwrap_cache_reload(nwrap_gr_global.cache);
for (i=0; i<nwrap_gr_global.num; i++) {
@ -982,15 +1029,20 @@ _PUBLIC_ struct group *nwrap_getgrnam(const char *name)
return NULL;
}
_PUBLIC_ int nwrap_getgrnam_r(const char *name, struct group *grdst,
char *buf, size_t buflen, struct group **grdstp)
_PUBLIC_ struct group *nwrap_getgrnam(const char *name)
{
if (!nwrap_enabled()) {
return real_getgrnam(name);
}
return nwrap_files_getgrnam(name);
}
static int nwrap_files_getgrnam_r(const char *name, struct group *grdst,
char *buf, size_t buflen, struct group **grdstp)
{
struct group *gr;
if (!nwrap_enabled()) {
return real_getgrnam_r(name, grdst, buf, buflen, grdstp);
}
gr = nwrap_getgrnam(name);
if (!gr) {
if (errno == 0) {
@ -1002,14 +1054,22 @@ _PUBLIC_ int nwrap_getgrnam_r(const char *name, struct group *grdst,
return nwrap_gr_copy_r(gr, grdst, buf, buflen, grdstp);
}
_PUBLIC_ struct group *nwrap_getgrgid(gid_t gid)
_PUBLIC_ int nwrap_getgrnam_r(const char *name, struct group *grdst,
char *buf, size_t buflen, struct group **grdstp)
{
int i;
struct group *gr;
if (!nwrap_enabled()) {
return real_getgrgid(gid);
return real_getgrnam_r(name, grdst, buf, buflen, grdstp);
}
return nwrap_files_getgrnam_r(name, grdst, buf, buflen, grdstp);
}
static struct group *nwrap_files_getgrgid(gid_t gid)
{
int i;
nwrap_cache_reload(nwrap_gr_global.cache);
for (i=0; i<nwrap_gr_global.num; i++) {
@ -1029,15 +1089,22 @@ _PUBLIC_ struct group *nwrap_getgrgid(gid_t gid)
return NULL;
}
_PUBLIC_ int nwrap_getgrgid_r(gid_t gid, struct group *grdst,
char *buf, size_t buflen, struct group **grdstp)
_PUBLIC_ struct group *nwrap_getgrgid(gid_t gid)
{
struct group *gr;
int i;
if (!nwrap_enabled()) {
return real_getgrgid_r(gid, grdst, buf, buflen, grdstp);
return real_getgrgid(gid);
}
return nwrap_files_getgrgid(gid);
}
static int nwrap_files_getgrgid_r(gid_t gid, struct group *grdst,
char *buf, size_t buflen, struct group **grdstp)
{
struct group *gr;
gr = nwrap_getgrgid(gid);
if (!gr) {
if (errno == 0) {
@ -1051,24 +1118,35 @@ _PUBLIC_ int nwrap_getgrgid_r(gid_t gid, struct group *grdst,
return ENOENT;
}
_PUBLIC_ int nwrap_getgrgid_r(gid_t gid, struct group *grdst,
char *buf, size_t buflen, struct group **grdstp)
{
if (!nwrap_enabled()) {
return real_getgrgid_r(gid, grdst, buf, buflen, grdstp);
}
return nwrap_files_getgrgid_r(gid, grdst, buf, buflen, grdstp);
}
/* group enum functions */
static void nwrap_files_setgrent(void)
{
nwrap_gr_global.idx = 0;
}
_PUBLIC_ void nwrap_setgrent(void)
{
if (!nwrap_enabled()) {
real_setgrent();
}
nwrap_gr_global.idx = 0;
nwrap_files_setgrent();
}
_PUBLIC_ struct group *nwrap_getgrent(void)
static struct group *nwrap_files_getgrent(void)
{
struct group *gr;
if (!nwrap_enabled()) {
return real_getgrent();
}
if (nwrap_gr_global.idx == 0) {
nwrap_cache_reload(nwrap_gr_global.cache);
}
@ -1086,11 +1164,34 @@ _PUBLIC_ struct group *nwrap_getgrent(void)
return gr;
}
_PUBLIC_ int nwrap_getgrent_r(struct group *grdst, char *buf,
size_t buflen, struct group **grdstp)
_PUBLIC_ struct group *nwrap_getgrent(void)
{
if (!nwrap_enabled()) {
return real_getgrent();
}
return nwrap_files_getgrent();
}
static int nwrap_files_getgrent_r(struct group *grdst, char *buf,
size_t buflen, struct group **grdstp)
{
struct group *gr;
gr = nwrap_getgrent();
if (!gr) {
if (errno == 0) {
return ENOENT;
}
return errno;
}
return nwrap_gr_copy_r(gr, grdst, buf, buflen, grdstp);
}
_PUBLIC_ int nwrap_getgrent_r(struct group *grdst, char *buf,
size_t buflen, struct group **grdstp)
{
if (!nwrap_enabled()) {
#ifdef SOLARIS_GETGRENT_R
gr = real_getgrent_r(grdst, buf, buflen);
@ -1109,15 +1210,12 @@ _PUBLIC_ int nwrap_getgrent_r(struct group *grdst, char *buf,
#endif
}
gr = nwrap_getgrent();
if (!gr) {
if (errno == 0) {
return ENOENT;
}
return errno;
}
return nwrap_files_getgrent_r(grdst, buf, buflen, grdstp);
}
return nwrap_gr_copy_r(gr, grdst, buf, buflen, grdstp);
static void nwrap_files_endgrent(void)
{
nwrap_gr_global.idx = 0;
}
_PUBLIC_ void nwrap_endgrent(void)
@ -1126,5 +1224,5 @@ _PUBLIC_ void nwrap_endgrent(void)
real_endgrent();
}
nwrap_gr_global.idx = 0;
nwrap_files_endgrent();
}