diff options
author | Jeremy Allison <jra@samba.org> | 2001-01-24 19:34:53 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2001-01-24 19:34:53 +0000 |
commit | 24f8e973b210bbf5b79ac27f0a0e519c7dfe9354 (patch) | |
tree | ae77d5e4bbcecb4ab9c6a97acb4eba7207986a33 /source3/smbd/service.c | |
parent | 918c3ebe32aacee82fe354d5b9b7ea4d477dcfda (diff) | |
download | samba-24f8e973b210bbf5b79ac27f0a0e519c7dfe9354.tar.gz samba-24f8e973b210bbf5b79ac27f0a0e519c7dfe9354.tar.bz2 samba-24f8e973b210bbf5b79ac27f0a0e519c7dfe9354.zip |
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 a72d12e992e2755e925032aef1aa99be74bf6652)
Diffstat (limited to 'source3/smbd/service.c')
-rw-r--r-- | source3/smbd/service.c | 72 |
1 files changed, 42 insertions, 30 deletions
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. */ |