Bug 1238 - Printers installed pointing to real hostname/netbios instead of netbios alias client requested
Summary: Printers installed pointing to real hostname/netbios instead of netbios alias...
Alias: None
Product: Samba 3.0
Classification: Unclassified
Component: Printing (show other bugs)
Version: 3.0.2a
Hardware: All Linux
: P3 normal
Target Milestone: none
Assignee: Gerald (Jerry) Carter (dead mail address)
QA Contact:
Depends on:
Reported: 2004-04-02 12:35 UTC by Daniel Jarboe
Modified: 2005-08-24 10:23 UTC (History)
0 users

See Also:

set_local_machine_name (like set_remote_machine_name) for port 445 connections (2.57 KB, patch)
2004-04-27 12:49 UTC, Daniel Jarboe
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Daniel Jarboe 2004-04-02 12:35:55 UTC
3.0.3pre1, nmbd not running, W2K/XP clients installing printers from //alias.  
alias resolves in dns to eth1 ip interface of samba server, and samba is 
configured with netbios aliases = alias.

However, when a client installs a printer from alias, the printer name is 
installed using the real netbios/hostname of the samba server, instead of the 
netbios alias the client requested.  Subsequent use of this printer is 
directed at real netbios/hostname of samba server instead of the original 
client-requested alias.

This severely cripples the usefulness of netbios aliases (and %L) for anything 
to do with print.

global smb.conf options:

        workgroup = TCS_MAIN_DOM
        use mmap = no
        netbios name = real
        netbios aliases = alias
        server string = Samba Print Server (%L)
        interfaces = eth1 eth0
#        bind interfaces only = yes
        bind interfaces only = no
        security = DOMAIN
        encrypt passwords = Yes
        password server = *
        username map = /etc/samba/smbusers
        log file = /var/log/samba/%m.log
        mangling method = hash2
        preferred master = No
        domain master = No
        local master = Yes
        dns proxy = No
        wins server =
        kernel oplocks = No
        winbind uid = 10000-20000
        winbind gid = 10000-20000
        winbind enum users = yes
        winbind enum groups = yes
        winbind use default domain = yes
        oplocks = No
        level2 oplocks = No
        guest account = nobody
        load printers = no
        printing = cups
        printcap name = cups

print$, printers, and individual print queue shares not listed.  Please let me 
know if you think they might be useful for some reason.
Comment 1 Daniel Jarboe 2004-04-09 10:06:41 UTC
More info... this appears to be because printing/nt_printing.c:get_a_printer_2 
does a slprintf of get_called_name() to restore servername (and servername in 

Hard coding the alias in place of get_called_name (and also modifying 
unpack_devicemode's devmode.devicename, not sure if this was required), fixed 
the problem locally.

get_called_name is returning lib/util.c's local_machine.  Which I think is 
getting set during smbd's init_structs (lib/util.c:init_names) to global_myname

If this is really how it's supposed to happen, I don't understand the 
get_called_name comment "Return the NetBIOS called name, or my IP - but never 
global_myname()."  get_called_name uses local_name if available, and 
local_name appears to be initialized right off the bat to global_myname()?

Comment 2 Daniel Jarboe 2004-04-27 12:49:20 UTC
Created attachment 478 [details]
set_local_machine_name (like set_remote_machine_name) for port 445 connections

Like the set_remote_machine_name in open_sockets_smbd, also call
set_local_machine_name so get_called_name will work for multiple
interfaces/aliases over port 445.

This does not affect NETBIOS connections, but fixes a problem where %L is
effectively always global_myname() for port 445 connections, despite the
interface/alias the client truly requests or connects to.

I know smb.conf says:
       %L     the  NetBIOS name of the server. This allows you to
	      change your config based on what the  client  calls
	      you. Your server can have a ``dual personality''.

	      This  parameter is not available when Samba listens
	      on port 445, as clients no longer send this  infor­-

But "not available" seems like a cop-out, since the print code uses
get_called_name pretty extensively, and it's broken if you want clients to be
able to use anything other than global_myname().

For Samba 3.0.2a in security = domain mode (NT pdc), with an alias that
resolves in dns that is different from the netbios name... before this patch,
attempting to install a printer on alias.domain really installed the printer
from SERVER-NETBIOS-NAME on the client.  After the patch, the printer is
installed correctly from the "alias.domain" the client initially connected to.

Does this seem okay or is fixing get_called_name for 445 this way too
dangerous in Samba 3?
~ Daniel
Comment 3 Daniel Jarboe 2004-04-28 11:47:15 UTC
Patch is better with this just before the "can't pass the same source and dest
strings in "... comment:

/* Accept host only up to first '.', for things like MAXDEVICENAME limit
   and to more closely mimic netbios */
if ((p = strchr_m(name_buf,'.')))
       *p = 0;
Comment 4 Gerald (Jerry) Carter (dead mail address) 2004-04-28 12:31:16 UTC
I'll look at this but until I do....

netbios aliases only make sense when you are using netbios :-)  
'smb ports = 139' will disable netbios-less CIFS on port 445.
Comment 5 Daniel Jarboe 2004-04-29 18:16:51 UTC
> netbios aliases only make sense when you are using netbios :-)

This is true.  But "dual-personality" with %L was a great feature in the 
2.2.8a days, and losing it seems somewhat of an unecessary regression.

Or maybe %h should be used, or a new substitution letter?  At any rate, the 
problem was that the way it was, if clients connected to one host/IP address 
to install a printer, Samba would tell them to connect to a different host 
instead.  This screwed up some HA environments we were considering, because we 
really wanted the clients to be connected to the one they specified.  And it 
seems like you'd get in trouble with printers and terminal server too, since 
aliases are often recommended with TS.

> 'smb ports = 139' will disable netbios-less CIFS on port 445.

Ooh, yes it would.  We may have to resort to this, but it would be nice not to 
have to.
Comment 6 Gerald (Jerry) Carter (dead mail address) 2004-06-03 11:42:30 UTC
This should be fixed in 3.0.4
Comment 7 Gerald (Jerry) Carter (dead mail address) 2005-02-07 07:39:57 UTC
originally reported against 3.0.3pre1.  Moving back to version to 3.0.2a
to remove preX and rcX versions.
Comment 8 Gerald (Jerry) Carter (dead mail address) 2005-02-07 07:42:18 UTC
originally reported against 3.0.3pre2.  Moving back to version to 3.0.2a
to remove preX and rcX versions.
Comment 9 Gerald (Jerry) Carter (dead mail address) 2005-08-24 10:23:02 UTC
sorry for the same, cleaning up the database to prevent unecessary reopens of bugs.