-->
   
                          HOW-TO FOR INHOUSE INTRANET
                                       
Author: Sarma Seetamraju
EMail: (sarma@usa.net)
Date: August 1997

  Place: on the Amtrack and Path Trains on the way to Downtown Manhattan.
  Notepad Used: a 16-Mhz 386 SX circa 1991 Magnavox notebook running linux.
  (Just to show that if you ever complain about linux not running AS IS
  on your computer, I am going to shove that computer up your .... )
  
    Reformatted as HTML for: All abnormal people who cannot stand illegible
    plain text.
    
 Important: SOCKS is a FREE package for UNIX systems. I doubt its available for
OTHER platforms. If you wish to influence NETSCAPE to keep supporting SOCKS,
email me with your supporting statement (saying how you are using SOCKS).

   
     _________________________________________________________________
   
   This document describes the procedure to set up a NETWORK (INTRANET)
   at your home. Then we shall setup up the network such that NETSCAPE
   Clients can be used on ANY machine to access the internet...
   
   The network we are talking about,
     * has TWO or more computers...
     * wherein, there is ONE (ONLY ONE) linux machine
     * and the rest are Win95 or WinNT machines. (I doubt things will be
       any different for a MACintosh).
     * Only the LINUX machine has PPP access to the internet. The other
       machines MAY have modems. I shall ignore those modems.
     * if ANY of your clients are UNIX machines, you are perhaps better
       off reading the "sockd" package's documentation, since you may be
       needing the use of "rlogin", "ftp" etc... from within the UNIX
       CLIENTS. This document will not help you in that aspect.
     * The computer network is assumed to be TCP/IP over ethernet. No
       netbeui, etc...
       
   _The "single linux" machine will be referred to as the "LINUX SYSTEM".
   while all others are referred to as "OTHER MACHINES" or also as
   "CLIENT MACHINES". The linux machine is also referrred to as the
   "SERVER" sometimes._
     _________________________________________________________________
   
   If you do not understand the next para, then jump to the FOR NETWORK
   NOVICES ONLY section. Then come back here...
   
   All of the following assumes that there is an IP address assigned
   (using "ifconfig") to the eth0 port of your LINUX server.
   
   Also, matter, this document does not restrict you to PPP only (it
   could be SLIP, PPTP, etc...) The IP address of the "ppp0" port is
   absolutely irrelevant. This document assumes you have one such port,
   and that its UP.
   
   
     _________________________________________________________________
   
   _WHY WE NEED SUCH AN ARRANGEMENT:_
     * The linux machine is to be used to connect to the world. Only the
       linux machine has a REAL-WORLD IP address. (see below). (see
       "ON-LINE services" section below). The linux machine has a
       non-persistent PPP link to the world.
     * The other machines in the network have IP addresses that are
       either invalid or are unknown to the world.
     * You need to use the "Other Machines", and NOT the linux machine to
       access the internet, VIA NETSCAPE ONLY.
     * I have no need to "telnet" or FTP directly from the "other m/c" to
       the world. If I ever need to, I telnet manually into the linux
       machine, and then into the world.
       
   I did NOT want to spend much on a linux m/c that didn't run an X
   server (much less any X applications). I bought a 486Dx/4 100 Mhz PCI
   board (since I didn't want to be stuck with plain ISA slots), with a
   $20 SVGA card and a $20 NE2000 compatible card, and an extra 20$ for
   terminators+co-ax ('cos I didn't know how to convert a regular
   Ethernet Hub connecter into a pt-2-pt connector).
   
   And $90 worth of memory (it went all the way to $60 for 16megs) and I
   had a fully functional linux system for $270. Don't intend to burden
   that system with NT or any other memory-disk-cpu hogging OSes.
   Ofcourse, my client machine is a 32-meg P100 machine with two hard
   disks (one of which was transplanted as a linux machine's HD) and runs
   95.
   
   The linux system is sitting on top of a clean PizzaHut pizza box. I
   couldn't affort another $50 for a tower, since I was getting a power
   supply module from one of my friends.
   
   
     _________________________________________________________________
   
   _The reason I chose NETSCAPE_ is that I no longer use FTP manually.
   Its simply, out of fashion. Every ftp site, worth its name and every
   company, has a web site that lets me use the Netscape browser to
   access their ftp site. I do need to telnet frequently, but go thru the
   trouble of going from my win95/winNT4.0 machine to the linux machine,
   and from there... Secondly, I am hooked to QuickTime and all those net
   audio sites. And LINUX versions of those tools, do not exist. So, I
   have to run stuff from Netscape ON windows platforms. And my LINUX
   machine recvs EMail using sendmail... (remember, I have a fixed IP
   address. Such fixed IP addresses are better ONLY for things like
   recving email. Its no benefit for Surfing, Telnetting, etc...)
   
   Lastly, we will never have a "Microsoft Explorer Browser" for linux,
   and hence I never even considered using Explorer. Also something tells
   me that its NOT going to be this easy to configure the Explorer as it
   was to configure the NETSCAPE on the CLIENT machines (i.e., the other
   machines).
     _________________________________________________________________
   
   
   
  PROXY SERVER
  
   
   
   I am not giving directions to installing a PROXY server. This is about
   installing a "socks" facility on the LINUX machine, which NETSCAPE on
   the client machines can use to access the internet. NETSCAPE (as far
   as I know) is the ONLY application that runs on NON-UNIX machines and
   is aware of the SOCKS facility.
     _________________________________________________________________
   
   
   
  INTERNET Addresses
  
   
   
   If you have a TCP/IP network, then you MUST have ATLEAST two IP
   addresses for the machines (one for the LINUX machine and another for
   the one of the Client Machines, and more IP addresses if you have more
   than one client machine).
   
   Read the other HOW-TOs on how to assign IP addresses to ALL your
   machines on the TCP/IP network. (ESPECIALLY IF YOU DO NOT have a
   REGISTERED internet domain).
   
   I created a network 10.0.1.x out of the single LINUX machine and the
   single Win95 machine. They were assigned 10.0.1.1 and 10.0.1.2
   respectively. The 10.0.1.1 is the IP address of the ETHERNET port
   (eth0) of the LINUX machine. The ppp0 port has another IP (which
   [lucky me] has a fixed IP address). That IP address is irrelevant to
   us, and also, being withheld for security reasons.
   
   I also have a fixed domain name server on the other end of the PPP
   link. (University machine).
   
   The linux machine has a modem and CRONTAB entries, that automatically
   dial up to the internet at fixed times daily. I also manually connect
   to the internet, when I want to go surfing.
   
   If you connect to the internet via ON-LINE services, see below...
     _________________________________________________________________
   
   
   
  ON-LINE services
  
   
   
   If you connect to the world using ON-LINE services like AOL,
   Compuserve, Sprynet, Netcom etc... then you may NOT have a fixed IP
   address. That is of little relevance in getting your intrAnet hooked
   up to the world. If you do not believe that, I request you to read
   on... and become a believer...
     _________________________________________________________________
   
   
   
  Some Background Information
  
   
   
   (For those who are like me and want to know what the hell is
   happening...). Others may skip this section....
    1. ... since you have ONLY one ethernet network, you do NOT need
       routing within that network. And you perhaps have manually
       hardcoded the IP addresses ( 10.0.1.1, 10.0.1.2 ) of ALL your
       machines in /etc/hosts. If you did that, you are smart person.
       Using "named" for a two or three computer network at home, is like
       using the bulldozer instead of a spoon to eat.
    2. What we would ideally like, is for ALL IP packets from the client
       machines to go to the LINUX machine, which will then route
       accordingly. Problem with this, you are exposing your computer to
       hackers because if the LINUX machine routes, you DO NOT have
       firewalling or proxy or whatever. Here in this document, we will
       do firewalling unintentionally! while trying to get NETSCAPE to
       access internet from the client machines.
       
       One problem with this "re-routing" desired from the linux machine,
       is that the clients MUST actually SEND ALL packets to the linux
       machine, no matter what the destination address. To that end,
       Win95 and WinNT will ONLY allow "proxy servers" (Which I intend to
       figure out, and write another document on).
    3. IF you are well versed with various free utils, you may have heard
       of "term" package. It was designed simply because its easier to
       configure networks being a "simple" user and NOT AS A ROOT/ADMIN
       (on both client and server sides). The same logic goes with
       NETSCAPE on the clients. It is easier to JUST GET the netscape to
       access the internet and leave the rest of the features (FTP,
       TELNET) unsupported.
    4. If you think, having ONLY netscape access and NOT telnet / ftp
       access to internet from the client machines, is a bummer, then you
       are a dinosaur. Wake Up, Mr./Ms. Rip Van Winkle.
    5. (TECHNICAL) The "named" which remained unused (as mentioned above)
       will be put to use to support NETSCAPE (so that http:/www.sex.org
       will be resolved right from the client machine).
    6. (TECHNICAL) You will have to REBUILD your LINUX kernel to disable
       IP forwarding. I intend to rebuild my kernel with forwarding
       ENABLED and see if the socks package still works (I am betting it
       will). If it does, then you will find a newer version of this
       document. (What this means, is that, you can use the kernel
       installed by your favorite LINUX installation package).
    7. You will need ROOT access on the linux machine :-) You will need
       to download the socks package and COMPILE it. It will NOT compile
       'cos the MAKE file is bad.
    8. (TECHNICAL) be prepared to edit the socks.c file, to comment out
       ONLY two lines which place an entry in your syslog file (/var/adm)
       for every data transfer via socks. For eg: a single page on
       WWW.CNN.COM will have 10 pictures atleast and 5 separate text
       objects. For each of them you will find an entry in syslog (that
       it was transferred!). My syslog keeps filling up. I do NOT like
       that. Maybe you might not mind.
    9. This sockd package supports CLIENT machines ONLY. All applications
       on the LINUX machine DO NOT need the sockd or any other package to
       access the internet, since this LINUX machine connects to internet
       directly using PPP.
       
   
     _________________________________________________________________
   
   
   
  PREPARING YOUR LINUX MACHINE
  
   
   
   Read the NET-HOW-TO in /usr/doc/faq/howto on your linux machine (if
   its slakware), or go to the www.linux.org and read the same NET-HOW-TO
   there...
   
   In that you will find how to down load the socks package and compile
   it. You NEED TO READ the instructions there to setup the in-house
   network. But you are welcome to read this :-) .
   
   That document spends a lot of time, explaining how to configure UNIX
   clients. Especially for "rlogin" "telnet" "ftp" etc... If you do not
   have UNIX clients, then after compiling the SOCKS package, start
   reading this document again, for using the socks package rather than
   the readme file in that package.
   
   I placed the tar file in /usr/local/ProxyServer and untarred it,
   creating a "sockd4.2b" subdirectory within which there is a
   "Makefile". As mentioned in the howto document, I had to struggle to
   successfully do a make on the MAKEFILE.
   
   
     _________________________________________________________________
   
   For your convenience, the MAKEFILE is included at end...
   
   Hopefully, you will have change line # 9 of my copy of the Makefile,
   only.
     _________________________________________________________________
   
   Then I moved the sockd directory contents into its parent and changed
   the line # 9 and did a make again -- successfully. So I guess I
   "fixed" the MAKEFILE.
     _________________________________________________________________
   
   
   
  Setting UP the sockd daemon
  
   
   
   You will find an executable called "sockd" in the sockd subdirectory.
   

