X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=common%2Fdumprmt.c;h=ba824f27d70593fef1917c75a12cc8ad9f2f5420;hp=eb61a55c9a4ced0db589b507249058fa887ca6b8;hb=HEAD;hpb=e1abc9ce25132eef1239047a071c2c1d4822dd9f diff --git a/common/dumprmt.c b/common/dumprmt.c index eb61a55..ba824f2 100644 --- a/common/dumprmt.c +++ b/common/dumprmt.c @@ -37,7 +37,7 @@ #ifndef lint static const char rcsid[] = - "$Id: dumprmt.c,v 1.27 2003/03/30 15:40:33 stelian Exp $"; + "$Id: dumprmt.c,v 1.30 2010/06/11 11:19:17 stelian Exp $"; #endif /* not lint */ #include @@ -114,6 +114,8 @@ int krcmd __P((char **, int /*u_short*/, char *, char *, int *, char *)); static int errfd = -1; extern int dokerberos; extern int ntrec; /* blocking factor on tape */ +extern int abortifconnerr; /* set to 1 if this lib should exit on connection errors + otherwise just print a message using msg */ #ifndef errno extern int errno; #endif @@ -152,8 +154,8 @@ rmtconnaborted(UNUSED(int signo)) } } } - - exit(X_ABORT); + if (abortifconnerr) + exit(X_ABORT); } static int @@ -174,20 +176,36 @@ rmtgetconn(void) if (!rsh && sp == NULL) { sp = getservbyname(dokerberos ? "kshell" : "shell", "tcp"); - if (sp == NULL) - errx(1, "%s/tcp: unknown service", - dokerberos ? "kshell" : "shell"); + if (sp == NULL) { + if (abortifconnerr) { + errx(1, "%s/tcp: unknown service", dokerberos ? "kshell" : "shell"); + } else { + msg("%s/tcp: unknown service", dokerberos ? "kshell" : "shell"); + return 0; + } + } } if (pwd == NULL) { pwd = getpwuid(getuid()); - if (pwd == NULL) - errx(1, "who are you?"); + if (pwd == NULL) { + if (abortifconnerr) { + errx(1, "who are you?"); + } else { + msg("who are you?"); + return 0; + } + } } if ((cp = strchr(rmtpeer, '@')) != NULL) { tuser = rmtpeer; *cp = '\0'; - if (!okname(tuser)) - exit(X_STARTUP); + if (!okname(tuser)) { + if (abortifconnerr) { + exit(X_STARTUP); + } else { + return 0; + } + } rmtpeer = ++cp; } else tuser = pwd->pw_name; @@ -305,9 +323,11 @@ rmtread(char *buf, size_t count) (void)snprintf(line, sizeof (line), "R%u\n", (unsigned)count); n = rmtcall("read", line); - if (n < 0) + if (n < 0) { /* rmtcall() properly sets errno for us on errors. */ - return (n); + errno = n; + return (-1); + } for (i = 0; i < n; i += cc) { cc = read(fromrmtape, buf+i, n - i); if (cc <= 0) @@ -322,8 +342,10 @@ rmtwrite(const char *buf, size_t count) char line[30]; (void)snprintf(line, sizeof (line), "W%ld\n", (long)count); - write(tormtape, line, strlen(line)); - write(tormtape, buf, count); + if (write(tormtape, line, strlen(line)) != strlen(line)) + return -1; + if (write(tormtape, buf, count) != count) + return -1; return (rmtreply("write")); }