Messages in this thread Patch in this message |  | | Date | Wed, 29 May 96 22:42 BST | From | (Alan Cox) | Subject | Diffs to .8 |
| |
diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/CREDITS linux/CREDITS --- linux.vanilla/CREDITS Tue May 28 21:51:06 1996 +++ linux/CREDITS Wed May 29 22:11:33 1996 @@ -306,6 +306,14 @@ S: Pittsburgh, Pennsylvania 15237-5829 S: USA +N: Eddie C. Dost +E: ecd@skynet.be +D: Linux/Sparc kernel hacker +D: New Linux/Sparc maintainer (while davem is at SGI) +S: Rue de la Chapelle 51 +S: 4850 Moresnet +S: Belgium + N: Thomas Dunbar E: tdunbar@vtaix.cc.vt.edu D: TeX & METAFONT hacking/maintenance @@ -875,6 +883,14 @@ S: RWTH-Aachen S: D-52056 Aachen S: Germany + +N: Nigel Metheringham +E: Nigel.Metheringham@ThePLAnet.net +D: IP Masquerading work and minor fixes +S: Planet Online +S: The White House, Melbourne Street, LEEDS +S: LS2 7PS, UK +P: 1024/31455639 B7 99 BD B8 00 17 BD 46 C1 15 B8 AB 87 BC 25 FA N: Craig Metz E: cmetz@tjhsst.edu diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/Documentation/Configure.help linux/Documentation/Configure.help --- linux.vanilla/Documentation/Configure.help Tue May 28 21:53:15 1996 +++ linux/Documentation/Configure.help Tue May 28 22:31:04 1996 @@ -267,7 +267,7 @@ of the chipset, and permits faster I/O speeds to be set as well. See the README.ide and ali14xx.c files for more info. -PROMISE DC4030 support (ALPHA) +PROMISE DC4030 support (EXPERIMENTAL) CONFIG_BLK_DEV_PROMISE This driver is enabled at runtime using the "ide0=dc4030" kernel boot parameter. It enables support for the secondary IDE interface @@ -866,14 +866,14 @@ packets it received. The information is handled by the klogd demon which is responsible for kernel messages ("man klogd"). -IP: transparent proxying (ALPHA) +IP: transparent proxying (EXPERIMENTAL) CONFIG_IP_TRANSPARENT_PROXY This enables you to redirect any network traffic to a local server, acting as a "transparent proxy server". Redirection is activated by defining special input firewall rules (using the ipfwadm utility) and/or by doing an appropriate bind() system call. -IP: masquerading (ALPHA) +IP: masquerading (EXPERIMENTAL) CONFIG_IP_MASQUERADE If one of the computers on your local network for which your Linux box acts as a firewall wants to send something to the outside, your @@ -888,14 +888,12 @@ even if they don't have officially registered IP addresses. (This last problem can also be solved by connecting the Linux box to the Internet using SLiRP [SLiRP is a SLIP/PPP emulator that works if you - have a regular dial up shell account on some UNIX computer; get if - via ftp (user: anonymous) from - sunsite.unc.edu:/pub/Linux/system/Network/serial/]). Details on how - to set things up are contained in the IP Masquerading FAQ, available - via ftp (user: anonymous) from ftp.eves.com:/pub/masq/. This is - ALPHA code, which means that it need not be completely stable; it - has nothing to do with the computer architecture of the same - name. If you want this, say Y. + have a regular dial up shell account on some UNIX computer; get it + from ftp://sunsite.unc.edu/pub/Linux/system/Network/serial/ + Details on how to set things up are contained in the + IP Masquerading FAQ, available at http://www.indyramp.com/masq/ + This is EXPERIMENTAL code, which means that it need not be completely + stable. If you want this, say Y. IP: always defragment CONFIG_IP_ALWAYS_DEFRAG @@ -909,7 +907,10 @@ have a more reliable firewall (otherwise second and further fragments will always be accepted by the firewall). When using transparent proxying (CONFIG_IP_TRANSPARENT_PROXY), this option is implicit, - although it is safe to say Y here. + although it is safe to say Y here. Do not say Y to this option except + when running either a firewall that is the sole link to your network or + a transparent proxy. Never ever say Y to this for a normal router or + host. IP: aliasing support CONFIG_IP_ALIAS @@ -1142,7 +1143,7 @@ sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini. The Bridging code is still in test. If unsure, say N. -Kernel/User network link driver(ALPHA) +Kernel/User network link driver (EXPERIMENTAL) CONFIG_NETLINK This driver allows for two-way communication between certain parts of the kernel or modules and user processes; the user processes are @@ -1150,8 +1151,7 @@ directory having major mode 36. So far, the kernel uses it to publish some network related information if you enable "Routing messages", below. Say Y if you want to experiment with it; this is - ALPHA code, which means that it need not be completely stable; it - has nothing to do with the computer architecture of the same name. + EXPERIMENTAL code, which means that it need not be completely stable. You need to include this if you want to use arpd, a daemon that helps keep the internal ARP cache (a mapping between IP addresses and hardware addresses on the local network) small. If unsure, say diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/MAINTAINERS linux/MAINTAINERS --- linux.vanilla/MAINTAINERS Tue May 28 21:53:18 1996 +++ linux/MAINTAINERS Wed May 29 22:11:33 1996 @@ -257,8 +257,8 @@ S: Maintained SPARC: -P: David S. Miller -M: davem@caip.rutgers.edu +P: Eddie C. Dost +M: ecd@skynet.be L: sparclinux@vger.rutgers.edu S: Maintained diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/Makefile linux/Makefile --- linux.vanilla/Makefile Tue May 28 21:50:56 1996 +++ linux/Makefile Wed May 29 22:16:35 1996 @@ -11,7 +11,7 @@ # # NOTE! SMP is experimental. See the file Documentation/SMP.txt # -# SMP = 1 +SMP = 1 # # SMP profiling options # SMP_PROF = 1 @@ -37,7 +37,7 @@ AR =$(CROSS_COMPILE)ar NM =$(CROSS_COMPILE)nm STRIP =$(CROSS_COMPILE)strip -MAKE =make +MAKE =make -j2 AWK =gawk all: do-it-all diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/README linux/README --- linux.vanilla/README Tue May 28 21:51:42 1996 +++ linux/README Tue May 28 22:35:11 1996 @@ -138,6 +138,11 @@ "make zlilo" if you have lilo installed to suit the kernel makefiles, but you may want to check your particular lilo setup first. + - if you configured any of the parts of the kernel as `modules', you + will have to do "make modules" followed by "make modules_install". + Read Documentation/modules.txt for more information. For example, + an explanation of how to use the modules is included there. + - keep a backup kernel handy in case something goes wrong. This is especially true for the development releases, since each new release contains new code which has not been debugged. diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/arch/i386/Makefile linux/arch/i386/Makefile --- linux.vanilla/arch/i386/Makefile Tue May 28 21:52:42 1996 +++ linux/arch/i386/Makefile Wed May 29 22:17:21 1996 @@ -122,6 +122,9 @@ install: vmlinux @$(MAKEBOOT) install +binstall: vmlinux + @$(MAKEBOOT) binstall + archclean: @$(MAKEBOOT) clean $(MAKE) -C arch/$(ARCH)/kernel clean diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/arch/i386/boot/Makefile linux/arch/i386/boot/Makefile --- linux.vanilla/arch/i386/boot/Makefile Tue May 28 21:52:41 1996 +++ linux/arch/i386/boot/Makefile Wed May 29 22:17:08 1996 @@ -53,6 +53,9 @@ install: $(CONFIGURE) zImage sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) zImage $(TOPDIR)/System.map "$(INSTALL_PATH)" +binstall: $(CONFIGURE) bzImage + sh ./binstall.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) bzImage $(TOPDIR)/System.map "$(INSTALL_PATH)" + tools/build: tools/build.c $(HOSTCC) $(HOSTCFLAGS) -o $@ $< -I$(TOPDIR)/include diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/arch/i386/boot/binstall.sh linux/arch/i386/boot/binstall.sh --- linux.vanilla/arch/i386/boot/binstall.sh Thu Jan 1 01:00:00 1970 +++ linux/arch/i386/boot/binstall.sh Wed May 29 22:17:08 1996 @@ -0,0 +1,39 @@ +#!/bin/sh +# +# arch/i386/boot/binstall.sh +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# +# Copyright (C) 1995 by Linus Torvalds +# +# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin +# +# "make binstall" script for i386 architecture +# +# Arguments: +# $1 - kernel version +# $2 - kernel image file +# $3 - kernel map file +# $4 - default install path (blank if root directory) +# + +# User may have a custom install script + +if [ -x /sbin/installbkernel ]; then exec /sbin/installbkernel "$@"; fi + +# Default install - same as make bzlilo + +if [ -f $4/vmlinuz ]; then + mv $4/vmlinuz $4/vmlinuz.old +fi + +if [ -f $4/System.map ]; then + mv $4/System.map $4/System.old +fi + +cat $2 > $4/vmlinuz +cp $3 $4/System.map + +if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/drivers/char/Config.in linux/drivers/char/Config.in --- linux.vanilla/drivers/char/Config.in Tue May 28 21:52:05 1996 +++ linux/drivers/char/Config.in Tue May 28 22:07:07 1996 @@ -14,13 +14,19 @@ fi tristate 'SDL RISCom/8 card support' CONFIG_RISCOM8 tristate 'Parallel printer support' CONFIG_PRINTER -tristate 'Logitech busmouse support' CONFIG_BUSMOUSE -tristate 'PS/2 mouse (aka "auxiliary device") support' CONFIG_PSMOUSE -if [ "$CONFIG_PSMOUSE" != "n" ]; then - bool 'C&T 82C710 mouse port support (as on TI Travelmate)' CONFIG_82C710_MOUSE + + +bool 'Bus Mouse Support' CONFIG_MOUSE +if [ "$CONFIG_MOUSE" = "y" ]; then + tristate 'ATIXL busmouse support' CONFIG_ATIXL_BUSMOUSE + tristate 'Logitech busmouse support' CONFIG_BUSMOUSE + tristate 'Microsoft busmouse support' CONFIG_MS_BUSMOUSE + tristate 'PS/2 mouse (aka "auxiliary device") support' CONFIG_PSMOUSE + if [ "$CONFIG_PSMOUSE" != "n" ]; then + bool 'C&T 82C710 mouse port support (as on TI Travelmate)' CONFIG_82C710_MOUSE + fi fi -tristate 'Microsoft busmouse support' CONFIG_MS_BUSMOUSE -tristate 'ATIXL busmouse support' CONFIG_ATIXL_BUSMOUSE + bool 'Support for user misc device modules' CONFIG_UMISC bool 'QIC-02 tape support' CONFIG_QIC02_TAPE diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/drivers/net/ppp.c linux/drivers/net/ppp.c --- linux.vanilla/drivers/net/ppp.c Tue May 28 21:51:43 1996 +++ linux/drivers/net/ppp.c Wed May 29 22:12:57 1996 @@ -6,7 +6,7 @@ * Dynamic PPP devices by Jim Freeman <jfree@caldera.com>. * ppp_tty_receive ``noisy-raise-bug'' fixed by Ove Ewerlid <ewerlid@syscon.uu.se> * - * ==FILEVERSION 960303== + * ==FILEVERSION 960528== * * NOTE TO MAINTAINERS: * If you modify this file at all, please set the number above to the diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/drivers/scsi/scsi.c linux/drivers/scsi/scsi.c --- linux.vanilla/drivers/scsi/scsi.c Tue May 28 21:52:12 1996 +++ linux/drivers/scsi/scsi.c Wed May 29 22:25:36 1996 @@ -1569,9 +1569,15 @@ case SUGGEST_IS_OK: break; case SUGGEST_REMAP: +#ifdef DEBUG + printk("SENSE SUGGEST REMAP - status = FINISHED\n"); +#endif + status = FINISHED; + exit = DRIVER_SENSE | SUGGEST_ABORT; + break; case SUGGEST_RETRY: #ifdef DEBUG - printk("SENSE SUGGEST REMAP or SUGGEST RETRY - status = MAYREDO\n"); + printk("SENSE SUGGEST RETRY - status = MAYREDO\n"); #endif status = MAYREDO; exit = DRIVER_SENSE | SUGGEST_RETRY; @@ -1606,6 +1612,9 @@ status = REDO; break; case SUGGEST_REMAP: + status = FINISHED; + exit = DRIVER_SENSE | SUGGEST_ABORT; + break; case SUGGEST_RETRY: status = MAYREDO; exit = DRIVER_SENSE | SUGGEST_RETRY; diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/drivers/scsi/scsi_ioctl.c linux/drivers/scsi/scsi_ioctl.c --- linux.vanilla/drivers/scsi/scsi_ioctl.c Tue May 28 21:52:13 1996 +++ linux/drivers/scsi/scsi_ioctl.c Wed May 29 22:26:10 1996 @@ -150,7 +150,7 @@ result = SCpnt->result; SCpnt->request.rq_status = RQ_INACTIVE; - if(SCpnt->device->scsi_request_fn) + if (!SCpnt->device->was_reset && SCpnt->device->scsi_request_fn) (*SCpnt->device->scsi_request_fn)(); wake_up(&SCpnt->device->device_wait); diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/fs/Config.in linux/fs/Config.in --- linux.vanilla/fs/Config.in Tue May 28 21:51:00 1996 +++ linux/fs/Config.in Tue May 28 22:26:08 1996 @@ -35,9 +35,11 @@ tristate 'ISO9660 cdrom filesystem support' CONFIG_ISO9660_FS tristate 'OS/2 HPFS filesystem support (read only)' CONFIG_HPFS_FS tristate 'System V and Coherent filesystem support' CONFIG_SYSV_FS -tristate 'Amiga FFS filesystem support (EXPERIMENTAL)' CONFIG_AFFS_FS -if [ "$CONFIG_AFFS_FS" = "y" -o "$CONFIG_AFFS_FS" = "m" ]; then - define_bool CONFIG_AMIGA_PARTITION y +if [ "$CONFIG_EXPERIMENTAL = "y" ]; then + tristate 'Amiga FFS filesystem support (EXPERIMENTAL)' CONFIG_AFFS_FS + if [ "$CONFIG_AFFS_FS" != "n" ]; then + define_bool CONFIG_AMIGA_PARTITION y + fi fi tristate 'UFS filesystem support (read only)' CONFIG_UFS_FS if [ "$CONFIG_UFS_FS" != "n" ]; then diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/fs/isofs/inode.c linux/fs/isofs/inode.c --- linux.vanilla/fs/isofs/inode.c Tue May 28 21:50:57 1996 +++ linux/fs/isofs/inode.c Wed May 29 22:20:21 1996 @@ -455,6 +455,17 @@ return (inode->u.isofs_i.i_first_extent >> ISOFS_BUFFER_BITS(inode)) + block; } + +static void test_and_set_uid(uid_t *p, uid_t value) +{ + if(value) { + *p = value; +#if 0 + printk("Resetting to %d\n", value); +#endif + } +} + void isofs_read_inode(struct inode * inode) { unsigned long bufsize = ISOFS_BUFFER_SIZE(inode); @@ -593,8 +604,11 @@ /* Now test for possible Rock Ridge extensions which will override some of these numbers in the inode structure. */ - if (!high_sierra) + if (!high_sierra) { parse_rock_ridge_inode(raw_inode, inode); + /* hmm..if we want uid or gid set, override the rock ridge setting */ + test_and_set_uid(&inode->i_uid, inode->i_sb->u.isofs_sb.s_uid); + } #ifdef DEBUG printk("Inode: %x extent: %x\n",inode->i_ino, inode->u.isofs_i.i_first_extent); diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/fs/nfs/dir.c linux/fs/nfs/dir.c --- linux.vanilla/fs/nfs/dir.c Tue May 28 21:50:57 1996 +++ linux/fs/nfs/dir.c Tue May 28 22:37:43 1996 @@ -450,7 +450,12 @@ error = nfs_proc_create(NFS_SERVER(dir), NFS_FH(dir), name, &sattr, &fhandle, &fattr); if (!error) + { nfs_lookup_cache_add(dir, name, &fhandle, &fattr); + /* The parent dir inode count may have changed ! */ + nfs_lookup_cache_remove( NULL, dir, NULL); + } + iput(dir); return error; } @@ -476,7 +481,12 @@ sattr.atime.seconds = sattr.mtime.seconds = (unsigned) -1; error = nfs_proc_mkdir(NFS_SERVER(dir), NFS_FH(dir), name, &sattr, &fhandle, &fattr); - if (!error) + if (!error && + /* Cope with NewsOS 4.1R Bug where News returns the attributes + of the parent not the newly created directory! + -- Dr Olaf Flebbe */ + (fattr.fileid != dir->i_ino) + ) nfs_lookup_cache_add(dir, name, &fhandle, &fattr); iput(dir); return error; diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/fs/nfs/nfsroot.c linux/fs/nfs/nfsroot.c --- linux.vanilla/fs/nfs/nfsroot.c Tue May 28 21:50:58 1996 +++ linux/fs/nfs/nfsroot.c Tue May 28 22:17:24 1996 @@ -1079,7 +1079,7 @@ sizeof(nfs_data.hostname)-1); /* Set the name of the directory to mount */ - if (nfs_path[0] == '\0' || !strncmp(name, "default", 7)) + if (nfs_path[0] == '\0' || strncmp(name, "default", 7)) strncpy(buf, name, NFS_MAXPATHLEN); else strncpy(buf, nfs_path, NFS_MAXPATHLEN); diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/include/linux/if_arp.h linux/include/linux/if_arp.h --- linux.vanilla/include/linux/if_arp.h Tue May 28 21:51:11 1996 +++ linux/include/linux/if_arp.h Tue May 28 21:58:33 1996 @@ -34,6 +34,7 @@ #define ARPHRD_ARCNET 7 /* ARCnet */ #define ARPHRD_APPLETLK 8 /* APPLEtalk */ #define ARPHRD_DLCI 15 /* Frame Relay DLCI */ +#define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id) */ /* Dummy types for non ARP hardware */ #define ARPHRD_SLIP 256 @@ -50,7 +51,6 @@ #define ARPHRD_SKIP 771 /* SKIP vif */ #define ARPHRD_LOOPBACK 772 /* Loopback device */ #define ARPHRD_LOCALTLK 773 /* Localtalk device */ -#define ARPHRD_METRICOM 774 /* Metricom STRIP */ /* ARP protocol opcodes. */ #define ARPOP_REQUEST 1 /* ARP request */ diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/appletalk/ddp.c linux/net/appletalk/ddp.c --- linux.vanilla/net/appletalk/ddp.c Tue May 28 21:51:28 1996 +++ linux/net/appletalk/ddp.c Tue May 28 22:49:59 1996 @@ -2024,6 +2024,7 @@ register_netdevice_notifier(&ddp_notifier); aarp_proto_init(); +#ifdef CONFIG_PROC_FS proc_net_register(&(struct proc_dir_entry) { PROC_NET_ATALK, 9, "appletalk", S_IFREG | S_IRUGO, 1, 0, 0, @@ -2042,6 +2043,7 @@ 0, &proc_net_inode_operations, atalk_if_get_info }); +#endif printk(KERN_INFO "Appletalk 0.17 for Linux NET3.035\n"); } @@ -2095,9 +2097,11 @@ aarp_cleanup_module(); +#ifdef CONFIG_PROC_FS proc_net_unregister(PROC_NET_ATALK); proc_net_unregister(PROC_NET_AT_ROUTE); proc_net_unregister(PROC_NET_ATIF); +#endif unregister_netdevice_notifier(&ddp_notifier); dev_remove_pack(<alk_packet_type); dev_remove_pack(&ppptalk_packet_type); diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ax25/af_ax25.c linux/net/ax25/af_ax25.c --- linux.vanilla/net/ax25/af_ax25.c Tue May 28 21:51:28 1996 +++ linux/net/ax25/af_ax25.c Tue May 28 22:49:04 1996 @@ -2395,7 +2395,7 @@ dev_add_pack(&bpq_packet_type); #endif register_netdevice_notifier(&ax25_dev_notifier); - +#ifdef CONFIG_PROC_FS proc_net_register(&(struct proc_dir_entry) { PROC_NET_AX25_ROUTE, 10, "ax25_route", S_IFREG | S_IRUGO, 1, 0, 0, @@ -2414,8 +2414,9 @@ 0, &proc_net_inode_operations, ax25_cs_get_info }); +#endif - printk(KERN_INFO "G4KLX/GW4PTS AX.25 for Linux. Version 0.32 BETA for Linux NET3.035 (Linux 2.0)\n"); + printk(KERN_INFO "G4KLX/GW4PTS AX.25 for Linux. Version 0.32 for Linux NET3.035 (Linux 2.0)\n"); #ifdef CONFIG_BPQETHER proc_net_register(&(struct proc_dir_entry) { diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/core/skbuff.c linux/net/core/skbuff.c --- linux.vanilla/net/core/skbuff.c Tue May 28 21:51:30 1996 +++ linux/net/core/skbuff.c Tue May 28 22:25:22 1996 @@ -833,7 +833,8 @@ void skb_device_lock(struct sk_buff *skb) { if(skb->lock) - printk("double lock on device queue!\n"); + printk("double lock on device queue, lock=%d caller=%p\n", + skb->lock, __builtin_return_address(0)); else net_locked++; skb->lock++; diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/Config.in linux/net/ipv4/Config.in --- linux.vanilla/net/ipv4/Config.in Tue May 28 21:51:32 1996 +++ linux/net/ipv4/Config.in Tue May 28 22:53:53 1996 @@ -8,8 +8,8 @@ if [ "$CONFIG_IP_FIREWALL" = "y" ]; then bool 'IP: firewall packet logging' CONFIG_IP_FIREWALL_VERBOSE if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then - bool 'IP: masquerading (ALPHA)' CONFIG_IP_MASQUERADE - bool 'IP: transparent proxy support (ALPHA)' CONFIG_IP_TRANSPARENT_PROXY + bool 'IP: masquerading (EXPERIMENTAL)' CONFIG_IP_MASQUERADE + bool 'IP: transparent proxy support (EXPERIMENTAL)' CONFIG_IP_TRANSPARENT_PROXY fi bool 'IP: always defragment' CONFIG_IP_ALWAYS_DEFRAG fi diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/Makefile linux/net/ipv4/Makefile --- linux.vanilla/net/ipv4/Makefile Tue May 28 21:51:31 1996 +++ linux/net/ipv4/Makefile Tue May 28 22:32:11 1996 @@ -40,7 +40,7 @@ ifeq ($(CONFIG_IP_MASQUERADE),y) IPV4_OBJS += ip_masq.o ip_masq_app.o -M_OBJS += ip_masq_ftp.o ip_masq_irc.o +M_OBJS += ip_masq_ftp.o ip_masq_irc.o ip_masq_raudio.o endif ifeq ($(CONFIG_IP_ALIAS),y) diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_fw.c linux/net/ipv4/ip_fw.c --- linux.vanilla/net/ipv4/ip_fw.c Tue May 28 21:51:31 1996 +++ linux/net/ipv4/ip_fw.c Wed May 29 22:26:54 1996 @@ -1047,6 +1047,7 @@ struct ip_fw *i; unsigned long flags; int len, p; + int last_len = 0; switch(stage) @@ -1104,14 +1105,18 @@ len=0; begin=pos; } + else if(pos>offset+length) + { + len = last_len; + break; + } else if(reset) { /* This needs to be done at this specific place! */ i->fw_pcnt=0L; i->fw_bcnt=0L; } - if(pos>offset+length) - break; + last_len = len; i=i->fw_next; } restore_flags(flags); @@ -1233,6 +1238,7 @@ void ip_fw_init(void) { +#ifdef CONFIG_PROC_FS #ifdef CONFIG_IP_ACCT proc_net_register(&(struct proc_dir_entry) { PROC_NET_IPACCT, 7, "ip_acct", @@ -1241,11 +1247,13 @@ ip_acct_procinfo }); #endif +#endif #ifdef CONFIG_IP_FIREWALL if(register_firewall(PF_INET,&ipfw_ops)<0) panic("Unable to register IP firewall.\n"); - + +#ifdef CONFIG_PROC_FS proc_net_register(&(struct proc_dir_entry) { PROC_NET_IPFWIN, 8, "ip_input", S_IFREG | S_IRUGO | S_IWUSR, 1, 0, 0, @@ -1265,7 +1273,7 @@ ip_fw_fwd_procinfo }); #endif - +#endif #ifdef CONFIG_IP_MASQUERADE /* diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_input.c linux/net/ipv4/ip_input.c --- linux.vanilla/net/ipv4/ip_input.c Tue May 28 21:51:32 1996 +++ linux/net/ipv4/ip_input.c Tue May 28 22:32:11 1996 @@ -529,25 +529,26 @@ } #endif + #ifdef CONFIG_IP_MASQUERADE - { /* * Do we need to de-masquerade this packet? */ - int ret = ip_fw_demasquerade(&skb,dev); - if (ret < 0) { - kfree_skb(skb, FREE_WRITE); - return 0; - } - - if (ret) { - struct iphdr *iph=skb->h.iph; - if (ip_forward(skb, dev, IPFWD_MASQUERADED, iph->daddr)) + int ret = ip_fw_demasquerade(&skb,dev); + if (ret < 0) { kfree_skb(skb, FREE_WRITE); - return 0; + return 0; + } + + if (ret) + { + struct iphdr *iph=skb->h.iph; + if (ip_forward(skb, dev, IPFWD_MASQUERADED, iph->daddr)) + kfree_skb(skb, FREE_WRITE); + return 0; + } } - } #endif /* diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_masq.c linux/net/ipv4/ip_masq.c --- linux.vanilla/net/ipv4/ip_masq.c Tue May 28 21:51:33 1996 +++ linux/net/ipv4/ip_masq.c Tue May 28 23:00:15 1996 @@ -12,10 +12,13 @@ * Juan Jose Ciarlante : Added hashed lookup by proto,maddr,mport and proto,saddr,sport * Juan Jose Ciarlante : Fixed deadlock if free ports get exhausted * Juan Jose Ciarlante : Added NO_ADDR status flag. - * Nigel Metheringham : ICMP handling. + * Nigel Metheringham : Added ICMP handling for demasquerade + * Nigel Metheringham : Checksum checking of masqueraded data + * * */ +#include <linux/config.h> #include <linux/module.h> #include <linux/types.h> #include <linux/kernel.h> @@ -26,6 +29,7 @@ #include <linux/proc_fs.h> #include <linux/in.h> #include <linux/ip.h> +#include <linux/inet.h> #include <net/protocol.h> #include <net/icmp.h> #include <net/tcp.h> @@ -458,6 +462,8 @@ /* * We can only masquerade protocols with ports... + * [TODO] + * We may need to consider masq-ing some ICMP related to masq-ed protocols */ if (iph->protocol!=IPPROTO_UDP && iph->protocol!=IPPROTO_TCP) @@ -575,8 +581,9 @@ struct iphdr *iph = skb->h.iph; struct icmphdr *icmph = (struct icmphdr *)((char *)iph + (iph->ihl<<2)); struct iphdr *ciph; /* The ip header contained within the ICMP */ - __u16 *portptr; /* port numbers from TCP/UDP contained header */ + __u16 *pptr; /* port numbers from TCP/UDP contained header */ struct ip_masq *ms; + unsigned short len = ntohs(iph->tot_len) - (iph->ihl * 4); #ifdef DEBUG_CONFIG_IP_MASQUERADE printk("Incoming ICMP (%d) %lX -> %lX\n", @@ -600,19 +607,27 @@ * Find the ports involved - remember this packet was * *outgoing* so the ports are reversed (and addresses) */ - portptr = (__u16 *)&(((char *)ciph)[ciph->ihl*4]); - if (ntohs(portptr[0]) < PORT_MASQ_BEGIN || - ntohs(portptr[0]) > PORT_MASQ_END) + pptr = (__u16 *)&(((char *)ciph)[ciph->ihl*4]); + if (ntohs(pptr[0]) < PORT_MASQ_BEGIN || + ntohs(pptr[0]) > PORT_MASQ_END) return 0; + /* Ensure the checksum is correct */ + if (ip_compute_csum((unsigned char *) icmph, len)) + { + /* Failed checksum! */ + printk(KERN_INFO "MASQ: ICMP: failed checksum from %s!\n", in_ntoa(iph->saddr)); + return(-1); + } + #ifdef DEBUG_CONFIG_IP_MASQUERADE printk("Handling ICMP for %lX:%X -> %lX:%X\n", - ntohl(ciph->saddr), ntohs(portptr[0]), - ntohl(ciph->daddr), ntohs(portptr[1])); + ntohl(ciph->saddr), ntohs(pptr[0]), + ntohl(ciph->daddr), ntohs(pptr[1])); #endif /* This is pretty much what ip_masq_in_get() does, except params are wrong way round */ - ms = ip_masq_in_get_2(ciph->protocol, ciph->daddr, portptr[1], ciph->saddr, portptr[0]); + ms = ip_masq_in_get_2(ciph->protocol, ciph->daddr, pptr[1], ciph->saddr, pptr[0]); if (ms == NULL) return 0; @@ -627,17 +642,16 @@ ip_send_check(ciph); /* the TCP/UDP source port - cannot redo check */ - portptr[0] = ms->sport; + pptr[0] = ms->sport; /* And finally the ICMP checksum */ icmph->checksum = 0; - icmph->checksum = ip_compute_csum((unsigned char *) icmph, - skb->len - sizeof(struct iphdr)); + icmph->checksum = ip_compute_csum((unsigned char *) icmph, len); #ifdef DEBUG_CONFIG_IP_MASQUERADE printk("Rewrote ICMP to %lX:%X -> %lX:%X\n", - ntohl(ciph->saddr), ntohs(portptr[0]), - ntohl(ciph->daddr), ntohs(portptr[1])); + ntohl(ciph->saddr), ntohs(pptr[0]), + ntohl(ciph->daddr), ntohs(pptr[1])); #endif return 1; @@ -659,30 +673,44 @@ struct iphdr *iph = skb->h.iph; __u16 *portptr; struct ip_masq *ms; - unsigned short frag; - - if (iph->protocol!=IPPROTO_UDP && iph->protocol!=IPPROTO_TCP - && iph->protocol!=IPPROTO_ICMP) - return 0; - - /* - * Toss fragments, since we handle them in ip_rcv() - */ + unsigned short len; - frag = ntohs(iph->frag_off); + switch (iph->protocol) { + case IPPROTO_ICMP: + return(ip_fw_demasq_icmp(skb_p, dev)); + case IPPROTO_TCP: + case IPPROTO_UDP: + /* Make sure packet is in the masq range */ + portptr = (__u16 *)&(((char *)iph)[iph->ihl*4]); + if (ntohs(portptr[1]) < PORT_MASQ_BEGIN || + ntohs(portptr[1]) > PORT_MASQ_END) + return 0; + /* Check that the checksum is OK */ + len = ntohs(iph->tot_len) - (iph->ihl * 4); + if ((iph->protocol == IPPROTO_UDP) && (portptr[3] == 0)) + /* No UDP checksum */ + break; - if ((frag & IP_MF) != 0 || (frag & IP_OFFSET) != 0) - { + switch (skb->ip_summed) + { + case CHECKSUM_NONE: + skb->csum = csum_partial((char *)portptr, len, 0); + case CHECKSUM_HW: + if (csum_tcpudp_magic(iph->saddr, iph->daddr, len, + iph->protocol, skb->csum)) + { + printk(KERN_INFO "MASQ: failed TCP/UDP checksum from %s!\n", + in_ntoa(iph->saddr)); + return -1; + } + default: + /* CHECKSUM_UNNECESSARY */ + } + break; + default: return 0; } - if (iph->protocol == IPPROTO_ICMP) - return ip_fw_demasq_icmp(skb_p, dev); - - portptr = (__u16 *)&(((char *)iph)[iph->ihl*4]); - if (ntohs(portptr[1]) < PORT_MASQ_BEGIN || - ntohs(portptr[1]) > PORT_MASQ_END) - return 0; #ifdef DEBUG_CONFIG_IP_MASQUERADE printk("Incoming %s %lX:%X -> %lX:%X\n", @@ -698,8 +726,6 @@ if (ms != NULL) { - int size; - /* * Set dport if not defined yet. */ @@ -720,7 +746,6 @@ ntohs(ms->daddr)); #endif } - size = skb->len - ((unsigned char *)portptr - skb->h.raw); iph->daddr = ms->saddr; portptr[1] = ms->sport; @@ -738,7 +763,7 @@ skb = *skb_p; iph = skb->h.iph; portptr = (__u16 *)&(((char *)iph)[iph->ihl*4]); - size = skb->len - ((unsigned char *)portptr-skb->h.raw); + len = ntohs(iph->tot_len) - (iph->ihl * 4); } /* @@ -750,7 +775,7 @@ */ if (iph->protocol==IPPROTO_UDP) { - recalc_check((struct udphdr *)portptr,iph->saddr,iph->daddr,size); + recalc_check((struct udphdr *)portptr,iph->saddr,iph->daddr,len); ip_masq_set_expire(ms, 0); ip_masq_set_expire(ms, ip_masq_expire->udp_timeout); } @@ -758,8 +783,8 @@ { struct tcphdr *th; skb->csum = csum_partial((void *)(((struct tcphdr *)portptr) + 1), - size - sizeof(struct tcphdr), 0); - tcp_send_check((struct tcphdr *)portptr,iph->saddr,iph->daddr,size,skb); + len - sizeof(struct tcphdr), 0); + tcp_send_check((struct tcphdr *)portptr,iph->saddr,iph->daddr,len,skb); /* Check if TCP RST */ th = (struct tcphdr *)portptr; if (th->rst) @@ -849,12 +874,14 @@ int ip_masq_init(void) { register_symtab (&ip_masq_syms); +#ifdef CONFIG_PROC_FS proc_net_register(&(struct proc_dir_entry) { PROC_NET_IPMSQHST, 13, "ip_masquerade", S_IFREG | S_IRUGO, 1, 0, 0, 0, &proc_net_inode_operations, ip_msqhst_procinfo }); +#endif ip_masq_app_init(); return 0; diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_masq_app.c linux/net/ipv4/ip_masq_app.c --- linux.vanilla/net/ipv4/ip_masq_app.c Tue May 28 21:51:33 1996 +++ linux/net/ipv4/ip_masq_app.c Tue May 28 23:00:26 1996 @@ -21,6 +21,7 @@ * */ +#include <linux/config.h> #include <linux/module.h> #include <linux/types.h> #include <linux/kernel.h> @@ -438,24 +439,25 @@ struct ip_masq_app * mapp; unsigned idx; - if (offset < 22) - len=sprintf(buffer,"%-21s\n", "prot port n_attach"); - pos = 22; + if (offset < 40) + len=sprintf(buffer,"%-39s\n", "prot port n_attach name"); + pos = 40; for (idx=0 ; idx < IP_MASQ_APP_TAB_SIZE; idx++) for (mapp = ip_masq_app_base[idx]; mapp ; mapp = mapp->next) { /* * If you change the length of this sprintf, then all * the length calculations need fixing too! - * Line length = 22 (3 + 2 + 7 + 1 + 7 + 1 + 1) + * Line length = 40 (3 + 2 + 7 + 1 + 7 + 1 + 2 + 17) */ - pos += 22; + pos += 40; if (pos < offset) continue; - len += sprintf(buffer+len, "%-3s %-7u %-7d \n", + len += sprintf(buffer+len, "%-3s %-7u %-7d %-17s\n", masq_proto_name(IP_MASQ_APP_PROTO(mapp->type)), - IP_MASQ_APP_PORT(mapp->type), mapp->n_attach); + IP_MASQ_APP_PORT(mapp->type), mapp->n_attach, + mapp->name); if(len >= length) goto done; @@ -478,14 +480,14 @@ { register_symtab (&ip_masq_app_syms); - +#ifdef CONFIG_PROC_FS proc_net_register(&(struct proc_dir_entry) { PROC_NET_IP_MASQ_APP, 11, "ip_masq_app", S_IFREG | S_IRUGO, 1, 0, 0, 0, &proc_net_inode_operations, ip_masq_app_getinfo }); - +#endif return 0; } diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_masq_raudio.c linux/net/ipv4/ip_masq_raudio.c --- linux.vanilla/net/ipv4/ip_masq_raudio.c Thu Jan 1 01:00:00 1970 +++ linux/net/ipv4/ip_masq_raudio.c Tue May 28 22:32:12 1996 @@ -0,0 +1,232 @@ +/* + * IP_MASQ_RAUDIO - Real Audio masquerading module + * + * + * Version: @(#)$Id: ip_masq_raudio.c,v 1.3 1996/05/20 13:24:26 nigel Exp $ + * + * Author: Nigel Metheringham + * [strongly based on ftp module by Juan Jose Ciarlante & Wouter Gadeyne] + * [Real Audio information taken from Progressive Networks firewall docs] + * + * + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + * + * Limitations + * The IP Masquerading proxies at present do not have access to a processed + * data stream. Hence for a protocol like the Real Audio control protocol, + * which depends on knowing where you are in the data stream, you either + * to keep a *lot* of state in your proxy, or you cheat and simplify the + * problem [needless to say I did the latter]. + * + * This proxy only handles data in the first packet. Everything else is + * passed transparently. This means it should work under all normal + * circumstances, but it could be fooled by new data formats or a + * malicious application! + * + * At present the "first packet" is defined as a packet starting with + * the protocol ID string - "PNA". + * When the link is up there appears to be enough control data + * crossing the control link to keep it open even if a long audio + * piece is playing. + * + */ + +#include <linux/module.h> +#include <asm/system.h> +#include <linux/types.h> +#include <linux/kernel.h> +#include <linux/skbuff.h> +#include <linux/in.h> +#include <linux/ip.h> +#include <net/protocol.h> +#include <net/tcp.h> +#include <net/ip_masq.h> + +#ifndef DEBUG_CONFIG_IP_MASQ_RAUDIO +#define DEBUG_CONFIG_IP_MASQ_RAUDIO 0 +#endif + +struct raudio_priv_data { + /* Associated data connection - setup but not used at present */ + struct ip_masq *data_conn; + /* Have we seen and performed setup */ + short seen_start; +}; + +static int +masq_raudio_init_1 (struct ip_masq_app *mapp, struct ip_masq *ms) +{ + MOD_INC_USE_COUNT; + if ((ms->app_data = kmalloc(sizeof(struct raudio_priv_data), + GFP_ATOMIC)) == NULL) + printk(KERN_INFO "RealAudio: No memory for application data\n"); + else + { + struct raudio_priv_data *priv = + (struct raudio_priv_data *)ms->app_data; + priv->seen_start = 0; + priv->data_conn = NULL; + } + return 0; +} + +static int +masq_raudio_done_1 (struct ip_masq_app *mapp, struct ip_masq *ms) +{ + MOD_DEC_USE_COUNT; + if (ms->app_data) + kfree_s(ms->app_data, sizeof(struct raudio_priv_data)); + return 0; +} + +int +masq_raudio_out (struct ip_masq_app *mapp, struct ip_masq *ms, struct sk_buff **skb_p, struct device *dev) +{ + struct sk_buff *skb; + struct iphdr *iph; + struct tcphdr *th; + char *p, *data, *data_limit; + struct ip_masq *n_ms; + unsigned short version, msg_id, msg_len, udp_port; + struct raudio_priv_data *priv = + (struct raudio_priv_data *)ms->app_data; + + /* Everything running correctly already */ + if (priv && priv->seen_start) + return 0; + + skb = *skb_p; + iph = skb->h.iph; + th = (struct tcphdr *)&(((char *)iph)[iph->ihl*4]); + data = (char *)&th[1]; + + data_limit = skb->h.raw + skb->len - 18; + + /* Check to see if this is the first packet with protocol ID */ + if (memcmp(data, "PNA", 3)) { +#if DEBUG_CONFIG_IP_MASQ_RAUDIO + printk("RealAudio: not initial protocol packet - ignored\n"); +#endif + return(0); + } + data += 3; + memcpy(&version, data, 2); + +#if DEBUG_CONFIG_IP_MASQ_RAUDIO + printk("RealAudio: initial seen - protocol version %d\n", + ntohs(version)); +#endif + if (priv) + priv->seen_start = 1; + + if (ntohs(version) >= 256) + { + printk(KERN_INFO "RealAudio: version (%d) not supported\n", + ntohs(version)); + return 0; + } + + data += 2; + while (data < data_limit) { + memcpy(&msg_id, data, 2); + data += 2; + memcpy(&msg_len, data, 2); + data += 2; +#if DEBUG_CONFIG_IP_MASQ_RAUDIO + printk("RealAudio: msg %d - %d byte\n", + ntohs(msg_id), ntohs(msg_len)); +#endif + p = data; + data += ntohs(msg_len); + if (data > data_limit) + { + printk(KERN_INFO "RealAudio: Packet too short for data\n"); + return 0; + } + if (ntohs(msg_id) == 1) { + /* This is a message detailing the UDP port to be used */ + memcpy(&udp_port, p, 2); + n_ms = ip_masq_new(dev, IPPROTO_UDP, + ms->saddr, udp_port, + ms->daddr, 0, + IP_MASQ_F_NO_DPORT); + + if (n_ms==NULL) + return 0; + + memcpy(p, &(n_ms->mport), 2); +#if DEBUG_CONFIG_IP_MASQ_RAUDIO + printk("RealAudio: rewrote UDP port %d -> %d\n", + ntohs(udp_port), ntohs(n_ms->mport)); +#endif + ip_masq_set_expire(n_ms, ip_masq_expire->udp_timeout); + + /* Make ref in application data to data connection */ + if (priv) + priv->data_conn = n_ms; + + /* + * There is nothing else useful we can do + * Maybe a development could do more, but for now + * we exit gracefully! + */ + return 0; + + } else if (ntohs(msg_id) == 0) + return 0; + } + return 0; +} + +struct ip_masq_app ip_masq_raudio = { + NULL, /* next */ + "RealAudio", /* name */ + 0, /* type */ + 0, /* n_attach */ + masq_raudio_init_1, /* ip_masq_init_1 */ + masq_raudio_done_1, /* ip_masq_done_1 */ + masq_raudio_out, /* pkt_out */ + NULL /* pkt_in */ +}; + +/* + * ip_masq_raudio initialization + */ + +int ip_masq_raudio_init(void) +{ + return register_ip_masq_app(&ip_masq_raudio, IPPROTO_TCP, 7070); +} + +/* + * ip_masq_raudio fin. + */ + +int ip_masq_raudio_done(void) +{ + return unregister_ip_masq_app(&ip_masq_raudio); +} + +#ifdef MODULE + +int init_module(void) +{ + if (ip_masq_raudio_init() != 0) + return -EIO; + register_symtab(0); + return 0; +} + +void cleanup_module(void) +{ + if (ip_masq_raudio_done() != 0) + printk("ip_masq_raudio: can't remove module"); +} + +#endif /* MODULE */ diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ip_output.c linux/net/ipv4/ip_output.c --- linux.vanilla/net/ipv4/ip_output.c Tue May 28 21:51:32 1996 +++ linux/net/ipv4/ip_output.c Tue May 28 22:48:06 1996 @@ -1115,12 +1115,14 @@ ip_udp_init();*/ #ifdef CONFIG_IP_MULTICAST +#ifdef CONFIG_PROC_FS proc_net_register(&(struct proc_dir_entry) { PROC_NET_IGMP, 4, "igmp", S_IFREG | S_IRUGO, 1, 0, 0, 0, &proc_net_inode_operations, ip_mc_procinfo }); +#endif #endif } diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipv4/ipmr.c linux/net/ipv4/ipmr.c --- linux.vanilla/net/ipv4/ipmr.c Tue May 28 21:51:32 1996 +++ linux/net/ipv4/ipmr.c Tue May 28 22:59:59 1996 @@ -24,6 +24,7 @@ * Resolve IFF_ALLMULTI for rest of cards */ +#include <linux/config.h> #include <asm/system.h> #include <asm/segment.h> #include <linux/types.h> @@ -910,6 +911,7 @@ { printk(KERN_INFO "Linux IP multicast router 0.05.\n"); register_netdevice_notifier(&ip_mr_notifier); +#ifdef CONFIG_PROC_FS proc_net_register(&(struct proc_dir_entry) { PROC_NET_IPMR_VIF, 9 ,"ip_mr_vif", S_IFREG | S_IRUGO, 1, 0, 0, @@ -922,4 +924,5 @@ 0, &proc_net_inode_operations, ipmr_mfc_info }); +#endif } diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/ipx/af_ipx.c linux/net/ipx/af_ipx.c --- linux.vanilla/net/ipx/af_ipx.c Tue May 28 21:51:38 1996 +++ linux/net/ipx/af_ipx.c Tue May 28 22:50:32 1996 @@ -757,7 +757,7 @@ } else { - printk(KERN_WARNING "IPX: Network number collision %lx\n\t%s %s and %s %s\n", + printk(KERN_WARNING "IPX: Network number collision %lx\n %s %s and %s %s\n", htonl(ipx->ipx_source.net), ipx_device_name(i), ipx_frame_name(i->if_dlink_type), @@ -2365,10 +2365,11 @@ printk(KERN_CRIT "IPX: Unable to register with SNAP\n"); register_netdevice_notifier(&ipx_dev_notifier); - +#ifdef CONFIG_PROC_FS proc_net_register(&ipx_procinfo); proc_net_register(&ipx_if_procinfo); proc_net_register(&ipx_rt_procinfo); +#endif printk(KERN_INFO "Swansea University Computer Society IPX 0.34 for NET3.035\n"); printk(KERN_INFO "IPX Portions Copyright (c) 1995 Caldera, Inc.\n"); @@ -2399,9 +2400,11 @@ ipxitf_down(ifc); } +#ifdef CONFIG_PROC_FS proc_net_unregister(PROC_NET_IPX_ROUTE); proc_net_unregister(PROC_NET_IPX_INTERFACE); proc_net_unregister(PROC_NET_IPX); +#endif unregister_netdevice_notifier(&ipx_dev_notifier); diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/net/netrom/af_netrom.c linux/net/netrom/af_netrom.c --- linux.vanilla/net/netrom/af_netrom.c Tue May 28 21:51:38 1996 +++ linux/net/netrom/af_netrom.c Tue May 28 22:49:21 1996 @@ -1418,6 +1418,7 @@ nr_default.window = NR_DEFAULT_WINDOW; nr_default.paclen = NR_DEFAULT_PACLEN; +#ifdef CONFIG_PROC_FS proc_net_register(&(struct proc_dir_entry) { PROC_NET_NR, 2, "nr", S_IFREG | S_IRUGO, 1, 0, 0, @@ -1436,6 +1437,7 @@ 0, &proc_net_inode_operations, nr_nodes_get_info }); +#endif } #endif diff --unified --new-file --recursive --exclude-from exclude linux.vanilla/scripts/Configure linux/scripts/Configure --- linux.vanilla/scripts/Configure Tue May 28 21:53:10 1996 +++ linux/scripts/Configure Tue May 28 22:02:43 1996 @@ -90,7 +90,7 @@ then echo; echo " Sorry, no help available for this option yet.";echo else - (echo; echo "$text"; echo) | more + (echo; echo "$text"; echo) | ${PAGER:-more} fi else echo;
|  |