`popen(ypcat)', which is probably both slower and less secure.
- * $Id: userdb.c,v 1.2 1997/08/04 10:24:26 mdw Exp $
+ * $Id: userdb.c,v 1.3 1997/08/07 09:44:29 mdw Exp $
*
* User database management
*
*
* User database management
*
/*----- Revision history --------------------------------------------------*
*
* $Log: userdb.c,v $
/*----- Revision history --------------------------------------------------*
*
* $Log: userdb.c,v $
+ * Revision 1.3 1997/08/07 09:44:29 mdw
+ * Read NIS-based passwords from the YP server directly, rather than using
+ * `popen(ypcat)', which is probably both slower and less secure.
+ *
* Revision 1.2 1997/08/04 10:24:26 mdw
* Sources placed under CVS control.
*
* Revision 1.2 1997/08/04 10:24:26 mdw
* Sources placed under CVS control.
*
#include <sys/types.h>
#ifdef HAVE_YP
#include <sys/types.h>
#ifdef HAVE_YP
# include <rpcsvc/ypclnt.h>
# include <rpcsvc/yp_prot.h>
#endif
# include <rpcsvc/ypclnt.h>
# include <rpcsvc/yp_prot.h>
#endif
/* --- Local headers --- */
/* --- Local headers --- */
#include "sym.h"
#include "userdb.h"
#include "utils.h"
#include "sym.h"
#include "userdb.h"
#include "utils.h"
/* --- @userdb__dumpUser@ --- *
*
* Arguments: @const struct passwd *pw@ = pointer to a user block
/* --- @userdb__dumpUser@ --- *
*
* Arguments: @const struct passwd *pw@ = pointer to a user block
- * @FILE *fp@ = pointer to stream to write on
*
* Returns: ---
*
* Use: Writes a user's informationt to a stream.
*/
*
* Returns: ---
*
* Use: Writes a user's informationt to a stream.
*/
-static void userdb__dumpUser(const struct passwd *pw, FILE *fp)
+static void userdb__dumpUser(const struct passwd *pw)
- printf("\n"
- "*** name == %s\n"
- "*** passwd == %s\n"
- "*** uid == %i\n"
- "*** gid == %i\n"
- "*** gecos == %s\n"
- "*** home == %s\n"
- "*** shell == %s\n",
- pw->pw_name, pw->pw_passwd, (int)pw->pw_uid, (int)pw->pw_gid,
- pw->pw_gecos, pw->pw_dir, pw->pw_shell);
+ trace(TRACE_DEBUG,
+ "debug: name `%s' passwd `%s' uid %i gid %i",
+ pw->pw_name, pw->pw_passwd, (int)pw->pw_uid, (int)pw->pw_gid);
+ trace(TRACE_DEBUG,
+ "debug: ... gecos `%s' home `%s' shell `%s'",
+ pw->pw_gecos, pw->pw_dir, pw->pw_shell);
-#else
-
-#define userdb__dumpUser(pw, fp) ((void)0)
-
#endif
/* --- @userdb_copyUser@ --- *
#endif
/* --- @userdb_copyUser@ --- *
* Use: Writes a group's information to a stream.
*/
* Use: Writes a group's information to a stream.
*/
-static void userdb__dumpGroup(const struct group *gr, FILE *fp)
+static void userdb__dumpGroup(const struct group *gr)
- printf("\n"
- "*** name == %s\n"
- "*** passwd == %s\n"
- "*** gid == %i\n"
- "*** members...\n",
+ trace(TRACE_DEBUG,
+ "debug: name `%s' passwd `%s' gid %i",
gr->gr_name, gr->gr_passwd, (int)gr->gr_gid);
for (p = gr->gr_mem; *p; p++)
gr->gr_name, gr->gr_passwd, (int)gr->gr_gid);
for (p = gr->gr_mem; *p; p++)
- printf("*** %s\n", *p);
+ trace(TRACE_DEBUG,"debug: ... `%s'", *p);
-#else
-
-#define userdb__dumpUser(pw, fp) ((void)0)
-
#endif
/* --- @userdb_copyGroup@ --- *
#endif
/* --- @userdb_copyGroup@ --- *
cv = xmalloc(vsz + 1);
memcpy(cv, v, vsz);
cv[vsz] = 0;
cv = xmalloc(vsz + 1);
memcpy(cv, v, vsz);
cv[vsz] = 0;
+ T( trace(TRACE_DEBUG, "debug: nis string: `%s'", cv); )
pw = userdb__buildUser(cv);
pw = userdb__buildUser(cv);
- if (pw && !userdb__byName(&userdb__users, pw->pw_name))
+ if (pw && !userdb__byName(&userdb__users, pw->pw_name)) {
+ IF_TRACING(TRACE_DEBUG, userdb__dumpUser(pw); )
userdb__addToMap(&userdb__users, pw->pw_name, pw->pw_uid, pw);
userdb__addToMap(&userdb__users, pw->pw_name, pw->pw_uid, pw);
cv = xmalloc(vsz + 1);
memcpy(cv, v, vsz);
cv[vsz] = 0;
cv = xmalloc(vsz + 1);
memcpy(cv, v, vsz);
cv[vsz] = 0;
+ T( trace(TRACE_DEBUG, "debug: nis string: `%s'", cv); )
gr = userdb__buildGroup(cv);
gr = userdb__buildGroup(cv);
- if (gr && !userdb__byName(&userdb__groups, gr->gr_name))
+ if (gr && !userdb__byName(&userdb__groups, gr->gr_name)) {
+ IF_TRACING(TRACE_DEBUG, userdb__dumpGroup(gr); )
userdb__addToMap(&userdb__groups, gr->gr_name, gr->gr_gid, gr);
userdb__addToMap(&userdb__groups, gr->gr_name, gr->gr_gid, gr);
+ T( trace(TRACE_DEBUG, "debug: adding NIS users"); )
+
/* --- Fetch the users map --- */
{
/* --- Fetch the users map --- */
{
void userdb_local(void)
{
void userdb_local(void)
{
- D( printf("adding local users...\n"); )
+ T( trace(TRACE_DEBUG, "debug: adding local users"); )
/* --- Fetch users first --- */
/* --- Fetch users first --- */
setpwent();
while ((pw = getpwent()) != 0) {
setpwent();
while ((pw = getpwent()) != 0) {
- D( userdb__dumpUser(pw, stdout); )
+ IF_TRACING(TRACE_DEBUG, userdb__dumpUser(pw); )
if (!userdb__byName(&userdb__users, pw->pw_name))
userdb__addToMap(&userdb__users, pw->pw_name, pw->pw_uid,
userdb_copyUser(pw));
if (!userdb__byName(&userdb__users, pw->pw_name))
userdb__addToMap(&userdb__users, pw->pw_name, pw->pw_uid,
userdb_copyUser(pw));
setgrent();
while ((gr = getgrent()) != 0) {
setgrent();
while ((gr = getgrent()) != 0) {
- D( userdb__dumpGroup(gr, stdout); )
+ IF_TRACING(TRACE_DEBUG, userdb__dumpGroup(gr); )
if (!userdb__byName(&userdb__groups, gr->gr_name))
userdb__addToMap(&userdb__groups, gr->gr_name, gr->gr_gid,
userdb_copyGroup(gr));
if (!userdb__byName(&userdb__groups, gr->gr_name))
userdb__addToMap(&userdb__groups, gr->gr_name, gr->gr_gid,
userdb_copyGroup(gr));
void dumpit(const char *msg)
{
void dumpit(const char *msg)
{
- printf("\n\n$$$ %s\n", msg);
+ trace(TRACE_DEBUG, "debug: %s", msg);
{
struct passwd *pw;
for (userdb_iterateUsers(); (pw = userdb_nextUser()) != 0; )
{
struct passwd *pw;
for (userdb_iterateUsers(); (pw = userdb_nextUser()) != 0; )
- userdb__dumpUser(pw, stdout);
}
{
struct group *gr;
for (userdb_iterateGroups(); (gr = userdb_nextGroup()) != 0; )
}
{
struct group *gr;
for (userdb_iterateGroups(); (gr = userdb_nextGroup()) != 0; )
- userdb__dumpGroup(gr, stdout);
+ ego("userdb-test");
+ traceon(stderr, TRACE_ALL);
userdb_init();
dumpit("cleared");
userdb_init();
dumpit("cleared");
- userdb_local();
- dumpit("local");
userdb_yp();
dumpit("yp");
userdb_yp();
dumpit("yp");
+ userdb_local();
+ dumpit("local");