(do_login): chown and chmod the tty. some clean-up.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7241 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -213,7 +213,7 @@ krb5_verify(struct passwd *pwd, const char *password)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
krb5_start_session (struct passwd *pwd)
|
krb5_start_session (const struct passwd *pwd)
|
||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
char residual[64];
|
char residual[64];
|
||||||
@@ -276,7 +276,7 @@ krb5_finish (void)
|
|||||||
static int pag_set = 0;
|
static int pag_set = 0;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
krb5_get_afs_tokens (struct passwd *pwd)
|
krb5_get_afs_tokens (const struct passwd *pwd)
|
||||||
{
|
{
|
||||||
char cell[64];
|
char cell[64];
|
||||||
char *pw_dir;
|
char *pw_dir;
|
||||||
@@ -346,7 +346,7 @@ krb4_verify(struct passwd *pwd, const char *password)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
krb4_get_afs_tokens (struct passwd *pwd)
|
krb4_get_afs_tokens (const struct passwd *pwd)
|
||||||
{
|
{
|
||||||
char cell[64];
|
char cell[64];
|
||||||
char *pw_dir;
|
char *pw_dir;
|
||||||
@@ -423,14 +423,22 @@ checknologin(void)
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actually log in the user. `pwd' contains all the relevant
|
||||||
|
* information about the user. `ttyn' is the complete name of the tty
|
||||||
|
* and `tty' the short name.
|
||||||
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_login(struct passwd *pwd, char *tty, char *ttyn)
|
do_login(const struct passwd *pwd, char *tty, char *ttyn)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SHADOW_H
|
#ifdef HAVE_SHADOW_H
|
||||||
struct spwd *sp;
|
struct spwd *sp;
|
||||||
#endif
|
#endif
|
||||||
int rootlogin = (pwd->pw_uid == 0);
|
int rootlogin = (pwd->pw_uid == 0);
|
||||||
|
gid_t tty_gid;
|
||||||
|
struct group *gr;
|
||||||
|
const char *home_dir;
|
||||||
|
|
||||||
if(!rootlogin)
|
if(!rootlogin)
|
||||||
checknologin();
|
checknologin();
|
||||||
@@ -441,6 +449,25 @@ do_login(struct passwd *pwd, char *tty, char *ttyn)
|
|||||||
|
|
||||||
update_utmp(pwd->pw_name, remote_host ? remote_host : "",
|
update_utmp(pwd->pw_name, remote_host ? remote_host : "",
|
||||||
tty, ttyn);
|
tty, ttyn);
|
||||||
|
|
||||||
|
gr = getgrnam ("tty");
|
||||||
|
if (gr != NULL)
|
||||||
|
tty_gid = gr->gr_gid;
|
||||||
|
else
|
||||||
|
tty_gid = pwd->pw_gid;
|
||||||
|
|
||||||
|
if (chown (ttyn, pwd->pw_uid, pwd->pw_gid) < 0) {
|
||||||
|
warn("chown %s", ttyn);
|
||||||
|
if (rootlogin == 0)
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chmod (ttyn, S_IRUSR | S_IWUSR | S_IWGRP) < 0) {
|
||||||
|
warn("chmod %s", ttyn);
|
||||||
|
if (rootlogin == 0)
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_SETLOGIN
|
#ifdef HAVE_SETLOGIN
|
||||||
if(setlogin(pwd->pw_name)){
|
if(setlogin(pwd->pw_name)){
|
||||||
warn("setlogin(%s)", pwd->pw_name);
|
warn("setlogin(%s)", pwd->pw_name);
|
||||||
@@ -528,11 +555,12 @@ do_login(struct passwd *pwd, char *tty, char *ttyn)
|
|||||||
free(ucap);
|
free(ucap);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (chdir(pwd->pw_dir) < 0) {
|
home_dir = pwd->pw_dir;
|
||||||
|
if (chdir(home_dir) < 0) {
|
||||||
fprintf(stderr, "No home directory \"%s\"!\n", pwd->pw_dir);
|
fprintf(stderr, "No home directory \"%s\"!\n", pwd->pw_dir);
|
||||||
if (chdir("/"))
|
if (chdir("/"))
|
||||||
exit(0);
|
exit(0);
|
||||||
pwd->pw_dir = "/";
|
home_dir = "/";
|
||||||
fprintf(stderr, "Logging in with home = \"/\".\n");
|
fprintf(stderr, "Logging in with home = \"/\".\n");
|
||||||
}
|
}
|
||||||
#ifdef KRB5
|
#ifdef KRB5
|
||||||
@@ -549,7 +577,7 @@ do_login(struct passwd *pwd, char *tty, char *ttyn)
|
|||||||
krb4_get_afs_tokens (pwd);
|
krb4_get_afs_tokens (pwd);
|
||||||
#endif /* KRB4 */
|
#endif /* KRB4 */
|
||||||
|
|
||||||
add_env("HOME", pwd->pw_dir);
|
add_env("HOME", home_dir);
|
||||||
add_env("USER", pwd->pw_name);
|
add_env("USER", pwd->pw_name);
|
||||||
add_env("LOGNAME", pwd->pw_name);
|
add_env("LOGNAME", pwd->pw_name);
|
||||||
add_env("SHELL", pwd->pw_shell);
|
add_env("SHELL", pwd->pw_shell);
|
||||||
|
Reference in New Issue
Block a user