Once you are done compiling, _COPY the following files to_ /usr/local/etc
(They SHOULD be in the same dir as the sockd directory)
        sockd                   (The executable a.k.a daemon)
        sockd.conf              (configuration file)
        sockd.route             (configuration file)
        socks.conf              (configuration file)

# ### make a link called "socks" which points to "sockd" within the same dir.
# cd /usr/local/etc
# ln -s sockd socks

   Then edit those three configuration files so that they are similar to
   the ones given below (these are my settings for a two computer
   network, made up of a LINUX "server" and a Win95/WinNT client
   machine).
     _________________________________________________________________
   
   
   
  My sockd.conf file
  
   


permit  10.0.1.2    0.0.0.0
deny    0.0.0.0 0.0.0.0 : /usr/ucb/finger @%A | /usr/ucb/mail -s 'SOCKD: reject
ed -- from %u@%A to host %Z (service %S)' root
#BAD_ID: /usr/ucb/finger @%A | /usr/ucb/mail -s '%U pretends to be %u on host %
A' root@%A root
#NO_IDENTD: /usr/ucb/mail -s 'Please run identd on %A' %u@%A root@%A
#[EOF]

   _NOTE_: 10.0.1.2 is my Win95/WinNT client machine's IP address. This
   sockd.conf file MUST be on your LINUX server (in my case that the
   ethernet port of the LINUX server has an IP address = 10.0.1.1)
   
   _NOTE_: This sockd program is for CLIENT machines ONLY. All
   applications on the LINUX machine DO NOT need the sockd or any other
   package to access the internet, since this LINUX machine connects to
   internet directly using PPP.
   
   
     _________________________________________________________________
   
   
   
  My sockd.route file
  
   

