This commit was manufactured by cvs2svn to create tag 'V1_73'.

git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/amiga-smbfs/tags/V1_73@24 26594b9e-b914-4e86-b7a1-9402bd427170
This commit is contained in:
Olaf Barthel
2009-04-17 11:09:42 +00:00
parent ec1b2a97db
commit 3ef3d8b536
14 changed files with 0 additions and 1792 deletions
-13
View File
@@ -1,13 +0,0 @@
# The "checkoutlist" file is used to support additional version controlled
# administrative files in $CVSROOT/CVSROOT, such as template files.
#
# The first entry on a line is a filename which will be checked out from
# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
# The remainder of the line is an error message to use if the file cannot
# be checked out.
#
# File format:
#
# [<whitespace>]<filename>[<whitespace><error message>]<end-of-line>
#
# comment lines begin with '#'
-15
View File
@@ -1,15 +0,0 @@
# The "commitinfo" file is used to control pre-commit checks.
# The filter on the right is invoked with the repository and a list
# of files to check. A non-zero exit of the filter program will
# cause the commit to be aborted.
#
# The first entry on a line is a regular expression which is tested
# against the directory that the change is being committed to, relative
# to the $CVSROOT. For the first match that is found, then the remainder
# of the line is the name of the filter to run.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".
-21
View File
@@ -1,21 +0,0 @@
# Set this to "no" if pserver shouldn't check system users/passwords
#SystemAuth=no
# Put CVS lock files in this directory rather than directly in the repository.
#LockDir=/var/lock/cvs
# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
# level of the new working directory when using the `cvs checkout'
# command.
#TopLevelAdmin=no
# Set `LogHistory' to `all' or `TOEFWUPCGMAR' to log all transactions to the
# history file, or a subset as needed (ie `TMAR' logs all write operations)
#LogHistory=TOEFWUPCGMAR
# Set `RereadLogAfterVerify' to `always' (the default) to allow the verifymsg
# script to change the log message. Set it to `stat' to force CVS to verify# that the file has changed before reading it (this can take up to an extra
# second per directory being committed, so it is not recommended for large
# repositories. Set it to `never' (the previous CVS behavior) to prevent
# verifymsg scripts from changing the log message.
#RereadLogAfterVerify=always
-19
View File
@@ -1,19 +0,0 @@
# This file affects handling of files based on their names.
#
# The -m option specifies whether CVS attempts to merge files.
#
# The -k option specifies keyword expansion (e.g. -kb for binary).
#
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
#
# wildcard [option value][option value]...
#
# where option is one of
# -f from cvs filter value: path to filter
# -t to cvs filter value: path to filter
# -m update methodology value: MERGE or COPY
# -k expansion mode value: b, o, kkv, &c
#
# and value is a single-quote delimited value.
# For example:
#*.gif -k 'b'
-21
View File
@@ -1,21 +0,0 @@
# The "editinfo" file is used to allow verification of logging
# information. It works best when a template (as specified in the
# rcsinfo file) is provided for the logging procedure. Given a
# template with locations for, a bug-id number, a list of people who
# reviewed the code before it can be checked in, and an external
# process to catalog the differences that were code reviewed, the
# following test can be applied to the code:
#
# Making sure that the entered bug-id number is correct.
# Validating that the code that was reviewed is indeed the code being
# checked in (using the bug-id number or a seperate review
# number to identify this particular code set.).
#
# If any of the above test failed, then the commit would be aborted.
#
# Actions such as mailing a copy of the report to each reviewer are
# better handled by an entry in the loginfo file.
#
# One thing that should be noted is the the ALL keyword is not
# supported. There can be only one entry that matches a given
# repository.
-27
View File
@@ -1,27 +0,0 @@
# The "loginfo" file controls where "cvs commit" log information
# is sent. The first entry on a line is a regular expression which must match
# the directory that the change is being made to, relative to the
# $CVSROOT. If a match is found, then the remainder of the line is a filter
# program that should expect log information on its standard input.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name ALL appears as a regular expression it is always used
# in addition to the first matching regex or DEFAULT.
#
# You may specify a format string as part of the
# filter. The string is composed of a `%' followed
# by a single format character, or followed by a set of format
# characters surrounded by `{' and `}' as separators. The format
# characters are:
#
# s = file name
# V = old version number (pre-checkin)
# v = new version number (post-checkin)
# t = tag or branch name
#
# For example:
#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
# or
#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog
-26
View File
@@ -1,26 +0,0 @@
# Three different line formats are valid:
# key -a aliases...
# key [options] directory
# key [options] directory files...
#
# Where "options" are composed of:
# -i prog Run "prog" on "cvs commit" from top-level of module.
# -o prog Run "prog" on "cvs checkout" of module.
# -e prog Run "prog" on "cvs export" of module.
# -t prog Run "prog" on "cvs rtag" of module.
# -u prog Run "prog" on "cvs update" of module.
# -d dir Place module in directory "dir" instead of module name.
# -l Top-level directory only -- do not recurse.
#
# NOTE: If you change any of the "Run" options above, you'll have to
# release and re-checkout any working directories of these modules.
#
# And "directory" is a path to a directory relative to $CVSROOT.
#
# The "-a" option specifies an alias. An alias is interpreted as if
# everything on the right of the "-a" had been typed on the command line.
#
# You can encode a module within a module by using the special '&'
# character to interpose another module into the current module. This
# can be useful for creating a module that consists of many directories
# spread out over the entire source repository.
-12
View File
@@ -1,12 +0,0 @@
# The "notify" file controls where notifications from watches set by
# "cvs watch add" or "cvs edit" are sent. The first entry on a line is
# a regular expression which is tested against the directory that the
# change is being made to, relative to the $CVSROOT. If it matches,
# then the remainder of the line is a filter program that should contain
# one occurrence of %s for the user to notify, and information on its
# standard input.
#
# "ALL" or "DEFAULT" can be used in place of the regular expression.
#
# For example:
#ALL mail -s "CVS notification" %s
-13
View File
@@ -1,13 +0,0 @@
# The "rcsinfo" file is used to control templates with which the editor
# is invoked on commit and import.
#
# The first entry on a line is a regular expression which is tested
# against the directory that the change is being made to, relative to the
# $CVSROOT. For the first match that is found, then the remainder of the
# line is the name of the file that contains the template.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".
-20
View File
@@ -1,20 +0,0 @@
# The "taginfo" file is used to control pre-tag checks.
# The filter on the right is invoked with the following arguments:
#
# $1 -- tagname
# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
# $3 -- repository
# $4-> file revision [file revision ...]
#
# A non-zero exit of the filter program will cause the tag to be aborted.
#
# The first entry on a line is a regular expression which is tested
# against the directory that the change is being committed to, relative
# to the $CVSROOT. For the first match that is found, then the remainder
# of the line is the name of the filter to run.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".
-21
View File
@@ -1,21 +0,0 @@
# The "verifymsg" file is used to allow verification of logging
# information. It works best when a template (as specified in the
# rcsinfo file) is provided for the logging procedure. Given a
# template with locations for, a bug-id number, a list of people who
# reviewed the code before it can be checked in, and an external
# process to catalog the differences that were code reviewed, the
# following test can be applied to the code:
#
# Making sure that the entered bug-id number is correct.
# Validating that the code that was reviewed is indeed the code being
# checked in (using the bug-id number or a seperate review
# number to identify this particular code set.).
#
# If any of the above test failed, then the commit would be aborted.
#
# Actions such as mailing a copy of the report to each reviewer are
# better handled by an entry in the loginfo file.
#
# One thing that should be noted is the the ALL keyword is not
# supported. There can be only one entry that matches a given
# repository.
-647
View File
@@ -1,647 +0,0 @@
smbfs 1.19 (27.11.2000)
- Fixed ACTION_FINDOUTPUT implementation; the memory to hold the
name of the file to be created was released before the file
was created. This could cause garbage to be written to the
output file.
- Fixed ACTION_COPY_DIR implementation; the name of the lock to
be duplicated did not get duplicated.
- Fixed ACTION_EXAMINE_OBJECT and ACTION_EXAMINE_NEXT
implementations; protection bits are now reported 'properly'
with respect to read/write access.
smbfs 1.20 (27.11.2000)
- ACTION_EXAMINE_NEXT now filters out SMB names that include
'/' or ':' characters.
smbfs 1.21 (28.11.2000)
- Modified ACTION_RENAME_DISK to remove the volume node before
changing it. It also sends the appropriate diskremove/diskinserted
input events now.
- Reorganized and rewrote the code to reduce dependencies on
the compiler runtime library.
- Unified error reporting code.
- SMBFS can now be launched from Workbench using the same parameters
you would use when starting it from Shell. Error reporting
has been adapted to show an error requester and to pool error
messages rather than printing them to the console.
smbfs 1.22 (30.11.2000)
- Fixed the test that looks for file/lock access mode collisions.
- No longer changes the case of the password; there is now an
option to make the change.
- Fixed ACTION_SAME_LOCK which was comparing the same lock with
itself.
- Added support for ACTION_EXAMINE_ALL, ACTION_EXAMINE_ALL_END
and ACTION_WRITE_PROTECT packet types.
- No longer allows for files and locks to refer to "." and "..".
The use of the backslash character '\' is also disallowed in
Amiga file/directory names.
smbfs 1.23 (30.11.2000)
- In the ExNext()/ExAll() handling functions local error variables
were shadowing each other. Fixed.
- The error reporting requester now also lists the name of the
service to connect to. This should help in telling different
invocations of the program apart.
- The size of the directory cache is now a configurable option.
- Added a new option which forces all name comparisons to be
done in a case-sensitive fashion.
- Reading/writing data to/from a file in chunks larger than
65535 bytes could fail and cause the file system to hang.
smbfs 1.24 (1.12.2000)
- Added an option to allow hidden files to be omitted from
directory listings.
- Improved upon the error reporting in the code that directly
calls the TCP/IP API functions.
- Reorganized the AmigaDOS packet handling switch..case
list.
- Added support for ACTION_MORE_CACHE packet type. The
cache in this context refers to the directory scanning
cache.
- Improved upon the host lookup error reporting code.
- Added support for file name translation such as via the
CrossDOS translation table files.
smbfs 1.25 (2.12.2000)
- SMBFS now displays some configuration information as soon as
it has successfully connected to the file server and is ready
for action. This output can be suppressed with the new
"QUIET" command line parameter.
- When removing a directory, the error code returned is examined
more closely to see whether the directory was not yet empty.
- When setting the protection bits of a file or directory, the
file system now treats either 'protected from deletion' and
'protected from writing' as indications to mark a file as
write protected. Previously, a file had to be both protected
from deletion and from writing to be treated as write protected.
- Cleaned up the program's data structures and eliminated all
static data that would hold state information. The entire
client side is now completely reentrant.
smbfs 1.26 (3.12.2000)
- File and directory names are no longer duplicated in the
SMB abstraction layer. The strings supplied by the Amiga
file system layer are referenced instead.
- Changed the way the ACTION_MORE_CACHE implementation returns
its result code to be compatible with current practices.
smbfs 1.27 (4.12.2000)
- The changes I made to the file read command in order to allow it
to read more than 65535 bytes at a time did not allow read
attempts at the end of the file to come out properly. Fixed.
- Integrated password encryption code lifted from Samba. Hope
it works as it should, because if it doesn't, I wouldn't know
how to fix it...
smbfs 1.28 (4.12.2000)
- Oh dear, more fixes to the password encryption code and the
connection setup to follow it. This time I managed to test the
code briefly with Samba and password encryption enabled.
Amazingly, it seems to work this time!
smbfs 1.29 (6.12.2000)
- Writes larger than 65535 bytes could stall and slow down the
file system. Fixed. [Thore Böckelmann]
- The ACTION_MORE_CACHE implementation never returned the total
number of cache entries allocated. Fixed. [Thore Böckelmann]
- Plain text passwords didn't seem to work any more after I made
the changes to allow for encrypted passwords to be used. Fixed.
smbfs 1.30 (6.12.2000)
- Changed the structure of the share names by which the file system
refers to the data on the server; they all start with a backslash
now. This seems to help NT and doesn't break the rest.
- For file shares exported using 'share level security', no passwords
will be transmitted.
smbfs 1.31 (7.12.2000)
- The ACTION_EXAMINE and ACTION_EXAMINE_FH implementations now verify
that the name to return will fit into the FileInfoBlock's limited
buffer space.
- Deleting files and directories from a directory currently being
scanned via ACTION_EXAMINE_NEXT or ACTION_EXAMINE_ALL will now cause
the directory scanner to restart. This is ugly, I know, but at least
it won't cause the scanning process to hickup or lose entries
directory entries during its course of duty. The flip side is that
the scanner will probably return some entries twice. There must
be a better way to implement this, but for now, this is it.
- Tried to make device and volume node removal safer.
- SMBFS now always adds a device node to go along with the volume node.
It's safer that way because for every file system you either have a
single device node in the system (and no volume node) or a volume
node *and* a device node. If the device node is missing, there's
typically something wrong and some application software cannot handle
this case properly. SMBFS will attempt to add a new, unique device
node every time it is launched.
- When specifying the name of the file system device to add, SMBFS
now complains if that name already exists.
smbfs 1.32 (8.12.2000)
- File and directory modification dates were always off by six hours and
one second. I don't know how that happens, it doesn't seem to be a bug
in the date conversion routines. I worked around the problem by adding
and subtracting an adjustment value.
smbfs 1.33 (10.12.2000)
- The ACTION_PARENT_DIR implementation did not return a ZERO lock for
the root directory. Fixed. [Rudolph Riedel]
- Replaced the doubly-linked Exec lists with skip lists which
are better suited for the repeated lookup operations that
are so common in the file system. This time the list code
seems to work properly.
- Added -- largely untested -- time and date decoding routines for
directory entries returned by NT.
smbfs 1.34 (10.12.2000)
- Had to take out the skip list code again since it did not seem to
work reliably.
- Further tweaking to the NT date and time decoding code.
smbfs 1.35 (10.12.2000)
- Small modification to the ACTION_EXAMINE_NEXT/ACTION_EXAMINE_ALL code
which tries to work around a strange effect caused by Amiga Samba
returning the contents of an empty drawer.
smbfs 1.36 (11.12.2000)
- More fixes to the NT date and time conversion code and the
strange six hour fixup that seems to be necessary for the
'regular' time conversion to work.
smbfs 1.37 (11.12.2000)
- Replaced the entire 'regular' date and time conversion code. The
strange six hour fixup is no longer necessary.
smbfs 1.38 (11.12.2000)
- Ditched the packet size kludges in "sock.c" and "proc.c" I had put
in there. It seems that only the 'smba_write()'/'smba_read()' code
could trigger it, and that code was fixed quite a while ago.
- Migrated some code changes from the Samba source over to the
directory scanner.
- Maximum transmission size per packet is now the same as the
number the server allowed us to use rather than a fixed number
imposed by VM page sizes.
- Tried to clean up more of the code.
- Discovered that the 'smb_valid_packet()' routine never could have
worked and fixed it so that it now finally does what it should do.
- Better error propagation for some routines in "proc.c".
- More streamlined error testing code.
smbfs 1.39 (11.12.2000)
- Almost fixed several bugs in 'smb_proc_readdir_long()'.
- 'smb_proc_readdir_long()' does not work correctly. It only seems to
work, but will fail if the scanner is to restart before the entire
directory is read. Restored the old behaviour :(
smbfs 1.40 (13.12.2000)
- Took out some more unused and unnecessary code.
- Rewrote the time and date conversion routines.
- Modified the directory reading code so that it no longer relies
upon the last directory entry index which doesn't seem to be
correct most of the time.
- Directory scanning errors are now flagged as such.
smbfs 1.41 (16.12.2000)
- In the SMB abstraction layer, the directory cache is now invalidated
only if the respective action that could have invalidated it succeeds.
- Now clears the directory cache only if the respective action would
have affected the directory being cached.
- In debug mode [Ctrl]+F will display a list of open files and allocated
locks.
- Added very silly support for ACTION_SET_COMMENT packet.
- Found an interesting bug fix for 'smb_proc_readdir_long()' in the
Linux 2.4.0 kernel which seemed worth integrating into the file system.
smbfs 1.42 (19.12.2000)
- Integrated Chris Hertel's broadcast name query code. This means that
the name of the host whose file shares you want to access need no
longer be in the hosts database. However, you still cannot refer to
a host solely by its IP address.
smbfs 1.43 (21.12.2000)
- The integrated broadcase name query code would conflict with the
DNS lookup. Fixed. [Thore Böckelmann]
- The NetBIOS name query code now retries four times to get a response
out of the network.
- Put the mysterious 6 hour time offset fix back in.
smbfs 1.44 (29.12.2000)
- Rewrote the host lookup error reporting code to use the appropriate
API function.
- Discovered that all the functionality required by SMBFS was supported
by the original free AmiTCP 3.0 release. Changed the "bsdsocket.library"
open parameters.
- The ACTION_EXAMINE_OBJECT implementation consistently got the name of
the root directory wrong. Fixed.
smbfs 1.45 (7.1.2001)
- Discovered why file and directory creation dates were wrong by about
six hours. Fixed.
- The order of the parameters passed to the 'ExAll()' filter hook was
wrong. Fixed [Thorsteinn Sveinsson and Matt Sealey].
smbfs 1.46 (1.2.2001)
- Removed the workarounds for the mysterious 'off by six hours' bug.
The time delta value added was consistently wrong.
smbfs 1.47 (18.2.2001)
- The name of the domain/workgroup, the name of the user and the
password to be used can now be preset using environment variables.
- Changed the command line argument template to work better with the
newly introduced environment variable settings.
smbfs 1.48 (3.3.2001)
- Modified the command template so that the final parameter can no
longer cause all other parameters to be swallowed. Also updated
the documentation.
smbfs 1.49 (3.3.2001)
- Handling of ACTION_FINDUPDATE needed improving. It should have
created a file that didn't already exist. It now does [David Gerber].
smbfs 1.50 (4.3.2001)
- ACTION_FINDUPDATE is now associated with a shared lock. It used
to be an exclusive lock [David Gerber].
- The test to follow ACTION_FINDUPDATE that determines whether the
file to open already exists now also tries to 'stat()' the file
in question to find out whether it exists.
smbfs 1.51 (13.3.2001)
- Whoops. The new code to pull data from environment variables didn't
actually check whether the work group name could be set up properly
and thus didn't complain about it either. It now notifies you if
no work group name was provided and none could be found.
smbfs 1.52 (22.6.2001)
- Added another option which allows you to preset the time zone offset
to use when translating between the local time and the SMB server
time. Using the default locale doesn't work for that purpose all the
time since there are so many misconfigured servers out there.
- The ACTION_DIE packet didn't have the desired effect if the file
system didn't have a reason to wait for any resources to be
released again. It just wouldn't quit. Now it does.
- Before it exits, the file system no longer posts a disk change
event if it was launched from Workbench. I found that the steps
taken so far could end up deadlocking Workbench.
smbfs 1.53 (26.6.2001)
- Changed the file name parser; it should now be possible to tie assigns
to files and directories on an smb volume. Since the updated file name
translation code also is a bit smarter about when to use which
file name separator character, accesses to the media should be a
bit faster, too.
- When translating path names, trailing '/' characters are now properly
parsed, i.e. Lock("/",...) should always bring up the parent directory
[Matt Sealey].
- Duplicating a ZERO lock now works as expected.
smbfs 1.54 (27.6.2001)
- Directory and file creation didn't work that properly after applying
the changes I made to the parser. Fixed [Matt Sealey].
smbfs 1.55 (3.3.2002)
- At least samba 2.2.2-12 on linux can send total_data of 0 bytes. This
caused sock.c/smb_receive_trans2() malloc() (==AllocVecPooled) to fail
on smba_readdir(). Fixed [Harry Sintonen].
- Added quickfix against crash if smb_abstraction.c/smb_smba_readdir()
fails. This is by no means a real fix, but at least it doesn't crash
[Harry Sintonen].
- There is definitely something fishy in the smbfs restart/retry scheme,
it just doesn't work properly (all state data has to be, and is,
reset when restarts occur, but still it tries to use the old data as if
nothing happened). Someone should really take a closer look at this
[Harry Sintonen].
smbfs 1.56 (3.9.2002)
- Rewrote the Setup() code which allocates and initializes the device and
volume nodes. Lost all Forbid()..Permit() pairs on the way, making the
code more robust and less weird.
- In proc.c/smb_proc_readdir_long() now specifically watches for the
smb_trans2_request() function return empty data and parameter values.
This is now treated as an attempt to read from an empty directory.
Previously, there was a slight change that the information was
taken seriously even if NULL was returned.
smbfs 1.57 (3.9.2002)
- Ran the code through GCC and rewrote the code to get rid of the compiler
warnings that appeared to have something more serious about them. This
includes, for example, comparisons between signed and unsigned values.
smbfs 1.58 (5.9.2002)
- Rebuilt using my own TCP/IP stack SDK. Rebuilding the code with the
Miami SDK should still be possible, though.
- Changed the way smb_proc_readdir_long() aborts the job if no valid
data is read.
smbfs 1.59 (10.9.2003) [Harry Sintonen <sintonen -at- iki -dot- fi>]
- Fixed ACTION_DELETE_OBJECT to restart directory scanning, it
searched for wrong object. Fixes the problem where every other
file was skipped when deleting directory.
smbfs 1.60 (11.2.2004) [Peter Riede <Noster-Riede -at- T-Online -dot- de>]
- Fixed ACTION_SEEK, it doesn't works if followed by ACTION_WRITE.
Fixes the problem by using the SMBlseek packet instead of just
remembering the position in the local FileNode structure
- Fixed ACTION_SETFILESIZE, has returned an errorcode of 37 instead
of 0L on success.
- Added support for the ACTION_LOCK_RECORD and ACTION_UNLOCK_RECORD
packets.
smbfs 1.61 (27.4.2004)
- Reworked the ACTION_SEEK implementation. Turns out that the SMB
lseek packet only seems to work for the Samba server but produces
unpredictable results with Microsoft flavoured servers. The new
code, which helps to avoid trouble with overlapping write access
and seeks, now performs much like the old one except that it
"notifies" the SMB server of the new file position to be used.
Tested both with Samba and Windows XP: works as it should.
smbfs 1.62 (8.5.2004)
- Added sanity checks to the record locking code. For example,
locking a record of length 0 must be considered illegal. Also,
since the protocol deals with 32 bit signed integers for
file position and record length, parameters that are "too large"
and come out as negative values are now rejected.
smbfs 1.63 (9.5.2004)
- Added more sanity checks to the record locking code, this time
to avoid integer overflows.
- Added support for the SMB 'archive' and 'system' file attributes,
which are mapped to the Amiga 'archived' and 'pure' protection
bits.
- Cleaned up the header files.
smbfs 1.64 (13.5.2004)
- ExamineFH() did not fill in the file protection bits. Fixed.
- Ported to AmigaOS4.
smbfs 1.65 (16.5.2004)
- The port numbers of the NetBIOS session and name services are no
longer hard-coded. They are now looked up (netbios-ns/udp and
netbios-ssn/tcp), and if that fails, the hard-coded default port
numbers are used instead.
- Tried to reduce the risk of triggering buffer overflows by replacing
calls to strcpy/strcat. This revealed weaknesses in a number of
places, including the code that fills in the names of the directory
entries.
- Instead of calling memcpy(), the code now invokes exec.library/CopyMem(),
which should be a wee bit faster than what the 'C' runtime library can do.
- Merged with Peter Riede's changes: for small packets to be sent,
SMBwrite is used instead of SMBwritebraw (which greatly enhances
performance), the server max_xmit field is initialized differently
if the session was opened with a SMBtconx packet and ACTION_SEEK
no longer sets the error code to an undefined value in case of
success.
smbfs 1.66 (10.6.2004)
- Added a paranoia check to the ExAll() implementation which should
avoid trouble with extremely short data buffers.
smbfs 1.67 (27.5.2005)
- Replaced the long NT date conversion code with something hopefully
much more robust. The results so far are both encouraging and
irritating. Dates that previously came out as "unknown" are now
processed, but there are differences between the dates shown in the
directory listing and by listing the files by name. Go figure...
- Transplanted some more code from Samba to handle directory entry
data conversion.
smbfs 1.68 (3.6.2005)
- It appears that Windows XP can produce directory listings with
file/directory modification times set to 0, indicating that no
such information is available, while the associated last file
write access data is present. Previously, smbfs only reported
the modification. If this data is unavailable and the date of
the last write access is, the last write access will be
reported instead.
smbfs 1.69 (13.6.2005)
- The time stamps used in "proc.c", as returned and submitted to
the SMB file system on the other end of the wire are apparently
all in Universally Coordinated Time already (or at least, this
seems to be the case with Samba and Windows XP). Hence no conversion
between local time and UTC is necessary, which would otherwise
distort all date stamps converted. I modified the file system to
leave all time stamps essentially unadjusted for local time in
"proc.c". The local time zone adjustments are now performed only
where the time in question is known to be Amiga-specific, such as
the current system time or the date stamp to set for a file.
The time conversion appears to be working correctly now, but it
does ignore the effects of daylight savings time, which you might
want to adjust for manually through the TIMEZONEOFFSET option
(careful though: this overrides your current locale-defined time
zone settings as far as smbfs is concerned).
Unsolved problem: at least Windows XP seems to return different
time stamps for directory listings and for indidivual files. As
far as I can tell, the sets of time stamps returned for either
doesn't match anywhere.
smbfs 1.70 (13.6.2005)
- Introduced a new option to account for daylight savings time
when appropriate.
- Looks like some of the time stamps used in "proc.c" are
transmitted in local time after all; brought back the
conversion functions.
smbfs 1.71 (13.6.2005)
- The extended directory scanning entry conversion code now swaps
the last modification and last write access date stamps. This
matches the time of the last modification, as returned by the
regular ACTION_EXAMINE_FH/ACTION_EXAMINE packets. Note that the
time resolution is a little bit coarser because the modification
time as expressed by the SMB getattr function cannot represent
60 distinct seconds per minute but only 30. The net effect is
that the resulting time stamps in a directory listing and by
examining a file can differ by one second.
- The DST option's time offset was added to rather than subtracted
from the local time. Fixed.
smbfs 1.72 (14.4.2009)
- In proc.c, smb_setup_header() initialized the SMB header length
field with a number which was too large by four bytes. Consequently,
what was later committed to the wire would have four trailing data
bytes which could contain random values. This often didn't do much
harm, but it seems that Samba 3.2.4 and Windows Vista don't like the
looks of the trailing junk bytes.
-457
View File
@@ -1,457 +0,0 @@
A SMB file system wrapper for AmigaOS, using the AmiTCP V3 API
==============================================================
1. What is it?
This document briefly describes the SMBFS program, which implements an SMB
file system for AmigaOS. This file system can be used to access files made
available by file servers which implement the SMB protocol, such as 'Microsoft
Windows' or any other platform which supports the free 'Samba' product. These
files can be accessed using shell commands such as 'List', the Workbench or
utilities such as 'Directory Opus' as if the file server were a local disk
drive.
2. What do you need to get started?
You need a TCP/IP stack that supports the AmiTCP V3 API, such as 'Miami', the
original free 'AmiTCP 3.0' release, 'AmiTCP 4.x', 'Miami Deluxe', 'AmiTCP
Genesis' or 'Roadshow' and the obligatory networking gear. All these items
need to be in good shape and properly configured.
Most important, you need a computer which exports file sharing services using
the SMB protocol.
It often helps to have 'Samba' installed on your Amiga, too, as this can aid
in tracking down bugs and obtaining information which SMBFS cannot obtain all
by itself.
Last but not least, you need to be proficient in configuring and using the
TCP/IP stack; networking knowledge is definitely assumed.
SMBFS requires AmigaOS 2.04 or higher to work.
3. Preparations
You need to know which computer's files you want to share using the SMBFS file
system. That computer must be known by name, it is not sufficient just to know
its IP address. If you know the IP address but cannot refer to the host by its
name then SMBFS will not work. In that case, make sure that you add a host
name entry referring to the IP address to your TCP/IP stack's host database
(e.g. the "AmiTCP:bin/hosts" file or the corresponding page in the stack's
configuration user interface).
The name of the computer to connect to must not be too long. If it is longer
than 16 characters, SMBFS will not work properly.
You need to know which service you want to connect to on the target computer.
You can find out which services are available on a certain computer by using
the Samba 'smbclient' program. For example, if you were to query the services
offered by a machine called 'sourcery' you could enter the following:
samba:bin/smbclient -L sourcery
And you might get the following information:
added interface ip=192.168.0.1 bcast=192.168.0.255 nmask=255.255.255.0
Password: Domain=[ARBEITSGRUPPE] OS=[AmigaOS] Server=[Samba 2.0.7]
Sharename Type Comment
--------- ---- -------
All Disk All volumes in the system
IPC$ IPC IPC Service (Amiga 3000UX)
olsen Disk Home Directories
Server Comment
--------- -------
SOURCERY Amiga 3000UX
Workgroup Master
--------- -------
ARBEITSGRUPPE SOURCERY
The share name to connect to would be "ALL" in this case.
You need to know which login name and which password are required to connect
to the shared resource, and you need to know the name of the workgroup or
domain the file server is a member of.
4. Starting and stopping the file system
SMBFS is an uncommon kind of file system in that you do not use the 'Mount'
command to mount it. In fact, SMBFS is a shell program which can be launched
from the shell, using command line parameters to tell it which resources
should be used. But you can also start it from Workbench: in this case you
would have to put the program's command line options into icon tool types.
By now you should have assembled the following information:
- Name of the computer to connect to; this would be the
file server
- Name of the shared SMB resource to connect to
- Login name and password
That's basically everything you need to know to continue -- unless something
goes wrong, but more on that lateron.
Now you can start the file system. For example, to connect to the file server
called 'sourcery' and the shared 'all' resource it exports, with that computer
being a member of the workgroup 'Arbeitsgruppe', using the login name
'PCGuest' and not providing any password you would enter the following:
Run >NIL: SMBFS Workgroup=Arbeitsgruppe User=PCGuest Service=//sourcery/all
This would cause a new device by the name of "SMBFS:" to be mounted, showing
all files and directories the 'sourcery' server makes available for sharing.
How do you 'unmount' the file system? That's very easy, just check the output
of the 'Status' shell command. You might get the following output:
Process 1: Loaded as command: TURBOTEXT
Process 2: Loaded as command: Work:Tools/Blowup
Process 3: Loaded as command: Work:Tools/Sashimi
Process 4: Loaded as command: Work:CyberTools/CyberGuard
Process 5: Loaded as command: Work:Tools/OpenDevicePatch
Process 6: Loaded as command: CED
Process 7: Loaded as command: Workbench
Process 8: Loaded as command: Status
Process 9: No command loaded
Process 10: Loaded as command: SMBFS '//sourcery/all'
Look at the last line describing process number 10: it shows the name of the
file system program SMBFS and the name of the SMB share it is connected to. To
stop this file system and effectively unmount it, use the shell 'Break'
command; in this case you would enter "Break 10" to stop the file system. Note
that the program may not terminate immediately; it may have to wait until the
last client has released all resources referring to the file system. You may
have to send more than one "Break" command to stop the program.
5. Startup options
The SMBFS program supports a number of command line options, as will be
described below. The command template looks like this:
DOMAIN=WORKGROUP/K,USER=USERNAME/K,PASSWORD/K,CHANGECASE/S,
CASE=CASESENSITIVE/S,OMITHIDDEN/S,QUIET/S,CLIENT=CLIENTNAME/K,
SERVER=SERVERNAME/K,DEVICE=DEVICENAME/K,VOLUME=VOLUMENAME/K,
CACHE=CACHESIZE/N/K,DEBUGLEVEL=DEBUG/N/K,TZ=TIMEZONEOFFSET/N/K,
DST=DSTOFFSET/N/K,TRANSLATE=TRANSLATIONFILE/K,SERVICE/A
The individual options serve the following purposes:
DOMAIN=WORKGROUP/K
You must specify the name of the work group or domain which the file server
to connect to is a member of. The name of this workgroup or domain must not
be longer than 16 characters. The name you provide will be translated to
all upper case characters.
You need not provide for a work group or domain name on the command line.
Alternatively, you may configure an environment variable whose contents
will be used instead. The variable could be set up like this:
SetEnv smbfs_workgroup <name of domain or workgroup>
Copy ENV:smbfs_workgroup ENVARC:
You may also use the 'smbfs_domain' environment varilable in place of the
'smbfs_workgroup' variable. The two are aliases for one another, but
smbfs will read only one of the two.
USER=USERNAME/K
To connect to an SMB share you must authenticate yourself by providing a
user name. With this program the user name is optional; if you do not
provide one, SMBFS will use the default, which is "GUEST". The user name
must not be longer than 64 characters. The name you provide will be
translated to all upper case characters.
You need not provide for a user name on the command line. Alternatively,
you may configure an environment variable whose contents will be used
instead. The variable could be set up like this:
SetEnv smbfs_username <your user name>
Copy ENV:smbfs_username ENVARC:
You may also use the 'smbfs_user' environment varilable in place of the
'smbfs_username' variable. The two are aliases for one another, but
smbfs will read only one of the two.
PASSWORD/K
As part of the authentication process required to make the connection to
an SMB share, you must provide for a user name and a password. The
password is optional; if you do not provide one, an empty password will
be transmitted. The password must not be longer than 64 characters.
You need not provide for a password on the command line. Alternatively,
you may configure an environment variable whose contents will be used
instead. The variable could be set up like this:
SetEnv smbfs_password <your password>
Copy ENV:smbfs_password ENVARC:
Keep in mind that passwords like these really should not be exposed by
storing them in environment variables. But then the protocol smbfs uses
is almost as insecure as it gets anyway.
The authentication process only works if the machine you are connecting
to knows about the user name and password you want to use. As of this
writing, smbfs cannot be used for authenticating against a password
server that is not the same machine as the one from which you wish to
import a share.
CHANGECASE/S
By default the password will not be changed to all upper case characters.
If this is required, you should either provide the password in this
form or resort to this option, which will cause it to be translated
to all upper case characters.
CASE=CASESENSITIVE/S
Some file servers treat file and directory names differently which
differ only in whether they are written using upper/lower case
characters. For these servers you should activate the CASESENSITIVE
switch to treat those files properly. There is a catch though: the
AmigaDOS file naming scheme does not follow this model and you may
run into problems when you are trying to use it. By default, the
file system does not treat file and directory names differently
which only differ with respect to the case of letters.
OMITHIDDEN/S
When requesting a directory listing, the server may return some files
and directories tagged as being hidden. By default this file system
will report these 'hidden' entries anyway, but you can request
specifically that what is intended to be hidden should be omitted
from directory listings, too. Note that even though a file may be
hidden you should still be able to open and examine it.
QUIET/S
When started from Shell, SMBFS will print a message as soon as the
connection to the file server has been established. If you do not
want to see that message displayed, use the QUIET parameter. Also,
no such message will appear if the program has been started to run
in the background.
CLIENT=CLIENTNAME/K
SMBFS will attempt to connect to the file server by providing the name
of the computer you connect from. In some cases this may be undesirable
as the computer's name differs from what the file server expects. You
can use the CLIENT parameter to tell SMBFS under which name it should
announce itself to the server. This parameter is optional and will be
translated to all upper case characters; it cannot be longer than 16
characters.
SERVER=SERVERNAME/K
SMBFS will attempt to connect to the file server by providing the name
you specified using the SERVICE command line parameter. In some cases
this may be undesirable as the server's name differs from what you
specified as the share name. You can use the SERVER parameter to tell
SMBFS under which name it should contact the server. This parameter is
optional and will be translated to all upper case characters; it cannot
be longer than 16 characters.
DEVICE=DEVICENAME/K
VOLUME=VOLUMENAME/K
The SMBFS program can announce itself as an AmigaDOS file system by
using one of two different methods.
The first method involves announcing itself only as a file system
device. This should be sufficient in most cases but has a drawback in
that the device will not be usable from Workbench since the file system
will not appear as a disk icon. You tell SMBFS to use a specific device
name by using the DEVICE command line parameter, e.g. "DEVICE=SMBFS:".
Note that device names must be unique, i.e. there must be no other
device by the same name in the system; SMBFS will report an error and
exit if it finds one.
The second method involves announcing itself as a volume. This has the
benefit of making the file system usable from Workbench since a disk
icon will appear for it. You tell SMBFS to use a specific volume name by
using the VOLUME command line parameter, e.g. "VOLUME=Sourcery:".
Both methods have advantages and drawbacks. The drawback of the VOLUME
method is that it may deadlock the native Amiga Samba port as soon as
the file system is mounted. The drawback of the DEVICE method is that
the file system will not be usable from Workbench.
If you wish, you can combine both methods; this is the approach most
other file systems use. And in fact, when you tell SMBFS to add a
volume it will also add a device to go along with it.
The VOLUME and DEVICE keywords are optional; if you omit both, SMBFS
will pretend that you had used the "DEVICE=SMBFS:" parameter.
CACHE=CACHESIZE/N/K
The file system attempts to optimize accesses to the file server when
directory contents are being scanned. These contents are buffered in
a directory cache which by default will hold 170 entries. Since each
entry will require about 255 bytes of storage, the entire 170 entry
cache will occupy more than 40K bytes of memory. You may want to change
this requirement, by making the cache smaller or larger using the
CACHESIZE parameter. The size of the directory cache cannot be smaller
than 10 entries.
DEBUGLEVEL=DEBUG/N/K
By default SMBFS operates in silent mode. It does not report what it is
doing, it just tries to respond to file system requests. To obtain
debugging output you may want to use the DEBUG option and specify a
debug level greater than 0. The larger the number you specify the more
debugging output will be created. Note that all debugging output will be
produced using the operating system's debug output functionality which
requires that you have a capturing program like 'Sashimi' running in the
background.
TZ=TIMEZONEOFFSET/N/K
By default the file system will use the current Locale settings to
translate between the local time and the time used by the SMB
server. For some configurations, however, this is impractical since
the server's time zone is not configured properly. For these
rare cases you may want to hard code a certain time zone offset
using the 'TIMEZONEOFFSET' options. The number you provide must
be the number of minutes to add to the local time in order to
translate it into the corresponding GMT value. For example, in
central Europe using CET, you would use "TZ=-60" since CET is
one hour ahead of GMT.
DST=DSTOFFSET/N/K
This option can be used to adjust the file date stamps to take
local daylight savings time into account. The number to specify here
is by how many minutes local time has been moved ahead, which is
typically 60. Note that smbfs does not know when daylight savings
time begins and ends. It is up to you to select the correct value
when appropriate.
TRANSLATE=TRANSLATIONFILE/K
The Amiga and the file server SMBFS connects to may not share the same
character set. International characters used in file names on either
side may not come out correctly on the other side. To remedy this
problem, you can resort to file name translation. How the individual
names are to be translated is determined by the contents of a file
name translation table file such as the ones that ship with Workbench
in the "L:FileSystem_Trans" drawer. The first 256 bytes of each such
file must consist of the mapping of Amiga characters to the different
character set, and the second 256 characters must describe a mapping
back from the different character set to the Amiga. In most cases the
"L:FileSystem_Trans/INTL.crossdos" translation table file should be
sufficient. To specify which file contains the translation tables to
use you would use the TRANSLATIONFILE parameter.
SERVICE/A
This is the last parameter to be specified on the command line. It
should refer to the file server you want to connect to and the resource
it exports, e.g. a file system. This parameter must start with two
slashes which must be immediately followed by the file server's name,
which must be followed by the resource to connect to.
For now no special characters are allowed in the name of the service
as no translation is performed like would be the case for file names
on the volume.
The same parameters are also used when starting SMBFS from Workbench. SMBFS
will examine its icon tool types and use these in place of the shell command
line.
6. Known problems
The design of smbfs follows the original file system concept behind the
code which the 'Sharity-Light' file system is based upon. And that is a
Unix file system which differs from Amiga specific file systems in many
ways which can lead to problems which are discussed briefly below:
- Single threaded design
This means that it is not possible for several programs to fairly
share the use of the file system. For example, a program that posts
a long read request can tie up the file system almost exclusively
for itself, and while it is busy all other clients will have to
wait. Same goes for directory scanning.
- Poor scalability
This is associated with the single threaded design. When several
programs are accessing the file system at the same time, overhead
and unfair sharing of resources will drastically reduce the
performance of the file system.
- Separation of file data and metadata
This means that the core of the file system treats the contents of
a directory and the data attached to each file inside that
directory as something different. This is a common concept with
Unix file systems, but it is very different with Amiga file systems.
In smbfs this data separation can cause problems when deleting
files from a directory while that directory is being scanned,
such as how this is being done by the 'Delete' shell command. The
effects of these problems are that a directory may not be deleted
even though it is empty or that for the same directory the same
file may be reported twice in the listing.
While there are no easy solutions for any of these problems, it does not
mean that smbfs is unusable. You just have to be more careful when you
use the file system. For example, if a directory's contents cannot be
deleted due to one of the problems mentioned above, you might want to
retry later.
It should be noted that the problems described above are not inherent
to the original file system design. It's just that transferring that
design to an Amiga file system created the problems.
7. Credits
This file system is based upon prior work by Paal-Kr. Engstad, Volker
Lendecke, Mark A. Shand, Donald J. Becker, Rick Sladkey, Fred N. van Kempen,
Eric Kasten and Rudolf Koenig. It is a direct descendant of the
'Sharity-Light' file system written by Christian Starkjohann.
The password encryption code was lifted from the Samba package. It was
written by Andrew Tridgell and the Samba Team.
8. Author
The 'Sharity-Light' source code was adapted and wrapped into an AmigaOS layer
by Olaf `Olsen' Barthel. If you wish to contact me, please send e-mail to the
following address:
obarthel -at- gmx -dot- net
Or, alternatively, you might want to contact me via my postal address:
Olaf Barthel
Gneisenaustr. 43
D-31275 Lehrte
Federal Republic of Germany
If you want to submit a bug report or an enhancement request, please enclose
sufficient information to allow me to make sense of the problem. That includes
debugging logs produced using the DEBUG option. If possible, use the
facilities for bug reporting and tracking on the sourceforge.net web site
at <http://sourceforge.net/projects/amiga-smbfs>, which is the new home for
this file system.
9. Source code
SMBFS is distributed under the terms of the GNU General Public License
(version 2). The source code should have accompanied this program; if it
hasn't, please contact the author for a copy.
The program was compiled using the SAS/C 6.58 compiler, with the Roadshow SDK
providing for the TCP/IP stack API header files.
-480
View File
@@ -1,480 +0,0 @@
<!DOCTYPE html public "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>A SMB file system wrapper for AmigaOS, using the AmiTCP V3 API</title>
<body>
<h1>A SMB file system wrapper for AmigaOS, using the AmiTCP V3 API</h1>
<h2>1. What is it?</h2>
<p>This document briefly describes the <b>smbfs</b> program, which implements an SMB
file system for AmigaOS. This file system can be used to access files made
available by file servers which implement the SMB protocol, such as <i>Microsoft
Windows</i> or any other platform which supports the free <i>Samba</i> product. These
files can be accessed using shell commands such as <tt>List</tt>, the <i>Workbench</i> or
utilities such as <i>Directory Opus</i> as if the file server were a local disk
drive.</p>
<h2>2. What do you need to get started?</h2>
<p>You need a TCP/IP stack that supports the AmiTCP V3 API, such as <i>Miami</i>, the
original free <i>AmiTCP 3.0</i> release, <i>AmiTCP 4.x</i>, <i>Miami Deluxe</i>, <i>AmiTCP
Genesis</i> or <i>Roadshow</i> and the obligatory networking gear. All these items need to be in
good shape and properly configured.</p>
<p>Most important, you need a computer which exports file sharing services using
the SMB protocol.</p>
<p>It often helps to have <i>Samba</i> installed on your Amiga, too, as this can aid
in tracking down bugs and obtaining information which <b>smbfs</b> cannot obtain all
by itself.</p>
<p>Last but not least, you need to be proficient in configuring and using the
TCP/IP stack; networking knowledge is definitely assumed.</p>
<p><b>smbfs</b> requires <i>AmigaOS 2.04</i> or higher to work.</p>
<h2>3. Preparations</h2>
<p>You need to know which computer's files you want to share using the <b>smbfs</b> file
system. That computer must be known by name, it is not sufficient just to know
its IP address. If you know the IP address but cannot refer to the host by its
name then <b>smbfs</b> will not work. In that case, make sure that you add a host
name entry referring to the IP address to your TCP/IP stack's host database
(e.g. the <samp>AmiTCP:bin/hosts</samp> file or the corresponding page in the stack's
configuration user interface).</p>
<p>The name of the computer to connect to must not be too long. If it is longer
than 16 characters, <b>smbfs</b> will not work properly.</p>
<p>You need to know which service you want to connect to on the target computer.
You can find out which services are available on a certain computer by using
the Samba <tt>smbclient</tt> program. For example, if you were to query the services
offered by a machine called <i>sourcery</i> you could enter the following:</p>
<p><tt> samba:bin/smbclient -L sourcery </tt></p>
<p>And you might get the following information:</p>
<pre>
added interface ip=192.168.0.1 bcast=192.168.0.255 nmask=255.255.255.0
Password: Domain=[ARBEITSGRUPPE] OS=[AmigaOS] Server=[Samba 2.0.7]
Sharename Type Comment
--------- ---- -------
All Disk All volumes in the system
IPC$ IPC IPC Service (Amiga 3000UX)
olsen Disk Home Directories
Server Comment
--------- -------
SOURCERY Amiga 3000UX
Workgroup Master
--------- -------
ARBEITSGRUPPE SOURCERY
</pre>
<p>The share name to connect to would be <tt>ALL</tt> in this case.</p>
<p>You need to know which login name and which password are required to connect
to the shared resource, and you need to know the name of the workgroup or
domain the file server is a member of.</p>
<h2>4. Starting and stopping the file system</h2>
<p><b>smbfs</b> is an uncommon kind of file system in that you do not use the <tt>Mount</tt>
command to mount it. In fact, <b>smbfs</b> is a shell program which can be launched
from the shell, using command line parameters to tell it which resources
should be used. But you can also start it from Workbench: in this case you
would have to put the program's command line options into icon tool types.</p>
<p>By now you should have assembled the following information:</p>
<ul>
<li> Name of the computer to connect to; this would be the file server
<li> Name of the shared SMB resource to connect to
<li> Login name and password
</ul>
<p>That's basically everything you need to know to continue -- unless something
goes wrong, but more on that lateron.</p>
<p>Now you can start the file system. For example, to connect to the file server
called <i>sourcery</i> and the shared <i>all</i> resource it exports, with that computer
being a member of the workgroup <i>Arbeitsgruppe</i>, using the login name
<i>PCGuest</i> and not providing any password you would enter the following:</p>
<p><tt>Run &gt;NIL: SMBFS Workgroup=Arbeitsgruppe User=PCGuest Service=//sourcery/all</tt></p>
<p>This would cause a new device by the name of <tt>SMBFS:</tt> to be mounted, showing
all files and directories the <i>sourcery</i> server makes available for sharing.</p>
<p>How do you 'unmount' the file system? That's very easy, just check the output
of the <tt>Status</tt> shell command. You might get the following output:</p>
<p><tt>
Process 1: Loaded as command: TURBOTEXT<br>
Process 2: Loaded as command: Work:Tools/Blowup<br>
Process 3: Loaded as command: Work:Tools/Sashimi<br>
Process 4: Loaded as command: Work:CyberTools/CyberGuard<br>
Process 5: Loaded as command: Work:Tools/OpenDevicePatch<br>
Process 6: Loaded as command: CED<br>
Process 7: Loaded as command: Workbench<br>
Process 8: Loaded as command: Status<br>
Process 9: No command loaded<br>
Process 10: Loaded as command: SMBFS '//sourcery/all'
</tt></p>
<p>Look at the last line describing process number 10: it shows the name of the
file system program <b>smbfs</b> and the name of the SMB share it is connected to. To
stop this file system and effectively unmount it, use the shell <tt>Break</tt>
command; in this case you would enter <kbd>Break 10</kbd> to stop the file system. Note
that the program may not terminate immediately; it may have to wait until the
last client has released all resources referring to the file system. You may
have to send more than one <tt>Break</tt> command to stop the program.</p>
<h2>5. Startup options</h2>
<p>The <b>smbfs</b> program supports a number of command line options, as will be
described below. The command template looks like this:</p>
<p><tt>
DOMAIN=WORKGROUP/K,USER=USERNAME/K,PASSWORD/K,CHANGECASE/S,<br>
CASE=CASESENSITIVE/S,OMITHIDDEN/S,QUIET/S,CLIENT=CLIENTNAME/K,<br>
SERVER=SERVERNAME/K,DEVICE=DEVICENAME/K,VOLUME=VOLUMENAME/K,<br>
CACHE=CACHESIZE/N/K,DEBUGLEVEL=DEBUG/N/K,TZ=TIMEZONEOFFSET/N/K,<br>
DST=DSTOFFSET/N/K,TRANSLATE=TRANSLATIONFILE/K,SERVICE/A</tt></p>
<p>The individual options serve the following purposes:</p>
<ul>
<li> <p><tt>DOMAIN=WORKGROUP/K</tt></p>
<p>You must specify the name of the work group or domain which the file server
to connect to is a member of. The name of this workgroup or domain must not
be longer than 16 characters. The name you provide will be translated to
all upper case characters.</p>
<p>You need not provide for a work group or domain name on the command line.
Alternatively, you may configure an environment variable whose contents
will be used instead. The variable could be set up like this:</p>
<p><tt>
SetEnv smbfs_workgroup <i>name of domain or workgroup</i><br>
Copy ENV:smbfs_workgroup ENVARC:
</tt></p>
<p>You may also use the <tt>smbfs_domain</tt> environment varilable in place of the
<tt>smbfs_workgroup</tt> variable. The two are aliases for one another, but
<b>smbfs</b> will read only one of the two.</p>
<li><p><tt>USER=USERNAME/K</tt></p>
<p>To connect to an SMB share you must authenticate yourself by providing a
user name. With this program the user name is optional; if you do not
provide one, <b>smbfs</b> will use the default, which is <tt>GUEST</tt>. The user name
must not be longer than 64 characters. The name you provide will be
translated to all upper case characters.</p>
<p>You need not provide for a user name on the command line. Alternatively,
you may configure an environment variable whose contents will be used
instead. The variable could be set up like this:</p>
<p><tt>
SetEnv smbfs_username <i>your user name</i><br>
Copy ENV:smbfs_username ENVARC:
</tt></p>
<p>You may also use the <tt>smbfs_user</tt> environment varilable in place of the
<tt>smbfs_username</tt> variable. The two are aliases for one another, but
<b>smbfs</b> will read only one of the two.</p>
<li><p><tt>PASSWORD/K</tt></p>
<p>As part of the authentication process required to make the connection to
an SMB share, you must provide for a user name and a password. The
password is optional; if you do not provide one, an empty password will
be transmitted. The password must not be longer than 64 characters.</p>
<p>You need not provide for a password on the command line. Alternatively,
you may configure an environment variable whose contents will be used
instead. The variable could be set up like this:</p>
<p><tt>
SetEnv smbfs_password <i>your password</i><br>
Copy ENV:smbfs_password ENVARC:</tt></p>
<p>Keep in mind that passwords like these really should not be exposed by
storing them in environment variables. But then the protocol <b>smbfs</b> uses
is almost as insecure as it gets anyway.</p>
<p>The authentication process only works if the machine you are connecting
to knows about the user name and password you want to use. As of this
writing, <b>smbfs</b> cannot be used for authenticating against a password
server that is not the same machine as the one from which you wish to
import a share.</p>
<li><p><tt>CHANGECASE/S</tt></p>
<p>By default the password will not be changed to all upper case characters.
If this is required, you should either provide the password in this
form or resort to this option, which will cause it to be translated
to all upper case characters.</p>
<li><p><tt>CASE=CASESENSITIVE/S</tt></p>
<p>Some file servers treat file and directory names differently which
differ only in whether they are written using upper/lower case
characters. For these servers you should activate the <tt>CASESENSITIVE</tt>
switch to treat those files properly. There is a catch though: the
AmigaDOS file naming scheme does not follow this model and you may
run into problems when you are trying to use it. By default, the
file system does not treat file and directory names differently
which only differ with respect to the case of letters.</p>
<li><p><tt>OMITHIDDEN/S</tt></p>
<p>When requesting a directory listing, the server may return some files
and directories tagged as being hidden. By default this file system
will report these 'hidden' entries anyway, but you can request
specifically that what is intended to be hidden should be omitted
from directory listings, too. Note that even though a file may be
hidden you should still be able to open and examine it.</p>
<li><p><tt>QUIET/S</tt></p>
<p>When started from Shell, <b>smbfs</b> will print a message as soon as the
connection to the file server has been established. If you do not
want to see that message displayed, use the <tt>QUIET</tt> parameter. Also,
no such message will appear if the program has been started to run
in the background.</p>
<li><p><tt>CLIENT=CLIENTNAME/K</tt><p>
<p><b>smbfs</b> will attempt to connect to the file server by providing the name
of the computer you connect from. In some cases this may be undesirable
as the computer's name differs from what the file server expects. You
can use the <tt>CLIENT</tt> parameter to tell <b>smbfs</b> under which name it should
announce itself to the server. This parameter is optional and will be
translated to all upper case characters; it cannot be longer than 16
characters.</p>
<li><p><tt>SERVER=SERVERNAME/K</tt></p>
<p><b>smbfs</b> will attempt to connect to the file server by providing the name
you specified using the <tt>SERVICE</tt> command line parameter. In some cases
this may be undesirable as the server's name differs from what you
specified as the share name. You can use the <tt>SERVER</tt> parameter to tell
<b>smbfs</b> under which name it should contact the server. This parameter is
optional and will be translated to all upper case characters; it cannot
be longer than 16 characters.</p>
<li><p><tt>DEVICE=DEVICENAME/K</tt><br>
<tt>VOLUME=VOLUMENAME/K</tt></p>
<p>The <b>smbfs</b> program can announce itself as an AmigaDOS file system by
using one of two different methods.</p>
<p>The first method involves announcing itself only as a file system
device. This should be sufficient in most cases but has a drawback in
that the device will not be usable from Workbench since the file system
will not appear as a disk icon. You tell <b>smbfs</b> to use a specific device
name by using the <tt>DEVICE</tt> command line parameter, e.g. <kbd>DEVICE=SMBFS:</kbd>.
Note that device names must be unique, i.e. there must be no other
device by the same name in the system; <b>smbfs</b> will report an error and
exit if it finds one.</p>
<p>The second method involves announcing itself as a volume. This has the
benefit of making the file system usable from Workbench since a disk
icon will appear for it. You tell <b>smbfs</b> to use a specific volume name by
using the <tt>VOLUME</tt> command line parameter, e.g. <kbd>VOLUME=Sourcery:</kbd>.</p>
<p>Both methods have advantages and drawbacks. The drawback of the <tt>VOLUME</tt>
method is that it may deadlock the native Amiga Samba port as soon as
the file system is mounted. The drawback of the <tt>DEVICE</tt> method is that
the file system will not be usable from Workbench.</p>
<p>If you wish, you can combine both methods; this is the approach most
other file systems use. And in fact, when you tell <b>smbfs</b> to add a
volume it will also add a device to go along with it.</p>
<p>The <tt>VOLUME</tt> and <tt>DEVICE</tt> keywords are optional; if you omit both, <b>smbfs</b>
will pretend that you had used the <kbd>DEVICE=SMBFS:</kbd> parameter.</p>
<li><p><tt>CACHE=CACHESIZE/N/K</tt></p>
<p>The file system attempts to optimize accesses to the file server when
directory contents are being scanned. These contents are buffered in
a directory cache which by default will hold 170 entries. Since each
entry will require about 255 bytes of storage, the entire 170 entry
cache will occupy more than 40K bytes of memory. You may want to change
this requirement, by making the cache smaller or larger using the
<tt>CACHESIZE</tt> parameter. The size of the directory cache cannot be smaller
than 10 entries.</p>
<li><p><tt>DEBUGLEVEL=DEBUG/N/K</tt></p>
<p>By default <b>smbfs</b> operates in silent mode. It does not report what it is
doing, it just tries to respond to file system requests. To obtain
debugging output you may want to use the <tt>DEBUG</tt> option and specify a
debug level greater than 0. The larger the number you specify the more
debugging output will be created. Note that all debugging output will be
produced using the operating system's debug output functionality which
requires that you have a capturing program like <tt>Sashimi</tt> running in the
background.</p>
<li><p><tt>TZ=TIMEZONEOFFSET/N/K</tt></p>
<p>By default the file system will use the current Locale settings to
translate between the local time and the time used by the SMB
server. For some configurations, however, this is impractical since
the server's time zone is not configured properly. For these
rare cases you may want to hard code a certain time zone offset
using the <tt>TIMEZONEOFFSET</tt> options. The number you provide must
be the number of minutes to add to the local time in order to
translate it into the corresponding UTC value. For example, in
central Europe using CET, you would use <kbd>TZ=-60</kbd> since CET is
one hour ahead of UTC.</p>
<li><p><tt>DST=DSTOFFSET/N/K</tt></p>
<p>This option can be used to adjust the file date stamps to take
local daylight savings time into account. The number to specify here
is by how many minutes local time has been moved ahead, which is
typically 60. Note that <b>smbfs</b> does not know when daylight
savings time begins and ends. It is up to you to select the correct
adjustment value when appropriate.</p>
<li><p><tt>TRANSLATE=TRANSLATIONFILE/K</tt></p>
<p>The Amiga and the file server <b>smbfs</b> connects to may not share the same
character set. International characters used in file names on either
side may not come out correctly on the other side. To remedy this
problem, you can resort to file name translation. How the individual
names are to be translated is determined by the contents of a file
name translation table file such as the ones that ship with Workbench
in the <samp>L:FileSystem_Trans</samp> drawer. The first 256 bytes of each such
file must consist of the mapping of Amiga characters to the different
character set, and the second 256 characters must describe a mapping
back from the different character set to the Amiga. In most cases the
<samp>L:FileSystem_Trans/INTL.crossdos</samp> translation table file should be
sufficient. To specify which file contains the translation tables to
use you would use the <tt>TRANSLATIONFILE</tt> parameter.</p>
<li><p><tt>SERVICE/A</tt></p>
<p>This is the last parameter to be specified on the command line. It
should refer to the file server you want to connect to and the resource
it exports, e.g. a file system. This parameter must start with two
slashes which must be immediately followed by the file server's name,
which must be followed by the resource to connect to.</p>
<p>For now no special characters are allowed in the name of the service
as no translation is performed like would be the case for file names
on the volume.</p>
<p>The same parameters are also used when starting <b>smbfs</b> from <i>Workbench</i>. <b>smbfs</b>
will examine its icon tool types and use these in place of the shell command
line.</p>
</ul>
<h2>6. Known problems</h2>
<p>The design of <b>smbfs</b> follows the original file system concept behind the
code which the <i>Sharity-Light</i> file system is based upon. And that is a
Unix file system which differs from Amiga specific file systems in many
ways which can lead to problems which are discussed briefly below:</p>
<ul>
<li><p>Single threaded design</p>
<p>This means that it is not possible for several programs to fairly
share the use of the file system. For example, a program that posts
a long read request can tie up the file system almost exclusively
for itself, and while it is busy all other clients will have to
wait. Same goes for directory scanning.</p>
<li><p>Poor scalability</p>
<p>This is associated with the single threaded design. When several
programs are accessing the file system at the same time, overhead
and unfair sharing of resources will drastically reduce the
performance of the file system.</p>
<li><p>Separation of file data and metadata</p>
<p>This means that the core of the file system treats the contents of
a directory and the data attached to each file inside that
directory as something different. This is a common concept with
Unix file systems, but it is very different with Amiga file systems.
In <b>smbfs</b> this data separation can cause problems when deleting
files from a directory while that directory is being scanned,
such as how this is being done by the <tt>Delete</tt> shell command. The
effects of these problems are that a directory may not be deleted
even though it is empty or that for the same directory the same
file may be reported twice in the listing.</p>
</ul>
<p>While there are no easy solutions for any of these problems, it does not
mean that <b>smbfs</b> is unusable. You just have to be more careful when you
use the file system. For example, if a directory's contents cannot be
deleted due to one of the problems mentioned above, you might want to
retry later.</p>
<p>It should be noted that the problems described above are not inherent
to the original file system design. It's just that transferring that
design to an Amiga file system created the problems.</p>
<h2>7. Credits</h2>
<p>This file system is based upon prior work by Paal-Kr. Engstad, Volker
Lendecke, Mark A. Shand, Donald J. Becker, Rick Sladkey, Fred N. van Kempen,
Eric Kasten and Rudolf Koenig. It is a direct descendant of the
<i>Sharity-Light</i> file system written by Christian Starkjohann.</p>
<p>The password encryption code was lifted from the Samba package. It was
written by Andrew Tridgell and the Samba Team.</p>
<h2>8. Author</h2>
<p>The <i>Sharity-Light</i> source code was adapted and wrapped into an AmigaOS layer
by Olaf `Olsen' Barthel. If you wish to contact me, please send e-mail to the
following address:</p>
<p><tt>obarthel -at- gmx -dot- net</tt></p>
<p>Or, alternatively, you might want to contact me via my postal address:</p>
<p>Olaf Barthel<br>
Gneisenaustr. 43<br>
D-31275 Lehrte<br>
Federal Republic of Germany</p>
<p>If you want to submit a bug report or an enhancement request, please enclose
sufficient information to allow me to make sense of the problem. That includes
debugging logs produced using the <tt>DEBUG</tt> option.</p>
<p>If possible, use the facilities for bug reporting and tracking on the
<a href=http://sourceforge.net/projects/amiga-smbfs><tt>sourceforge.net</tt> web site</a>,
which is the new home for this file system.
<h2>9. Source code</h2>
<p><b>smbfs</b> is distributed under the terms of the GNU General Public License
(version 2). The source code should have accompanied this program; if it
hasn't, please contact the author for a copy.</p>
<p>The program was compiled using the SAS/C 6.58 compiler, with the Roadshow SDK
providing for the TCP/IP stack API header files.</p>
</body>
</html>