1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-11 08:23:49 +03:00

Ensure browse.dat is written and read in UNIX character set format.

Jeremy.
This commit is contained in:
Jeremy Allison
-
parent d9eedd5db1
commit 279d0ec656
2 changed files with 14 additions and 3 deletions

View File

@@ -237,6 +237,7 @@ BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
p += 4; p += 4;
pstrcpy(p, workgroup); pstrcpy(p, workgroup);
unix_to_dos(p, True);
p = skip_string(p,1); p = skip_string(p,1);
if (cli_api(cli, if (cli_api(cli,

View File

@@ -49,13 +49,13 @@ static FILE *fp;
/******************************************************************* /*******************************************************************
This is the NetServerEnum callback. This is the NetServerEnum callback.
Note sname and comment are in UNIX codepage format.
******************************************************************/ ******************************************************************/
static void callback(const char *sname, uint32 stype, const char *comment) static void callback(const char *sname, uint32 stype, const char *comment)
{ {
fprintf(fp,"\"%s\" %08X \"%s\"\n", sname, stype, comment); fprintf(fp,"\"%s\" %08X \"%s\"\n", sname, stype, comment);
} }
/******************************************************************* /*******************************************************************
Synchronise browse lists with another browse server. Synchronise browse lists with another browse server.
Log in on the remote server's SMB port to their IPC$ service, Log in on the remote server's SMB port to their IPC$ service,
@@ -67,6 +67,7 @@ static void sync_child(char *name, int nm_type,
char *fname) char *fname)
{ {
extern fstring local_machine; extern fstring local_machine;
fstring unix_workgroup;
static struct cli_state cli; static struct cli_state cli;
uint32 local_type = local ? SV_TYPE_LOCAL_LIST_ONLY : 0; uint32 local_type = local ? SV_TYPE_LOCAL_LIST_ONLY : 0;
struct nmb_name called, calling; struct nmb_name called, calling;
@@ -101,14 +102,20 @@ static void sync_child(char *name, int nm_type,
return; return;
} }
/* All the cli_XX functions take UNIX character set. */
fstrcpy(unix_workgroup, cli.server_domain?cli.server_domain:workgroup);
dos_to_unix(unix_workgroup, True);
/* Fetch a workgroup list. */ /* Fetch a workgroup list. */
cli_NetServerEnum(&cli, cli.server_domain?cli.server_domain:workgroup, cli_NetServerEnum(&cli, unix_workgroup,
local_type|SV_TYPE_DOMAIN_ENUM, local_type|SV_TYPE_DOMAIN_ENUM,
callback); callback);
/* Now fetch a server list. */ /* Now fetch a server list. */
if (servers) { if (servers) {
cli_NetServerEnum(&cli, workgroup, fstrcpy(unix_workgroup, workgroup);
dos_to_unix(unix_workgroup, True);
cli_NetServerEnum(&cli, unix_workgroup,
local?SV_TYPE_LOCAL_LIST_ONLY:SV_TYPE_ALL, local?SV_TYPE_LOCAL_LIST_ONLY:SV_TYPE_ALL,
callback); callback);
} }
@@ -248,6 +255,9 @@ static void complete_sync(struct sync_record *s)
ptr = line; ptr = line;
/* The line is written in UNIX character set. Convert to DOS codepage. */
unix_to_dos(line,True);
if (!next_token(&ptr,server,NULL,sizeof(server)) || if (!next_token(&ptr,server,NULL,sizeof(server)) ||
!next_token(&ptr,type_str,NULL, sizeof(type_str)) || !next_token(&ptr,type_str,NULL, sizeof(type_str)) ||
!next_token(&ptr,comment,NULL, sizeof(comment))) { !next_token(&ptr,comment,NULL, sizeof(comment))) {