#! NoShell
10.0.1.1        10.0.1.0        255.255.255.0
#[EOF]

   _NOTE_: The first IP address is the address of the LINUX machine's
   eth0 PORT. The second IP number is NOT an IP address -- Its the
   NETWORK address (basically, convert the last of the FOUR numbers of
   the IP address into a ZERO).
     _________________________________________________________________
   
   
   
  My socks.conf file
  
   

direct  127.0.0.1       255.255.255.255
direct  10.0.1.1        255.255.255.255
direct  10.0.1.2        255.255.255.255
sockd   @=199.99.99.99  10.0.1.1 0.0.0.0

   
     _________________________________________________________________
   
   
     _________________________________________________________________
   
   
     _________________________________________________________________
   
   
   
  Now to configure the LINUX machine
  
   
     * _Step # 1:_ Check to see if "named" is already running in your
       system. If it is -- then, you are on your own. Unless you know the
       concepts of DNS very well, you may not be able to adapt the
       contents of this document to suit your needs.
     * _Step # 2:_ Copy the "named.boot" file given below into your
       machine.
     * _Step # 3_: copy the "root.cache" file given below into your
       machine (follow instructions that come with it).
       
   
     _________________________________________________________________
   
   
   
  /etc/host.conf file
  
   All programs that run on the LINUX machine WILL (you cannot prevent
   that) use the resolver libraries -- which depend on the file
   /etc/host.conf
   
   You must make sure that NONE of these programs ever access the "named"
   daemon on THAT VERY linux machine. To do that we shall specify to the
   resolver routines (i.e., routines which convert www.cnn.com into the
   numerical ip address) that those resolver routines MUST either check
   the /etc/hosts file and then check the DNS servers mentioned in
   /etc/resolv.conf
   
   How do we do that? Simply, make sure the /etc/host.conf file is :-
   

                order hosts, bind
                multi on

   If there is anything else, remove it, unless you know a lot about DNS
   and "named".
   
   The reason I insist on preventing the LINUX machine's applications
   from accessing its own "named" server, is because it makes no sense.
   And from my experience, such a "unnecessaries" may look technically
   safe and harmless but will cause enough grief sooner or later...
   
   The linux machine is obviously doing just great accessing the internet
   via the PPP (or whatever link) link. We are installing "sockd" package
   and the "named" daemon for the client machines. Let's not disturb the
   LINUX system.
     _________________________________________________________________
   
   You DO NOT NEED to change the "/etc/gateways" or "/etc/hosts" file or
   the "hosts.allow" or the "hosts.deny" file in order to get your socks
   working.
   
   Do not change any file unless someone suggests a change to that
   file...
   
   I will also assume that you have setup "resolv.conf" properly, to
   enable your LINUX server to access the internet and the DNS (on the
   "other end" of the PPP connection). My sample resolv.conf file is
   available as a sample at the very end.
   
