r21481: No one said anything, so I'm disallowing anything
authorJeremy Allison <jra@samba.org>
Wed, 21 Feb 2007 02:04:28 +0000 (02:04 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:18:07 +0000 (12:18 -0500)
but explicit shares in "default service" :-).
Jeremy.
(This used to be commit 90bdcce765998cc0f5768d24926d52b8a4a44f90)

source3/smbd/service.c

index eb464c29b27665f77b25d6d569e773dc02b10def..1b8e2e1d30232895f4b155fe2f9f0581e0387ad6 100644 (file)
@@ -402,6 +402,13 @@ int find_service(fstring service)
        if (iService < 0) {
        }
 
+       /* Is it a usershare service ? */
+       if (iService < 0 && *lp_usershare_path()) {
+               /* Ensure the name is canonicalized. */
+               strlower_m(service);
+               iService = load_usershare_service(service);
+       }
+
        /* just possibly it's a default service? */
        if (iService < 0) {
                char *pdefservice = lp_defaultservice();
@@ -414,6 +421,14 @@ int find_service(fstring service)
                         */
                        pstring defservice;
                        pstrcpy(defservice, pdefservice);
+
+                       /* Disallow anything except explicit share names. */
+                       if (strequal(defservice,HOMES_NAME) ||
+                                       strequal(defservice, PRINTERS_NAME) ||
+                                       strequal(defservice, "ipc$")) {
+                               goto fail;
+                       }
+
                        iService = find_service(defservice);
                        if (iService >= 0) {
                                all_string_sub(service, "_","/",0);
@@ -426,13 +441,6 @@ int find_service(fstring service)
                iService = load_registry_service(service);
        }
 
-       /* Is it a usershare service ? */
-       if (iService < 0 && *lp_usershare_path()) {
-               /* Ensure the name is canonicalized. */
-               strlower_m(service);
-               iService = load_usershare_service(service);
-       }
-
        if (iService >= 0) {
                if (!VALID_SNUM(iService)) {
                        DEBUG(0,("Invalid snum %d for %s\n",iService, service));
@@ -440,6 +448,8 @@ int find_service(fstring service)
                }
        }
 
+  fail:
+
        if (iService < 0)
                DEBUG(3,("find_service() failed to find service %s\n", service));