eftp - ISDN EUROFILE file transfer client
eftp [ -i ISDN_NO ] [ -x X25_ADDRESS ] [ -u USER[/PASSWORD] ] [-p] [-h]
eftp is a simple EUROFILE transfer client with a command line user
interface roughly resembling the ftp client.
Novice users are initially recommended to invoke eftp as
eftp -i ISDN_NO -u USER
ISDN number of the remote EUROFILE server to connect to. The
client will try to set up an isdn connection to this number and
an X.25 DTE-DTE connection on top of this.
directly specify the X.25 address used for setting up the X.25
connection. For eftp to work, an X.25 route for that address
must already be present. The X.25 route must point to an
isdn4linux network interface that is configured for outgoing
connections to a destination EUROFILE server. The encapsulation
of the interface must be "x25iface", l2_prot must be x75i.
If neither -i nor -x option is specified, the behavior is like
an empty string -x option ( as if called like "eftp -x ’’" )
The user identity used to login to the remote EUROFILE server.
The password can be appended to the user id seperated by a ’/’
character. If no ’/’ is present in the parameter of the -u
option, eftp will prompt for a password.
Entering the password on the command line allows other users to
spoof the password, e.g. by means of the ps command. The
password might also leave other traces, e.g. in your shell’s
history file. Thus, DON’T include the passwd in the -u argument
on machines where this is a concern (e.g. when untrusted users
have shell accounts on the machine).
If the -u option is missing, the client will try to login
without a user id (some servers will treat this as anonymous
-p suppress prompting for a password even if the argument to the -u
option does not contain a password. This is useful for accounts
on EUROFILE servers without password protection.
-h print a help message to stdout.
If invoked with the -i option, eftp will try its best to create and set
up all related isdn interfaces automatically and to remove them after
the end of the session. In order to undo the setup after the end of the
session reliably (i.e. even when the eftp process crashes), eftp forks
a child process which is in charge of processing the eurofile session
while taking care itself only for supervising the isdn connection setup
and undoing all temporary isdn configurations after the child exits.
However, the control and configuration of isdn connections requires
certain privileges (netadmin capability, write access to /dev/isdnctrl;
debian users need to be in the "dialout" group).
To overcome this problem, eftp now has special support to execute suid
root. To take advantage of this, make root the owner of the eftp binary
and set the suid bit. This is not done as standard in the debian
package because it is better to put authorized users in the dialout
WARNING/DISCLAIMER: suid programs are inherently dangerous because
potential bugs in the programme, the kernel or standard libraries might
be exploitable to gain root priviliges. If this is a concern, don’t
install eftp suid root. If installed suid root, also consider to clear
the world executable bit of the eftp binary and to change its group to
a group of trusted users who are allowed to execute the setuid eftp
eftp will change the uid of the forked child process (which is in
charge of the protocol procession) to the (less priviliged) real user
id of the caller as soon as possible. Only the parent process, which
does not interact with the user directly and needs more priviliges in
order to clean up the isdn setup, continues to run suid root. The real
userid of the parent will be switched to the effective userid (root).
A suid root eftp will not allow all users to set up eurofile isdn
connections. eftp checks whether the user has write permissions for the
/dev/ttyI0 special file. Only if this check is passed, the isdn
connection will be set up. This algorithm ensures that only users, who
are already permitted to set up isdn connections by other means (by
writing AT commands to /dev/ttyI0), can set up isdn connections for
When eftp has established the connection, it issues the "eftp>" prompt
and waits for commands that will be read from standard input. If
configured before compilation, interactive input can be edited by means
of the GNU readline library.
The following commands are recognised:
Commands for Listing and Transferring Files
This corresponds to ETS 300-075 and ETS 300-383 T-DIRECTORY
primitive. It prints a list of files contained in the current
working directory (ETSI calls it the "current filestore").
PATTERN is a pattern as defined in ETS 300-075 and selects a
subset of those files to be displayed. ETS 300-075 pattern are
different from shell wildcard or regular expressions, but the
pattern "*" matches all filenames as you’d expect. I won’t
explain further pattern rules here because most servers don’t
recognise any patterns different from "*" anyway.
If pattern is omitted, the * pattern is assumed.
Pattern applies to the EUROFILE transfer name of the files,
which is not necessarily identical to the filename itself.
Likewise, the output of the command does not list the
filenames, but the transfer names of the files and the file
length. Note that only regular files are listed. For listing
subdirectories, there are the list and slist commands.
This is similar to the dir command but requests the directory
contents in extended format. In addition to the transfer name,
this will also contain the real name of the file and the time
stamp of the last write access.
Note that not all servers support directory requests with
extended format. Some of those servers will respond with a
normal directory contents file, others will reject the request.
In the former case, eftp will issue a warning message and use
the transfer name for the file name and use 1970-01-01 as the
last access date. (The eftp4linux server supports extended
get TRANSFER_NAME [PATH_NAME]
This corresponds to the 300-075 T-LOAD primitive and tries to
load the file identified by TRANSFER_NAME from the remote server
and stores it locally using PATH_NAME as the destination. If
PATH_NAME is omitted, TRANSFER_NAME is also used as the
put [PATH_NAME] TRANSFER_NAME
This corresponds to the ETS 300-075 T-SAVE primitive and tries
to upload the local file identified by PATH_NAME to the remote
server, using TRANSFER_NAME as the destination. If PATH_NAME is
omitted, TRANSFER_NAME is also used as to identify the local
get multiple files whose transfer names match PATTERN. PATTERN
is (currently) interpreted a shell glob pattern, not an ETS 300
put multiple files whose names match PATTERN. PATTERN is
interpreted a shell glob pattern, not an ETS 300 075 pattern.
NOTE: The matched name is also used as the transfer name. If
pattern matched local files whose file name do not form a valid
ETS 300-383 transfer name, the transfer of those files might
If "on", prior to each file transferred by mput or mget, the
user is prompted for confirmation. If no parameter is given the
on/off value is toggled.
Possible user responses to the prompt:
y transfer the file
n don’t transfer the file and prompt for the next one
If "off", cases are ignored when matching PATTERN in mget and
mput. If parameter is missing, toggle current parameter value.
This currently does nor work with all versions of libc.
Navigation Commands (related to directories)
These commands are likely to fail because many servers don’t support
the navigation facility. (The eftp4linux server, however, supports this
This changes the current working directory ("current filestore")
to DIRECTORY. If DIRECTORY is omitted, the default directory
(this is the one initially entered when logged in) is changed
This command is likely to fail because many servers don’t
support the navigation facility.
pwd This prints the name of the server’s current working directory
("current filestore") to stdout.
slist This corresponds to the 300-383 S-LIST primitive. It prints a
list of the subdirectories contained in the current working
directory. The list items consist of a so called file store
reference followed by the filestore (directory) name. (The
eftp4linux server supports this, but the filestore references
are currently not generated totally norm conforming.)
list This corresponds to the ETS 300-383 LIST primitive. It is
similar to the slist command, but prints a list of all
directories of the server. (Even the eftp4linux server does not
The MESSAGE string is send literally to the remote server if the
server supports it (most servers won’t) by means of the ETS
300-075 T-TYPED_DATA primitive.
If MESSAGE is ommitted, the client will prompt for the message
string (can currently cause problems as protocol precessing is
currently not performed whil waiting for the user input).
change local working directory to DIR
execute COMMAND-STRING as a shell command.
quit This will quit the EUROFILE session, close the connection, and
exit the eftp programme.
manpage written from usage text file by Paul Slootman