_
                ***********************************************
                                WARNING
                ***********************************************
                For your own good, I suggest that you setup your
                machine through the linux installation programs
                (i.e., while installing linux on your computer.)
                ************************************************
_

   
     _________________________________________________________________
   
   
   
  My named.boot file
  
   

        ;    boot file for name server
        forwarders 128.112.129.111
        directory /etc
        cache      .       root.cache
        primary    1.0.10.in-addr.arpa   named_DNS_for_inTi_xwk
                                         ^^^^^^^^^^^^^^^^^^^^^^

   NOTE: line # 2, contains the IP address of the DNS server in the
   network to which your LINUX machine connects to using PPP(or
   whatever).
   
  *** How to determine this IP Address ****
  
   SIMPLE ! on a command prompt type in the command "nslookup". The
   response you see will CONTAIN such an IP address. (After noting the
   DNS' IP address, exist "nslookup" using <CTL-D>.
   
   _NOTE_: The LAST line contains the _name of a file_ called
   "named_DNS_for_inTi_xwk' which MUST be in the "/etc" directory. The
   contents of this file, is given below (you are free to give it a
   better name :-) )
     _________________________________________________________________
   
   
   
  My "named_DNS_for_inTi_xwk" file
  
   

@               IN      SOA     10.0.1.0 hostmaster.10.0.1.0 (
                                1       ; Serial
                                28800   ; Refresh
                                7200    ; Retry
                                604800  ; Expire
                                86400)  ; Minimum TTL
                        NS      10.0.1.1
