summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-02-21 02:04:28 +0000
committerJeremy Allison <jra@samba.org>2007-02-21 02:04:28 +0000
commitb16ef0b0b383c0d26c893a9dc9d8e0658a23d2ae (patch)
tree65f1ab99a6fa6968e2a969fc3769ad4efae1e626
parent6558f66eb3b9d2ae94cac1d49d7396ad78ea1084 (diff)
downloadsamba-b16ef0b0b383c0d26c893a9dc9d8e0658a23d2ae.tar.gz
samba-b16ef0b0b383c0d26c893a9dc9d8e0658a23d2ae.tar.xz
samba-b16ef0b0b383c0d26c893a9dc9d8e0658a23d2ae.zip
r21481: No one said anything, so I'm disallowing anything
but explicit shares in "default service" :-). Jeremy.
-rw-r--r--source/smbd/service.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/source/smbd/service.c b/source/smbd/service.c
index 18db2f8aba2..8653800aa0f 100644
--- a/source/smbd/service.c
+++ b/source/smbd/service.c
@@ -312,6 +312,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();
@@ -324,6 +331,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);
@@ -332,13 +347,6 @@ int find_service(fstring 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));
@@ -346,6 +354,8 @@ int find_service(fstring service)
}
}
+ fail:
+
if (iService < 0)
DEBUG(3,("find_service() failed to find service %s\n", service));