X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=common%2Fdumprmt.c;h=129ce208c4c26d8ce9e82b5ec5a89f2caa1d9d60;hp=b56cc27c9659d41fe6ca7a77edfae223ef99fd3b;hb=88ac410d747e12ed2c1edd1ed0fdab994de71cf9;hpb=b80c25f88a480557d2985ffc0eabf0ca40d4b267 diff --git a/common/dumprmt.c b/common/dumprmt.c index b56cc27..129ce20 100644 --- a/common/dumprmt.c +++ b/common/dumprmt.c @@ -2,7 +2,8 @@ * 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 + * Stelian Pop - AlcĂ´ve , 2000-2002 */ /*- @@ -40,30 +41,30 @@ #ifndef lint static const char rcsid[] = - "$Id: dumprmt.c,v 1.9 2000/01/11 12:33:44 tiniou Exp $"; + "$Id: dumprmt.c,v 1.21 2002/05/21 15:48:46 stelian Exp $"; #endif /* not lint */ -#ifdef __linux__ -#include -#include -#endif +#include #include #include #include #include #ifdef __linux__ +#include +#ifdef HAVE_EXT2FS_EXT2_FS_H +#include +#else #include +#endif #include #include -#else -#ifdef sunos +#elif defined sunos #include #include #else #include #endif -#endif #include #include @@ -88,8 +89,8 @@ static const char rcsid[] = #include #endif -#include "pathnames.h" -#include "dump.h" +#include +#include "dump.h" /* for X_STARTUP, X_ABORT etc */ #define TS_CLOSED 0 #define TS_OPEN 1 @@ -160,8 +161,8 @@ rmtconnaborted(int signo) static int rmtgetconn(void) { - register char *cp; - register const char *rmt; + char *cp; + const char *rmt; static struct servent *sp = NULL; static struct passwd *pwd = NULL; const char *tuser; @@ -169,6 +170,7 @@ rmtgetconn(void) int size; int throughput; int on; + char *rmtpeercopy; rsh = getenv("RSH"); @@ -204,19 +206,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); @@ -247,8 +259,8 @@ rmtgetconn(void) static int okname(const char *cp0) { - register const char *cp; - register int c; + const char *cp; + int c; for (cp = cp0; *cp; cp++) { c = *cp; @@ -261,11 +273,11 @@ okname(const char *cp0) } int -rmtopen(const char *tape, int mode) +rmtopen(const char *tape, const char *mode) { char buf[MAXPATHLEN]; - (void)snprintf(buf, sizeof (buf), "O%s\n%d\n", tape, mode); + (void)snprintf(buf, sizeof (buf), "O%s\n%s\n", tape, mode); rmtstate = TS_OPEN; return (rmtcall(tape, buf)); } @@ -305,7 +317,7 @@ rmtwrite(const char *buf, size_t count) { char line[30]; - (void)snprintf(line, sizeof (line), "W%d\n", count); + (void)snprintf(line, sizeof (line), "W%ld\n", (long)count); write(tormtape, line, strlen(line)); write(tormtape, buf, count); return (rmtreply("write")); @@ -325,8 +337,8 @@ struct mtget mts; struct mtget * rmtstatus(void) { - register int i; - register char *cp; + int i; + char *cp; if (rmtstate != TS_OPEN) return (NULL); @@ -359,7 +371,7 @@ rmtcall(const char *cmd, const char *buf) static int rmtreply(const char *cmd) { - register char *cp; + char *cp; char code[30], emsg[BUFSIZ]; rmtgets(code, sizeof (code)); @@ -398,7 +410,7 @@ rmtgetb(void) static void rmtgets(char *line, size_t len) { - register char *cp = line; + char *cp = line; while (len > 1) { *cp = rmtgetb();