Several mb tidyups - getting ready to address the XXX_sub function.
[samba.git] / source / smbd / service.c
index caa2872f04fa006b32f5781e07720d152c898ffc..f39f5bfd590b40dd058f5a3b6e0b6de4e276b093 100644 (file)
@@ -112,105 +112,96 @@ int add_home_service(const char *service, const char *username, const char *home
 
 
 /**
- * Find a service entry. service is always in dos codepage.
+ * Find a service entry.
  *
  * @param service is modified (to canonical form??)
  **/
+
 int find_service(fstring service)
 {
-   int iService;
-
-   all_string_sub(service,"\\","/",0);
-
-   iService = lp_servicenumber(service);
-
-   /* now handle the special case of a home directory */
-   if (iService < 0)
-   {
-      char *phome_dir = get_user_home_dir(service);
-
-      if(!phome_dir)
-      {
-        /*
-         * Try mapping the servicename, it may
-         * be a Windows to unix mapped user name.
-         */
-        if(map_username(service))
-          phome_dir = get_user_home_dir(service);
-      }
-
-      DEBUG(3,("checking for home directory %s gave %s\n",service,
-            phome_dir?phome_dir:"(NULL)"));
-
-      iService = add_home_service(service,service /* 'username' */, phome_dir);
-   }
-
-   /* If we still don't have a service, attempt to add it as a printer. */
-   if (iService < 0)
-   {
-      int iPrinterService;
-
-      if ((iPrinterService = lp_servicenumber(PRINTERS_NAME)) >= 0)
-      {
-         char *pszTemp;
-
-         DEBUG(3,("checking whether %s is a valid printer name...\n", service));
-         pszTemp = lp_printcapname();
-         if ((pszTemp != NULL) && pcap_printername_ok(service, pszTemp))
-         {
-            DEBUG(3,("%s is a valid printer name\n", service));
-            DEBUG(3,("adding %s as a printer service\n", service));
-            lp_add_printer(service, iPrinterService);
-            iService = lp_servicenumber(service);
-            if (iService < 0)
-               DEBUG(0,("failed to add %s as a printer service!\n", service));
-         }
-         else
-            DEBUG(3,("%s is not a valid printer name\n", service));
-      }
-   }
-
-   /* Check for default vfs service?  Unsure whether to implement this */
-   if (iService < 0)
-   {
-   }
-
-   /* just possibly it's a default service? */
-   if (iService < 0) 
-   {
-     char *pdefservice = lp_defaultservice();
-     if (pdefservice && *pdefservice && 
-        !strequal(pdefservice,service) &&
-        !strstr(service,".."))
-     {
-       /*
-        * We need to do a local copy here as lp_defaultservice() 
-        * returns one of the rotating lp_string buffers that
-        * could get overwritten by the recursive find_service() call
-        * below. Fix from Josef Hinteregger <joehtg@joehtg.co.at>.
-        */
-       pstring defservice;
-       pstrcpy(defservice, pdefservice);
-       iService = find_service(defservice);
-       if (iService >= 0)
-       {
-         all_string_sub(service, "_","/",0);
-         iService = lp_add_service(service, iService);
-       }
-     }
-   }
-
-   if (iService >= 0)
-     if (!VALID_SNUM(iService))
-     {
-       DEBUG(0,("Invalid snum %d for %s\n",iService, service));
-       iService = -1;
-     }
-
-   if (iService < 0)
-     DEBUG(3,("find_service() failed to find service %s\n", service));
-
-   return (iService);
+       int iService;
+
+       all_string_sub(service,"\\","/",0);
+
+       iService = lp_servicenumber(service);
+
+       /* now handle the special case of a home directory */
+       if (iService < 0) {
+               char *phome_dir = get_user_home_dir(service);
+
+               if(!phome_dir) {
+                       /*
+                        * Try mapping the servicename, it may
+                        * be a Windows to unix mapped user name.
+                        */
+                       if(map_username(service))
+                               phome_dir = get_user_home_dir(service);
+               }
+
+               DEBUG(3,("checking for home directory %s gave %s\n",service,
+                       phome_dir?phome_dir:"(NULL)"));
+
+               iService = add_home_service(service,service /* 'username' */, phome_dir);
+       }
+
+       /* If we still don't have a service, attempt to add it as a printer. */
+       if (iService < 0) {
+               int iPrinterService;
+
+               if ((iPrinterService = lp_servicenumber(PRINTERS_NAME)) >= 0) {
+                       char *pszTemp;
+
+                       DEBUG(3,("checking whether %s is a valid printer name...\n", service));
+                       pszTemp = lp_printcapname();
+                       if ((pszTemp != NULL) && pcap_printername_ok(service, pszTemp)) {
+                               DEBUG(3,("%s is a valid printer name\n", service));
+                               DEBUG(3,("adding %s as a printer service\n", service));
+                               lp_add_printer(service, iPrinterService);
+                               iService = lp_servicenumber(service);
+                               if (iService < 0) {
+                                       DEBUG(0,("failed to add %s as a printer service!\n", service));
+                               }
+                       } else {
+                               DEBUG(3,("%s is not a valid printer name\n", service));
+                       }
+               }
+       }
+
+       /* Check for default vfs service?  Unsure whether to implement this */
+       if (iService < 0) {
+       }
+
+       /* just possibly it's a default service? */
+       if (iService < 0) {
+               char *pdefservice = lp_defaultservice();
+               if (pdefservice && *pdefservice && !strequal(pdefservice,service) && !strstr(service,"..")) {
+                       /*
+                        * We need to do a local copy here as lp_defaultservice() 
+                        * returns one of the rotating lp_string buffers that
+                        * could get overwritten by the recursive find_service() call
+                        * below. Fix from Josef Hinteregger <joehtg@joehtg.co.at>.
+                        */
+                       pstring defservice;
+                       pstrcpy(defservice, pdefservice);
+                       iService = find_service(defservice);
+                       if (iService >= 0) {
+                               all_string_sub(service, "_","/",0);
+                               iService = lp_add_service(service, iService);
+                       }
+               }
+       }
+
+       if (iService >= 0) {
+               if (!VALID_SNUM(iService)) {
+                       DEBUG(0,("Invalid snum %d for %s\n",iService, service));
+                       iService = -1;
+               }
+       }
+
+       if (iService < 0)
+               DEBUG(3,("find_service() failed to find service %s\n", service));
+
+       return (iService);
 }
 
 
@@ -218,6 +209,7 @@ int find_service(fstring service)
  do some basic sainity checks on the share.  
  This function modifies dev, ecode.
 ****************************************************************************/
+
 static NTSTATUS share_sanity_checks(int snum, fstring dev) 
 {