X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=common%2Fdumprmt.c;h=7f88f63a9fb95851eec469556015230170bde7ac;hp=d39e13432b2c9a4ca391ba9eb16c5839b544ebae;hb=35ed8cf887b00613ffa27f7259ef081830f447e2;hpb=c3f69f06e7c87a8e39d2bc02396fa3ba8db76e84 diff --git a/common/dumprmt.c b/common/dumprmt.c index d39e134..7f88f63 100644 --- a/common/dumprmt.c +++ b/common/dumprmt.c @@ -18,11 +18,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -41,7 +37,7 @@ #ifndef lint static const char rcsid[] = - "$Id: dumprmt.c,v 1.26 2003/03/26 10:58:22 stelian Exp $"; + "$Id: dumprmt.c,v 1.28 2003/10/26 16:05:45 stelian Exp $"; #endif /* not lint */ #include @@ -118,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 @@ -156,8 +154,8 @@ rmtconnaborted(UNUSED(int signo)) } } } - - exit(X_ABORT); + if (abortifconnerr) + exit(X_ABORT); } static int @@ -178,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; @@ -254,7 +268,7 @@ rmtgetconn(void) perror("TCP_NODELAY setsockopt"); fromrmtape = tormtape; } - (void)fprintf(stderr, "Connection to %s established.\n", rmtpeer); + (void)fprintf(stdout, "Connection to %s established.\n", rmtpeer); return 1; } @@ -309,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)