2 * security/tomoyo/environ.c
4 * Copyright (C) 2005-2011 NTT DATA CORPORATION
10 * tomoyo_check_env_acl - Check permission for environment variable's name.
12 * @r: Pointer to "struct tomoyo_request_info".
13 * @ptr: Pointer to "struct tomoyo_acl_info".
15 * Returns true if granted, false otherwise.
17 static bool tomoyo_check_env_acl(struct tomoyo_request_info
*r
,
18 const struct tomoyo_acl_info
*ptr
)
20 const struct tomoyo_env_acl
*acl
=
21 container_of(ptr
, typeof(*acl
), head
);
23 return tomoyo_path_matches_pattern(r
->param
.environ
.name
, acl
->env
);
27 * tomoyo_audit_env_log - Audit environment variable name log.
29 * @r: Pointer to "struct tomoyo_request_info".
31 * Returns 0 on success, negative value otherwise.
33 static int tomoyo_audit_env_log(struct tomoyo_request_info
*r
)
35 return tomoyo_supervisor(r
, "misc env %s\n",
36 r
->param
.environ
.name
->name
);
40 * tomoyo_env_perm - Check permission for environment variable's name.
42 * @r: Pointer to "struct tomoyo_request_info".
43 * @env: The name of environment variable.
45 * Returns 0 on success, negative value otherwise.
47 * Caller holds tomoyo_read_lock().
49 int tomoyo_env_perm(struct tomoyo_request_info
*r
, const char *env
)
51 struct tomoyo_path_info environ
;
57 tomoyo_fill_path_info(&environ
);
58 r
->param_type
= TOMOYO_TYPE_ENV_ACL
;
59 r
->param
.environ
.name
= &environ
;
61 tomoyo_check_acl(r
, tomoyo_check_env_acl
);
62 error
= tomoyo_audit_env_log(r
);
63 } while (error
== TOMOYO_RETRY_REQUEST
);
68 * tomoyo_same_env_acl - Check for duplicated "struct tomoyo_env_acl" entry.
70 * @a: Pointer to "struct tomoyo_acl_info".
71 * @b: Pointer to "struct tomoyo_acl_info".
73 * Returns true if @a == @b, false otherwise.
75 static bool tomoyo_same_env_acl(const struct tomoyo_acl_info
*a
,
76 const struct tomoyo_acl_info
*b
)
78 const struct tomoyo_env_acl
*p1
= container_of(a
, typeof(*p1
), head
);
79 const struct tomoyo_env_acl
*p2
= container_of(b
, typeof(*p2
), head
);
81 return p1
->env
== p2
->env
;
85 * tomoyo_write_env - Write "struct tomoyo_env_acl" list.
87 * @param: Pointer to "struct tomoyo_acl_param".
89 * Returns 0 on success, negative value otherwise.
91 * Caller holds tomoyo_read_lock().
93 static int tomoyo_write_env(struct tomoyo_acl_param
*param
)
95 struct tomoyo_env_acl e
= { .head
.type
= TOMOYO_TYPE_ENV_ACL
};
97 const char *data
= tomoyo_read_token(param
);
99 if (!tomoyo_correct_word(data
) || strchr(data
, '='))
101 e
.env
= tomoyo_get_name(data
);
104 error
= tomoyo_update_domain(&e
.head
, sizeof(e
), param
,
105 tomoyo_same_env_acl
, NULL
);
106 tomoyo_put_name(e
.env
);
111 * tomoyo_write_misc - Update environment variable list.
113 * @param: Pointer to "struct tomoyo_acl_param".
115 * Returns 0 on success, negative value otherwise.
117 int tomoyo_write_misc(struct tomoyo_acl_param
*param
)
119 if (tomoyo_str_starts(¶m
->data
, "env "))
120 return tomoyo_write_env(param
);