make setuserenv and setuserpath take an environment setting function and

an environment pointer and expose them.
bump version.
This commit is contained in:
christos 2005-12-20 21:32:20 +00:00
parent 724f51cbd9
commit 349633b5fa
2 changed files with 19 additions and 13 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: login_cap.c,v 1.22 2005/08/27 17:24:42 elad Exp $ */
/* $NetBSD: login_cap.c,v 1.23 2005/12/20 21:32:20 christos Exp $ */
/*-
* Copyright (c) 1995,1997 Berkeley Software Design, Inc. All rights reserved.
@ -36,7 +36,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
__RCSID("$NetBSD: login_cap.c,v 1.22 2005/08/27 17:24:42 elad Exp $");
__RCSID("$NetBSD: login_cap.c,v 1.23 2005/12/20 21:32:20 christos Exp $");
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
@ -60,13 +60,12 @@ __RCSID("$NetBSD: login_cap.c,v 1.22 2005/08/27 17:24:42 elad Exp $");
#include <unistd.h>
#include <util.h>
static void setuserpath(login_cap_t *, const char *);
static u_quad_t multiply(u_quad_t, u_quad_t);
static u_quad_t strtolimit(const char *, char **, int);
static u_quad_t strtosize(const char *, char **, int);
static int gsetrl(login_cap_t *, int, const char *, int type);
static int setuserenv(login_cap_t *);
static int isinfinite(const char *);
static int envset(void *, const char *, const char *, int);
login_cap_t *
login_getclass(const char *class)
@ -481,7 +480,14 @@ gsetrl(login_cap_t *lc, int what, const char *name, int type)
}
static int
setuserenv(login_cap_t *lc)
/*ARGSUSED*/
envset(void *envp, const char *name, const char *value, int overwrite)
{
return setenv(name, value, overwrite);
}
int
setuserenv(login_cap_t *lc, envfunc_t senv, void *envp)
{
const char *stop = ", \t";
int i, count;
@ -525,7 +531,7 @@ setuserenv(login_cap_t *lc)
*ptr++ = '\0';
else
ptr = NULL;
setenv(res[i], ptr ? ptr : "", 1);
(void)(*senv)(envp, res[i], ptr ? ptr : "", 1);
}
}
@ -617,17 +623,17 @@ setusercontext(login_cap_t *lc, struct passwd *pwd, uid_t uid, u_int flags)
}
if (flags & LOGIN_SETENV)
setuserenv(lc);
setuserenv(lc, envset, NULL);
if (flags & LOGIN_SETPATH)
setuserpath(lc, pwd ? pwd->pw_dir : "");
setuserpath(lc, pwd ? pwd->pw_dir : "", envset, NULL);
login_close(flc);
return (0);
}
static void
setuserpath(login_cap_t *lc, const char *home)
void
setuserpath(login_cap_t *lc, const char *home, envfunc_t senv, void *envp)
{
size_t hlen, plen;
int cnt = 0;
@ -675,7 +681,7 @@ setuserpath(login_cap_t *lc, const char *home)
cpath = _PATH_DEFPATH;
} else
cpath = _PATH_DEFPATH;
if (setenv("PATH", cpath, 1))
if ((*senv)(envp, "PATH", cpath, 1))
warn("could not set PATH");
}

View File

@ -1,5 +1,5 @@
# $NetBSD: shlib_version,v 1.37 2005/09/14 11:36:53 elad Exp $
# $NetBSD: shlib_version,v 1.38 2005/12/20 21:32:20 christos Exp $
# Remember to update distrib/sets/lists/base/shl.* when changing
#
major=7
minor=7
minor=8