diff options
-rw-r--r-- | docs/INSTALL.txt | 318 | ||||
-rw-r--r-- | docs/MIRRORS | 28 | ||||
-rw-r--r-- | docs/OS2.txt | 57 | ||||
-rw-r--r-- | docs/README.OS2 | 81 | ||||
-rw-r--r-- | docs/Warp.txt | 99 | ||||
-rw-r--r-- | docs/samba.faq | 398 | ||||
-rw-r--r-- | source3/loadparm.h | 160 | ||||
-rw-r--r-- | source3/params.h | 45 | ||||
-rw-r--r-- | source3/pcap.h | 35 | ||||
-rw-r--r-- | source3/reply.h | 60 | ||||
-rw-r--r-- | source3/smbpass.h | 50 | ||||
-rw-r--r-- | source3/sockspy.c | 302 |
12 files changed, 1633 insertions, 0 deletions
diff --git a/docs/INSTALL.txt b/docs/INSTALL.txt new file mode 100644 index 0000000000..b91367cd59 --- /dev/null +++ b/docs/INSTALL.txt @@ -0,0 +1,318 @@ +HOW TO INSTALL AND TEST SAMBA +============================= + + +STEP 0. Read the man pages. They contain lots of useful info that will +help to get you started. If you don't know how to read man pages then +try something like: + + nroff -man smbd.8 | more + +STEP 1. Building the binaries + +To do this, first edit the file source/Makefile. You will find that +the Makefile has an entry for most unixes and you need to uncomment +the one that matches your operating system. + +You should also edit the section at the top of the Makefile which +determines where things will be installed. You need to get this right +before compilation as Samba needs to find some things at runtime +(smbrun in particular). There are also settings for where you want +your log files etc. Make sure you get these right, and that the +directories exist. + +Then type "make". This will create the binaries. + +Once it's successfully compiled you can use "make install" to install +the binaries and manual pages. You can separately install the binaries +and/or man pages using "make installbin" and "make installman". + +Note that if you are upgrading for a previous version of Samba you +might like to know that the old versions of the binaries will be +renamed with a ".old" extension. You can go back to the previous +version with "make revert" if you find this version a disaster! + +STEP 2. The all important step + +At this stage you must fetch yourself a coffee or other drink you find +stimulating. Getting the rest of the install right can sometimes be +tricky, so you will probably need it. + +If you have installed samba before then you can skip this step. + +STEP 3. Create the smb configuration file. + +There are sample configuration files in the examples subdirectory in +the distribution. I suggest you read them carefully so you can see how +the options go together in practice. See the man page for all the +options. + +The simplest useful configuration file would be something like this: + +[homes] + workgroup = MYGROUP + guest ok = no + read only = no + +which would allow connections by anyone with an account on the server, +using either their login name or "homes" as the service name. (Note +that I also set the workgroup that Samba is part of. See BROWSING.txt +for defails) + +Note that "make install" will not install a smb.conf file. You need to +create it yourself. You will also need to create the path you specify +in the Makefile for the logs etc, such as /usr/local/samba. + +Make sure you put the smb.conf file in the same place you specified in +the Makefile. + +STEP 4. Test your config file with testparm + +It's important that you test the validity of your smb.conf file using +the testparm program. If testparm runs OK then it will list the loaded +services. If not it will give an error message. + +Make sure it runs OK and that the services look resonable before +proceeding. + +STEP 5. Starting the smbd and nmbd. + +You must choose to start smbd and nmbd either as daemons or from +inetd. Don't try to do both! Either you can put them in inetd.conf +and have them started on demand by inetd, or you can start them as +daemons either from the command line or in /etc/rc.local. See the man +pages for details on the command line options. + +The main advantage of starting smbd and nmbd as a daemon is that they +will respond slightly more quickly to an initial connection +request. This is, however, unlilkely to be a problem. + +Step 5a. Starting from inetd.conf + +NOTE; The following will be different if you use NIS or NIS+ to +distributed services maps. + +Look at your /etc/services. What is defined at port 139/tcp. If +nothing is defined then add a line like this: + +netbios-ssn 139/tcp + +similarly for 137/udp you should have an entry like: + +netbios-ns 137/udp + +Next edit your /etc/inetd.conf and add two lines something like this: + +netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd smbd +netbios-ns dgram udp wait root /usr/local/samba/bin/nmbd nmbd + +The exact syntax of /etc/inetd.conf varies between unixes. Look at the +other entries in inetd.conf for a guide. + +NOTE: Some unixes already have entries like netbios_ns (note the +underscore) in /etc/services. You must either edit /etc/services or +/etc/inetd.conf to make them consistant. + +NOTE: On many systems you may need to give the nmbd a -B parameter to +specify the broadcast address of your interface. Run ifconfig as root +if you don't know what the broadcast is for your net. nmbd tries to +determine it at run time, but fails on some unixes. See the section on +"testing nmbd" for a method of finding if you need to do this. + +!!!WARNING!!! Many unixes only accept around 5 parameters on the +command line in inetd. This means you shouldn't use spaces between the +options and arguments, or you should use a script, and start the +script from inetd. + +Restart inetd, perhaps just send it a HUP. If you have installed an +earlier version of nmbd then you may need to kill nmbd as well. + +Step 5b. Alternative: starting it as a daemon + +To start the server as a daemon you should create a script something +like this one, perhaps calling it "startsmb" + +#!/bin/sh +/usr/local/samba/bin/smbd -D +/usr/local/samba/bin/nmbd -D + +then make it executable with "chmod +x startsmb" + +You can then run startsmb by hand or execute it from /etc/rc.local + +To kill it send a kill signal to the processes nmbd and smbd. + + + +STEP 7. Try listing the shares available on your server + +smbclient -L yourhostname + +Your should get back a list of shares available on your server. If you +don't then something is incorrectly setup. Note that this method can +also be used to see what shares are available on other LanManager +clients (such as WfWg). + +If you choose user level security then you may find that Samba requests +a password before it will list the shares. See the smbclient docs for +details. (you can force it to list the shares without a password by +adding the option -U% to the command line. This will not work with +non-Samba servers) + +STEP 8. try connecting with the unix client. eg: + +smbclient '\\yourhostname\aservice' + +Typically the "yourhostname" would be the name of the host where you +installed smbd. The "aservice" is any service you have defined in the +smb.conf file. Try your user name if you just have a [homes] section +in smb.conf. + +For example if your unix host is bambi and your login name is fred you +would type: + +smbclient '\\bambi\fred' + +NOTE: The number of slashes to use depends on the type of shell you +use. You may need '\\\\bambi\\fred' with some shells. + +STEP 9. Try connecting from a dos/WfWg/Win95/NT/os-2 client. Try +mounting disks. eg: + +net use d: \\servername\service + +Try printing. eg: + +net use lpt1: \\servername\spoolservice +print filename + +Celebrate, or send me a bug report! + +WHAT IF IT DOESN'T WORK? +======================== + +If nothing works and you start to think "who wrote this pile of trash" +then I suggest you do step 2 again (and again) till you calm down. + +Then you might read the file DIAGNOSIS.txt and the FAQ. If you are +still stuck then try the mailing list or newsgroup (look in the README +for details). Samba has been successfully installed at thousands of +sites worldwide, so maybe someone else has hit your problem and has +overcome it. You could also use the WWW site to scan back issues of +the samba-digest. + +When you fix the problem PLEASE send me some updates to the +documentation (or source code) so that the next person will find it +easier. + +DIAGNOSING PROBLEMS +=================== + +If you have instalation problems then go to DIAGNOSIS.txt to try to +find the problem. + +SCOPE IDs +========= + +By default Samba uses a blank scope ID. This means all your windows +boxes must also have a blank scope ID. If you really want to use a +non-blank scope ID then you will need to use the -i <scope> option to +nmbd, smbd, and smbclient. All your PCs will need to have the same +setting for this to work. I do not recommend scope IDs. + + +CHOOSING THE PROTOCOL LEVEL +=========================== + +The SMB protocol has many dialects. Currently Samba supports 4, called +CORE, COREPLUS, LANMAN1, LANMAN2 and NT1. + +You can choose what protocols to support in the smb.conf file. The +default is NT1 and that is the best for the vast majority of sites. + +In older versions of Samba you may have found it necessary to use +COREPLUS. The limitations that led to this have mostly been fixed. It +is now less likely that you will want to use less than LANMAN1. The +only remaining advantage of COREPLUS is that for some obscure reason +WfWg preserves the case of passwords in this protocol, whereas under +LANMAN1, LANMAN2 or NT1 it uppercases all passwords before sending them, +forcing you to use the "password level=" option in some cases. + +The main advantage of LANMAN2 and NT1 is support for long filenames with some +clients (eg: smbclient, Windows NT or Win95). + +See the smb.conf manual page for more details. + +Note: To support print queue reporting you may find that you have to +use TCP/IP as the default protocol under WfWg. For some reason if you +leave Netbeui as the default it may break the print queue reporting on +some systems. It is presumably a WfWg bug. + + +PRINTING FROM UNIX TO A CLIENT PC +================================= + +To use a printer that is available via a smb-based server from a unix +host you will need to compile the smbclient program. You then need to +install the script "smbprint". Read the instruction in smbprint for +more details. + +There is also a SYSV style script that does much the same thing called +smbprint.sysv. It contains instructions. + + +LOCKING +======= + +One area which sometimes causes trouble is locking. + +There are two types of locking which need to be performed by a SMB +server. The first is "record locking" which allows a client to lock a +range of bytes in a open file. The second is the "deny modes" that are +specified when a file is open. + +Samba supports "record locking" using the fcntl() unix system +call. This is often implemented using rpc calls to a rpc.lockd process +running on the system that owns the filesystem. Unfortunately many +rpc.lockd implementations are very buggy, particularly when made to +talk to versions from other vendors. It is not uncommon for the +rpc.lockd to crash. + +There is also a problem translating the 32 bit lock requests generated +by PC clients to 31 bit requests supported by most +unixes. Unfortunately many PC applications (typically OLE2 +applications) use byte ranges with the top bit set as semaphore +sets. Samba attempts translation to support these types of +applications, and the translation has proved to be quite successful. + +Strictly a SMB server should check for locks before every read and +write call on a file. Unfortunately with the way fcntl() works this +can be slow and may overstress the rpc.lockd. It is also almost always +unnecessary as clients are supposed to independently make locking +calls before reads and writes anyway if locking is important to +them. By default Samba only makes locking calls when explicitly asked +to by a client, but if you set "strict locking = yes" then it will +make lock checking calls on every read and write. + +You can also disable by range locking completely using "locking = +no". This is useful for those shares that don't support locking or +don't need it (such as cdroms). In this case Samba fakes the return +codes of locking calls to tell clients that everything is OK. + +The second class of locking is the "deny modes". These are set by an +application when it opens a file to determine what types of access +should be allowed simultaneously with it's open. A client may ask for +DENY_NONE, DENY_READ, DENY_WRITE or DENY_ALL. There are also special +compatability modes called DENY_FCB and DENY_DOS. + +You can disable share modes using "share modes = no". This may be +useful on a heavily loaded server as the share modes code is very +slow. + + +MAPPING USERNAMES +================= + +If you have different usernames on the PCs and the unix server then +take a look at the "username map" option. See the smb.conf man page +for details. diff --git a/docs/MIRRORS b/docs/MIRRORS new file mode 100644 index 0000000000..9fa10c9fc8 --- /dev/null +++ b/docs/MIRRORS @@ -0,0 +1,28 @@ +The main Samba site is nimbus.anu.edu.au in pub/tridge/samba/. Contact +samba-bugs@anu.edu.au for help with this site. + +Mirror sites include: + + +ftp://src.doc.ic.ac.uk/packages/samba +ftp://ftp.warwick.ac.uk/pub/linux/sunsite.unc-mirror/system/Network/samba +ftp://sunsite.unc.edu/pub/Linux/system/Network/samba/ +ftp://ftp.choc.apana.org.au/pub/samba +ftp://ftp.uni-trier.de/pub/unix/network/samba/ +ftp://ftp.spectrum.titan.com/pub/samba +ftp://ftp.demon.co.uk/pub/unix/unix/samba +ftp://sunsite.mff.cuni.cz/Net/Protocols/Samba + +There are several others. Give archie a try. + +SCO binaries available from: +ftp://ftp.markv.com/pub/samba (built by lance@fox.com) + +AIX and DEC OSF/1 binaries are available from: +ftp://151.99.220.5/pub/samba (built by davide.migliavacca@inferentia.inet.it) + + +Http sites include: + +http://lake.canberra.edu.au/pub/samba +http://www.choc.apana.org.au/pub/samba diff --git a/docs/OS2.txt b/docs/OS2.txt new file mode 100644 index 0000000000..7d678a4bfb --- /dev/null +++ b/docs/OS2.txt @@ -0,0 +1,57 @@ +This describes how to use smbclient to connect to an OS/2 server. +Knowing this allows you to use a OS/2 printer from unix. + +Author: riiber@oslonett.no + + +How to login to an OS/2 server +------------------------------- + +Sample setup for OS/2 server running LanMan 2.2: + + OS/2 Server Name : \\OBV11 + OS/2 User Account : ARNE + OS/2 Password : xxx + OS/2 shared service 1 : LASER02 + OS/2 Shared service 2 : PCPROGS + Samba NetBIOS name : KLATREMUS + +First, the two servers were started with the commands +smbd and nmbd -n KLATREMUS. + +Command to connect to a the shared printer LASER02 on the OS/2 server: +n + smbclient '\\OBV11\LASER02' xxx -n ARNE -U ARNE -P + +and to connect to the shared drive 'PCPROGS': + + smbclient '\\OBV11\PCPROGS' xxx -n ARNE -U ARNE + + +If login to the OS/2 server fails: +---------------------------------- + +The remarkable OS/2 server requires NetBIOS name to be equal to User name. +This was the only combination of (NetBIOS name, User name) that allowed login. + +Password xxx must be in upper case, case in user name is unimportant. + +The OS/2 server responds with "Bad password - name/password pair" +if the password is illegal (in lowercase, for example). + +If correct user name and password, but invalid NetBIOS name is given, +it responds with "... SMBtcon failed. ERRDOS - 65". + +The OS/2 server can disable login from a list of workstations (PCs) +corresponding to the NetBIOS name (-n option). I set it up to +allow login from any workstation. + + + +(I experimented quite a lot with the -U and -n options, printed and browsed +the MS SMB protocol docs and the RFC's, then read some comp.protocols.smb, +got some tips, tried some "stupid" command line options, +and at last I got it working!) + +-Arne- + diff --git a/docs/README.OS2 b/docs/README.OS2 new file mode 100644 index 0000000000..ffd818d4ce --- /dev/null +++ b/docs/README.OS2 @@ -0,0 +1,81 @@ +Samba 1.9.15p8 for OS/2 : REQUIRES emx 0.9b. + + +Please read the file README, which contains general information about +the configuration and use of Samba. + + +Notes specific to OS/2 port: +============================ + +Filenames have been shortened to 8.3 in case anyone is using FAT. +Files affected are: +smb.conf -> smb.cfg smbclient -> smbclnt.exe +smbstatus -> smbstat.exe nmblookup -> nmblook.exe + +As I only use HPFS, I can't guarantee this will work on FAT systems, +although I have tried to stick to 8.3 filenames. I have noticed some +temporary files being created with long filenames by smbd when I tried +printing (which does not work yet anyway). nmbd will not be able to +create browse lists on FAT systems, as it uses temporary files with +long file names. + +smb.cfg should be in the directory smbd is started from. The path to +smb.cfg is a compile time option, so if you are compiling from source +you can set this to an absolute path to remove this restriction. + +User home directories not supported. This doesn't make much sense on +OS/2. I haven't actually disabled anything, so if you try setting +this up, behaivour is undefined. + +Password support is incomplete (I have found a crypt() routine, but +lack of passwd file support in the EMX libraries make support difficult +without major changes). + +Printing does not appear to be working. OS/2's lpq gives output in a +different format than the versions of lpq already supported by samba. +This will be easy to accomodate, but there is not much point until I can +get lpr working properly. + + + +Source is available from the Samba WWW site : + +http://lake.canberra.edu.au/pub/samba/ + +EMX 0.9b is available from hobbes.nmsu.edu, ftp.cdrom.com, ftp.leo.org and +other OS/2 FTP sites. emxrt.zip contains the required libraries. + +Bugs: +===== + +Known problems: +=============== + +Printing does not work. I have tried using REXX scripts with path info +built in, and watched the processes startup properly but nothing comes +out of the printer (remote via lpr in this case). +If you can get it going, please let me know how you did it. + +The output from OS/2's lpq.exe is not understood by smbd, so all querys +about the print queue say it is empty. Printing doesn't work anyway, +so I have not attempted to fix this yet. + +Temporary files are created with long filenames (when printing, and updating +browse list) + +Bug reports for the OS/2 port should be sent to Jason Rumney <jasonr@pec.co.nz>. + +Change log: +=========== + +Changes from release 1 to release 2. + +nmblookup (nmblook.exe) is included, and works. + +An attempt at password support was made using the gnuufc crypt routines, +but then I found that a lot of functions in the EMX libraries to do with +passwd files don't actually do anything. + +Browse lists should now work if you use HPFS and set your lock directory +to an absolute pathname. diff --git a/docs/Warp.txt b/docs/Warp.txt new file mode 100644 index 0000000000..9b8e6782ba --- /dev/null +++ b/docs/Warp.txt @@ -0,0 +1,99 @@ +Here is some advice from maxfield@ctelcom.uucp.netcom.com (Wade Maxfie +to use Samba with OS/2 Warp. + +Note that you may also find ftp://ftp.cdrom.com/pub/os2/new/os2net.faq +useful. + + + + Can I use Samba with Warp? + + Yes. The MSClient software at ftp.microsoft.com in the Bussys +(lanman os2 directory) will work, sort of. It is version 2.2c. + + First, uncloack os2ver. (attrib -h -r -s c:\os2ver). It is a +text file. change netwksta.xxx to 20=netwksta.sys. Also add +20=setup.exe. Another change will be needed, a .vdd file. I remember +it came up during the installation as being a wrong version. I wrote +the name down, changed os2ver to include it, and restarted the +installation. + + Here is a copy of my os2ver + +setup.exe +netbios.os2 +nwifs.ifs +netwksta.sys +nwreq.sys +netbios.sys +ipx.sys +netvdd.sys + +Re-cloak os2ver. (attrib +h +r +s c:\os2ver) + +Run the installation from an OS/2 Box. Note that your mouse wont work, +use the TAB key to move around, enter to select hilighted items. + +Here is a copy of my Config.sys file regarding the Laman entries. +Note even though the version is 2.2c, it reports 2.2a in the text. + +REM ==== LANMAN 2.2a == DO NOT MODIFY BETWEEN THESE LINES == LANMAN 2. +DEVICE=C:\LANMAN\DRIVERS\PROTMAN\PROTMAN.OS2 /i:C:\LANMAN +DEVICE=C:\LANMAN\DRIVERS\ETHERNET\Ns2000\Ns2000.OS2 +RUN=C:\LANMAN\DRIVERS\PROTOCOL\tcpip\starttcp.exe +RUN=C:\LANMAN\DRIVERS\PROTOCOL\tcpip\startnb.exe +DEVICE=C:\LANMAN\DRIVERS\PROTOCOL\tcpip\tcpdrv.os2 +DEVICE=C:\LANMAN\DRIVERS\PROTOCOL\tcpip\nbdrv.os2 +DEVICE=C:\LANMAN\DRIVERS\PROTOCOL\tcpip\nmdrv.os2 +DEVICE=C:\LANMAN\arpa\sockdrv.os2 +DEVICE=C:\LANMAN\DRIVERS\PROTOCOL\NETBEUI\NETBEUI.OS2 +DEVICE=C:\LANMAN\NETPROG\RDRHELP.SYS +IFS=C:\LANMAN\NETPROG\NETWKSTA.SYS /i:C:\LANMAN +DEVICE=C:\LANMAN\NETPROG\NETVDD.SYS +REM ==== LANMAN 2.2a == DO NOT MODIFY BETWEEN THESE LINES == LANMAN 2. + + + If you have an NE2000 card, don't reboot, or you'll be sorry. +enable the automatic backup mechanism for recovering old config.sys and +other files in OS/2. It paid for itself during this installation nightm +before I knew better!) + + Next, (or perhaps before this), if you have an NE2000 adaptor, +get the ns2000 files from hobbes.nmsu.edu (in ns2000.zip). I manually +patched protocol.ini to refer to that adaptor, and copied it into my +c:\lanman directory. Note that I also modified the driver to be loaded +in the config.sys to the ns2000.os2. It might install as an "other" +adaptor. + + A command file "startup.cmd" is placed in c:\. This file is +automatically run when OS/2 Warp starts. +Here is a copy of my startup file. Note that Warp sometimes fails to +login properly to the server. I solve this by checking for the +existance of a file, and rerunning the loing if that file fails to +exist. + +@REM ==== LANMAN 2.2a == DO NOT MODIFY BETWEEN THESE LINES == LANMAN +NET START WORKSTATION +:relogin +NET LOGON maxfield mypassword /y +rem net use f: \\packard90\d$ +rem net use g: \\linuxone\cdromsdir +rem net use h: \\linuxone\public +:doOver +if not exist f:\wildcat\wildcat.exe goto relogin +@REM ==== LANMAN 2.2a == DO NOT MODIFY BETWEEN THESE LINES == LANMAN +exit + + Finally, the system expects to be on a domain with a domain +server. BTW, TCP/IP and NetBeui allow simultaneous communication with +Os/2 lanserver 4.0, and Samba. (Note: Lanserver 4.0 won't yet to +TCP/IP. (Well,it might, but it crashes before I get to that point, so I +havent' been able to enable it)) + +I have not yet tried with only a SAMBA server on the domain. + + I would be glad to try to answer any questions at above e-mail +address, if I can. + +wade + diff --git a/docs/samba.faq b/docs/samba.faq new file mode 100644 index 0000000000..26570b7577 --- /dev/null +++ b/docs/samba.faq @@ -0,0 +1,398 @@ + + Frequently Asked Questions + + about the + + SAMBA Suite + + (FAQ version 1.9.02, Samba version 1.09.02) + +------------------------------------------------------------------------------- + +This FAQ was originally prepared by Karl Auer (Karl.Auer@anu.edu.au) and is +currently maintained by Paul Blackman (ictinus@lake.canberra.edu.au). + +As Karl originally said, 'this FAQ was prepared with lots of help from numerous +net.helpers', and that's the way I'd like to keep it. So if you find anything +that you think should be in here don't hesitate to contact me. + +Thanks to Karl for the work he's done, and continuing thanks to Andrew Tridgell +for developing Samba. + +Note: This FAQ is (and probably always will be) under construction. Some +sections exist only as optimistic entries in the Contents page. + +------------------------------------------------------------------------------- + +Contents + + * SECTION ONE: General information + All about Samba - what it is, how to get it, related sources of + information. + * SECTION TWO: Compiling and installing Samba on a Unix host + Common problems that arise when building and installing Samba under + Unix. + * SECTION THREE: Common client problems + Common problems that arise when trying to communicate from a client + computer to a Samba server. All problems which have symptoms you see + at the client end will be in this section. + * SECTION FOUR: Specific client problems + This section covers problems that are specific to certain clients, + such as Windows for Workgroups or Windows NT. Please check Section + Three first! + * SECTION FIVE: Specific client application problems + This section covers problems that are specific to certain products, + such as Windows for Workgroups or Windows NT. Please check Sections + Three and Four first! + * SECTION SIX: Miscellaneous + All the questions that aren't classifiable into any other section. + + +=============================================================================== +SECTION ONE: General information +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 1: What is Samba? + +Samba is a suite of programs which work together to allow clients to access +Unix filespace and printers via the SMB (Session Message Block) protocol. + +In practice, this means that you can redirect disks and printers to Unix disks +and printers from Lan Manager clients, Windows for Workgroups 3.11 clients, +Windows NT clients and OS/2 clients. There is also a Unix client program +supplied as part of the suite which allows Unix users to use an ftp-like +interface to access filespace and printers on any other SMB servers. + +The components of the suite are (in summary): + + * smbd, the SMB server. This handles actual connections from clients + * nmbd, the Netbios name server, which helps clients locate servers + * smbclient, the Unix-hosted client program + * smbrun, a little 'glue' program to help the server run external + programs + * testprns, a program to test server access to printers + * testparms, a program to test the Samba configuration file for + correctness + * smb.conf, the Samba configuration file + * smbprint, a sample script to allow a Unix host to use smbclient to + print to an SMB server + +The suite is supplied with full source (of course!) and is GPLed. + +The primary creator of the Samba suite is Andrew Tridgell. Later versions +incorporate much effort by many net.helpers. The man pages and this FAQ were +written by Karl Auer. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 2: What is the current version of Samba? + +At time of writing, the current version was 1.9.12. If you want to be sure +check the bottom of the change-log file. +(nimbus.anu.edu.au/pub/tridge/samba/change-log) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 3: Where can I get it? + +The Samba suite is available via anonymous ftp from nimbus.anu.edu.au. The +latest and greatest versions of the suite are in the directory: + +/pub/tridge/samba/ + +Development (read "alpha") versions, which are NOT necessarily stable and which +do NOT necessarily have accurate documentation, are available in the directory: + +/pub/tridge/samba/alpha + +Note that binaries are NOT included in any of the above. Samba is distributed +ONLY in source form, though binaries may be available from other sites. Recent +versions of some Linux distributions, for example, do contain Samba binaries +for that platform. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 4: What platforms are supported? + +Many different platforms have run Samba successfully. The platforms most widely +used and thus best tested are Linux and SunOS. + +At time of writing, the Makefile claimed support for: + + * SunOS + * Linux with shadow passwords + * Linux without shadow passwords + * SOLARIS + * SOLARIS 2.2 and above (aka SunOS 5) + * SVR4 + * ULTRIX + * OSF1 (alpha only) + * OSF1 with NIS and Fast Crypt (alpha only) + * OSF1 V2.0 Enhanced Security (alpha only) + * AIX + * BSDI + * NetBSD + * NetBSD 1.0 + * SEQUENT + * HP-UX + * SGI + * SGI IRIX 4.x.x + * SGI IRIX 5.x.x + * FreeBSD + * NeXT 3.2 and above + * NeXT OS 2.x + * NeXT OS 3.0 + * ISC SVR3V4 (POSIX mode) + * ISC SVR3V4 (iBCS2 mode) + * A/UX 3.0 + * SCO with shadow passwords. + * SCO with shadow passwords, without YP. + * SCO with TCB passwords + * SCO 3.2v2 (ODT 1.1) with TCP passwords + * intergraph + * DGUX + * Apollo Domain/OS sr10.3 (BSD4.3) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 5: How can I find out more about Samba? + +There are two mailing lists devoted to discussion of Samba-related matters. +There is also the newsgroup, comp.protocols.smb, which has a great deal of +discussion on Samba. + +Send email to listproc@anu.edu.au. Make sure the subject line is blank, and +include the following two lines in the body of the message: + + subscribe samba Firstname Lastname + subscribe samba-announce Firstname Lastname + +Obviously you should substitute YOUR first name for "Firstname" and YOUR last +name for "Lastname"! Try not to send any signature stuff, it sometimes confuses +the list processor. + +The samba list is a digest list - every eight hours or so it regurgitates a +single message containing all the messages that have been received by the list +since the last time and sends a copy of this message to all subscribers. + +If you stop being interested in Samba, please send another email to +listproc@anu.edu.au. Make sure the subject line is blank, and include the +following two lines in the body of the message: + + unsubscribe samba + unsubscribe samba-announce + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 6: Something's gone wrong - what should I do? + +[#] *** IMPORTANT! *** [#] +DO NOT post messages on mailing lists or in newsgroups until you have carried +out the first three steps given here! + +Firstly, see if there are any likely looking entries in this FAQ! + +Secondly, read the man pages for smbd, nmbd and smb.conf, looking for topics +that relate to what you are trying to do. + +Thirdly, if there is no obvious solution to hand, try to get a look at the log +files for smbd and/or nmbd for the period during which you were having +problems. You may need to reconfigure the servers to provide more extensive +debugging information - usually level 2 or level 3 provide ample debugging +info. Inspect these logs closely, looking particularly for the string "Error:". + +If you successfully solve a problem, please mail me a succinct description of +the symptom, the problem and the solution, so I can incorporate it in the next +version of the FAQ. + + +=============================================================================== +SECTION TWO: Compiling and installing Samba on a Unix host +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +=============================================================================== +SECTION THREE: Common client problems +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 1: I can't see the Samba server in any browse lists! + +*** Until the FAQ can be updated, please check the file: +*** ftp://nimbus.anu.adu.au/pub/tridge/samba/BROWSING.txt +*** for more information on browsing. + +If your GUI client does not permit you to select non-browsable servers, you may +need to do so on the command line. For example, under Lan Manager you might +connect to the above service as disk drive M: thusly: + + net use M: \\mary\fred + +The details of how to do this and the specific syntax varies from client to +client - check your client's documentation. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 2: Some files that I KNOW are on the server doesn't show up when I view the +directories from my client! + +If you check what files are not showing up, you will note that they are files +which contain upper case letters or which are otherwise not DOS-compatible (ie, +they are not legal DOS filenames for some reason). + +The Samba server can be configured either to ignore such files completely, or +to present them to the client in "mangled" form. If you are not seeing the +files at all, the Samba server has most likely been configured to ignore them. +Consult the man page smb.conf(5) for details of how to change this - the +parameter you need to set is "mangled names = yes". + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 3: Some files on the server show up with really wierd filenames when I view +the directories from my client! + +If you check what files are showing up wierd, you will note that they are files +which contain upper case letters or which are otherwise not DOS-compatible (ie, +they are not legal DOS filenames for some reason). + +The Samba server can be configured either to ignore such files completely, or +to present them to the client in "mangled" form. If you are seeing strange file +names, they are most likely "mangled". If you would prefer to have such files +ignored rather than presented in "mangled" form, consult the man page +smb.conf(5) for details of how to change the server configuration - the +parameter you need to set is "mangled names = no". + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 4: My client reports "cannot locate specified computer" or similar. + +This indicates one of three things: You supplied an incorrect server name, the +underlying TCP/IP layer is not working correctly, or the name you specified +cannot be resolved. + +After carefully checking that the name you typed is the name you should have +typed, try doing things like pinging a host or telnetting to somewhere on your +network to see if TCP/IP is functioning OK. If it is, the problem is most +likely name resolution. + +If your client has a facility to do so, hardcode a mapping between the hosts IP +and the name you want to use. For example, with Man Manager or Windows for +Workgroups you would put a suitable entry in the file LMHOSTS. If this works, +the problem is in the communication between your client and the netbios name +server. If it does not work, then there is something fundamental wrong with +your naming and the solution is beyond the scope of this document. + +If you do not have any server on your subnet supplying netbios name resolution, +hardcoded mappings are your only option. If you DO have a netbios name server +running (such as the Samba suite's nmbd program), the problem probably lies in +the way it is set up. Refer to Section Two of this FAQ for more ideas. + +By the way, remember to REMOVE the hardcoded mapping before further tests :-) + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 5: My client reports "cannot locate specified share name" or similar. + +This message indicates that your client CAN locate the specified server, which +is a good start, but that it cannot find a service of the name you gave. + +The first step is to check the exact name of the service you are trying to +connect to (consult your system administrator). Assuming it exists and you +specified it correctly (read your client's doco on how to specify a service +name correctly), read on: + + * Many clients cannot accept or use service names longer than eight + characters. + * Many clients cannot accept or use service names containing spaces. + * Some servers (not Samba though) are case sensitive with service names. + * Some clients force service names into upper case. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 6: My client reports "cannot find domain controller", "cannot log on to the +network" or similar. + +Nothing is wrong - Samba does not implement the primary domain name controller +stuff for several reasons, including the fact that the whole concept of a +primary domain controller and "logging in to a network" doesn't fit well with +clients possibly running on multiuser machines (such as users of smbclient +under Unix). + +Seeing this message should not affect your ability to mount redirected disks +and printers, which is really what all this is about. + +For many clients (including Windows for Workgroups and Lan Manager), setting +the domain to STANDALONE at least gets rid of the message. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 7: Printing doesn't work :-( + +Make sure that the specified print command for the service you are connecting +to is correct and that it has a fully-qualified path (eg., use "/usr/bin/lpr" +rather than just "lpr"). + +Make sure that the spool directory specified for the service is writable by the +user connected to the service. In particular the user "nobody" often has +problems with printing, even if it worked with an earlier version of Samba. Try +creating another guest user other than "nobody". + +Make sure that the user specified in the service is permitted to use the +printer. + +Check the debug log produced by smbd. Search for the printer name and see if +the log turns up any clues. Note that error messages to do with a service ipc$ +are meaningless - they relate to the way the client attempts to retrieve status +information when using the LANMAN1 protocol. + +If using WfWg then you need to set the default protocol to TCP/IP, not Netbeui. +This is a WfWg bug. + +If using the Lanman1 protocol (the default) then try switching to coreplus. +Also not that print status error messages don't mean printing won't work. The +print status is received by a different mechanism. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 8: My programs install on the server OK, but refuse to work properly. + +There are numerous possible reasons for this, but one MAJOR possibility is that +your software uses locking. Make sure you are using Samba 1.6.11 or later. It +may also be possible to work around the problem by setting "locking=no" in the +Samba configuration file for the service the software is installed on. This +should be regarded as a strictly temporary solution. + +In earlier Samba versions there were some difficulties with the very latest +Microsoft products, particularly Excel 5 and Word for Windows 6. These should +have all been solved. If not then please let Andrew Tridgell know. + + +=============================================================================== +SECTION FOUR: Specific client problems +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* 1: Are any MacIntosh clients for Samba. + +In Rob Newberry's words (rob@eats.com, Sun, 4 Dec 1994): + +The answer is "No." Samba speaks SMB, the protocol used for Microsoft networks. +The Macintosh has ALWAYS spoken Appletalk. Even with Microsoft "services for +Macintosh", it has been a matter of making the server speak Appletalk. It is +the same for Novell Netware and the Macintosh, although I believe Novell has +(VERY LATE) released an extension for the Mac to let it speak IPX. + +In future Apple System Software, you may see support for other protocols, such +as SMB -- Applet is working on a new networking architecture that will make it +easier to support additional protocols. But it's not here yet. + +Now, the nice part is that if you want your Unix machine to speak Appletalk, +there are several options. "Netatalk" and "CAP" are free, and available on the +net. There are also several commercial options, such as "PacerShare" and +"Helios" (I think). In any case, you'll have to look around for a server, not +anything for the Mac. + +Depending on you OS, some of these may not help you. I am currently +coordinating the effort to get CAP working with Native Ethertalk under Linux, +but we're not done yet. + +Rob + + +=============================================================================== +SECTION FIVE: Specific client application problems +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +=============================================================================== +SECTION SIX: Miscellaneous +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Maintained By Paul Blackman, Email:ictinus@lake.canberra.edu.au + + diff --git a/source3/loadparm.h b/source3/loadparm.h new file mode 100644 index 0000000000..513dbcd636 --- /dev/null +++ b/source3/loadparm.h @@ -0,0 +1,160 @@ +/* + Unix SMB/Netbios implementation. + Version 1.9. + Parameter loading functions + Copyright (C) Karl Auer 1993, 1994 + + Extensively modified by Andrew Tridgell + + 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + * + * Prototypes etc for loadparm.c. + * + */ +#ifndef _LOADPARM_H +#define _LOADPARM_H + +#include "smb.h" + +extern BOOL lp_file_list_changed(void); +extern void lp_killunused(BOOL (*snumused)(int )); +extern BOOL lp_loaded(void); +extern BOOL lp_snum_ok(int iService); +extern BOOL lp_manglednames(int iService); +extern char *lp_passwordserver(void); +extern char *lp_passwd_program(void); +extern char *lp_passwd_chat(void); +extern char *lp_guestaccount(int iService); +extern char *lp_printcapname(void); +extern char *lp_lockdir(void); +extern char *lp_logfile(void); +extern char *lp_configfile(void); +extern char *lp_smb_passwd_file(void); +extern char *lp_rootdir(void); +extern char *lp_defaultservice(void); +extern char *lp_serverstring(void); +extern char *lp_dfree_command(void); +extern char *lp_msg_command(void); +extern char *lp_workgroup(void); +extern char *lp_domain_controller(void); +extern char *lp_username_map(void); +extern char *lp_hosts_equiv(void); +extern char *lp_logon_script(void); +extern char *lp_magicscript(int iService); +extern char *lp_magicoutput(int iService); +extern char *lp_mangled_map(int iService); +char *volume_label(int snum); +extern int lp_os_level(void); +extern int lp_max_ttl(void); +extern int lp_max_log_size(void); +extern int lp_maxxmit(void); +extern int lp_maxmux(void); +extern int lp_mangledstack(void); +extern BOOL lp_preferred_master(void); +extern BOOL lp_domain_master(void); +extern BOOL lp_domain_logons(void); +extern BOOL lp_getwdcache(void); +extern BOOL lp_use_rhosts(void); +extern BOOL lp_readprediction(void); +extern BOOL lp_readbmpx(void); +extern BOOL lp_readraw(void); +extern BOOL lp_writeraw(void); +extern BOOL lp_null_passwords(void); +extern BOOL lp_strip_dot(void); +extern BOOL lp_encrypted_passwords(void); +extern BOOL lp_syslog_only(void); +extern BOOL lp_browse_list(void); +extern int lp_numservices(void); +extern int lp_keepalive(void); +extern int lp_passwordlevel(void); +extern int lp_security(void); +extern int lp_printing(void); +extern int lp_maxdisksize(void); +extern int lp_lpqcachetime(void); +extern int lp_syslog(void); +extern int lp_deadtime(void); +extern int lp_debuglevel(void); +extern int lp_maxprotocol(void); +extern int lp_maxpacket(void); +extern char *lp_comment(int iService); +extern char *lp_preexec(int iService); +extern char *lp_postexec(int iService); +extern char *lp_rootpreexec(int iService); +extern char *lp_rootpostexec(int iService); +extern char *lp_servicename(int iService); +extern char *lp_pathname(int iService); +extern char *lp_username(int iService); +extern char *lp_invalid_users(int iService); +extern char *lp_valid_users(int iService); +extern char *lp_admin_users(int iService); +extern char *lp_printcommand(int iService); +extern char *lp_lpqcommand(int iService); +extern char *lp_lprmcommand(int iService); +extern char *lp_lppausecommand(int iService); +extern char *lp_lpresumecommand(int iService); +extern char *lp_printername(int iService); +extern char *lp_hostsallow(int iService); +extern char *lp_hostsdeny(int iService); +extern char *lp_dontdescend(int iService); +extern char *lp_force_user(int iService); +extern char *lp_force_group(int iService); +extern char *lp_readlist(int iService); +extern char *lp_writelist(int iService); +extern BOOL lp_alternate_permissions(int iService); +extern BOOL lp_revalidate(int iService); +extern BOOL lp_status(int iService); +extern BOOL lp_hide_dot_files(int iService); +extern BOOL lp_browseable(int iService); +extern BOOL lp_widelinks(int iService); +extern BOOL lp_syncalways(int iService); +extern BOOL lp_readonly(int iService); +extern BOOL lp_no_set_dir(int iService); +extern BOOL lp_guest_ok(int iService); +extern BOOL lp_guest_only(int iService); +extern BOOL lp_print_ok(int iService); +extern BOOL lp_postscript(int iService); +extern BOOL lp_map_hidden(int iService); +extern BOOL lp_map_archive(int iService); +extern BOOL lp_locking(int iService); +extern BOOL lp_strict_locking(int iService); +extern BOOL lp_share_modes(int iService); +extern BOOL lp_onlyuser(int iService); +extern BOOL lp_map_system(int iService); +extern BOOL lp_casesensitive(int iService); +extern BOOL lp_casemangle(int iService); +extern BOOL lp_preservecase(int iService); +extern BOOL lp_shortpreservecase(int iService); +extern BOOL lp_load(char *pszFname,BOOL global_only); +extern void lp_dump(void); +extern int lp_servicenumber(char *pszServiceName); +extern BOOL lp_add_home(char *pszHomename, + int iDefaultService, char *pszHomedir); +extern int lp_add_service(char *service, int iDefaultService); +extern BOOL lp_add_printer(char *pszPrintername, int iDefaultService); +extern BOOL lp_readonly(int iService); +extern int lp_create_mode(int iService); +extern int lp_minprintspace(int iService); +extern int lp_defaultcase(int iService); +extern char lp_magicchar(int iService); +extern int lp_max_connections(int iService); +extern BOOL lp_add_home(char *pservice,int ifrom,char *phome); +extern char *lp_string(char *s); +char *my_workgroup(void); + +#endif + diff --git a/source3/params.h b/source3/params.h new file mode 100644 index 0000000000..253eaa4e7a --- /dev/null +++ b/source3/params.h @@ -0,0 +1,45 @@ +/* + Unix SMB/Netbios implementation. + Version 1.9. + Parameter loading utilities + Copyright (C) Karl Auer 1993, 1994 + + 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/************************************************************************** +PARAMS.H + +Copyright (C) 1990, 1991, 1992 Karl Auer + +Prototypes and definitions for PARAMS.C. +**************************************************************************/ +#ifndef _PARAMS_H +#define _PARAMS_H + +#include <stdio.h> +#include "smb.h" + +typedef BOOL (* PM_PARMFUNC)(char *pszParmName, char *pszParmValue); +typedef BOOL (* PM_SECFUNC)(char *pszSectionName); + +#define PM_NOFILE 1 +#define PM_NOFILENAME 2 +#define PM_FILEERROR 3 + +extern BOOL pm_process(char *pszFileName, PM_SECFUNC sfunc, PM_PARMFUNC pfunc); + +#endif + diff --git a/source3/pcap.h b/source3/pcap.h new file mode 100644 index 0000000000..89ab359af6 --- /dev/null +++ b/source3/pcap.h @@ -0,0 +1,35 @@ +/* + Unix SMB/Netbios implementation. + Version 1.9. + printcap parsing + Copyright (C) Karl Auer 1993, 1994 + + 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + * + * Prototypes etc for pcap.c. + * + */ +#ifndef _PCAP_H +#define _PCAP_H + +#include "smb.h" + +extern BOOL pcap_printername_ok(char *pszPrintername, char *pszPrintcapname); +extern void pcap_printer_fn(void (*fn)()); + +#endif diff --git a/source3/reply.h b/source3/reply.h new file mode 100644 index 0000000000..f88229436f --- /dev/null +++ b/source3/reply.h @@ -0,0 +1,60 @@ +int reply_special(char *inbuf,char *outbuf); +int reply_corep(char *outbuf); +int reply_coreplus(char *outbuf); +int reply_nt1(char *outbuf); +int reply_lanman1(char *outbuf); +int reply_lanman2(char *outbuf); +int reply_tcon(char *inbuf,char *outbuf); +int reply_tcon_and_X(char *inbuf,char *outbuf,int length,int bufsize); +int reply_unknown(char *inbuf,char *outbuf); +int reply_ioctl(char *inbuf,char *outbuf); +int reply_sesssetup_and_X(char *inbuf,char *outbuf,int length,int bufsize); +int reply_chkpth(char *inbuf,char *outbuf); +int reply_getatr(char *inbuf,char *outbuf); +int reply_setatr(char *inbuf,char *outbuf); +int reply_dskattr(char *inbuf,char *outbuf); +int reply_search(char *inbuf,char *outbuf); +int reply_fclose(char *inbuf,char *outbuf); +int reply_open(char *inbuf,char *outbuf); +int reply_open_and_X(char *inbuf,char *outbuf,int length,int bufsize); +int reply_ulogoffX(char *inbuf,char *outbuf,int length,int bufsize); +int reply_mknew(char *inbuf,char *outbuf); +int reply_ctemp(char *inbuf,char *outbuf); +int reply_unlink(char *inbuf,char *outbuf); +int reply_readbraw(char *inbuf, char *outbuf); +int reply_lockread(char *inbuf,char *outbuf); +int reply_read(char *inbuf,char *outbuf); +int reply_read_and_X(char *inbuf,char *outbuf,int length,int bufsize); +int reply_writebraw(char *inbuf,char *outbuf); +int reply_writeunlock(char *inbuf,char *outbuf); +int reply_write(char *inbuf,char *outbuf,int dum1,int dum2); +int reply_write_and_X(char *inbuf,char *outbuf,int length,int bufsize); +int reply_lseek(char *inbuf,char *outbuf); +int reply_flush(char *inbuf,char *outbuf); +int reply_exit(char *inbuf,char *outbuf); +int reply_close(char *inbuf,char *outbuf); +int reply_writeclose(char *inbuf,char *outbuf); +int reply_lock(char *inbuf,char *outbuf); +int reply_unlock(char *inbuf,char *outbuf); +int reply_tdis(char *inbuf,char *outbuf); +int reply_echo(char *inbuf,char *outbuf); +int reply_printopen(char *inbuf,char *outbuf); +int reply_printclose(char *inbuf,char *outbuf); +int reply_printqueue(char *inbuf,char *outbuf); +int reply_printwrite(char *inbuf,char *outbuf); +int reply_mkdir(char *inbuf,char *outbuf); +int reply_rmdir(char *inbuf,char *outbuf); +int reply_mv(char *inbuf,char *outbuf); +int reply_copy(char *inbuf,char *outbuf); +int reply_setdir(char *inbuf,char *outbuf); +int reply_lockingX(char *inbuf,char *outbuf,int length,int bufsize); +int reply_readbmpx(char *inbuf,char *outbuf,int length,int bufsize); +int reply_writebmpx(char *inbuf,char *outbuf); +int reply_setattrE(char *inbuf,char *outbuf); +int reply_getattrE(char *inbuf,char *outbuf); +int reply_writebs(char *inbuf,char *outbuf); +int reply_sends(char *inbuf,char *outbuf); +int reply_sendstrt(char *inbuf,char *outbuf); +int reply_sendend(char *inbuf,char *outbuf); +int reply_sendtxt(char *inbuf,char *outbuf); +int reply_transs2(char *inbuf,char *outbuf,int length,int bufsize); diff --git a/source3/smbpass.h b/source3/smbpass.h new file mode 100644 index 0000000000..6ddca0b92d --- /dev/null +++ b/source3/smbpass.h @@ -0,0 +1,50 @@ +#ifndef _SMBPASS_H_ +#define _SMBPASS_H_ +/* + Unix SMB/Netbios implementation. + Version 1.9. + SMB parameters and setup + Copyright (C) Jeremy Allison 1995 + + 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +struct smb_passwd { + int smb_userid; + char *smb_name; + unsigned char *smb_passwd; /* Null if no password */ + unsigned char *smb_nt_passwd; /* Null if no password */ + /* Other fields / flags may be added later */ +}; + +/* Return a smb_passwd struct given a user name, 0 if fails. */ +struct smb_passwd *get_smbpwnam(char *user); + +#ifndef uchar +#define uchar unsigned char +#endif + +/* SMB Encryption functions. */ +void str_to_key(unsigned char *str,unsigned char *key); +void E_P16(uchar *p14,uchar *p16); +void E_P24(unsigned char *p21, unsigned char *c8, unsigned char *p24); +void E_md4hash(uchar *passwd,uchar *p16); +void SMBencrypt(unsigned char *passwd, unsigned char *c8, unsigned char *p24); +void SMB_nt_encrypt(unsigned char *passwd, unsigned char *c8, unsigned char *p24); + +/* Password file lock/unlock routines */ +int pw_file_lock(char *name, int type, int secs); +int pw_file_unlock(int fd); +#endif diff --git a/source3/sockspy.c b/source3/sockspy.c new file mode 100644 index 0000000000..806b737915 --- /dev/null +++ b/source3/sockspy.c @@ -0,0 +1,302 @@ +/* + USAGE + sockspy desthost destservice + +You install this program in /etc/inetd.conf and /etc/services + +For example I have used these entries: + +/etc/services: +spy 8001/tcp spy port + +/etc/inetd.conf: +spy stream tcp nowait tridge /usr/local/smb/sockspy sockspy fjall netbios-ssn + +This means any connection to port 8001 will be redirected to +netbios-ssn on fjall. By playing with these parameters you can easily +spy on most of the tcp protocols. All packets traversing the link will +be captured. + +NOTE: This program is totally unsupported. I haven't used it for 2 +years, and don't intend to fix the obvious bugs/limitations. I will, +however, accept contributed patches - or even a total rewrite :-) +*/ + +#include <stdio.h> +#include <strings.h> +#include <sys/types.h> +#include <sys/dir.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <netinet/in.h> +#include <netdb.h> + +#include <signal.h> + +#include <errno.h> +#include <sysexits.h> + +int trans_num = 0; + +#ifndef LOGIN +#define LOGIN "/tmp/spy.in" +#endif + +#ifndef LOGOUT +#define LOGOUT "/tmp/spy.out" +#endif + +#ifndef LOGCMD +#define LOGCMD "/tmp/spy.cmd" +#endif + +FILE *cmd = NULL; +FILE *login = NULL; +FILE *logout = NULL; + +#define STREQL(a, b) (strcmp(a, b) == 0) +#define NIL (0) + +char DestHost[256]; /* Remote system to connect to */ +char DestObj[256]; /* Remote object/service to connect to */ + +/* Signal handler for SIGPIPE (write on a disconnected socket) */ +abort() +{ + if (cmd) + { + fprintf(cmd,"writing to disconnected socket!\n"); + fflush(cmd); + } + exit(1); +} + + +main(argc, argv) +int argc; /* # of command line arguments */ +char *argv[]; /* the command line arguments */ +{ + int client, /* Socket connected to client */ + server; /* Socket to use for server */ + + trans_num = 0; +#ifndef NOLOG + login = fopen(LOGIN,"w"); + logout = fopen(LOGOUT,"w"); + cmd = fopen(LOGCMD,"w"); +#endif + + if (cmd) + { + fprintf(cmd,"Started server\n"); + fflush(cmd); + } + + /* Check usage */ + if(argc != 3) + return; + + strcpy(DestHost,argv[1]); + strcpy(DestObj,argv[2]); + + /* Time to attempt the connection */ + server = inet_conn(DestHost, DestObj); + + if( server < 0 ) { + exit(EX_CANTCREAT); + } + + /* Just to make the code more readable */ + client = 0; + + /* We will abort gracefully when the client or remote system + goes away */ + signal(SIGPIPE, abort); + + /* Now just go and move raw data between client and + remote system */ + dowork(client, server); + /* ... NEVER RETURNS ... */ +} + +dowork(client, server) + int client, server; +{ + + /* select(2) masks for client and remote */ + int ClientMask, ServerMask; + + /* Combined ClientMask and ServerMask */ + int ReadMask; + + /* Initialize select(2) masks */ + ClientMask = 1<<client; + ServerMask = 1<<server; + + ReadMask = ClientMask | ServerMask; + + /* Now move raw data for the rest of our life between + client and remote */ + for( ; ; ) { + /* Local Variables */ + int SelectReadMask;/* select(2) mask modifiable by select(2) */ + int nready; /* status return from select(2) */ + + do { + /* Intialize select(2) mask everytime + as select(2) always modifies it */ + SelectReadMask = ReadMask; + + /* Wait for data to be present to be moved */ + errno = 0; + nready = select(32,&SelectReadMask,(int *)0,(int *)0,NIL); + } while( nready < 0 && errno == EINTR ); + + /* select(2) failed, shouldn't happen. Exit abnormally */ + if( nready < 0 ) + exit(EX_SOFTWARE); + + /* Favor the client (for no particular reason) + if s/he is has data */ + if( SelectReadMask & ClientMask ) + { + if (cmd) + fprintf(cmd,"client %d\n",nready); + xfer(client, server,login); + } + + /* Then check on the other guy */ + if( SelectReadMask & ServerMask ) + { + if (cmd) + fprintf(cmd,"server %d\n",nready); + xfer(server, client,logout); + } + } + + /* NEVER REACHED */ +} + +#define BUFSIZE 20000 /* Max bytes to move at a time */ + +xfer(from, to,file) + int from, to; /* Move data from "from" to "to" */ + FILE *file; +{ + static char buf[BUFSIZE]; /* Buffer data to be moved */ + int nready; /* # bytes readable */ + int got; /* # bytes actually being moved */ + int ret; + + /* Query the system how many bytes are ready to be read */ + ioctl(from, FIONREAD, &nready); + + if (cmd) + fprintf(cmd,"nready = %d\n",nready); + + /* Only try to get the smaller of nready and BUFSIZE */ + got = read(from, buf, nready < BUFSIZE ? nready : BUFSIZE); + + /* Zero bytes returned indicates end of stream, exit gracefully */ + if( got == 0 ) + { + if (cmd) + { + fprintf(cmd,"read 0 bytes exiting\n"); + fflush(cmd); + } + if (login) + fclose(login); + if (logout) + fclose(logout); + if (cmd) + fclose(cmd); + exit(EX_OK); + } + + + if (file) + { + fprintf(file,"\nTransaction %d\n",trans_num); + fwrite(buf,got,1,file); + fflush(file); + } + trans_num++; + + /* Now send it accross to the other side */ + ret = write(to, buf, got); + + if (cmd) + { + fprintf(cmd,"wrote %d\n",ret); + if (ret < 0) + fprintf(cmd,"error = %s\n",strerror(errno)); + } +} + +int +inet_conn(host, port) + char *host; + char *port; +{ + /* Local Vars */ + int sock; /* Socket to use for the connection */ + struct hostent *hostent; /* Destination host entry */ + struct servent *servent; /* Destination service entry */ + struct sockaddr_in addr; /* Formated destination for connect */ + + /* Fetch the requested host and service entries */ + hostent = gethostbyname(host); + if (isdigit(*port)) + servent = getservbyport(80, "tcp"); + else + servent = getservbyname(port, "tcp"); + + + if (cmd) + { + fprintf(cmd,"inet_conn %s %s\n",host,port); + + if (servent == NULL) + fprintf(cmd,"servent is NIL\n"); + if (hostent == NULL) + fprintf(cmd,"hostent is NIL\n"); + if (hostent->h_addrtype != AF_INET) + fprintf(cmd,"not inet type\n"); + fflush(cmd); + } + + + /* No host entry, no service entry, or host is not + Internet, error! */ + if( servent == NIL || + hostent == NIL || + hostent->h_addrtype != AF_INET ) + return -1; + + /* Get a socket from the system to use for the connection */ + if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) + return -1; + + /* Make sure we start with a clean address structure ... */ + bzero(&addr, sizeof(addr)); + + /* ... then fill in the required fields */ + addr.sin_family = AF_INET; + addr.sin_port = servent->s_port; + bcopy(hostent->h_addr, &addr.sin_addr, hostent->h_length); + + /* Now try to connection to the destination */ + if( connect(sock, &addr, sizeof(addr)) < 0 ) { + /* No go, release the socket, and then return error! */ + close(sock); + return -1; + } + + /* Success. Return the connected socket descriptor */ + if (cmd) + fprintf(cmd,"returning %d\n",sock); + return sock; +} + + |