(ab)use unused bits in the pw_fields member of struct passwd to record

the source of the data contained in the structure.

Sponsored by:	DARPA, NAI Labs
This commit is contained in:
Dag-Erling Smørgrav 2002-04-14 22:24:55 +00:00
parent 42d7dbe6bf
commit e479b601dd
2 changed files with 17 additions and 2 deletions

View File

@ -96,6 +96,11 @@ struct passwd {
#define _PWF_SHELL _PWF(8)
#define _PWF_EXPIRE _PWF(9)
#define _PWF_SOURCE 0x3000
#define _PWF_FILES 0x1000
#define _PWF_NIS 0x2000
#define _PWF_HESIOD 0x3000
#include <sys/cdefs.h>
__BEGIN_DECLS

View File

@ -408,6 +408,10 @@ _local_getpw(rv, cb_data, ap)
(void)(_pw_db->close)(_pw_db);
_pw_db = (DB *)NULL;
}
if (rval == 0) {
_pw_passwd.pw_fields &= ~_PWF_SOURCE;
_pw_passwd.pw_fields |= _PWF_FILES;
}
return (rval);
}
@ -481,8 +485,11 @@ _dns_getpw(rv, cb_data, ap)
if (search == _PW_KEYBYNUM)
goto nextdnsbynum; /* skip dogdy entries */
r = NS_UNAVAIL;
} else
} else {
_pw_passwd.pw_fields &= ~_PWF_SOURCE;
_pw_passwd.pw_fields |= _PWF_HESIOD;
r = NS_SUCCESS;
}
cleanup_dns_getpw:
hesiod_end(context);
return (r);
@ -589,8 +596,11 @@ _nis_getpw(rv, cb_data, ap)
strncpy(line, data, sizeof(line));
line[sizeof(line) - 1] = '\0';
free(data);
if (! __pwparse(&_pw_passwd, line))
if (! __pwparse(&_pw_passwd, line)) {
_pw_passwd.pw_fields &= ~_PWF_SOURCE;
_pw_passwd.pw_fields |= _PWF_NIS;
return NS_SUCCESS;
}
}
/* NOTREACHED */
} /* _nis_getpw */