mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
patch to fix NetServerEnum with multiple workgroup lists kindly supplied.
it works for him. needs testing.
(This used to be commit 546c490807
)
This commit is contained in:
parent
7a804a2e83
commit
601281a43b
@ -747,32 +747,45 @@ struct srv_info_struct
|
||||
|
||||
/*******************************************************************
|
||||
filter out unwanted server info
|
||||
This function returns True if the entry is wanted.
|
||||
******************************************************************/
|
||||
static BOOL filter_server_info(struct srv_info_struct *server,
|
||||
BOOL domains,
|
||||
char *domain, uint32 request)
|
||||
{
|
||||
/* If no domain was specified, */
|
||||
if (*domain == 0)
|
||||
{
|
||||
/* If entry's domain matches this server's domain,
|
||||
accept this entry. */
|
||||
if (strequal(lp_workgroup(), server->domain)) {
|
||||
return True;
|
||||
}
|
||||
|
||||
/* If specific domain requested, reject this entry. */
|
||||
else if (domains)
|
||||
{
|
||||
DEBUG(4,("primary domain:reject %8x %s %s\n",request,server->name,server->domain));
|
||||
return False;
|
||||
}
|
||||
|
||||
/* If the request was for a list of domain enumerators,
|
||||
we don't care what domain this entry is in as long
|
||||
as it is a domain enumerator. */
|
||||
else if ((request & SV_TYPE_DOMAIN_ENUM) &&
|
||||
(server->type & SV_TYPE_DOMAIN_ENUM))
|
||||
{
|
||||
DEBUG(4,("rej:DOM %8x: %s %s\n",server->type,server->name,server->domain));
|
||||
return False;
|
||||
return True;
|
||||
}
|
||||
|
||||
return True;
|
||||
DEBUG(4,("wrong domain: %8x: %s %s\n",server->type,server->name,server->domain));
|
||||
return False;
|
||||
}
|
||||
|
||||
/* If a domain name was specified, */
|
||||
else
|
||||
{
|
||||
/* If this entry is in the requested domain, */
|
||||
if (strequal(domain, server->domain))
|
||||
{
|
||||
/*
|
||||
@ -792,11 +805,15 @@ static BOOL filter_server_info(struct srv_info_struct *server,
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
/* If the user didn't pick a domain,
|
||||
(I don't think this can happen.) */
|
||||
else if (!domains)
|
||||
{
|
||||
DEBUG(4,("domain:%s %s %s\n",domain,server->name,server->domain));
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
}
|
||||
@ -871,6 +888,7 @@ static int get_server_info(uint32 servertype,
|
||||
ok = False;
|
||||
}
|
||||
|
||||
/* If all server, reject DOMIAN_ENUM entries? */
|
||||
if ((servertype == ~SV_TYPE_DOMAIN_ENUM) &&
|
||||
(s->type & SV_TYPE_DOMAIN_ENUM))
|
||||
{
|
||||
@ -878,6 +896,8 @@ static int get_server_info(uint32 servertype,
|
||||
ok = False;
|
||||
}
|
||||
|
||||
/* If a domain is specified, reject all except the
|
||||
domain enumerators for the specified domain. */
|
||||
if (domains && !(domain && *domain && strequal(domain, s->domain)))
|
||||
{
|
||||
if (!(s->type & SV_TYPE_DOMAIN_ENUM))
|
||||
@ -1035,11 +1055,13 @@ static BOOL api_RNetServerEnum(int cnum, int uid, char *param, char *data,
|
||||
if (strcmp(str1, "WrLehDO") == 0)
|
||||
{
|
||||
domains = False;
|
||||
DEBUG(4, ("all domains\n"));
|
||||
}
|
||||
else if (strcmp(str1, "WrLehDz") == 0)
|
||||
{
|
||||
domains = True;
|
||||
StrnCpy(domain, p, sizeof(fstring)-1);
|
||||
DEBUG(4, ("domains must match \"%s\"\n", domains));
|
||||
}
|
||||
|
||||
if (lp_browse_list())
|
||||
@ -1051,6 +1073,7 @@ static BOOL api_RNetServerEnum(int cnum, int uid, char *param, char *data,
|
||||
|
||||
qsort(servers,total,sizeof(servers[0]),QSORT_CAST srv_comp);
|
||||
|
||||
/* A dry run */
|
||||
{
|
||||
char *lastname=NULL;
|
||||
|
||||
@ -1085,6 +1108,7 @@ static BOOL api_RNetServerEnum(int cnum, int uid, char *param, char *data,
|
||||
f_len = fixed_len;
|
||||
s_len = string_len;
|
||||
|
||||
/* the real thing */
|
||||
{
|
||||
char *lastname=NULL;
|
||||
int count2 = counted;
|
||||
|
Loading…
Reference in New Issue
Block a user