X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=common%2Fdumprmt.c;h=4f6b3c790e674f224362dd704e39be4631efdf2f;hp=5f53079c6ddb7131702af8d8a39a0b2275cb4fb4;hb=2c168f5fb53e1e1d3905bdd7fac64497e0ab3875;hpb=f34aca37d19fe46de9acb22249565dfb6491ab2f diff --git a/common/dumprmt.c b/common/dumprmt.c index 5f53079..4f6b3c7 100644 --- a/common/dumprmt.c +++ b/common/dumprmt.c @@ -2,7 +2,7 @@ * Ported to Linux's Second Extended File System as part of the * dump and restore backup suit * Remy Card , 1994-1997 - * Stelian Pop , 1999 + * Stelian Pop , 1999-2000 */ /*- @@ -40,7 +40,7 @@ #ifndef lint static const char rcsid[] = - "$Id: dumprmt.c,v 1.8 1999/11/02 09:35:56 tiniou Exp $"; + "$Id: dumprmt.c,v 1.12 2000/11/03 18:28:58 stelian Exp $"; #endif /* not lint */ #ifdef __linux__ @@ -169,6 +169,7 @@ rmtgetconn(void) int size; int throughput; int on; + char *rmtpeercopy; rsh = getenv("RSH"); @@ -204,19 +205,29 @@ rmtgetconn(void) rshcmd[4] = rmt; rshcmd[5] = NULL; + /* Restore the uid and gid. We really don't want + * to execute whatever is put into RSH variable with + * more priviledges than needed... */ + setuid(getuid()); + setgid(getgid()); + if ((rshpid = piped_child(rshcmd)) < 0) { msg("cannot open connection\n"); return 0; } } else { + /* Copy rmtpeer to rmtpeercopy to ignore the + return value from rcmd. I cannot figure if + this is this a bug in rcmd or in my code... */ + rmtpeercopy = (char *)rmtpeer; #ifdef KERBEROS if (dokerberos) - tormtape = krcmd((char **)&rmtpeer, sp->s_port, tuser, rmt, &errfd, + tormtape = krcmd(&rmtpeercopy, sp->s_port, tuser, rmt, &errfd, (char *)0); else #endif - tormtape = rcmd((char **)&rmtpeer, (u_short)sp->s_port, pwd->pw_name, + tormtape = rcmd(&rmtpeercopy, (u_short)sp->s_port, pwd->pw_name, tuser, rmt, &errfd); if (tormtape < 0) { msg("login to %s as %s failed.\n", rmtpeer, tuser); @@ -450,6 +461,7 @@ int piped_child(const char **command) { msg ("cannot dup2 pipe: %s\n", strerror(errno)); exit(1); } + setpgid(0, getpid()); execvp (command[0], (char *const *) command); msg("cannot exec %s: %s\n", command[0], strerror(errno)); exit(1);