Samba includes a complete set of variables for determining characteristics of the Samba server and the clients to which it connects. Each of these variables begins with a percent sign, followed by a single uppercase or lowercase letter, and can be used only on the right side of a configuration option (e.g., after the equal sign):
[pub]
path = /home/ftp/pub/%a
The
%a
stands for the client machine's architecture (e.g.,
WinNT
for Windows NT,
Win95
for Windows 95 or 98, or
WfWg
for Windows for Workgroups). Because of this, Samba will assign a unique path for the
[pub]
share to client machines running Windows NT, a different path for client machines running Windows 95, and another path for Windows for Workgroups. In other words, the paths that each client would see as its share differ according to the client's architecture, as follows:
/home/ftp/pub/WinNT
/home/ftp/pub/Win95
/home/ftp/pub/WfWg
Using variables in this manner comes in handy if you wish to have different users run custom configurations based on their own unique characteristics or conditions. Samba has 19 variables, as shown in
Table 4.1.
Table 4.1: Samba Variables
Variable |
Definition |
Client variables |
%a |
Client's architecture (e.g., Samba, WfWg, WinNT, Win95, or UNKNOWN) |
%I |
Client's IP address (e.g., 192.168.220.100) |
%m |
Client's NetBIOS name |
%M |
Client's DNS name |
User variables |
%g |
Primary group of
%u |
%G |
Primary group of
%U |
%H |
Home directory of
%u |
%u |
Current Unix username |
%U |
Requested client username (not always used by Samba) |
Share variables |
%p |
Automounter's path to the share's root directory, if different from
%P |
%P |
Current share's root directory |
%S |
Current share's name |
Server variables |
%d |
Current server process ID |
%h |
Samba server's DNS hostname |
%L |
Samba server's NetBIOS name |
%N |
Home directory server, from the automount map |
%v |
Samba version |
Miscellaneous variables |
%R |
The SMB protocol level that was negotiated |
%T |
The current date and time |
Here's another example of using variables: let's say that there are five clients on your network, but one client,
fred
, requires a slightly different
[homes]
configuration loaded when it connects to the Samba server. With Samba, it's simple to attack such a problem:
[homes]
...
include = /usr/local/samba/lib/smb.conf.%m
...
The
include
option here causes a separate configuration file for each particular NetBIOS machine (
%m
) to be read in addition to the current file. If the hostname of the client machine is
fred
, and if a
smb.conf.fred file exists in the
samba_dir
/lib/ directory (or whatever directory you've specified for your configuration files), Samba will insert that configuration file into the default one. If any configuration options are restated in
smb.conf.fred, those values will override any options previously encountered in that share. Note that we say "previously." If any options are restated in the main configuration file after the
include
option, Samba will honor those restated values for the share in which they are defined.
Here's the important part: if there is no such file, Samba will not generate an error. In fact, it won't do anything at all. This allows you to create only one extra configuration file for
fred
when using this strategy, instead of one for each NetBIOS machine that is on the network.
Machine-specific configuration files can be used both to customize particular clients and to make debugging Samba easier. Consider the latter; if we have one client with a problem, we can use this approach to give it a private log file with a more verbose logging level. This allows us to see what Samba is doing without slowing down all the other clients or overflowing the disk with useless logs. Remember, with large networks you may not always have the option to restart the Samba server to perform debugging!
You can use each of the variables in
Table 4.1 to give custom values to a variety of Samba options. We will highlight several of these options as we move through the next few chapters.