1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

smbd/process.c: & type with 0xff for paranioa sake...

smbd/reply.c smbd/service.c: cause all "add home service" calls to go through a
winbindd aware function.
Jeremy.
(This used to be commit a72d12e992)
This commit is contained in:
Jeremy Allison 2001-01-24 19:34:53 +00:00
parent 918c3ebe32
commit 24f8e973b2
4 changed files with 46 additions and 34 deletions

View File

@ -3942,6 +3942,7 @@ void exit_server(char *reason);
#if OLD_NTDOMAIN
BOOL become_service(connection_struct *conn,BOOL do_chdir);
int add_home_service(char *service, char *homedir);
int find_service(char *service);
connection_struct *make_connection(char *service,char *user,char *password, int pwlen, char *dev,uint16 vuid, int *ecode);
void close_cnum(connection_struct *conn, uint16 vuid);

View File

@ -615,6 +615,8 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize
int outsize = 0;
extern int global_smbpid;
type &= 0xff;
if (pid == (pid_t)-1)
pid = sys_getpid();

View File

@ -1005,10 +1005,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
if (!strequal(user,lp_guestaccount(-1)) &&
lp_servicenumber(user) < 0)
{
int homes = lp_servicenumber(HOMES_NAME);
char *home = get_user_home_dir(user);
if (homes >= 0 && home)
lp_add_home(user,homes,home);
add_home_service(user,get_user_home_dir(user));
}

View File

@ -78,10 +78,50 @@ BOOL become_service(connection_struct *conn,BOOL do_chdir)
return(True);
}
/****************************************************************************
Add a home service. Returns the new service number or -1 if fail.
****************************************************************************/
int add_home_service(char *service, char *homedir)
{
int iHomeService;
int iService;
fstring new_service;
char *usr_p = NULL;
if (!service || !homedir)
return -1;
if ((iHomeService = lp_servicenumber(HOMES_NAME)) < 0)
return -1;
/*
* If this is a winbindd provided username, remove
* the domain component before adding the service.
* Log a warning if the "path=" parameter does not
* include any macros.
*/
fstrcpy(new_service, service);
if ((usr_p = strchr(service,*lp_winbind_separator())) != NULL)
fstrcpy(new_service, usr_p+1);
lp_add_home(new_service,iHomeService,homedir);
iService = lp_servicenumber(new_service);
if ((iService != -1) && usr_p && (strstr(lp_pathname(iService),"%D") == NULL))
DEBUG(0,("find_service: Service %s added for user %s - contains non-local (Domain) user \
with non-domain parameterised path (%s). This may be cause the wrong directory to be seen.\n",
new_service, service, lp_pathname(iService) ));
return iService;
}
/****************************************************************************
find a service entry. service is always in dos codepage
Find a service entry. service is always in dos codepage.
****************************************************************************/
int find_service(char *service)
{
int iService;
@ -108,35 +148,7 @@ int find_service(char *service)
DEBUG(3,("checking for home directory %s gave %s\n",service,
phome_dir?phome_dir:"(NULL)"));
if (phome_dir)
{
int iHomeService;
if ((iHomeService = lp_servicenumber(HOMES_NAME)) >= 0)
{
/*
* If this is a winbindd provided username, remove
* the domain component before adding the service.
* Log a warning if the "path=" parameter does not
* include any macros.
*/
fstring new_service;
char *usr_p = NULL;
fstrcpy(new_service, service);
if ((usr_p = strchr(service,*lp_winbind_separator())) != NULL)
fstrcpy(new_service, usr_p+1);
lp_add_home(new_service,iHomeService,phome_dir);
iService = lp_servicenumber(new_service);
if (usr_p && (strchr(lp_pathname(iService),'%') == NULL))
DEBUG(0,("find_service: Service %s added for user %s - contains non-local (Domain) user \
with non parameterised path (%s). This may be cause the wrong directory to be seen.\n",
new_service, service, lp_pathname(iService) ));
}
}
iService = add_home_service(service,phome_dir);
}
/* If we still don't have a service, attempt to add it as a printer. */