This patch adds a new configuration parameter called
"RootSquashExceptions". It has the same value syntax as the
existing RootSquash parameter, but it allows you to list hosts or
subnets that are exempt from root squashing.
This is helpful if you want to root squash all clients (or at least
a large set of them) but still allow root access from particular
admin or power user clients. That was possible before, but
probably tedious unless the node you wanted to exclude just
happened to fall in a convenient subnet.
-Phil
diff -Naur pvfs2/src/common/misc/server-config.c pvfs2-new/src/
common/misc/server-config.c
--- pvfs2/src/common/misc/server-config.c 2007-09-25
13:27:28.000000000 -0400
+++ pvfs2-new/src/common/misc/server-config.c 2007-10-02
13:10:56.000000000 -0400
@@ -79,6 +79,7 @@
static DOTCONF_CB(get_flow_module_list);
static DOTCONF_CB(get_root_squash);
+static DOTCONF_CB(get_root_squash_exceptions);
static DOTCONF_CB(get_read_only);
static DOTCONF_CB(get_all_squash);
static DOTCONF_CB(get_anon_gid);
@@ -707,6 +708,16 @@
*/
{"RootSquash", ARG_LIST, get_root_squash, NULL,
CTX_EXPORT, ""},
+
+ /* RootSquashExceptions option specifies exceoptions to the
RootSquash
+ * list. This is an optional parameter that needs to be
specified as
+ * part of the ExportOptions context and is a list of BMI URL
+ * specification of client addresses for which RootSquash
+ * has to be enforced.
+ * RootSquash tcp://[EMAIL PROTECTED] tcp://10.0.0.* tcp://
192.168.* ...
+ */
+ {"RootSquashExceptions", ARG_LIST, get_root_squash_exceptions,
NULL,
+ CTX_EXPORT, ""},
/* ReadOnly option specifies whether the exported file-system
needs to
* disallow write accesses from clients or anything that
modifies the
@@ -1690,6 +1701,50 @@
return NULL;
}
+DOTCONF_CB(get_root_squash_exceptions)
+{
+ struct filesystem_configuration_s *fs_conf = NULL;
+ struct server_configuration_s *config_s =
+ (struct server_configuration_s *)cmd->context;
+
+ fs_conf = (struct filesystem_configuration_s *)
+ PINT_llist_head(config_s->file_systems);
+ assert(fs_conf);
+
+ if (cmd->arg_count != 0)
+ {
+ fs_conf->root_squash_exceptions_netmasks = (int *) calloc
(cmd->arg_count, sizeof(int));
+ if (fs_conf->root_squash_exceptions_netmasks == NULL)
+ {
+ fs_conf->root_squash_exceptions_count = 0;
+ return("Could not allocate memory for
root_squash_exceptions_netmasks\n");
+ }
+ if (get_list_of_strings(cmd->arg_count, cmd->data.list,
+ &fs_conf->root_squash_exceptions_hosts) < 0)
+ {
+ free(fs_conf->root_squash_exceptions_netmasks);
+ fs_conf->root_squash_exceptions_netmasks = NULL;
+ fs_conf->root_squash_exceptions_count = 0;
+ return("Could not allocate memory for
root_squash_exceptions_hosts\n");
+ }
+ fs_conf->root_squash_exceptions_count = cmd->arg_count;
+ /* Setup the netmasks */
+ if (setup_netmasks(fs_conf->root_squash_exceptions_count,
fs_conf->root_squash_exceptions_hosts,
+ fs_conf->root_squash_exceptions_netmasks) < 0)
+ {
+ free(fs_conf->root_squash_exceptions_netmasks);
+ fs_conf->root_squash_exceptions_netmasks = NULL;
+ free_list_of_strings(fs_conf-
>root_squash_exceptions_count, &fs_conf-
>root_squash_exceptions_hosts);
+ fs_conf->root_squash_exceptions_count = 0;
+ return("Could not setup netmasks for
root_squash_exceptions_hosts\n");
+ }
+ gossip_debug(GOSSIP_SERVER_DEBUG, "Parsed %d
RootSquashExceptions wildcard entries\n",
+ cmd->arg_count);
+ }
+ return NULL;
+}
+
+
DOTCONF_CB(get_read_only)
{
struct filesystem_configuration_s *fs_conf = NULL;
diff -Naur pvfs2/src/common/misc/server-config.h pvfs2-new/src/
common/misc/server-config.h
--- pvfs2/src/common/misc/server-config.h 2007-08-17
00:04:24.000000000 -0400
+++ pvfs2-new/src/common/misc/server-config.h 2007-10-02
13:09:23.000000000 -0400
@@ -105,6 +105,10 @@
char **root_squash_hosts;
int *root_squash_netmasks;
+ int root_squash_exceptions_count;
+ char **root_squash_exceptions_hosts;
+ int *root_squash_exceptions_netmasks;
+
int all_squash_count;
char **all_squash_hosts;
int *all_squash_netmasks;
diff -Naur pvfs2/src/server/prelude.sm pvfs2-new/src/server/prelude.sm
--- pvfs2/src/server/prelude.sm 2007-08-29 20:13:44.000000000 -0400
+++ pvfs2-new/src/server/prelude.sm 2007-10-02 13:09:23.000000000
-0400
@@ -327,10 +327,25 @@
{
int i;
+ /* check exceptions first */
+ for (i = 0; i < fsconfig->root_squash_exceptions_count; i++)
+ {
+ gossip_debug(GOSSIP_SERVER_DEBUG, "BMI_query_addr_range %
lld, %s, netmask: %i\n",
+ lld(client_addr), fsconfig-
>root_squash_exceptions_hosts[i],
+ fsconfig->root_squash_exceptions_netmasks[i]);
+ if (BMI_query_addr_range(client_addr, fsconfig-
>root_squash_exceptions_hosts[i],
+ fsconfig->root_squash_exceptions_netmasks[i]) == 1)
+ {
+ /* in the exception list, do not squash */
+ return 0;
+ }
+ }
+
for (i = 0; i < fsconfig->root_squash_count; i++)
{
- gossip_debug(GOSSIP_SERVER_DEBUG, "BMI_query_addr_range %
lld, %s\n",
- lld(client_addr), fsconfig->root_squash_hosts[i]);
+ gossip_debug(GOSSIP_SERVER_DEBUG, "BMI_query_addr_range %
lld, %s, netmask: %i\n",
+ lld(client_addr), fsconfig->root_squash_hosts[i],
+ fsconfig->root_squash_netmasks[i]);
if (BMI_query_addr_range(client_addr, fsconfig-
>root_squash_hosts[i],
fsconfig->root_squash_netmasks[i]) == 1)
{
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers