{
putty_signal(signum, SIG_DFL);
cleanup_utmp();
- setuid(getuid());
raise(signum);
}
#endif
int gid = getgid(), uid = getuid();
int setresgid(gid_t, gid_t, gid_t);
int setresuid(uid_t, uid_t, uid_t);
- setresgid(gid, gid, gid);
- setresuid(uid, uid, uid);
+ if (setresgid(gid, gid, gid) < 0) {
+ perror("setresgid");
+ exit(1);
+ }
+ if (setresuid(uid, uid, uid) < 0) {
+ perror("setresuid");
+ exit(1);
+ }
#else
- setgid(getgid());
- setuid(getuid());
+ if (setgid(getgid()) < 0) {
+ perror("setgid");
+ exit(1);
+ }
+ if (setuid(getuid()) < 0) {
+ perror("setuid");
+ exit(1);
+ }
#endif
}
}
* Stamp utmp (that is, tell the utmp helper process to do so),
* or not.
*/
- if (!conf_get_int(conf, CONF_stamp_utmp)) {
- close(pty_utmp_helper_pipe); /* just let the child process die */
- pty_utmp_helper_pipe = -1;
- } else if (pty_utmp_helper_pipe >= 0) {
- char *location = get_x_display(pty->frontend);
- int len = strlen(location)+1, pos = 0; /* +1 to include NUL */
- while (pos < len) {
- int ret = write(pty_utmp_helper_pipe, location+pos, len - pos);
- if (ret < 0) {
- perror("pterm: writing to utmp helper process");
- close(pty_utmp_helper_pipe); /* arrgh, just give up */
- pty_utmp_helper_pipe = -1;
- break;
- }
- pos += ret;
+ if (pty_utmp_helper_pipe >= 0) { /* if it's < 0, we can't anyway */
+ if (!conf_get_int(conf, CONF_stamp_utmp)) {
+ close(pty_utmp_helper_pipe); /* just let the child process die */
+ pty_utmp_helper_pipe = -1;
+ } else {
+ char *location = get_x_display(pty->frontend);
+ int len = strlen(location)+1, pos = 0; /* +1 to include NUL */
+ while (pos < len) {
+ int ret = write(pty_utmp_helper_pipe, location+pos, len - pos);
+ if (ret < 0) {
+ perror("pterm: writing to utmp helper process");
+ close(pty_utmp_helper_pipe); /* arrgh, just give up */
+ pty_utmp_helper_pipe = -1;
+ break;
+ }
+ pos += ret;
+ }
}
}
#endif