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