[PATCH] (final) winbind use default domain [HEAD] [SAMBA_2_2]
Alexander Bokovoy
a.bokovoy at sam-solutions.net
Thu Dec 20 11:52:03 GMT 2001
On Thu, Dec 20, 2001 at 09:08:07PM +0200, Alexander Bokovoy wrote:
> On Thu, Dec 20, 2001 at 04:24:33PM +0200, Alexander Bokovoy wrote:
> > This is new version of 'winbind use default domain' patch which
> > adds forgotten change for nsswitch/wb_client.c. Additionally patch for
> > SAMBA_2_2 branch attached as well.
> Please ignore SAMBA_2_2-related patch for a while, it needs more work.
Fixed both patches, should be usefull now (they pass my tests at least).
Problem was with uninitialized global_myworkgroup (forgot to add changed
source/nsswitch/winbindd.c into patch set) and non-restored separator in
some (very rare) cases.
--
/ Alexander Bokovoy
$ cat /proc/identity >~/.signature
`Senior software developer and analyst for SaM-Solutions Ltd.`
---
Nov 21 20:58:58 alconost kernel: VFS: Busy inodes after unmount.
Self-destruct in 5 seconds. Have a nice day...
-------------- next part --------------
diff -urk.orig samba-2.2.2/source/param/loadparm.c.orig samba-2.2.2/source/param/loadparm.c
--- samba-2.2.2/source/param/loadparm.c.workgroup Thu Dec 20 16:08:19 2001
+++ samba-2.2.2/source/param/loadparm.c Thu Dec 20 16:09:15 2001
@@ -170,6 +170,7 @@
char *szWinbindSeparator;
BOOL bWinbindEnumUsers;
BOOL bWinbindEnumGroups;
+ BOOL bWinbindUseDefaultDomain;
char *szAddShareCommand;
char *szChangeShareCommand;
char *szDeleteShareCommand;
@@ -1059,6 +1060,7 @@
{"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, 0},
{"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, 0},
{"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, 0},
+ {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, 0},
{NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0}
};
@@ -1385,6 +1387,7 @@
Globals.bWinbindEnumUsers = True;
Globals.bWinbindEnumGroups = True;
+ Globals.bWinbindUseDefaultDomain = False;
/*
* This must be done last as it checks the value in
@@ -1518,6 +1521,7 @@
FN_GLOBAL_STRING(lp_winbind_separator, &Globals.szWinbindSeparator)
FN_GLOBAL_BOOL(lp_winbind_enum_users, &Globals.bWinbindEnumUsers)
FN_GLOBAL_BOOL(lp_winbind_enum_groups, &Globals.bWinbindEnumGroups)
+FN_GLOBAL_BOOL(lp_winbind_use_default_domain, &Globals.bWinbindUseDefaultDomain)
FN_GLOBAL_STRING(lp_codepagedir,&Globals.szCodePageDir)
#ifdef WITH_LDAP_SAM
FN_GLOBAL_STRING(lp_ldap_server, &Globals.szLdapServer)
diff -uk.workgroup samba-2.2.2/source/nsswitch/wb_client.c.workgroup samba-2.2.2/source/nsswitch/wb_client.c
--- samba-2.2.2/source/nsswitch/wb_client.c.workgroup Fri Dec 7 11:44:59 2001
+++ samba-2.2.2/source/nsswitch/wb_client.c Thu Dec 20 20:25:52 2001
@@ -31,20 +31,28 @@
/* Copy of parse_domain_user from winbindd_util.c. Parse a string of the
form DOMAIN/user into a domain and a user */
-
-static BOOL parse_domain_user(char *domuser, fstring domain, fstring user)
+ /* Parse a string of the form DOMAIN/user into a domain and a user */
+extern fstring global_myworkgroup;
+
+static BOOL parse_domain_user(const char *domuser, fstring domain, fstring user)
{
- char *p = strchr(domuser,*lp_winbind_separator());
-
- if (!p)
- return False;
-
- fstrcpy(user, p+1);
- fstrcpy(domain, domuser);
- domain[PTR_DIFF(p, domuser)] = 0;
- strupper(domain);
- return True;
+ char *p = strchr(domuser,*lp_winbind_separator());
+
+ if (!(p || lp_winbind_use_default_domain()))
+ return False;
+
+ if(!p && lp_winbind_use_default_domain()) {
+ fstrcpy(user, domuser);
+ fstrcpy(domain, global_myworkgroup);
+ } else {
+ fstrcpy(user, p+1);
+ fstrcpy(domain, domuser);
+ domain[PTR_DIFF(p, domuser)] = 0;
+ }
+ strupper(domain);
+ return True;
}
+
/* Call winbindd to convert a name to a sid */
diff -uk.workgroup samba-2.2.2/source/nsswitch/winbindd.c.workgroup samba-2.2.2/source/nsswitch/winbindd.c
--- samba-2.2.2/source/nsswitch/winbindd.c.workgroup Tue Dec 18 11:50:34 2001
+++ samba-2.2.2/source/nsswitch/winbindd.c Thu Dec 20 21:24:19 2001
@@ -25,6 +25,7 @@
extern pstring debugf;
pstring servicesf = CONFIGFILE;
+extern fstring global_myworkgroup;
/* List of all connected clients */
@@ -49,6 +50,7 @@
reopen_logs();
ret = lp_load(servicesf,False,False,True);
+ fstrcpy(global_myworkgroup, lp_workgroup());
snprintf(debugf, sizeof(debugf), "%s/log.winbindd", LOGFILEBASE);
reopen_logs();
diff -uk.workgroup samba-2.2.2/source/nsswitch/winbindd_group.c.workgroup samba-2.2.2/source/nsswitch/winbindd_group.c
--- samba-2.2.2/source/nsswitch/winbindd_group.c.workgroup Tue Dec 18 11:50:34 2001
+++ samba-2.2.2/source/nsswitch/winbindd_group.c Thu Dec 20 21:19:28 2001
@@ -24,6 +24,7 @@
#include "winbindd.h"
+extern fstring global_myworkgroup;
/***************************************************************
Empty static struct for negative caching.
****************************************************************/
@@ -40,13 +41,35 @@
gr->gr_gid = unix_gid;
/* Group name and password */
-
safe_strcpy(gr->gr_name, gr_name, sizeof(gr->gr_name) - 1);
safe_strcpy(gr->gr_passwd, "x", sizeof(gr->gr_passwd) - 1);
return True;
}
+/*
+ Strip domain name if it is same as default domain name and
+ winbind use default domain = true
+
+ it assumes that name is actually fstring so that memory management
+ isn't needed.
+*/
+static void strip_domain_name_if_needed(fstring *name)
+{
+ if(lp_winbind_use_default_domain()) {
+ char *sep = lp_winbind_separator();
+ char *new_name = strchr(*name, *sep);
+ if(new_name) {
+ *new_name = 0;
+ if (!strcmp(global_myworkgroup, *name)) {
+ new_name++;
+ safe_strcpy(*name, new_name, sizeof(fstring));
+ } else
+ *new_name = *sep;
+ }
+ }
+}
+
/* Fill in the group membership field of a NT group given by group_rid */
static BOOL fill_grent_mem(struct winbindd_domain *domain,
@@ -136,6 +159,7 @@
snprintf(name, sizeof(name), "%s%s%s", domain->name,
lp_winbind_separator(), the_name);
+ strip_domain_name_if_needed(&name);
len = strlen(name);
@@ -366,6 +390,7 @@
if (strcmp(lp_winbind_separator(),"\\"))
string_sub(group_name, "\\", lp_winbind_separator(),
sizeof(fstring));
+ strip_domain_name_if_needed(&group_name);
if (!((name_type == SID_NAME_ALIAS) ||
(name_type == SID_NAME_DOM_GRP))) {
@@ -669,6 +694,8 @@
"%s%s%s", ent->domain->name, lp_winbind_separator(),
name_list[ent->sam_entry_index].acct_name);
+ strip_domain_name_if_needed(&domain_group_name);
+
result = fill_grent(&group_list[group_list_ndx],
domain_group_name, group_gid);
@@ -885,6 +912,8 @@
snprintf(name, sizeof(name), "%s%s%s", domain->name,
lp_winbind_separator(), group_name);
+
+ strip_domain_name_if_needed(&name);
/* Append to extra data */
diff -uk.workgroup samba-2.2.2/source/nsswitch/winbindd_user.c.workgroup samba-2.2.2/source/nsswitch/winbindd_user.c
--- samba-2.2.2/source/nsswitch/winbindd_user.c.workgroup Tue Dec 18 11:50:34 2001
+++ samba-2.2.2/source/nsswitch/winbindd_user.c Thu Dec 20 21:36:56 2001
@@ -24,6 +24,8 @@
#include "winbindd.h"
+extern fstring global_myworkgroup;
+
/* Fill a pwent structure with information we have obtained */
static BOOL winbindd_fill_pwent(char *domain_name, char *name,
@@ -91,6 +93,30 @@
return True;
}
+/*
+ Strip domain name if it is same as default domain name and
+ winbind use default domain = true
+
+ it assumes that name is actually fstring so that memory management
+ isn't needed.
+ */
+static void strip_domain_name_if_needed(fstring *name)
+{
+ if(lp_winbind_use_default_domain()) {
+ char *sep = lp_winbind_separator();
+ char *new_name = strchr(*name, *sep);
+ if(new_name) {
+ *new_name = 0;
+ if (!strcmp(global_myworkgroup, *name)) {
+ new_name++;
+ safe_strcpy(*name, new_name, sizeof(fstring));
+ } else
+ *new_name = *sep;
+ }
+ }
+}
+
+
/************************************************************************
Empty static struct for negative caching.
*************************************************************************/
@@ -118,7 +144,7 @@
if (!parse_domain_user(state->request.data.username, name_domain,
name_user))
return WINBINDD_ERROR;
-
+
if ((domain = find_domain_from_name(name_domain)) == NULL) {
DEBUG(5, ("No such domain: %s\n", name_domain));
return WINBINDD_ERROR;
@@ -191,6 +217,7 @@
return WINBINDD_OK;
}
+
/* Return a password structure given a uid number */
enum winbindd_result winbindd_getpwnam_from_uid(struct winbindd_cli_state *state)
@@ -252,6 +279,7 @@
if (strcmp("\\", lp_winbind_separator()))
string_sub(user_name, "\\", lp_winbind_separator(),
sizeof(fstring));
+ strip_domain_name_if_needed(&user_name);
/* Get some user info */
@@ -580,6 +608,8 @@
slprintf(domain_user_name, sizeof(domain_user_name) - 1,
"%s%s%s", ent->domain->name, sep,
name_list[ent->sam_entry_index].name);
+
+ strip_domain_name_if_needed(&domain_user_name);
result = winbindd_fill_pwent(
ent->domain->name,
@@ -692,6 +722,7 @@
slprintf(name, sizeof(name) - 1, "%s%s%s",
domain->name, lp_winbind_separator(),
acct_name);
+ strip_domain_name_if_needed(&name);
/* Append to extra data */
diff -uk.workgroup samba-2.2.2/source/nsswitch/winbindd_util.c.workgroup samba-2.2.2/source/nsswitch/winbindd_util.c
--- samba-2.2.2/source/nsswitch/winbindd_util.c.workgroup Mon Dec 17 13:32:03 2001
+++ samba-2.2.2/source/nsswitch/winbindd_util.c Thu Dec 20 21:36:43 2001
@@ -900,18 +900,25 @@
return False;
}
-/* Parse a string of the form DOMAIN/user into a domain and a user */
-
-BOOL parse_domain_user(char *domuser, fstring domain, fstring user)
+ /* Parse a string of the form DOMAIN/user into a domain and a user */
+extern fstring global_myworkgroup;
+
+BOOL parse_domain_user(const char *domuser, fstring domain, fstring user)
{
- char *p = strchr(domuser,*lp_winbind_separator());
-
- if (!p)
- return False;
-
- fstrcpy(user, p+1);
- fstrcpy(domain, domuser);
- domain[PTR_DIFF(p, domuser)] = 0;
- strupper(domain);
- return True;
+ char *p = strchr(domuser,*lp_winbind_separator());
+
+ if (!(p || lp_winbind_use_default_domain()))
+ return False;
+
+ if(!p && lp_winbind_use_default_domain()) {
+ fstrcpy(user, domuser);
+ fstrcpy(domain, global_myworkgroup);
+ } else {
+ fstrcpy(user, p+1);
+ fstrcpy(domain, domuser);
+ domain[PTR_DIFF(p, domuser)] = 0;
+ }
+ strupper(domain);
+ return True;
}
+
-------------- next part --------------
diff -uk.orig samba-3.0/source/nsswitch/winbindd.c.orig samba-3.0/source/nsswitch/winbindd.c
--- samba-3.0/source/nsswitch/winbindd.c.orig Mon Dec 17 10:44:17 2001
+++ samba-3.0/source/nsswitch/winbindd.c Wed Dec 19 18:12:38 2001
@@ -24,7 +24,7 @@
#include "winbindd.h"
extern pstring debugf;
-
+extern fstring global_myworkgroup;
/* List of all connected clients */
struct winbindd_cli_state *client_list;
@@ -49,6 +49,7 @@
reopen_logs();
ret = lp_load(dyn_CONFIGFILE,False,False,True);
+ fstrcpy(global_myworkgroup, lp_workgroup());
reopen_logs();
load_interfaces();
diff -uk.orig samba-3.0/source/param/loadparm.c.orig samba-3.0/source/param/loadparm.c
--- samba-3.0/source/param/loadparm.c.orig Mon Dec 17 10:44:17 2001
+++ samba-3.0/source/param/loadparm.c Wed Dec 19 18:12:38 2001
@@ -155,6 +155,7 @@
char *szWinbindSeparator;
BOOL bWinbindEnumUsers;
BOOL bWinbindEnumGroups;
+ BOOL bWinbindUseDefaultDomain;
char *szAddShareCommand;
char *szChangeShareCommand;
char *szDeleteShareCommand;
@@ -1042,6 +1043,7 @@
{"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, 0},
{"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, 0},
{"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, 0},
+ {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, 0},
{NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0}
};
@@ -1367,6 +1369,7 @@
Globals.winbind_cache_time = 15;
Globals.bWinbindEnumUsers = True;
Globals.bWinbindEnumGroups = True;
+ Globals.bWinbindUseDefaultDomain = False;
Globals.bUseSpnego = True;
@@ -1510,6 +1513,7 @@
FN_GLOBAL_STRING(lp_winbind_separator, &Globals.szWinbindSeparator)
FN_GLOBAL_BOOL(lp_winbind_enum_users, &Globals.bWinbindEnumUsers)
FN_GLOBAL_BOOL(lp_winbind_enum_groups, &Globals.bWinbindEnumGroups)
+FN_GLOBAL_BOOL(lp_winbind_use_default_domain, &Globals.bWinbindUseDefaultDomain)
#ifdef WITH_LDAP_SAM
FN_GLOBAL_STRING(lp_ldap_server, &Globals.szLdapServer)
FN_GLOBAL_STRING(lp_ldap_suffix, &Globals.szLdapSuffix)
diff -uk.orig samba-3.0/source/nsswitch/winbindd_group.c.orig samba-3.0/source/nsswitch/winbindd_group.c
--- samba-3.0/source/nsswitch/winbindd_group.c.orig Tue Dec 18 11:31:38 2001
+++ samba-3.0/source/nsswitch/winbindd_group.c Wed Dec 19 18:12:39 2001
@@ -24,6 +24,7 @@
#include "winbindd.h"
+extern fstring global_myworkgroup;
/***************************************************************
Empty static struct for negative caching.
****************************************************************/
@@ -38,13 +39,34 @@
gr->gr_gid = unix_gid;
/* Group name and password */
-
safe_strcpy(gr->gr_name, gr_name, sizeof(gr->gr_name) - 1);
safe_strcpy(gr->gr_passwd, "x", sizeof(gr->gr_passwd) - 1);
return True;
}
+/*
+ Strip domain name if it is same as default domain name and
+ winbind use default domain = true
+
+ it assumes that name is actually fstring so that memory management
+ isn't needed.
+*/
+static void strip_domain_name_if_needed(fstring *name)
+{
+ if(lp_winbind_use_default_domain()) {
+ char *sep = lp_winbind_separator();
+ char *new_name = strchr(*name, *sep);
+ if(new_name) {
+ *new_name = 0;
+ if (!strcmp(global_myworkgroup, *name)) {
+ new_name++;
+ safe_strcpy(*name, new_name, sizeof(fstring));
+ } else *new_name = *sep;
+ }
+ }
+}
+
/* Fill in the group membership field of a NT group given by group_rid */
static BOOL fill_grent_mem(struct winbindd_domain *domain,
@@ -134,6 +156,7 @@
snprintf(name, sizeof(name), "%s%s%s", domain->name,
lp_winbind_separator(), the_name);
+ strip_domain_name_if_needed(&name);
len = strlen(name);
@@ -306,6 +329,7 @@
if (strcmp(lp_winbind_separator(),"\\"))
string_sub(group_name, "\\", lp_winbind_separator(),
sizeof(fstring));
+ strip_domain_name_if_needed(&group_name);
if (!((name_type == SID_NAME_ALIAS) ||
(name_type == SID_NAME_DOM_GRP))) {
@@ -563,6 +587,8 @@
"%s%s%s", ent->domain->name, lp_winbind_separator(),
name_list[ent->sam_entry_index].acct_name);
+ strip_domain_name_if_needed(&domain_group_name);
+
result = fill_grent(&group_list[group_list_ndx],
domain_group_name, group_gid);
@@ -727,13 +753,20 @@
groups.sam_entries)[i].acct_name;
fstring name;
- snprintf(name, sizeof(name), "%s%s%s", domain->name,
- lp_winbind_separator(), group_name);
-
- /* Append to extra data */
- memcpy(&extra_data[extra_data_len], name,
- strlen(name));
- extra_data_len += strlen(name);
+ if(!lp_winbind_use_default_domain()) {
+ snprintf(name, sizeof(name), "%s%s%s", domain->name,
+ lp_winbind_separator(), group_name);
+
+ /* Append to extra data */
+ memcpy(&extra_data[extra_data_len], name,
+ strlen(name));
+ extra_data_len += strlen(name);
+ } else {
+ /* Append to extra data */
+ memcpy(&extra_data[extra_data_len], group_name,
+ strlen(group_name));
+ extra_data_len += strlen(name);
+ }
extra_data[extra_data_len++] = ',';
}
diff -uk.orig samba-3.0/source/nsswitch/winbindd_user.c.orig samba-3.0/source/nsswitch/winbindd_user.c
--- samba-3.0/source/nsswitch/winbindd_user.c.orig Tue Dec 11 18:51:41 2001
+++ samba-3.0/source/nsswitch/winbindd_user.c Wed Dec 19 18:12:54 2001
@@ -24,6 +24,8 @@
#include "winbindd.h"
+extern fstring global_myworkgroup;
+
/* Fill a pwent structure with information we have obtained */
static BOOL winbindd_fill_pwent(char *domain_name, char *name,
@@ -91,6 +93,28 @@
return True;
}
+/*
+ Strip domain name if it is same as default domain name and
+ winbind use default domain = true
+
+ it assumes that name is actually fstring so that memory management
+ isn't needed.
+*/
+static void strip_domain_name_if_needed(fstring *name)
+{
+ if(lp_winbind_use_default_domain()) {
+ char *sep = lp_winbind_separator();
+ char *new_name = strchr(*name, *sep);
+ if(new_name) {
+ *new_name = 0;
+ if (!strcmp(global_myworkgroup, *name)) {
+ new_name++;
+ safe_strcpy(*name, new_name, sizeof(fstring));
+ } else *new_name = *sep;
+ }
+ }
+}
+
/* Return a password structure from a username. */
enum winbindd_result winbindd_getpwnam_from_user(struct winbindd_cli_state *state)
@@ -165,6 +189,7 @@
return WINBINDD_OK;
}
+
/* Return a password structure given a uid number */
enum winbindd_result winbindd_getpwnam_from_uid(struct winbindd_cli_state *state)
@@ -213,6 +238,7 @@
if (strcmp("\\", lp_winbind_separator()))
string_sub(user_name, "\\", lp_winbind_separator(),
sizeof(fstring));
+ strip_domain_name_if_needed(&user_name);
/* Get some user info */
@@ -487,6 +513,8 @@
slprintf(domain_user_name, sizeof(domain_user_name) - 1,
"%s%s%s", ent->domain->name, sep,
name_list[ent->sam_entry_index].name);
+
+ strip_domain_name_if_needed(&domain_user_name);
result = winbindd_fill_pwent(
ent->domain->name,
@@ -583,14 +611,21 @@
fstrcpy(acct_name, info[i].acct_name);
}
- slprintf(name, sizeof(name) - 1, "%s%s%s",
- domain->name, lp_winbind_separator(),
- acct_name);
+ if(!lp_winbind_use_default_domain()) {
+ slprintf(name, sizeof(name) - 1, "%s%s%s",
+ domain->name, lp_winbind_separator(),
+ acct_name);
/* Append to extra data */
- memcpy(&extra_data[extra_data_len], name,
- strlen(name));
- extra_data_len += strlen(name);
+ memcpy(&extra_data[extra_data_len], name,
+ strlen(name));
+ extra_data_len += strlen(name);
+ } else {
+ /* Append to extra data */
+ memcpy(&extra_data[extra_data_len], acct_name,
+ strlen(acct_name));
+ extra_data_len += strlen(acct_name);
+ }
extra_data[extra_data_len++] = ',';
}
}
diff -uk.orig samba-3.0/source/nsswitch/wb_client.c.orig samba-3.0/source/nsswitch/wb_client.c
--- samba-3.0/source/nsswitch/wb_client.c.orig 13 Dec 2001 11:58:38 -0000 1.32
+++ samba-3.0/source/nsswitch/wb_client.c 20 Dec 2001 14:15:59 -0000
@@ -32,17 +32,23 @@
/* Copy of parse_domain_user from winbindd_util.c. Parse a string of the
form DOMAIN/user into a domain and a user */
+extern fstring global_myworkgroup;
static BOOL parse_domain_user(const char *domuser, fstring domain, fstring user)
{
char *p = strchr(domuser,*lp_winbind_separator());
- if (!p)
+ if (!(p || lp_winbind_use_default_domain()))
return False;
-
- fstrcpy(user, p+1);
- fstrcpy(domain, domuser);
- domain[PTR_DIFF(p, domuser)] = 0;
+
+ if(!p && lp_winbind_use_default_domain()) {
+ fstrcpy(user, domuser);
+ fstrcpy(domain, global_myworkgroup);
+ } else {
+ fstrcpy(user, p+1);
+ fstrcpy(domain, domuser);
+ domain[PTR_DIFF(p, domuser)] = 0;
+ }
strupper(domain);
return True;
}
diff -uk.orig samba-3.0/source/nsswitch/winbindd_util.c.orig samba-3.0/source/nsswitch/winbindd_util.c
--- samba-3.0/source/nsswitch/winbindd_util.c.orig Wed Dec 19 15:33:44 2001
+++ samba-3.0/source/nsswitch/winbindd_util.c Wed Dec 19 18:11:46 2001
@@ -308,17 +308,23 @@
}
/* Parse a string of the form DOMAIN/user into a domain and a user */
+extern fstring global_myworkgroup;
BOOL parse_domain_user(const char *domuser, fstring domain, fstring user)
{
char *p = strchr(domuser,*lp_winbind_separator());
- if (!p)
+ if (!(p || lp_winbind_use_default_domain()))
return False;
- fstrcpy(user, p+1);
- fstrcpy(domain, domuser);
- domain[PTR_DIFF(p, domuser)] = 0;
+ if(!p && lp_winbind_use_default_domain()) {
+ fstrcpy(user, domuser);
+ fstrcpy(domain, global_myworkgroup);
+ } else {
+ fstrcpy(user, p+1);
+ fstrcpy(domain, domuser);
+ domain[PTR_DIFF(p, domuser)] = 0;
+ }
strupper(domain);
return True;
}
More information about the samba-technical
mailing list