1                       PTR     MyLinuxMachine

   _NOTE_: The last line (starts with a 1) contains the name
   "MyLinuxMachine". replace it with the name in /etc/HOSTNAME. _NOTE_:
   Again , as you have been doing so far, replace "10.0.1.1" with that of
   your LINUX machine eth0 port's address, and replace "10.0.1.0" with
   that of the network address of that port. _NOTE_: I really do not
   understand every character of the above file. You will be better off
   statisfying your curiousity by studying the documentation for the
   NAMED daemon.
     _________________________________________________________________
   
   
   
  My root.cache file
  
   
   
   _To get this file read the NET-HOW-TO documentation and the
   documentation that comes with the socks package.
   
   Those instructions are VERY simple...
   
   All I did was to run a command mentioned there, and redirected it into
   a file and called it "/etc/root.cache"
   
   _

; > DiG 2.1 > ns
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER


  __________________________________________________________________________





  Add this to /etc/services




(add the single line starting with "socks"...)

# services      This file describes the various services that are
#               available from the TCP/IP subsystem.  It should be
#               consulted instead of using the numbers in the ARPA
#               include files, or, worse, just guessing them.
# Version:      @(#)/etc/services       3.02    02/21/93
# Author:       Fred N. van Kempen,

... <lines delete>

socks           1080/tcp                        # sarma: Sep.15.96: Got this fr
om the ~sockd/include/socks.h file.

... <lines delete>

# End of services.



_NOTE_: This line is read ONLY by inetd daemon I think.  This tells the inetd t
o invoke the "socks" program for all tcp connections to the port # 1080.


  __________________________________________________________________________





  Add this to your /etc/inetd.conf file



        # I am just following instructions from ~sockd/doc/sockd.1 man pages...
        socks   stream  tcp     nowait  root    /usr/local/etc/socks


     * NOTE: Make sure /usr/local/etc is in the SYSTEMS's default PATH.
     * NOTE: For more instructions, read the SOCKD package's instruction
       file. In that this very same line is mentioned, and also you will
       get to know what it means...
     * NOTE: As the filename indicates, this file tells the "inetd"
       daemon where it can find the "socks" program, and what arguments
       to pass it (always) etc...
   

  __________________________________________________________________________



  __________________________________________________________________________



  __________________________________________________________________________





  LET'S GET STARTED !


Now reboot your system (if you know how, you may instead send HUP to the approp
riate daemons).  Your LINUX server is now set.



do a "tail -f /var/adm/messages"  and a "tail -f /var/adm/syslog" simultaneousl
y and attempt to connect using NETSCAPE from your CLIENT machines.



        Now let's configure the client machine's Netscape...


  __________________________________________________________________________





  Configuring NETSCAPE 3.0 Client


This is to be DONE on the client machines ONLY

DO NOT bother doing this on the LINUX server.



     * Pull down the menu called "options" in Netscape.
     * Choose "Network Preferences".
     * You MUST see a dialog box (new window) with "TABS" (layers)...
     * One of the "tabs" will be labelled "PROXIES"
     * Click on that layer/tab.
     * You will see a radio button labelled "manual proxy configuration"
       with a button beside.
     * CLick on that button to open up another dialog box.
     * The second last set of entry slots in that new window will show
       you...
   

        --------- --------------------------              --------
        | socks | |                        |              | 1080 |
        --------- --------------------------              --------


