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())

Reply via email to