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