svn commit: samba r12029 - in trunk/source/param: .
jra at samba.org
jra at samba.org
Fri Dec 2 20:13:10 GMT 2005
Author: jra
Date: 2005-12-02 20:13:09 +0000 (Fri, 02 Dec 2005)
New Revision: 12029
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12029
Log:
Ensure we reset mod time on usershare service. Add a
parameter "usershare template share" to allow admins
to configure a template for all user shares.
Jeremy.
Modified:
trunk/source/param/loadparm.c
Changeset:
Modified: trunk/source/param/loadparm.c
===================================================================
--- trunk/source/param/loadparm.c 2005-12-02 20:08:51 UTC (rev 12028)
+++ trunk/source/param/loadparm.c 2005-12-02 20:13:09 UTC (rev 12029)
@@ -189,6 +189,7 @@
char *szManglingMethod;
char **szServicesList;
char *szUsersharePath;
+ char *szUsershareTemplateShare;
int mangle_prefix;
int max_log_size;
char *szLogLevel;
@@ -1220,6 +1221,7 @@
{"available", P_BOOL, P_LOCAL, &sDefault.bAvailable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT},
{"usershare max shares", P_INTEGER, P_GLOBAL, &Globals.iUsershareMaxShares, NULL, NULL, FLAG_ADVANCED},
{"usershare path", P_STRING, P_GLOBAL, &Globals.szUsersharePath, NULL, NULL, FLAG_ADVANCED},
+ {"usershare template share", P_STRING, P_GLOBAL, &Globals.szUsershareTemplateShare, NULL, NULL, FLAG_ADVANCED},
{"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE },
{"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE},
{"set directory", P_BOOLREV, P_LOCAL, &sDefault.bNo_set_dir, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE},
@@ -1638,6 +1640,7 @@
/* User defined shares. */
string_set(&Globals.szUsersharePath, "");
+ string_set(&Globals.szUsershareTemplateShare, "");
Globals.iUsershareMaxShares = 0;
}
@@ -1825,7 +1828,6 @@
FN_GLOBAL_STRING(lp_change_share_cmd, &Globals.szChangeShareCommand)
FN_GLOBAL_STRING(lp_delete_share_cmd, &Globals.szDeleteShareCommand)
-FN_GLOBAL_STRING(lp_usershare_path, &Globals.szUsersharePath)
FN_GLOBAL_LIST(lp_eventlog_list, &Globals.szEventLogs)
FN_GLOBAL_BOOL(lp_disable_netbios, &Globals.bDisableNetbios)
@@ -4240,7 +4242,7 @@
with permissions to share directory etc.
***************************************************************************/
-static int process_usershare_file(const char *dir_name, const char *file_name)
+static int process_usershare_file(const char *dir_name, const char *file_name, int snum_template)
{
SMB_STRUCT_STAT sbuf;
pstring fname;
@@ -4353,9 +4355,14 @@
SAFE_FREE(lines);
- /* Everything ok - add the service. */
+ /* Everything ok - add the service possibly using a template. */
if (snum <= 0) {
- if ((snum = add_a_service(&sDefault, service_name)) < 0) {
+ const service *sp = &sDefault;
+ if (snum_template != -1) {
+ sp = ServicePtrs[snum_template];
+ }
+
+ if ((snum = add_a_service(sp, service_name)) < 0) {
DEBUG(0, ("process_usershare_file: Failed to add "
"new service %s\n", service_name));
talloc_destroy(ctx);
@@ -4367,8 +4374,15 @@
talloc_destroy(ctx);
+ /* If from a template it may be marked invalid. */
+ ServicePtrs[snum]->valid = True;
+
/* Set the service as a valid usershare. */
ServicePtrs[snum]->usershare = USERSHARE_VALID;
+
+ /* And note when it was loaded. */
+ ServicePtrs[snum]->usershare_last_mod = sbuf.st_mtime;
+
return 0;
}
@@ -4385,6 +4399,7 @@
unsigned int num_dir_entries, num_bad_dir_entries;
unsigned int allowed_bad_entries = ((2*max_user_shares)/10);
int iService;
+ int snum_template = -1;
add_to_file_list(usersharepath, usersharepath);
@@ -4409,6 +4424,26 @@
return;
}
+ /* Ensure the template share exists if it's set. */
+ if (Globals.szUsershareTemplateShare[0]) {
+ /* We can't use lp_servicenumber here as we are recommending that
+ template shares have -valid=False set. */
+ for (snum_template = iNumServices - 1; snum_template >= 0; snum_template--) {
+ if (ServicePtrs[snum_template]->szService &&
+ strequal(ServicePtrs[snum_template]->szService,
+ Globals.szUsershareTemplateShare)) {
+ break;
+ }
+ }
+
+ if (snum_template == -1) {
+ DEBUG(0,("process_usershare_directory: usershare template share %s "
+ "does not exist.\n",
+ Globals.szUsershareTemplateShare ));
+ return;
+ }
+ }
+
/* Mark all existing usershares as pending delete. */
for (iService = iNumServices - 1; iService >= 0; iService--) {
if (VALID(iService) && ServicePtrs[iService]->usershare) {
@@ -4426,7 +4461,7 @@
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);
+ int ret = process_usershare_file(usersharepath, de->d_name, snum_template);
if (ret == 0) {
num_usershares++;
if (num_usershares >= max_user_shares) {
More information about the samba-cvs
mailing list