This shows that netscape is already aware of socks.  All you have to do is to t
ell NETSCAPE where the socks daemon is running.



Type in the _eth0 port IP address_ of the linux server in the _middle box_ show
n above...



Save this setting and get going... !!




  __________________________________________________________________________



  __________________________________________________________________________



  __________________________________________________________________________





  For Networking NOVICES


        If you have already used your Win95 or WinNT machines to connect to the
 internet via PPP, this documents is of absolutely NO help to you.  Anyways, wh
y bother using linux to connect to the internet when you can do so via the clie
nt machine's built-in PPP?



        If you haven't been able to connect to the internet via the LINUX serve
r, then stop reading this document and read the other HOW-TO documents to setup
 your LINUX machine to access the internet via the PPP link.



I hope you know the concept of IP addresses.  In short IP addresses have "mnemo
nics" formats (like www.cnn.com) as well as numeric versions like "198.20.186.4
".  If you type the former "www.cnn.com" someone must HELP your computer conver
t that name into the numerical format.



        Why the numerical format?  'cos, that numerical format encodes a very e
fficient system of telling each computer HOW to send out communication capsules
 to OTHER computers THAT IT WANTS TO communicate to.



        So, if you type in "www.cnn.com" on your NETSCAPE browser, then a UNIX
computer called a "DNS server" will convert that name into a number for your co
mputer.  Then your computer will use that numerical format of the IP address to
 actually CONNECT to www.cnn.com and show you their latest news.



So, the gist being that : to use the internet you need a DNS server.  This docu
ment includes instructions on setting up your computer to HOOK up to your NEIGH
BORHOOD DNS server.



Your LINUX machine MUST have ALL of the following :-
    1. A modem, through which you can connect to INTERNET *** DIRECTLY
       ***
    2. An ethernet card, to which you have the ethernet cable hooked up
       (the other ends of which you have your client machines hooked up
       to...)
    3. A Working PPP connection.
    4. A Valid DNS server information (use nslookup --- if that program
       retuns invalid values, stop reading this document. You WILL NOT be
       able to proceed...)
    5. Netscape 2.0 or later on your client machines.)
   
   The "modem" is technically referred to as the "ppp0 port" as far as
       this document is concerned.  By "port" I mean something similar to
       a "Sea-Port".  This modem or PPP port enables you to "explore the
       world" (go on a "vacation" from daily chores) :-)




The "ethernet card" is your "eth0" port.  That ethernet "port" lets you explore
 the ethernet network to which its connected.



Since your client machines are connected via the ethernet cable to the LINUX ma
chine, anything that your client machine communicates to the LINUX machine will
 ONLY REACH the linux machine VIA the "eth0" port.   ANything that the outside
world sends to your LINUX machine will ONLY REACH via the "ppp0 port".  So, its
 very important that these two ports be given "DIFFERENT ADDRESSES".



To make things easier for you, if you ALREADY successfully connected to the wor
ld using PPP, then, you have UNKNOWINGLY (or knowingly) assigned an IP numerica
l address to your linux machine's PPP port.




  __________________________________________________________________________





  The MAKEFILE for sockd compilation



        SHELL=/bin/bash
        #SOCKS=-DSOCKS
        # or
        SOCKS=-Dconnect=Rconnect -Dgetsockname=Rgetsockname -Dlisten=Rlisten -D
accept=Raccept -Drcmd=Rrcmd -Dbind=Rbind -Dselect=Rselect
        CFLAGS="$(SOCKS)"

        # If your system doesn't have PWD defined, define it here:
        PWD="/usr/local/ProxyServer/socks42b"
        # It should be this current directory.

        # If your system has getcwd() but no getwd(), uncomment the next line:
        #GETCWD=-DGETCWD

        # Define FASCIST if you want ftp (rftp) to log names of all files trans
ferred
        #FASCIST=-DFASCIST

        # Define RCMD and SUPPORT_RCMD if you want to support Rrcmd, which is r
equired
        # for SOCKSified rlogin, rsh, and rcp.
        RCMD=Rrcmd.o
        SUPPORT_RCMD=-DSUPPORT_RCMD

        # Define FOR_PS if your system is not SYSV and you want to have the
        # command 'ps' show some details of sockd's activity.
        FOR_PS=-DFOR_PS

        # Define SHORTENED_RBIND to make Rbind() take exactly the same
        # argument list as the regular bind(), i.e., without the additional
        # 'remhost' argument.
        SHORTENED_RBIND=-DSHORTENED_RBIND

        # optimization flag for cc
        #OPTIMIZE=-g
        OPTIMIZE=-O6 -fomit-frame-pointer -pipe -m486
        # Be careful with the OPTIMIZE flag. SunPro's SC2.0.1, for example, is
        # knwon to produce incorrect code when -O is used.

        # Directory into which to install the man pages
        MAN_DEST_DIR = /usr/local/man

        # Directory into which the SOCKS server should be installed
        SERVER_BIN_DIR = /usr/local/ProxyServer
        ## This was defalted to /usr/local/etc

        # Directory into the client programs should be installed
        CLIENTS_BIN_DIR = /usr/local/ProxyServer
        ## This was defaulted to /usr/local/bin

        # LINUX should use
        CC=gcc
        RANLIB=ranlib
        RESOLV_LIB=
        #OTHER_CFLAGS=-traditional -DLINUX  $(GETCWD) $(FASCIST) $(SHORTENED_RB
IND) -DCOMPAT
        OTHER_CFLAGS=-DLINUX  $(GETCWD) $(FASCIST) $(SHORTENED_RBIND) -DCOMPAT
        OS=linux
        INSTALL=install
        GETPASS=getpass.o

        # Remember to include -Dindex=strchr -Drindex=strrchr in OTHER_CFLAGS i
f
        # you don't have index() and rindex() (Sys-V camp)

        #



  __________________________________________________________________________





  The ppp-on script


NOTE: This script is being provided as a sample.  Having this sample is not a g
uarantee that you will have an internet connection.


        #!/bin/csh
        #
        #       ppp-on
        #
        #       Set up a PPP link
        
        set LOCKDIR=/var/spool/uucp
        set DEVICE=cua3
        
        set OUR_IP_ADDR=128.000.111.222
        
        if ( -f $LOCKDIR/LCK..$DEVICE ) then
            echo 'PPP device is locked'
            exit 1
        endif
        
        route del default
        # Just in case the Ethernetwork (In-House ethernet network) is up....
        #       if its NOT, then the above command is harmless...
        route ## To show that the above was successful...
        
        /usr/lib/ppp/fix-cua $DEVICE
        
            unalias pushd
            unalias popd
            pushd /usr/lib/ppp
            # stty 19200 -tostop
        
            # The original code has been commented out below...
            # if chat -l LCK..$DEVICE ABORT "NO CARRIER" ABORT BUSY "" ATZ OK A
Ts50=255s111=0DT$PHONE CONNECT "" ogin: $USER ssword: \\q$PASSWORD
            echo $cwd
            ls -l ./comserv.dip
            dip ./comserv.dip       ## I removed the -v (DEBUG&VERBOSE) option
to 'dip'.
            set dip_status=$status
            # echo the return value of dip is $dip_status
        
            if $dip_status == '0' then
                # Now please wait for 10 seconds, while the link is being auto-
verified by dip.
                echo 'About to fork-off pppd (after a delay of 10 secs)...'
                date
                echo 'If you see any error msgs below, then we are having SERIO
US problems...'
                sleep 10
                pppd -detach crtscts defaultroute domain remote.princeton.edu m
ru 1005 mtu 1005 $OUR_IP_ADDR{}: /dev/$DEVICE 38400 &
                ###### we dont need this for the previous line...     /dev/$DEV
ICE ) &
                #    The pppd deamon is FORKED OFF.  See the "&" at the END of
above line...
                # By using "locl" option, I am requesting that /var/spool/uucp
be the dir
                #    in which the LOCKS are created...
                echo 'Now wait another 10 seconds, before I auto-verify interne
