browselist bug in Multibyte environment

Hiroshi MIURA miura at
Wed Aug 9 09:21:10 GMT 2000

I found a bug and make patch.
The problem was reported before.

I attached a patch. This patch is for the cvs repository

The problem only happens with Japanese.

Main issue is that the function 'cli_NetServerEnum()' in libsmb/clirap.c
is called from  client/client.c and nmbd/nmbd_synclists.c(line 105 and 53).
In client.c, its internal charcode is UNIX code and an internal code of 
the nmbd_synclists.c is DOS code. cli_NetServerEnum() assumes the 
code is UNIX code in callback function.

The function "callback" in line 53 on nmbd_synclists.c, it writes "browse.dat".
Its file must be written with the DOS code, bacause any other in functions in nmbd
is NOT convert internal code to UNIX code. 

The patch is fix the cli_NetServerEnum() to use DOS code for its internal
char code.


In message "browselist bug in Multibyte environment"
    on 00/07/06, Hiroshi MIURA <miura at> writes:
> I've reciept a bug report in samba 2.0.6 and later.
> The problem as follows:
> He, the reporter, use a multibyte netbios name. In MS specification,
> it is ok that we use multibyte netbios name on the NT and the 95/98.
> In this case, coding system=euc and client code page =932.
> But, now, he saw a MOJI BAKE (unintelligible sequence of characters)
> on his 'Netowork Computer' on the Windows desktop.
> I am starting read nmbd soruces, but I cannot understand the logic, yet.
> I am trying to reappear it, and I get it. For investigating, 
> I look into  the browse.dat, so it has two same name with diferrent
> codes. When I set up coding sysmtem to EUC, so in the browse.dat
> there are EUC(unix code) name and SJIS(windows native code) name.
> That , I think, is because that some function in nmbd 
> forget a transform function call which convert sjis to euc
> (unix_to_dos() or dos_to_unix()).

--- source/client/client.c.orig	Thu Jun  1 04:28:49 2000
+++ source/client/client.c	Wed Aug  9 17:50:46 2000
@@ -1577,7 +1577,8 @@
 static void server_fn(const char *name, uint32 m, const char *comment)
-        printf("\t%-16.16s     %s\n", name, comment);
+        printf("\t%-16.16s     %s\n", dos_to_unix((char *)name, False), 
+			              dos_to_unix((char *)comment, False));
--- source/libsmb/clirap.c.orig	Wed Aug  9 17:35:09 2000
+++ source/libsmb/clirap.c	Wed Aug  9 17:35:50 2000
@@ -262,8 +262,6 @@
 				stype = IVAL(p,18) & ~SV_TYPE_LOCAL_LIST_ONLY;
-				dos_to_unix(sname, True);
-				dos_to_unix(cmnt, True);
 				fn(sname, stype, cmnt);
--- source/smbwrapper/smbw_dir.c.orig	Wed Aug  9 17:45:56 2000
+++ source/smbwrapper/smbw_dir.c	Wed Aug  9 17:46:27 2000
@@ -128,6 +128,8 @@
 	pstrcpy(, name);
 	finfo.mode = aRONLY | aDIR;	
+	dos_to_unix(, True);
 	smbw_dir_add(&finfo, NULL);
--- source/utils/torture.c.orig	Wed Aug  9 17:46:40 2000
+++ source/utils/torture.c	Wed Aug  9 17:48:50 2000
@@ -1238,7 +1238,7 @@
 static void browse_callback(const char *sname, uint32 stype, 
 			    const char *comment)
-	printf("\t%20.20s %08x %s\n", sname, stype, comment);
+	printf("\t%20.20s %08x %s\n", dos_to_unix((char *)sname, False), stype, dos_to_unix((char *)comment, False));

SAMBA User Group Japan,  staff
Linux Kernel Hack Japan (Now Constructing)
Project BLUE
三浦広志 ----- MIURA, Hiroshi

More information about the samba-technical mailing list