(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 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);