t connection.'
                sleep 10
                cat ~root/@utils/.line
                ping -v -c 5 genius.eng.wayne.edu
                cat ~root/@utils/.line
                traceroute physics.iisc.ernet.in >&! /tmp/$$
                                                cat  /tmp/$$
                                                \rm -f /tmp/$$
                cat ~root/@utils/.line
                exit 0
            else
                echo 'PPP setup failed'
                exit 1
            endif
            popd
        # [EoF]



  __________________________________________________________________________





  The comserv.dip script to dial up PPP.




NOTE: This script is being provided as a sample.  Having this sample is not a g
uarantee that you will have an internet connection.  This script is called from
 the PPP-ON script given above...


        #******************************** comserv.dip *************************
*******
        #
        # Connection script for SLIP to ........
        # STATUS code for "dip" when it executes this script are:
        #  0 - all ok.
        #  1 - basic failures, in initializing the modem.
        #  2 - Failed in the crucial "dial" command.
        #  3 - Though DIAL command was successful, this script couldnt recogniz
e
        #      the VERY FIRST responses from the other modem. (i.e., Training o
ccured
        #      but, after that nothing happened that was intelligible to this s
cript.
        #  4 - Modems could nicely link up.  But remote server HAS CHANGED synt
ax.
        #      i.e., the strings output by the server, are assumed to arrive in
 a
        #      PARTICULAR sequence.  If server s/w has changed, then we have th
is
        #      problem.  SOLUTION!!!! Manually connect and note all the strings
 &
        #      all the sequence of interactions...  Then reprogram the script b
elow.
        # 10 - though dialing and connecting (modem-wise) is successful, ppp fa
iled.
        #######################################################################
#####
        main:
        redial:
          # Set the desired serial port and speed.
          port cua3
          speed 38400
          # term
          get $mtu 1005
          # Reset the modem and terminal line.
          reset
          # Without doing the above reset, nothing below will work!
          # Initialize the modem and dial comserv.
          # send ATQ0V1E1X4L1S0 0 \r
          # wait OK 5
          send ATZ\r
          wait OK 5
          if $errlvl != 0 goto error
          # send ATTQ0V1E1X4S0=0&C1\r
          # wait OK 5
          # if $errlvl != 0 goto error
          ## For Dial Tone use :- send AT&D2\r
          send AT&DP\r
          wait OK 5
          if $errlvl != 0 goto error
          # send ATS10=1\r
          # wait OK 5
          # if $errlvl != 0 goto error
          print if the line is busy, the dial command will realize that after 3
0 secs ONLY.
          dial 258-0000   30
          print Return value of DIAL is $errlvl
          if $errlvl == 1 goto Continue1
          if $errlvl == 3 goto busy
          print unknown error with DIAL command in "dip" script.
          quit 2 # unknown error with crucial DIAL command...
        busy:
          print telephone number is busy... Continue (1) or terminate (2)?
          get $input ask
          if $input == 1 goto redial
          print You have requested to cancel PPP.  Quitting...
          quit 10 # terminated...
        Continue1:
          # wait V32 30
          # wait CONNECT 10
          # if $errlvl != 0 print Couldn't detect a CONNECT
          # if $errlvl != 0 goto connect_fail
          # print CONNECT was detected...
          # We are connected.  Login to the system.
        login:
          sleep 3
          # send \r\r
          wait Username: 20
          if $errlvl != 0 goto error2
          send USERID\r
          wait Password: 5
          if $errlvl != 0 goto error2
          send __Password+_::\r\r
          wait comserv> 15
          # print Reached Comserv prompt...
          if $errlvl != 0 goto error2
        slipon:
          send ppp\r
          wait PPP_STARTED 25
          if $errlvl != 0 goto error2
          print CONNECTION completed...
          mode ppp
          exit 0
        error:
          print Total failure to interact with MODEM!!!
          quit 1 # basic failure in working with modem, etc...
        connect_fail:
          print Couldnt detect a "CONNECT 14400" kind of string after dial in..
.
          quit 3
        error2:
          print Modems could nicely link up.  But remote server HAS CHANGED syn
tax/ interaction sequence...
          quit 4 # basic failure in working with modem, etc...
        #=================================== EOF ==============================
=====