return rc;
}
-int mgs_nodemap_cmd(const struct lu_env *env, struct mgs_device *mgs,
- enum lcfg_command_type cmd, const char *nodemap_name,
- char *param)
-{
- struct lnet_nid nid[2];
- u32 idmap[2];
- bool bool_switch;
- u8 netmask = 0;
- u32 int_id;
- int rc = 0;
-
- ENTRY;
- switch (cmd) {
- case LCFG_NODEMAP_ADD:
- rc = nodemap_add(nodemap_name);
- break;
- case LCFG_NODEMAP_DEL:
- rc = nodemap_del(nodemap_name);
- break;
- case LCFG_NODEMAP_ADD_RANGE:
- rc = nodemap_parse_range(param, nid, &netmask);
- if (rc != 0)
- break;
- rc = nodemap_add_range(nodemap_name, nid, netmask);
- break;
- case LCFG_NODEMAP_DEL_RANGE:
- rc = nodemap_parse_range(param, nid, &netmask);
- if (rc != 0)
- break;
- rc = nodemap_del_range(nodemap_name, nid, netmask);
- break;
- case LCFG_NODEMAP_ADMIN:
- rc = kstrtobool(param, &bool_switch);
- if (rc)
- break;
- rc = nodemap_set_allow_root(nodemap_name, bool_switch);
- break;
- case LCFG_NODEMAP_DENY_UNKNOWN:
- rc = kstrtobool(param, &bool_switch);
- if (rc)
- break;
- rc = nodemap_set_deny_unknown(nodemap_name, bool_switch);
- break;
- case LCFG_NODEMAP_AUDIT_MODE:
- rc = kstrtobool(param, &bool_switch);
- if (rc == 0)
- rc = nodemap_set_audit_mode(nodemap_name, bool_switch);
- break;
- case LCFG_NODEMAP_FORBID_ENCRYPT:
- rc = kstrtobool(param, &bool_switch);
- if (rc == 0)
- rc = nodemap_set_forbid_encryption(nodemap_name,
- bool_switch);
- break;
- case LCFG_NODEMAP_READONLY_MOUNT:
- rc = kstrtobool(param, &bool_switch);
- if (rc == 0)
- rc = nodemap_set_readonly_mount(nodemap_name,
- bool_switch);
- break;
- case LCFG_NODEMAP_MAP_MODE:
- {
- char *p;
- __u8 map_mode = 0;
-
- if ((p = strstr(param, "all")) != NULL) {
- if ((p == param || *(p-1) == ',') &&
- (*(p+3) == '\0' || *(p+3) == ',')) {
- map_mode = NODEMAP_MAP_ALL;
- } else {
- rc = -EINVAL;
- break;
- }
- } else {
- while ((p = strsep(¶m, ",")) != NULL) {
- if (!*p)
- break;
-
- if (strcmp("both", p) == 0)
- map_mode |= NODEMAP_MAP_BOTH;
- else if (strcmp("uid_only", p) == 0 ||
- strcmp("uid", p) == 0)
- map_mode |= NODEMAP_MAP_UID;
- else if (strcmp("gid_only", p) == 0 ||
- strcmp("gid", p) == 0)
- map_mode |= NODEMAP_MAP_GID;
- else if (strcmp("projid_only", p) == 0 ||
- strcmp("projid", p) == 0)
- map_mode |= NODEMAP_MAP_PROJID;
- else
- break;
- }
- if (p) {
- rc = -EINVAL;
- break;
- }
- }
-
- rc = nodemap_set_mapping_mode(nodemap_name, map_mode);
- break;
- }
- case LCFG_NODEMAP_RBAC:
- {
- enum nodemap_rbac_roles rbac;
- char *p;
-
- if (strcmp(param, "all") == 0) {
- rbac = NODEMAP_RBAC_ALL;
- } else if (strcmp(param, "none") == 0) {
- rbac = NODEMAP_RBAC_NONE;
- } else {
- rbac = NODEMAP_RBAC_NONE;
- while ((p = strsep(¶m, ",")) != NULL) {
- int i;
-
- if (!*p)
- break;
-
- for (i = 0; i < ARRAY_SIZE(nodemap_rbac_names);
- i++) {
- if (strcmp(p,
- nodemap_rbac_names[i].nrn_name)
- == 0) {
- rbac |=
- nodemap_rbac_names[i].nrn_mode;
- break;
- }
- }
- if (i == ARRAY_SIZE(nodemap_rbac_names))
- break;
- }
- if (p) {
- rc = -EINVAL;
- break;
- }
- }
-
- rc = nodemap_set_rbac(nodemap_name, rbac);
- break;
- }
- case LCFG_NODEMAP_TRUSTED:
- rc = kstrtobool(param, &bool_switch);
- if (rc)
- break;
- rc = nodemap_set_trust_client_ids(nodemap_name, bool_switch);
- break;
- case LCFG_NODEMAP_SQUASH_UID:
- rc = kstrtouint(param, 10, &int_id);
- if (rc)
- break;
- rc = nodemap_set_squash_uid(nodemap_name, int_id);
- break;
- case LCFG_NODEMAP_SQUASH_GID:
- rc = kstrtouint(param, 10, &int_id);
- if (rc)
- break;
- rc = nodemap_set_squash_gid(nodemap_name, int_id);
- break;
- case LCFG_NODEMAP_SQUASH_PROJID:
- rc = kstrtouint(param, 10, &int_id);
- if (rc)
- break;
- rc = nodemap_set_squash_projid(nodemap_name, int_id);
- break;
- case LCFG_NODEMAP_ADD_UIDMAP:
- case LCFG_NODEMAP_ADD_GIDMAP:
- case LCFG_NODEMAP_ADD_PROJIDMAP:
- rc = nodemap_parse_idmap(param, idmap);
- if (rc != 0)
- break;
- if (cmd == LCFG_NODEMAP_ADD_UIDMAP)
- rc = nodemap_add_idmap(nodemap_name, NODEMAP_UID,
- idmap);
- else if (cmd == LCFG_NODEMAP_ADD_GIDMAP)
- rc = nodemap_add_idmap(nodemap_name, NODEMAP_GID,
- idmap);
- else if (cmd == LCFG_NODEMAP_ADD_PROJIDMAP)
- rc = nodemap_add_idmap(nodemap_name, NODEMAP_PROJID,
- idmap);
- else
- rc = -EINVAL;
- break;
- case LCFG_NODEMAP_DEL_UIDMAP:
- case LCFG_NODEMAP_DEL_GIDMAP:
- case LCFG_NODEMAP_DEL_PROJIDMAP:
- rc = nodemap_parse_idmap(param, idmap);
- if (rc != 0)
- break;
- if (cmd == LCFG_NODEMAP_DEL_UIDMAP)
- rc = nodemap_del_idmap(nodemap_name, NODEMAP_UID,
- idmap);
- else if (cmd == LCFG_NODEMAP_DEL_GIDMAP)
- rc = nodemap_del_idmap(nodemap_name, NODEMAP_GID,
- idmap);
- else if (cmd == LCFG_NODEMAP_DEL_PROJIDMAP)
- rc = nodemap_del_idmap(nodemap_name, NODEMAP_PROJID,
- idmap);
- else
- rc = -EINVAL;
- break;
- case LCFG_NODEMAP_SET_FILESET:
- rc = nodemap_set_fileset(nodemap_name, param);
- break;
- case LCFG_NODEMAP_SET_SEPOL:
- rc = nodemap_set_sepol(nodemap_name, param);
- break;
- default:
- rc = -EINVAL;
- }
-
- RETURN(rc);
-}
-
static inline
int mgs_pool_check_ostname(struct fs_db *fsdb, char *fsname, char *ostname)
{