Files
pkgsrc-ng/security/nfsbug/patches/patch-ab
T
2016-01-21 23:40:00 +01:00

482 lines
12 KiB
Plaintext

$NetBSD: patch-ab,v 1.4 2015/03/18 13:21:36 joerg Exp $
--- nfsshell.c.orig 2015-03-18 00:18:15.000000000 +0000
+++ nfsshell.c
@@ -1,3 +1,4 @@
+/* URL: http://www.asmodeus.com/archive/Xnix/nfsShell */
/*
* Copyright, 1991, 1992, by Leendert van Doorn (leendert@cs.vu.nl)
*
@@ -10,6 +11,7 @@
/*
* nfs - A shell that provides access to NFS file systems
*/
+#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
@@ -21,14 +23,47 @@
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/vnode.h>
-#include <sys/vfs.h>
+/* #include <sys/vfs.h> *//*HF*/
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/time.h>
-#include <ufs/inode.h>
+#include <ufs/ufs/dinode.h> /*HF: NetBSD*/
+/* #include <sys/fs/ufs_inode.h> *//*HF: Solaris*/
+#include <sys/filio.h>
#include "mount.h"
#include "nfs_prot.h"
+static void close_nfs(void);
+static void do_handle(int argc, char **argv);
+static void do_setid(int *var, int argc, char **argv);
+static void printfilestatus(char *name);
+static void do_cat(int argc, char **argv);
+static void do_chown(int argc, char **argv);
+static void do_chmod(int argc, char **argv);
+static void do_cd(int argc, char **argv);
+static void do_df(int argc, char **argv);
+static void do_dump(int argc, char **argv);
+static void do_export(int argc, char **argv);
+static void do_get(int argc, char **argv);
+static void do_help(int argc, char **argv);
+static void do_host(int argc, char **argv);
+static void do_ln(int argc, char **argv);
+static void do_ls(int argc, char **argv);
+static void do_mkdir(int argc, char **argv);
+static void do_mknod(int argc, char **argv);
+static void do_mount(int argc, char **argv);
+static void do_mv(int argc, char **argv);
+static void do_put(int argc, char **argv);
+static void do_rm(int argc, char **argv);
+static void do_rmdir(int argc, char **argv);
+static void do_status(int argc, char **argv);
+static void do_umount(int argc, char **argv);
+static void do_umountall(int argc, char **argv);
+int nfsbug_getline(char *buf, int bufsize, int *argc, char **argv, int argvsize);
+static AUTH * MYauthunix_create_default(int uid, int gid);
+static int determine_transfersize();
+
+
/*
* Fundamental constants
*/
@@ -128,13 +163,8 @@ jmp_buf intenv; /* where to go in inte
fhstatus *pmap_mnt();
-char *malloc();
-char *calloc();
-char *realloc();
char *strsave();
-char *strchr();
char *nfs_error();
-char *getenv();
void interrupt();
main(argc, argv)
@@ -164,7 +194,7 @@ main(argc, argv)
/* interpreter's main command loop */
if (setjmp(intenv)) putchar('\n');
- while (getline(buffer, BUFSIZ, &argcount, argvec, NARGVEC)) {
+ while (nfsbug_getline(buffer, BUFSIZ, &argcount, argvec, NARGVEC)) {
if (argcount == 0) continue;
if ((cmd = command(argvec[0])) == CMD_QUIT)
break;
@@ -277,15 +307,18 @@ interrupt()
* it up into an argument vector.
*/
int
-getline(buf, bufsize, argc, argv, argvsize)
+nfsbug_getline(buf, bufsize, argc, argv, argvsize)
char *buf, **argv;
int bufsize, *argc, argvsize;
{
register char *p;
if (interact) printf("nfs> ");
- if (fgets(buf, bufsize, stdin) == NULL)
+ if (fgets(buf, bufsize, stdin) == NULL){
+ perror("fgets");
+ fprintf(stderr,"EOF?!\n");
return 0;
+ }
*argc = 0;
for (p = buf; *p == ' ' || *p == '\t'; p++)
/* skip white spaces */;
@@ -320,9 +353,7 @@ command(cmd)
* Set remote host and initialize RPC channel
* to mount daemon.
*/
-do_host(argc, argv)
- int argc;
- char **argv;
+void do_host(int argc, char **argv)
{
if (argc != 2)
fprintf(stderr, "Usage: host <host>\n");
@@ -333,23 +364,19 @@ do_host(argc, argv)
/*
* Set user or group id (updating RPC authentication info)
*/
-do_setid(var, argc, argv)
- int *var, argc;
- char **argv;
+static void do_setid(int *var, int argc, char **argv)
{
*var = argc == 2 ? atoi(argv[1]) : -2;
if (nfsclient && nfsclient->cl_auth) {
auth_destroy(nfsclient->cl_auth);
- nfsclient->cl_auth = authunix_create_default(uid, gid);
+ nfsclient->cl_auth = MYauthunix_create_default(uid, gid);
}
}
/*
* Change remote working directory
*/
-do_cd(argc, argv)
- int argc;
- char **argv;
+void do_cd(int argc, char **argv)
{
register char *p;
char *component;
@@ -421,9 +448,7 @@ do_lcd(argc, argv)
/*
* Display a remote file
*/
-do_cat(argc, argv)
- int argc;
- char **argv;
+void do_cat(int argc, char **argv)
{
diropargs dargs;
diropres *dres;
@@ -476,9 +501,7 @@ do_cat(argc, argv)
/*
* List remote directory
*/
-do_ls(argc, argv)
- int argc;
- char **argv;
+void do_ls(int argc, char **argv)
{
char **table, **ptr, **p;
int lflag = 0;
@@ -509,8 +532,7 @@ do_ls(argc, argv)
/*
* Print long listing of a files, much in the way ``ls -l'' does
*/
-printfilestatus(name)
- char *name;
+void printfilestatus(char *name)
{
diropargs args;
diropres *res;
@@ -615,9 +637,7 @@ writefiledate(d)
/*
* Get remote files
*/
-do_get(argc, argv)
- int argc;
- char **argv;
+void do_get(int argc, char **argv)
{
char **table, **ptr, **p;
char answer[512];
@@ -698,9 +718,7 @@ do_get(argc, argv)
* Show file system information
*/
/* ARGUSED */
-do_df(argc, argv)
- int argc;
- char **argv;
+void do_df(int argc, char **argv)
{
statfsres *res;
@@ -734,9 +752,7 @@ do_df(argc, argv)
/*
* Delete a remote file
*/
-do_rm(argc, argv)
- int argc;
- char **argv;
+void do_rm(int argc, char **argv)
{
diropargs args;
nfsstat *res;
@@ -764,9 +780,7 @@ do_rm(argc, argv)
/*
* Link a file
*/
-do_ln(argc, argv)
- int argc;
- char **argv;
+void do_ln(int argc, char **argv)
{
diropargs dargs;
linkargs largs;
@@ -810,9 +824,7 @@ do_ln(argc, argv)
/*
* Move a file or directory
*/
-do_mv(argc, argv)
- int argc;
- char **argv;
+void do_mv(int argc, char **argv)
{
renameargs args;
nfsstat *res;
@@ -842,9 +854,7 @@ do_mv(argc, argv)
/*
* Make remote directory
*/
-do_mkdir(argc, argv)
- int argc;
- char **argv;
+void do_mkdir(int argc, char **argv)
{
createargs args;
diropres *res;
@@ -882,9 +892,7 @@ do_mkdir(argc, argv)
/*
* Remove remote directory
*/
-do_rmdir(argc, argv)
- int argc;
- char **argv;
+void do_rmdir(int argc, char **argv)
{
diropargs args;
nfsstat *res;
@@ -913,9 +921,7 @@ do_rmdir(argc, argv)
/*
* Change mode of remote file or directory
*/
-do_chmod(argc, argv)
- int argc;
- char **argv;
+void do_chmod(int argc, char **argv)
{
sattrargs aargs;
diropargs dargs;
@@ -970,9 +976,7 @@ do_chmod(argc, argv)
/*
* Change owner (and group) of remote file or directory
*/
-do_chown(argc, argv)
- int argc;
- char **argv;
+void do_chown(int argc, char **argv)
{
sattrargs aargs;
diropargs dargs;
@@ -1030,9 +1034,7 @@ do_chown(argc, argv)
/*
* Put file from local to remote
*/
-do_put(argc, argv)
- int argc;
- char **argv;
+void do_put(int argc, char **argv)
{
createargs cargs;
diropargs dargs;
@@ -1122,9 +1124,7 @@ do_put(argc, argv)
/*
* Get/set file handle
*/
-do_handle(argc, argv)
- int argc;
- char **argv;
+void do_handle(int argc, char **argv)
{
register char *p;
register int i;
@@ -1157,10 +1157,10 @@ do_handle(argc, argv)
if ((nfsclient = clntudp_create(&nfsserver_addr, NFS_PROGRAM,
NFS_VERSION, timeout, &sock)) == NULL) {
clnt_pcreateerror("nfs clntudp_create");
- return 0;
+ return;
}
clnt_control(nfsclient, CLSET_TIMEOUT, &timeout);
- nfsclient->cl_auth = authunix_create_default(uid, gid);
+ nfsclient->cl_auth = MYauthunix_create_default(uid, gid);
/* provide some generic name for it */
if ((mountpath = malloc(8 + 1)) == NULL) {
@@ -1183,9 +1183,7 @@ do_handle(argc, argv)
/*
* Create a character device
*/
-do_mknod(argc, argv)
- int argc;
- char **argv;
+void do_mknod(int argc, char **argv)
{
createargs cargs;
@@ -1235,7 +1233,7 @@ do_mroot(var, argc, argv)
*var = 0x00100000;
if (nfsclient && nfsclient->cl_auth) {
auth_destroy(nfsclient->cl_auth);
- nfsclient->cl_auth = authunix_create_default(uid, gid);
+ nfsclient->cl_auth = MYauthunix_create_default(uid, gid);
}
/*
* Put in some type of code here
@@ -1272,9 +1270,7 @@ xtoa(s)
* Set up a channel to the NFS server and
* mount remote file system.
*/
-do_mount(argc, argv)
- int argc;
- char **argv;
+void do_mount(int argc, char **argv)
{
char *host, *path;
int umount = 0, portmap = 0;
@@ -1313,9 +1309,7 @@ do_mount(argc, argv)
* RPC channel.
*/
/* ARGUSED */
-do_umount(argc, argv)
- int argc;
- char **argv;
+void do_umount(int argc, char **argv)
{
if (argc != 1) {
fprintf(stderr, "Usage: umount\n");
@@ -1331,9 +1325,7 @@ do_umount(argc, argv)
* Unmount all remote file system from this host
*/
/* ARGUSED */
-do_umountall(argc, argv)
- int argc;
- char **argv;
+void do_umountall(int argc, char **argv)
{
if (argc != 1) {
fprintf(stderr, "Usage: umountall\n");
@@ -1351,9 +1343,7 @@ do_umountall(argc, argv)
* Display all exported file systems on remote system
*/
/* ARGUSED */
-do_export(argc, argv)
- int argc;
- char **argv;
+void do_export(int argc, char **argv)
{
exports ex, *exp;
groups gr;
@@ -1389,9 +1379,7 @@ do_export(argc, argv)
* Display all remote mounted file systems
*/
/* ARGUSED */
-do_dump(argc, argv)
- int argc;
- char **argv;
+void do_dump(int argc, char **argv)
{
mountlist ml, *mlp;
@@ -1415,9 +1403,7 @@ do_dump(argc, argv)
* Generic status report
*/
/* ARGUSED */
-do_status(argc, argv)
- int argc;
- char **argv;
+void do_status(int argc, char **argv)
{
if (argc != 1) {
fprintf(stderr, "Usage: status\n");
@@ -1436,9 +1422,7 @@ do_status(argc, argv)
* Simple on-line help facility
*/
/* ARGUSED */
-do_help(argc, argv)
- int argc;
- char **argv;
+void do_help(int argc, char **argv)
{
register int i;
@@ -1493,7 +1477,7 @@ open_mount(host)
return 0;
}
clnt_control(mntclient, CLSET_TIMEOUT, &timeout);
- mntclient->cl_auth = authunix_create_default(0, 0);
+ mntclient->cl_auth = MYauthunix_create_default(0, 0);
if (verbose)
printf("Open %s (%s)\n",
remotehost, inet_ntoa(server_addr.sin_addr));
@@ -1540,7 +1524,7 @@ open_nfs(path, umount, portmap)
return 0;
}
clnt_control(nfsclient, CLSET_TIMEOUT, &timeout);
- nfsclient->cl_auth = authunix_create_default(uid, gid);
+ nfsclient->cl_auth = MYauthunix_create_default(uid, gid);
/*
* Get file handle for this path from the mount daemon. There
@@ -1634,7 +1618,7 @@ privileged()
return RPC_ANYSOCK;
for (;;) {
sin.sin_port = htons((u_short)lport);
- if (bind(s, (caddr_t)&sin, sizeof (sin), 0) >= 0) {
+ if (bind(s, (caddr_t)&sin, sizeof (sin)/*, 0*//*HF*/) >= 0) {
(void)ioctl(s, FIONBIO, (char *) &dontblock);
if (verbose)
fprintf(stderr, "Using a privileged port (%d)\n", lport);
@@ -1654,7 +1638,7 @@ privileged()
/*
* Close an NFS mounted file system
*/
-close_nfs()
+void close_nfs(void)
{
if (mountpath == NULL) return;
if (verbose) printf("Unmount `%s'\n", mountpath);
@@ -1672,14 +1656,13 @@ close_nfs()
* syscalls.
*/
AUTH *
-authunix_create_default(uid, gid)
- int uid, gid;
+MYauthunix_create_default(int uid, int gid)
{
char machname[MAX_MACHINE_NAME + 1];
int gids[1];
if (gethostname(machname, MAX_MACHINE_NAME) == -1) {
- fprintf(stderr, "authunix_create_default: cannot get hostname\n");
+ fprintf(stderr, "MYauthunix_create_default: cannot get hostname\n");
exit(1);
}
machname[MAX_MACHINE_NAME] = 0;
@@ -1858,8 +1841,7 @@ umatchpattern(s, p)
* NFS errors
*/
char *
-nfs_error(nfsstat)
- enum nfsstat nfsstat;
+nfs_error(enum nfsstat nfsstat)
{
switch (nfsstat) {
case NFS_OK:
@@ -1903,4 +1885,3 @@ nfs_error(nfsstat)
}
}
-
\ No newline at end of file