(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:
Assar Westerlund
1999-10-27 21:34:29 +00:00
parent 6fb7b20898
commit 3a9217cf73

View File

@@ -213,7 +213,7 @@ krb5_verify(struct passwd *pwd, const char *password)
}
static int
krb5_start_session (struct passwd *pwd)
krb5_start_session (const struct passwd *pwd)
{
krb5_error_code ret;
char residual[64];
@@ -276,7 +276,7 @@ krb5_finish (void)
static int pag_set = 0;
static void
krb5_get_afs_tokens (struct passwd *pwd)
krb5_get_afs_tokens (const struct passwd *pwd)
{
char cell[64];
char *pw_dir;
@@ -346,7 +346,7 @@ krb4_verify(struct passwd *pwd, const char *password)
}
static void
krb4_get_afs_tokens (struct passwd *pwd)
krb4_get_afs_tokens (const struct passwd *pwd)
{
char cell[64];
char *pw_dir;
@@ -423,14 +423,22 @@ checknologin(void)
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
do_login(struct passwd *pwd, char *tty, char *ttyn)
do_login(const struct passwd *pwd, char *tty, char *ttyn)
{
#ifdef HAVE_SHADOW_H
struct spwd *sp;
#endif
int rootlogin = (pwd->pw_uid == 0);
gid_t tty_gid;
struct group *gr;
const char *home_dir;
if(!rootlogin)
checknologin();
@@ -441,6 +449,25 @@ do_login(struct passwd *pwd, char *tty, char *ttyn)
update_utmp(pwd->pw_name, remote_host ? remote_host : "",
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
if(setlogin(pwd->pw_name)){
warn("setlogin(%s)", pwd->pw_name);
@@ -528,11 +555,12 @@ do_login(struct passwd *pwd, char *tty, char *ttyn)
free(ucap);
}
#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);
if (chdir("/"))
exit(0);
pwd->pw_dir = "/";
home_dir = "/";
fprintf(stderr, "Logging in with home = \"/\".\n");
}
#ifdef KRB5
@@ -549,7 +577,7 @@ do_login(struct passwd *pwd, char *tty, char *ttyn)
krb4_get_afs_tokens (pwd);
#endif /* KRB4 */
add_env("HOME", pwd->pw_dir);
add_env("HOME", home_dir);
add_env("USER", pwd->pw_name);
add_env("LOGNAME", pwd->pw_name);
add_env("SHELL", pwd->pw_shell);