diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/smbd/process.c | 2 | ||||
-rw-r--r-- | source3/smbd/reply.c | 5 | ||||
-rw-r--r-- | source3/smbd/service.c | 72 |
4 files changed, 46 insertions, 34 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 7eb7d8554a..d6da8923ec 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -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); diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 9d857440b8..eb18219992 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -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(); diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index dc604cf49b..b24ec7a944 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -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)); } diff --git a/source3/smbd/service.c b/source3/smbd/service.c index 96f00eef12..f0ab2ba771 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -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. */ |