mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-25 01:02:24 +00:00
Introduce the ability to control whether the shell run in pterm is a
login shell or not. Also moved these new pieces of configuration into the Config structure, though they won't stay there forever since they will need to be moved out into platform-dependent config. [originally from svn r2060]
This commit is contained in:
parent
0813c25bf6
commit
0c011dcbe0
3
putty.h
3
putty.h
@ -369,6 +369,9 @@ struct config_tag {
|
||||
} sshbug_ignore1, sshbug_plainpw1, sshbug_rsa1,
|
||||
sshbug_hmac2, sshbug_derivekey2, sshbug_rsapad2,
|
||||
sshbug_dhgex2;
|
||||
/* Options for pterm. Should split out into platform-dependent part. */
|
||||
int stamp_utmp;
|
||||
int login_shell;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -309,6 +309,8 @@ void save_settings(char *section, int do_host, Config * cfg)
|
||||
write_setting_i(sesskey, "BugDeriveKey2", cfg->sshbug_derivekey2);
|
||||
write_setting_i(sesskey, "BugRSAPad2", cfg->sshbug_rsapad2);
|
||||
write_setting_i(sesskey, "BugDHGEx2", cfg->sshbug_dhgex2);
|
||||
write_setting_i(sesskey, "StampUtmp", cfg->stamp_utmp);
|
||||
write_setting_i(sesskey, "LoginShell", cfg->login_shell);
|
||||
close_settings_w(sesskey);
|
||||
}
|
||||
|
||||
@ -592,6 +594,8 @@ void load_settings(char *section, int do_host, Config * cfg)
|
||||
gppi(sesskey, "BugDeriveKey2", BUG_AUTO, &i); cfg->sshbug_derivekey2 = i;
|
||||
gppi(sesskey, "BugRSAPad2", BUG_AUTO, &i); cfg->sshbug_rsapad2 = i;
|
||||
gppi(sesskey, "BugDHGEx2", BUG_AUTO, &i); cfg->sshbug_dhgex2 = i;
|
||||
gppi(sesskey, "StampUtmp", 1, &cfg->stamp_utmp);
|
||||
gppi(sesskey, "LoginShell", 1, &cfg->login_shell);
|
||||
|
||||
close_settings_r(sesskey);
|
||||
}
|
||||
|
@ -1283,7 +1283,6 @@ char *get_x_display(void)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
extern int pty_master_fd; /* declared in pty.c */
|
||||
extern int pty_stamp_utmp; /* declared in pty.c */
|
||||
extern char **pty_argv; /* declared in pty.c */
|
||||
int err = 0;
|
||||
|
||||
@ -1331,7 +1330,10 @@ int main(int argc, char **argv)
|
||||
cfg.hide_mouseptr = 1;
|
||||
}
|
||||
if (!strcmp(p, "-ut-")) {
|
||||
pty_stamp_utmp = 0;
|
||||
cfg.stamp_utmp = 0;
|
||||
}
|
||||
if (!strcmp(p, "-ls-")) {
|
||||
cfg.login_shell = 0;
|
||||
}
|
||||
if (!strcmp(p, "-nethack")) {
|
||||
cfg.nethack_keypad = 1;
|
||||
|
20
unix/pty.c
20
unix/pty.c
@ -55,7 +55,6 @@
|
||||
#endif
|
||||
|
||||
int pty_master_fd;
|
||||
int pty_stamp_utmp = 1;
|
||||
static int pty_stamped_utmp = 0;
|
||||
static int pty_child_pid;
|
||||
static sig_atomic_t pty_child_dead;
|
||||
@ -82,7 +81,7 @@ static void setup_utmp(char *ttyname)
|
||||
char *location;
|
||||
FILE *wtmp;
|
||||
|
||||
if (!pty_stamp_utmp)
|
||||
if (!cfg.stamp_utmp)
|
||||
return;
|
||||
|
||||
pw = getpwuid(getuid());
|
||||
@ -130,7 +129,7 @@ static void cleanup_utmp(void)
|
||||
#ifndef OMIT_UTMP
|
||||
FILE *wtmp;
|
||||
|
||||
if (!pty_stamp_utmp || !pty_stamped_utmp)
|
||||
if (!cfg.stamp_utmp || !pty_stamped_utmp)
|
||||
return;
|
||||
|
||||
utmp_entry.ut_type = DEAD_PROCESS;
|
||||
@ -341,8 +340,19 @@ static char *pty_init(char *host, int port, char **realhost, int nodelay)
|
||||
}
|
||||
if (pty_argv)
|
||||
execvp(pty_argv[0], pty_argv);
|
||||
else
|
||||
execl(getenv("SHELL"), getenv("SHELL"), NULL);
|
||||
else {
|
||||
char *shell = getenv("SHELL");
|
||||
char *shellname;
|
||||
if (cfg.login_shell) {
|
||||
char *p = strrchr(shell, '/');
|
||||
shellname = smalloc(2+strlen(shell));
|
||||
p = p ? p+1 : shell;
|
||||
sprintf(shellname, "-%s", p);
|
||||
} else
|
||||
shellname = shell;
|
||||
execl(getenv("SHELL"), shellname, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* If we're here, exec has gone badly foom.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user