Greetings! I propose to make an optional argument '-r' for findsmb utility to pass '-r' option to nmblookup optionally and default to omit it. The reason is to have findsmb working more user-friendly in contemporary office environments where Windows 95/98 boxes are rare and also to allow usage of the utility under non-priviledged accounts when Windows95/98 boxes are in minority or even absent in network neighbourhood.
An attached patch provides this change for HEAD together with documentation changes. -- / Alexander Bokovoy --- Don't get to bragging.
Index: docs/docbook/manpages/findsmb.1.sgml =================================================================== RCS file: /cvsroot/samba/docs/docbook/manpages/findsmb.1.sgml,v retrieving revision 1.4 diff -u -r1.4 findsmb.1.sgml --- docs/docbook/manpages/findsmb.1.sgml 18 Oct 2002 22:16:08 -0000 1.4 +++ docs/docbook/manpages/findsmb.1.sgml 10 Jan 2003 14:21:00 -0000 @@ -40,6 +40,15 @@ <variablelist> <varlistentry> + <term>-r</term> + <listitem><para>Controls whether <command>findsmb</command> takes + bugs in Windows95 into account when trying to find a Netbios name + registered of the remote machine. This option is disabled by default + because it is specific to Windows 95 and Windows 95 machines only. + If set, <ulink +url="nmblookup.1.html"><command>nmblookup</command></ulink> + will be called with <constant>-B<constant> option.</para></listitem> + </varlistentry> + <varlistentry> <term>subnet broadcast address</term> <listitem><para>Without this option, <command>findsmb </command> will probe the subnet of the machine where @@ -66,15 +75,17 @@ not show any information about the operating system or server version.</para> - <para>The command must be run on a system without <ulink + <para>The command with <constant>-r</constant> option + must be run on a system without <ulink url="nmbd.8.html"><command>nmbd</command></ulink> running. If <command>nmbd</command> is running on the system, you will only get the IP address and the DNS name of the machine. To get proper responses from Windows 95 and Windows 98 machines, - the command must be run as root. </para> + the command must be run as root and with <constant>-r</constant> + option on a machine without <command>nmbd</command> running.</para> - <para>For example, running <command>findsmb</command> on a machine - without <command>nmbd</command> running would yield output similar + <para>For example, running <command>findsmb</command> without + <constant>-r</constant> option set would yield output similar to the following</para> <screen><computeroutput> Index: source/script/findsmb.in =================================================================== RCS file: /cvsroot/samba/source/script/findsmb.in,v retrieving revision 1.2 diff -u -r1.2 findsmb.in --- source/script/findsmb.in 9 May 2002 13:52:06 -0000 1.2 +++ source/script/findsmb.in 10 Jan 2003 14:21:05 -0000 @@ -5,7 +5,7 @@ # run as root to get correct info from WIN95 clients. # # syntax: -# findsmb [subnet broadcast address] +# findsmb [-d|-D] [-r] [subnet broadcast address] # # with no agrument it will list machines on the current subnet # @@ -13,21 +13,28 @@ # local master browsers for that workgroup. There will be an "*" in front # of the workgroup name for machines that are the domain master browser for # that workgroup. +# +# Options: +# +# -d|-D enable debug +# -r add -r option to nmblookup when finding netbios name # $SAMBABIN = "@prefix@/bin"; -for ($i = 0; $i < 2; $i++) { # test for -d option and broadcast address +for ($i = 0; $i < 2; $i++) { # test for -d and -r options $_ = shift; if (m/-d|-D/) { $DEBUG = 1; - } else { - if ($_) { - $BCAST = "-B $_"; - } + } else (m/-r/) { + $R_OPTION = "-r"; } } +if ($_) { # set broadcast address if it was specified + $BCAST = "-B $_"; +} + sub ipsort # do numeric sort on last field of IP address { @t1 = split(/\./,$a); @@ -56,7 +63,7 @@ # find the netbios names registered by each machine - open(NMBLOOKUP,"$SAMBABIN/nmblookup -r -A $ip|") || + open(NMBLOOKUP,"$SAMBABIN/nmblookup $R_OPTION -A $ip|") || die("Can't get nmb name list.\n"); @nmblookup = <NMBLOOKUP>; close NMBLOOKUP;