]> git.wh0rd.org - dump.git/blobdiff - rmt/rmt.c
Added version in usage text.
[dump.git] / rmt / rmt.c
index 74116b0a46e84f82a1a96ce321d5d766caf8a030..fc1a5d1acc01a2d10ab3c5e3c5b9a8d3eea8c3bc 100644 (file)
--- a/rmt/rmt.c
+++ b/rmt/rmt.c
@@ -1,8 +1,8 @@
 /*
  *     Ported to Linux's Second Extended File System as part of the
  *     dump and restore backup suit
- *     Remy Card <card@Linux.EU.Org>, 1994, 1995, 1996
- *
+ *     Remy Card <card@Linux.EU.Org>, 1994-1997
+ *     Stelian Pop <pop@cybercable.fr>, 1999 
  */
 
 /*
  */
 
 #ifndef lint
-static char copyright[] =
-"@(#) Copyright (c) 1983, 1993\n\
-       The Regents of the University of California.  All rights reserved.\n";
-#endif /* not lint */
-
-#ifndef lint
-static char sccsid[] = "@(#)rmt.c      8.1 (Berkeley) 6/6/93";
-#endif /* not lint */
+static const char rcsid[] =
+       "$Id: rmt.c,v 1.6 1999/10/13 09:57:22 stelian Exp $";
+#endif /* not linux */
 
 /*
  * rmt
@@ -62,6 +57,12 @@ static char sccsid[] = "@(#)rmt.c    8.1 (Berkeley) 6/6/93";
 #include <string.h>
 #include <unistd.h>
 
+#ifdef __linux__
+#include <linux/ext2_fs.h>
+#include <ext2fs/ext2fs.h>
+#include <bsdcompat.h>
+#endif
+
 int    tape = -1;
 
 char   *record;
@@ -69,7 +70,7 @@ int   maxrecsize = -1;
 
 #define        SSIZE   64
 char   device[SSIZE];
-char   count[SSIZE], mode[SSIZE], pos[SSIZE], op[SSIZE];
+char   count[SSIZE], filemode[SSIZE], pos[SSIZE], op[SSIZE];
 
 char   resp[BUFSIZ];
 
@@ -83,11 +84,9 @@ void  error __P((int));
 void    getstring __P((char *));
 
 int
-main(argc, argv)
-       int argc;
-       char **argv;
+main(int argc, char *argv[])
 {
-       int rval;
+       int rval = 0;
        char c;
        int n, i, cc;
 
@@ -109,9 +108,14 @@ top:
                if (tape >= 0)
                        (void) close(tape);
                getstring(device);
-               getstring(mode);
-               DEBUG2("rmtd: O %s %s\n", device, mode);
-               tape = open(device, atoi(mode));
+               getstring(filemode);
+               DEBUG2("rmtd: O %s %s\n", device, filemode);
+               /*
+                * XXX the rmt protocol does not provide a means to
+                * specify the permission bits; allow rw for everyone,
+                * as modified by the users umask
+                */
+               tape = open(device, atoi(filemode), 0666);
                if (tape < 0)
                        goto ioerror;
                goto respond;
@@ -188,6 +192,12 @@ top:
                  goto top;
                }
 
+        case 'V':               /* version */
+                getstring(op);
+                DEBUG1("rmtd: V %s\n", op);
+                rval = 2;
+                goto respond;
+
        default:
                DEBUG1("rmtd: garbage command %c\n", c);
                exit(3);
@@ -202,9 +212,7 @@ ioerror:
        goto top;
 }
 
-void
-getstring(bp)
-       char *bp;
+void getstring(char *bp)
 {
        int i;
        char *cp = bp;
@@ -219,9 +227,7 @@ getstring(bp)
 }
 
 char *
-checkbuf(record, size)
-       char *record;
-       int size;
+checkbuf(char *record, int size)
 {
 
        if (size <= maxrecsize)
@@ -241,11 +247,10 @@ checkbuf(record, size)
 }
 
 void
-error(num)
-       int num;
+error(int num)
 {
 
        DEBUG2("rmtd: E %d (%s)\n", num, strerror(num));
-       (void)sprintf(resp, "E%d\n%s\n", num, strerror(num));
+       (void)snprintf(resp, sizeof(resp), "E%d\n%s\n", num, strerror(num));
        (void)write(1, resp, strlen(resp));
 }