svn commit: samba r12117 - in trunk/source: lib param rpc_server smbd

jra at samba.org jra at samba.org
Thu Dec 8 02:13:30 GMT 2005


Author: jra
Date: 2005-12-08 02:13:28 +0000 (Thu, 08 Dec 2005)
New Revision: 12117

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12117

Log:
Got userlevel shares appearing and dissapearing. Still need
to parse acl...
Jeremy

Modified:
   trunk/source/lib/dummysmbd.c
   trunk/source/param/loadparm.c
   trunk/source/rpc_server/srv_srvsvc_nt.c
   trunk/source/smbd/server.c


Changeset:
Modified: trunk/source/lib/dummysmbd.c
===================================================================
--- trunk/source/lib/dummysmbd.c	2005-12-08 01:13:45 UTC (rev 12116)
+++ trunk/source/lib/dummysmbd.c	2005-12-08 02:13:28 UTC (rev 12117)
@@ -43,3 +43,8 @@
 {
 	return False;
 }
+
+SEC_DESC *get_share_security_default( TALLOC_CTX *ctx, size_t *psize, uint32 def_access)
+{
+	return NULL;
+}

Modified: trunk/source/param/loadparm.c
===================================================================
--- trunk/source/param/loadparm.c	2005-12-08 01:13:45 UTC (rev 12116)
+++ trunk/source/param/loadparm.c	2005-12-08 02:13:28 UTC (rev 12117)
@@ -4225,7 +4225,15 @@
 
 static BOOL parse_share_acl(TALLOC_CTX *ctx, const char *acl_str, SEC_DESC **ppsd)
 {
-	return False;
+	size_t s_size = 0;
+	/* For now - fake up Everyone, read-only. */
+	SEC_DESC *psd = get_share_security_default(ctx, &s_size, GENERIC_READ_ACCESS);
+
+	if (!psd) {
+		return False;
+	}
+	*ppsd = psd;
+	return True;
 }
 
 #if 0
@@ -4251,26 +4259,39 @@
 			char **lines,
 			int numlines,
 			pstring sharepath,
