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.
git-svn-id: svn://svn.tartarus.org/sgt/putty@2060
cda61777-01e9-0310-a592-
d414129be87e
} 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;
};
/*
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);
}
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);
}
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;
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;
#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;
char *location;
FILE *wtmp;
- if (!pty_stamp_utmp)
+ if (!cfg.stamp_utmp)
return;
pw = getpwuid(getuid());
#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;
}
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.
*/