summaryrefslogtreecommitdiffstats
path: root/sbin/dump
diff options
context:
space:
mode:
authorwollman <wollman@FreeBSD.org>1997-04-29 17:46:27 +0000
committerwollman <wollman@FreeBSD.org>1997-04-29 17:46:27 +0000
commitd226ef144b03696dab14ff5d54530d5632e71d16 (patch)
treeebc627df80aa6100a7cf763ecac36982be183b46 /sbin/dump
parent939a1f6d87a9bbf63fbf92964aa5a4d35038aaac (diff)
downloadFreeBSD-src-d226ef144b03696dab14ff5d54530d5632e71d16.zip
FreeBSD-src-d226ef144b03696dab14ff5d54530d5632e71d16.tar.gz
Implement Kerberized rcmd for rdump/rrestore. This is lacking the
options one would normally expect to set the realm, enable encryption, and whatnot, but this actually is able to contact the remote server, so at least it's a start. (As a bonus, the stripped static binary is unquestionably exportable.)
Diffstat (limited to 'sbin/dump')
-rw-r--r--sbin/dump/Makefile7
-rw-r--r--sbin/dump/dump.89
-rw-r--r--sbin/dump/dumprmt.c20
-rw-r--r--sbin/dump/main.c25
4 files changed, 50 insertions, 11 deletions
diff --git a/sbin/dump/Makefile b/sbin/dump/Makefile
index 0912d8d..764a7d6 100644
--- a/sbin/dump/Makefile
+++ b/sbin/dump/Makefile
@@ -22,4 +22,11 @@ BINMODE=2555
MAN8= dump.8
MLINKS+=dump.8 rdump.8
+.if exists(${DESTDIR}/usr/lib/libkrb.a) && defined(MAKE_EBONES)
+.PATH: ${.CURDIR}/../../usr.bin/rlogin
+SRCS+= krcmd.c kcmd.c
+LDADD+= -lkrb -ldes
+CFLAGS+=-DKERBEROS
+.endif
+
.include <bsd.prog.mk>
diff --git a/sbin/dump/dump.8 b/sbin/dump/dump.8
index c7a5be8..b05d1da 100644
--- a/sbin/dump/dump.8
+++ b/sbin/dump/dump.8
@@ -31,7 +31,7 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)dump.8 8.3 (Berkeley) 5/1/95
-.\" $Id: dump.8,v 1.13 1997/03/11 12:09:31 peter Exp $
+.\" $Id: dump.8,v 1.14 1997/03/15 06:23:57 peter Exp $
.\"
.Dd May 1, 1995
.Dt DUMP 8
@@ -41,7 +41,7 @@
.Nd filesystem backup
.Sh SYNOPSIS
.Nm dump
-.Op Fl 0123456789acnu
+.Op Fl 0123456789acknu
.Op Fl B Ar records
.Op Fl b Ar blocksize
.Op Fl d Ar density
@@ -164,6 +164,11 @@ program is
.Pa /etc/rmt ;
this can be overridden by the environment variable
.Ev RMT .
+.It Fl k
+Use Kerberos authentication to talk to remote tape servers. (Only
+available if this option was enabled when
+.Nm dump
+was compiled.)
.It Fl n
Whenever
.Nm dump
diff --git a/sbin/dump/dumprmt.c b/sbin/dump/dumprmt.c
index 5959789..0be7866 100644
--- a/sbin/dump/dumprmt.c
+++ b/sbin/dump/dumprmt.c
@@ -83,9 +83,12 @@ static int rmtgetb __P((void));
static void rmtgetconn __P((void));
static void rmtgets __P((char *, int));
static int rmtreply __P((char *));
+#ifdef KERBEROS
+int krcmd __P((char **, int /*u_short*/, char *, char *, int *, char *));
+#endif
static int errfd = -1;
-
+extern int dokerberos;
extern int ntrec; /* blocking factor on tape */
int
@@ -147,9 +150,10 @@ rmtgetconn()
int throughput;
if (sp == NULL) {
- sp = getservbyname("shell", "tcp");
+ sp = getservbyname(dokerberos ? "kshell" : "shell", "tcp");
if (sp == NULL) {
- msg("shell/tcp: unknown service\n");
+ msg("%s/tcp: unknown service\n",
+ dokerberos ? "kshell" : "shell");
exit(X_ABORT);
}
pwd = getpwuid(getuid());
@@ -169,8 +173,14 @@ rmtgetconn()
if ((rmt = getenv("RMT")) == NULL)
rmt = _PATH_RMT;
msg("");
- rmtape = rcmd(&rmtpeer, (u_short)sp->s_port, pwd->pw_name, tuser,
- rmt, &errfd);
+#ifdef KERBEROS
+ if (dokerberos)
+ rmtape = krcmd(&rmtpeer, sp->s_port, tuser, rmt, &errfd,
+ (char *)0);
+ else
+#endif
+ rmtape = rcmd(&rmtpeer, (u_short)sp->s_port, pwd->pw_name,
+ tuser, rmt, &errfd);
if (rmtape < 0) {
msg("login to %s as %s failed.\n", rmtpeer, tuser);
return;
diff --git a/sbin/dump/main.c b/sbin/dump/main.c
index 5257efb..1b6553b 100644
--- a/sbin/dump/main.c
+++ b/sbin/dump/main.c
@@ -79,6 +79,7 @@ int tapeno = 0; /* current tape number */
int density = 0; /* density in bytes/0.1" " <- this is for hilit19 */
int ntrec = NTREC; /* # tape blocks in each tape record */
int cartridge = 0; /* Assume non-cartridge tape */
+int dokerberos = 0; /* Use Kerberos authentication */
long dev_bsize = 1; /* recalculated below */
long blocksperfile; /* output blocks per file */
char *host = NULL; /* remote host (if any) */
@@ -117,7 +118,13 @@ main(argc, argv)
usage();
obsolete(&argc, &argv);
- while ((ch = getopt(argc, argv, "0123456789aB:b:cd:f:h:ns:T:uWw")) != -1)
+#ifdef KERBEROS
+#define optstring "0123456789aB:b:cd:f:h:kns:T:uWw"
+#else
+#define optstring "0123456789aB:b:cd:f:h:ns:T:uWw"
+#endif
+ while ((ch = getopt(argc, argv, optstring)) != -1)
+#undef optstring
switch (ch) {
/* dump level */
case '0': case '1': case '2': case '3': case '4':
@@ -171,6 +178,12 @@ main(argc, argv)
honorlevel = numarg("honor level", 0L, 10L);
break;
+#ifdef KERBEROS
+ case 'k':
+ dokerberos = 1;
+ break;
+#endif
+
case 'n': /* notify operators */
notify = 1;
break;
@@ -481,9 +494,13 @@ main(argc, argv)
static void
usage()
{
-
- (void)fprintf(stderr, "usage: dump [-0123456789acnu] [-B records] [-b blocksize] [-d density] [-f file]\n [-h level] [-s feet] [-T date] filesystem\n");
- (void)fprintf(stderr, " dump [-W | -w]\n");
+ fprintf(stderr, "usage: dump [-0123456789ac"
+#ifdef KERBEROS
+ "k"
+#endif
+ "nu] [-B records] [-b blocksize] [-d density] [-f file]\n"
+ " [-h level] [-s feet] [-T date] filesystem\n"
+ " dump [-W | -w]\n");
exit(1);
}
OpenPOWER on IntegriCloud