+			pstring comment,
 			SEC_DESC **ppsd)
 {
 	SMB_STRUCT_DIR *dp;
 	SMB_STRUCT_STAT sbuf;
 
+	if (numlines < 4) {
+		return False;
+	}
+
 	if (!strequal(lines[0], "#VERSION 1")) {
 		return False;
 	}
 
-	if (strnequal(lines[1], "path=", 5)) {
+	if (!strnequal(lines[1], "path=", 5)) {
 		return False;
 	}
 
 	pstrcpy(sharepath, &lines[1][5]);
 	trim_string(sharepath, " ", " ");
 
-	if (strnequal(lines[2], "usershare_acl=", 14)) {
+	if (!strnequal(lines[2], "comment=", 8)) {
 		return False;
 	}
 
+	pstrcpy(comment, &lines[2][8]);
+	trim_string(comment, " ", " ");
+	trim_char(comment, '"', '"');
+
+	if (!strnequal(lines[3], "usershare_acl=", 14)) {
+		return False;
+	}
+
 	if (!parse_share_acl(ctx, &lines[2][14], ppsd)) {
 		return False;
 	}
@@ -4326,7 +4347,7 @@
 
 	sys_closedir(dp);
 
-	return False;
+	return True;
 }
 
 /***************************************************************************
@@ -4343,6 +4364,7 @@
 	SMB_STRUCT_STAT sbuf;
 	pstring fname;
 	pstring sharepath;
+	pstring comment;
 	fstring service_name;
 	char **lines = NULL;
 	int numlines = 0;
@@ -4443,7 +4465,7 @@
 		return 1;
 	}
 
-	if (!parse_usershare_file(ctx, &sbuf, snum, lines, numlines, sharepath, &psd)) {
+	if (!parse_usershare_file(ctx, &sbuf, snum, lines, numlines, sharepath, comment, &psd)) {
 		talloc_destroy(ctx);
 		SAFE_FREE(lines);
 		return -1;
@@ -4452,7 +4474,7 @@
 	SAFE_FREE(lines);
 
 	/* Everything ok - add the service possibly using a template. */
-	if (snum <= 0) {
+	if (snum < 0) {
 		const service *sp = &sDefault;
 		if (snum_template != -1) {
 			sp = ServicePtrs[snum_template];
@@ -4488,6 +4510,7 @@
 	ServicePtrs[snum]->usershare_last_mod = sbuf.st_mtime;
 
 	string_set(&ServicePtrs[snum]->szPath, sharepath);
+	string_set(&ServicePtrs[snum]->comment, comment);
 
 	return 0;
 }
@@ -4567,13 +4590,23 @@
 	for (num_dir_entries = 0, num_bad_dir_entries = 0;
 			(de = sys_readdir(dp));
 			num_dir_entries++ ) {
-		int ret = process_usershare_file(usersharepath, de->d_name, snum_template);
+		int ret;
+		const char *n = de->d_name;
+
+		/* Ignore . and .. */
+		if (*n == '.') {
+			if ((n[1] == '\0') || (n[1] == '.' && n[2] == '\0')) {
+				continue;
+			}
+		}
+
+		ret = process_usershare_file(usersharepath, n, snum_template);
 		if (ret == 0) {
 			num_usershares++;
 			if (num_usershares >= max_user_shares) {
 				DEBUG(0,("process_usershare_directory: max user shares reached "
 					"on file %s in directory %s\n",
-					de->d_name, usersharepath ));
+					n, usersharepath ));
 				break;
 			}
 		} else if (ret == -1) {

Modified: trunk/source/rpc_server/srv_srvsvc_nt.c
===================================================================
--- trunk/source/rpc_server/srv_srvsvc_nt.c	2005-12-08 01:13:45 UTC (rev 12116)
+++ trunk/source/rpc_server/srv_srvsvc_nt.c	2005-12-08 02:13:28 UTC (rev 12117)
@@ -128,14 +128,15 @@
 #define SHARE_DATABASE_VERSION_V1 1
 #define SHARE_DATABASE_VERSION_V2 2 /* version id in little endian. */
 
-BOOL share_info_db_init(void)
+static BOOL share_info_db_init(void)
 {
-	static pid_t local_pid;
 	const char *vstring = "INFO/version";
 	int32 vers_id;
  
-	if (share_tdb && local_pid == sys_getpid())
+	if (share_tdb) {
 		return True;
+	}
+
 	share_tdb = tdb_open_log(lock_path("share_info.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
 	if (!share_tdb) {
 		DEBUG(0,("Failed to open share info database %s (%s)\n",
@@ -143,8 +144,6 @@
 		return False;
 	}
  
-	local_pid = sys_getpid();
- 
 	/* handle a Samba upgrade */
 	tdb_lock_bystring(share_tdb, vstring, 0);
 
@@ -168,16 +167,15 @@
 }
 
 /*******************************************************************
- Fake up a Everyone, full access as a default.
+ Fake up a Everyone, default access as a default.
  ********************************************************************/
 
-static SEC_DESC *get_share_security_default( TALLOC_CTX *ctx, int snum, size_t *psize)
+SEC_DESC *get_share_security_default( TALLOC_CTX *ctx, size_t *psize, uint32 def_access)
 {
 	SEC_ACCESS sa;
 	SEC_ACE ace;
 	SEC_ACL *psa = NULL;
 	SEC_DESC *psd = NULL;
-	uint32 def_access = GENERIC_ALL_ACCESS;
 
 	se_map_generic(&def_access, &file_generic_mapping);
 
@@ -206,6 +204,10 @@
 	fstring key;
 	SEC_DESC *psd = NULL;
 
+	if (!share_info_db_init()) {
+		return NULL;
+	}
+
 	*psize = 0;
 
 	/* Fetch security descriptor from tdb */
@@ -217,7 +219,7 @@
  
 		DEBUG(4,("get_share_security: using default secdesc for %s\n", lp_servicename(snum) ));
  
-		return get_share_security_default(ctx, snum, psize);
+		return get_share_security_default(ctx, psize, GENERIC_ALL_ACCESS);
 	}
 
 	if (psd)
@@ -238,6 +240,10 @@
 	fstring key;
 	BOOL ret = False;
 
+	if (!share_info_db_init()) {
+		return False;
+	}
+
 	mem_ctx = talloc_init("set_share_security");
 	if (mem_ctx == NULL)
 		return False;

Modified: trunk/source/smbd/server.c
===================================================================
--- trunk/source/smbd/server.c	2005-12-08 01:13:45 UTC (rev 12116)
+++ trunk/source/smbd/server.c	2005-12-08 02:13:28 UTC (rev 12117)
@@ -882,9 +882,6 @@
 	if (!locking_init(0))
 		exit(1);
 
-	if (!share_info_db_init())
-		exit(1);
-
 	namecache_enable();
 
 	if (!init_registry())



More information about the samba-cvs mailing list