mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-09-03 15:55:46 +00:00
Compare commits
346 Commits
v4.0.0-alp
...
apparmor-4
Author | SHA1 | Date | |
---|---|---|---|
|
073463b626 | ||
|
8307ad8493 | ||
|
c04560223a | ||
|
26f92b042b | ||
|
bc08a3ffd7 | ||
|
244db262db | ||
|
e1d146bdd2 | ||
|
dbc2a64d00 | ||
|
27b79a43cc | ||
|
00591cec47 | ||
|
0098af902d | ||
|
2ed74be1bb | ||
|
75ce9020e4 | ||
|
fe53d6cefe | ||
|
c5a838502f | ||
|
620e92f39e | ||
|
cb4819cca9 | ||
|
e2e0239ed6 | ||
|
fe6604532f | ||
|
0572659d49 | ||
|
15f263717a | ||
|
e1582dfba3 | ||
|
7ead5556dd | ||
|
af37940d59 | ||
|
811bba09bf | ||
|
1ffc1d9ac4 | ||
|
b98433c7ac | ||
|
b7a4745bc4 | ||
|
90500d38ab | ||
|
f3c1c8ada8 | ||
|
dde18a21fa | ||
|
5f2eadc809 | ||
|
add2ffe710 | ||
|
b4dfdf50f5 | ||
|
5dd04c3389 | ||
|
1e9e52f243 | ||
|
9f57cbcb15 | ||
|
8146d3a6a3 | ||
|
d3d1c02b4e | ||
|
eb523cf53b | ||
|
507be2a990 | ||
|
3c24bc68b6 | ||
|
0193009b8b | ||
|
84a6bc1b6d | ||
|
9f849247b9 | ||
|
3fe2d323fc | ||
|
f0f7420f6c | ||
|
efef7d1b28 | ||
|
d61109d47e | ||
|
113ce2cfcd | ||
|
af7a10b5d9 | ||
|
4bb134e4bb | ||
|
4569381ec3 | ||
|
73a29ade16 | ||
|
d8e17207e8 | ||
|
0f51513a11 | ||
|
a07a8e69e0 | ||
|
24a0ebb5ef | ||
|
0310a122d4 | ||
|
6cad7b889e | ||
|
e2aff72f53 | ||
|
046fe9c1bd | ||
|
e4e60f1a4f | ||
|
ae01582798 | ||
|
98a0a2fee9 | ||
|
aada708bc1 | ||
|
dca6ac3b73 | ||
|
9d1388fdb6 | ||
|
a8637a5aa1 | ||
|
a866d77e72 | ||
|
527205bda9 | ||
|
e3be2e52ea | ||
|
d1311cc93f | ||
|
2a3cf471ab | ||
|
c31da2ec55 | ||
|
e8b2597676 | ||
|
6dee9d0a6a | ||
|
aa74b9b12d | ||
|
9ec5134322 | ||
|
fcd02fb69b | ||
|
1f4bba0448 | ||
|
af88a13712 | ||
|
8e74855531 | ||
|
951ea5b2fb | ||
|
eee50538da | ||
|
86be5d35f3 | ||
|
b7f9b66cba | ||
|
6d1e5dbbe6 | ||
|
f1173379ff | ||
|
b0eb95457b | ||
|
5ad4efec50 | ||
|
a635a86e1d | ||
|
c8e25e4689 | ||
|
68dd052873 | ||
|
4cef932170 | ||
|
8108a217a3 | ||
|
2284e99613 | ||
|
f763c44cd0 | ||
|
1d36e1f196 | ||
|
22ee6c19bc | ||
|
6198edb3d0 | ||
|
4d2a171466 | ||
|
e88cf3cd02 | ||
|
6f856dfee3 | ||
|
a6d8171bd6 | ||
|
26e7249f44 | ||
|
117d0cc444 | ||
|
1c7127d30d | ||
|
d111ddcc21 | ||
|
fa26623e6d | ||
|
451bb8b235 | ||
|
6e46631b6f | ||
|
f9527d2113 | ||
|
9dc2f48773 | ||
|
2fc80487f7 | ||
|
c87969b37c | ||
|
b68bb18860 | ||
|
c47789340a | ||
|
e23a3eeba5 | ||
|
d0fadc48cf | ||
|
aec3f3b22c | ||
|
101651c88f | ||
|
efc2ec5fdd | ||
|
b01b9895e7 | ||
|
a0a0c88d9e | ||
|
63676459c4 | ||
|
9ed04cb01e | ||
|
2a885872a3 | ||
|
989501428e | ||
|
25f21a0758 | ||
|
022af9c528 | ||
|
9a1838016c | ||
|
f4c19acfba | ||
|
dac9d08764 | ||
|
243162ca29 | ||
|
ae978c1953 | ||
|
d19db55a37 | ||
|
e3d381cf91 | ||
|
aa69d9adc9 | ||
|
3d1dedfa7e | ||
|
f27b1ef93a | ||
|
18d6a917f8 | ||
|
d1d39d176e | ||
|
2d654477f2 | ||
|
66dc2cc7d0 | ||
|
021c3248f9 | ||
|
353ba896d4 | ||
|
c13007f7fc | ||
|
88a420853e | ||
|
2db41acd1b | ||
|
a10d9044b8 | ||
|
b53441a689 | ||
|
7452f34279 | ||
|
aedb8a5b00 | ||
|
6695944c2c | ||
|
01090dcf1b | ||
|
3ea2bfec56 | ||
|
3d1a867c0a | ||
|
dfb02cbd93 | ||
|
90f056c1c6 | ||
|
0daf3e8c9b | ||
|
a86c1bd45a | ||
|
8f4073ecd9 | ||
|
440be71c12 | ||
|
8d21f01924 | ||
|
4e546291a5 | ||
|
8c026077d6 | ||
|
5e4c4a0cb3 | ||
|
9c27a7c435 | ||
|
a367c07437 | ||
|
2200013088 | ||
|
d5afc33c40 | ||
|
517e7c96c8 | ||
|
a7cd59819e | ||
|
e7f5ee3271 | ||
|
da75b1c8d8 | ||
|
b264bb62c9 | ||
|
35287c8e1c | ||
|
119e3f38f9 | ||
|
dd0d145a19 | ||
|
f6ad1cbe1e | ||
|
8a5e7227db | ||
|
79ee3eb180 | ||
|
052dd987b3 | ||
|
7e25be7b0b | ||
|
ddefe11a40 | ||
|
b83cf90b82 | ||
|
e3cb9e1669 | ||
|
924b335dfc | ||
|
a2da64304f | ||
|
bb53886211 | ||
|
746f76d3e1 | ||
|
35f25a251b | ||
|
c09f58a364 | ||
|
909e330fd0 | ||
|
88907253e4 | ||
|
124e73ec93 | ||
|
4b1bc85022 | ||
|
c4f649da92 | ||
|
108f489f2b | ||
|
4d2172e82e | ||
|
95d9ba8d8b | ||
|
420d3395fc | ||
|
4608d32628 | ||
|
2394ca82c5 | ||
|
105b50502b | ||
|
105bdfdeb9 | ||
|
f9d38c9b2c | ||
|
3ea050eb30 | ||
|
b49822a48d | ||
|
32bba24468 | ||
|
fd25954c56 | ||
|
ca3afe1691 | ||
|
2577fbf077 | ||
|
2b8cf1be80 | ||
|
89a9f76733 | ||
|
4621af8ead | ||
|
668f5af436 | ||
|
48d475036a | ||
|
0e378f52a8 | ||
|
15337db4af | ||
|
ce3c97df0f | ||
|
789cda2f08 | ||
|
6add80d83f | ||
|
3e28d0a254 | ||
|
e63c1e3a76 | ||
|
b03abbd75f | ||
|
6e81104bbf | ||
|
6cc3a3642d | ||
|
166ebdb3bc | ||
|
253eace573 | ||
|
c2487f017f | ||
|
dc73f0fc0b | ||
|
3578b07aeb | ||
|
28e67c7ba8 | ||
|
c8a2dc34d9 | ||
|
350f9cf3dd | ||
|
f889f9f434 | ||
|
5ca2ea3621 | ||
|
2c5bc5a09b | ||
|
dc821ef762 | ||
|
31c9cf6845 | ||
|
66484687e8 | ||
|
dfb6f90aee | ||
|
fcd46063fd | ||
|
f10e106a08 | ||
|
d778fbef57 | ||
|
70809fc716 | ||
|
15d8e21945 | ||
|
3ee47af402 | ||
|
eb6fa02251 | ||
|
923cbcf3be | ||
|
78a2c9f5f3 | ||
|
81bc26c934 | ||
|
71e28e9357 | ||
|
7c684f9d22 | ||
|
6c01b90c13 | ||
|
832bb8f417 | ||
|
e0bc90f5cf | ||
|
6a96067938 | ||
|
dcad01ccc3 | ||
|
2594d936ad | ||
|
9bba464d93 | ||
|
96b1aa549b | ||
|
dcc719c69c | ||
|
6304d372bf | ||
|
54915dabc4 | ||
|
d55a1e6d5d | ||
|
6580331625 | ||
|
1e7f63415a | ||
|
d4dff5ce4e | ||
|
86c05357cf | ||
|
f17bd59904 | ||
|
d38c7b22ce | ||
|
942202da17 | ||
|
5c34655f4a | ||
|
57ba373213 | ||
|
5d9d4483fb | ||
|
8b95030665 | ||
|
58a89284d5 | ||
|
28f336cb91 | ||
|
61fc6805a9 | ||
|
f2f24884c3 | ||
|
5d8347bc26 | ||
|
0c595ac801 | ||
|
1d5f90efcd | ||
|
4f51c93f9d | ||
|
4d1c17b426 | ||
|
918a15e244 | ||
|
fc8c7722a1 | ||
|
7eff621fc7 | ||
|
659a187687 | ||
|
cee501349e | ||
|
27de7ea0c2 | ||
|
bfd72c93be | ||
|
6ac0e0236b | ||
|
151bf26bb9 | ||
|
26903320fd | ||
|
884adcc58f | ||
|
f5be84acdc | ||
|
5d940b2a47 | ||
|
583d116871 | ||
|
e361644d5a | ||
|
4e758a838d | ||
|
197d00d21a | ||
|
a9c5388f69 | ||
|
75ca0e7919 | ||
|
fb5f59024c | ||
|
a71ac76e6d | ||
|
2be9c431ca | ||
|
05de4b82e7 | ||
|
820f1fb5f2 | ||
|
65905b0c55 | ||
|
1945ecbf19 | ||
|
11976c42e3 | ||
|
327588f019 | ||
|
84e22b4cca | ||
|
248625ae00 | ||
|
9ab72ffc7c | ||
|
9be09aa909 | ||
|
2bf35277a0 | ||
|
9db134223c | ||
|
ef56e60e06 | ||
|
96965c3da2 | ||
|
a9494f5523 | ||
|
57985480ca | ||
|
f10467556c | ||
|
30707be87f | ||
|
f61fd42061 | ||
|
847ab59e1c | ||
|
427b58a4b6 | ||
|
aa20721be1 | ||
|
5957aa49f5 | ||
|
e133a9fc68 | ||
|
32307601a0 | ||
|
5b139521aa | ||
|
2d7bd40606 | ||
|
24806f6f61 | ||
|
fbe68f0078 | ||
|
74265e8ded | ||
|
41df2ca366 | ||
|
adf19138d5 | ||
|
1758b66c9d | ||
|
dd9b7b358f | ||
|
b45c10d4de | ||
|
c175e414c8 |
16
.gitignore
vendored
16
.gitignore
vendored
@@ -11,6 +11,17 @@ binutils/aa-status
|
||||
binutils/aa-status.8
|
||||
binutils/cJSON.o
|
||||
binutils/po/*.mo
|
||||
changehat/mod_apparmor/.libs
|
||||
changehat/mod_apparmor/mod_apparmor.8
|
||||
changehat/mod_apparmor/mod_apparmor.8.html
|
||||
changehat/mod_apparmor/mod_apparmor.la
|
||||
changehat/mod_apparmor/mod_apparmor.lo
|
||||
changehat/mod_apparmor/mod_apparmor.slo
|
||||
changehat/mod_apparmor/mod_apparmor.so
|
||||
changehat/mod_apparmor/pod2htmd.tmp
|
||||
changehat/pam_apparmor/get_options.o
|
||||
changehat/pam_apparmor/pam_apparmor.o
|
||||
changehat/pam_apparmor/pam_apparmor.so
|
||||
parser/po/*.mo
|
||||
parser/af_names.h
|
||||
parser/cap_names.h
|
||||
@@ -29,6 +40,7 @@ parser/parser_yacc.h
|
||||
parser/pod2htm*.tmp
|
||||
parser/af_rule.o
|
||||
parser/af_unix.o
|
||||
parser/all_rule.o
|
||||
parser/common_optarg.o
|
||||
parser/dbus.o
|
||||
parser/default_features.o
|
||||
@@ -200,7 +212,6 @@ libraries/libapparmor/testsuite/libaalogparse.test/Makefile
|
||||
libraries/libapparmor/testsuite/libaalogparse.test/Makefile.in
|
||||
libraries/libapparmor/testsuite/test_multi/out
|
||||
libraries/libapparmor/testsuite/test_multi_multi-test_multi.o
|
||||
changehat/mod_apparmor/.libs
|
||||
utils/*.8
|
||||
utils/*.8.html
|
||||
utils/*.5
|
||||
@@ -263,7 +274,10 @@ tests/regression/apparmor/link_subset
|
||||
tests/regression/apparmor/mkdir
|
||||
tests/regression/apparmor/mmap
|
||||
tests/regression/apparmor/mount
|
||||
tests/regression/apparmor/move_mount
|
||||
tests/regression/apparmor/named_pipe
|
||||
tests/regression/apparmor/net_inet_rcv
|
||||
tests/regression/apparmor/net_inet_snd
|
||||
tests/regression/apparmor/net_raw
|
||||
tests/regression/apparmor/open
|
||||
tests/regression/apparmor/openat
|
||||
|
@@ -17,7 +17,7 @@ stages:
|
||||
- uname -a
|
||||
|
||||
.install-c-build-deps: &install-c-build-deps
|
||||
- apt-get install --no-install-recommends -y build-essential apache2-dev autoconf automake bison dejagnu flex libpam-dev libtool pkg-config python3-all-dev python3-setuptools ruby-dev swig zlib1g-dev
|
||||
- apt-get install --no-install-recommends -y build-essential apache2-dev autoconf autoconf-archive automake bison dejagnu flex libpam-dev libtool pkg-config python3-all-dev python3-setuptools ruby-dev swig zlib1g-dev
|
||||
|
||||
build-all:
|
||||
stage: build
|
||||
@@ -112,7 +112,7 @@ shellcheck:
|
||||
extends:
|
||||
- .ubuntu-before_script
|
||||
script:
|
||||
- apt-get install --no-install-recommends -y file shellcheck xmlstarlet
|
||||
- apt-get install --no-install-recommends -y python3-minimal file shellcheck xmlstarlet
|
||||
- shellcheck --version
|
||||
- './tests/bin/shellcheck-tree --format=checkstyle
|
||||
| xmlstarlet tr tests/checkstyle2junit.xslt
|
||||
|
@@ -181,6 +181,9 @@ $ make check # depends on the parser having been built first
|
||||
$ make install
|
||||
```
|
||||
|
||||
Note that the empty local/* profile sniplets no longer get created by default.
|
||||
If you want them, run `make local` before running `make check`.
|
||||
|
||||
[Note that for the parser, binutils, and utils, if you only wish to build/use
|
||||
some of the locale languages, you can override the default by passing
|
||||
the LANGS arguments to make; e.g. make all install "LANGS=en_US fr".]
|
||||
|
@@ -172,7 +172,8 @@ static int load_policy_dir(const char *dir_path)
|
||||
while ((dir = readdir(d)) != NULL) {
|
||||
/* Only check regular files for now */
|
||||
if (dir->d_type == DT_REG) {
|
||||
len = strnlen(dir->d_name, PATH_MAX);
|
||||
/* As per POSIX dir->d_name has at most NAME_MAX characters */
|
||||
len = strnlen(dir->d_name, NAME_MAX);
|
||||
/* Ignores .features */
|
||||
if (strncmp(dir->d_name, CACHE_FEATURES_FILE, len) == 0) {
|
||||
continue;
|
||||
|
@@ -115,6 +115,7 @@ static void free_processes(struct process *processes, size_t n) {
|
||||
#define SHOW_PROCESSES 2
|
||||
|
||||
static int verbose = 1;
|
||||
static bool quiet = false;
|
||||
int opt_show = SHOW_PROFILES | SHOW_PROCESSES;
|
||||
bool opt_json = false;
|
||||
bool opt_pretty = false;
|
||||
@@ -127,15 +128,21 @@ const char *opt_exe = ".*";
|
||||
const char *profile_statuses[] = {"enforce", "complain", "prompt", "kill", "unconfined"};
|
||||
const char *process_statuses[] = {"enforce", "complain", "prompt", "kill", "unconfined", "mixed"};
|
||||
|
||||
#define dprintf(...) \
|
||||
#define eprintf(...) \
|
||||
do { \
|
||||
if (!quiet) \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define dprintf(...) \
|
||||
do { \
|
||||
if (verbose) \
|
||||
if (verbose && !opt_json) \
|
||||
printf(__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define dfprintf(...) \
|
||||
do { \
|
||||
if (verbose) \
|
||||
if (verbose && !opt_json) \
|
||||
fprintf(__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
@@ -149,14 +156,14 @@ static int open_profiles(FILE **fp)
|
||||
|
||||
ret = stat("/sys/module/apparmor", &st);
|
||||
if (ret != 0) {
|
||||
dfprintf(stderr, "apparmor not present.\n");
|
||||
eprintf("apparmor not present.\n");
|
||||
return AA_EXIT_DISABLED;
|
||||
}
|
||||
dprintf("apparmor module is loaded.\n");
|
||||
|
||||
ret = aa_find_mountpoint(&apparmorfs);
|
||||
if (ret == -1) {
|
||||
dfprintf(stderr, "apparmor filesystem is not mounted.\n");
|
||||
eprintf("apparmor filesystem is not mounted.\n");
|
||||
return AA_EXIT_NO_CONTROL;
|
||||
}
|
||||
|
||||
@@ -169,9 +176,9 @@ static int open_profiles(FILE **fp)
|
||||
*fp = fopen(apparmor_profiles, "r");
|
||||
if (*fp == NULL) {
|
||||
if (errno == EACCES) {
|
||||
dfprintf(stderr, "You do not have enough privilege to read the profile set.\n");
|
||||
eprintf("You do not have enough privilege to read the profile set.\n");
|
||||
} else {
|
||||
dfprintf(stderr, "Could not open %s: %s", apparmor_profiles, strerror(errno));
|
||||
eprintf("Could not open %s: %s", apparmor_profiles, strerror(errno));
|
||||
}
|
||||
return AA_EXIT_NO_PERM;
|
||||
}
|
||||
@@ -201,7 +208,7 @@ static int get_profiles(FILE *fp, struct profile **profiles, size_t *n) {
|
||||
char *tmpname = aa_splitcon(line, &status);
|
||||
|
||||
if (!tmpname) {
|
||||
dfprintf(stderr, "Error: failed profile name split of '%s'.\n", line);
|
||||
eprintf("Error: failed profile name split of '%s'.\n", line);
|
||||
// skip this entry and keep processing
|
||||
// else would be AA_EXIT_INTERNAL_ERROR;
|
||||
continue;
|
||||
@@ -344,7 +351,7 @@ static int get_processes(struct profile *profiles,
|
||||
continue;
|
||||
} else if (rc == -1 ||
|
||||
asprintf(&exe, "/proc/%s/exe", entry->d_name) == -1) {
|
||||
fprintf(stderr, "ERROR: Failed to allocate memory\n");
|
||||
eprintf("ERROR: Failed to allocate memory\n");
|
||||
ret = AA_EXIT_INTERNAL_ERROR;
|
||||
goto exit;
|
||||
} else if (mode) {
|
||||
@@ -367,7 +374,7 @@ static int get_processes(struct profile *profiles,
|
||||
// ensure enough space for NUL terminator
|
||||
real_exe = calloc(PATH_MAX + 1, sizeof(char));
|
||||
if (real_exe == NULL) {
|
||||
fprintf(stderr, "ERROR: Failed to allocate memory\n");
|
||||
eprintf("ERROR: Failed to allocate memory\n");
|
||||
ret = AA_EXIT_INTERNAL_ERROR;
|
||||
goto exit;
|
||||
}
|
||||
@@ -575,7 +582,7 @@ static int detailed_profiles(FILE *outf, filters_t *filters, bool json,
|
||||
*/
|
||||
subfilters.mode = &mode_filter;
|
||||
if (regcomp(&mode_filter, profile_statuses[i], REG_NOSUB) != 0) {
|
||||
dfprintf(stderr, "Error: failed to compile sub filter '%s'\n",
|
||||
eprintf("Error: failed to compile sub filter '%s'\n",
|
||||
profile_statuses[i]);
|
||||
return AA_EXIT_INTERNAL_ERROR;
|
||||
}
|
||||
@@ -641,7 +648,7 @@ static int detailed_processes(FILE *outf, filters_t *filters, bool json,
|
||||
*/
|
||||
subfilters.mode = &mode_filter;
|
||||
if (regcomp(&mode_filter, process_statuses[i], REG_NOSUB) != 0) {
|
||||
dfprintf(stderr, "Error: failed to compile sub filter '%s'\n",
|
||||
eprintf("Error: failed to compile sub filter '%s'\n",
|
||||
profile_statuses[i]);
|
||||
return AA_EXIT_INTERNAL_ERROR;
|
||||
}
|
||||
@@ -765,8 +772,9 @@ static int print_usage(const char *command, bool error)
|
||||
" --json displays multiple data points in machine-readable JSON format\n"
|
||||
" --pretty-json same data as --json, formatted for human consumption as well\n"
|
||||
" --verbose (default) displays data points about loaded policy set\n"
|
||||
" -h [(legacy|filter)] this message, or info on the specified option\n"
|
||||
" --help[=(legacy|filter)] this message, or info on the specified option\n",
|
||||
" --quiet don't output error messages\n"
|
||||
" -h[(legacy|filters)] this message, or info on the specified option\n"
|
||||
" --help[=(legacy|filters)] this message, or info on the specified option\n",
|
||||
command);
|
||||
|
||||
exit(status);
|
||||
@@ -792,6 +800,7 @@ static int print_usage(const char *command, bool error)
|
||||
#define ARG_EXE 143
|
||||
#define ARG_PROMPT 144
|
||||
#define ARG_VERBOSE 'v'
|
||||
#define ARG_QUIET 'q'
|
||||
#define ARG_HELP 'h'
|
||||
|
||||
static int parse_args(int argc, char **argv)
|
||||
@@ -809,6 +818,7 @@ static int parse_args(int argc, char **argv)
|
||||
{"json", no_argument, 0, ARG_JSON},
|
||||
{"pretty-json", no_argument, 0, ARG_PRETTY},
|
||||
{"verbose", no_argument, 0, ARG_VERBOSE},
|
||||
{"quiet", no_argument, 0, ARG_QUIET},
|
||||
{"help", 2, 0, ARG_HELP},
|
||||
{"count", no_argument, 0, ARG_COUNT},
|
||||
{"show", 1, 0, ARG_SHOW},
|
||||
@@ -820,7 +830,7 @@ static int parse_args(int argc, char **argv)
|
||||
};
|
||||
|
||||
// Using exit here is temporary
|
||||
while ((opt = getopt_long(argc, argv, "+vh", long_opts, NULL)) != -1) {
|
||||
while ((opt = getopt_long(argc, argv, "+vh::", long_opts, NULL)) != -1) {
|
||||
switch (opt) {
|
||||
case ARG_ENABLED:
|
||||
exit(aa_is_enabled() == 1 ? 0 : AA_EXIT_DISABLED);
|
||||
@@ -830,6 +840,9 @@ static int parse_args(int argc, char **argv)
|
||||
/* default opt_mode */
|
||||
/* default opt_show */
|
||||
break;
|
||||
case ARG_QUIET:
|
||||
quiet = true;
|
||||
break;
|
||||
case ARG_HELP:
|
||||
if (!optarg) {
|
||||
print_usage(argv[0], false);
|
||||
@@ -838,7 +851,7 @@ static int parse_args(int argc, char **argv)
|
||||
} else if (strcmp(optarg, "filters") == 0) {
|
||||
usage_filters();
|
||||
} else {
|
||||
dfprintf(stderr, "Error: Invalid --help option '%s'.\n", optarg);
|
||||
eprintf("Error: Invalid --help option '%s'.\n", optarg);
|
||||
print_usage(argv[0], true);
|
||||
break;
|
||||
}
|
||||
@@ -906,7 +919,7 @@ static int parse_args(int argc, char **argv)
|
||||
} else if (strcmp(optarg, "processes") == 0) {
|
||||
opt_show = SHOW_PROCESSES;
|
||||
} else {
|
||||
dfprintf(stderr, "Error: Invalid --show option '%s'.\n", optarg);
|
||||
eprintf("Error: Invalid --show option '%s'.\n", optarg);
|
||||
print_usage(argv[0], true);
|
||||
break;
|
||||
}
|
||||
@@ -928,7 +941,7 @@ static int parse_args(int argc, char **argv)
|
||||
break;
|
||||
|
||||
default:
|
||||
dfprintf(stderr, "Error: Invalid command.\n");
|
||||
eprintf("Error: Invalid command.\n");
|
||||
print_usage(argv[0], true);
|
||||
break;
|
||||
}
|
||||
@@ -953,7 +966,7 @@ int main(int argc, char **argv)
|
||||
if (argc > 1) {
|
||||
int pos = parse_args(argc, argv);
|
||||
if (pos < argc) {
|
||||
dfprintf(stderr, "Error: Unknown options.\n");
|
||||
eprintf("Error: Unknown options.\n");
|
||||
print_usage(progname, true);
|
||||
}
|
||||
} else {
|
||||
@@ -965,24 +978,24 @@ int main(int argc, char **argv)
|
||||
|
||||
init_filters(&filters, &filter_set);
|
||||
if (regcomp(filters.mode, opt_mode, REG_NOSUB) != 0) {
|
||||
dfprintf(stderr, "Error: failed to compile mode filter '%s'\n",
|
||||
eprintf("Error: failed to compile mode filter '%s'\n",
|
||||
opt_mode);
|
||||
return AA_EXIT_INTERNAL_ERROR;
|
||||
}
|
||||
if (regcomp(filters.profile, opt_profiles, REG_NOSUB) != 0) {
|
||||
dfprintf(stderr, "Error: failed to compile profiles filter '%s'\n",
|
||||
eprintf("Error: failed to compile profiles filter '%s'\n",
|
||||
opt_profiles);
|
||||
ret = AA_EXIT_INTERNAL_ERROR;
|
||||
goto out;
|
||||
}
|
||||
if (regcomp(filters.pid, opt_pid, REG_NOSUB) != 0) {
|
||||
dfprintf(stderr, "Error: failed to compile ps filter '%s'\n",
|
||||
eprintf("Error: failed to compile ps filter '%s'\n",
|
||||
opt_pid);
|
||||
ret = AA_EXIT_INTERNAL_ERROR;
|
||||
goto out;
|
||||
}
|
||||
if (regcomp(filters.exe, opt_exe, REG_NOSUB) != 0) {
|
||||
dfprintf(stderr, "Error: failed to compile exe filter '%s'\n",
|
||||
eprintf("Error: failed to compile exe filter '%s'\n",
|
||||
opt_exe);
|
||||
ret = AA_EXIT_INTERNAL_ERROR;
|
||||
goto out;
|
||||
@@ -997,7 +1010,7 @@ int main(int argc, char **argv)
|
||||
outf_save = outf;
|
||||
outf = open_memstream(&buffer, &buffer_size);
|
||||
if (!outf) {
|
||||
dfprintf(stderr, "Failed to open memstream: %m\n");
|
||||
eprintf("Failed to open memstream: %m\n");
|
||||
return AA_EXIT_INTERNAL_ERROR;
|
||||
}
|
||||
}
|
||||
@@ -1008,7 +1021,7 @@ int main(int argc, char **argv)
|
||||
*/
|
||||
ret = get_profiles(fp, &profiles, &nprofiles);
|
||||
if (ret != 0) {
|
||||
dfprintf(stderr, "Failed to get profiles: %d....\n", ret);
|
||||
eprintf("Failed to get profiles: %d....\n", ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1032,7 +1045,7 @@ int main(int argc, char **argv)
|
||||
|
||||
ret = get_processes(profiles, nprofiles, &processes, &nprocesses);
|
||||
if (ret != 0) {
|
||||
dfprintf(stderr, "Failed to get processes: %d....\n", ret);
|
||||
eprintf("Failed to get processes: %d....\n", ret);
|
||||
} else if (opt_count) {
|
||||
ret = simple_filtered_process_count(outf, &filters,
|
||||
processes, nprocesses);
|
||||
@@ -1058,14 +1071,14 @@ int main(int argc, char **argv)
|
||||
outf = outf_save;
|
||||
json = cJSON_Parse(buffer);
|
||||
if (!json) {
|
||||
dfprintf(stderr, "Failed to parse json output");
|
||||
eprintf("Failed to parse json output");
|
||||
ret = AA_EXIT_INTERNAL_ERROR;
|
||||
goto out;
|
||||
}
|
||||
|
||||
pretty = cJSON_Print(json);
|
||||
if (!pretty) {
|
||||
dfprintf(stderr, "Failed to print pretty json");
|
||||
eprintf("Failed to print pretty json");
|
||||
ret = AA_EXIT_INTERNAL_ERROR;
|
||||
goto out;
|
||||
}
|
||||
|
34
binutils/po/aa_load.pot
Normal file
34
binutils/po/aa_load.pot
Normal file
@@ -0,0 +1,34 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Canonical Ltd
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: apparmor@lists.ubuntu.com\n"
|
||||
"POT-Creation-Date: 2025-02-18 07:37-0800\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../aa_load.c:40
|
||||
msgid "aa-load: WARN: "
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_load.c:41
|
||||
msgid "aa-load: ERROR: "
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_load.c:51
|
||||
msgid "\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_load.c:52
|
||||
msgid "aa-load: DEBUG: "
|
||||
msgstr ""
|
67
binutils/po/be.po
Normal file
67
binutils/po/be.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# Belarusian translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2020-05-05 21:55+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Belarusian <be@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-05-06 05:41+0000\n"
|
||||
"X-Generator: Launchpad (build fbdff7602bd10fb883bf7e2ddcc7fd5a16f60398)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr ""
|
71
binutils/po/ca.po
Normal file
71
binutils/po/ca.po
Normal file
@@ -0,0 +1,71 @@
|
||||
# Catalan translation for apparmor
|
||||
# Copyright (c) 2024 Rosetta Contributors and Canonical Ltd 2024
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2024-09-14 10:17+0000\n"
|
||||
"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
|
||||
"Language-Team: Catalan <ca@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2024-09-15 07:16+0000\n"
|
||||
"X-Generator: Launchpad (build 1b1ed1ad2dbfc71ee62b5c5491c975135a771bf0)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [opcions]\n"
|
||||
" opcions:\n"
|
||||
" -q | --quiet No imprimeixis cap missatge\n"
|
||||
" -h | --help Imprimeix l'ajuda\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "opcions desconegudes o incompatibles\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "opció desconeguda «%s»\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "Sí\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "No - no esta disponible a aquest sistema\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "No - desactivat a l'inici.\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "Potser - la interfície de política no està disponible.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "Potser - permisos insuficient per determinar la disponibilitat.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "Error - '%s'\n"
|
67
binutils/po/cs.po
Normal file
67
binutils/po/cs.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# Czech translation for apparmor
|
||||
# Copyright (c) 2022 Rosetta Contributors and Canonical Ltd 2022
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2022-01-09 11:59+0000\n"
|
||||
"Last-Translator: Marek Hladík <mhladik@seznam.cz>\n"
|
||||
"Language-Team: Czech <cs@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2022-01-10 06:32+0000\n"
|
||||
"X-Generator: Launchpad (build 1682fd44eec4f62371f0bed122a83482daf08e23)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "neznámé nebo nekompatibilní volby\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "neznámá volba '%s'\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "Ano\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "Ne - není v tomto systému k dispozici.\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "Ne - zakázáno při startu.\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "Možná - rozhraní zásad není k dispozici.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "Možná - nedostatečná oprávnění k určení dostupnosti.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "Chyba - '%s'\n"
|
67
binutils/po/en_AU.po
Normal file
67
binutils/po/en_AU.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# English (Australia) translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2020-11-28 04:45+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: English (Australia) <en_AU@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-11-29 06:26+0000\n"
|
||||
"X-Generator: Launchpad (build 12d09381f8e8eee3115395875b132e165fa96574)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr ""
|
67
binutils/po/en_CA.po
Normal file
67
binutils/po/en_CA.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# English (Canada) translation for apparmor
|
||||
# Copyright (c) 2021 Rosetta Contributors and Canonical Ltd 2021
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2021-10-01 04:55+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: English (Canada) <en_CA@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2021-10-02 06:17+0000\n"
|
||||
"X-Generator: Launchpad (build 1ce78163f6a09ed42b4201fe7d3f0e3a2eba7d02)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr ""
|
71
binutils/po/et.po
Normal file
71
binutils/po/et.po
Normal file
@@ -0,0 +1,71 @@
|
||||
# Estonian translation for apparmor
|
||||
# Copyright (c) 2023 Rosetta Contributors and Canonical Ltd 2023
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2023-07-04 08:52+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Estonian <et@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2023-07-05 04:31+0000\n"
|
||||
"X-Generator: Launchpad (build beda0e9dd2b131780db60fe479d4b43618b27243)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [valikud]\n"
|
||||
" valikud:\n"
|
||||
" -q | --quiet Ärge printige sõnumeid välja\n"
|
||||
" -h | --help Prindi abiinfo\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "tundmatud või ühildumatud valikud\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "tundmatu valik '%s'\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "Jah\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "Ei – pole selles süsteemis saadaval.\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "Ei – käivitamisel keelatud.\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "Võib-olla – poliisiliides pole saadaval.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "Võib-olla - kättesaadavuse määramiseks pole piisavalt õigusi.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "Viga – '%s'\n"
|
67
binutils/po/gl.po
Normal file
67
binutils/po/gl.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# Galician translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2020-04-21 14:59+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Galician <gl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-04-22 06:10+0000\n"
|
||||
"X-Generator: Launchpad (build aad6b57d58e2f621954298e262c1cc904860f5d2)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr ""
|
71
binutils/po/he.po
Normal file
71
binutils/po/he.po
Normal file
@@ -0,0 +1,71 @@
|
||||
# Hebrew translation for apparmor
|
||||
# Copyright (c) 2023 Rosetta Contributors and Canonical Ltd 2023
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2023-10-05 05:12+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Hebrew <he@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2023-10-06 08:32+0000\n"
|
||||
"X-Generator: Launchpad (build bd6cfd0cfc024dbe1dcd7d5d91165fb4f6a6c596)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [אפשרויות]\n"
|
||||
" אפשרויות:\n"
|
||||
" -q | --quiet לא להציג הודעות\n"
|
||||
" -h | --help הצגת עזרה\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "אפשרויות לא ידועות או לא נתמכות\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "האפשרות ‚%s’ לא מוכרת\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "כן\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "לא - לא זמין במערכת הזאת.\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "לא - מושבת בעלייה.\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "אולי - מנשק המדיניות לא זמין.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "אולי - אין מספיק הרשאות לקבוע זמינות.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "שגיאה - ‚%s’\n"
|
67
binutils/po/hi.po
Normal file
67
binutils/po/hi.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# Hindi translation for apparmor
|
||||
# Copyright (c) 2023 Rosetta Contributors and Canonical Ltd 2023
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2023-01-09 07:39+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Hindi <hi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2023-01-10 06:22+0000\n"
|
||||
"X-Generator: Launchpad (build 87bfee1fd14ea3245297d63eeec1e4c8a1d203a8)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr ""
|
71
binutils/po/hr.po
Normal file
71
binutils/po/hr.po
Normal file
@@ -0,0 +1,71 @@
|
||||
# Croatian translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2021-10-03 10:17+0000\n"
|
||||
"Last-Translator: gogo <trebelnik2@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2021-10-04 06:23+0000\n"
|
||||
"X-Generator: Launchpad (build 1ce78163f6a09ed42b4201fe7d3f0e3a2eba7d02)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [mogućnosti]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Ne prikazuj poruke\n"
|
||||
" -h | --help Prikaži pomoć\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "nepoznata ili nepotpuna mogućnost\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "nepoznata mogućnost '%s'\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "Da\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "Ne - nedostupno na ovom sustavu.\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "Ne - onemogućeno pri pokretanju.\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "Možda - pravilo sučelja nedostupno.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "Možda - nedovoljna dozvola za određivanje dostupnosti.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "Greška - '%s'\n"
|
72
binutils/po/it.po
Normal file
72
binutils/po/it.po
Normal file
@@ -0,0 +1,72 @@
|
||||
# Italian translation for apparmor
|
||||
# Copyright (c) 2022 Rosetta Contributors and Canonical Ltd 2022
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2022-06-30 17:54+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Italian <it@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2022-07-01 04:30+0000\n"
|
||||
"X-Generator: Launchpad (build f48158886a49da429840bcd298f0c7ed60f9ad7b)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [opzioni]\n"
|
||||
" opzioni:\n"
|
||||
" -q | --quiet Non stampa nessun messaggio\n"
|
||||
" -h | --help Stampa la guida\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "opzioni sconosciute o incompatibili\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "opzione sconosciuta '%s'\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "Si\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "No - non disponibile su questo sistema.\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "No - disabilitato all'avvio.\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "Forse - interfaccia dei criteri non disponibile.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
"Forse - autorizzazioni insufficienti per determinare la disponibilità.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "Errore - '%s'\n"
|
72
binutils/po/ka.po
Normal file
72
binutils/po/ka.po
Normal file
@@ -0,0 +1,72 @@
|
||||
# Georgian translation for apparmor
|
||||
# Copyright (c) 2023 Rosetta Contributors and Canonical Ltd 2023
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2023-06-26 15:06+0000\n"
|
||||
"Last-Translator: NorwayFun <temuri.doghonadze@gmail.com>\n"
|
||||
"Language-Team: Georgian <ka@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2023-06-27 04:31+0000\n"
|
||||
"X-Generator: Launchpad (build aedf8597c50c1abc5fb7f9e871e686dfcb381fde)\n"
|
||||
"Language: aa\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [პარამეტრები]\n"
|
||||
" პარამეტრები:\n"
|
||||
" -q | --quiet შეტყობინებები გამოტანილი არ იქნება\n"
|
||||
" -h | --help დახმარების გამოტანა\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "უცნობი ან შეუთავსებელი პარამეტრები\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "უცნობი პარამეტრი \"%s\"-სთვის\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "დიახ\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "არა - მიუწვდომელია ამ სისტემაზე\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "არა - გამორთულია ჩატვირთვისას\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "შეიძლება - პოლიტიკის ინტერფეისი ხელმისაწვდომი არაა.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "შეიძლება - არასაკმარისი წვდომები ხელმისაწვდომობის დასადგენად.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "შეცდომა - \"%s\"\n"
|
67
binutils/po/kab.po
Normal file
67
binutils/po/kab.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# Kabyle translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2020-04-29 14:31+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Kabyle <kab@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-04-30 05:44+0000\n"
|
||||
"X-Generator: Launchpad (build fbdff7602bd10fb883bf7e2ddcc7fd5a16f60398)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr ""
|
73
binutils/po/my.po
Normal file
73
binutils/po/my.po
Normal file
@@ -0,0 +1,73 @@
|
||||
# Burmese translation for apparmor
|
||||
# Copyright (c) 2022 Rosetta Contributors and Canonical Ltd 2022
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2022-06-26 11:50+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Burmese <my@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2022-06-27 04:30+0000\n"
|
||||
"X-Generator: Launchpad (build 51a2e4fa2e9b8e45f00904ad7f53546f45ac48a5)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s- [options]\n"
|
||||
" ရွေးချယ်စရာများ-\n"
|
||||
" -q | --quiet မည်သည့်စာတိုကိုမှ ပရင့်မထုတ်ပါနှင့်။\n"
|
||||
" -h | --help ပရင့်အကူအညီ\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "အမည်မသိ သို့မဟုတ် သဟဇာတမဖြစ်သော ရွေးချယ်စရာများ\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "အမည်မသိရွေးချယ်မှု '%s'\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "ဟုတ်\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "မဟုတ်ပါ - ဤစနစ်တွင် မရနိုင်ပါ။\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "မဟုတ်ပါ - boot တွင် ပိတ်ထားပါသည်။\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "ဖြစ်နိုင်ပါသည် - မူဝါဒ interface ကို မရနိုင်ပါ။\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
"ဖြစ်နိုင်ပါသည် - ရရှိနိုင်မှုကို ဆုံးဖြတ်ရန်အတွက် ခွင့်ပြုချက်များမှာ "
|
||||
"လုံလောက်မှုမရှိပါ။\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "အမှား- '%s'\n"
|
67
binutils/po/oc.po
Normal file
67
binutils/po/oc.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# Occitan (post 1500) translation for apparmor
|
||||
# Copyright (c) 2021 Rosetta Contributors and Canonical Ltd 2021
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2021-01-14 18:26+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Occitan (post 1500) <oc@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2021-01-15 07:59+0000\n"
|
||||
"X-Generator: Launchpad (build 511b4a3b6512aa3d421c5f7d74f3527e78bff26e)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr ""
|
71
binutils/po/pl.po
Normal file
71
binutils/po/pl.po
Normal file
@@ -0,0 +1,71 @@
|
||||
# Polish translation for apparmor
|
||||
# Copyright (c) 2021 Rosetta Contributors and Canonical Ltd 2021
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2021-07-22 20:10+0000\n"
|
||||
"Last-Translator: Marek Adamski <Unknown>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2021-07-23 06:03+0000\n"
|
||||
"X-Generator: Launchpad (build 7edebbcd0516593cf020aaa3c59299732a7c73cc)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [opcje]\n"
|
||||
" opcje:\n"
|
||||
" -q | --quiet Nie wyświetlaj żadnych komunikatów\n"
|
||||
" -h | --help Wyświetl pomoc\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "nieznane lub niekompatybilne opcje\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "nieznana opcja '%s'\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "Tak\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "Nie - nie jest dostępne w tym systemie.\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "Nie - wyłączone podczas rozruchu.\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "Może - interfejs zasad nie jest dostępny.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "Może - brak wystarczających uprawnień do określenia dostępności.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "Błąd - '%s'\n"
|
71
binutils/po/pt_BR.po
Normal file
71
binutils/po/pt_BR.po
Normal file
@@ -0,0 +1,71 @@
|
||||
# Brazilian Portuguese translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2020-04-27 20:32+0000\n"
|
||||
"Last-Translator: Rodrigo Farias <Unknown>\n"
|
||||
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-04-28 05:52+0000\n"
|
||||
"X-Generator: Launchpad (build d1105341713c5be348effe2a5142c4a210ce4cde)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [options]\n"
|
||||
" opções:\n"
|
||||
" -q | --quiet Não imprimir nenhum mensagem\n"
|
||||
" -h | --help Assistente de impressão\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "opções incompatíveis ou desconhecidas\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "opção desconhecida '%s'\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "Sim\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "Não - não disponível neste sistema.\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "Não - desabilitado na inicialização.\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "Talvez - interface de política não disponível.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "Talvez - permissões insuficientes para determinar disponibilidade.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "Erro - '%s'\n"
|
@@ -1,21 +1,26 @@
|
||||
# Romanian translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# Romanian translation for apparmor, "apparmor-binutils" component.
|
||||
# Mesajele în limba română pentru pachetul „apparmor”, componenta „apparmor-binutils”.
|
||||
# Copyright © 2020 Rosetta Contributors and Canonical Ltd.
|
||||
# Copyright © 2024 Canonical Ltd.
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
# Daniel Slavu <Unknown>, feb-2020.
|
||||
# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, sep-2024.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Project-Id-Version: apparmor-binutils\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2020-02-20 21:47+0000\n"
|
||||
"Last-Translator: Daniel Slavu <Unknown>\n"
|
||||
"Language-Team: Romanian <ro@li.org>\n"
|
||||
"PO-Revision-Date: 2024-09-23 22:45+0000\n"
|
||||
"Last-Translator: Remus-Gabriel Chelu <Unknown>\n"
|
||||
"Language-Team: Romanian <debian-l10n-romanian@lists.debian.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-02-21 05:39+0000\n"
|
||||
"X-Generator: Launchpad (build 19413b719a8df7423ab1390528edadce9e0e4aca)\n"
|
||||
"X-Launchpad-Export-Date: 2024-09-25 04:33+0000\n"
|
||||
"X-Generator: Launchpad (build 1b1ed1ad2dbfc71ee62b5c5491c975135a771bf0)\n"
|
||||
"Language: ro\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
@@ -27,8 +32,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"%s: [opțiuni]\n"
|
||||
" opțiuni:\n"
|
||||
" -q | --calm Nu imprima niciun mesaj\n"
|
||||
" -h | - ajutor Imprimare ajutor\n"
|
||||
" -q | --quiet nu afișează niciun mesaj\n"
|
||||
" -h | --help imprimă ajutorul\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
@@ -38,7 +43,7 @@ msgstr "opțiuni necunoscute sau incompatibile\n"
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "opțiune necunoscută '%s'\n"
|
||||
msgstr "opțiune necunoscută „%s”\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
@@ -58,7 +63,8 @@ msgstr "Nu - dezactivat la pornire.\n"
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "Poate - interfața politică nu este disponibilă.\n"
|
||||
msgstr ""
|
||||
"Poate - interfața politică (de directive politice) nu este disponibilă.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
@@ -69,4 +75,4 @@ msgstr ""
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "Eroare - '%s'\n"
|
||||
msgstr "Eroare - „%s”\n"
|
||||
|
67
binutils/po/sr.po
Normal file
67
binutils/po/sr.po
Normal file
@@ -0,0 +1,67 @@
|
||||
# Serbian translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2020-11-23 18:06+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Serbian <sr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-11-24 05:55+0000\n"
|
||||
"X-Generator: Launchpad (build c35ff22711d15549e2303ae18ae521fd91f6bf00)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr ""
|
71
binutils/po/uk.po
Normal file
71
binutils/po/uk.po
Normal file
@@ -0,0 +1,71 @@
|
||||
# Ukrainian translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2020-05-19 21:48+0000\n"
|
||||
"Last-Translator: Nazarii Ritter <nazariy.ritter@gmail.com>\n"
|
||||
"Language-Team: Ukrainian <uk@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-05-20 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 0385b538081bc4718df6fb844a3afc89729c94ce)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [опції]\n"
|
||||
" опції:\n"
|
||||
" -q | --quiet Не виводити жодних повідомлень\n"
|
||||
" -h | --help Вивести довідку\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "невідомі або несумісні опції\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "невідомий параметр «%s»\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "Так\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "Ні – недоступно на цій системі.\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "Ні – вимкнено під час завантаження.\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "Можливо – інтерфейс політики недоступний.\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "Можливо – недостатньо дозволів для визначення наявності.\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "Помилка - '%s'\n"
|
71
binutils/po/zh_CN.po
Normal file
71
binutils/po/zh_CN.po
Normal file
@@ -0,0 +1,71 @@
|
||||
# Chinese (Simplified) translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2015-11-28 10:23-0800\n"
|
||||
"PO-Revision-Date: 2020-05-14 09:16+0000\n"
|
||||
"Last-Translator: 玉堂白鹤 <yjwork@qq.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-05-15 05:51+0000\n"
|
||||
"X-Generator: Launchpad (build 0385b538081bc4718df6fb844a3afc89729c94ce)\n"
|
||||
|
||||
#: ../aa_enabled.c:26
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: [options]\n"
|
||||
" options:\n"
|
||||
" -q | --quiet Don't print out any messages\n"
|
||||
" -h | --help Print help\n"
|
||||
msgstr ""
|
||||
"%s: [选项]\n"
|
||||
" 选项:\n"
|
||||
" -q | --quiet 不要打印任何消息\n"
|
||||
" -h | --help 打印帮助\n"
|
||||
|
||||
#: ../aa_enabled.c:45
|
||||
#, c-format
|
||||
msgid "unknown or incompatible options\n"
|
||||
msgstr "未知或不兼容的选项\n"
|
||||
|
||||
#: ../aa_enabled.c:55
|
||||
#, c-format
|
||||
msgid "unknown option '%s'\n"
|
||||
msgstr "未知选项 '%s'\n"
|
||||
|
||||
#: ../aa_enabled.c:64
|
||||
#, c-format
|
||||
msgid "Yes\n"
|
||||
msgstr "是\n"
|
||||
|
||||
#: ../aa_enabled.c:71
|
||||
#, c-format
|
||||
msgid "No - not available on this system.\n"
|
||||
msgstr "否 - 在此系统上不可用。\n"
|
||||
|
||||
#: ../aa_enabled.c:74
|
||||
#, c-format
|
||||
msgid "No - disabled at boot.\n"
|
||||
msgstr "否 - 引导时被禁用。\n"
|
||||
|
||||
#: ../aa_enabled.c:77
|
||||
#, c-format
|
||||
msgid "Maybe - policy interface not available.\n"
|
||||
msgstr "也许 - 策略界面不可用\n"
|
||||
|
||||
#: ../aa_enabled.c:81
|
||||
#, c-format
|
||||
msgid "Maybe - insufficient permissions to determine availability.\n"
|
||||
msgstr "也许 - 没有足够的权限确定可用性。\n"
|
||||
|
||||
#: ../aa_enabled.c:84
|
||||
#, c-format
|
||||
msgid "Error - '%s'\n"
|
||||
msgstr "错误 - '%s'\n"
|
@@ -67,10 +67,10 @@ to syslog.
|
||||
References
|
||||
----------
|
||||
Project webpage:
|
||||
http://developer.novell.com/wiki/index.php/Novell_AppArmor
|
||||
https://apparmor.net/
|
||||
|
||||
To provide feedback or ask questions please contact the
|
||||
apparmor-dev@forge.novell.com mail list. This is the development list
|
||||
apparmor@lists.ubuntu.com mail list. This is the development list
|
||||
for the AppArmor team.
|
||||
|
||||
See also: change_hat(3), and the Linux-PAM online documentation at
|
||||
|
@@ -188,10 +188,9 @@ parent context.
|
||||
8. Feedback/Resources
|
||||
-----------------
|
||||
|
||||
To provide feedback or ask questions please contact the
|
||||
apparmor-dev@forge.novell.com mail list. This is the development list for the
|
||||
AppArmor team.
|
||||
|
||||
|
||||
|
||||
Project webpage:
|
||||
https://apparmor.net/
|
||||
|
||||
To provide feedback or ask questions please contact the
|
||||
apparmor@lists.ubuntu.com mail list. This is the development list
|
||||
for the AppArmor team.
|
||||
|
@@ -188,10 +188,9 @@ parent context.
|
||||
8. Feedback/Resources
|
||||
-----------------
|
||||
|
||||
To provide feedback or ask questions please contact the
|
||||
apparmor-dev@forge.novell.com mail list. This is the development list for the
|
||||
AppArmor team.
|
||||
|
||||
|
||||
|
||||
Project webpage:
|
||||
https://apparmor.net/
|
||||
|
||||
To provide feedback or ask questions please contact the
|
||||
apparmor@lists.ubuntu.com mail list. This is the development list
|
||||
for the AppArmor team.
|
||||
|
@@ -1 +1 @@
|
||||
4.0.0~alpha2
|
||||
4.0.3
|
||||
|
@@ -92,6 +92,14 @@ if test "$ac_cv_prog_cc_c99" = "no"; then
|
||||
AC_MSG_ERROR([C99 mode is required to build libapparmor])
|
||||
fi
|
||||
|
||||
m4_ifndef([AX_CHECK_COMPILE_FLAG], [AC_MSG_ERROR(['autoconf-archive' missing])])
|
||||
EXTRA_CFLAGS="-Wall $EXTRA_WARNINGS -fPIC"
|
||||
AX_CHECK_COMPILE_FLAG([-flto-partition=none], , , [-Werror])
|
||||
AS_VAR_IF([ax_cv_check_cflags__Werror__flto_partition_none], [yes],
|
||||
[EXTRA_CFLAGS="$EXTRA_CFLAGS -flto-partition=none"]
|
||||
,)
|
||||
AC_SUBST([AM_CFLAGS], ["$EXTRA_CFLAGS"])
|
||||
|
||||
AC_OUTPUT(
|
||||
Makefile
|
||||
doc/Makefile
|
||||
|
@@ -116,6 +116,14 @@ The specified I<file/task> does not exist or is not visible.
|
||||
|
||||
The confinement data is too large to fit in the supplied buffer.
|
||||
|
||||
=item B<ENOPROTOOPT>
|
||||
|
||||
The kernel doesn't support the SO_PEERLABEL option in sockets. This happens
|
||||
mainly when the kernel lacks 'fine grained unix mediation' support. It also
|
||||
can happen on LSM stacking kernels where another LSM has claimed this
|
||||
interface and decides to return this error, although this is really a
|
||||
corner case.
|
||||
|
||||
=back
|
||||
|
||||
=head1 NOTES
|
||||
|
@@ -109,12 +109,12 @@ To immediately stack a profile named "profile_a", as performed with
|
||||
aa_stack_profile("profile_a"), the equivalent of this shell command can be
|
||||
used:
|
||||
|
||||
$ echo -n "stackprofile profile_a" > /proc/self/attr/current
|
||||
$ echo -n "stack profile_a" > /proc/self/attr/current
|
||||
|
||||
To stack a profile named "profile_a" at the next exec, as performed with
|
||||
aa_stack_onexec("profile_a"), the equivalent of this shell command can be used:
|
||||
|
||||
$ echo -n "stackexec profile_a" > /proc/self/attr/exec
|
||||
$ echo -n "stack profile_a" > /proc/self/attr/exec
|
||||
|
||||
These raw AppArmor filesystem operations must only be used when using
|
||||
libapparmor is not a viable option.
|
||||
@@ -184,6 +184,7 @@ with apparmor_parser(8):
|
||||
/etc/passwd r,
|
||||
|
||||
# Needed for aa_stack_profile()
|
||||
change-profile -> &i_cant_be_trusted_anymore,
|
||||
/usr/lib/libapparmor*.so* mr,
|
||||
/proc/[0-9]*/attr/current w,
|
||||
}
|
||||
|
@@ -32,10 +32,10 @@ INCLUDES = $(all_includes)
|
||||
#
|
||||
# After changing the AA_LIB_* variables, also update EXPECTED_SO_NAME.
|
||||
|
||||
AA_LIB_CURRENT = 18
|
||||
AA_LIB_CURRENT = 20
|
||||
AA_LIB_REVISION = 0
|
||||
AA_LIB_AGE = 17
|
||||
EXPECTED_SO_NAME = libapparmor.so.1.17.0
|
||||
AA_LIB_AGE = 19
|
||||
EXPECTED_SO_NAME = libapparmor.so.1.19.0
|
||||
|
||||
SUFFIXES = .pc.in .pc
|
||||
|
||||
@@ -45,7 +45,6 @@ include $(COMMONDIR)/Make.rules
|
||||
BUILT_SOURCES = grammar.h scanner.h af_protos.h
|
||||
AM_LFLAGS = -v
|
||||
AM_YFLAGS = -d -p aalogparse_
|
||||
AM_CFLAGS = -Wall $(EXTRA_WARNINGS) -fPIC -flto-partition=none
|
||||
AM_CPPFLAGS = -D_GNU_SOURCE -I$(top_srcdir)/include/
|
||||
scanner.h: scanner.l
|
||||
$(LEX) -v $<
|
||||
@@ -53,7 +52,7 @@ scanner.h: scanner.l
|
||||
scanner.c: scanner.l
|
||||
|
||||
af_protos.h:
|
||||
echo '#include <netinet/in.h>' | $(CC) $(CPPFLAGS) -E -dM - | LC_ALL=C sed -n -e "/IPPROTO_MAX/d" -e "s/^\#define[ \\t]\\+IPPROTO_\\([A-Z0-9_]\\+\\)\\(.*\\)$$/AA_GEN_PROTO_ENT(\\UIPPROTO_\\1, \"\\L\\1\")/p" > $@
|
||||
echo '#include <netinet/in.h>' | $(CC) $(CPPFLAGS) -E -dD - | LC_ALL=C sed -n -e "/IPPROTO_MAX/d" -e "s/^\#define[ \\t]\\+IPPROTO_\\([A-Z0-9_]\\+\\)\\(.*\\)$$/AA_GEN_PROTO_ENT(\\UIPPROTO_\\1, \"\\L\\1\")/p" > $@
|
||||
|
||||
lib_LTLIBRARIES = libapparmor.la
|
||||
noinst_HEADERS = grammar.h parser.h scanner.h af_protos.h private.h PMurHash.h
|
||||
|
@@ -399,6 +399,10 @@ static bool walk_one(const char **str, const struct component *component,
|
||||
i = 0;
|
||||
|
||||
cur++;
|
||||
|
||||
/* Partial match, continue to search */
|
||||
if (i == component->len && !isbrace_space_or_nul(*cur))
|
||||
i = 0;
|
||||
}
|
||||
|
||||
/* Return false if a full match was not found */
|
||||
|
@@ -127,6 +127,7 @@ APPARMOR_3.0 {
|
||||
APPARMOR_3.1 {
|
||||
global:
|
||||
aa_features_check;
|
||||
aa_split_overlay_str;
|
||||
local:
|
||||
*;
|
||||
} APPARMOR_3.0;
|
||||
|
@@ -157,9 +157,13 @@ key_capname "capname"
|
||||
key_offset "offset"
|
||||
key_target "target"
|
||||
key_laddr "laddr"
|
||||
key_saddr "saddr"
|
||||
key_faddr "faddr"
|
||||
key_daddr "daddr"
|
||||
key_lport "lport"
|
||||
key_srcport "src"
|
||||
key_fport "fport"
|
||||
key_destport "dest"
|
||||
key_bus "bus"
|
||||
key_dest "dest"
|
||||
key_path "path"
|
||||
@@ -351,9 +355,13 @@ yy_flex_debug = 0;
|
||||
{key_offset} { return(TOK_KEY_OFFSET); }
|
||||
{key_target} { return(TOK_KEY_TARGET); }
|
||||
{key_laddr} { yy_push_state(ip_addr, yyscanner); return(TOK_KEY_LADDR); }
|
||||
{key_saddr} { yy_push_state(ip_addr, yyscanner); return(TOK_KEY_LADDR); }
|
||||
{key_faddr} { yy_push_state(ip_addr, yyscanner); return(TOK_KEY_FADDR); }
|
||||
{key_daddr} { yy_push_state(ip_addr, yyscanner); return(TOK_KEY_FADDR); }
|
||||
{key_lport} { return(TOK_KEY_LPORT); }
|
||||
{key_srcport} { return(TOK_KEY_LPORT); }
|
||||
{key_fport} { return(TOK_KEY_FPORT); }
|
||||
{key_destport} { return(TOK_KEY_FPORT); }
|
||||
{key_bus} { return(TOK_KEY_BUS); }
|
||||
{key_path} { return(TOK_KEY_PATH); }
|
||||
{key_interface} { return(TOK_KEY_INTERFACE); }
|
||||
|
@@ -135,7 +135,7 @@ static int do_test_walk_one(const char **str, const struct component *component,
|
||||
|
||||
static int test_walk_one(void)
|
||||
{
|
||||
struct component c;
|
||||
struct component c = (struct component) { NULL, 0 };
|
||||
const char *str;
|
||||
int rc = 0;
|
||||
|
||||
|
@@ -55,7 +55,7 @@ extern int aa_getprocattr_raw(pid_t tid, const char *attr, char *buf, int len,
|
||||
extern int aa_getprocattr(pid_t tid, const char *attr, char **buf, char **mode);
|
||||
extern int aa_gettaskcon(pid_t target, char **label, char **mode);
|
||||
extern int aa_getcon(char **label, char **mode);
|
||||
extern int aa_getpeercon_raw(int fd, char *buf, int *len, char **mode);
|
||||
extern int aa_getpeercon_raw(int fd, char *buf, socklen_t *len, char **mode);
|
||||
extern int aa_getpeercon(int fd, char **label, char **mode);
|
||||
extern int aa_query_label(uint32_t mask, char *query, size_t size, int *allow,
|
||||
int *audit);
|
||||
|
@@ -14,7 +14,7 @@ MOSTLYCLEANFILES=libapparmor_wrap.c LibAppArmor.py
|
||||
|
||||
all-local: libapparmor_wrap.c setup.py
|
||||
if test ! -f libapparmor_wrap.c; then cp $(srcdir)/libapparmor_wrap.c . ; fi
|
||||
CC="$(CC)" CFLAGS="$(PYTHON_CPPFLAGS) $(EXTRA_WARNINGS)" LDSHARED="$(CC) -shared" LDFLAGS="$(PYTHON_LDFLAGS) $(LDFLAGS)" $(PYTHON) setup.py build
|
||||
CC="$(CC)" CFLAGS="$(PYTHON_CPPFLAGS) $(CFLAGS) $(EXTRA_WARNINGS)" LDSHARED="$(CC) -shared" LDFLAGS="$(PYTHON_LDFLAGS) $(LDFLAGS)" $(PYTHON) setup.py build
|
||||
|
||||
install-exec-local:
|
||||
$(PYTHON) setup.py install --root="/$(DESTDIR)" --prefix="$(prefix)"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/home/ubuntu/bzr/apparmor/tests/regression/apparmor/mount {
|
||||
mount fstype=ext2 options="rw, mand" /dev/loop0/ -> /tmp/sdtest.19033-29001-MPfz98/mountpoint/,
|
||||
mount fstype=(ext2) options=(mand, rw) /dev/loop0/ -> /tmp/sdtest.19033-29001-MPfz98/mountpoint/,
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1 @@
|
||||
type=AVC msg=audit(1715045678.914:344186): apparmor="ALLOWED" operation="mount" info="failed flags match" error=-13 profile="steam" name="/newroot/dev/" pid=26487 comm="srt-bwrap" flags="rw, nosuid, nodev, remount, bind, silent, relatime"
|
@@ -0,0 +1,14 @@
|
||||
START
|
||||
File: testcase_mount_02.in
|
||||
Event type: AA_RECORD_ALLOWED
|
||||
Audit ID: 1715045678.914:344186
|
||||
Operation: mount
|
||||
Profile: steam
|
||||
Name: /newroot/dev/
|
||||
Command: srt-bwrap
|
||||
Info: failed flags match
|
||||
ErrorCode: 13
|
||||
PID: 26487
|
||||
Flags: rw, nosuid, nodev, remount, bind, silent, relatime
|
||||
Epoch: 1715045678
|
||||
Audit subid: 344186
|
@@ -0,0 +1,4 @@
|
||||
profile steam {
|
||||
mount options=(bind, nodev, nosuid, relatime, remount, rw, silent) -> /newroot/dev/,
|
||||
|
||||
}
|
@@ -0,0 +1 @@
|
||||
type=AVC msg=audit(1709108389.303:12383): apparmor="DENIED" operation="mount" class="mount" info="failed mntpnt match" error=-13 profile="/home/user/test/testmount" name="/tmp/foo/" pid=14155 comm="testmount" flags="ro, remount"
|
@@ -0,0 +1,15 @@
|
||||
START
|
||||
File: testcase_remount_01.in
|
||||
Event type: AA_RECORD_DENIED
|
||||
Audit ID: 1709108389.303:12383
|
||||
Operation: mount
|
||||
Profile: /home/user/test/testmount
|
||||
Name: /tmp/foo/
|
||||
Command: testmount
|
||||
Info: failed mntpnt match
|
||||
ErrorCode: 13
|
||||
PID: 14155
|
||||
Flags: ro, remount
|
||||
Class: mount
|
||||
Epoch: 1709108389
|
||||
Audit subid: 12383
|
@@ -0,0 +1,4 @@
|
||||
/home/user/test/testmount {
|
||||
mount options=(remount, ro) -> /tmp/foo/,
|
||||
|
||||
}
|
@@ -0,0 +1 @@
|
||||
type=AVC msg=audit(1709025786.045:43147): apparmor="DENIED" operation="umount" class="mount" profile="/home/user/test/testmount" name="/mnt/a/" pid=26697 comm="testmount"
|
@@ -0,0 +1,12 @@
|
||||
START
|
||||
File: testcase_umount_01.in
|
||||
Event type: AA_RECORD_DENIED
|
||||
Audit ID: 1709025786.045:43147
|
||||
Operation: umount
|
||||
Profile: /home/user/test/testmount
|
||||
Name: /mnt/a/
|
||||
Command: testmount
|
||||
PID: 26697
|
||||
Class: mount
|
||||
Epoch: 1709025786
|
||||
Audit subid: 43147
|
@@ -0,0 +1,4 @@
|
||||
/home/user/test/testmount {
|
||||
umount /mnt/a/,
|
||||
|
||||
}
|
@@ -70,7 +70,10 @@ CFLAGS = -g -pg -fprofile-arcs -ftest-coverage
|
||||
endif
|
||||
endif #CFLAGS
|
||||
|
||||
CFLAGS += -flto-partition=none
|
||||
HAVE_FLTO_PARTITION_NONE:=$(shell ${CC} -E -flto-partition=none /dev/null 1>/dev/null 2>&1 && echo true)
|
||||
ifeq ($(HAVE_FLTO_PARTITION_NONE),true)
|
||||
CFLAGS += -flto-partition=none
|
||||
endif
|
||||
|
||||
EXTRA_CXXFLAGS = ${CFLAGS} ${CPPFLAGS} ${CXX_WARNINGS} -std=gnu++0x
|
||||
EXTRA_CFLAGS = ${EXTRA_CXXFLAGS} ${CPP_WARNINGS}
|
||||
@@ -99,15 +102,15 @@ EXTRA_CFLAGS+=-DPACKAGE=\"${NAME}\" -DLOCALEDIR=\"${LOCALEDIR}\"
|
||||
SRCS = parser_common.c parser_include.c parser_interface.c parser_lex.c \
|
||||
parser_main.c parser_misc.c parser_merge.c parser_symtab.c \
|
||||
parser_yacc.c parser_regex.c parser_variable.c parser_policy.c \
|
||||
parser_alias.c common_optarg.c lib.c network.c \
|
||||
parser_alias.c common_optarg.c lib.c network.cc \
|
||||
mount.cc dbus.cc profile.cc rule.cc signal.cc ptrace.cc \
|
||||
af_rule.cc af_unix.cc policy_cache.c default_features.c userns.cc \
|
||||
mqueue.cc io_uring.cc
|
||||
mqueue.cc io_uring.cc all_rule.cc
|
||||
STATIC_HDRS = af_rule.h af_unix.h capability.h common_optarg.h dbus.h \
|
||||
file_cache.h immunix.h lib.h mount.h network.h parser.h \
|
||||
parser_include.h parser_version.h policy_cache.h policydb.h \
|
||||
profile.h ptrace.h rule.h signal.h userns.h mqueue.h io_uring.h \
|
||||
common_flags.h
|
||||
common_flags.h bignum.h all_rule.h
|
||||
|
||||
SPECIAL_HDRS = parser_yacc.h unit_test.h base_cap_names.h
|
||||
GENERATED_HDRS = af_names.h generated_af_names.h \
|
||||
@@ -295,7 +298,7 @@ signal.o: signal.cc $(HDRS)
|
||||
ptrace.o: ptrace.cc $(HDRS)
|
||||
$(CXX) $(EXTRA_CFLAGS) -c -o $@ $<
|
||||
|
||||
network.o: network.c $(HDRS)
|
||||
network.o: network.cc $(HDRS)
|
||||
$(CXX) $(EXTRA_CFLAGS) -c -o $@ $<
|
||||
|
||||
default_features.o: default_features.c $(HDRS)
|
||||
@@ -322,6 +325,9 @@ mqueue.o: mqueue.cc $(HDRS)
|
||||
io_uring.o: io_uring.cc $(HDRS)
|
||||
$(CXX) $(EXTRA_CFLAGS) -c -o $@ $<
|
||||
|
||||
all_rule.o: all_rule.cc $(HDRS)
|
||||
$(CXX) $(EXTRA_CFLAGS) -c -o $@ $<
|
||||
|
||||
parser_version.h: Makefile
|
||||
@echo \#define PARSER_VERSION \"$(VERSION)\" > .ver
|
||||
@mv -f .ver $@
|
||||
@@ -373,13 +379,8 @@ tests: apparmor_parser ${TESTS}
|
||||
$(AAREOBJECT): FORCE
|
||||
$(MAKE) -C $(AAREDIR) CFLAGS="$(EXTRA_CXXFLAGS)"
|
||||
|
||||
.PHONY: install-rhel4
|
||||
install-rhel4: install-redhat
|
||||
|
||||
.PHONY: install-redhat
|
||||
install-redhat:
|
||||
install -m 755 -d $(DESTDIR)/etc/init.d
|
||||
install -m 755 rc.apparmor.$(subst install-,,$@) $(DESTDIR)/etc/init.d/apparmor
|
||||
install-redhat: install-systemd
|
||||
|
||||
.PHONY: install-suse
|
||||
install-suse: install-systemd
|
||||
@@ -410,9 +411,9 @@ DISTRO=$(shell if [ -f /etc/slackware-version ] ; then \
|
||||
if [ "$$(rpm --eval '0%{?suse_version}')" != "0" ] ; then \
|
||||
echo suse ;\
|
||||
elif [ "$$(rpm --eval '%{_host_vendor}')" = redhat ] ; then \
|
||||
echo rhel4 ;\
|
||||
echo redhat ;\
|
||||
elif [ "$$(rpm --eval '0%{?fedora}')" != "0" ] ; then \
|
||||
echo rhel4 ;\
|
||||
echo redhat ;\
|
||||
else \
|
||||
echo unknown ;\
|
||||
fi ;\
|
||||
@@ -439,7 +440,6 @@ install-arch: $(INSTALLDEPS)
|
||||
install-indep: indep
|
||||
install -m 755 -d $(INSTALL_CONFDIR)
|
||||
install -m 644 parser.conf $(INSTALL_CONFDIR)
|
||||
install -m 755 -d ${DESTDIR}/var/lib/apparmor
|
||||
install -m 755 -d $(APPARMOR_BIN_PREFIX)
|
||||
install -m 755 rc.apparmor.functions $(APPARMOR_BIN_PREFIX)
|
||||
install -m 755 profile-load $(APPARMOR_BIN_PREFIX)
|
||||
|
@@ -108,6 +108,9 @@ unix_rule::unix_rule(unsigned int type_p, audit_t audit_p, rule_mode_t rule_mode
|
||||
perms = AA_VALID_NET_PERMS;
|
||||
audit = audit_p;
|
||||
rule_mode = rule_mode_p;
|
||||
/* if this constructor is used, then there's already a
|
||||
* downgraded network_rule in profile */
|
||||
downgrade = false;
|
||||
}
|
||||
|
||||
unix_rule::unix_rule(perms_t perms_p, struct cond_entry *conds,
|
||||
@@ -190,7 +193,7 @@ static void writeu16(std::ostringstream &o, int v)
|
||||
void unix_rule::downgrade_rule(Profile &prof) {
|
||||
perms_t mask = (perms_t) -1;
|
||||
|
||||
if (!prof.net.allow && !prof.alloc_net_table())
|
||||
if (!prof.net.allow && !prof.net.alloc_net_table())
|
||||
yyerror(_("Memory allocation error."));
|
||||
if (sock_type_n != -1)
|
||||
mask = 1 << sock_type_n;
|
||||
@@ -198,6 +201,11 @@ void unix_rule::downgrade_rule(Profile &prof) {
|
||||
prof.net.allow[AF_UNIX] |= mask;
|
||||
if (audit == AUDIT_FORCE)
|
||||
prof.net.audit[AF_UNIX] |= mask;
|
||||
const char *error;
|
||||
network_rule *netv8 = new network_rule(perms, AF_UNIX, sock_type_n);
|
||||
if(!netv8->add_prefix({audit, rule_mode, owner}, error))
|
||||
yyerror(error);
|
||||
prof.rule_ents.push_back(netv8);
|
||||
} else {
|
||||
/* deny rules have to be dropped because the downgrade makes
|
||||
* the rule less specific meaning it will make the profile more
|
||||
@@ -317,7 +325,8 @@ int unix_rule::gen_policy_re(Profile &prof)
|
||||
* older kernels and be enforced to the best of the old network
|
||||
* rules ability
|
||||
*/
|
||||
downgrade_rule(prof);
|
||||
if (downgrade)
|
||||
downgrade_rule(prof);
|
||||
if (!features_supports_unix) {
|
||||
if (features_supports_network || features_supports_networkv8) {
|
||||
/* only warn if we are building against a kernel
|
||||
|
@@ -36,6 +36,7 @@ class unix_rule: public af_rule {
|
||||
public:
|
||||
char *addr;
|
||||
char *peer_addr;
|
||||
bool downgrade = true;
|
||||
|
||||
unix_rule(unsigned int type_p, audit_t audit_p, rule_mode_t rule_mode_p);
|
||||
unix_rule(perms_t perms, struct cond_entry *conds,
|
||||
|
130
parser/all_rule.cc
Normal file
130
parser/all_rule.cc
Normal file
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* Copyright (c) 2023
|
||||
* Canonical Ltd. (All rights reserved)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, contact Canonical Ltd.
|
||||
*/
|
||||
|
||||
#include "profile.h"
|
||||
#include "all_rule.h"
|
||||
#include "af_unix.h"
|
||||
#include "dbus.h"
|
||||
#include "io_uring.h"
|
||||
#include "mqueue.h"
|
||||
#include "ptrace.h"
|
||||
#include "signal.h"
|
||||
#include "userns.h"
|
||||
#include "mount.h"
|
||||
#include "parser.h"
|
||||
|
||||
#include <iomanip>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
|
||||
void all_rule::add_implied_rules(Profile &prof)
|
||||
{
|
||||
prefix_rule_t *rule;
|
||||
const prefixes *prefix = this;
|
||||
|
||||
rule = new unix_rule(0xffffffff, audit, rule_mode);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new dbus_rule(0, NULL, NULL);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new io_uring_rule(0, NULL, NULL);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new mqueue_rule(0, NULL);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new ptrace_rule(0, NULL);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new signal_rule(0, NULL);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new userns_rule(0, NULL);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new mnt_rule(NULL, NULL, NULL, NULL, AA_MAY_MOUNT);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new mnt_rule(NULL, NULL, NULL, NULL, AA_DUMMY_REMOUNT);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new mnt_rule(NULL, NULL, NULL, NULL, AA_MAY_UMOUNT);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new mnt_rule(NULL, NULL, NULL, NULL, AA_MAY_PIVOTROOT);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
rule = new network_rule(0, (struct cond_entry *)NULL, (struct cond_entry *)NULL);
|
||||
(void) rule->add_prefix(*prefix);
|
||||
prof.rule_ents.push_back(rule);
|
||||
|
||||
/* rules that have not been converted to use rule.h */
|
||||
|
||||
//file
|
||||
{
|
||||
const char *error;
|
||||
struct cod_entry *entry;
|
||||
char *path = strdup("/{**,}");
|
||||
int perms = ((AA_BASE_PERMS & ~AA_EXEC_TYPE) |
|
||||
(AA_MAY_EXEC));
|
||||
if (rule_mode != RULE_DENY)
|
||||
perms |= AA_EXEC_INHERIT;
|
||||
/* duplicate to other permission set */
|
||||
perms |= perms << AA_OTHER_SHIFT;
|
||||
if (!path)
|
||||
yyerror(_("Memory allocation error."));
|
||||
entry = new_entry(path, perms, NULL);
|
||||
if (!entry_add_prefix(entry, *prefix, error)) {
|
||||
yyerror(_("%s"), error);
|
||||
}
|
||||
add_entry_to_policy(&prof, entry);
|
||||
}
|
||||
|
||||
// caps
|
||||
{
|
||||
if (prefix->owner)
|
||||
yyerror(_("owner prefix not allowed on capability rules"));
|
||||
|
||||
if (rule_mode == RULE_DENY && audit == AUDIT_FORCE) {
|
||||
prof.caps.deny |= 0xffffffffffffffff;
|
||||
} else if (rule_mode == RULE_DENY) {
|
||||
prof.caps.deny |= 0xffffffffffffffff;
|
||||
prof.caps.quiet |= 0xffffffffffffffff;
|
||||
} else {
|
||||
prof.caps.allow |= 0xffffffffffffffff;
|
||||
if (audit != AUDIT_UNSPECIFIED)
|
||||
prof.caps.audit |= 0xffffffffffffffff;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: rlimit
|
||||
}
|
68
parser/all_rule.h
Normal file
68
parser/all_rule.h
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (c) 2023
|
||||
* Canonical Ltd. (All rights reserved)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, contact Canonical Ltd.
|
||||
*/
|
||||
|
||||
#ifndef __AA_ALL_H
|
||||
#define __AA_ALL_H
|
||||
|
||||
#include "rule.h"
|
||||
|
||||
#define AA_IO_URING_OVERRIDE_CREDS AA_MAY_APPEND
|
||||
#define AA_IO_URING_SQPOLL AA_MAY_CREATE
|
||||
|
||||
#define AA_VALID_IO_URING_PERMS (AA_IO_URING_OVERRIDE_CREDS | \
|
||||
AA_IO_URING_SQPOLL)
|
||||
|
||||
class all_rule: public prefix_rule_t {
|
||||
void move_conditionals(struct cond_entry *conds);
|
||||
public:
|
||||
all_rule(void): prefix_rule_t(RULE_TYPE_ALL) { }
|
||||
|
||||
virtual bool valid_prefix(const prefixes &p, const char *&error) {
|
||||
if (p.owner) {
|
||||
error = _("owner prefix not allowed on all rules");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
int expand_variables(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
virtual ostream &dump(ostream &os) {
|
||||
prefix_rule_t::dump(os);
|
||||
|
||||
os << "all";
|
||||
|
||||
return os;
|
||||
}
|
||||
virtual bool is_mergeable(void) { return true; }
|
||||
virtual int cmp(rule_t const &rhs) const
|
||||
{
|
||||
return prefix_rule_t::cmp(rhs);
|
||||
};
|
||||
|
||||
virtual void add_implied_rules(Profile &prof);
|
||||
|
||||
virtual int gen_policy_re(Profile &prof unused) { return RULE_OK; };
|
||||
|
||||
protected:
|
||||
virtual void warn_once(const char *name unused, const char *msg unused) { };
|
||||
virtual void warn_once(const char *name unused) { };
|
||||
};
|
||||
|
||||
#endif /* __AA_ALL_H */
|
@@ -114,10 +114,10 @@ B<XATTR VALUE FILEGLOB> = I<FILEGLOB>
|
||||
B<PROFILE FLAG CONDS> = [ 'flags=' ] '(' comma or white space separated list of I<PROFILE FLAGS> ')'
|
||||
|
||||
B<PROFILE FLAGS> = I<PROFILE MODE> | I<AUDIT_MODE> | 'mediate_deleted'
|
||||
| 'attach_disconnected' | 'attach_disconneced.path='I<ABS PATH> | 'chroot_relative'
|
||||
| 'debug'
|
||||
| 'attach_disconnected' | 'attach_disconnected.path='I<ABS PATH> | 'chroot_relative'
|
||||
| 'debug' | 'interruptible' | 'kill.signal='I<SIGNAL>
|
||||
|
||||
B<PROFILE MODE> = 'enforce' | 'complain' | 'kill' | 'unconfined' | 'prompt'
|
||||
B<PROFILE MODE> = 'enforce' | 'complain' | 'kill' | 'default_allow' | 'unconfined' | 'prompt'
|
||||
|
||||
B<AUDIT MODE> = 'audit'
|
||||
|
||||
@@ -125,7 +125,7 @@ B<RULES> = [ ( I<LINE RULES> | I<COMMA RULES> ',' | I<BLOCK RULES> )
|
||||
|
||||
B<LINE RULES> = ( I<COMMENT> | I<INCLUDE> ) [ '\r' ] '\n'
|
||||
|
||||
B<COMMA RULES> = ( I<CAPABILITY RULE> | I<NETWORK RULE> | I<MOUNT RULE> | I<PIVOT ROOT RULE> | I<UNIX RULE> | I<FILE RULE> | I<LINK RULE> | I<CHANGE_PROFILE RULE> | I<RLIMIT RULE> | I<DBUS RULE> | I<MQUEUE RULE> )
|
||||
B<COMMA RULES> = ( I<CAPABILITY RULE> | I<NETWORK RULE> | I<MOUNT RULE> | I<PIVOT ROOT RULE> | I<UNIX RULE> | I<FILE RULE> | I<LINK RULE> | I<CHANGE_PROFILE RULE> | I<RLIMIT RULE> | I<DBUS RULE> | I<MQUEUE RULE> | I<IO_URING RULE> | I<USERNS RULE> | I<ALL RULE>)
|
||||
|
||||
B<BLOCK RULES> = ( I<SUBPROFILE> | I<HAT> | I<QUALIFIER BLOCK> )
|
||||
|
||||
@@ -148,7 +148,14 @@ B<CAPABILITY LIST> = ( I<CAPABILITY> )+
|
||||
B<CAPABILITY> = (lowercase capability name without 'CAP_' prefix; see
|
||||
capabilities(7))
|
||||
|
||||
B<NETWORK RULE> = [ I<QUALIFIERS> ] 'network' [ I<DOMAIN> ] [ I<TYPE> | I<PROTOCOL> ]
|
||||
B<NETWORK RULE> = [ I<QUALIFIERS> ] 'network' [ I<NETWORK ACCESS EXPR> ] [ I<DOMAIN> ] [ I<TYPE> | I<PROTOCOL> ] [ I<NETWORK LOCAL EXPR> ] [ I<NETWORK PEER EXPR> ]
|
||||
|
||||
B<NETWORK ACCESS EXPR> = ( I<NETWORK ACCESS> | I<NETWORK ACCESS LIST> )
|
||||
|
||||
B<NETWORK ACCESS> = ( 'create' | 'bind' | 'listen' | 'accept' | 'connect' | 'shutdown' | 'getattr' | 'setattr' | 'getopt' | 'setopt' | 'send' | 'receive' | 'r' | 'w' | 'rw' )
|
||||
Some access modes are incompatible with some rules.
|
||||
|
||||
B<NETWORK ACCESS LIST> = '(' I<NETWORK ACCESS> ( [','] I<NETWORK ACCESS> )* ')'
|
||||
|
||||
B<DOMAIN> = ( 'unix' | 'inet' | 'ax25' | 'ipx' | 'appletalk' | 'netrom' | 'bridge' | 'atmpvc' | 'x25' | 'inet6' | 'rose' | 'netbeui' | 'security' | 'key' | 'netlink' | 'packet' | 'ash' | 'econet' | 'atmsvc' | 'rds' | 'sna' | 'irda' | 'pppox' | 'wanpipe' | 'llc' | 'ib' | 'mpls' | 'can' | 'tipc' | 'bluetooth' | 'iucv' | 'rxrpc' | 'isdn' | 'phonet' | 'ieee802154' | 'caif' | 'alg' | 'nfc' | 'vsock' | 'kcm' | 'qipcrtr' | 'smc' | 'xdp' | 'mctp' ) ','
|
||||
|
||||
@@ -156,6 +163,22 @@ B<TYPE> = ( 'stream' | 'dgram' | 'seqpacket' | 'rdm' | 'raw' | 'packet' )
|
||||
|
||||
B<PROTOCOL> = ( 'tcp' | 'udp' | 'icmp' )
|
||||
|
||||
B<NETWORK LOCAL EXPR> = ( I<NETWORK IP COND> | I<NETWORK PORT COND> )*
|
||||
Each cond can appear at most once.
|
||||
|
||||
B<NETWORK PEER EXPR> = 'peer' '=' '(' ( I<NETWORK IP COND> | I<NETWORK PORT COND> )+ ')'
|
||||
Each cond can appear at most once.
|
||||
|
||||
B<NETWORK IP COND> = 'ip' '=' ( 'none' | I<NETWORK IPV4> | I<NETWORK IPV6> )
|
||||
|
||||
B<NETWORK PORT COND> = 'port' '=' ( I<NETWORK PORT> )
|
||||
|
||||
B<NETWORK IPV4> = IPv4, represented by four 8-bit decimal numbers separated by '.'
|
||||
|
||||
B<NETWORK IPV6> = IPv6, represented by eight groups of four hexadecimal numbers separated by ':'. Shortened representation of contiguous zeros is allowed by using '::'
|
||||
|
||||
B<NETWORK PORT> = 16-bit number ranging from 0 to 65535
|
||||
|
||||
B<MOUNT RULE> = ( I<MOUNT> | I<REMOUNT> | I<UMOUNT> )
|
||||
|
||||
B<MOUNT> = [ I<QUALIFIERS> ] 'mount' [ I<MOUNT CONDITIONS> ] [ I<SOURCE FILEGLOB> ] [ '-E<gt>' [ I<MOUNTPOINT FILEGLOB> ]
|
||||
@@ -192,6 +215,16 @@ B<MQUEUE LABEL> = 'label' '=' '(' '"' I<AARE> '"' | I<AARE> ')'
|
||||
|
||||
B<MQUEUE NAME> = I<AARE>
|
||||
|
||||
B<USERNS RULE> = [ I<QUALIFIERS> ] 'userns' [ I<USERNS ACCESS PERMISSIONS> ]
|
||||
|
||||
B<USERNS ACCESS PERMISSIONS> = ( 'create' )
|
||||
|
||||
B<IO_URING RULE> = [ I<QUALIFIERS> ] 'io_uring' [ I<IO_URING ACCESS PERMISSIONS> [ I<IO_URING LABEL> ]
|
||||
|
||||
B<IO_URING ACCESS PERMISSIONS> = ( 'sqpoll' | 'override_creds' )
|
||||
|
||||
B<IO_URING LABEL> = 'label' '=' '(' '"' I<AARE> '"' | I<AARE> ')'
|
||||
|
||||
B<PIVOT ROOT RULE> = [ I<QUALIFIERS> ] pivot_root [ oldroot=I<OLD PUT FILEGLOB> ] [ I<NEW ROOT FILEGLOB> ] [ '-E<gt>' I<PROFILE NAME> ]
|
||||
|
||||
B<SOURCE FILEGLOB> = I<FILEGLOB>
|
||||
@@ -220,9 +253,9 @@ B<SIGNAL ACCESS> = ( 'r' | 'w' | 'rw' | 'read' | 'write' | 'send' | 'receive' )
|
||||
|
||||
B<SIGNAL SET> = 'set' '=' '(' I<SIGNAL LIST> ')'
|
||||
|
||||
B<SIGNAL LIST> = Comma or space separated list of I<SIGNALS>
|
||||
B<SIGNAL LIST> = Comma or space separated list of I<SIGNAL>s
|
||||
|
||||
B<SIGNALS> = ( 'hup' | 'int' | 'quit' | 'ill' | 'trap' | 'abrt' | 'bus' | 'fpe' | 'kill' | 'usr1' | 'segv' | 'usr2' | 'pipe' | 'alrm' | 'term' | 'stkflt' | 'chld' | 'cont' | 'stop' | 'stp' | 'ttin' | 'ttou' | 'urg' | 'xcpu' | 'xfsz' | 'vtalrm' | 'prof' | 'winch' | 'io' | 'pwr' | 'sys' | 'emt' | 'exists' | 'rtmin+0' ... 'rtmin+32' )
|
||||
B<SIGNAL> = ( 'hup' | 'int' | 'quit' | 'ill' | 'trap' | 'abrt' | 'bus' | 'fpe' | 'kill' | 'usr1' | 'segv' | 'usr2' | 'pipe' | 'alrm' | 'term' | 'stkflt' | 'chld' | 'cont' | 'stop' | 'stp' | 'ttin' | 'ttou' | 'urg' | 'xcpu' | 'xfsz' | 'vtalrm' | 'prof' | 'winch' | 'io' | 'pwr' | 'sys' | 'emt' | 'exists' | 'rtmin+0' ... 'rtmin+32' )
|
||||
|
||||
B<SIGNAL PEER> = 'peer' '=' I<AARE>
|
||||
|
||||
@@ -336,6 +369,8 @@ B<EXEC_MODE> = ( 'safe' | 'unsafe' )
|
||||
|
||||
B<EXEC COND> = I<FILEGLOB>
|
||||
|
||||
B<ALL RULE> = 'all'
|
||||
|
||||
=back
|
||||
|
||||
All resources and programs need a full path. There may be any number of
|
||||
@@ -454,12 +489,36 @@ a signal to kill it.
|
||||
permission the action will be allowed, but the violation will be logged
|
||||
with a tag of the access being B<ALLOWED>.
|
||||
|
||||
=item B<default_allow> This mode changes the default behavior of
|
||||
apparmor from default deny to default allow. When default_allow is
|
||||
specified the resulting profile will allow operations that the profile
|
||||
does not have a rule for. This mode is similar to I<unconfined> but
|
||||
allows for allow and deny rules, specifying audit, and domain
|
||||
transitions. Profiles in this mode may be be reported as being in
|
||||
I<enforce> mode or I<allow> mode when introspected from the kernel.
|
||||
|
||||
Note: default_allow is similar and for many profiles will be equivalent
|
||||
to specifying an I<allow all,> rule in the profile. The default_allow
|
||||
flag does not provide all the same option that the I<allow all,> rule
|
||||
provides.
|
||||
|
||||
=item B<unconfined> This mode allows a task confined by the profile to
|
||||
behave as though they are I<unconfined>. This mode allow for an
|
||||
unconfined behavior that can be later changed to confinement by using
|
||||
profile replacement. This mode is should not be used under regular
|
||||
deployment but can be useful during debugging and some system
|
||||
initialization scenarios.
|
||||
behave as though it is I<unconfined>. The unconfined behavior can be
|
||||
later changed to confinement by using profile replacement. This mode
|
||||
should not be used under regular deployment but can be useful during
|
||||
debugging and some system initialization scenarios.
|
||||
|
||||
This mode is similar to default_allow and may be emulated by
|
||||
default_allow in kernels that no longer support a true unconfined
|
||||
mode. It does not generally allow for specifying deny rules, or allow
|
||||
rules that override the default behavior, except in a few custom
|
||||
kernels where unconfined restricts a few operations. It relies on
|
||||
special customized behavior of the unconfined profile in the kernel
|
||||
and as such should only be used for debugging.
|
||||
|
||||
Note: true unconfined is being phased out, with unconfined becoming a
|
||||
replaceable profile. As such unconfined mode will be emulated by a
|
||||
special profile compiled with the default_allow flag in newer kernels.
|
||||
|
||||
=item B<prompt> This mode allows task mediation to send an up call to
|
||||
userspace to ask for a decision when there isn't a rule covering the
|
||||
@@ -506,6 +565,11 @@ flags to control what messages will be output. Its effect is kernel
|
||||
dependent, and it should never appear in policy except when trying
|
||||
to debug kernel or policy problems.
|
||||
|
||||
=item B<interruptible> Enables interrupts for prompt upcall to userspace.
|
||||
|
||||
=item B<kill.signal>=I<SIGNAL> This changes the signal that will be
|
||||
sent by AppArmor when in kill mode or a kill rule has been violated.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Access Modes
|
||||
@@ -871,11 +935,10 @@ and other operations that are typically reserved for the root user.
|
||||
|
||||
=head2 Network Rules
|
||||
|
||||
AppArmor supports simple coarse grained network mediation. The network
|
||||
rule restrict all socket(2) based operations. The mediation done is
|
||||
a coarse-grained check on whether a socket of a given type and family
|
||||
can be created, read, or written. There is no mediation based of port
|
||||
number or protocol beyond tcp, udp, and raw. Network netlink(7) rules may
|
||||
AppArmor supports simple coarse grained network mediation. The
|
||||
network rule restrict all socket(2) based operations. The mediation
|
||||
done is a coarse-grained check on whether a socket of a given type and
|
||||
family can be created, read, or written. Network netlink(7) rules may
|
||||
only specify type 'dgram' and 'raw'.
|
||||
|
||||
AppArmor network rules are accumulated so that the granted network
|
||||
@@ -892,6 +955,48 @@ eg.
|
||||
network inet6 tcp, #allow access to tcp only for inet6 addresses
|
||||
network netlink raw, #allow access to AF_NETLINK SOCK_RAW
|
||||
|
||||
=head3 Network permissions
|
||||
|
||||
Network rule permissions are implied when a rule does not explicitly
|
||||
state an access list. By default if a rule does not have an access
|
||||
list all permissions that are compatible with the specified set of
|
||||
local and peer conditionals are implied.
|
||||
|
||||
The create, bind, listen, shutdown, getattr, setattr, getopt, and
|
||||
setopt permissions are local socket permissions. They are only applied
|
||||
to the local socket and can't be specified in rules that have a peer
|
||||
conditional. The accept permission applies to the combination of a
|
||||
local and peer socket. The connect, send, and receive permissions are
|
||||
peer socket permissions.
|
||||
|
||||
=head3 Mediation of inet/inet6 family
|
||||
|
||||
AppArmor supports fine grained mediation of the inet and inet6
|
||||
families by using the ip and port conditionals. The ip conditional
|
||||
accepts both IPv4 and IPv6 using the regular representation of four
|
||||
octets separated by '.' for IPv4 and eight groups of four hexadecimal
|
||||
numbers separated by ':' for IPv6. Contiguous leading zeros can be
|
||||
replaced by '::' once. On a connected socket, the sender and receiver
|
||||
don't need to be specified in the recvfrom and sendto system calls. In
|
||||
that case, and with unbounded sockets, the IP address is none, or
|
||||
unknown. Unknown or Unbound IP addresses are represented in policy by the
|
||||
'none' keyword. When the ip conditional is omitted, then all IP
|
||||
addresses will be allowed: IPv4, IPv6 and none. If INADDR_ANY or
|
||||
in6addr_any is used, then the ip conditional can be omitted or they
|
||||
can be represented by:
|
||||
|
||||
network ip=::, #allow in6addr_any
|
||||
network ip=0.0.0.0; #allow INADDR_ANY
|
||||
|
||||
The network rules support the specification of local and remote IP
|
||||
addresses and ports.
|
||||
|
||||
network ip=127.0.0.1 port=8080,
|
||||
network peer=(ip=10.139.15.23 port=8081),
|
||||
network ip=fd74:1820:b03a:b361::cf32 peer=(ip=fd74:1820:b03a:b361::a0f9),
|
||||
network port=8080 peer=(port=8081),
|
||||
network ip=127.0.0.1 port=8080 peer=(ip=10.139.15.23 port=8081),
|
||||
|
||||
=head2 Mount Rules
|
||||
|
||||
AppArmor supports mount mediation and allows specifying filesystem types and
|
||||
@@ -1133,6 +1238,89 @@ Example AppArmor Message Queue rules:
|
||||
# Allow create permission for a SYSV queue of label foo
|
||||
mqueue create label=foo 123,
|
||||
|
||||
=head2 User Namespace Rules
|
||||
|
||||
User namespaces are part of many sandboxing and containerization
|
||||
solutions. They provide a way for a non-system root process to be
|
||||
root within the container. Unfortunately this opens up attack surface
|
||||
in the kernel and has been part of several exploit chains. As such
|
||||
AppArmor can be used to restrict the creation of user namespaces to
|
||||
select processes.
|
||||
|
||||
User namespace permission are implied when a rule does not explicitly
|
||||
state an access list. The rule becomes more restrictive as further
|
||||
information is specified.
|
||||
|
||||
Note: user namespace creation may be restricted so that it is not
|
||||
available to unprivieged unconfined processes. If this is the case any
|
||||
process trying to create user namespaces will require a profile that
|
||||
allows the necessary permissions.
|
||||
|
||||
=over 4
|
||||
|
||||
=item B<create>
|
||||
|
||||
Allow creation of user namespaces.
|
||||
|
||||
=back
|
||||
|
||||
Example userns rules:
|
||||
|
||||
=over 4
|
||||
|
||||
# Allow all userns perms
|
||||
userns,
|
||||
|
||||
# Allow creation of a userns
|
||||
userns create,
|
||||
|
||||
=back
|
||||
|
||||
=head2 IO_URing Rules
|
||||
|
||||
AppArmor supports mediation of the new Linux high speed IO interface.
|
||||
There is limited mediation at this time to just a few permissions at
|
||||
the moment.
|
||||
|
||||
IO Uring permission are implied when a rule does not explicitly state
|
||||
an access list. The rule becomes more restrictive as further
|
||||
information is specified.
|
||||
|
||||
Note: io_uring access may be restricted so that it is not available to
|
||||
unprivileged unconfined processes. If this is the case any process
|
||||
trying to use io_uring will require a profile that allows the
|
||||
necessary io_uring permissions.
|
||||
|
||||
=over 4
|
||||
|
||||
=item B<sqpoll>
|
||||
|
||||
All the task confined by the profile to spawn a io_uring polling
|
||||
thread.
|
||||
|
||||
=item B<override_creds>
|
||||
|
||||
Grants the task confined by the profile to override (change) its
|
||||
credentials to the specified label, when executing an io_uring
|
||||
operation.
|
||||
|
||||
=back
|
||||
|
||||
Example IO_URING rules:
|
||||
|
||||
=over 4
|
||||
|
||||
# Allow io_uring operations
|
||||
io_ring,
|
||||
|
||||
# Allow creation of a polling thread
|
||||
io_uring sqpoll,
|
||||
|
||||
# Allow task to override credentials during io_uring operation
|
||||
io_uring override_creds label=new_creds,
|
||||
|
||||
=back
|
||||
|
||||
=head2 Pivot Root Rules
|
||||
|
||||
AppArmor mediates changing of the root filesystem through the pivot_root(2)
|
||||
@@ -1506,6 +1694,26 @@ Not all kernels support B<safe> mode and the parser will downgrade rules to
|
||||
B<unsafe> mode in that situation. If no exec mode is specified, the default is
|
||||
B<safe> mode in kernels that support it.
|
||||
|
||||
=head2 all rule
|
||||
|
||||
The all rule is used to add a generic rule for all supported rule types.
|
||||
This is useful when policy wants to define a black list instead of
|
||||
white list, but can also be useful to add an access qualifier to all
|
||||
rules.
|
||||
|
||||
Eg. Black list
|
||||
|
||||
allow all,
|
||||
# begin blacklist
|
||||
deny file,
|
||||
deny unix,
|
||||
|
||||
|
||||
Eg. Adding audit qualifier
|
||||
|
||||
audit access all,
|
||||
|
||||
|
||||
=head2 rlimit rules
|
||||
|
||||
AppArmor can set and control the resource limits associated with a
|
||||
@@ -1869,7 +2077,7 @@ An example AppArmor profile:
|
||||
/usr/lib/** r,
|
||||
/tmp/foo.pid wr,
|
||||
/tmp/foo.* lrw,
|
||||
/@{HOME}/.foo_file rw,
|
||||
@{HOME}/.foo_file rw,
|
||||
/usr/bin/baz Cx -> baz,
|
||||
|
||||
# a comment about foo's hat (subprofile), bar.
|
||||
@@ -1893,8 +2101,6 @@ An example AppArmor profile:
|
||||
|
||||
=over 4
|
||||
|
||||
=item F</etc/init.d/boot.apparmor>
|
||||
|
||||
=item F</etc/apparmor.d/>
|
||||
|
||||
=back
|
||||
|
@@ -36,12 +36,11 @@ of resources. AppArmor's unique security model is to bind access control
|
||||
attributes to programs rather than to users.
|
||||
|
||||
AppArmor confinement is provided via I<profiles> loaded into the kernel
|
||||
via apparmor_parser(8), typically through the F</etc/init.d/apparmor>
|
||||
SysV initscript, which is used like this:
|
||||
via apparmor_parser(8), typically through the F<apparmor.service>
|
||||
systemd unit, which is used like this:
|
||||
|
||||
# /etc/init.d/apparmor start
|
||||
# /etc/init.d/apparmor stop
|
||||
# /etc/init.d/apparmor restart
|
||||
# systemctl start apparmor
|
||||
# systemctl reload apparmor
|
||||
|
||||
AppArmor can operate in two modes: I<enforcement>, and I<complain or learning>:
|
||||
|
||||
@@ -273,11 +272,9 @@ Else, if auditd is running, see auditd(8) and auditd.conf(5).
|
||||
|
||||
=over 4
|
||||
|
||||
=item F</etc/init.d/apparmor>
|
||||
|
||||
=item F</etc/apparmor.d/>
|
||||
|
||||
=item F</var/lib/apparmor/>
|
||||
=item F</var/cache/apparmor/>
|
||||
|
||||
=item F</var/log/audit/audit.log>
|
||||
|
||||
|
@@ -6,6 +6,8 @@ After=systemd-journald-audit.socket
|
||||
# profile cache: /var/cache/apparmor/ and /usr/share/apparmor/cache/
|
||||
After=var.mount var-cache.mount usr.mount usr-share.mount
|
||||
ConditionSecurity=apparmor
|
||||
Documentation=man:apparmor(7)
|
||||
Documentation=https://gitlab.com/apparmor/apparmor/wikis/home/
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
|
@@ -17,6 +17,8 @@
|
||||
|
||||
APPARMOR_FUNCTIONS=/lib/apparmor/rc.apparmor.functions
|
||||
|
||||
# This function is used in rc.apparmor.functions
|
||||
# shellcheck disable=SC2317
|
||||
aa_action()
|
||||
{
|
||||
echo "$1"
|
||||
@@ -25,36 +27,50 @@ aa_action()
|
||||
return $?
|
||||
}
|
||||
|
||||
# This function is used in rc.apparmor.functions
|
||||
# shellcheck disable=SC2317
|
||||
aa_log_warning_msg()
|
||||
{
|
||||
echo "Warning: $*"
|
||||
}
|
||||
|
||||
# This function is used in rc.apparmor.functions
|
||||
# shellcheck disable=SC2317
|
||||
aa_log_failure_msg()
|
||||
{
|
||||
echo "Error: $*"
|
||||
}
|
||||
|
||||
# This function is used in rc.apparmor.functions
|
||||
# shellcheck disable=SC2317
|
||||
aa_log_action_start()
|
||||
{
|
||||
echo "$@"
|
||||
}
|
||||
|
||||
# This function is used in rc.apparmor.functions
|
||||
# shellcheck disable=SC2317
|
||||
aa_log_action_end()
|
||||
{
|
||||
printf ""
|
||||
}
|
||||
|
||||
# This function is used in rc.apparmor.functions
|
||||
# shellcheck disable=SC2317
|
||||
aa_log_daemon_msg()
|
||||
{
|
||||
echo "$@"
|
||||
}
|
||||
|
||||
# This function is used in rc.apparmor.functions
|
||||
# shellcheck disable=SC2317
|
||||
aa_log_skipped_msg()
|
||||
{
|
||||
echo "Skipped: $*"
|
||||
}
|
||||
|
||||
# This function is used in rc.apparmor.functions
|
||||
# shellcheck disable=SC2317
|
||||
aa_log_end_msg()
|
||||
{
|
||||
printf ""
|
||||
|
@@ -299,11 +299,11 @@ Enable various warnings during policy compilation. A single warn flag
|
||||
can be specified per --warn option, but the --warn flag can be passed
|
||||
multiple times.
|
||||
|
||||
apparmor_parser --warn=rules-not-enforced ...
|
||||
apparmor_parser --warn=rule-not-enforced ...
|
||||
|
||||
A specific warning can be disabled by prepending I<no>- to the flag
|
||||
|
||||
apparmor_parser --warn=no-rules-not-enforced ...
|
||||
apparmor_parser --warn=no-rule-not-enforced ...
|
||||
|
||||
Use --help=warn to see a full list of which warn flags are supported.
|
||||
|
||||
|
233
parser/bignum.h
Normal file
233
parser/bignum.h
Normal file
@@ -0,0 +1,233 @@
|
||||
/*
|
||||
* Copyright (c) 2023
|
||||
* Canonical Ltd. (All rights reserved)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, contact Canonical Ltd.
|
||||
*/
|
||||
|
||||
#ifndef __AA_BIGNUM_H
|
||||
#define __AA_BIGNUM_H
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
|
||||
class bignum
|
||||
{
|
||||
public:
|
||||
std::vector<uint8_t> data;
|
||||
uint8_t base;
|
||||
bool negative = false;
|
||||
bignum () : base(0) {}
|
||||
|
||||
bignum (unsigned long val) {
|
||||
if (val == 0)
|
||||
data.push_back(val);
|
||||
else {
|
||||
while(val > 0) {
|
||||
data.push_back(val % 10);
|
||||
val /= 10;
|
||||
}
|
||||
}
|
||||
base = 10;
|
||||
}
|
||||
|
||||
bignum (const char *val) {
|
||||
while (*val) {
|
||||
data.push_back(*val - 48);
|
||||
val++;
|
||||
}
|
||||
std::reverse(data.begin(), data.end());
|
||||
base = 10;
|
||||
}
|
||||
|
||||
bignum (const uint8_t val[16]) {
|
||||
size_t i;
|
||||
bool flag = true;
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (flag && (val[i] & 0xF0) >> 4 != 0)
|
||||
flag = false;
|
||||
if (!flag)
|
||||
data.push_back((val[i] & 0xF0) >> 4);
|
||||
if (flag && (val[i] & 0x0F) != 0)
|
||||
flag = false;
|
||||
if (!flag)
|
||||
data.push_back(val[i] & 0x0F);
|
||||
}
|
||||
std::reverse(data.begin(), data.end());
|
||||
base = 16;
|
||||
}
|
||||
|
||||
bignum operator+(const bignum &brhs) const {
|
||||
bignum b1 = this->size() < brhs.size() ? *this : brhs;
|
||||
bignum b2 = this->size() < brhs.size() ? brhs : *this;
|
||||
bignum result;
|
||||
result.base = this->base;
|
||||
uint8_t carryover = 0;
|
||||
uint8_t sum;
|
||||
size_t i;
|
||||
for (i = 0; i < b1.size(); i++) {
|
||||
sum = b1[i] + b2[i] + carryover;
|
||||
if (sum > base - 1)
|
||||
carryover = 1;
|
||||
else
|
||||
carryover = 0;
|
||||
result.data.push_back(sum % base);
|
||||
}
|
||||
for (; i < b2.size(); i++) {
|
||||
sum = b2[i] + carryover;
|
||||
if (sum > base - 1)
|
||||
carryover = 1;
|
||||
else
|
||||
carryover = 0;
|
||||
result.data.push_back(sum % base);
|
||||
}
|
||||
if (carryover != 0)
|
||||
result.data.push_back(carryover);
|
||||
return result;
|
||||
}
|
||||
|
||||
bignum operator-(const bignum &brhs) const {
|
||||
bignum b1 = this->size() < brhs.size() ? *this : brhs;
|
||||
bignum b2 = this->size() < brhs.size() ? brhs : *this;
|
||||
bignum result;
|
||||
result.negative = *this < brhs;
|
||||
result.base = this->base;
|
||||
int8_t borrow = 0;
|
||||
int8_t sub;
|
||||
size_t i;
|
||||
for (i = 0; i < b1.size(); i++) {
|
||||
sub = b2[i] - b1[i] - borrow;
|
||||
if (sub < 0) {
|
||||
sub += base;
|
||||
borrow = 1;
|
||||
} else
|
||||
borrow = 0;
|
||||
result.data.push_back(sub);
|
||||
}
|
||||
for (; i < b2.size(); i++) {
|
||||
sub = b2[i] - borrow;
|
||||
if (sub < 0) {
|
||||
sub += base;
|
||||
borrow = 1;
|
||||
} else
|
||||
borrow = 0;
|
||||
result.data.push_back(sub);
|
||||
}
|
||||
if (borrow) {
|
||||
int8_t tmp = result.data[result.size() - 1] -= base;
|
||||
tmp *= -1;
|
||||
result.data[result.size() - 1] = tmp;
|
||||
}
|
||||
while (result.size() > 1 && result.data[result.size() - 1] == 0)
|
||||
result.data.pop_back();
|
||||
|
||||
return result;
|
||||
}
|
||||
bool operator>=(const bignum &rhs) const {
|
||||
return cmp_bignum(this->data, rhs.data) >= 0;
|
||||
}
|
||||
bool operator<=(const bignum &rhs) const {
|
||||
return cmp_bignum(this->data, rhs.data) <= 0;
|
||||
}
|
||||
bool operator>(const bignum &rhs) const {
|
||||
return cmp_bignum(this->data, rhs.data) > 0;
|
||||
}
|
||||
bool operator<(const bignum &rhs) const {
|
||||
return cmp_bignum(this->data, rhs.data) < 0;
|
||||
}
|
||||
int operator[](int index) const {
|
||||
return this->data[index];
|
||||
}
|
||||
friend std::ostream &operator<<(std::ostream &os, bignum &bn);
|
||||
size_t size() const {
|
||||
return data.size();
|
||||
}
|
||||
|
||||
/*
|
||||
returns:
|
||||
- 0, if the lhs and rhs are equal;
|
||||
- a negative value if lhs is less than rhs;
|
||||
- a positive value if lhs is greater than rhs.
|
||||
*/
|
||||
int cmp_bignum(std::vector<uint8_t> lhs, std::vector<uint8_t> rhs) const
|
||||
{
|
||||
if (lhs.size() > rhs.size())
|
||||
return 1;
|
||||
else if (lhs.size() < rhs.size())
|
||||
return -1;
|
||||
else {
|
||||
/* assumes the digits are stored in reverse order */
|
||||
std::reverse(lhs.begin(), lhs.end());
|
||||
std::reverse(rhs.begin(), rhs.end());
|
||||
for (size_t i = 0; i < lhs.size(); i++) {
|
||||
if (lhs[i] > rhs[i])
|
||||
return 1;
|
||||
if (lhs[i] < rhs[i])
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bignum lower_bound_regex(bignum val)
|
||||
{
|
||||
/* single digit numbers reduce to 0 */
|
||||
if (val.size() == 1) {
|
||||
val.data[0] = 0;
|
||||
return val;
|
||||
}
|
||||
|
||||
for (auto& j : val.data) {
|
||||
uint8_t tmp = j;
|
||||
j = 0;
|
||||
if (tmp != val.base - 1) {
|
||||
break;
|
||||
}
|
||||
if (&j == &val.data[val.size()-2]) {
|
||||
val.data[val.size()-1] = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return val;
|
||||
|
||||
}
|
||||
|
||||
static bignum upper_bound_regex(bignum val)
|
||||
{
|
||||
for (auto& j : val.data) {
|
||||
uint8_t tmp = j;
|
||||
j = val.base - 1;
|
||||
if (tmp != 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
inline std::ostream &operator<<(std::ostream &os, bignum &bn)
|
||||
{
|
||||
std::stringstream ss;
|
||||
bignum tmp = bn;
|
||||
std::reverse(tmp.data.begin(), tmp.data.end());
|
||||
for (auto i : tmp.data)
|
||||
ss << std::hex << (int) i;
|
||||
os << ss.str();
|
||||
return os;
|
||||
};
|
||||
|
||||
#endif /* __AA_BIGNUM_H */
|
@@ -12,7 +12,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, contact or Canonical Ltd.
|
||||
* along with this program; if not, contact Canonical Ltd.
|
||||
*/
|
||||
|
||||
#include "common_optarg.h"
|
||||
|
@@ -12,7 +12,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, contact or Canonical Ltd.
|
||||
* along with this program; if not, contact Canonical Ltd.
|
||||
*/
|
||||
|
||||
#ifndef __AA_IO_URING_H
|
||||
|
@@ -189,6 +189,19 @@ void Node::dump_syntax_tree(ostream &os)
|
||||
* a b c T
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
static Node *simplify_eps_pair(Node *t)
|
||||
{
|
||||
if (t->is_type(NODE_TYPE_TWOCHILD) &&
|
||||
t->child[0] == &epsnode &&
|
||||
t->child[1] == &epsnode) {
|
||||
t->release();
|
||||
return &epsnode;
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
static void rotate_node(Node *t, int dir)
|
||||
{
|
||||
// (a | b) | c -> a | (b | c)
|
||||
@@ -197,7 +210,9 @@ static void rotate_node(Node *t, int dir)
|
||||
t->child[dir] = left->child[dir];
|
||||
left->child[dir] = left->child[!dir];
|
||||
left->child[!dir] = t->child[!dir];
|
||||
t->child[!dir] = left;
|
||||
|
||||
// check that rotation didn't create (E | E)
|
||||
t->child[!dir] = simplify_eps_pair(left);
|
||||
}
|
||||
|
||||
/* return False if no work done */
|
||||
@@ -209,13 +224,7 @@ int TwoChildNode::normalize_eps(int dir)
|
||||
// Ea -> aE
|
||||
// Test for E | (E | E) and E . (E . E) which will
|
||||
// result in an infinite loop
|
||||
Node *c = child[!dir];
|
||||
if (c->is_type(NODE_TYPE_TWOCHILD) &&
|
||||
&epsnode == c->child[dir] &&
|
||||
&epsnode == c->child[!dir]) {
|
||||
c->release();
|
||||
c = &epsnode;
|
||||
}
|
||||
Node *c = simplify_eps_pair(child[!dir]);
|
||||
child[!dir] = child[dir];
|
||||
child[dir] = c;
|
||||
return 1;
|
||||
|
@@ -72,6 +72,7 @@ static inline Chars* insert_char_range(Chars* cset, transchar a, transchar b)
|
||||
* parsing succeeds!
|
||||
*/
|
||||
%destructor { $$->release(); } expr terms0 terms qterm term
|
||||
%destructor { delete $$; } charset cset_chars
|
||||
|
||||
%%
|
||||
|
||||
|
@@ -234,6 +234,7 @@ struct mnt_keyword_table {
|
||||
unsigned int clear;
|
||||
};
|
||||
|
||||
// keep in sync with utils/apparmor/rule/mount.py flags_keywords
|
||||
static struct mnt_keyword_table mnt_opts_table[] = {
|
||||
{"ro", MS_RDONLY, 0},
|
||||
{"r", MS_RDONLY, 0},
|
||||
|
@@ -192,14 +192,14 @@ int mqueue_rule::gen_policy_re(Profile &prof)
|
||||
return RULE_NOT_SUPPORTED;
|
||||
} else if (qtype == mqueue_sysv && !features_supports_sysv_mqueue) {
|
||||
warn_once(prof.name);
|
||||
// return RULE_NOT_SUPPORTED;
|
||||
return RULE_NOT_SUPPORTED;
|
||||
} else if (qtype == mqueue_unspecified &&
|
||||
!(features_supports_posix_mqueue ||
|
||||
features_supports_sysv_mqueue)) {
|
||||
warn_once(prof.name);
|
||||
// should split into warning where posix and sysv can
|
||||
// be separated from nothing being enforced
|
||||
// return RULE_NOT_SUPPORTED;
|
||||
return RULE_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/* always generate a label and mqueue entry */
|
||||
@@ -231,10 +231,10 @@ int mqueue_rule::gen_policy_re(Profile &prof)
|
||||
/* store perms at name match so label doesn't need
|
||||
* to be checked
|
||||
*/
|
||||
if (!label && !prof.policy.rules->add_rule_vec(rule_mode == RULE_DENY, perms, audit == AUDIT_FORCE ? perms : 0, 1, vec, parseopts, false))
|
||||
if (!label && !prof.policy.rules->add_rule_vec(rule_mode == RULE_DENY, map_mqueue_perms(perms), audit == AUDIT_FORCE ? map_mqueue_perms(perms) : 0, 1, vec, parseopts, false))
|
||||
goto fail;
|
||||
/* also provide label match with perm */
|
||||
if (!prof.policy.rules->add_rule_vec(rule_mode == RULE_DENY, perms, audit == AUDIT_FORCE ? perms : 0, size, vec, parseopts, false))
|
||||
if (!prof.policy.rules->add_rule_vec(rule_mode == RULE_DENY, map_mqueue_perms(perms), audit == AUDIT_FORCE ? map_mqueue_perms(perms) : 0, size, vec, parseopts, false))
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
@@ -266,10 +266,10 @@ int mqueue_rule::gen_policy_re(Profile &prof)
|
||||
}
|
||||
|
||||
if (perms & AA_VALID_SYSV_MQ_PERMS) {
|
||||
if (!label && !prof.policy.rules->add_rule_vec(rule_mode == RULE_DENY, perms, audit == AUDIT_FORCE ? perms : 0, 1, vec, parseopts, false))
|
||||
if (!label && !prof.policy.rules->add_rule_vec(rule_mode == RULE_DENY, map_mqueue_perms(perms), audit == AUDIT_FORCE ? map_mqueue_perms(perms) : 0, 1, vec, parseopts, false))
|
||||
goto fail;
|
||||
/* also provide label match with perm */
|
||||
if (!prof.policy.rules->add_rule_vec(rule_mode == RULE_DENY, perms, audit == AUDIT_FORCE ? perms : 0, size, vec, parseopts, false))
|
||||
if (!prof.policy.rules->add_rule_vec(rule_mode == RULE_DENY, map_mqueue_perms(perms), audit == AUDIT_FORCE ? map_mqueue_perms(perms) : 0, size, vec, parseopts, false))
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
@@ -52,13 +52,13 @@
|
||||
* kernel doesn't allow for us to control
|
||||
* - posix
|
||||
* - notify
|
||||
* - getattr/setattr
|
||||
* - labels at anything other than mqueue label, via mqueue inode.
|
||||
*/
|
||||
|
||||
#define AA_VALID_POSIX_MQ_PERMS (AA_MQUEUE_WRITE | AA_MQUEUE_READ | \
|
||||
AA_MQUEUE_CREATE | AA_MQUEUE_DELETE | \
|
||||
AA_MQUEUE_OPEN)
|
||||
AA_MQUEUE_OPEN | \
|
||||
AA_MQUEUE_SETATTR | AA_MQUEUE_GETATTR)
|
||||
|
||||
/* TBD - for now make it wider than posix */
|
||||
#define AA_VALID_SYSV_MQ_PERMS (AA_MQUEUE_WRITE | AA_MQUEUE_READ | \
|
||||
@@ -78,6 +78,11 @@ typedef enum mqueue_type {
|
||||
mqueue_sysv
|
||||
} mqueue_type;
|
||||
|
||||
static inline uint32_t map_mqueue_perms(uint32_t mask)
|
||||
{
|
||||
return (mask & 0x7f) |
|
||||
((mask & (AA_MQUEUE_GETATTR | AA_MQUEUE_SETATTR)) << (AA_OTHER_SHIFT - 8));
|
||||
}
|
||||
|
||||
int parse_mqueue_perms(const char *str_perms, perms_t *perms, int fail);
|
||||
|
||||
|
396
parser/network.c
396
parser/network.c
@@ -1,396 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2014
|
||||
* Canonical, Ltd. (All rights reserved)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, contact Novell, Inc. or Canonical
|
||||
* Ltd.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/apparmor.h>
|
||||
|
||||
#include <iomanip>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <map>
|
||||
|
||||
#include "lib.h"
|
||||
#include "parser.h"
|
||||
#include "profile.h"
|
||||
#include "parser_yacc.h"
|
||||
#include "network.h"
|
||||
|
||||
|
||||
int parse_net_perms(const char *str_mode, perms_t *mode, int fail)
|
||||
{
|
||||
return parse_X_perms("net", AA_VALID_NET_PERMS, str_mode, mode, fail);
|
||||
}
|
||||
|
||||
/* Bleah C++ doesn't have non-trivial designated initializers so we just
|
||||
* have to make sure these are in order. This means we are more brittle
|
||||
* but there isn't much we can do.
|
||||
*/
|
||||
struct sock_type_map {
|
||||
const char *name;
|
||||
int value;
|
||||
};
|
||||
|
||||
struct sock_type_map sock_types[] = {
|
||||
{ "none", 0 },
|
||||
{ "stream", SOCK_STREAM },
|
||||
{ "dgram", SOCK_DGRAM },
|
||||
{ "raw", SOCK_RAW },
|
||||
{ "rdm", SOCK_RDM },
|
||||
{ "seqpacket", SOCK_SEQPACKET },
|
||||
{ "dccp", SOCK_DCCP },
|
||||
{ "invalid", -1 },
|
||||
{ "invalid", -1 },
|
||||
{ "invalid", -1 },
|
||||
{ "packet", SOCK_PACKET },
|
||||
{ NULL, -1 },
|
||||
/*
|
||||
* See comment above
|
||||
*/
|
||||
};
|
||||
|
||||
int net_find_type_val(const char *type)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; sock_types[i].name; i++) {
|
||||
if (strcmp(sock_types[i].name, type) == 0)
|
||||
return sock_types[i].value;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char *net_find_type_name(int type)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; sock_types[i].name; i++) {
|
||||
if (sock_types[i].value == type)
|
||||
return sock_types[i].name;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: currently just treating as a bit mask this will have to change
|
||||
* set up a table of mappings, there can be several mappings for a
|
||||
* given match.
|
||||
* currently the mapping does not set the protocol for stream/dgram to
|
||||
* anything other than 0.
|
||||
* network inet tcp -> network inet stream 0 instead of
|
||||
* network inet raw tcp.
|
||||
* some entries are just provided for completeness at this time
|
||||
*/
|
||||
/* values stolen from /etc/protocols - needs to change */
|
||||
#define RAW_TCP 6
|
||||
#define RAW_UDP 17
|
||||
#define RAW_ICMP 1
|
||||
#define RAW_ICMPv6 58
|
||||
|
||||
/* used by af_name.h to auto generate table entries for "name", AF_NAME
|
||||
* pair */
|
||||
#define AA_GEN_NET_ENT(name, AF) \
|
||||
{name, AF, "stream", SOCK_STREAM, "", 0xffffff}, \
|
||||
{name, AF, "dgram", SOCK_DGRAM, "", 0xffffff}, \
|
||||
{name, AF, "seqpacket", SOCK_SEQPACKET, "", 0xffffff}, \
|
||||
{name, AF, "rdm", SOCK_RDM, "", 0xffffff}, \
|
||||
{name, AF, "raw", SOCK_RAW, "", 0xffffff}, \
|
||||
{name, AF, "packet", SOCK_PACKET, "", 0xffffff},
|
||||
/*FIXME: missing {name, AF, "dccp", SOCK_DCCP, "", 0xfffffff}, */
|
||||
|
||||
static struct network_tuple network_mappings[] = {
|
||||
/* basic types */
|
||||
#include "af_names.h"
|
||||
/* FIXME: af_names.h is missing AF_LLC, AF_TIPC */
|
||||
/* mapped types */
|
||||
{"inet", AF_INET, "raw", SOCK_RAW,
|
||||
"tcp", 1 << RAW_TCP},
|
||||
{"inet", AF_INET, "raw", SOCK_RAW,
|
||||
"udp", 1 << RAW_UDP},
|
||||
{"inet", AF_INET, "raw", SOCK_RAW,
|
||||
"icmp", 1 << RAW_ICMP},
|
||||
{"inet", AF_INET, "tcp", SOCK_STREAM,
|
||||
"", 0xffffffff}, /* should we give raw tcp too? */
|
||||
{"inet", AF_INET, "udp", SOCK_DGRAM,
|
||||
"", 0xffffffff}, /* should these be open masks? */
|
||||
{"inet", AF_INET, "icmp", SOCK_RAW,
|
||||
"", 1 << RAW_ICMP},
|
||||
{"inet6", AF_INET6, "tcp", SOCK_STREAM,
|
||||
"", 0xffffffff},
|
||||
{"inet6", AF_INET6, "udp", SOCK_DGRAM,
|
||||
"", 0xffffffff},
|
||||
/* what do we do with icmp on inet6?
|
||||
{"inet6", AF_INET, "icmp", SOCK_RAW, 0},
|
||||
{"inet6", AF_INET, "icmpv6", SOCK_RAW, 0},
|
||||
*/
|
||||
/* terminate */
|
||||
{NULL, 0, NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
/* The apparmor kernel patches up until 2.6.38 didn't handle networking
|
||||
* tables with sizes > AF_MAX correctly. This could happen when the
|
||||
* parser was built against newer kernel headers and then used to load
|
||||
* policy on an older kernel. This could happen during upgrades or
|
||||
* in multi-kernel boot systems.
|
||||
*
|
||||
* Try to detect the running kernel version and use that to determine
|
||||
* AF_MAX
|
||||
*/
|
||||
#define PROC_VERSION "/proc/sys/kernel/osrelease"
|
||||
static size_t kernel_af_max(void) {
|
||||
char buffer[32];
|
||||
int major;
|
||||
autoclose int fd = -1;
|
||||
int res;
|
||||
|
||||
if (!net_af_max_override) {
|
||||
return 0;
|
||||
}
|
||||
/* the override parameter is specifying the max value */
|
||||
if (net_af_max_override > 0)
|
||||
return net_af_max_override;
|
||||
|
||||
fd = open(PROC_VERSION, O_RDONLY);
|
||||
if (fd == -1)
|
||||
/* fall back to default provided during build */
|
||||
return 0;
|
||||
res = read(fd, &buffer, sizeof(buffer) - 1);
|
||||
if (res <= 0)
|
||||
return 0;
|
||||
buffer[res] = '\0';
|
||||
res = sscanf(buffer, "2.6.%d", &major);
|
||||
if (res != 1)
|
||||
return 0;
|
||||
|
||||
switch(major) {
|
||||
case 24:
|
||||
case 25:
|
||||
case 26:
|
||||
return 34;
|
||||
case 27:
|
||||
return 35;
|
||||
case 28:
|
||||
case 29:
|
||||
case 30:
|
||||
return 36;
|
||||
case 31:
|
||||
case 32:
|
||||
case 33:
|
||||
case 34:
|
||||
case 35:
|
||||
return 37;
|
||||
case 36:
|
||||
case 37:
|
||||
return 38;
|
||||
/* kernels .38 and later should handle this correctly so no
|
||||
* static mapping needed
|
||||
*/
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Yuck. We grab AF_* values to define above from linux/socket.h because
|
||||
* they are more accurate than sys/socket.h for what the kernel actually
|
||||
* supports. However, we can't just include linux/socket.h directly,
|
||||
* because the AF_* definitions are protected with an ifdef KERNEL
|
||||
* wrapper, but we don't want to define that because that can cause
|
||||
* other redefinitions from glibc. However, because the kernel may have
|
||||
* more definitions than glibc, we need make sure AF_MAX reflects this,
|
||||
* hence the wrapping function.
|
||||
*/
|
||||
size_t get_af_max() {
|
||||
size_t af_max;
|
||||
/* HACK: declare that version without "create" had a static AF_MAX */
|
||||
if (!perms_create && !net_af_max_override)
|
||||
net_af_max_override = -1;
|
||||
|
||||
#if AA_AF_MAX > AF_MAX
|
||||
af_max = AA_AF_MAX;
|
||||
#else
|
||||
af_max = AF_MAX;
|
||||
#endif
|
||||
|
||||
/* HACK: some kernels didn't handle network tables from parsers
|
||||
* compiled against newer kernel headers as they are larger than
|
||||
* the running kernel expected. If net_override is defined check
|
||||
* to see if there is a static max specified for that kernel
|
||||
*/
|
||||
if (net_af_max_override) {
|
||||
size_t max = kernel_af_max();
|
||||
if (max && max < af_max)
|
||||
return max;
|
||||
}
|
||||
|
||||
return af_max;
|
||||
}
|
||||
struct aa_network_entry *new_network_ent(unsigned int family,
|
||||
unsigned int type,
|
||||
unsigned int protocol)
|
||||
{
|
||||
struct aa_network_entry *new_entry;
|
||||
new_entry = (struct aa_network_entry *) calloc(1, sizeof(struct aa_network_entry));
|
||||
if (new_entry) {
|
||||
new_entry->family = family;
|
||||
new_entry->type = type;
|
||||
new_entry->protocol = protocol;
|
||||
new_entry->next = NULL;
|
||||
}
|
||||
return new_entry;
|
||||
}
|
||||
|
||||
|
||||
const struct network_tuple *net_find_mapping(const struct network_tuple *map,
|
||||
const char *family,
|
||||
const char *type,
|
||||
const char *protocol)
|
||||
{
|
||||
if (!map)
|
||||
map = network_mappings;
|
||||
else
|
||||
/* assumes it points to last entry returned */
|
||||
map++;
|
||||
|
||||
for (; map->family_name; map++) {
|
||||
if (family) {
|
||||
PDEBUG("Checking family %s\n", map->family_name);
|
||||
if (strcmp(family, map->family_name) != 0)
|
||||
continue;
|
||||
PDEBUG("Found family %s\n", family);
|
||||
}
|
||||
if (type) {
|
||||
PDEBUG("Checking type %s\n", map->type_name);
|
||||
if (strcmp(type, map->type_name) != 0)
|
||||
continue;
|
||||
PDEBUG("Found type %s\n", type);
|
||||
}
|
||||
if (protocol) {
|
||||
/* allows the proto to be the "type", ie. tcp implies
|
||||
* stream */
|
||||
if (!type) {
|
||||
PDEBUG("Checking protocol type %s\n", map->type_name);
|
||||
if (strcmp(protocol, map->type_name) == 0)
|
||||
goto match;
|
||||
}
|
||||
PDEBUG("Checking type %s protocol %s\n", map->type_name, map->protocol_name);
|
||||
if (strcmp(protocol, map->protocol_name) != 0)
|
||||
continue;
|
||||
/* fixme should we allow specifying protocol by #
|
||||
* without needing the protocol mapping? */
|
||||
}
|
||||
|
||||
/* if we get this far we have a match */
|
||||
match:
|
||||
return map;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct aa_network_entry *network_entry(const char *family, const char *type,
|
||||
const char *protocol)
|
||||
{
|
||||
struct aa_network_entry *new_entry, *entry = NULL;
|
||||
const struct network_tuple *mapping = NULL;
|
||||
|
||||
while ((mapping = net_find_mapping(mapping, family, type, protocol))) {
|
||||
new_entry = new_network_ent(mapping->family, mapping->type,
|
||||
mapping->protocol);
|
||||
if (!new_entry)
|
||||
yyerror(_("Memory allocation error."));
|
||||
new_entry->next = entry;
|
||||
entry = new_entry;
|
||||
}
|
||||
|
||||
return entry;
|
||||
};
|
||||
|
||||
#define ALL_TYPES 0x43e
|
||||
|
||||
const char *net_find_af_name(unsigned int af)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (af < 0 || af > get_af_max())
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < sizeof(network_mappings) / sizeof(*network_mappings); i++) {
|
||||
if (network_mappings[i].family == af)
|
||||
return network_mappings[i].family_name;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void __debug_network(unsigned int *array, const char *name)
|
||||
{
|
||||
unsigned int count = sizeof(sock_types)/sizeof(sock_types[0]);
|
||||
unsigned int mask = ~((1 << count) -1);
|
||||
unsigned int i, j;
|
||||
int none = 1;
|
||||
size_t af_max = get_af_max();
|
||||
|
||||
for (i = AF_UNSPEC; i < af_max; i++)
|
||||
if (array[i]) {
|
||||
none = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (none)
|
||||
return;
|
||||
|
||||
printf("%s: ", name);
|
||||
|
||||
/* This can only be set by an unqualified network rule */
|
||||
if (array[AF_UNSPEC]) {
|
||||
printf("<all>\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < af_max; i++) {
|
||||
if (array[i]) {
|
||||
const char *fam = net_find_af_name(i);
|
||||
if (fam)
|
||||
printf("%s ", fam);
|
||||
else
|
||||
printf("#%u ", i);
|
||||
|
||||
/* All types/protocols */
|
||||
if (array[i] == 0xffffffff || array[i] == ALL_TYPES)
|
||||
continue;
|
||||
|
||||
printf("{ ");
|
||||
|
||||
for (j = 0; j < count; j++) {
|
||||
const char *type;
|
||||
if (array[i] & (1 << j)) {
|
||||
type = sock_types[j].name;
|
||||
if (type)
|
||||
printf("%s ", type);
|
||||
else
|
||||
printf("#%u ", j);
|
||||
}
|
||||
}
|
||||
if (array[i] & mask)
|
||||
printf("#%x ", array[i] & mask);
|
||||
|
||||
printf("} ");
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
}
|
966
parser/network.cc
Normal file
966
parser/network.cc
Normal file
@@ -0,0 +1,966 @@
|
||||
/*
|
||||
* Copyright (c) 2014
|
||||
* Canonical, Ltd. (All rights reserved)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, contact Novell, Inc. or Canonical
|
||||
* Ltd.
|
||||
*/
|
||||
|
||||
#include <iomanip>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <map>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "lib.h"
|
||||
#include "parser.h"
|
||||
#include "profile.h"
|
||||
#include "network.h"
|
||||
|
||||
#define ALL_TYPES 0x43e
|
||||
|
||||
int parse_net_perms(const char *str_mode, perms_t *mode, int fail)
|
||||
{
|
||||
return parse_X_perms("net", AA_VALID_NET_PERMS, str_mode, mode, fail);
|
||||
}
|
||||
|
||||
/* Bleah C++ doesn't have non-trivial designated initializers so we just
|
||||
* have to make sure these are in order. This means we are more brittle
|
||||
* but there isn't much we can do.
|
||||
*/
|
||||
struct sock_type_map {
|
||||
const char *name;
|
||||
int value;
|
||||
};
|
||||
|
||||
struct sock_type_map sock_types[] = {
|
||||
{ "none", 0 },
|
||||
{ "stream", SOCK_STREAM },
|
||||
{ "dgram", SOCK_DGRAM },
|
||||
{ "raw", SOCK_RAW },
|
||||
{ "rdm", SOCK_RDM },
|
||||
{ "seqpacket", SOCK_SEQPACKET },
|
||||
{ "dccp", SOCK_DCCP },
|
||||
{ "invalid", -1 },
|
||||
{ "invalid", -1 },
|
||||
{ "invalid", -1 },
|
||||
{ "packet", SOCK_PACKET },
|
||||
{ NULL, -1 },
|
||||
/*
|
||||
* See comment above
|
||||
*/
|
||||
};
|
||||
|
||||
int net_find_type_val(const char *type)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; sock_types[i].name; i++) {
|
||||
if (strcmp(sock_types[i].name, type) == 0)
|
||||
return sock_types[i].value;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char *net_find_type_name(int type)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; sock_types[i].name; i++) {
|
||||
if (sock_types[i].value == type)
|
||||
return sock_types[i].name;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: currently just treating as a bit mask this will have to change
|
||||
* set up a table of mappings, there can be several mappings for a
|
||||
* given match.
|
||||
* currently the mapping does not set the protocol for stream/dgram to
|
||||
* anything other than 0.
|
||||
* network inet tcp -> network inet stream 0 instead of
|
||||
* network inet raw tcp.
|
||||
* some entries are just provided for completeness at this time
|
||||
*/
|
||||
/* values stolen from /etc/protocols - needs to change */
|
||||
#define RAW_TCP 6
|
||||
#define RAW_UDP 17
|
||||
#define RAW_ICMP 1
|
||||
#define RAW_ICMPv6 58
|
||||
|
||||
/* used by af_name.h to auto generate table entries for "name", AF_NAME
|
||||
* pair */
|
||||
#define AA_GEN_NET_ENT(name, AF) \
|
||||
{name, AF, "stream", SOCK_STREAM, "", 0xffffff}, \
|
||||
{name, AF, "dgram", SOCK_DGRAM, "", 0xffffff}, \
|
||||
{name, AF, "seqpacket", SOCK_SEQPACKET, "", 0xffffff}, \
|
||||
{name, AF, "rdm", SOCK_RDM, "", 0xffffff}, \
|
||||
{name, AF, "raw", SOCK_RAW, "", 0xffffff}, \
|
||||
{name, AF, "packet", SOCK_PACKET, "", 0xffffff},
|
||||
/*FIXME: missing {name, AF, "dccp", SOCK_DCCP, "", 0xfffffff}, */
|
||||
|
||||
static struct network_tuple network_mappings[] = {
|
||||
/* basic types */
|
||||
#include "af_names.h"
|
||||
/* FIXME: af_names.h is missing AF_LLC, AF_TIPC */
|
||||
/* mapped types */
|
||||
{"inet", AF_INET, "raw", SOCK_RAW,
|
||||
"tcp", 1 << RAW_TCP},
|
||||
{"inet", AF_INET, "raw", SOCK_RAW,
|
||||
"udp", 1 << RAW_UDP},
|
||||
{"inet", AF_INET, "raw", SOCK_RAW,
|
||||
"icmp", 1 << RAW_ICMP},
|
||||
{"inet", AF_INET, "tcp", SOCK_STREAM,
|
||||
"", 0xffffffff}, /* should we give raw tcp too? */
|
||||
{"inet", AF_INET, "udp", SOCK_DGRAM,
|
||||
"", 0xffffffff}, /* should these be open masks? */
|
||||
{"inet", AF_INET, "icmp", SOCK_RAW,
|
||||
"", 1 << RAW_ICMP},
|
||||
{"inet6", AF_INET6, "tcp", SOCK_STREAM,
|
||||
"", 0xffffffff},
|
||||
{"inet6", AF_INET6, "udp", SOCK_DGRAM,
|
||||
"", 0xffffffff},
|
||||
/* what do we do with icmp on inet6?
|
||||
{"inet6", AF_INET, "icmp", SOCK_RAW, 0},
|
||||
{"inet6", AF_INET, "icmpv6", SOCK_RAW, 0},
|
||||
*/
|
||||
/* terminate */
|
||||
{NULL, 0, NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
/* The apparmor kernel patches up until 2.6.38 didn't handle networking
|
||||
* tables with sizes > AF_MAX correctly. This could happen when the
|
||||
* parser was built against newer kernel headers and then used to load
|
||||
* policy on an older kernel. This could happen during upgrades or
|
||||
* in multi-kernel boot systems.
|
||||
*
|
||||
* Try to detect the running kernel version and use that to determine
|
||||
* AF_MAX
|
||||
*/
|
||||
#define PROC_VERSION "/proc/sys/kernel/osrelease"
|
||||
static size_t kernel_af_max(void) {
|
||||
char buffer[32];
|
||||
int major;
|
||||
autoclose int fd = -1;
|
||||
int res;
|
||||
|
||||
if (!net_af_max_override) {
|
||||
return 0;
|
||||
}
|
||||
/* the override parameter is specifying the max value */
|
||||
if (net_af_max_override > 0)
|
||||
return net_af_max_override;
|
||||
|
||||
fd = open(PROC_VERSION, O_RDONLY);
|
||||
if (fd == -1)
|
||||
/* fall back to default provided during build */
|
||||
return 0;
|
||||
res = read(fd, &buffer, sizeof(buffer) - 1);
|
||||
if (res <= 0)
|
||||
return 0;
|
||||
buffer[res] = '\0';
|
||||
res = sscanf(buffer, "2.6.%d", &major);
|
||||
if (res != 1)
|
||||
return 0;
|
||||
|
||||
switch(major) {
|
||||
case 24:
|
||||
case 25:
|
||||
case 26:
|
||||
return 34;
|
||||
case 27:
|
||||
return 35;
|
||||
case 28:
|
||||
case 29:
|
||||
case 30:
|
||||
return 36;
|
||||
case 31:
|
||||
case 32:
|
||||
case 33:
|
||||
case 34:
|
||||
case 35:
|
||||
return 37;
|
||||
case 36:
|
||||
case 37:
|
||||
return 38;
|
||||
/* kernels .38 and later should handle this correctly so no
|
||||
* static mapping needed
|
||||
*/
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Yuck. We grab AF_* values to define above from linux/socket.h because
|
||||
* they are more accurate than sys/socket.h for what the kernel actually
|
||||
* supports. However, we can't just include linux/socket.h directly,
|
||||
* because the AF_* definitions are protected with an ifdef KERNEL
|
||||
* wrapper, but we don't want to define that because that can cause
|
||||
* other redefinitions from glibc. However, because the kernel may have
|
||||
* more definitions than glibc, we need make sure AF_MAX reflects this,
|
||||
* hence the wrapping function.
|
||||
*/
|
||||
size_t get_af_max() {
|
||||
size_t af_max;
|
||||
/* HACK: declare that version without "create" had a static AF_MAX */
|
||||
if (!perms_create && !net_af_max_override)
|
||||
net_af_max_override = -1;
|
||||
|
||||
#if AA_AF_MAX > AF_MAX
|
||||
af_max = AA_AF_MAX;
|
||||
#else
|
||||
af_max = AF_MAX;
|
||||
#endif
|
||||
|
||||
/* HACK: some kernels didn't handle network tables from parsers
|
||||
* compiled against newer kernel headers as they are larger than
|
||||
* the running kernel expected. If net_override is defined check
|
||||
* to see if there is a static max specified for that kernel
|
||||
*/
|
||||
if (net_af_max_override) {
|
||||
size_t max = kernel_af_max();
|
||||
if (max && max < af_max)
|
||||
return max;
|
||||
}
|
||||
|
||||
return af_max;
|
||||
}
|
||||
|
||||
const char *net_find_af_name(unsigned int af)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (af < 0 || af > get_af_max())
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < sizeof(network_mappings) / sizeof(*network_mappings); i++) {
|
||||
if (network_mappings[i].family == af)
|
||||
return network_mappings[i].family_name;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *net_find_protocol_name(unsigned int protocol)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < sizeof(network_mappings) / sizeof(*network_mappings); i++) {
|
||||
if (network_mappings[i].protocol == protocol) {
|
||||
return network_mappings[i].protocol_name;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const struct network_tuple *net_find_mapping(const struct network_tuple *map,
|
||||
const char *family,
|
||||
const char *type,
|
||||
const char *protocol)
|
||||
{
|
||||
if (!map)
|
||||
map = network_mappings;
|
||||
else
|
||||
/* assumes it points to last entry returned */
|
||||
map++;
|
||||
|
||||
for (; map->family_name; map++) {
|
||||
if (family) {
|
||||
PDEBUG("Checking family %s\n", map->family_name);
|
||||
if (strcmp(family, map->family_name) != 0)
|
||||
continue;
|
||||
PDEBUG("Found family %s\n", family);
|
||||
}
|
||||
if (type) {
|
||||
PDEBUG("Checking type %s\n", map->type_name);
|
||||
if (strcmp(type, map->type_name) != 0)
|
||||
continue;
|
||||
PDEBUG("Found type %s\n", type);
|
||||
}
|
||||
if (protocol) {
|
||||
/* allows the proto to be the "type", ie. tcp implies
|
||||
* stream */
|
||||
if (!type) {
|
||||
PDEBUG("Checking protocol type %s\n", map->type_name);
|
||||
if (strcmp(protocol, map->type_name) == 0)
|
||||
goto match;
|
||||
}
|
||||
PDEBUG("Checking type %s protocol %s\n", map->type_name, map->protocol_name);
|
||||
if (strcmp(protocol, map->protocol_name) != 0)
|
||||
continue;
|
||||
/* fixme should we allow specifying protocol by #
|
||||
* without needing the protocol mapping? */
|
||||
}
|
||||
|
||||
/* if we get this far we have a match */
|
||||
match:
|
||||
return map;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool parse_ipv4_address(const char *input, struct ip_address *result)
|
||||
{
|
||||
struct in_addr addr;
|
||||
if (inet_pton(AF_INET, input, &addr) == 1) {
|
||||
result->family = AF_INET;
|
||||
result->address.address_v4 = addr.s_addr;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool parse_ipv6_address(const char *input, struct ip_address *result)
|
||||
{
|
||||
struct in6_addr addr;
|
||||
if (inet_pton(AF_INET6, input, &addr) == 1) {
|
||||
result->family = AF_INET6;
|
||||
memcpy(result->address.address_v6, addr.s6_addr, 16);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool parse_ip(const char *ip, struct ip_address *result)
|
||||
{
|
||||
return parse_ipv6_address(ip, result) ||
|
||||
parse_ipv4_address(ip, result);
|
||||
}
|
||||
|
||||
bool parse_port_number(const char *port_entry, uint16_t *port) {
|
||||
char *eptr;
|
||||
unsigned long port_tmp = strtoul(port_entry, &eptr, 10);
|
||||
|
||||
if (port_entry != eptr && *eptr == '\0' &&
|
||||
port_tmp <= UINT16_MAX) {
|
||||
*port = port_tmp;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool network_rule::parse_port(ip_conds &entry)
|
||||
{
|
||||
entry.is_port = true;
|
||||
return parse_port_number(entry.sport, &entry.port);
|
||||
}
|
||||
|
||||
bool network_rule::parse_address(ip_conds &entry)
|
||||
{
|
||||
if (strcmp(entry.sip, "none") == 0) {
|
||||
entry.is_none = true;
|
||||
return true;
|
||||
}
|
||||
entry.is_ip = true;
|
||||
return parse_ip(entry.sip, &entry.ip);
|
||||
}
|
||||
|
||||
void network_rule::move_conditionals(struct cond_entry *conds, ip_conds &ip_cond)
|
||||
{
|
||||
struct cond_entry *cond_ent;
|
||||
|
||||
list_for_each(conds, cond_ent) {
|
||||
/* for now disallow keyword 'in' (list) */
|
||||
if (!cond_ent->eq)
|
||||
yyerror("keyword \"in\" is not allowed in network rules\n");
|
||||
if (strcmp(cond_ent->name, "ip") == 0) {
|
||||
move_conditional_value("network", &ip_cond.sip, cond_ent);
|
||||
if (!parse_address(ip_cond))
|
||||
yyerror("network invalid ip='%s'\n", ip_cond.sip);
|
||||
} else if (strcmp(cond_ent->name, "port") == 0) {
|
||||
move_conditional_value("network", &ip_cond.sport, cond_ent);
|
||||
if (!parse_port(ip_cond))
|
||||
yyerror("network invalid port='%s'\n", ip_cond.sport);
|
||||
} else {
|
||||
yyerror("invalid network rule conditional \"%s\"\n",
|
||||
cond_ent->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void network_rule::set_netperm(unsigned int family, unsigned int type, unsigned int protocol)
|
||||
{
|
||||
if (type > SOCK_PACKET) {
|
||||
/* setting mask instead of a bit */
|
||||
network_perms[family].first |= type;
|
||||
} else
|
||||
network_perms[family].first |= 1 << type;
|
||||
network_perms[family].second |= protocol;
|
||||
}
|
||||
|
||||
network_rule::network_rule(perms_t perms_p, struct cond_entry *conds,
|
||||
struct cond_entry *peer_conds):
|
||||
dedup_perms_rule_t(AA_CLASS_NETV8), label(NULL)
|
||||
{
|
||||
size_t family_index, i;
|
||||
|
||||
move_conditionals(conds, local);
|
||||
move_conditionals(peer_conds, peer);
|
||||
free_cond_list(conds);
|
||||
free_cond_list(peer_conds);
|
||||
|
||||
if (has_local_conds() || has_peer_conds()) {
|
||||
const char *family[] = { "inet", "inet6" };
|
||||
for (i = 0; i < sizeof(family)/sizeof(family[0]); i++) {
|
||||
const struct network_tuple *mapping = NULL;
|
||||
while ((mapping = net_find_mapping(mapping, family[i], NULL, NULL))) {
|
||||
network_map[mapping->family].push_back({ mapping->family, mapping->type, mapping->protocol });
|
||||
set_netperm(mapping->family, mapping->type, mapping->protocol);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (family_index = AF_UNSPEC; family_index < get_af_max(); family_index++) {
|
||||
network_map[family_index].push_back({ family_index, 0xFFFFFFFF, 0xFFFFFFFF });
|
||||
set_netperm(family_index, 0xFFFFFFFF, 0xFFFFFFFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (perms_p) {
|
||||
perms = perms_p;
|
||||
if (perms & ~AA_VALID_NET_PERMS)
|
||||
yyerror("perms contains invalid permissions for network rules\n");
|
||||
else if ((perms & ~AA_PEER_NET_PERMS) && has_peer_conds())
|
||||
yyerror("network 'create', 'shutdown', 'setattr', 'getattr', 'bind', 'listen', 'setopt', and/or 'getopt' accesses cannot be used with peer socket conditionals\n");
|
||||
} else {
|
||||
perms = AA_VALID_NET_PERMS;
|
||||
}
|
||||
}
|
||||
|
||||
network_rule::network_rule(perms_t perms_p, const char *family, const char *type,
|
||||
const char *protocol, struct cond_entry *conds,
|
||||
struct cond_entry *peer_conds):
|
||||
dedup_perms_rule_t(AA_CLASS_NETV8), label(NULL)
|
||||
{
|
||||
const struct network_tuple *mapping = NULL;
|
||||
|
||||
move_conditionals(conds, local);
|
||||
move_conditionals(peer_conds, peer);
|
||||
free_cond_list(conds);
|
||||
free_cond_list(peer_conds);
|
||||
|
||||
while ((mapping = net_find_mapping(mapping, family, type, protocol))) {
|
||||
/* if inet conds and family are specified, fail if
|
||||
* family is not af_inet or af_inet6
|
||||
*/
|
||||
if ((has_local_conds() || has_peer_conds()) &&
|
||||
mapping->family != AF_INET && mapping->family != AF_INET6) {
|
||||
yyerror("network family does not support local or peer conditionals\n");
|
||||
}
|
||||
network_map[mapping->family].push_back({ mapping->family, mapping->type, mapping->protocol });
|
||||
set_netperm(mapping->family, mapping->type, mapping->protocol);
|
||||
}
|
||||
|
||||
if (type == NULL && network_map.empty()) {
|
||||
while ((mapping = net_find_mapping(mapping, type, family, protocol))) {
|
||||
/* if inet conds and type/protocol are
|
||||
* specified, only add rules for af_inet and
|
||||
* af_inet6
|
||||
*/
|
||||
if ((has_local_conds() || has_peer_conds()) &&
|
||||
mapping->family != AF_INET && mapping->family != AF_INET6)
|
||||
continue;
|
||||
|
||||
network_map[mapping->family].push_back({ mapping->family, mapping->type, mapping->protocol });
|
||||
set_netperm(mapping->family, mapping->type, mapping->protocol);
|
||||
}
|
||||
}
|
||||
|
||||
if (network_map.empty())
|
||||
yyerror(_("Invalid network entry."));
|
||||
|
||||
if (perms_p) {
|
||||
perms = perms_p;
|
||||
if (perms & ~AA_VALID_NET_PERMS)
|
||||
yyerror("perms contains invalid permissions for network rules\n");
|
||||
else if ((perms & ~AA_PEER_NET_PERMS) && has_peer_conds())
|
||||
yyerror("network 'create', 'shutdown', 'setattr', 'getattr', 'bind', 'listen', 'setopt', and/or 'getopt' accesses cannot be used with peer socket conditionals\n");
|
||||
} else {
|
||||
perms = AA_VALID_NET_PERMS;
|
||||
}
|
||||
}
|
||||
|
||||
network_rule::network_rule(perms_t perms_p, unsigned int family, unsigned int type):
|
||||
dedup_perms_rule_t(AA_CLASS_NETV8), label(NULL)
|
||||
{
|
||||
network_map[family].push_back({ family, type, 0xFFFFFFFF });
|
||||
set_netperm(family, type, 0xFFFFFFFF);
|
||||
|
||||
if (perms_p) {
|
||||
perms = perms_p;
|
||||
if (perms & ~AA_VALID_NET_PERMS)
|
||||
yyerror("perms contains invalid permissions for network rules\n");
|
||||
else if ((perms & ~AA_PEER_NET_PERMS) && has_peer_conds())
|
||||
yyerror("network 'create', 'shutdown', 'setattr', 'getattr', 'bind', 'listen', 'setopt', and/or 'getopt' accesses cannot be used with peer socket conditionals\n");
|
||||
} else {
|
||||
perms = AA_VALID_NET_PERMS;
|
||||
}
|
||||
}
|
||||
|
||||
ostream &network_rule::dump(ostream &os)
|
||||
{
|
||||
class_rule_t::dump(os);
|
||||
|
||||
unsigned int count = sizeof(sock_types)/sizeof(sock_types[0]);
|
||||
unsigned int mask = ~((1 << count) -1);
|
||||
unsigned int j;
|
||||
|
||||
/* This can only be set by an unqualified network rule */
|
||||
if (network_map.find(AF_UNSPEC) != network_map.end()) {
|
||||
os << ",\n";
|
||||
return os;
|
||||
}
|
||||
|
||||
for (const auto& perm : network_perms) {
|
||||
unsigned int family = perm.first;
|
||||
unsigned int type = perm.second.first;
|
||||
unsigned int protocol = perm.second.second;
|
||||
|
||||
const char *family_name = net_find_af_name(family);
|
||||
if (family_name)
|
||||
os << " " << family_name;
|
||||
else
|
||||
os << " #" << family;
|
||||
|
||||
/* All types/protocols */
|
||||
if (type == 0xffffffff || type == ALL_TYPES)
|
||||
continue;
|
||||
|
||||
printf(" {");
|
||||
|
||||
for (j = 0; j < count; j++) {
|
||||
const char *type_name;
|
||||
if (type & (1 << j)) {
|
||||
type_name = sock_types[j].name;
|
||||
if (type_name)
|
||||
os << " " << type_name;
|
||||
else
|
||||
os << " #" << j;
|
||||
}
|
||||
}
|
||||
if (type & mask)
|
||||
os << " #" << std::hex << (type & mask);
|
||||
|
||||
printf(" }");
|
||||
|
||||
const char *protocol_name = net_find_protocol_name(protocol);
|
||||
if (protocol_name)
|
||||
os << " " << protocol_name;
|
||||
else
|
||||
os << " #" << protocol;
|
||||
}
|
||||
|
||||
os << ",\n";
|
||||
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
int network_rule::expand_variables(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void network_rule::warn_once(const char *name)
|
||||
{
|
||||
rule_t::warn_once(name, "network rules not enforced");
|
||||
}
|
||||
|
||||
std::string gen_ip_cond(const struct ip_address ip)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
int i;
|
||||
if (ip.family == AF_INET) {
|
||||
/* add a byte containing the size of the following ip */
|
||||
oss << "\\x" << std::setfill('0') << std::setw(2) << std::hex << IPV4_SIZE;
|
||||
|
||||
u8 *byte = (u8 *) &ip.address.address_v4; /* in network byte order */
|
||||
for (i = 0; i < 4; i++)
|
||||
oss << "\\x" << std::setfill('0') << std::setw(2) << std::hex << static_cast<unsigned int>(byte[i]);
|
||||
} else {
|
||||
/* add a byte containing the size of the following ip */
|
||||
oss << "\\x" << std::setfill('0') << std::setw(2) << std::hex << IPV6_SIZE;
|
||||
for (i = 0; i < 16; ++i)
|
||||
oss << "\\x" << std::setfill('0') << std::setw(2) << std::hex << static_cast<unsigned int>(ip.address.address_v6[i]);
|
||||
}
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
std::string gen_port_cond(uint16_t port)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
if (port > 0) {
|
||||
oss << "\\x" << std::setfill('0') << std::setw(2) << std::hex << ((port & 0xff00) >> 8);
|
||||
oss << "\\x" << std::setfill('0') << std::setw(2) << std::hex << (port & 0xff);
|
||||
} else {
|
||||
oss << "..";
|
||||
}
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
std::list<std::ostringstream> gen_all_ip_options(std::ostringstream &oss) {
|
||||
|
||||
std::list<std::ostringstream> all_streams;
|
||||
std::ostringstream none, ipv4, ipv6;
|
||||
int i;
|
||||
none << oss.str();
|
||||
ipv4 << oss.str();
|
||||
ipv6 << oss.str();
|
||||
|
||||
none << "\\x" << std::setfill('0') << std::setw(2) << std::hex << NONE_SIZE;
|
||||
|
||||
/* add a byte containing the size of the following ip */
|
||||
ipv4 << "\\x" << std::setfill('0') << std::setw(2) << std::hex << IPV4_SIZE;
|
||||
for (i = 0; i < 4; i++)
|
||||
ipv4 << ".";
|
||||
|
||||
/* add a byte containing the size of the following ip */
|
||||
ipv6 << "\\x" << std::setfill('0') << std::setw(2) << std::hex << IPV6_SIZE;
|
||||
for (i = 0; i < 16; ++i)
|
||||
ipv6 << ".";
|
||||
|
||||
all_streams.push_back(std::move(none));
|
||||
all_streams.push_back(std::move(ipv4));
|
||||
all_streams.push_back(std::move(ipv6));
|
||||
|
||||
return all_streams;
|
||||
}
|
||||
|
||||
std::list<std::ostringstream> copy_streams_list(std::list<std::ostringstream> &streams)
|
||||
{
|
||||
std::list<std::ostringstream> streams_copy;
|
||||
for (auto &oss : streams) {
|
||||
std::ostringstream oss_copy(oss.str());
|
||||
streams_copy.push_back(std::move(oss_copy));
|
||||
}
|
||||
return streams_copy;
|
||||
}
|
||||
|
||||
bool network_rule::gen_ip_conds(Profile &prof, std::list<std::ostringstream> &streams, ip_conds &entry, bool is_peer, bool is_cmd)
|
||||
{
|
||||
std::string buf;
|
||||
perms_t cond_perms;
|
||||
std::list<std::ostringstream> ip_streams;
|
||||
|
||||
for (auto &oss : streams) {
|
||||
if (entry.is_port && !(entry.is_ip && entry.is_none)) {
|
||||
/* encode port type (privileged - 1, remote - 2, unprivileged - 0) */
|
||||
if (!is_peer && perms & AA_NET_BIND && entry.port < IPPORT_RESERVED)
|
||||
oss << "\\x01";
|
||||
else if (is_peer)
|
||||
oss << "\\x02";
|
||||
else
|
||||
oss << "\\x00";
|
||||
|
||||
oss << gen_port_cond(entry.port);
|
||||
} else {
|
||||
/* port type + port number */
|
||||
oss << "...";
|
||||
}
|
||||
}
|
||||
|
||||
ip_streams = std::move(streams);
|
||||
streams.clear();
|
||||
|
||||
for (auto &oss : ip_streams) {
|
||||
if (entry.is_ip) {
|
||||
oss << gen_ip_cond(entry.ip);
|
||||
streams.push_back(std::move(oss));
|
||||
} else if (entry.is_none) {
|
||||
oss << "\\x" << std::setfill('0') << std::setw(2) << std::hex << NONE_SIZE;
|
||||
streams.push_back(std::move(oss));
|
||||
} else {
|
||||
streams.splice(streams.end(), gen_all_ip_options(oss));
|
||||
}
|
||||
}
|
||||
|
||||
cond_perms = map_perms(perms);
|
||||
if (!is_cmd && (label || is_peer))
|
||||
cond_perms = (AA_CONT_MATCH << 1);
|
||||
|
||||
for (auto &oss : streams) {
|
||||
oss << "\\x00"; /* null transition */
|
||||
|
||||
buf = oss.str();
|
||||
/* AA_CONT_MATCH mapping (cond_perms) only applies to perms, not audit */
|
||||
if (!prof.policy.rules->add_rule(buf.c_str(), rule_mode == RULE_DENY, cond_perms,
|
||||
dedup_perms_rule_t::audit == AUDIT_FORCE ? map_perms(perms) : 0,
|
||||
parseopts))
|
||||
return false;
|
||||
|
||||
if (label || is_peer) {
|
||||
if (!is_peer)
|
||||
cond_perms = map_perms(perms);
|
||||
|
||||
oss << default_match_pattern; /* label - not used for now */
|
||||
oss << "\\x00"; /* null transition */
|
||||
|
||||
buf = oss.str();
|
||||
if (!prof.policy.rules->add_rule(buf.c_str(), rule_mode == RULE_DENY, cond_perms,
|
||||
dedup_perms_rule_t::audit == AUDIT_FORCE ? map_perms(perms) : 0,
|
||||
parseopts))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool network_rule::gen_net_rule(Profile &prof, u16 family, unsigned int type_mask, unsigned int protocol) {
|
||||
std::ostringstream buffer;
|
||||
std::string buf;
|
||||
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << AA_CLASS_NETV8;
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << ((family & 0xff00) >> 8);
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << (family & 0xff);
|
||||
if (type_mask > 0xffff) {
|
||||
buffer << "..";
|
||||
} else {
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << ((type_mask & 0xff00) >> 8);
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << (type_mask & 0xff);
|
||||
}
|
||||
|
||||
if (!features_supports_inet || (family != AF_INET && family != AF_INET6)) {
|
||||
buf = buffer.str();
|
||||
if (!prof.policy.rules->add_rule(buf.c_str(), rule_mode == RULE_DENY, map_perms(perms),
|
||||
dedup_perms_rule_t::audit == AUDIT_FORCE ? map_perms(perms) : 0,
|
||||
parseopts))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
buf = buffer.str();
|
||||
/* create perms need to be generated excluding the rest of the perms */
|
||||
if (perms & AA_NET_CREATE) {
|
||||
if (!prof.policy.rules->add_rule(buf.c_str(), rule_mode == RULE_DENY, map_perms(perms & AA_NET_CREATE) | (AA_CONT_MATCH << 1),
|
||||
dedup_perms_rule_t::audit == AUDIT_FORCE ? map_perms(perms & AA_NET_CREATE) : 0,
|
||||
parseopts))
|
||||
return false;
|
||||
}
|
||||
|
||||
/* encode protocol */
|
||||
if (protocol > 0xffff) {
|
||||
buffer << "..";
|
||||
} else {
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << ((protocol & 0xff00) >> 8);
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << (protocol & 0xff);
|
||||
}
|
||||
|
||||
if (perms & AA_PEER_NET_PERMS) {
|
||||
std::list<std::ostringstream> streams;
|
||||
std::ostringstream cmd_buffer;
|
||||
|
||||
cmd_buffer << buffer.str();
|
||||
streams.push_back(std::move(cmd_buffer));
|
||||
|
||||
if (!gen_ip_conds(prof, streams, peer, true, false))
|
||||
return false;
|
||||
|
||||
for (auto &oss : streams) {
|
||||
oss << "\\x" << std::setfill('0') << std::setw(2) << std::hex << CMD_ADDR;
|
||||
}
|
||||
|
||||
if (!gen_ip_conds(prof, streams, local, false, true))
|
||||
return false;
|
||||
}
|
||||
|
||||
std::list<std::ostringstream> streams;
|
||||
std::ostringstream common_buffer;
|
||||
|
||||
common_buffer << buffer.str();
|
||||
streams.push_back(std::move(common_buffer));
|
||||
|
||||
if (!gen_ip_conds(prof, streams, local, false, false))
|
||||
return false;
|
||||
|
||||
if (perms & AA_NET_LISTEN) {
|
||||
std::list<std::ostringstream> cmd_streams;
|
||||
cmd_streams = copy_streams_list(streams);
|
||||
|
||||
for (auto &cmd_buffer : streams) {
|
||||
std::ostringstream listen_buffer;
|
||||
listen_buffer << cmd_buffer.str();
|
||||
listen_buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << CMD_LISTEN;
|
||||
/* length of queue allowed - not used for now */
|
||||
listen_buffer << "..";
|
||||
buf = listen_buffer.str();
|
||||
if (!prof.policy.rules->add_rule(buf.c_str(), rule_mode == RULE_DENY, map_perms(perms),
|
||||
dedup_perms_rule_t::audit == AUDIT_FORCE ? map_perms(perms) : 0,
|
||||
parseopts))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (perms & AA_NET_OPT) {
|
||||
std::list<std::ostringstream> cmd_streams;
|
||||
cmd_streams = copy_streams_list(streams);
|
||||
|
||||
for (auto &cmd_buffer : streams) {
|
||||
std::ostringstream opt_buffer;
|
||||
opt_buffer << cmd_buffer.str();
|
||||
opt_buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << CMD_OPT;
|
||||
/* level - not used for now */
|
||||
opt_buffer << "..";
|
||||
/* socket mapping - not used for now */
|
||||
opt_buffer << "..";
|
||||
buf = opt_buffer.str();
|
||||
if (!prof.policy.rules->add_rule(buf.c_str(), rule_mode == RULE_DENY, map_perms(perms),
|
||||
dedup_perms_rule_t::audit == AUDIT_FORCE ? map_perms(perms) : 0,
|
||||
parseopts))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int network_rule::gen_policy_re(Profile &prof)
|
||||
{
|
||||
std::ostringstream buffer;
|
||||
std::string buf;
|
||||
|
||||
if (!features_supports_networkv8) {
|
||||
warn_once(prof.name);
|
||||
return RULE_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
for (const auto& perm : network_perms) {
|
||||
unsigned int family = perm.first;
|
||||
unsigned int type = perm.second.first;
|
||||
unsigned int protocol = perm.second.second;
|
||||
|
||||
if (type > 0xffff) {
|
||||
if (!gen_net_rule(prof, family, type, protocol))
|
||||
goto fail;
|
||||
} else {
|
||||
int t;
|
||||
/* generate rules for types that are set */
|
||||
for (t = 0; t < 16; t++) {
|
||||
if (type & (1 << t)) {
|
||||
if (!gen_net_rule(prof, family, t, protocol))
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return RULE_OK;
|
||||
|
||||
fail:
|
||||
return RULE_ERROR;
|
||||
|
||||
}
|
||||
|
||||
/* initialize static members */
|
||||
unsigned int *network_rule::allow = NULL;
|
||||
unsigned int *network_rule::audit = NULL;
|
||||
unsigned int *network_rule::deny = NULL;
|
||||
unsigned int *network_rule::quiet = NULL;
|
||||
|
||||
bool network_rule::alloc_net_table()
|
||||
{
|
||||
if (allow)
|
||||
return true;
|
||||
allow = (unsigned int *) calloc(get_af_max(), sizeof(unsigned int));
|
||||
audit = (unsigned int *) calloc(get_af_max(), sizeof(unsigned int));
|
||||
deny = (unsigned int *) calloc(get_af_max(), sizeof(unsigned int));
|
||||
quiet = (unsigned int *) calloc(get_af_max(), sizeof(unsigned int));
|
||||
if (!allow || !audit || !deny || !quiet)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* update is required because at the point of the creation of the
|
||||
* network_rule object, we don't have owner, rule_mode, or audit
|
||||
* set.
|
||||
*/
|
||||
void network_rule::update_compat_net(void)
|
||||
{
|
||||
if (!alloc_net_table())
|
||||
yyerror(_("Memory allocation error."));
|
||||
|
||||
for (auto& nm: network_map) {
|
||||
for (auto& entry : nm.second) {
|
||||
if (entry.type > SOCK_PACKET) {
|
||||
/* setting mask instead of a bit */
|
||||
if (rule_mode == RULE_DENY) {
|
||||
deny[entry.family] |= entry.type;
|
||||
if (dedup_perms_rule_t::audit != AUDIT_FORCE)
|
||||
quiet[entry.family] |= entry.type;
|
||||
} else {
|
||||
allow[entry.family] |= entry.type;
|
||||
if (dedup_perms_rule_t::audit == AUDIT_FORCE)
|
||||
audit[entry.family] |= entry.type;
|
||||
}
|
||||
} else {
|
||||
if (rule_mode == RULE_DENY) {
|
||||
deny[entry.family] |= 1 << entry.type;
|
||||
if (dedup_perms_rule_t::audit != AUDIT_FORCE)
|
||||
quiet[entry.family] |= 1 << entry.type;
|
||||
} else {
|
||||
allow[entry.family] |= 1 << entry.type;
|
||||
if (dedup_perms_rule_t::audit == AUDIT_FORCE)
|
||||
audit[entry.family] |= 1 << entry.type;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int cmp_ip_conds(ip_conds const &lhs, ip_conds const &rhs)
|
||||
{
|
||||
int res = null_strcmp(lhs.sip, rhs.sip);
|
||||
if (res)
|
||||
return res;
|
||||
res = null_strcmp(lhs.sport, rhs.sport);
|
||||
if (res)
|
||||
return res;
|
||||
return lhs.is_none - rhs.is_none;
|
||||
}
|
||||
|
||||
static int cmp_network_map(std::unordered_map<unsigned int, std::pair<unsigned int, unsigned int>> lhs,
|
||||
std::unordered_map<unsigned int, std::pair<unsigned int, unsigned int>> rhs)
|
||||
{
|
||||
int res;
|
||||
size_t family_index;
|
||||
for (family_index = AF_UNSPEC; family_index < get_af_max(); family_index++) {
|
||||
res = lhs[family_index].first - rhs[family_index].first;
|
||||
if (res)
|
||||
return res;
|
||||
res = lhs[family_index].second - rhs[family_index].second;
|
||||
if (res)
|
||||
return res;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int network_rule::cmp(rule_t const &rhs) const
|
||||
{
|
||||
int res = dedup_perms_rule_t::cmp(rhs);
|
||||
if (res)
|
||||
return res;
|
||||
network_rule const &nrhs = rule_cast<network_rule const &>(rhs);
|
||||
res = cmp_network_map(network_perms, nrhs.network_perms);
|
||||
if (res)
|
||||
return res;
|
||||
res = cmp_ip_conds(local, nrhs.local);
|
||||
if (res)
|
||||
return res;
|
||||
res = cmp_ip_conds(peer, nrhs.peer);
|
||||
if (res)
|
||||
return res;
|
||||
return null_strcmp(label, nrhs.label);
|
||||
};
|
160
parser/network.h
160
parser/network.h
@@ -26,9 +26,12 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <list>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#include "parser.h"
|
||||
#include "rule.h"
|
||||
@@ -73,6 +76,14 @@
|
||||
#define AA_PEER_NET_PERMS (AA_VALID_NET_PERMS & (~AA_LOCAL_NET_PERMS | \
|
||||
AA_NET_ACCEPT))
|
||||
|
||||
#define CMD_ADDR 1
|
||||
#define CMD_LISTEN 2
|
||||
#define CMD_OPT 4
|
||||
|
||||
#define NONE_SIZE 0
|
||||
#define IPV4_SIZE 1
|
||||
#define IPV6_SIZE 2
|
||||
|
||||
struct network_tuple {
|
||||
const char *family_name;
|
||||
unsigned int family;
|
||||
@@ -82,13 +93,10 @@ struct network_tuple {
|
||||
unsigned int protocol;
|
||||
};
|
||||
|
||||
/* supported AF protocols */
|
||||
struct aa_network_entry {
|
||||
unsigned int family;
|
||||
long unsigned int family;
|
||||
unsigned int type;
|
||||
unsigned int protocol;
|
||||
|
||||
struct aa_network_entry *next;
|
||||
};
|
||||
|
||||
static inline uint32_t map_perms(uint32_t mask)
|
||||
@@ -99,45 +107,117 @@ static inline uint32_t map_perms(uint32_t mask)
|
||||
((mask & (AA_NET_SETOPT | AA_NET_GETOPT)) >> 5); /* 5 + (AA_OTHER_SHIFT - 24) */
|
||||
};
|
||||
|
||||
|
||||
int parse_net_perms(const char *str_mode, perms_t *perms, int fail);
|
||||
extern struct aa_network_entry *new_network_ent(unsigned int family,
|
||||
unsigned int type,
|
||||
unsigned int protocol);
|
||||
extern struct aa_network_entry *network_entry(const char *family,
|
||||
const char *type,
|
||||
const char *protocol);
|
||||
extern size_t get_af_max(void);
|
||||
|
||||
void __debug_network(unsigned int *array, const char *name);
|
||||
|
||||
struct network {
|
||||
unsigned int *allow; /* array of type masks
|
||||
* indexed by AF_FAMILY */
|
||||
unsigned int *audit;
|
||||
unsigned int *deny;
|
||||
unsigned int *quiet;
|
||||
|
||||
network(void) { allow = audit = deny = quiet = NULL; }
|
||||
|
||||
void dump(void) {
|
||||
if (allow)
|
||||
__debug_network(allow, "Network");
|
||||
if (audit)
|
||||
__debug_network(audit, "Audit Net");
|
||||
if (deny)
|
||||
__debug_network(deny, "Deny Net");
|
||||
if (quiet)
|
||||
__debug_network(quiet, "Quiet Net");
|
||||
}
|
||||
};
|
||||
|
||||
size_t get_af_max();
|
||||
int net_find_type_val(const char *type);
|
||||
const char *net_find_type_name(int type);
|
||||
const char *net_find_af_name(unsigned int af);
|
||||
const struct network_tuple *net_find_mapping(const struct network_tuple *map,
|
||||
const char *family,
|
||||
const char *type,
|
||||
const char *protocol);
|
||||
|
||||
struct ip_address {
|
||||
union {
|
||||
uint8_t address_v6[16];
|
||||
uint32_t address_v4;
|
||||
} address;
|
||||
uint16_t family;
|
||||
};
|
||||
|
||||
class ip_conds {
|
||||
public:
|
||||
char *sip = NULL;
|
||||
char *sport = NULL;
|
||||
|
||||
bool is_ip = false;
|
||||
bool is_port = false;
|
||||
|
||||
uint16_t port;
|
||||
struct ip_address ip;
|
||||
|
||||
bool is_none = false;
|
||||
|
||||
void free_conds() {
|
||||
if (sip)
|
||||
free(sip);
|
||||
if (sport)
|
||||
free(sport);
|
||||
}
|
||||
};
|
||||
|
||||
class network_rule: public dedup_perms_rule_t {
|
||||
void move_conditionals(struct cond_entry *conds, ip_conds &ip_cond);
|
||||
public:
|
||||
std::unordered_map<unsigned int, std::vector<struct aa_network_entry>> network_map;
|
||||
std::unordered_map<unsigned int, std::pair<unsigned int, unsigned int>> network_perms;
|
||||
|
||||
ip_conds peer;
|
||||
ip_conds local;
|
||||
char *label;
|
||||
|
||||
bool has_local_conds(void) { return local.sip || local.sport; }
|
||||
bool has_peer_conds(void) { return peer.sip || peer.sport; }
|
||||
/* empty constructor used only for the profile to access
|
||||
* static elements to maintain compatibility with
|
||||
* AA_CLASS_NET */
|
||||
network_rule(): dedup_perms_rule_t(AA_CLASS_NETV8), label(NULL) { }
|
||||
network_rule(perms_t perms_p, struct cond_entry *conds,
|
||||
struct cond_entry *peer_conds);
|
||||
network_rule(perms_t perms_p, const char *family, const char *type,
|
||||
const char *protocol, struct cond_entry *conds,
|
||||
struct cond_entry *peer_conds);
|
||||
network_rule(perms_t perms_p, unsigned int family, unsigned int type);
|
||||
virtual ~network_rule()
|
||||
{
|
||||
peer.free_conds();
|
||||
local.free_conds();
|
||||
if (allow) {
|
||||
free(allow);
|
||||
allow = NULL;
|
||||
}
|
||||
if (audit) {
|
||||
free(audit);
|
||||
audit = NULL;
|
||||
}
|
||||
if (deny) {
|
||||
free(deny);
|
||||
deny = NULL;
|
||||
}
|
||||
if (quiet) {
|
||||
free(quiet);
|
||||
quiet = NULL;
|
||||
}
|
||||
};
|
||||
|
||||
bool gen_ip_conds(Profile &prof, std::list<std::ostringstream> &streams, ip_conds &entry, bool is_peer, bool is_cmd);
|
||||
bool gen_net_rule(Profile &prof, u16 family, unsigned int type_mask, unsigned int protocol);
|
||||
void set_netperm(unsigned int family, unsigned int type, unsigned int protocol);
|
||||
void update_compat_net(void);
|
||||
bool parse_address(ip_conds &entry);
|
||||
bool parse_port(ip_conds &entry);
|
||||
|
||||
virtual bool valid_prefix(const prefixes &p, const char *&error) {
|
||||
if (p.owner) {
|
||||
error = _("owner prefix not allowed on network rules");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
virtual ostream &dump(ostream &os);
|
||||
virtual int expand_variables(void);
|
||||
virtual int gen_policy_re(Profile &prof);
|
||||
|
||||
virtual bool is_mergeable(void) { return true; }
|
||||
virtual int cmp(rule_t const &rhs) const;
|
||||
|
||||
/* array of type masks indexed by AF_FAMILY */
|
||||
/* allow, audit, deny and quiet are used for compatibility with AA_CLASS_NET */
|
||||
static unsigned int *allow;
|
||||
static unsigned int *audit;
|
||||
static unsigned int *deny;
|
||||
static unsigned int *quiet;
|
||||
|
||||
bool alloc_net_table(void);
|
||||
|
||||
protected:
|
||||
virtual void warn_once(const char *name) override;
|
||||
};
|
||||
|
||||
#endif /* __AA_NETWORK_H */
|
||||
|
@@ -37,6 +37,7 @@
|
||||
#include "libapparmor_re/apparmor_re.h"
|
||||
#include "libapparmor_re/aare_rules.h"
|
||||
#include "rule.h"
|
||||
#include "bignum.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
@@ -340,6 +341,7 @@ extern int kernel_load;
|
||||
extern int kernel_supports_setload;
|
||||
extern int features_supports_network;
|
||||
extern int features_supports_networkv8;
|
||||
extern int features_supports_inet;
|
||||
extern int kernel_supports_policydb;
|
||||
extern int kernel_supports_diff_encode;
|
||||
extern int features_supports_mount;
|
||||
@@ -353,6 +355,8 @@ extern int features_supports_userns;
|
||||
extern int features_supports_posix_mqueue;
|
||||
extern int features_supports_sysv_mqueue;
|
||||
extern int features_supports_io_uring;
|
||||
extern int features_supports_flag_interruptible;
|
||||
extern int features_supports_flag_signal;
|
||||
extern int kernel_supports_oob;
|
||||
extern int conf_verbose;
|
||||
extern int conf_quiet;
|
||||
@@ -409,6 +413,7 @@ extern pattern_t convert_aaregex_to_pcre(const char *aare, int anchor, int glob,
|
||||
extern int build_list_val_expr(std::string& buffer, struct value_list *list);
|
||||
extern int convert_entry(std::string& buffer, char *entry);
|
||||
extern int clear_and_convert_entry(std::string& buffer, char *entry);
|
||||
extern int convert_range(std::string& buffer, bignum start, bignum end);
|
||||
extern int process_regex(Profile *prof);
|
||||
extern int post_process_entry(struct cod_entry *entry);
|
||||
|
||||
@@ -457,6 +462,9 @@ extern bool strcomp (const char *lhs, const char *rhs);
|
||||
extern struct cod_entry *copy_cod_entry(struct cod_entry *cod);
|
||||
extern void free_cod_entries(struct cod_entry *list);
|
||||
void debug_cod_entries(struct cod_entry *list);
|
||||
bool check_x_qualifier(struct cod_entry *entry, const char *&error);
|
||||
bool entry_add_prefix(struct cod_entry *entry, const prefixes &p, const char *&error);
|
||||
|
||||
|
||||
#define SECONDS_P_MS (1000LL * 1000LL)
|
||||
long long convert_time_units(long long value, long long base, const char *units);
|
||||
|
@@ -69,6 +69,7 @@ int kernel_load = 1;
|
||||
int kernel_supports_setload = 0; /* kernel supports atomic set loads */
|
||||
int features_supports_network = 0; /* kernel supports network rules */
|
||||
int features_supports_networkv8 = 0; /* kernel supports 4.17 network rules */
|
||||
int features_supports_inet = 0; /* kernel supports inet network rules */
|
||||
int features_supports_unix = 0; /* kernel supports unix socket rules */
|
||||
int kernel_supports_policydb = 0; /* kernel supports new policydb */
|
||||
int features_supports_mount = 0; /* kernel supports mount rules */
|
||||
@@ -82,6 +83,8 @@ int features_supports_userns = 0; /* kernel supports user namespace */
|
||||
int features_supports_posix_mqueue = 0; /* kernel supports mqueue rules */
|
||||
int features_supports_sysv_mqueue = 0; /* kernel supports mqueue rules */
|
||||
int features_supports_io_uring = 0; /* kernel supports io_uring rules */
|
||||
int features_supports_flag_interruptible = 0;
|
||||
int features_supports_flag_signal = 0;
|
||||
int kernel_supports_oob = 0; /* out of band transitions */
|
||||
int conf_verbose = 0;
|
||||
int conf_quiet = 0;
|
||||
|
@@ -276,7 +276,7 @@ static inline void sd_write_aligned_blob(std::ostringstream &buf, void *b, int b
|
||||
buf.write((const char *) b, b_size);
|
||||
}
|
||||
|
||||
static void sd_write_strn(std::ostringstream &buf, char *b, int size, const char *name)
|
||||
static void sd_write_strn(std::ostringstream &buf, const char *b, int size, const char *name)
|
||||
{
|
||||
sd_write_name(buf, name);
|
||||
sd_write8(buf, SD_STRING);
|
||||
@@ -284,7 +284,7 @@ static void sd_write_strn(std::ostringstream &buf, char *b, int size, const char
|
||||
buf.write(b, size);
|
||||
}
|
||||
|
||||
static inline void sd_write_string(std::ostringstream &buf, char *b, const char *name)
|
||||
static inline void sd_write_string(std::ostringstream &buf, const char *b, const char *name)
|
||||
{
|
||||
sd_write_strn(buf, b, strlen(b) + 1, name);
|
||||
}
|
||||
@@ -403,11 +403,7 @@ void sd_serialize_profile(std::ostringstream &buf, Profile *profile,
|
||||
sd_write_struct(buf, "profile");
|
||||
if (flattened) {
|
||||
assert(profile->parent);
|
||||
autofree char *name = (char *) malloc(3 + strlen(profile->name) + strlen(profile->parent->name));
|
||||
if (!name)
|
||||
return;
|
||||
sprintf(name, "%s//%s", profile->parent->name, profile->name);
|
||||
sd_write_string(buf, name, NULL);
|
||||
sd_write_string(buf, profile->get_name(false).c_str(), NULL);
|
||||
} else {
|
||||
sd_write_string(buf, profile->name, NULL);
|
||||
}
|
||||
@@ -426,6 +422,10 @@ void sd_serialize_profile(std::ostringstream &buf, Profile *profile,
|
||||
"disconnected");
|
||||
}
|
||||
|
||||
if (profile->flags.signal && features_supports_flag_signal) {
|
||||
sd_write_name(buf, "kill");
|
||||
sd_write_uint32(buf, profile->flags.signal);
|
||||
}
|
||||
sd_write_struct(buf, "flags");
|
||||
/* used to be flags.debug, but that's no longer supported */
|
||||
sd_write_uint32(buf, profile->flags.flags);
|
||||
|
@@ -255,9 +255,11 @@ MODES {MODE_CHARS}+
|
||||
WS [[:blank:]]
|
||||
NUMBER [[:digit:]]+
|
||||
|
||||
ID_FIRST_CHARS [^ \t\r\n"!,#]
|
||||
ID_FIRST {ID_CHARS}|(,{ID_CHARS}|\\[ ]|\\\t|\\\"|\\!|\\,|\\#)
|
||||
ID_CHARS [^ \t\r\n"!,]
|
||||
ID {ID_CHARS}|(,{ID_CHARS}|\\[ ]|\\\t|\\\"|\\!|\\,)
|
||||
IDS {ID}+
|
||||
IDS {ID_FIRST}{ID}*
|
||||
INC_ID [^ \t\r\n"!,<>]|(,[^ \t\r\n"!,<>]|\\[ ]|\\\t|\\\"|\\!|\\,)
|
||||
INC_IDS {INC_ID}+
|
||||
POST_VAR_ID_CHARS [^ \t\n"!,]{-}[=\+]
|
||||
@@ -378,7 +380,7 @@ GT >
|
||||
yyterminate();
|
||||
}
|
||||
|
||||
<INITIAL,MOUNT_MODE,DBUS_MODE,SIGNAL_MODE,PTRACE_MODE,UNIX_MODE,MQUEUE_MODE>{
|
||||
<INITIAL,MOUNT_MODE,DBUS_MODE,SIGNAL_MODE,PTRACE_MODE,UNIX_MODE,MQUEUE_MODE,NETWORK_MODE>{
|
||||
(peer|xattrs)/{WS}*={WS}*\( {
|
||||
/* we match to the = in the lexer so that we can switch scanner
|
||||
* state. By the time the parser see the = it may be too late
|
||||
@@ -507,6 +509,12 @@ GT >
|
||||
yyerror(_("Variable declarations do not accept trailing commas"));
|
||||
}
|
||||
|
||||
#.*\r?\n { /* normal comment */
|
||||
DUMP_AND_DEBUG("comment(%d): %s\n", current_lineno, yytext);
|
||||
current_lineno++;
|
||||
POP();
|
||||
}
|
||||
|
||||
\\\n { DUMP_PREPROCESS; current_lineno++ ; }
|
||||
|
||||
\r?\n {
|
||||
@@ -517,12 +525,6 @@ GT >
|
||||
}
|
||||
}
|
||||
|
||||
<NETWORK_MODE>{
|
||||
{IDS} {
|
||||
yylval.id = strdup(yytext);
|
||||
RETURN_TOKEN(TOK_ID);
|
||||
}
|
||||
}
|
||||
|
||||
<CHANGE_PROFILE_MODE>{
|
||||
safe { RETURN_TOKEN(TOK_SAFE); }
|
||||
@@ -558,7 +560,7 @@ GT >
|
||||
{LT_EQUAL} { RETURN_TOKEN(TOK_LE); }
|
||||
}
|
||||
|
||||
<UNIX_MODE>{
|
||||
<UNIX_MODE,NETWORK_MODE>{
|
||||
listen { RETURN_TOKEN(TOK_LISTEN); }
|
||||
accept { RETURN_TOKEN(TOK_ACCEPT); }
|
||||
connect { RETURN_TOKEN(TOK_CONNECT); }
|
||||
@@ -567,7 +569,7 @@ GT >
|
||||
shutdown { RETURN_TOKEN(TOK_SHUTDOWN); }
|
||||
}
|
||||
|
||||
<UNIX_MODE,USERNS_MODE,MQUEUE_MODE>{
|
||||
<UNIX_MODE,USERNS_MODE,MQUEUE_MODE,NETWORK_MODE>{
|
||||
create { RETURN_TOKEN(TOK_CREATE); }
|
||||
}
|
||||
|
||||
@@ -576,12 +578,12 @@ GT >
|
||||
delete { RETURN_TOKEN(TOK_DELETE); }
|
||||
}
|
||||
|
||||
<UNIX_MODE,MQUEUE_MODE>{
|
||||
<UNIX_MODE,MQUEUE_MODE,NETWORK_MODE>{
|
||||
getattr { RETURN_TOKEN(TOK_GETATTR); }
|
||||
setattr { RETURN_TOKEN(TOK_SETATTR); }
|
||||
}
|
||||
|
||||
<DBUS_MODE,UNIX_MODE>{
|
||||
<DBUS_MODE,UNIX_MODE,NETWORK_MODE>{
|
||||
bind { RETURN_TOKEN(TOK_BIND); }
|
||||
}
|
||||
|
||||
@@ -589,7 +591,7 @@ GT >
|
||||
eavesdrop { RETURN_TOKEN(TOK_EAVESDROP); }
|
||||
}
|
||||
|
||||
<DBUS_MODE,SIGNAL_MODE,UNIX_MODE>{
|
||||
<DBUS_MODE,SIGNAL_MODE,UNIX_MODE,NETWORK_MODE>{
|
||||
send { RETURN_TOKEN(TOK_SEND); }
|
||||
receive { RETURN_TOKEN(TOK_RECEIVE); }
|
||||
}
|
||||
@@ -600,7 +602,7 @@ GT >
|
||||
tracedby { RETURN_TOKEN(TOK_TRACEDBY); }
|
||||
}
|
||||
|
||||
<DBUS_MODE,SIGNAL_MODE,PTRACE_MODE,UNIX_MODE,MQUEUE_MODE>{
|
||||
<DBUS_MODE,SIGNAL_MODE,PTRACE_MODE,UNIX_MODE,MQUEUE_MODE,NETWORK_MODE>{
|
||||
read { RETURN_TOKEN(TOK_READ); }
|
||||
write { RETURN_TOKEN(TOK_WRITE); }
|
||||
{OPEN_PAREN} {
|
||||
@@ -621,7 +623,7 @@ GT >
|
||||
sqpoll { RETURN_TOKEN(TOK_SQPOLL); }
|
||||
}
|
||||
|
||||
<MOUNT_MODE,DBUS_MODE,SIGNAL_MODE,PTRACE_MODE,UNIX_MODE,MQUEUE_MODE,IOURING_MODE>{
|
||||
<MOUNT_MODE,DBUS_MODE,SIGNAL_MODE,PTRACE_MODE,UNIX_MODE,MQUEUE_MODE,IOURING_MODE,NETWORK_MODE>{
|
||||
({IDS_NOEQ}|{LABEL}|{QUOTED_ID}) {
|
||||
yylval.id = processid(yytext, yyleng);
|
||||
RETURN_TOKEN(TOK_ID);
|
||||
@@ -658,6 +660,10 @@ include/{WS} {
|
||||
yy_push_state(INCLUDE);
|
||||
}
|
||||
|
||||
all/({WS}|[^[:alnum:]_]) {
|
||||
RETURN_TOKEN(TOK_ALL);
|
||||
}
|
||||
|
||||
#.*\r?\n { /* normal comment */
|
||||
DUMP_AND_DEBUG("comment(%d): %s\n", current_lineno, yytext);
|
||||
current_lineno++;
|
||||
|
@@ -919,6 +919,9 @@ void set_supported_features()
|
||||
features_supports_networkv8 = features_intersect(kernel_features,
|
||||
policy_features,
|
||||
"network_v8");
|
||||
features_supports_inet = features_intersect(kernel_features,
|
||||
policy_features,
|
||||
"network_v8/af_inet");
|
||||
features_supports_unix = features_intersect(kernel_features,
|
||||
policy_features,
|
||||
"network/af_unix");
|
||||
@@ -951,6 +954,12 @@ void set_supported_features()
|
||||
features_supports_io_uring = features_intersect(kernel_features,
|
||||
policy_features,
|
||||
"io_uring");
|
||||
features_supports_flag_interruptible = features_intersect(kernel_features,
|
||||
policy_features,
|
||||
"policy/profile/interruptible");
|
||||
features_supports_flag_signal = features_intersect(kernel_features,
|
||||
policy_features,
|
||||
"policy/profile/kill.signal");
|
||||
}
|
||||
|
||||
static bool do_print_cache_dir(aa_features *features, int dirfd, const char *path)
|
||||
|
@@ -129,6 +129,7 @@ static struct keyword_table keyword_table[] = {
|
||||
{"io_uring", TOK_IO_URING},
|
||||
{"override_creds", TOK_OVERRIDE_CREDS},
|
||||
{"sqpoll", TOK_SQPOLL},
|
||||
{"all", TOK_ALL},
|
||||
|
||||
/* terminate */
|
||||
{NULL, 0}
|
||||
@@ -1086,6 +1087,47 @@ void debug_cod_entries(struct cod_entry *list)
|
||||
}
|
||||
}
|
||||
|
||||
bool check_x_qualifier(struct cod_entry *entry, const char *&error)
|
||||
{
|
||||
if (entry->perms & AA_EXEC_BITS) {
|
||||
if ((entry->rule_mode == RULE_DENY) &&
|
||||
(entry->perms & ALL_AA_EXEC_TYPE)) {
|
||||
error = _("Invalid perms, in deny rules 'x' must not be preceded by exec qualifier 'i', 'p', or 'u'");
|
||||
return false;
|
||||
} else if ((entry->rule_mode != RULE_DENY) &&
|
||||
!(entry->perms & ALL_AA_EXEC_TYPE)) {
|
||||
error = _("Invalid perms, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// cod_entry version of ->add_prefix here just as file rules aren't converted yet
|
||||
bool entry_add_prefix(struct cod_entry *entry, const prefixes &p, const char *&error)
|
||||
{
|
||||
/* modifiers aren't correctly stored for cod_entries yet so
|
||||
* we can't conflict on them easily. Leave that until conversion
|
||||
* to rule_t
|
||||
*/
|
||||
/* apply rule mode */
|
||||
entry->rule_mode = p.rule_mode;
|
||||
|
||||
/* apply owner/other */
|
||||
if (p.owner == 1)
|
||||
entry->perms &= (AA_USER_PERMS | AA_SHARED_PERMS);
|
||||
else if (p.owner == 2)
|
||||
entry->perms &= (AA_OTHER_PERMS | AA_SHARED_PERMS);
|
||||
|
||||
/* implied audit modifier */
|
||||
if (p.audit == AUDIT_FORCE && (entry->rule_mode != RULE_DENY))
|
||||
entry->audit = AUDIT_FORCE;
|
||||
else if (p.audit != AUDIT_FORCE && (entry->rule_mode == RULE_DENY))
|
||||
entry->audit = AUDIT_FORCE;
|
||||
|
||||
return check_x_qualifier(entry, error);
|
||||
}
|
||||
|
||||
// these need to move to stl
|
||||
int ordered_cmp_value_list(value_list *lhs, value_list *rhs)
|
||||
{
|
||||
|
@@ -33,6 +33,7 @@
|
||||
#include "parser.h"
|
||||
#include "profile.h"
|
||||
#include "parser_yacc.h"
|
||||
#include "network.h"
|
||||
|
||||
/* #define DEBUG */
|
||||
#ifdef DEBUG
|
||||
|
@@ -845,6 +845,116 @@ int clear_and_convert_entry(std::string& buffer, char *entry)
|
||||
return convert_entry(buffer, entry);
|
||||
}
|
||||
|
||||
static std::vector<std::pair<bignum, bignum>> regex_range_generator(bignum start, bignum end)
|
||||
{
|
||||
std::vector<std::pair<bignum, bignum>> forward;
|
||||
std::vector<std::pair<bignum, bignum>> reverse;
|
||||
bignum next, prev;
|
||||
|
||||
while (start <= end) {
|
||||
next = bignum::upper_bound_regex(start);
|
||||
if (next > end)
|
||||
break;
|
||||
|
||||
forward.emplace_back(start, next);
|
||||
start = next + 1;
|
||||
}
|
||||
|
||||
while (!end.negative && end >= start) {
|
||||
prev = bignum::lower_bound_regex(end);
|
||||
if (prev < start || prev.negative)
|
||||
break;
|
||||
|
||||
reverse.emplace_back(prev, end);
|
||||
end = prev - 1;
|
||||
}
|
||||
|
||||
if (!end.negative && start <= end) {
|
||||
forward.emplace_back(start, end);
|
||||
}
|
||||
|
||||
forward.insert(forward.end(), reverse.rbegin(), reverse.rend());
|
||||
return forward;
|
||||
}
|
||||
|
||||
static std::string generate_regex_range(bignum start, bignum end)
|
||||
{
|
||||
std::ostringstream result;
|
||||
std::vector<std::pair<bignum, bignum>> regex_range;
|
||||
int j;
|
||||
regex_range = regex_range_generator(std::move(start), std::move(end));
|
||||
for (auto &i: regex_range) {
|
||||
bignum sstart = i.first;
|
||||
bignum send = i.second;
|
||||
if (sstart.base == 16) {
|
||||
for (j = (size_t) sstart.size(); j < 32; j++)
|
||||
result << '0';
|
||||
}
|
||||
for (j = sstart.size() - 1; j >= 0; j--) {
|
||||
result << std::nouppercase;
|
||||
if (sstart[j] == send[j]) {
|
||||
if (sstart[j] >= 10)
|
||||
result << '[';
|
||||
result << std::hex << sstart[j];
|
||||
if (sstart[j] >= 10)
|
||||
result << std::uppercase << std::hex << sstart[j] << ']';
|
||||
} else {
|
||||
if (sstart[j] < 10 && send[j] >= 10) {
|
||||
result << '[';
|
||||
result << std::hex << sstart[j];
|
||||
if (sstart[j] < 9) {
|
||||
result << '-';
|
||||
result << '9';
|
||||
}
|
||||
if (send[j] > 10) {
|
||||
result << 'a';
|
||||
result << '-';
|
||||
}
|
||||
result << std::hex << send[j];
|
||||
if (send[j] > 10) {
|
||||
result << 'A';
|
||||
result << '-';
|
||||
}
|
||||
result << std::uppercase << std::hex << send[j];
|
||||
result << ']';
|
||||
} else {
|
||||
result << '[';
|
||||
result << std::hex << sstart[j];
|
||||
result << '-';
|
||||
result << std::hex << send[j];
|
||||
if (sstart[j] >= 10) {
|
||||
result << std::uppercase << std::hex << sstart[j];
|
||||
result << '-';
|
||||
result << std::uppercase << std::hex << send[j];
|
||||
}
|
||||
result << ']';
|
||||
}
|
||||
}
|
||||
}
|
||||
if (&i != ®ex_range.back())
|
||||
result << ",";
|
||||
}
|
||||
return result.str();
|
||||
}
|
||||
|
||||
int convert_range(std::string& buffer, bignum start, bignum end)
|
||||
{
|
||||
pattern_t ptype;
|
||||
int pos;
|
||||
|
||||
std::string regex_range = generate_regex_range(std::move(start), std::move(end));
|
||||
|
||||
if (!regex_range.empty()) {
|
||||
ptype = convert_aaregex_to_pcre(regex_range.c_str(), 0, glob_default, buffer, &pos);
|
||||
if (ptype == ePatternInvalid)
|
||||
return FALSE;
|
||||
} else {
|
||||
buffer.append(default_match_pattern);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int post_process_policydb_ents(Profile *prof)
|
||||
{
|
||||
for (RuleList::iterator i = prof->rule_ents.begin(); i != prof->rule_ents.end(); i++) {
|
||||
@@ -857,80 +967,6 @@ int post_process_policydb_ents(Profile *prof)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static bool gen_net_rule(Profile *prof, u16 family, unsigned int type_mask,
|
||||
bool audit, bool deny) {
|
||||
std::ostringstream buffer;
|
||||
std::string buf;
|
||||
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << AA_CLASS_NETV8;
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << ((family & 0xff00) >> 8);
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << (family & 0xff);
|
||||
if (type_mask > 0xffff) {
|
||||
buffer << "..";
|
||||
} else {
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << ((type_mask & 0xff00) >> 8);
|
||||
buffer << "\\x" << std::setfill('0') << std::setw(2) << std::hex << (type_mask & 0xff);
|
||||
}
|
||||
buf = buffer.str();
|
||||
if (!prof->policy.rules->add_rule(buf.c_str(), deny, map_perms(AA_VALID_NET_PERMS),
|
||||
audit ? map_perms(AA_VALID_NET_PERMS) : 0,
|
||||
parseopts))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool gen_af_rules(Profile *prof, u16 family, unsigned int type_mask,
|
||||
unsigned int audit_mask, bool deny)
|
||||
{
|
||||
if (type_mask > 0xffff && audit_mask > 0xffff) {
|
||||
/* instead of generating multiple rules wild card type */
|
||||
return gen_net_rule(prof, family, type_mask, audit_mask, deny);
|
||||
} else {
|
||||
int t;
|
||||
/* generate rules for types that are set */
|
||||
for (t = 0; t < 16; t++) {
|
||||
if (type_mask & (1 << t)) {
|
||||
if (!gen_net_rule(prof, family, t,
|
||||
audit_mask & (1 << t),
|
||||
deny))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool post_process_policydb_net(Profile *prof)
|
||||
{
|
||||
u16 af;
|
||||
|
||||
/* no network rules defined so we don't have generate them */
|
||||
if (!prof->net.allow)
|
||||
return true;
|
||||
|
||||
/* generate rules if the af has something set */
|
||||
for (af = AF_UNSPEC; af < get_af_max(); af++) {
|
||||
if (prof->net.allow[af] ||
|
||||
prof->net.deny[af] ||
|
||||
prof->net.audit[af] ||
|
||||
prof->net.quiet[af]) {
|
||||
if (!gen_af_rules(prof, af, prof->net.allow[af],
|
||||
prof->net.audit[af],
|
||||
false))
|
||||
return false;
|
||||
if (!gen_af_rules(prof, af, prof->net.deny[af],
|
||||
prof->net.quiet[af],
|
||||
true))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#define MAKE_STR(X) #X
|
||||
#define CLASS_STR(X) "\\d" MAKE_STR(X)
|
||||
#define MAKE_SUB_STR(X) "\\000" MAKE_STR(X)
|
||||
@@ -959,49 +995,51 @@ int process_profile_policydb(Profile *prof)
|
||||
|
||||
if (!post_process_policydb_ents(prof))
|
||||
goto out;
|
||||
/* TODO: move to network class */
|
||||
if (features_supports_networkv8 && !post_process_policydb_net(prof))
|
||||
goto out;
|
||||
|
||||
/* insert entries to show indicate what compiler/policy expects
|
||||
* to be supported
|
||||
*/
|
||||
|
||||
/* note: this activates fs based unix domain sockets mediation on connect */
|
||||
if (kernel_abi_version > 5 &&
|
||||
!prof->policy.rules->add_rule(mediates_file, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_mount &&
|
||||
!prof->policy.rules->add_rule(mediates_mount, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_dbus &&
|
||||
!prof->policy.rules->add_rule(mediates_dbus, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_signal &&
|
||||
!prof->policy.rules->add_rule(mediates_signal, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_ptrace &&
|
||||
!prof->policy.rules->add_rule(mediates_ptrace, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_networkv8 &&
|
||||
!prof->policy.rules->add_rule(mediates_netv8, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_unix &&
|
||||
(!prof->policy.rules->add_rule(mediates_extended_net, 0, AA_MAY_READ, 0, parseopts) ||
|
||||
!prof->policy.rules->add_rule(mediates_net_unix, 0, AA_MAY_READ, 0, parseopts)))
|
||||
goto out;
|
||||
if (features_supports_userns &&
|
||||
!prof->policy.rules->add_rule(mediates_ns, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_posix_mqueue &&
|
||||
!prof->policy.rules->add_rule(mediates_posix_mqueue, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_sysv_mqueue &&
|
||||
!prof->policy.rules->add_rule(mediates_sysv_mqueue, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_io_uring &&
|
||||
!prof->policy.rules->add_rule(mediates_io_uring, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
|
||||
/* don't add mediated classes to unconfined profiles */
|
||||
if (prof->flags.mode != MODE_UNCONFINED &&
|
||||
prof->flags.mode != MODE_DEFAULT_ALLOW) {
|
||||
/* note: this activates fs based unix domain sockets mediation on connect */
|
||||
if (kernel_abi_version > 5 &&
|
||||
!prof->policy.rules->add_rule(mediates_file, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_mount &&
|
||||
!prof->policy.rules->add_rule(mediates_mount, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_dbus &&
|
||||
!prof->policy.rules->add_rule(mediates_dbus, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_signal &&
|
||||
!prof->policy.rules->add_rule(mediates_signal, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_ptrace &&
|
||||
!prof->policy.rules->add_rule(mediates_ptrace, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_networkv8 &&
|
||||
!prof->policy.rules->add_rule(mediates_netv8, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_unix &&
|
||||
(!prof->policy.rules->add_rule(mediates_extended_net, 0, AA_MAY_READ, 0, parseopts) ||
|
||||
!prof->policy.rules->add_rule(mediates_net_unix, 0, AA_MAY_READ, 0, parseopts)))
|
||||
goto out;
|
||||
if (features_supports_posix_mqueue &&
|
||||
!prof->policy.rules->add_rule(mediates_posix_mqueue, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_sysv_mqueue &&
|
||||
!prof->policy.rules->add_rule(mediates_sysv_mqueue, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
if (features_supports_io_uring &&
|
||||
!prof->policy.rules->add_rule(mediates_io_uring, 0, AA_MAY_READ, 0, parseopts))
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (prof->policy.rules->rule_count > 0) {
|
||||
int xmatch_len = 0;
|
||||
|
@@ -70,8 +70,6 @@ mnt_rule *do_mnt_rule(struct cond_entry *src_conds, char *src,
|
||||
mnt_rule *do_pivot_rule(struct cond_entry *old, char *root,
|
||||
char *transition);
|
||||
static void abi_features(char *filename, bool search);
|
||||
bool add_prefix(struct cod_entry *entry, const prefixes &p, const char *&error);
|
||||
bool check_x_qualifier(struct cod_entry *entry, const char *&errror);
|
||||
|
||||
%}
|
||||
|
||||
@@ -149,6 +147,7 @@ bool check_x_qualifier(struct cod_entry *entry, const char *&errror);
|
||||
%token TOK_IO_URING
|
||||
%token TOK_OVERRIDE_CREDS
|
||||
%token TOK_SQPOLL
|
||||
%token TOK_ALL
|
||||
|
||||
/* rlimits */
|
||||
%token TOK_RLIMIT
|
||||
@@ -187,13 +186,15 @@ bool check_x_qualifier(struct cod_entry *entry, const char *&errror);
|
||||
#include "userns.h"
|
||||
#include "mqueue.h"
|
||||
#include "io_uring.h"
|
||||
#include "network.h"
|
||||
#include "all_rule.h"
|
||||
}
|
||||
|
||||
%union {
|
||||
char *id;
|
||||
char *flag_id;
|
||||
char *mode;
|
||||
struct aa_network_entry *network_entry;
|
||||
network_rule *network_entry;
|
||||
Profile *prof;
|
||||
struct cod_net_entry *net_entry;
|
||||
struct cod_entry *user_entry;
|
||||
@@ -206,6 +207,7 @@ bool check_x_qualifier(struct cod_entry *entry, const char *&errror);
|
||||
userns_rule *userns_entry;
|
||||
mqueue_rule *mqueue_entry;
|
||||
io_uring_rule *io_uring_entry;
|
||||
all_rule *all_entry;
|
||||
prefix_rule_t *prefix_entry;
|
||||
|
||||
flagvals flags;
|
||||
@@ -302,6 +304,7 @@ bool check_x_qualifier(struct cod_entry *entry, const char *&errror);
|
||||
%type <fperms> io_uring_perms
|
||||
%type <fperms> opt_io_uring_perm
|
||||
%type <io_uring_entry> io_uring_rule
|
||||
%type <all_entry> all_rule
|
||||
%%
|
||||
|
||||
|
||||
@@ -575,8 +578,9 @@ valuelist: valuelist TOK_VALUE
|
||||
}
|
||||
|
||||
flags: { /* nothing */
|
||||
flagvals fv = { 0, MODE_UNSPECIFIED, 0, 0, NULL };
|
||||
flagvals fv;
|
||||
|
||||
fv.init();
|
||||
$$ = fv;
|
||||
};
|
||||
|
||||
@@ -596,27 +600,7 @@ flags: opt_flags TOK_OPENPAREN flagvals TOK_CLOSEPAREN
|
||||
|
||||
flagvals: flagvals flagval
|
||||
{
|
||||
if (merge_profile_mode($1.mode, $2.mode) == MODE_CONFLICT)
|
||||
yyerror(_("Profile flag '%s' conflicts with '%s'"),
|
||||
profile_mode_table[$1.mode],
|
||||
profile_mode_table[$2.mode]);
|
||||
$1.mode = merge_profile_mode($1.mode, $2.mode);
|
||||
$1.audit = $1.audit || $2.audit;
|
||||
$1.path = $1.path | $2.path;
|
||||
if (($1.path & (PATH_CHROOT_REL | PATH_NS_REL)) ==
|
||||
(PATH_CHROOT_REL | PATH_NS_REL))
|
||||
yyerror(_("Profile flag chroot_relative conflicts with namespace_relative"));
|
||||
|
||||
if (($1.path & (PATH_MEDIATE_DELETED | PATH_DELEGATE_DELETED)) ==
|
||||
(PATH_MEDIATE_DELETED | PATH_DELEGATE_DELETED))
|
||||
yyerror(_("Profile flag mediate_deleted conflicts with delegate_deleted"));
|
||||
if (($1.path & (PATH_ATTACH | PATH_NO_ATTACH)) ==
|
||||
(PATH_ATTACH | PATH_NO_ATTACH))
|
||||
yyerror(_("Profile flag attach_disconnected conflicts with no_attach_disconnected"));
|
||||
if (($1.path & (PATH_CHROOT_NSATTACH | PATH_CHROOT_NO_ATTACH)) ==
|
||||
(PATH_CHROOT_NSATTACH | PATH_CHROOT_NO_ATTACH))
|
||||
yyerror(_("Profile flag chroot_attach conflicts with chroot_no_attach"));
|
||||
|
||||
$1.merge($2);
|
||||
$$ = $1;
|
||||
};
|
||||
|
||||
@@ -627,39 +611,9 @@ flagvals: flagval
|
||||
|
||||
flagval: TOK_VALUE
|
||||
{
|
||||
flagvals fv = { 0, MODE_UNSPECIFIED, 0, 0, NULL };
|
||||
enum profile_mode mode;
|
||||
flagvals fv;
|
||||
|
||||
if (strcmp($1, "debug") == 0) {
|
||||
/* DEBUG2 is left for internal compiler use atm */
|
||||
fv.flags |= FLAG_DEBUG1;
|
||||
} else if ((mode = str_to_mode($1))) {
|
||||
fv.mode = mode;
|
||||
} else if (strcmp($1, "audit") == 0) {
|
||||
fv.audit = 1;
|
||||
} else if (strcmp($1, "chroot_relative") == 0) {
|
||||
fv.path |= PATH_CHROOT_REL;
|
||||
} else if (strcmp($1, "namespace_relative") == 0) {
|
||||
fv.path |= PATH_NS_REL;
|
||||
} else if (strcmp($1, "mediate_deleted") == 0) {
|
||||
fv.path |= PATH_MEDIATE_DELETED;
|
||||
} else if (strcmp($1, "delegate_deleted") == 0) {
|
||||
fv.path |= PATH_DELEGATE_DELETED;
|
||||
} else if (strcmp($1, "attach_disconnected") == 0) {
|
||||
fv.path |= PATH_ATTACH;
|
||||
} else if (strcmp($1, "no_attach_disconnected") == 0) {
|
||||
fv.path |= PATH_NO_ATTACH;
|
||||
} else if (strcmp($1, "chroot_attach") == 0) {
|
||||
fv.path |= PATH_CHROOT_NSATTACH;
|
||||
} else if (strcmp($1, "chroot_no_attach") == 0) {
|
||||
fv.path |= PATH_CHROOT_NO_ATTACH;
|
||||
} else if (strncmp($1, "attach_disconnected.path=", 25) == 0) {
|
||||
/* TODO: make this a proper parse */
|
||||
fv.path |= PATH_ATTACH;
|
||||
fv.disconnected_path = strdup($1 + 25);
|
||||
} else {
|
||||
yyerror(_("Invalid profile flag: %s."), $1);
|
||||
}
|
||||
fv.init($1);
|
||||
free($1);
|
||||
$$ = fv;
|
||||
};
|
||||
@@ -704,7 +658,7 @@ rules: rules opt_prefix rule
|
||||
PDEBUG("rules rule: (%s)\n", $3->name);
|
||||
if (!$3)
|
||||
yyerror(_("Assert: `rule' returned NULL."));
|
||||
if (!add_prefix($3, $2, error)) {
|
||||
if (!entry_add_prefix($3, $2, error)) {
|
||||
yyerror(_("%s"), error);
|
||||
}
|
||||
add_entry_to_policy($1, $3);
|
||||
@@ -725,7 +679,7 @@ rules: rules opt_prefix block
|
||||
list_for_each_safe($3->entries, entry, tmp) {
|
||||
const char *error;
|
||||
entry->next = NULL;
|
||||
if (!add_prefix(entry, $2, error)) {
|
||||
if (!entry_add_prefix(entry, $2, error)) {
|
||||
yyerror(_("%s"), error);
|
||||
}
|
||||
/* transfer rule for now, TODO keep block and just
|
||||
@@ -742,51 +696,23 @@ rules: rules opt_prefix block
|
||||
|
||||
rules: rules opt_prefix network_rule
|
||||
{
|
||||
struct aa_network_entry *entry, *tmp;
|
||||
const char *error;
|
||||
if (!$3->add_prefix($2, error))
|
||||
yyerror(error);
|
||||
/* class members need to be updated after prefix is added */
|
||||
$3->update_compat_net();
|
||||
|
||||
PDEBUG("Matched: network rule\n");
|
||||
if ($2.owner)
|
||||
yyerror(_("owner prefix not allowed"));
|
||||
if (!$3)
|
||||
yyerror(_("Assert: `network_rule' return invalid protocol."));
|
||||
if (!$1->alloc_net_table())
|
||||
yyerror(_("Memory allocation error."));
|
||||
list_for_each_safe($3, entry, tmp) {
|
||||
|
||||
/* map to extended mediation, let rule backend do
|
||||
* downgrade if needed
|
||||
*/
|
||||
if (entry->family == AF_UNIX) {
|
||||
unix_rule *rule = new unix_rule(entry->type, $2.audit, $2.rule_mode);
|
||||
auto nm_af_unix = $3->network_map.find(AF_UNIX);
|
||||
if (nm_af_unix != $3->network_map.end()) {
|
||||
for (auto& entry : nm_af_unix->second) {
|
||||
unix_rule *rule = new unix_rule(entry.type,
|
||||
$2.audit, $2.rule_mode);
|
||||
if (!rule)
|
||||
yyerror(_("Memory allocation error."));
|
||||
$1->rule_ents.push_back(rule);
|
||||
}
|
||||
if (entry->type > SOCK_PACKET) {
|
||||
/* setting mask instead of a bit */
|
||||
if ($2.rule_mode == RULE_DENY) {
|
||||
$1->net.deny[entry->family] |= entry->type;
|
||||
if ($2.audit != AUDIT_FORCE)
|
||||
$1->net.quiet[entry->family] |= entry->type;
|
||||
} else {
|
||||
$1->net.allow[entry->family] |= entry->type;
|
||||
if ($2.audit == AUDIT_FORCE)
|
||||
$1->net.audit[entry->family] |= entry->type;
|
||||
}
|
||||
} else {
|
||||
if ($2.rule_mode == RULE_DENY) {
|
||||
$1->net.deny[entry->family] |= 1 << entry->type;
|
||||
if ($2.audit != AUDIT_FORCE)
|
||||
$1->net.quiet[entry->family] |= 1 << entry->type;
|
||||
} else {
|
||||
$1->net.allow[entry->family] |= 1 << entry->type;
|
||||
if ($2.audit == AUDIT_FORCE)
|
||||
$1->net.audit[entry->family] |= 1 << entry->type;
|
||||
}
|
||||
}
|
||||
free(entry);
|
||||
}
|
||||
|
||||
$1->rule_ents.push_back($3);
|
||||
$$ = $1;
|
||||
}
|
||||
|
||||
@@ -798,6 +724,7 @@ prefix_rule : mnt_rule { $$ = $1; }
|
||||
| userns_rule { $$ = $1; }
|
||||
| mqueue_rule { $$ = $1; }
|
||||
| io_uring_rule { $$ = $1; }
|
||||
| all_rule { $$ = $1; }
|
||||
|
||||
rules: rules opt_prefix prefix_rule
|
||||
{
|
||||
@@ -1156,45 +1083,48 @@ link_rule: TOK_LINK opt_subset_flag id_or_var TOK_ARROW id_or_var TOK_END_OF_RUL
|
||||
$$ = entry;
|
||||
};
|
||||
|
||||
network_rule: TOK_NETWORK TOK_END_OF_RULE
|
||||
network_rule: TOK_NETWORK opt_net_perm opt_conds opt_cond_list TOK_END_OF_RULE
|
||||
{
|
||||
size_t family;
|
||||
struct aa_network_entry *new_entry, *entry = NULL;
|
||||
for (family = AF_UNSPEC; family < get_af_max(); family++) {
|
||||
new_entry = new_network_ent(family, 0xffffffff,
|
||||
0xffffffff);
|
||||
if (!new_entry)
|
||||
yyerror(_("Memory allocation error."));
|
||||
new_entry->next = entry;
|
||||
entry = new_entry;
|
||||
network_rule *entry;
|
||||
|
||||
if ($4.name) {
|
||||
if (strcmp($4.name, "peer") != 0)
|
||||
yyerror(_("network rule: invalid conditional group %s=()"), $4.name);
|
||||
free($4.name);
|
||||
}
|
||||
entry = new network_rule($2, $3, $4.list);
|
||||
$$ = entry;
|
||||
}
|
||||
|
||||
network_rule: TOK_NETWORK TOK_ID TOK_END_OF_RULE
|
||||
network_rule: TOK_NETWORK opt_net_perm TOK_ID opt_conds opt_cond_list TOK_END_OF_RULE
|
||||
{
|
||||
struct aa_network_entry *entry;
|
||||
entry = network_entry($2, NULL, NULL);
|
||||
if (!entry)
|
||||
/* test for short circuiting of family */
|
||||
entry = network_entry(NULL, $2, NULL);
|
||||
if (!entry)
|
||||
yyerror(_("Invalid network entry."));
|
||||
free($2);
|
||||
$$ = entry;
|
||||
}
|
||||
network_rule *entry;
|
||||
|
||||
network_rule: TOK_NETWORK TOK_ID TOK_ID TOK_END_OF_RULE
|
||||
{
|
||||
struct aa_network_entry *entry;
|
||||
entry = network_entry($2, $3, NULL);
|
||||
if (!entry)
|
||||
yyerror(_("Invalid network entry."));
|
||||
free($2);
|
||||
if ($5.name) {
|
||||
if (strcmp($5.name, "peer") != 0)
|
||||
yyerror(_("network rule: invalid conditional group %s=()"), $5.name);
|
||||
free($5.name);
|
||||
}
|
||||
entry = new network_rule($2, $3, NULL, NULL, $4, $5.list);
|
||||
free($3);
|
||||
$$ = entry;
|
||||
}
|
||||
|
||||
network_rule: TOK_NETWORK opt_net_perm TOK_ID TOK_ID opt_conds opt_cond_list TOK_END_OF_RULE
|
||||
{
|
||||
network_rule *entry;
|
||||
|
||||
if ($6.name) {
|
||||
if (strcmp($6.name, "peer") != 0)
|
||||
yyerror(_("network rule: invalid conditional group %s=()"), $6.name);
|
||||
free($6.name);
|
||||
}
|
||||
entry = new network_rule($2, $3, $4, NULL, $5, $6.list);
|
||||
free($3);
|
||||
free($4);
|
||||
$$ = entry;
|
||||
}
|
||||
|
||||
cond: TOK_CONDID
|
||||
{
|
||||
struct cond_entry *ent;
|
||||
@@ -1605,6 +1535,14 @@ io_uring_rule: TOK_IO_URING opt_io_uring_perm opt_conds opt_cond_list TOK_END_OF
|
||||
$$ = ent;
|
||||
}
|
||||
|
||||
all_rule: TOK_ALL TOK_END_OF_RULE
|
||||
{
|
||||
all_rule *ent = new all_rule();
|
||||
if (!ent)
|
||||
yyerror(_("Memory allocation error."));
|
||||
$$ = ent;
|
||||
}
|
||||
|
||||
hat_start: TOK_CARET {}
|
||||
| TOK_HAT {}
|
||||
|
||||
@@ -1867,43 +1805,3 @@ static void abi_features(char *filename, bool search)
|
||||
|
||||
};
|
||||
|
||||
bool check_x_qualifier(struct cod_entry *entry, const char *&error)
|
||||
{
|
||||
if (entry->perms & AA_EXEC_BITS) {
|
||||
if ((entry->rule_mode == RULE_DENY) &&
|
||||
(entry->perms & ALL_AA_EXEC_TYPE)) {
|
||||
error = _("Invalid perms, in deny rules 'x' must not be preceded by exec qualifier 'i', 'p', or 'u'");
|
||||
return false;
|
||||
} else if ((entry->rule_mode != RULE_DENY) &&
|
||||
!(entry->perms & ALL_AA_EXEC_TYPE)) {
|
||||
error = _("Invalid perms, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// cod_entry version of ->add_prefix here just as file rules aren't converted yet
|
||||
bool add_prefix(struct cod_entry *entry, const prefixes &p, const char *&error)
|
||||
{
|
||||
/* modifiers aren't correctly stored for cod_entries yet so
|
||||
* we can't conflict on them easily. Leave that until conversion
|
||||
* to rule_t
|
||||
*/
|
||||
/* apply rule mode */
|
||||
entry->rule_mode = p.rule_mode;
|
||||
|
||||
/* apply owner/other */
|
||||
if (p.owner == 1)
|
||||
entry->perms &= (AA_USER_PERMS | AA_SHARED_PERMS);
|
||||
else if (p.owner == 2)
|
||||
entry->perms &= (AA_OTHER_PERMS | AA_SHARED_PERMS);
|
||||
|
||||
/* implied audit modifier */
|
||||
if (p.audit == AUDIT_FORCE && (entry->rule_mode != RULE_DENY))
|
||||
entry->audit = AUDIT_FORCE;
|
||||
else if (p.audit != AUDIT_FORCE && (entry->rule_mode == RULE_DENY))
|
||||
entry->audit = AUDIT_FORCE;
|
||||
|
||||
return check_x_qualifier(entry, error);
|
||||
}
|
||||
|
223
parser/po/af.po
223
parser/po/af.po
@@ -8,33 +8,33 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-15 01:27+0000\n"
|
||||
"Last-Translator: Novell Language <Unknown>\n"
|
||||
"PO-Revision-Date: 2020-03-12 02:48+0000\n"
|
||||
"Last-Translator: bernard stafford <Unknown>\n"
|
||||
"Language-Team: Novell Language <language@novell.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2020-03-13 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 3a6db24bbe7280ec09bae73384238390fcc98ad3)\n"
|
||||
"Language: af\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr ""
|
||||
msgstr "Fout: Buite geheue.\n"
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr ""
|
||||
msgstr "Fout: basedir %s is nie 'n gids, huppel tans.\n"
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr ""
|
||||
msgstr "Fout: Kon gids nie by te voeg %s om soek pad.\n"
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr ""
|
||||
msgstr "Fout: Kon nie geheue toeken.\n"
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
msgid "Bad write position\n"
|
||||
@@ -50,7 +50,7 @@ msgstr "Geheue is opgebruik\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
msgstr "Kon nie profiel kopieer: Slegte geheue-adres\n"
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
@@ -62,7 +62,7 @@ msgstr "Profiel stem nie ooreen met handtekening nie\n"
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr ""
|
||||
msgstr "Profiel weergawe nie gesteunde deur Apparmora module\n"
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
msgid "Profile already exists\n"
|
||||
@@ -74,12 +74,12 @@ msgstr "Profiel bestaan nie\n"
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
msgstr "Toestemming ontkened; poging tot laai 'n profiel terwyl confined?\n"
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
msgstr "Onbekende fout (%d): %s\n"
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
@@ -109,7 +109,7 @@ msgstr "%s: Kan nie na stdout toe skryf nie\n"
|
||||
#: ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Nie in staat is om te skryf aan uitset lêer\n"
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
@@ -145,11 +145,11 @@ msgstr "PANIEK slegs inkrementbuffer %p pos %p uitbr %p grootte %d res %p\n"
|
||||
#: ../parser_interface.c:446
|
||||
#, c-format
|
||||
msgid "profile %s network rules not enforced\n"
|
||||
msgstr ""
|
||||
msgstr "profiel %s netwerk reëls nie afgedwing\n"
|
||||
|
||||
#: ../parser_interface.c:666
|
||||
msgid "Unknown pattern type\n"
|
||||
msgstr ""
|
||||
msgstr "Onbekend patroon tipe\n"
|
||||
|
||||
#: ../parser_interface.c:750 ../parser_interface.c:902
|
||||
#: ../parser_interface.c:743 ../parser_interface.c:894
|
||||
@@ -162,13 +162,13 @@ msgstr "Kan %s - %s nie open nie\n"
|
||||
#: ../parser_interface.c:543
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove ^%s\n"
|
||||
msgstr ""
|
||||
msgstr "Geheue Allokasie Fout: Nie in staat om verwyder ^%s\n"
|
||||
|
||||
#: ../parser_interface.c:789 ../parser_interface.c:781
|
||||
#: ../parser_interface.c:556
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove %s:%s."
|
||||
msgstr ""
|
||||
msgstr "Geheue Allokasie Fout: Nie in staat om verwyder %s:%s."
|
||||
|
||||
#: ../parser_interface.c:810 ../parser_interface.c:802
|
||||
msgid "unable to create work area\n"
|
||||
@@ -190,32 +190,32 @@ msgstr "%s: Kan nie volledige profielinskrywing skryf nie\n"
|
||||
#: ../parser_interface.c:593
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Nie in staat skryf die entire profiel inskrywing om kas\n"
|
||||
|
||||
#: parser_lex.l:100 parser_lex.l:163 parser_lex.l:169
|
||||
#, c-format
|
||||
msgid "Could not open '%s'"
|
||||
msgstr ""
|
||||
msgstr "Kon nie oopmaak '%s'"
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#, c-format
|
||||
msgid "fstat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "fstat misluk vir '%s'"
|
||||
|
||||
#: parser_lex.l:121
|
||||
#, c-format
|
||||
msgid "opendir failed '%s'"
|
||||
msgstr ""
|
||||
msgstr "oopdir misluk '%s'"
|
||||
|
||||
#: parser_lex.l:152
|
||||
#, c-format
|
||||
msgid "stat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "stat misluk vir '%s'"
|
||||
|
||||
#: parser_lex.l:155 parser_lex.l:133 parser_lex.l:139
|
||||
#, c-format
|
||||
msgid "Could not open '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "Kon nie oopmaak '%s' in '%s'"
|
||||
|
||||
#: parser_lex.l:284 parser_lex.l:322 parser_lex.l:362 parser_lex.l:399
|
||||
#: parser_lex.l:469 parser_lex.l:655 parser_lex.l:586 parser_lex.l:638
|
||||
@@ -225,17 +225,17 @@ msgstr "Onverwagte karakter gevind: '%s'"
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
msgstr "Veranderlike aangiftes aanvaar nie trailing kommas"
|
||||
|
||||
#: parser_lex.l:420
|
||||
#, c-format
|
||||
msgid "(network_mode) Found unexpected character: '%s'"
|
||||
msgstr ""
|
||||
msgstr "(netwerk_modus) Gevind onverwagte karakter: '%s'"
|
||||
|
||||
#: ../parser_main.c:333 ../parser_common.c:61 ../parser_common.c:106
|
||||
#, c-format
|
||||
msgid "Warning from %s (%s%sline %d): %s"
|
||||
msgstr ""
|
||||
msgstr "Waarskuwing vanaf %s (%s%sline %d): %s"
|
||||
|
||||
#: ../parser_main.c:531
|
||||
#, c-format
|
||||
@@ -248,6 +248,8 @@ msgid ""
|
||||
"Warning: unable to find a suitable fs in %s, is it mounted?\n"
|
||||
"Use --subdomainfs to override.\n"
|
||||
msgstr ""
|
||||
"Waarskuwing: nie in staat om vind 'n geskikte fs in %s, is dit gemonteer?\n"
|
||||
"Gebruik --subdomainfs om override.\n"
|
||||
|
||||
#: ../parser_main.c:597 ../parser_main.c:635 ../parser_main.c:498
|
||||
#, c-format
|
||||
@@ -255,6 +257,8 @@ msgid ""
|
||||
"%s: Sorry. You need root privileges to run this program.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"%s: Jammer. Wat jy nodig het root voorregte om hierdie program uit te voer.\n"
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:604 ../parser_main.c:642 ../parser_main.c:505
|
||||
#, c-format
|
||||
@@ -263,12 +267,16 @@ msgid ""
|
||||
"Anybody who can run this program can update your AppArmor profiles.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"%s: Waarskuwing! Jy het stel hierdie program setuid root.\n"
|
||||
"Enigiemand wat hierdie programe kan jou AppArmor profiele by te werk kan "
|
||||
"hardloop.\n"
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:704 ../parser_main.c:813 ../parser_main.c:836
|
||||
#: ../parser_main.c:946 ../parser_main.c:860
|
||||
#, c-format
|
||||
msgid "Error: Could not read profile %s: %s.\n"
|
||||
msgstr ""
|
||||
msgstr "Fout: Kan nie profiel lees %s: %s.\n"
|
||||
|
||||
#: ../parser_main.c:718 ../parser_misc.c:270 parser_yacc.y:227
|
||||
#: parser_yacc.y:374 parser_yacc.y:386 parser_yacc.y:484 parser_yacc.y:586
|
||||
@@ -294,12 +302,12 @@ msgstr "Geheuetoekenningsfout."
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "Kas laai suksesvol vir \"%s\".\n"
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "Kas relaai suksesvol vir \"%s\".\n"
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#, c-format
|
||||
@@ -311,11 +319,14 @@ msgid ""
|
||||
"Uppercase qualifiers \"RWLIMX\" are deprecated, please convert to lowercase\n"
|
||||
"See the apparmor.d(5) manpage for details.\n"
|
||||
msgstr ""
|
||||
"Hoofletters kwalifiseerders \"RWLIMX\" is deprecated, asseblief omskakel na "
|
||||
"kleinletters\n"
|
||||
"Sien die apparmor.d(5) manpage vir besonderhede.\n"
|
||||
|
||||
#: ../parser_misc.c:467 ../parser_misc.c:474 ../parser_misc.c:638
|
||||
#: ../parser_misc.c:645 ../parser_misc.c:380 ../parser_misc.c:387
|
||||
msgid "Conflict 'a' and 'w' perms are mutually exclusive."
|
||||
msgstr ""
|
||||
msgstr "Konflik 'a' en 'w' perms is onderling uitsluitend."
|
||||
|
||||
#: ../parser_misc.c:491 ../parser_misc.c:662 ../parser_misc.c:404
|
||||
msgid "Exec qualifier 'i' invalid, conflicting qualifier already specified"
|
||||
@@ -329,12 +340,17 @@ msgid ""
|
||||
"Unconfined exec qualifier (%c%c) allows some dangerous environment variables "
|
||||
"to be passed to the unconfined process; 'man 5 apparmor.d' for details.\n"
|
||||
msgstr ""
|
||||
"Onbegrensde exec kwalifiseerder (%c%c) toelaat sommige gevaarlike omgewing "
|
||||
"veranderlikes om wees geslaag om die onbegrensde proses; 'man 5 apparmor.d' "
|
||||
"vir besonderhede.\n"
|
||||
|
||||
#: ../parser_misc.c:510 ../parser_misc.c:551 ../parser_misc.c:681
|
||||
#: ../parser_misc.c:722 ../parser_misc.c:423 ../parser_misc.c:464
|
||||
#, c-format
|
||||
msgid "Exec qualifier '%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
"Exec kwalifiseerder '%c' ongeldig, konflikterende kwalifiseerder reeds "
|
||||
"gespesifiseer"
|
||||
|
||||
#: ../parser_misc.c:537 ../parser_misc.c:545 ../parser_misc.c:708
|
||||
#: ../parser_misc.c:716 ../parser_misc.c:450 ../parser_misc.c:458
|
||||
@@ -342,22 +358,24 @@ msgstr ""
|
||||
msgid ""
|
||||
"Exec qualifier '%c%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
"Exec kwalifiseerder '%c%c' ongeldig, konflikterende kwalifiseerder reeds "
|
||||
"gespesifiseer"
|
||||
|
||||
#: ../parser_misc.c:593 ../parser_misc.c:764 ../parser_misc.c:506
|
||||
#, c-format
|
||||
msgid "Internal: unexpected mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interne: onverwagte modus karakter '%c' in insette"
|
||||
|
||||
#: ../parser_misc.c:615 ../parser_misc.c:786 ../parser_misc.c:528
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid perm 0x%llx\n"
|
||||
msgstr ""
|
||||
msgstr "Interne fout gegenereer ongeldige perm 0x%llx\n"
|
||||
|
||||
#: ../parser_misc.c:865 ../parser_symtab.c:561 ../parser_regex.c:626
|
||||
#: ../parser_variable.c:229
|
||||
#, c-format
|
||||
msgid "AppArmor parser error: %s\n"
|
||||
msgstr ""
|
||||
msgstr "AppArmor parser fout: %s\n"
|
||||
|
||||
#: ../parser_merge.c:92 ../parser_merge.c:91 ../parser_merge.c:83
|
||||
msgid "Couldn't merge entries. Out of Memory\n"
|
||||
@@ -366,47 +384,50 @@ msgstr "Kon inskrywings nie saamvleg nie. Geheue is opgebruik\n"
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
msgstr "profiel %s: het saamgevoegde reël %s met konflikterende x wysigers\n"
|
||||
|
||||
#: parser_yacc.y:236 parser_yacc.y:277 parser_yacc.y:320
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
msgstr "Profiel beslaglegging moet begin met 'n '/'."
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
"Profiel name moet begin met 'n '/', naamruimte of sleutelwoord 'profile' of "
|
||||
"'hat'."
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#, c-format
|
||||
msgid "Failed to create alias %s -> %s\n"
|
||||
msgstr ""
|
||||
msgstr "Kon nie alias skep %s -> %s\n"
|
||||
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
msgstr "Profiel vlag chroot_relatiewe konflik met naamruimte_relatiewe"
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
msgstr "Profiel vlag bemiddel_geskrap konflikte met delegeer_geskrap"
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
"Profiel vlag hechten_ontkoppelde konflikte met geen_hechten_ontkoppel"
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
msgstr "Profiel vlag chroot_hechten konflik met chroot_geen_hechten"
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
msgstr ""
|
||||
msgstr "Profiel vlag 'debug' is nie meer geldig."
|
||||
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552
|
||||
#, c-format
|
||||
msgid "Invalid profile flag: %s."
|
||||
msgstr ""
|
||||
msgstr "Ongeldige profiel vlag: %s."
|
||||
|
||||
#: parser_yacc.y:498 parser_yacc.y:520 parser_yacc.y:548 parser_yacc.y:594
|
||||
msgid "Assert: `rule' returned NULL."
|
||||
@@ -418,23 +439,29 @@ msgid ""
|
||||
"Invalid mode, in deny rules 'x' must not be preceded by exec qualifier 'i', "
|
||||
"'p', or 'u'"
|
||||
msgstr ""
|
||||
"Ongeldige modus, in ontken reëls 'x' moet nie voorafgegaan word deur exec "
|
||||
"kwalifiseerder 'i', 'p', of 'u'"
|
||||
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602
|
||||
msgid ""
|
||||
"Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', 'c', or 'u'"
|
||||
msgstr ""
|
||||
"Ongeldige modus, 'x' moet voorafgegaan word deur exec kwalifiseerder 'i', "
|
||||
"'p', 'c', of 'u'"
|
||||
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633
|
||||
msgid "Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'"
|
||||
msgstr ""
|
||||
"Ongeldige modus, 'x' moet voorafgegaan word deur exec kwalifiseerder 'i', "
|
||||
"'p', of 'u'"
|
||||
|
||||
#: parser_yacc.y:574 parser_yacc.y:612 parser_yacc.y:614 parser_yacc.y:660
|
||||
msgid "Assert: `network_rule' return invalid protocol."
|
||||
msgstr ""
|
||||
msgstr "Assert: `network_rule' ongeldige protokol terugstuur."
|
||||
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786
|
||||
msgid "Assert: `change_profile' returned NULL."
|
||||
msgstr ""
|
||||
msgstr "Assert: `change_profile' teruggekeer NULL."
|
||||
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810
|
||||
msgid "Assert: 'hat rule' returned NULL."
|
||||
@@ -442,28 +469,28 @@ msgstr "Beweer: `hat-reël' het NUL teruggestuur."
|
||||
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819
|
||||
msgid "Assert: 'local_profile rule' returned NULL."
|
||||
msgstr ""
|
||||
msgstr "Assert: 'local_profile rule' teruggekeer NULL."
|
||||
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992
|
||||
#, c-format
|
||||
msgid "Unset boolean variable %s used in if-expression"
|
||||
msgstr ""
|
||||
msgstr "Unset boolean veranderlike %s gebruik in if-uitdrukking"
|
||||
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092
|
||||
msgid "unsafe rule missing exec permissions"
|
||||
msgstr ""
|
||||
msgstr "onveilige reël ontbreek exec toestemmings"
|
||||
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060
|
||||
msgid "subset can only be used with link rules."
|
||||
msgstr ""
|
||||
msgstr "subset kan slegs gebruik word met skakel reëls."
|
||||
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062
|
||||
msgid "link and exec perms conflict on a file rule using ->"
|
||||
msgstr ""
|
||||
msgstr "skakel en exec perms konflik op 'n lêer reël met behulp van ->"
|
||||
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064
|
||||
msgid "link perms are not allowed on a named profile transition.\n"
|
||||
msgstr ""
|
||||
msgstr "skakel perms word nie toegelaat op 'n vernoem profiel oorgang.\n"
|
||||
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109
|
||||
#, c-format
|
||||
@@ -473,22 +500,22 @@ msgstr "ontbreek daar ’n reëleindkarakter? (inskrywing: %s)"
|
||||
#: parser_yacc.y:975 parser_yacc.y:985 parser_yacc.y:1057 parser_yacc.y:1067
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155
|
||||
msgid "Invalid network entry."
|
||||
msgstr ""
|
||||
msgstr "Ongeldig netwerk inskrywing."
|
||||
|
||||
#: parser_yacc.y:1039 parser_yacc.y:1048 parser_yacc.y:1254 parser_yacc.y:1510
|
||||
#, c-format
|
||||
msgid "Invalid capability %s."
|
||||
msgstr ""
|
||||
msgstr "Ongeldige capvermoë %s."
|
||||
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "AppArmor parser fout vir %s%s%s by lyn %d: %s\n"
|
||||
|
||||
#: parser_yacc.y:1072 parser_yacc.y:1275 parser_yacc.y:1531
|
||||
#, c-format
|
||||
msgid "AppArmor parser error,%s%s line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "AppArmor parser fout,%s%s lyn %d: %s\n"
|
||||
|
||||
#: ../parser_regex.c:244
|
||||
#, c-format
|
||||
@@ -514,6 +541,8 @@ msgid ""
|
||||
"%s: Regex grouping error: Unclosed grouping or character class, expecting "
|
||||
"close }\n"
|
||||
msgstr ""
|
||||
"%s: Regex groepering fout: Unclosed groepering of karakter klas, verwag tans "
|
||||
"sluit }\n"
|
||||
|
||||
#: ../parser_regex.c:351 ../parser_regex.c:357
|
||||
#, c-format
|
||||
@@ -528,12 +557,12 @@ msgstr "%s: Kan insetreël '%s' nie ontleed nie\n"
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Ongeldig profiel naam '%s' - slegte gereelde uitdrukking\n"
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#, c-format
|
||||
msgid "ERROR merging rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "FOUT samesmelting reëls vir profiele %s, kon nie laai nie\n"
|
||||
|
||||
#: ../parser_policy.c:234
|
||||
#, c-format
|
||||
@@ -542,21 +571,24 @@ msgid ""
|
||||
"\t'*', '?', character ranges, and alternations are not allowed.\n"
|
||||
"\t'**' may only be used at the end of a rule.\n"
|
||||
msgstr ""
|
||||
"FOUT profiel %s bevat beleid elemente nie bruikbaar met hierdie kern:\n"
|
||||
"\t'*', '?', karakter reekse, en alternations is nie toegelaat.\n"
|
||||
"\t'**' mag enigste wees gebruik an die einde van 'n rule.\n"
|
||||
|
||||
#: ../parser_policy.c:279 ../parser_policy.c:359 ../parser_policy.c:332
|
||||
#, c-format
|
||||
msgid "ERROR processing regexs for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "FOUT verwerking regexs vir profiel %s, misluk om laai\n"
|
||||
|
||||
#: ../parser_policy.c:306 ../parser_policy.c:389 ../parser_policy.c:362
|
||||
#, c-format
|
||||
msgid "ERROR expanding variables for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "FOUT uitbrei tans veranderlikes vir praofiel %s, misluk om laai\n"
|
||||
|
||||
#: ../parser_policy.c:390 ../parser_policy.c:382 ../parser_policy.c:355
|
||||
#, c-format
|
||||
msgid "ERROR adding hat access rule for profile %s\n"
|
||||
msgstr ""
|
||||
msgstr "FOUT bygevoeg hoed toegang reël vir profiel %s\n"
|
||||
|
||||
#: ../parser_policy.c:490 ../parser_policy.c:271
|
||||
#, c-format
|
||||
@@ -566,17 +598,17 @@ msgstr "FOUT in profiel %s, het misluk om te laai\n"
|
||||
#: ../parser_policy.c:675
|
||||
#, c-format
|
||||
msgid "%s: Errors found during postprocessing. Aborting.\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Foute gevind tydens naverwerking. Aborteer tans.\n"
|
||||
|
||||
#: ../parser_policy.c:682 ../parser_policy.c:704
|
||||
#, c-format
|
||||
msgid "%s: Errors found during regex postprocess. Aborting.\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Foute gevind tydens regex naverwerking. Aborteer tans.\n"
|
||||
|
||||
#: ../parser_policy.c:689
|
||||
#, c-format
|
||||
msgid "%s: Errors found during postprocess. Aborting.\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Foute gevind tydens na-proses. Aborteer tans.\n"
|
||||
|
||||
#: ../parser_policy.c:696
|
||||
#, c-format
|
||||
@@ -587,161 +619,162 @@ msgstr ""
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "Kon nie proses -insluit gids '%s' in '%s'"
|
||||
|
||||
#: ../parser_main.c:660 ../parser_main.c:523
|
||||
msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
msgstr "Funksie buffer volle."
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
msgstr "Uit van geheue"
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
msgid "Can't create cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Kan nie kasgids skep nie: %s\n"
|
||||
|
||||
#: ../parser_main.c:1185 ../parser_main.c:1094
|
||||
#, c-format
|
||||
msgid "File in cache directory location: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Lêer in kas directory plek: %s\n"
|
||||
|
||||
#: ../parser_main.c:1188 ../parser_main.c:1097
|
||||
#, c-format
|
||||
msgid "Can't update cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Kan nie kasgids opdateer: %s\n"
|
||||
|
||||
#: ../parser_misc.c:833
|
||||
#, c-format
|
||||
msgid "Internal: unexpected DBus mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "interne: onverwagte DBUS modus karakter '%c' in insette"
|
||||
|
||||
#: ../parser_misc.c:857
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Interne fout gegenereer ongeldig DBus perm 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "ontken voorvoegsel nie toegelaat"
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toegelaat"
|
||||
|
||||
#: parser_yacc.y:660
|
||||
msgid "owner prefix not allow on mount rules"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toegelaat op reëls berg"
|
||||
|
||||
#: parser_yacc.y:677
|
||||
msgid "owner prefix not allow on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toelaat op dbus reëls"
|
||||
|
||||
#: parser_yacc.y:704
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toelaat op capvermoë reëls"
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
msgstr "ongeldig berg voorwaardelike %s%s"
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
msgstr "slegte berg reël"
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
msgstr "hegpunt voorwaardes tans nie ondersteun nie"
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
msgstr "ongeldig pivotroot voorwaardelike '%s'"
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
"%s: Regex groepering fout: Ongeldig naby ], geen bypassende oop [ bespeur\n"
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Regex groepering fout: Oorskry maksimum nes van {}\n"
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "FOUT verwerking beleiddb reëls vir profiel %s, kon nie laai nie\n"
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "FOUT vervanging van aliasse vir profiel %s, misluk om laai\n"
|
||||
|
||||
#: ../parser_interface.c:635 ../parser_interface.c:638
|
||||
#, c-format
|
||||
msgid "%s: Unable to write %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Nie in staat om skryf %s\n"
|
||||
|
||||
#: ../parser_main.c:721
|
||||
#, c-format
|
||||
msgid "Error: Could not read binary profile or cache file %s: %s.\n"
|
||||
msgstr ""
|
||||
msgstr "Fout: Kon nie lees binêre profiel of kaslêer %s: %s.\n"
|
||||
|
||||
#: ../parser_main.c:811
|
||||
#, c-format
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
msgstr "Fout: Kon nie lees kaslêer '%s', huppel tans...\n"
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interne: onverwagte %s modus karakter '%c' in inset"
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Interne fout gegenereer ongeldig %s perm 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:703
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toegelaat op reëls berg"
|
||||
|
||||
#: parser_yacc.y:720
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toegelaat op dbus reëls"
|
||||
|
||||
#: parser_yacc.y:736
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toegelaat op sein reëls"
|
||||
|
||||
#: parser_yacc.y:752
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toegelaat op ptrace reëls"
|
||||
|
||||
#: parser_yacc.y:768
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toegelaat op unix reëls"
|
||||
|
||||
#: parser_yacc.y:794
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
msgstr "eienaar voorvoegsel nie toegelaat op capvermoë reëls"
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "dbus reël: ongeldig voorwaardelike groep %s=()"
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "unix reël: ongeldig voorwaardelike groep %s=()"
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Regex fout: trailing '\\' ontsnapping karakter\n"
|
||||
|
741
parser/po/be.po
Normal file
741
parser/po/be.po
Normal file
@@ -0,0 +1,741 @@
|
||||
# Belarusian translation for apparmor
|
||||
# Copyright (c) 2020 Rosetta Contributors and Canonical Ltd 2020
|
||||
# This file is distributed under the same license as the apparmor package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2020-05-03 16:54+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Belarusian <be@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2020-05-04 04:32+0000\n"
|
||||
"X-Generator: Launchpad (build fbdff7602bd10fb883bf7e2ddcc7fd5a16f60398)\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
msgid "Bad write position\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:72 ../parser_interface.c:75 ../parser_interface.c:52
|
||||
msgid "Permission denied\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:75 ../parser_interface.c:78 ../parser_interface.c:55
|
||||
msgid "Out of memory\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:84 ../parser_interface.c:87 ../parser_interface.c:64
|
||||
msgid "Profile does not match signature\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
msgid "Profile already exists\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:93 ../parser_interface.c:96 ../parser_interface.c:73
|
||||
msgid "Profile doesn't exist\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
#, c-format
|
||||
msgid "%s: Unable to add \"%s\". "
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:121 ../parser_interface.c:124
|
||||
#: ../parser_interface.c:101
|
||||
#, c-format
|
||||
msgid "%s: Unable to replace \"%s\". "
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:126 ../parser_interface.c:129
|
||||
#: ../parser_interface.c:106
|
||||
#, c-format
|
||||
msgid "%s: Unable to remove \"%s\". "
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:134
|
||||
#: ../parser_interface.c:111
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to stdout\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:138
|
||||
#: ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
#: ../parser_interface.c:118 ../parser_interface.c:142
|
||||
#, c-format
|
||||
msgid "%s: ASSERT: Invalid option: %d\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:147 ../parser_interface.c:150
|
||||
#: ../parser_interface.c:127
|
||||
#, c-format
|
||||
msgid "Addition succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:151 ../parser_interface.c:154
|
||||
#: ../parser_interface.c:131
|
||||
#, c-format
|
||||
msgid "Replacement succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:155 ../parser_interface.c:158
|
||||
#: ../parser_interface.c:135
|
||||
#, c-format
|
||||
msgid "Removal succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:251 ../parser_interface.c:254
|
||||
#, c-format
|
||||
msgid "PANIC bad increment buffer %p pos %p ext %p size %d res %p\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:656 ../parser_interface.c:658
|
||||
#: ../parser_interface.c:446
|
||||
#, c-format
|
||||
msgid "profile %s network rules not enforced\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:666
|
||||
msgid "Unknown pattern type\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:750 ../parser_interface.c:902
|
||||
#: ../parser_interface.c:743 ../parser_interface.c:894
|
||||
#: ../parser_interface.c:518 ../parser_interface.c:669
|
||||
#, c-format
|
||||
msgid "Unable to open %s - %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:776 ../parser_interface.c:768
|
||||
#: ../parser_interface.c:543
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove ^%s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:789 ../parser_interface.c:781
|
||||
#: ../parser_interface.c:556
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove %s:%s."
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:810 ../parser_interface.c:802
|
||||
msgid "unable to create work area\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:818 ../parser_interface.c:810
|
||||
#, c-format
|
||||
msgid "unable to serialize profile %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:829 ../parser_interface.c:916
|
||||
#: ../parser_interface.c:821 ../parser_interface.c:908
|
||||
#: ../parser_interface.c:582
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:839 ../parser_interface.c:831
|
||||
#: ../parser_interface.c:593
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:100 parser_lex.l:163 parser_lex.l:169
|
||||
#, c-format
|
||||
msgid "Could not open '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#, c-format
|
||||
msgid "fstat failed for '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:121
|
||||
#, c-format
|
||||
msgid "opendir failed '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:152
|
||||
#, c-format
|
||||
msgid "stat failed for '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:155 parser_lex.l:133 parser_lex.l:139
|
||||
#, c-format
|
||||
msgid "Could not open '%s' in '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:284 parser_lex.l:322 parser_lex.l:362 parser_lex.l:399
|
||||
#: parser_lex.l:469 parser_lex.l:655 parser_lex.l:586 parser_lex.l:638
|
||||
#, c-format
|
||||
msgid "Found unexpected character: '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:420
|
||||
#, c-format
|
||||
msgid "(network_mode) Found unexpected character: '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:333 ../parser_common.c:61 ../parser_common.c:106
|
||||
#, c-format
|
||||
msgid "Warning from %s (%s%sline %d): %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:531
|
||||
#, c-format
|
||||
msgid "%s: Could not allocate memory for subdomainbase mount point\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:577 ../parser_main.c:616 ../parser_main.c:479
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Warning: unable to find a suitable fs in %s, is it mounted?\n"
|
||||
"Use --subdomainfs to override.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:597 ../parser_main.c:635 ../parser_main.c:498
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Sorry. You need root privileges to run this program.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:604 ../parser_main.c:642 ../parser_main.c:505
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Warning! You've set this program setuid root.\n"
|
||||
"Anybody who can run this program can update your AppArmor profiles.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:704 ../parser_main.c:813 ../parser_main.c:836
|
||||
#: ../parser_main.c:946 ../parser_main.c:860
|
||||
#, c-format
|
||||
msgid "Error: Could not read profile %s: %s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:718 ../parser_misc.c:270 parser_yacc.y:227
|
||||
#: parser_yacc.y:374 parser_yacc.y:386 parser_yacc.y:484 parser_yacc.y:586
|
||||
#: parser_yacc.y:624 parser_yacc.y:939 parser_yacc.y:948 parser_yacc.y:960
|
||||
#: parser_yacc.y:1008 parser_yacc.y:1019 parser_yacc.y:1101 parser_yacc.y:1119
|
||||
#: parser_yacc.y:1126 ../parser_main.c:850 ../parser_main.c:1015
|
||||
#: ../parser_main.c:1229 ../parser_main.c:1283 ../parser_misc.c:431
|
||||
#: parser_yacc.y:268 parser_yacc.y:416 parser_yacc.y:426 parser_yacc.y:537
|
||||
#: parser_yacc.y:626 parser_yacc.y:976 parser_yacc.y:1021 parser_yacc.y:1030
|
||||
#: parser_yacc.y:1042 parser_yacc.y:1078 parser_yacc.y:1082 parser_yacc.y:1092
|
||||
#: parser_yacc.y:1102 parser_yacc.y:1201 parser_yacc.y:1223 parser_yacc.y:1234
|
||||
#: parser_yacc.y:1309 parser_yacc.y:1327 parser_yacc.y:1334 parser_yacc.y:1385
|
||||
#: ../parser_main.c:735 ../parser_main.c:923 ../parser_main.c:1133
|
||||
#: ../parser_main.c:1187 parser_yacc.y:311 parser_yacc.y:462 parser_yacc.y:472
|
||||
#: parser_yacc.y:583 parser_yacc.y:662 parser_yacc.y:669 parser_yacc.y:1130
|
||||
#: parser_yacc.y:1166 parser_yacc.y:1170 parser_yacc.y:1180 parser_yacc.y:1190
|
||||
#: parser_yacc.y:1298 parser_yacc.y:1376 parser_yacc.y:1479 parser_yacc.y:1490
|
||||
#: parser_yacc.y:1565 parser_yacc.y:1583 parser_yacc.y:1590 parser_yacc.y:1639
|
||||
#: ../network.c:314 ../af_unix.cc:203
|
||||
msgid "Memory allocation error."
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#, c-format
|
||||
msgid "%s: Errors found in file. Aborting.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:426 ../parser_misc.c:597 ../parser_misc.c:339
|
||||
msgid ""
|
||||
"Uppercase qualifiers \"RWLIMX\" are deprecated, please convert to lowercase\n"
|
||||
"See the apparmor.d(5) manpage for details.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:467 ../parser_misc.c:474 ../parser_misc.c:638
|
||||
#: ../parser_misc.c:645 ../parser_misc.c:380 ../parser_misc.c:387
|
||||
msgid "Conflict 'a' and 'w' perms are mutually exclusive."
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:491 ../parser_misc.c:662 ../parser_misc.c:404
|
||||
msgid "Exec qualifier 'i' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:502 ../parser_misc.c:673 ../parser_misc.c:415
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unconfined exec qualifier (%c%c) allows some dangerous environment variables "
|
||||
"to be passed to the unconfined process; 'man 5 apparmor.d' for details.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:510 ../parser_misc.c:551 ../parser_misc.c:681
|
||||
#: ../parser_misc.c:722 ../parser_misc.c:423 ../parser_misc.c:464
|
||||
#, c-format
|
||||
msgid "Exec qualifier '%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:537 ../parser_misc.c:545 ../parser_misc.c:708
|
||||
#: ../parser_misc.c:716 ../parser_misc.c:450 ../parser_misc.c:458
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Exec qualifier '%c%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:593 ../parser_misc.c:764 ../parser_misc.c:506
|
||||
#, c-format
|
||||
msgid "Internal: unexpected mode character '%c' in input"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:615 ../parser_misc.c:786 ../parser_misc.c:528
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid perm 0x%llx\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:865 ../parser_symtab.c:561 ../parser_regex.c:626
|
||||
#: ../parser_variable.c:229
|
||||
#, c-format
|
||||
msgid "AppArmor parser error: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_merge.c:92 ../parser_merge.c:91 ../parser_merge.c:83
|
||||
msgid "Couldn't merge entries. Out of Memory\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:236 parser_yacc.y:277 parser_yacc.y:320
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#, c-format
|
||||
msgid "Failed to create alias %s -> %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552
|
||||
#, c-format
|
||||
msgid "Invalid profile flag: %s."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:498 parser_yacc.y:520 parser_yacc.y:548 parser_yacc.y:594
|
||||
msgid "Assert: `rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:501 parser_yacc.y:546 parser_yacc.y:552 parser_yacc.y:584
|
||||
#: parser_yacc.y:598 parser_yacc.y:630
|
||||
msgid ""
|
||||
"Invalid mode, in deny rules 'x' must not be preceded by exec qualifier 'i', "
|
||||
"'p', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602
|
||||
msgid ""
|
||||
"Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', 'c', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633
|
||||
msgid "Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:574 parser_yacc.y:612 parser_yacc.y:614 parser_yacc.y:660
|
||||
msgid "Assert: `network_rule' return invalid protocol."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786
|
||||
msgid "Assert: `change_profile' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810
|
||||
msgid "Assert: 'hat rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819
|
||||
msgid "Assert: 'local_profile rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992
|
||||
#, c-format
|
||||
msgid "Unset boolean variable %s used in if-expression"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092
|
||||
msgid "unsafe rule missing exec permissions"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060
|
||||
msgid "subset can only be used with link rules."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062
|
||||
msgid "link and exec perms conflict on a file rule using ->"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064
|
||||
msgid "link perms are not allowed on a named profile transition.\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109
|
||||
#, c-format
|
||||
msgid "missing an end of line character? (entry: %s)"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:975 parser_yacc.y:985 parser_yacc.y:1057 parser_yacc.y:1067
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155
|
||||
msgid "Invalid network entry."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1039 parser_yacc.y:1048 parser_yacc.y:1254 parser_yacc.y:1510
|
||||
#, c-format
|
||||
msgid "Invalid capability %s."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1072 parser_yacc.y:1275 parser_yacc.y:1531
|
||||
#, c-format
|
||||
msgid "AppArmor parser error,%s%s line %d: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:244
|
||||
#, c-format
|
||||
msgid "%s: Illegal open {, nesting groupings not allowed\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:265 ../parser_regex.c:274 ../parser_regex.c:278
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Invalid number of items between {}\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:271 ../parser_regex.c:280 ../parser_regex.c:284
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close }, no matching open { detected\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:337 ../parser_regex.c:343 ../parser_regex.c:361
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Unclosed grouping or character class, expecting "
|
||||
"close }\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:351 ../parser_regex.c:357
|
||||
#, c-format
|
||||
msgid "%s: Internal buffer overflow detected, %d characters exceeded\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:355 ../parser_regex.c:361 ../parser_regex.c:377
|
||||
#, c-format
|
||||
msgid "%s: Unable to parse input line '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#, c-format
|
||||
msgid "ERROR merging rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:234
|
||||
#, c-format
|
||||
msgid ""
|
||||
"ERROR profile %s contains policy elements not usable with this kernel:\n"
|
||||
"\t'*', '?', character ranges, and alternations are not allowed.\n"
|
||||
"\t'**' may only be used at the end of a rule.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:279 ../parser_policy.c:359 ../parser_policy.c:332
|
||||
#, c-format
|
||||
msgid "ERROR processing regexs for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:306 ../parser_policy.c:389 ../parser_policy.c:362
|
||||
#, c-format
|
||||
msgid "ERROR expanding variables for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:390 ../parser_policy.c:382 ../parser_policy.c:355
|
||||
#, c-format
|
||||
msgid "ERROR adding hat access rule for profile %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:490 ../parser_policy.c:271
|
||||
#, c-format
|
||||
msgid "ERROR in profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:675
|
||||
#, c-format
|
||||
msgid "%s: Errors found during postprocessing. Aborting.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:682 ../parser_policy.c:704
|
||||
#, c-format
|
||||
msgid "%s: Errors found during regex postprocess. Aborting.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:689
|
||||
#, c-format
|
||||
msgid "%s: Errors found during postprocess. Aborting.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:696
|
||||
#, c-format
|
||||
msgid "%s: Errors found in combining rules postprocessing. Aborting.\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:660 ../parser_main.c:523
|
||||
msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
msgid "Can't create cache directory: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:1185 ../parser_main.c:1094
|
||||
#, c-format
|
||||
msgid "File in cache directory location: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:1188 ../parser_main.c:1097
|
||||
#, c-format
|
||||
msgid "Can't update cache directory: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:833
|
||||
#, c-format
|
||||
msgid "Internal: unexpected DBus mode character '%c' in input"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:857
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:660
|
||||
msgid "owner prefix not allow on mount rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:677
|
||||
msgid "owner prefix not allow on dbus rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:704
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:635 ../parser_interface.c:638
|
||||
#, c-format
|
||||
msgid "%s: Unable to write %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:721
|
||||
#, c-format
|
||||
msgid "Error: Could not read binary profile or cache file %s: %s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:811
|
||||
#, c-format
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:703
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:720
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:736
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:752
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:768
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:794
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
216
parser/po/ca.po
216
parser/po/ca.po
@@ -8,33 +8,33 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-15 01:59+0000\n"
|
||||
"Last-Translator: Christian Boltz <Unknown>\n"
|
||||
"PO-Revision-Date: 2024-09-14 11:03+0000\n"
|
||||
"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
|
||||
"Language-Team: Catalan\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2024-09-15 07:16+0000\n"
|
||||
"X-Generator: Launchpad (build 1b1ed1ad2dbfc71ee62b5c5491c975135a771bf0)\n"
|
||||
"Language: ca\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr ""
|
||||
msgstr "Error: Sense memòria.\n"
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr ""
|
||||
msgstr "Error: basedir %s no és un directori, s'omet.\n"
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr ""
|
||||
msgstr "Error: no s'ha pogut afegir el directori %s al camí de cerca.\n"
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr ""
|
||||
msgstr "Error: no s'ha pogut assignar memòria.\n"
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
msgid "Bad write position\n"
|
||||
@@ -50,7 +50,7 @@ msgstr "Sense memòria\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
msgstr "No s'ha pogut copiar el perfil: adreça de memòria incorrecta\n"
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
@@ -62,7 +62,7 @@ msgstr "El perfil no coincideix amb la signatura\n"
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr ""
|
||||
msgstr "La versió del perfil no és compatible amb el mòdul Apparmor\n"
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
msgid "Profile already exists\n"
|
||||
@@ -75,11 +75,13 @@ msgstr "El perfil no existeix\n"
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
"S'ha denegat el permís; s'ha intentat carregar un perfil mentre està "
|
||||
"confinat?\n"
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
msgstr "Error desconegut (%d): %s\n"
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
@@ -109,7 +111,7 @@ msgstr "%s: no es pot escriure a l'stdout\n"
|
||||
#: ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
msgstr "%s: no s'ha pogut escriure al fitxer de sortida\n"
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
@@ -147,11 +149,11 @@ msgstr ""
|
||||
#: ../parser_interface.c:446
|
||||
#, c-format
|
||||
msgid "profile %s network rules not enforced\n"
|
||||
msgstr ""
|
||||
msgstr "el perfil %s de les regles de xarxa no està obligat\n"
|
||||
|
||||
#: ../parser_interface.c:666
|
||||
msgid "Unknown pattern type\n"
|
||||
msgstr ""
|
||||
msgstr "Tipus de patró desconegut\n"
|
||||
|
||||
#: ../parser_interface.c:750 ../parser_interface.c:902
|
||||
#: ../parser_interface.c:743 ../parser_interface.c:894
|
||||
@@ -164,13 +166,13 @@ msgstr "No es pot obrir %s - %s\n"
|
||||
#: ../parser_interface.c:543
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove ^%s\n"
|
||||
msgstr ""
|
||||
msgstr "Error d'assignació de memòria: no es pot eliminar ^%s\n"
|
||||
|
||||
#: ../parser_interface.c:789 ../parser_interface.c:781
|
||||
#: ../parser_interface.c:556
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove %s:%s."
|
||||
msgstr ""
|
||||
msgstr "Error d'assignació de memòria: no es pot eliminar %s:%s."
|
||||
|
||||
#: ../parser_interface.c:810 ../parser_interface.c:802
|
||||
msgid "unable to create work area\n"
|
||||
@@ -193,31 +195,32 @@ msgstr "%s: no es pot escriure tota l'entrada del perfil\n"
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr ""
|
||||
"%s: No s'ha pogut escriure l'entrada de perfil sencera a la memòria cau\n"
|
||||
|
||||
#: parser_lex.l:100 parser_lex.l:163 parser_lex.l:169
|
||||
#, c-format
|
||||
msgid "Could not open '%s'"
|
||||
msgstr ""
|
||||
msgstr "No s'ha pogut obrir «%s»"
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#, c-format
|
||||
msgid "fstat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "ha fallat fstat per a «%s»"
|
||||
|
||||
#: parser_lex.l:121
|
||||
#, c-format
|
||||
msgid "opendir failed '%s'"
|
||||
msgstr ""
|
||||
msgstr "opendir ha fallat «%s»"
|
||||
|
||||
#: parser_lex.l:152
|
||||
#, c-format
|
||||
msgid "stat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "stat ha fallat per a «%s»"
|
||||
|
||||
#: parser_lex.l:155 parser_lex.l:133 parser_lex.l:139
|
||||
#, c-format
|
||||
msgid "Could not open '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "No s'ha pogut obrir «%s» a «%s»"
|
||||
|
||||
#: parser_lex.l:284 parser_lex.l:322 parser_lex.l:362 parser_lex.l:399
|
||||
#: parser_lex.l:469 parser_lex.l:655 parser_lex.l:586 parser_lex.l:638
|
||||
@@ -227,17 +230,17 @@ msgstr "S'ha trobat un caràcter inesperat: '%s'"
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
msgstr "Les declaracions de variables no accepten comes finals"
|
||||
|
||||
#: parser_lex.l:420
|
||||
#, c-format
|
||||
msgid "(network_mode) Found unexpected character: '%s'"
|
||||
msgstr ""
|
||||
msgstr "(networkmode) S'ha trobat un caràcter inesperat: «%s»"
|
||||
|
||||
#: ../parser_main.c:333 ../parser_common.c:61 ../parser_common.c:106
|
||||
#, c-format
|
||||
msgid "Warning from %s (%s%sline %d): %s"
|
||||
msgstr ""
|
||||
msgstr "Avís de %s (%s%slínia %d): %s"
|
||||
|
||||
#: ../parser_main.c:531
|
||||
#, c-format
|
||||
@@ -252,6 +255,8 @@ msgid ""
|
||||
"Warning: unable to find a suitable fs in %s, is it mounted?\n"
|
||||
"Use --subdomainfs to override.\n"
|
||||
msgstr ""
|
||||
"Avís: no s'ha pogut trobar un fs adequat a %s, està muntat?\n"
|
||||
"Utilitzeu --subdomainfs per a substituir.\n"
|
||||
|
||||
#: ../parser_main.c:597 ../parser_main.c:635 ../parser_main.c:498
|
||||
#, c-format
|
||||
@@ -259,6 +264,8 @@ msgid ""
|
||||
"%s: Sorry. You need root privileges to run this program.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"%s: Ho sento. Necessiteu privilegis de root per a executar aquest programa.\n"
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:604 ../parser_main.c:642 ../parser_main.c:505
|
||||
#, c-format
|
||||
@@ -267,12 +274,16 @@ msgid ""
|
||||
"Anybody who can run this program can update your AppArmor profiles.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"%s: Avís! Heu establert el setuid d'aquest programa a root.\n"
|
||||
"Qualsevol persona que pugui executar aquest programa pot actualitzar els "
|
||||
"perfils de l'AppArmor.\n"
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:704 ../parser_main.c:813 ../parser_main.c:836
|
||||
#: ../parser_main.c:946 ../parser_main.c:860
|
||||
#, c-format
|
||||
msgid "Error: Could not read profile %s: %s.\n"
|
||||
msgstr ""
|
||||
msgstr "Error: no s'ha pogut llegir el perfil %s: %s.\n"
|
||||
|
||||
#: ../parser_main.c:718 ../parser_misc.c:270 parser_yacc.y:227
|
||||
#: parser_yacc.y:374 parser_yacc.y:386 parser_yacc.y:484 parser_yacc.y:586
|
||||
@@ -298,12 +309,12 @@ msgstr "S'ha produït un error d'assignació de memòria."
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "La càrrega a la memòria cau ha estat correcta per a «%s».\n"
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "S'ha recarregat a la memòria cau amb èxit per a «%s».\n"
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#, c-format
|
||||
@@ -315,11 +326,14 @@ msgid ""
|
||||
"Uppercase qualifiers \"RWLIMX\" are deprecated, please convert to lowercase\n"
|
||||
"See the apparmor.d(5) manpage for details.\n"
|
||||
msgstr ""
|
||||
"Els classificadors «RWLIMX» en majúscules estan obsolets, si us plau "
|
||||
"convertiu-los a minúscules\n"
|
||||
"Vegeu la pàgina del manual apparmor.d(5) per a més detalls.\n"
|
||||
|
||||
#: ../parser_misc.c:467 ../parser_misc.c:474 ../parser_misc.c:638
|
||||
#: ../parser_misc.c:645 ../parser_misc.c:380 ../parser_misc.c:387
|
||||
msgid "Conflict 'a' and 'w' perms are mutually exclusive."
|
||||
msgstr ""
|
||||
msgstr "Els perms del conflicte «a» i «w» són mútuament excloents."
|
||||
|
||||
#: ../parser_misc.c:491 ../parser_misc.c:662 ../parser_misc.c:404
|
||||
msgid "Exec qualifier 'i' invalid, conflicting qualifier already specified"
|
||||
@@ -333,12 +347,17 @@ msgid ""
|
||||
"Unconfined exec qualifier (%c%c) allows some dangerous environment variables "
|
||||
"to be passed to the unconfined process; 'man 5 apparmor.d' for details.\n"
|
||||
msgstr ""
|
||||
"El qualificador d'exec no confiat (%c%c) permet passar algunes variables "
|
||||
"d'entorn perilloses al procés no confiat; «man 5 apparmor.d» per als "
|
||||
"detalls.\n"
|
||||
|
||||
#: ../parser_misc.c:510 ../parser_misc.c:551 ../parser_misc.c:681
|
||||
#: ../parser_misc.c:722 ../parser_misc.c:423 ../parser_misc.c:464
|
||||
#, c-format
|
||||
msgid "Exec qualifier '%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
"El qualificador d'execució «%c» no és vàlid, ja s'ha especificat un "
|
||||
"qualificador conflictiu"
|
||||
|
||||
#: ../parser_misc.c:537 ../parser_misc.c:545 ../parser_misc.c:708
|
||||
#: ../parser_misc.c:716 ../parser_misc.c:450 ../parser_misc.c:458
|
||||
@@ -346,22 +365,24 @@ msgstr ""
|
||||
msgid ""
|
||||
"Exec qualifier '%c%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
"El qualificador d'execució «%c%c» no és vàlid, ja s'ha especificat un "
|
||||
"qualificador conflictiu"
|
||||
|
||||
#: ../parser_misc.c:593 ../parser_misc.c:764 ../parser_misc.c:506
|
||||
#, c-format
|
||||
msgid "Internal: unexpected mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Intern: el caràcter de mode «%c» no és esperat a l'entrada"
|
||||
|
||||
#: ../parser_misc.c:615 ../parser_misc.c:786 ../parser_misc.c:528
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid perm 0x%llx\n"
|
||||
msgstr ""
|
||||
msgstr "Error intern generat un perm 0x%llx no vàlid\n"
|
||||
|
||||
#: ../parser_misc.c:865 ../parser_symtab.c:561 ../parser_regex.c:626
|
||||
#: ../parser_variable.c:229
|
||||
#, c-format
|
||||
msgid "AppArmor parser error: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Error de l'analitzador AppArmor: %s\n"
|
||||
|
||||
#: ../parser_merge.c:92 ../parser_merge.c:91 ../parser_merge.c:83
|
||||
msgid "Couldn't merge entries. Out of Memory\n"
|
||||
@@ -370,47 +391,56 @@ msgstr "No s'han pogut fusionar les entrades. Sense memòria\n"
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
msgstr "perfil %s: té la regla fusionada %s amb modificadors X conflictius\n"
|
||||
|
||||
#: parser_yacc.y:236 parser_yacc.y:277 parser_yacc.y:320
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
msgstr "L'adjunt del perfil ha de començar amb una «/»."
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
"Els noms de perfil han de començar amb un '/', espai de noms o paraula clau "
|
||||
"'profile' o 'hat'."
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#, c-format
|
||||
msgid "Failed to create alias %s -> %s\n"
|
||||
msgstr ""
|
||||
msgstr "No s'ha pogut crear l'àlies %s -> %s\n"
|
||||
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
"L'indicador de perfil chrootrelative entra en conflicte amb "
|
||||
"namespace_relative"
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
"L'indicador del perfil mediate_deleted entre en conflicte amb "
|
||||
"delegate_deleted"
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
"L'indicador de perfil attach_disconnected entra en conflicte amb "
|
||||
"no_attach_disconnected"
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
"El perfil de l'etiqueta chroot_attach entra en conflicte amb chroot_noattach"
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
msgstr ""
|
||||
msgstr "L'indicador de perfil «debug» ja no és vàlid."
|
||||
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552
|
||||
#, c-format
|
||||
msgid "Invalid profile flag: %s."
|
||||
msgstr ""
|
||||
msgstr "Indicador de perfil no vàlid: %s."
|
||||
|
||||
#: parser_yacc.y:498 parser_yacc.y:520 parser_yacc.y:548 parser_yacc.y:594
|
||||
msgid "Assert: `rule' returned NULL."
|
||||
@@ -422,23 +452,29 @@ msgid ""
|
||||
"Invalid mode, in deny rules 'x' must not be preceded by exec qualifier 'i', "
|
||||
"'p', or 'u'"
|
||||
msgstr ""
|
||||
"El mode no és vàlid, a les regles de denegació «x» no s'ha de precedir per "
|
||||
"«i», «p» o «u»"
|
||||
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602
|
||||
msgid ""
|
||||
"Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', 'c', or 'u'"
|
||||
msgstr ""
|
||||
"El mode no és vàlid, «x» ha d'anar precedit del qualificador «i», «p», «c» o "
|
||||
"«u»"
|
||||
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633
|
||||
msgid "Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'"
|
||||
msgstr ""
|
||||
"El mode no és vàlid, «x» ha d'anar precedit del qualificador exec «i», «p» o "
|
||||
"«u»"
|
||||
|
||||
#: parser_yacc.y:574 parser_yacc.y:612 parser_yacc.y:614 parser_yacc.y:660
|
||||
msgid "Assert: `network_rule' return invalid protocol."
|
||||
msgstr ""
|
||||
msgstr "Assert: «network_rule» retorna un protocol no vàlid."
|
||||
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786
|
||||
msgid "Assert: `change_profile' returned NULL."
|
||||
msgstr ""
|
||||
msgstr "Confirmació: «change_profile» ha retornat NULL."
|
||||
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810
|
||||
msgid "Assert: 'hat rule' returned NULL."
|
||||
@@ -446,28 +482,32 @@ msgstr "Confirmació: 'hat rule' ha retornat NULL."
|
||||
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819
|
||||
msgid "Assert: 'local_profile rule' returned NULL."
|
||||
msgstr ""
|
||||
msgstr "Confirmació: «local_profile rule» ha retornat NULL."
|
||||
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992
|
||||
#, c-format
|
||||
msgid "Unset boolean variable %s used in if-expression"
|
||||
msgstr ""
|
||||
"No s'ha establert la variable booleana %s utilitzada a l'expressió if"
|
||||
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092
|
||||
msgid "unsafe rule missing exec permissions"
|
||||
msgstr ""
|
||||
msgstr "manca permisos d'execució per a la regla insegura"
|
||||
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060
|
||||
msgid "subset can only be used with link rules."
|
||||
msgstr ""
|
||||
msgstr "el subconjunt només es pot utilitzar amb regles d'enllaç."
|
||||
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062
|
||||
msgid "link and exec perms conflict on a file rule using ->"
|
||||
msgstr ""
|
||||
"l'enllaç i els permisos exec entren en conflicte amb una regla de fitxer "
|
||||
"utilitzant ->"
|
||||
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064
|
||||
msgid "link perms are not allowed on a named profile transition.\n"
|
||||
msgstr ""
|
||||
"no es permeten permisos d'enllaç en una transició de perfil amb nom.\n"
|
||||
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109
|
||||
#, c-format
|
||||
@@ -477,22 +517,22 @@ msgstr "falta un caràcter de final de línia? (entrada: %s)"
|
||||
#: parser_yacc.y:975 parser_yacc.y:985 parser_yacc.y:1057 parser_yacc.y:1067
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155
|
||||
msgid "Invalid network entry."
|
||||
msgstr ""
|
||||
msgstr "Entrada de xarxa no vàlida."
|
||||
|
||||
#: parser_yacc.y:1039 parser_yacc.y:1048 parser_yacc.y:1254 parser_yacc.y:1510
|
||||
#, c-format
|
||||
msgid "Invalid capability %s."
|
||||
msgstr ""
|
||||
msgstr "Capacitat no vàlida %s."
|
||||
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Error de l'analitzador AppArmor per a %s%s%s a la línia %d: %s\n"
|
||||
|
||||
#: parser_yacc.y:1072 parser_yacc.y:1275 parser_yacc.y:1531
|
||||
#, c-format
|
||||
msgid "AppArmor parser error,%s%s line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Error de l'analitzador AppArmor, %s%s línia %d: %s\n"
|
||||
|
||||
#: ../parser_regex.c:244
|
||||
#, c-format
|
||||
@@ -521,6 +561,8 @@ msgid ""
|
||||
"%s: Regex grouping error: Unclosed grouping or character class, expecting "
|
||||
"close }\n"
|
||||
msgstr ""
|
||||
"%s: error d'agrupament d'expressions regulars: agrupació sense tancar o "
|
||||
"classe de caràcters, esperant tancar }\n"
|
||||
|
||||
#: ../parser_regex.c:351 ../parser_regex.c:357
|
||||
#, c-format
|
||||
@@ -538,11 +580,14 @@ msgstr "%s: no es pot analitzar la línia d'entrada '%s'\n"
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
"%s: el nom del perfil «%s» no és vàlid - expressió regular incorrecta\n"
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#, c-format
|
||||
msgid "ERROR merging rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"S'ha produït un ERROR en fusionar les regles per al perfil %s, no s'ha pogut "
|
||||
"carregar\n"
|
||||
|
||||
#: ../parser_policy.c:234
|
||||
#, c-format
|
||||
@@ -551,21 +596,28 @@ msgid ""
|
||||
"\t'*', '?', character ranges, and alternations are not allowed.\n"
|
||||
"\t'**' may only be used at the end of a rule.\n"
|
||||
msgstr ""
|
||||
"El perfil d'ERROR %s conté elements de política no usables amb aquest "
|
||||
"nucli:\n"
|
||||
"\t'*', '?', intervals de caràcters i alternances no estan permesos.\n"
|
||||
"\t«**» només es pot utilitzar al final d'una regla.\n"
|
||||
|
||||
#: ../parser_policy.c:279 ../parser_policy.c:359 ../parser_policy.c:332
|
||||
#, c-format
|
||||
msgid "ERROR processing regexs for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"S'ha produït un ERROR en processar les expressions regulars del perfil %s, "
|
||||
"no s'ha pogut carregar\n"
|
||||
|
||||
#: ../parser_policy.c:306 ../parser_policy.c:389 ../parser_policy.c:362
|
||||
#, c-format
|
||||
msgid "ERROR expanding variables for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"ERROR en expandir les variables del perfil %s, no s'ha pogut carregar\n"
|
||||
|
||||
#: ../parser_policy.c:390 ../parser_policy.c:382 ../parser_policy.c:355
|
||||
#, c-format
|
||||
msgid "ERROR adding hat access rule for profile %s\n"
|
||||
msgstr ""
|
||||
msgstr "ERROR en afegir la regla d'accés al barret per al perfil %s\n"
|
||||
|
||||
#: ../parser_policy.c:490 ../parser_policy.c:271
|
||||
#, c-format
|
||||
@@ -576,16 +628,20 @@ msgstr "ERROR al perfil %s, no s'ha pogut carregar\n"
|
||||
#, c-format
|
||||
msgid "%s: Errors found during postprocessing. Aborting.\n"
|
||||
msgstr ""
|
||||
"%s: S'han trobat errors durant el postprocessament. S'està avortant.\n"
|
||||
|
||||
#: ../parser_policy.c:682 ../parser_policy.c:704
|
||||
#, c-format
|
||||
msgid "%s: Errors found during regex postprocess. Aborting.\n"
|
||||
msgstr ""
|
||||
"%s: S'han trobat errors durant el postprocés de l'expressió regular. S'està "
|
||||
"avortant.\n"
|
||||
|
||||
#: ../parser_policy.c:689
|
||||
#, c-format
|
||||
msgid "%s: Errors found during postprocess. Aborting.\n"
|
||||
msgstr ""
|
||||
"%s: S'han trobat errors durant el postprocessament. S'està avortant.\n"
|
||||
|
||||
#: ../parser_policy.c:696
|
||||
#, c-format
|
||||
@@ -597,161 +653,171 @@ msgstr ""
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "No s'ha pogut processar el directori d'inclusió «%s» a «%s»"
|
||||
|
||||
#: ../parser_main.c:660 ../parser_main.c:523
|
||||
msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
msgstr "Memòria intermèdia de funcions plena."
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
msgstr "Sense memòria"
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
msgid "Can't create cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "No es pot crear el directori de la memòria cau: %s\n"
|
||||
|
||||
#: ../parser_main.c:1185 ../parser_main.c:1094
|
||||
#, c-format
|
||||
msgid "File in cache directory location: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Fitxer a la ubicació del directori de la memòria cau: %s\n"
|
||||
|
||||
#: ../parser_main.c:1188 ../parser_main.c:1097
|
||||
#, c-format
|
||||
msgid "Can't update cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "No es pot actualitzar el directori de la memòria cau: %s\n"
|
||||
|
||||
#: ../parser_misc.c:833
|
||||
#, c-format
|
||||
msgid "Internal: unexpected DBus mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Intern: el caràcter «%c» del mode DBus no és esperat a l'entrada"
|
||||
|
||||
#: ../parser_misc.c:857
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "S'ha produït un error intern al DBus perm 0x%x no vàlid\n"
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "no es permet el prefix de denegació"
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "no es permet el prefix del propietari"
|
||||
|
||||
#: parser_yacc.y:660
|
||||
msgid "owner prefix not allow on mount rules"
|
||||
msgstr ""
|
||||
msgstr "el prefix propietari no permet les regles de muntatge"
|
||||
|
||||
#: parser_yacc.y:677
|
||||
msgid "owner prefix not allow on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "el prefix del propietari no permet a les regles de dbus"
|
||||
|
||||
#: parser_yacc.y:704
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
msgstr "el prefix del propietari no permet les regles de capacitat"
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
msgstr "el muntatge condicional %s%s no és vàlid"
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
msgstr "regla de muntatge incorrecta"
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
msgstr "les condicions del punt de muntatge no són compatibles actualment"
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
msgstr "la condició «%s» de l'arrel dinàmica no és vàlida"
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
"%s: error d'agrupament d'expressions regulars: tancament invàlid ], no s'ha "
|
||||
"trobat cap obert coincident [ detectat\n"
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
"%s: Error d'agrupament d'expressions regulars: s'ha superat la imbricació "
|
||||
"màxima de {}\n"
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"S'ha produït un error en processar les regles policydb per al perfil %s, no "
|
||||
"s'ha pogut carregar\n"
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"ERROR en substituir els àlies del perfil %s, no s'ha pogut carregar\n"
|
||||
|
||||
#: ../parser_interface.c:635 ../parser_interface.c:638
|
||||
#, c-format
|
||||
msgid "%s: Unable to write %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s: no s'ha pogut escriure %s\n"
|
||||
|
||||
#: ../parser_main.c:721
|
||||
#, c-format
|
||||
msgid "Error: Could not read binary profile or cache file %s: %s.\n"
|
||||
msgstr ""
|
||||
"Error: no s'ha pogut llegir el perfil binari o el fitxer de memòria cau %s: "
|
||||
"%s.\n"
|
||||
|
||||
#: ../parser_main.c:811
|
||||
#, c-format
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
"Error: no s'ha pogut llegir el fitxer de la memòria cau «%s», s'omet...\n"
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Intern: al mode %s el caràcter «%c» no és l'esperat"
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Error intern generat no vàlid %s perm 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:703
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
msgstr "no es permet el prefix del propietari a les regles de muntatge"
|
||||
|
||||
#: parser_yacc.y:720
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "no es permet el prefix del propietari a les regles de dbus"
|
||||
|
||||
#: parser_yacc.y:736
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
msgstr "no es permet el prefix del propietari a les regles del senyal"
|
||||
|
||||
#: parser_yacc.y:752
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
msgstr "no es permet el prefix del propietari a les regles «ptrace»"
|
||||
|
||||
#: parser_yacc.y:768
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
msgstr "no es permet el prefix del propietari a les regles unix"
|
||||
|
||||
#: parser_yacc.y:794
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
msgstr "no es permet el prefix del propietari a les regles de capacitat"
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "regla dbus: el grup condicional %s()() no és vàlid"
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "regla unix: el grup condicional %s()() no és vàlid"
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
msgstr "%s: error d'expressió regular: caràcter d'escapament «\\» al final\n"
|
||||
|
302
parser/po/cs.po
302
parser/po/cs.po
@@ -6,130 +6,142 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-15 02:07+0000\n"
|
||||
"Last-Translator: Novell Language <Unknown>\n"
|
||||
"PO-Revision-Date: 2022-03-10 18:26+0000\n"
|
||||
"Last-Translator: Marek Hladík <mhladik@seznam.cz>\n"
|
||||
"Language-Team: Novell Language <language@novell.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2022-03-11 06:22+0000\n"
|
||||
"X-Generator: Launchpad (build 61f4697954ab70d633d14d8ceecff69a20b08a6b)\n"
|
||||
"Language: cs\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
#: ../parser_include.c:113 ../parser_include.c:111 ../parser_include.c:96
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr "Chyba: Nedostatek paměti\n"
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#: ../parser_include.c:123 ../parser_include.c:121 ../parser_include.c:106
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr "Chyba: Základní adresář %s není adresář, přeskakuje se.\n"
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#: ../parser_include.c:137 ../parser_include.c:122
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr "Chyba: Adresář %s nelze přidat ke hledané cestě.\n"
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
#: ../parser_include.c:147 ../parser_include.c:151 ../parser_include.c:136
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr "Chyba: Nelze přidělit paměť\n"
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
#: ../parser_interface.c:52
|
||||
msgid "Bad write position\n"
|
||||
msgstr "Špatná pozice zápisu\n"
|
||||
|
||||
#: ../parser_interface.c:72 ../parser_interface.c:75 ../parser_interface.c:52
|
||||
#: ../parser_interface.c:55
|
||||
msgid "Permission denied\n"
|
||||
msgstr "Oprávnění odepřeno\n"
|
||||
|
||||
#: ../parser_interface.c:75 ../parser_interface.c:78 ../parser_interface.c:55
|
||||
#: ../parser_interface.c:58
|
||||
msgid "Out of memory\n"
|
||||
msgstr "Nedostatek paměti\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
#: ../parser_interface.c:61
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
msgstr "Nelze zkopírovat profil: Špatná adresa paměti\n"
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
#: ../parser_interface.c:64
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
msgstr "Profil neodpovídá protokolu\n"
|
||||
|
||||
#: ../parser_interface.c:84 ../parser_interface.c:87 ../parser_interface.c:64
|
||||
#: ../parser_interface.c:67
|
||||
msgid "Profile does not match signature\n"
|
||||
msgstr "Profil neodpovídá podpisu\n"
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
#: ../parser_interface.c:70
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr "Modul Apparmor nepodporuje verzi profilu.\n"
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
#: ../parser_interface.c:73
|
||||
msgid "Profile already exists\n"
|
||||
msgstr "Profil již existuje\n"
|
||||
|
||||
#: ../parser_interface.c:93 ../parser_interface.c:96 ../parser_interface.c:73
|
||||
#: ../parser_interface.c:76
|
||||
msgid "Profile doesn't exist\n"
|
||||
msgstr "Profil neexistuje\n"
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
#: ../parser_interface.c:79
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
msgstr "Přístup odepřen. Pokoušíte se načíst profil, i přes jistá omezeni?\n"
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#: ../parser_interface.c:82
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
msgstr "Neznámá chyba (%d): %s\n"
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119 ../parser_interface.c:96
|
||||
#: ../parser_interface.c:100
|
||||
#, c-format
|
||||
msgid "%s: Unable to add \"%s\". "
|
||||
msgstr "%s: Nelze přidat \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:121 ../parser_interface.c:124
|
||||
#: ../parser_interface.c:101
|
||||
#: ../parser_interface.c:101 ../parser_interface.c:105
|
||||
#, c-format
|
||||
msgid "%s: Unable to replace \"%s\". "
|
||||
msgstr "%s: Nelze nahradit \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:126 ../parser_interface.c:129
|
||||
#: ../parser_interface.c:106
|
||||
#: ../parser_interface.c:106 ../parser_interface.c:110
|
||||
#, c-format
|
||||
msgid "%s: Unable to remove \"%s\". "
|
||||
msgstr "%s: Nelze odstranit \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:134
|
||||
#: ../parser_interface.c:111
|
||||
#: ../parser_interface.c:111 ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to stdout\n"
|
||||
msgstr "%s: nelze zapisovat na standardní výstup\n"
|
||||
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:138
|
||||
#: ../parser_interface.c:115
|
||||
#: ../parser_interface.c:115 ../parser_interface.c:119
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Nelze zapsat výstupní soubor\n"
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
#: ../parser_interface.c:118 ../parser_interface.c:142
|
||||
#: ../parser_interface.c:123 ../parser_interface.c:147
|
||||
#, c-format
|
||||
msgid "%s: ASSERT: Invalid option: %d\n"
|
||||
msgstr "%s: ASSERT: neplatná volba: %d\n"
|
||||
|
||||
#: ../parser_interface.c:147 ../parser_interface.c:150
|
||||
#: ../parser_interface.c:127
|
||||
#: ../parser_interface.c:127 ../parser_interface.c:132
|
||||
#, c-format
|
||||
msgid "Addition succeeded for \"%s\".\n"
|
||||
msgstr "Přidání uspělo pro \"%s\".\n"
|
||||
|
||||
#: ../parser_interface.c:151 ../parser_interface.c:154
|
||||
#: ../parser_interface.c:131
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:136
|
||||
#, c-format
|
||||
msgid "Replacement succeeded for \"%s\".\n"
|
||||
msgstr "Nahrazení uspělo pro \"%s\".\n"
|
||||
|
||||
#: ../parser_interface.c:155 ../parser_interface.c:158
|
||||
#: ../parser_interface.c:135
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:140
|
||||
#, c-format
|
||||
msgid "Removal succeeded for \"%s\".\n"
|
||||
msgstr "Odstranění uspělo pro \"%s\".\n"
|
||||
@@ -140,14 +152,14 @@ msgid "PANIC bad increment buffer %p pos %p ext %p size %d res %p\n"
|
||||
msgstr "PANIKA: chybný přírůstkový buffer %p pos %p ext %p size %d res %p\n"
|
||||
|
||||
#: ../parser_interface.c:656 ../parser_interface.c:658
|
||||
#: ../parser_interface.c:446
|
||||
#: ../parser_interface.c:446 ../parser_interface.c:476
|
||||
#, c-format
|
||||
msgid "profile %s network rules not enforced\n"
|
||||
msgstr ""
|
||||
msgstr "profilu %s nejsou vynucena síťová pravidla\n"
|
||||
|
||||
#: ../parser_interface.c:666
|
||||
msgid "Unknown pattern type\n"
|
||||
msgstr ""
|
||||
msgstr "Neznámý typ vzoru\n"
|
||||
|
||||
#: ../parser_interface.c:750 ../parser_interface.c:902
|
||||
#: ../parser_interface.c:743 ../parser_interface.c:894
|
||||
@@ -185,35 +197,35 @@ msgid "%s: Unable to write entire profile entry\n"
|
||||
msgstr "%s: Nelze zapsat celý záznam profilu\n"
|
||||
|
||||
#: ../parser_interface.c:839 ../parser_interface.c:831
|
||||
#: ../parser_interface.c:593
|
||||
#: ../parser_interface.c:593 ../parser_interface.c:579
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Nelze zapsat celý záznam profilu do mezipaměti\n"
|
||||
|
||||
#: parser_lex.l:100 parser_lex.l:163 parser_lex.l:169
|
||||
#, c-format
|
||||
msgid "Could not open '%s'"
|
||||
msgstr ""
|
||||
msgstr "Nelze otevřít '%s'"
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173 parser_lex.l:174
|
||||
#, c-format
|
||||
msgid "fstat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "fstat selhal pro '%s'"
|
||||
|
||||
#: parser_lex.l:121
|
||||
#, c-format
|
||||
msgid "opendir failed '%s'"
|
||||
msgstr ""
|
||||
msgstr "opendir selhal '%s'"
|
||||
|
||||
#: parser_lex.l:152
|
||||
#, c-format
|
||||
msgid "stat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "stat selhal pro '%s'"
|
||||
|
||||
#: parser_lex.l:155 parser_lex.l:133 parser_lex.l:139
|
||||
#, c-format
|
||||
msgid "Could not open '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "Nelze otevřít '%s' v '%s'"
|
||||
|
||||
#: parser_lex.l:284 parser_lex.l:322 parser_lex.l:362 parser_lex.l:399
|
||||
#: parser_lex.l:469 parser_lex.l:655 parser_lex.l:586 parser_lex.l:638
|
||||
@@ -221,9 +233,9 @@ msgstr ""
|
||||
msgid "Found unexpected character: '%s'"
|
||||
msgstr "Nalezen neočekávaný znak: '%s'"
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428 parser_lex.l:474
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
msgstr "U deklarace proměnných nejsou přípustné koncové čárky"
|
||||
|
||||
#: parser_lex.l:420
|
||||
#, c-format
|
||||
@@ -233,7 +245,7 @@ msgstr "(režim_sítě) Nalezen neplatný znak: '%s'"
|
||||
#: ../parser_main.c:333 ../parser_common.c:61 ../parser_common.c:106
|
||||
#, c-format
|
||||
msgid "Warning from %s (%s%sline %d): %s"
|
||||
msgstr ""
|
||||
msgstr "Pozor na %s (%s%s řádku %d): %s"
|
||||
|
||||
#: ../parser_main.c:531
|
||||
#, c-format
|
||||
@@ -241,6 +253,7 @@ msgid "%s: Could not allocate memory for subdomainbase mount point\n"
|
||||
msgstr "%s: Nelze alokovat paměť pro bod připojení subdomainbase\n"
|
||||
|
||||
#: ../parser_main.c:577 ../parser_main.c:616 ../parser_main.c:479
|
||||
#: ../parser_main.c:1444
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Warning: unable to find a suitable fs in %s, is it mounted?\n"
|
||||
@@ -250,6 +263,7 @@ msgstr ""
|
||||
"Možnost lze přepsat pomocí možnosti --subdomainfs.\n"
|
||||
|
||||
#: ../parser_main.c:597 ../parser_main.c:635 ../parser_main.c:498
|
||||
#: ../parser_main.c:822
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Sorry. You need root privileges to run this program.\n"
|
||||
@@ -259,6 +273,7 @@ msgstr ""
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:604 ../parser_main.c:642 ../parser_main.c:505
|
||||
#: ../parser_main.c:828
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Warning! You've set this program setuid root.\n"
|
||||
@@ -272,7 +287,7 @@ msgstr ""
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:704 ../parser_main.c:813 ../parser_main.c:836
|
||||
#: ../parser_main.c:946 ../parser_main.c:860
|
||||
#: ../parser_main.c:946 ../parser_main.c:860 ../parser_main.c:1038
|
||||
#, c-format
|
||||
msgid "Error: Could not read profile %s: %s.\n"
|
||||
msgstr "Chyba: Nelze číst profil %s: %s.\n"
|
||||
@@ -294,26 +309,36 @@ msgstr "Chyba: Nelze číst profil %s: %s.\n"
|
||||
#: parser_yacc.y:1166 parser_yacc.y:1170 parser_yacc.y:1180 parser_yacc.y:1190
|
||||
#: parser_yacc.y:1298 parser_yacc.y:1376 parser_yacc.y:1479 parser_yacc.y:1490
|
||||
#: parser_yacc.y:1565 parser_yacc.y:1583 parser_yacc.y:1590 parser_yacc.y:1639
|
||||
#: ../network.c:314 ../af_unix.cc:203
|
||||
#: ../network.c:314 ../af_unix.cc:203 ../parser_misc.c:215 ../parser_misc.c:939
|
||||
#: parser_yacc.y:343 parser_yacc.y:367 parser_yacc.y:533 parser_yacc.y:543
|
||||
#: parser_yacc.y:660 parser_yacc.y:741 parser_yacc.y:750 parser_yacc.y:1171
|
||||
#: parser_yacc.y:1219 parser_yacc.y:1255 parser_yacc.y:1264 parser_yacc.y:1268
|
||||
#: parser_yacc.y:1278 parser_yacc.y:1288 parser_yacc.y:1382 parser_yacc.y:1460
|
||||
#: parser_yacc.y:1592 parser_yacc.y:1597 parser_yacc.y:1674 parser_yacc.y:1692
|
||||
#: parser_yacc.y:1699 parser_yacc.y:1748 ../network.c:315 ../af_unix.cc:194
|
||||
msgid "Memory allocation error."
|
||||
msgstr "Chyba alokace paměti."
|
||||
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#: ../parser_main.c:975
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "Načtení z mezipaměti pro „%s“ bylo úspěšné\n"
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#: ../parser_main.c:979
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "Opětovné načtení mezipaměti pro „%s“ bylo úspěšné\n"
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#: ../parser_main.c:1132
|
||||
#, c-format
|
||||
msgid "%s: Errors found in file. Aborting.\n"
|
||||
msgstr "%s: Chyby v souboru. Ukončuji.\n"
|
||||
|
||||
#: ../parser_misc.c:426 ../parser_misc.c:597 ../parser_misc.c:339
|
||||
#: ../parser_misc.c:532
|
||||
msgid ""
|
||||
"Uppercase qualifiers \"RWLIMX\" are deprecated, please convert to lowercase\n"
|
||||
"See the apparmor.d(5) manpage for details.\n"
|
||||
@@ -324,16 +349,19 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:467 ../parser_misc.c:474 ../parser_misc.c:638
|
||||
#: ../parser_misc.c:645 ../parser_misc.c:380 ../parser_misc.c:387
|
||||
#: ../parser_misc.c:573 ../parser_misc.c:580
|
||||
msgid "Conflict 'a' and 'w' perms are mutually exclusive."
|
||||
msgstr "Oprávnění 'a' a 'w' se vzájemně vylučují."
|
||||
|
||||
#: ../parser_misc.c:491 ../parser_misc.c:662 ../parser_misc.c:404
|
||||
#: ../parser_misc.c:597
|
||||
msgid "Exec qualifier 'i' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
"Exec kvalifikátor 'i' je neplatný, byl již specifikován konfliktní "
|
||||
"kvalifikátor"
|
||||
|
||||
#: ../parser_misc.c:502 ../parser_misc.c:673 ../parser_misc.c:415
|
||||
#: ../parser_misc.c:608
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unconfined exec qualifier (%c%c) allows some dangerous environment variables "
|
||||
@@ -345,6 +373,7 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:510 ../parser_misc.c:551 ../parser_misc.c:681
|
||||
#: ../parser_misc.c:722 ../parser_misc.c:423 ../parser_misc.c:464
|
||||
#: ../parser_misc.c:616 ../parser_misc.c:657
|
||||
#, c-format
|
||||
msgid "Exec qualifier '%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
@@ -353,6 +382,7 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:537 ../parser_misc.c:545 ../parser_misc.c:708
|
||||
#: ../parser_misc.c:716 ../parser_misc.c:450 ../parser_misc.c:458
|
||||
#: ../parser_misc.c:643 ../parser_misc.c:651
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Exec qualifier '%c%c' invalid, conflicting qualifier already specified"
|
||||
@@ -361,11 +391,13 @@ msgstr ""
|
||||
"kvalifikátor"
|
||||
|
||||
#: ../parser_misc.c:593 ../parser_misc.c:764 ../parser_misc.c:506
|
||||
#: ../parser_misc.c:699
|
||||
#, c-format
|
||||
msgid "Internal: unexpected mode character '%c' in input"
|
||||
msgstr "Vnitřní: Neznámý znak režimu '%c' na vstupu."
|
||||
|
||||
#: ../parser_misc.c:615 ../parser_misc.c:786 ../parser_misc.c:528
|
||||
#: ../parser_misc.c:721
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid perm 0x%llx\n"
|
||||
msgstr "Vnitřní chyba způsobila neplatné perm 0x%llx\n"
|
||||
@@ -377,137 +409,148 @@ msgid "AppArmor parser error: %s\n"
|
||||
msgstr "Chyba parseru AppArmor: %s\n"
|
||||
|
||||
#: ../parser_merge.c:92 ../parser_merge.c:91 ../parser_merge.c:83
|
||||
#: ../parser_merge.c:71
|
||||
msgid "Couldn't merge entries. Out of Memory\n"
|
||||
msgstr "Nelze sloučit záznamy. Nedostatek paměti\n"
|
||||
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#: ../parser_merge.c:93
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
msgstr "profil %s: bylo sloučeno pravidlo %s s konfliktními x modifikátory\n"
|
||||
|
||||
#: parser_yacc.y:236 parser_yacc.y:277 parser_yacc.y:320
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
msgstr "Příloha profilu musí začínat znakem '/'."
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348 parser_yacc.y:407
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
"Názvy profilů musí začínat znakem '/', jmenným prostorem nebo klíčovým "
|
||||
"slovem 'profile' nebo 'hat'."
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384 parser_yacc.y:449
|
||||
#, c-format
|
||||
msgid "Failed to create alias %s -> %s\n"
|
||||
msgstr "Nelze vytvořit alias %s -> %s\n"
|
||||
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506 parser_yacc.y:581
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
"Příznak profilu 'chroot_relative' je v konfliktu s 'namespace_relative'"
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510 parser_yacc.y:585
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
"Příznak profilu 'mediate_deleted' je v konfliktu s 'delegate_deleted'"
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513 parser_yacc.y:588
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
"Příznak profilu 'connect_disconnected' je v konfliktu s "
|
||||
"'no_attach_disconnected'"
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516 parser_yacc.y:591
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
msgstr "Příznak profilu 'chroot_attach' je v konfliktu s 'chroot_no_attach'"
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530 parser_yacc.y:607
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
msgstr "Příznak profilu 'debug' již není platný."
|
||||
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552 parser_yacc.y:629
|
||||
#, c-format
|
||||
msgid "Invalid profile flag: %s."
|
||||
msgstr "Neplatný příznak profilu: %s."
|
||||
|
||||
#: parser_yacc.y:498 parser_yacc.y:520 parser_yacc.y:548 parser_yacc.y:594
|
||||
#: parser_yacc.y:673
|
||||
msgid "Assert: `rule' returned NULL."
|
||||
msgstr "Assert: `rule' vrátil NULL."
|
||||
|
||||
#: parser_yacc.y:501 parser_yacc.y:546 parser_yacc.y:552 parser_yacc.y:584
|
||||
#: parser_yacc.y:598 parser_yacc.y:630
|
||||
#: parser_yacc.y:598 parser_yacc.y:630 parser_yacc.y:677 parser_yacc.y:709
|
||||
msgid ""
|
||||
"Invalid mode, in deny rules 'x' must not be preceded by exec qualifier 'i', "
|
||||
"'p', or 'u'"
|
||||
msgstr ""
|
||||
"Neplatný režim, před 'x' musí být exec kvalifikátor 'i', 'p' nebo 'u'"
|
||||
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602 parser_yacc.y:681
|
||||
msgid ""
|
||||
"Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', 'c', or 'u'"
|
||||
msgstr ""
|
||||
"Neplatný režim, před 'x' musí být exec kvalifikátor 'i', 'p', 'c' nebo 'u'"
|
||||
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633 parser_yacc.y:712
|
||||
msgid "Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'"
|
||||
msgstr "Neplatný režim, před 'x' musí být kvalifikátor 'i', 'p' nebo 'u'."
|
||||
|
||||
#: parser_yacc.y:574 parser_yacc.y:612 parser_yacc.y:614 parser_yacc.y:660
|
||||
#: parser_yacc.y:739
|
||||
msgid "Assert: `network_rule' return invalid protocol."
|
||||
msgstr "Assert: `pravidlo_sítě' vrací neplatný protokol."
|
||||
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786 parser_yacc.y:867
|
||||
msgid "Assert: `change_profile' returned NULL."
|
||||
msgstr "Assert: `změna_profilu' vrátila hodnotu NULL."
|
||||
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810 parser_yacc.y:905
|
||||
msgid "Assert: 'hat rule' returned NULL."
|
||||
msgstr "Assert: 'hat rule' vrátil NULL."
|
||||
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819 parser_yacc.y:914
|
||||
msgid "Assert: 'local_profile rule' returned NULL."
|
||||
msgstr "Assert: 'local_profile rule' vrátil NULL."
|
||||
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992 parser_yacc.y:1077
|
||||
#, c-format
|
||||
msgid "Unset boolean variable %s used in if-expression"
|
||||
msgstr "Ve výrazu 'if' byla použita nenastavená booleovská proměnná %s."
|
||||
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092 parser_yacc.y:1181
|
||||
msgid "unsafe rule missing exec permissions"
|
||||
msgstr "nebezpečné pravidlo nemá oprávnění ke spuštění"
|
||||
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060 parser_yacc.y:1148
|
||||
msgid "subset can only be used with link rules."
|
||||
msgstr "podskupina může být použita pouze s pravidly odkazů."
|
||||
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062 parser_yacc.y:1150
|
||||
msgid "link and exec perms conflict on a file rule using ->"
|
||||
msgstr "link a exec perms konflikt souboru pravidel používajícím ->"
|
||||
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064 parser_yacc.y:1152
|
||||
msgid "link perms are not allowed on a named profile transition.\n"
|
||||
msgstr "link perms nejsou povoleny na přechodu pojmenovaného profilu.\n"
|
||||
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109 parser_yacc.y:1198
|
||||
#, c-format
|
||||
msgid "missing an end of line character? (entry: %s)"
|
||||
msgstr "chybí znak konce řádku? (záznam: %s)"
|
||||
|
||||
#: parser_yacc.y:975 parser_yacc.y:985 parser_yacc.y:1057 parser_yacc.y:1067
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155 parser_yacc.y:1234 parser_yacc.y:1244
|
||||
msgid "Invalid network entry."
|
||||
msgstr "Neplatná položka sítě."
|
||||
|
||||
#: parser_yacc.y:1039 parser_yacc.y:1048 parser_yacc.y:1254 parser_yacc.y:1510
|
||||
#: parser_yacc.y:1617
|
||||
#, c-format
|
||||
msgid "Invalid capability %s."
|
||||
msgstr "Neplatná schopnost %s."
|
||||
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525 parser_yacc.y:1637
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Chyba parseru AppArmor pro %s%s%s na řádku %d: %s\n"
|
||||
|
||||
#: parser_yacc.y:1072 parser_yacc.y:1275 parser_yacc.y:1531
|
||||
#, c-format
|
||||
msgid "AppArmor parser error,%s%s line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Chyba parseru AppArmor, %s%s řádek %d: %s\n"
|
||||
|
||||
#: ../parser_regex.c:244
|
||||
#, c-format
|
||||
@@ -515,11 +558,13 @@ msgid "%s: Illegal open {, nesting groupings not allowed\n"
|
||||
msgstr "%s: nepovolená otvírací {, vnořené seskupování není povoleno\n"
|
||||
|
||||
#: ../parser_regex.c:265 ../parser_regex.c:274 ../parser_regex.c:278
|
||||
#: ../parser_regex.c:306
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Invalid number of items between {}\n"
|
||||
msgstr "%s: Chyba seskupování regex: neplatný počet položek mezi {}\n"
|
||||
|
||||
#: ../parser_regex.c:271 ../parser_regex.c:280 ../parser_regex.c:284
|
||||
#: ../parser_regex.c:312
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close }, no matching open { detected\n"
|
||||
@@ -528,6 +573,7 @@ msgstr ""
|
||||
"otevírací {\n"
|
||||
|
||||
#: ../parser_regex.c:337 ../parser_regex.c:343 ../parser_regex.c:361
|
||||
#: ../parser_regex.c:403
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Unclosed grouping or character class, expecting "
|
||||
@@ -542,16 +588,19 @@ msgid "%s: Internal buffer overflow detected, %d characters exceeded\n"
|
||||
msgstr "%s: Detekováno vnitřní přetečení zásobníku, přesáhlo %d znaků\n"
|
||||
|
||||
#: ../parser_regex.c:355 ../parser_regex.c:361 ../parser_regex.c:377
|
||||
#: ../parser_regex.c:419
|
||||
#, c-format
|
||||
msgid "%s: Unable to parse input line '%s'\n"
|
||||
msgstr "%s: Nelze analyzovat vstupní řádku '%s'\n"
|
||||
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#: ../parser_regex.c:487
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Neplatné jméno profilu '%s' - špatný regulární výraz\n"
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#: ../parser_policy.c:383
|
||||
#, c-format
|
||||
msgid "ERROR merging rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
@@ -569,6 +618,7 @@ msgstr ""
|
||||
"\t'**' lze použít pouze na konci pravidla.\n"
|
||||
|
||||
#: ../parser_policy.c:279 ../parser_policy.c:359 ../parser_policy.c:332
|
||||
#: ../parser_policy.c:340
|
||||
#, c-format
|
||||
msgid "ERROR processing regexs for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
@@ -576,12 +626,14 @@ msgstr ""
|
||||
"načítání.\n"
|
||||
|
||||
#: ../parser_policy.c:306 ../parser_policy.c:389 ../parser_policy.c:362
|
||||
#: ../parser_policy.c:370
|
||||
#, c-format
|
||||
msgid "ERROR expanding variables for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"CHYBA při rozšíření proměnných pro profil %s, došlo k chybě při načítání.\n"
|
||||
|
||||
#: ../parser_policy.c:390 ../parser_policy.c:382 ../parser_policy.c:355
|
||||
#: ../parser_policy.c:363
|
||||
#, c-format
|
||||
msgid "ERROR adding hat access rule for profile %s\n"
|
||||
msgstr "Chyba při přidání pravidla pro přístup k hat pro profil %s\n"
|
||||
@@ -613,164 +665,170 @@ msgid "%s: Errors found in combining rules postprocessing. Aborting.\n"
|
||||
msgstr ""
|
||||
"%s: Nalezeny chyby při postprocesingu kombinačních pravidel. Ukončuji.\n"
|
||||
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#: parser_lex.l:180 parser_lex.l:186 parser_lex.l:187
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "Nelze zpracovat vloženého adresáře '%s' v '%s'"
|
||||
|
||||
#: ../parser_main.c:660 ../parser_main.c:523
|
||||
msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
msgstr "Vyrovnávací paměť pro funkce je plná."
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
#: ../parser_main.c:1041 ../parser_main.c:1332 ../parser_main.c:1354
|
||||
#: ../parser_misc.c:280 ../parser_misc.c:299 ../parser_misc.c:308
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
msgstr "Nedostatek paměti"
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
msgid "Can't create cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Nelze vytvořit adresář mezipaměti: %s\n"
|
||||
|
||||
#: ../parser_main.c:1185 ../parser_main.c:1094
|
||||
#, c-format
|
||||
msgid "File in cache directory location: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Soubor v adresáři mezipaměti: %s\n"
|
||||
|
||||
#: ../parser_main.c:1188 ../parser_main.c:1097
|
||||
#, c-format
|
||||
msgid "Can't update cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Nelze aktualizovat adresář mezipaměti: %s\n"
|
||||
|
||||
#: ../parser_misc.c:833
|
||||
#, c-format
|
||||
msgid "Internal: unexpected DBus mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interní: Neočekávaný znak '%c' režimu DBus na vstupu"
|
||||
|
||||
#: ../parser_misc.c:857
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Interní chyba vygenerovaná neplatnou DBus perm 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
#: parser_yacc.y:575 parser_yacc.y:621 parser_yacc.y:700
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "deny prefix není povolen"
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
#: parser_yacc.y:612 parser_yacc.y:658 parser_yacc.y:737
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není povolen"
|
||||
|
||||
#: parser_yacc.y:660
|
||||
msgid "owner prefix not allow on mount rules"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není povolen v pravidlech pro připojení"
|
||||
|
||||
#: parser_yacc.y:677
|
||||
msgid "owner prefix not allow on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není povolen v pravidlech dbus"
|
||||
|
||||
#: parser_yacc.y:704
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není povolen v pravidlech schopností"
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613 parser_yacc.y:1722
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
msgstr "neplatná podmínka připojení %s%s"
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628 parser_yacc.y:1737
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
msgstr "špatné pravidlo připojení"
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635 parser_yacc.y:1744
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
msgstr "podmínky přípojného bodu nejsou aktuálně podporovány"
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650 parser_yacc.y:1759
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
msgstr "neplatný podmíněný pivotroot '%s'"
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236 ../parser_regex.c:264
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
"%s: Chyba seskupení regulárních výrazů: Neplatné uzavření ], nebylo zjištěno "
|
||||
"žádné odpovídající otevření [\n"
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256 ../parser_regex.c:284
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
"%s: Chyba seskupení regulárních výrazů: Překročen maximální počet vnoření "
|
||||
"{}\n"
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339 ../parser_policy.c:347
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"CHYBA zpracování pravidel policydb pro profil %s, načtení se nezdařilo\n"
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369 ../parser_policy.c:377
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "CHYBA při nahrazení aliasů pro profil %s, načtení se nezdařilo\n"
|
||||
|
||||
#: ../parser_interface.c:635 ../parser_interface.c:638
|
||||
#, c-format
|
||||
msgid "%s: Unable to write %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Nelze zapsat %s\n"
|
||||
|
||||
#: ../parser_main.c:721
|
||||
#, c-format
|
||||
msgid "Error: Could not read binary profile or cache file %s: %s.\n"
|
||||
msgstr ""
|
||||
msgstr "Chyba: Nelze přečíst binární profil nebo soubor mezipaměti %s: %s.\n"
|
||||
|
||||
#: ../parser_main.c:811
|
||||
#, c-format
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
msgstr "Chyba: Nelze přečíst soubor mezipaměti '%s', přeskočení...\n"
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#: ../parser_misc.c:575 ../parser_misc.c:768
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interní: V režimu %s se na vstupu vyskytl neočekávaný znak '%c'"
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#: ../parser_misc.c:599 ../parser_misc.c:792
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Interní chyba vygenerovala neplatné %s perm 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:703
|
||||
#: parser_yacc.y:703 parser_yacc.y:784
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není v pravidlech připojení povolen"
|
||||
|
||||
#: parser_yacc.y:720
|
||||
#: parser_yacc.y:720 parser_yacc.y:801
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není v pravidlech dbus povolen"
|
||||
|
||||
#: parser_yacc.y:736
|
||||
#: parser_yacc.y:736 parser_yacc.y:817
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není v pravidlech signálu povolen"
|
||||
|
||||
#: parser_yacc.y:752
|
||||
#: parser_yacc.y:752 parser_yacc.y:833
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není v pravidlech ptrace povolen"
|
||||
|
||||
#: parser_yacc.y:768
|
||||
#: parser_yacc.y:768 parser_yacc.y:849 parser_yacc.y:869
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není v pravidlech unixu povolen"
|
||||
|
||||
#: parser_yacc.y:794
|
||||
#: parser_yacc.y:794 parser_yacc.y:885
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
msgstr "prefix vlastníka není v pravidlech schopností povolen"
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#: parser_yacc.y:1293 parser_yacc.y:1377
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "pravidlo dbus: neplatná podmíněná skupina %s=()"
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#: parser_yacc.y:1371 parser_yacc.y:1455
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "unixové pravidlo: neplatná podmíněná skupina %s=()"
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#: ../parser_regex.c:368 ../parser_regex.c:410
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Chyba regulárního výrazu: koncový znak escape '\\'\n"
|
||||
|
133
parser/po/es.po
133
parser/po/es.po
@@ -6,38 +6,38 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-26 03:48+0000\n"
|
||||
"Last-Translator: Monkey <monkey.libre@gmail.com>\n"
|
||||
"PO-Revision-Date: 2024-10-09 22:03+0000\n"
|
||||
"Last-Translator: Rodrigo Lledó <rodhos92@gmail.com>\n"
|
||||
"Language-Team: Novell Language <language@novell.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2024-10-10 07:50+0000\n"
|
||||
"X-Generator: Launchpad (build 6341c735b243a0768c3cb66edf85737937cab327)\n"
|
||||
"Language: es\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr "Error: memoria insuficiente.\n"
|
||||
msgstr "Error: Memoria insuficiente.\n"
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr "Error: el directorio base %s no es un directorio. Se va a omitir.\n"
|
||||
msgstr "Error: el directorio base %s no es un directorio. Será omitido.\n"
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr ""
|
||||
"Error: no se ha podido añadir el directorio %s a la vía de búsqueda.\n"
|
||||
"Error: No se ha podido añadir el directorio %s a la ruta de búsqueda.\n"
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr "Error: no es posible asignar memoria.\n"
|
||||
msgstr "Error: la memoria no pudo ser asignada.\n"
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
msgid "Bad write position\n"
|
||||
msgstr "Posición de escritura incorrecta\n"
|
||||
msgstr "Escrito en el lugar equivocado.\n"
|
||||
|
||||
#: ../parser_interface.c:72 ../parser_interface.c:75 ../parser_interface.c:52
|
||||
msgid "Permission denied\n"
|
||||
@@ -45,15 +45,15 @@ msgstr "Permiso denegado\n"
|
||||
|
||||
#: ../parser_interface.c:75 ../parser_interface.c:78 ../parser_interface.c:55
|
||||
msgid "Out of memory\n"
|
||||
msgstr "Memoria agotada\n"
|
||||
msgstr "Sin memoria.\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr "No se puede copiar el perfil. Dirección de memoria incorrecta\n"
|
||||
msgstr "No se pudo copiar el perfil. Dirección de memoria incorrecta.\n"
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
msgstr "El perfil no se ajusta al protocolo\n"
|
||||
msgstr "El perfil no cumple el protocolo.\n"
|
||||
|
||||
#: ../parser_interface.c:84 ../parser_interface.c:87 ../parser_interface.c:64
|
||||
msgid "Profile does not match signature\n"
|
||||
@@ -61,7 +61,7 @@ msgstr "El perfil no coincide con la firma\n"
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr "La versión del perfil no se admite en el módulo de Apparmor.\n"
|
||||
msgstr "Versión del perfil no compatible con el módulo Apparmor.\n"
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
msgid "Profile already exists\n"
|
||||
@@ -73,8 +73,7 @@ msgstr "El perfil no existe\n"
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
"Permiso denegado. ¿Intentando cargar un perfil mientras estaba confinado?\n"
|
||||
msgstr "Permiso denegado. ¿Intentó cargar un perfil restringido?\n"
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#, c-format
|
||||
@@ -140,8 +139,7 @@ msgstr "Eliminación correcta de \"%s\".\n"
|
||||
#, c-format
|
||||
msgid "PANIC bad increment buffer %p pos %p ext %p size %d res %p\n"
|
||||
msgstr ""
|
||||
"PANIC: incremento de buffer incorrecto; pos %p; ext %p; tamaño %p; res %d "
|
||||
"%p\n"
|
||||
"PÁNICO: error en el aumento del búfer %p pos %p ext %p size %d res %p\n"
|
||||
|
||||
#: ../parser_interface.c:656 ../parser_interface.c:658
|
||||
#: ../parser_interface.c:446
|
||||
@@ -186,18 +184,18 @@ msgstr "no es posible poner en serie el perfil %s\n"
|
||||
#: ../parser_interface.c:582
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry\n"
|
||||
msgstr "%s: no es posible escribir todo el perfil\n"
|
||||
msgstr "%s: no es posible escribir el acceso al perfil completo\n"
|
||||
|
||||
#: ../parser_interface.c:839 ../parser_interface.c:831
|
||||
#: ../parser_interface.c:593
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr "%s: Imposible escribir la entrada de perfil completa a la caché\n"
|
||||
msgstr "%s: no es posible escribir el acceso al perfil completo al caché\n"
|
||||
|
||||
#: parser_lex.l:100 parser_lex.l:163 parser_lex.l:169
|
||||
#, c-format
|
||||
msgid "Could not open '%s'"
|
||||
msgstr "No se pudo abrir '%s'"
|
||||
msgstr "No se pudo abrir «%s»"
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#, c-format
|
||||
@@ -212,7 +210,7 @@ msgstr "opendir falló «%s»"
|
||||
#: parser_lex.l:152
|
||||
#, c-format
|
||||
msgid "stat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "stat falló para «%s»"
|
||||
|
||||
#: parser_lex.l:155 parser_lex.l:133 parser_lex.l:139
|
||||
#, c-format
|
||||
@@ -223,11 +221,11 @@ msgstr "No se pudo abrir «%s» en «%s»"
|
||||
#: parser_lex.l:469 parser_lex.l:655 parser_lex.l:586 parser_lex.l:638
|
||||
#, c-format
|
||||
msgid "Found unexpected character: '%s'"
|
||||
msgstr "Se ha detectado un carácter inesperado: '%s'"
|
||||
msgstr "Se ha detectado un carácter inesperado: «%s»"
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
msgstr "Las declaraciones de variables no aceptan comas al final"
|
||||
|
||||
#: parser_lex.l:420
|
||||
#, c-format
|
||||
@@ -237,7 +235,7 @@ msgstr "(network_mode) Se ha encontrado un carácter inesperado: %s"
|
||||
#: ../parser_main.c:333 ../parser_common.c:61 ../parser_common.c:106
|
||||
#, c-format
|
||||
msgid "Warning from %s (%s%sline %d): %s"
|
||||
msgstr ""
|
||||
msgstr "Aviso desde %s (%s%slínea %d): %s"
|
||||
|
||||
#: ../parser_main.c:531
|
||||
#, c-format
|
||||
@@ -308,12 +306,12 @@ msgstr "Error de asignación de memoria."
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "Se ha cargado caché con éxito para «%s».\n"
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "Se ha recargado caché con éxito para «%s».\n"
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#, c-format
|
||||
@@ -391,15 +389,18 @@ msgstr "No es posible fusionar las entradas. Memoria agotada\n"
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
"el perfil %s: ha fusionado la regla %s con modificadores x en conflicto\n"
|
||||
|
||||
#: parser_yacc.y:236 parser_yacc.y:277 parser_yacc.y:320
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
msgstr "El adjunto al perfil debe empezar con un «/»."
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
"Los nombres del perfil deben empezar con un «/», espacio de nombre o palabra "
|
||||
"clave «profile» o «hat»."
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#, c-format
|
||||
@@ -409,19 +410,24 @@ msgstr "Error al crear el alias %s -> %s\n"
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
"La marca del perfi chroot_relative está en conflicto con namespace_relative"
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
"La marca del perfil mediate_deleted está en conflicto con delegate_deleted"
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
"La marca del perfil attach_disconnected está en conflicto con "
|
||||
"no_attach_disconnected"
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
"La marca del perfil chroot_attach está en conflicto con chroot_no_attach"
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
@@ -516,12 +522,12 @@ msgstr "Característica no válida %s."
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Error del analizador AppArmor para %s%s%s en la línea %d: %s\n"
|
||||
|
||||
#: parser_yacc.y:1072 parser_yacc.y:1275 parser_yacc.y:1531
|
||||
#, c-format
|
||||
msgid "AppArmor parser error,%s%s line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Error de análisis AppArmor,%s%s línea %d: %s\n"
|
||||
|
||||
#: ../parser_regex.c:244
|
||||
#, c-format
|
||||
@@ -565,7 +571,7 @@ msgstr "%s: no es posible analizar la línea de entrada '%s'\n"
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
msgstr "%s: nombre de perfil no válido «%s» - expresión regular incorrecta\n"
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#, c-format
|
||||
@@ -631,161 +637,166 @@ msgstr ""
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "No se pudo procesar la inclusión del directorio «%s» en «%s»"
|
||||
|
||||
#: ../parser_main.c:660 ../parser_main.c:523
|
||||
msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
msgstr "Buffer de características lleno."
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
msgstr "Memoria agotada"
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
msgid "Can't create cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "No se puede crear el directorio de antememoria: %s\n"
|
||||
|
||||
#: ../parser_main.c:1185 ../parser_main.c:1094
|
||||
#, c-format
|
||||
msgid "File in cache directory location: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Archivo en ubicación de directorio de caché: %s\n"
|
||||
|
||||
#: ../parser_main.c:1188 ../parser_main.c:1097
|
||||
#, c-format
|
||||
msgid "Can't update cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "No se puede actualizar el directorio de caché: %s\n"
|
||||
|
||||
#: ../parser_misc.c:833
|
||||
#, c-format
|
||||
msgid "Internal: unexpected DBus mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interno: carácter de modo DBUS «%c» inesperado en entrada"
|
||||
|
||||
#: ../parser_misc.c:857
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Error interno generado perm DBus no válido 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "prefijo de denegación no permitido"
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "prefijo de propietario no permitido"
|
||||
|
||||
#: parser_yacc.y:660
|
||||
msgid "owner prefix not allow on mount rules"
|
||||
msgstr ""
|
||||
msgstr "prefijo de propietario no permitido en reglas de montaje"
|
||||
|
||||
#: parser_yacc.y:677
|
||||
msgid "owner prefix not allow on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "prefijo de propietario no permitido en reglas dbus"
|
||||
|
||||
#: parser_yacc.y:704
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
msgstr "prefijo de priopietario no permitido en reglas de capacidades"
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
msgstr "condicional de montaje %s%s no válido"
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
msgstr "regla de montaje errónea"
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
msgstr "condiciones de punto de montaje actualmente no soportadas"
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
msgstr "condicional pivotroot no válido «%s»"
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
"%s: Error de agrupamiento regex: Cierre no válido ], no se detectó pareja de "
|
||||
"apertura [\n"
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
"%s: Error de agrupamiento regex: Se excedió el máximo de anidado de {}\n"
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"ERROR al procesar reglas policydb para el perfil %s, falló al cargar\n"
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "ERROR al reemplazar aliases para el perfil %s, falló al cargar\n"
|
||||
|
||||
#: ../parser_interface.c:635 ../parser_interface.c:638
|
||||
#, c-format
|
||||
msgid "%s: Unable to write %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s: no se pudo escribir %s\n"
|
||||
|
||||
#: ../parser_main.c:721
|
||||
#, c-format
|
||||
msgid "Error: Could not read binary profile or cache file %s: %s.\n"
|
||||
msgstr ""
|
||||
"Error: no se pudo leer archivo de perfil binario o archivo de caché %s: %s.\n"
|
||||
|
||||
#: ../parser_main.c:811
|
||||
#, c-format
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
msgstr "Error: no se pudo leer archivo de caché «%s», omitiendo...\n"
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interno: modo inesperado %s carácter «%c» en la entrada"
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Un error interno ha generado un %s perm no válido 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:703
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
msgstr "prefijo de propietario no permitido en reglas de montaje"
|
||||
|
||||
#: parser_yacc.y:720
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "prefijo de propietario no permitido en reglas de dbus"
|
||||
|
||||
#: parser_yacc.y:736
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
msgstr "prefijo de propietario no permitido en reglas de señal"
|
||||
|
||||
#: parser_yacc.y:752
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
msgstr "prefijo de propietario no permitido en reglas de ptrace"
|
||||
|
||||
#: parser_yacc.y:768
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
msgstr "prefijo de propietario no permitido en las reglas de Unix"
|
||||
|
||||
#: parser_yacc.y:794
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
msgstr "prefijo de propietario no permitido en las reglas de capacidad"
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "regla dbus: grupo condicional no válido %s=()"
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "regla unix: grupo condicional no válido %s=()"
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Error regex: arrastrando carácter de escape «\\»\n"
|
||||
|
226
parser/po/fa.po
226
parser/po/fa.po
@@ -8,132 +8,145 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2019-12-27 08:23+0000\n"
|
||||
"Last-Translator: VahidNameni <Unknown>\n"
|
||||
"PO-Revision-Date: 2023-12-31 16:22+0000\n"
|
||||
"Last-Translator: S.M.Mousavi <Unknown>\n"
|
||||
"Language-Team: Persian <fa@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-12-28 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n"
|
||||
"X-Launchpad-Export-Date: 2024-01-01 04:31+0000\n"
|
||||
"X-Generator: Launchpad (build e1eeab5b20e19239bd7d5f36676f7a52988db88b)\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
#: ../parser_include.c:113 ../parser_include.c:111 ../parser_include.c:96
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr "خطا: خارج از حافظه.\n"
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#: ../parser_include.c:123 ../parser_include.c:121 ../parser_include.c:106
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr ""
|
||||
msgstr "خطا: basedir %s یک شاخه نیست، در حال رد کردن.\n"
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#: ../parser_include.c:137 ../parser_include.c:122
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr "خطا: امکان اضافه کردن پوشه %s به مسیر جستجو نیست.\n"
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
#: ../parser_include.c:147 ../parser_include.c:151 ../parser_include.c:136
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr ""
|
||||
msgstr "خطا: عدم توانایی تخصیص حافظه.\n"
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
#: ../parser_interface.c:52
|
||||
msgid "Bad write position\n"
|
||||
msgstr ""
|
||||
msgstr "مکان نوشتن اشتباه\n"
|
||||
|
||||
#: ../parser_interface.c:72 ../parser_interface.c:75 ../parser_interface.c:52
|
||||
#: ../parser_interface.c:55
|
||||
msgid "Permission denied\n"
|
||||
msgstr "مجوز صادر نگردید\n"
|
||||
|
||||
#: ../parser_interface.c:75 ../parser_interface.c:78 ../parser_interface.c:55
|
||||
#: ../parser_interface.c:58
|
||||
msgid "Out of memory\n"
|
||||
msgstr "خارج از حافظه\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
#: ../parser_interface.c:61
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
msgstr "عدم توانایی رونوشت از نمایه: آدرس حافظه بد\n"
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
#: ../parser_interface.c:64
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
msgstr ""
|
||||
msgstr "نمایه با پروتکل مطابقت ندارد\n"
|
||||
|
||||
#: ../parser_interface.c:84 ../parser_interface.c:87 ../parser_interface.c:64
|
||||
#: ../parser_interface.c:67
|
||||
msgid "Profile does not match signature\n"
|
||||
msgstr "نمایه با امضا مطابقت ندارد\n"
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
#: ../parser_interface.c:70
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr ""
|
||||
msgstr "نسخه نمایه توسط ماژول Apparmor پشتیبانی نمیشود\n"
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
#: ../parser_interface.c:73
|
||||
msgid "Profile already exists\n"
|
||||
msgstr ""
|
||||
msgstr "نمایه موجود است\n"
|
||||
|
||||
#: ../parser_interface.c:93 ../parser_interface.c:96 ../parser_interface.c:73
|
||||
#: ../parser_interface.c:76
|
||||
msgid "Profile doesn't exist\n"
|
||||
msgstr ""
|
||||
msgstr "نمایه موجود نیست\n"
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
#: ../parser_interface.c:79
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
"اجازه رد شد؛ آیا در حالیکه محدود هستید، سعی در بارگزاری یک نمایه کردید؟\n"
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#: ../parser_interface.c:82
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
msgstr "خطای ناشناخته (%d): %s\n"
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119 ../parser_interface.c:96
|
||||
#: ../parser_interface.c:100
|
||||
#, c-format
|
||||
msgid "%s: Unable to add \"%s\". "
|
||||
msgstr ""
|
||||
msgstr "%s: عدم توانایی اضافه کردن \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:121 ../parser_interface.c:124
|
||||
#: ../parser_interface.c:101
|
||||
#: ../parser_interface.c:101 ../parser_interface.c:105
|
||||
#, c-format
|
||||
msgid "%s: Unable to replace \"%s\". "
|
||||
msgstr ""
|
||||
msgstr "%s: عدم توانایی جایگزینی \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:126 ../parser_interface.c:129
|
||||
#: ../parser_interface.c:106
|
||||
#: ../parser_interface.c:106 ../parser_interface.c:110
|
||||
#, c-format
|
||||
msgid "%s: Unable to remove \"%s\". "
|
||||
msgstr ""
|
||||
msgstr "%s: عدم توانایی حذف \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:134
|
||||
#: ../parser_interface.c:111
|
||||
#: ../parser_interface.c:111 ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to stdout\n"
|
||||
msgstr ""
|
||||
msgstr "%s: عدم توانایی نوشتن در stdout\n"
|
||||
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:138
|
||||
#: ../parser_interface.c:115
|
||||
#: ../parser_interface.c:115 ../parser_interface.c:119
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
msgstr "%s: عدم توانایی نوشتن در فایل خروجی\n"
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
#: ../parser_interface.c:118 ../parser_interface.c:142
|
||||
#: ../parser_interface.c:123 ../parser_interface.c:147
|
||||
#, c-format
|
||||
msgid "%s: ASSERT: Invalid option: %d\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:147 ../parser_interface.c:150
|
||||
#: ../parser_interface.c:127
|
||||
#: ../parser_interface.c:127 ../parser_interface.c:132
|
||||
#, c-format
|
||||
msgid "Addition succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "اضافه کردن \"%s\" با موفقیت انجام شد.\n"
|
||||
|
||||
#: ../parser_interface.c:151 ../parser_interface.c:154
|
||||
#: ../parser_interface.c:131
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:136
|
||||
#, c-format
|
||||
msgid "Replacement succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "جایگزینی \"%s\" با موفقیت انجام شد.\n"
|
||||
|
||||
#: ../parser_interface.c:155 ../parser_interface.c:158
|
||||
#: ../parser_interface.c:135
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:140
|
||||
#, c-format
|
||||
msgid "Removal succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "حذف \"%s\" با موفقیت انجام شد.\n"
|
||||
|
||||
#: ../parser_interface.c:251 ../parser_interface.c:254
|
||||
#, c-format
|
||||
@@ -141,33 +154,33 @@ msgid "PANIC bad increment buffer %p pos %p ext %p size %d res %p\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:656 ../parser_interface.c:658
|
||||
#: ../parser_interface.c:446
|
||||
#: ../parser_interface.c:446 ../parser_interface.c:476
|
||||
#, c-format
|
||||
msgid "profile %s network rules not enforced\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:666
|
||||
msgid "Unknown pattern type\n"
|
||||
msgstr ""
|
||||
msgstr "نوع الگوی ناشناخته\n"
|
||||
|
||||
#: ../parser_interface.c:750 ../parser_interface.c:902
|
||||
#: ../parser_interface.c:743 ../parser_interface.c:894
|
||||
#: ../parser_interface.c:518 ../parser_interface.c:669
|
||||
#, c-format
|
||||
msgid "Unable to open %s - %s\n"
|
||||
msgstr ""
|
||||
msgstr "عدم توانایی بازکردن %s - %s\n"
|
||||
|
||||
#: ../parser_interface.c:776 ../parser_interface.c:768
|
||||
#: ../parser_interface.c:543
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove ^%s\n"
|
||||
msgstr ""
|
||||
msgstr "خطای تخصیص حافظه: عدم توانایی حذف ^%s\n"
|
||||
|
||||
#: ../parser_interface.c:789 ../parser_interface.c:781
|
||||
#: ../parser_interface.c:556
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove %s:%s."
|
||||
msgstr ""
|
||||
msgstr "خطای تخصیص حافظه: عدم توانایی حذف %s:%s."
|
||||
|
||||
#: ../parser_interface.c:810 ../parser_interface.c:802
|
||||
msgid "unable to create work area\n"
|
||||
@@ -186,7 +199,7 @@ msgid "%s: Unable to write entire profile entry\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:839 ../parser_interface.c:831
|
||||
#: ../parser_interface.c:593
|
||||
#: ../parser_interface.c:593 ../parser_interface.c:579
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr ""
|
||||
@@ -196,7 +209,7 @@ msgstr ""
|
||||
msgid "Could not open '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173 parser_lex.l:174
|
||||
#, c-format
|
||||
msgid "fstat failed for '%s'"
|
||||
msgstr ""
|
||||
@@ -222,7 +235,7 @@ msgstr ""
|
||||
msgid "Found unexpected character: '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428 parser_lex.l:474
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
|
||||
@@ -242,6 +255,7 @@ msgid "%s: Could not allocate memory for subdomainbase mount point\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:577 ../parser_main.c:616 ../parser_main.c:479
|
||||
#: ../parser_main.c:1444
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Warning: unable to find a suitable fs in %s, is it mounted?\n"
|
||||
@@ -249,6 +263,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:597 ../parser_main.c:635 ../parser_main.c:498
|
||||
#: ../parser_main.c:822
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Sorry. You need root privileges to run this program.\n"
|
||||
@@ -256,6 +271,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:604 ../parser_main.c:642 ../parser_main.c:505
|
||||
#: ../parser_main.c:828
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Warning! You've set this program setuid root.\n"
|
||||
@@ -264,7 +280,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:704 ../parser_main.c:813 ../parser_main.c:836
|
||||
#: ../parser_main.c:946 ../parser_main.c:860
|
||||
#: ../parser_main.c:946 ../parser_main.c:860 ../parser_main.c:1038
|
||||
#, c-format
|
||||
msgid "Error: Could not read profile %s: %s.\n"
|
||||
msgstr ""
|
||||
@@ -286,26 +302,36 @@ msgstr ""
|
||||
#: parser_yacc.y:1166 parser_yacc.y:1170 parser_yacc.y:1180 parser_yacc.y:1190
|
||||
#: parser_yacc.y:1298 parser_yacc.y:1376 parser_yacc.y:1479 parser_yacc.y:1490
|
||||
#: parser_yacc.y:1565 parser_yacc.y:1583 parser_yacc.y:1590 parser_yacc.y:1639
|
||||
#: ../network.c:314 ../af_unix.cc:203
|
||||
#: ../network.c:314 ../af_unix.cc:203 ../parser_misc.c:215 ../parser_misc.c:939
|
||||
#: parser_yacc.y:343 parser_yacc.y:367 parser_yacc.y:533 parser_yacc.y:543
|
||||
#: parser_yacc.y:660 parser_yacc.y:741 parser_yacc.y:750 parser_yacc.y:1171
|
||||
#: parser_yacc.y:1219 parser_yacc.y:1255 parser_yacc.y:1264 parser_yacc.y:1268
|
||||
#: parser_yacc.y:1278 parser_yacc.y:1288 parser_yacc.y:1382 parser_yacc.y:1460
|
||||
#: parser_yacc.y:1592 parser_yacc.y:1597 parser_yacc.y:1674 parser_yacc.y:1692
|
||||
#: parser_yacc.y:1699 parser_yacc.y:1748 ../network.c:315 ../af_unix.cc:194
|
||||
msgid "Memory allocation error."
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#: ../parser_main.c:975
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#: ../parser_main.c:979
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#: ../parser_main.c:1132
|
||||
#, c-format
|
||||
msgid "%s: Errors found in file. Aborting.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:426 ../parser_misc.c:597 ../parser_misc.c:339
|
||||
#: ../parser_misc.c:532
|
||||
msgid ""
|
||||
"Uppercase qualifiers \"RWLIMX\" are deprecated, please convert to lowercase\n"
|
||||
"See the apparmor.d(5) manpage for details.\n"
|
||||
@@ -313,14 +339,17 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:467 ../parser_misc.c:474 ../parser_misc.c:638
|
||||
#: ../parser_misc.c:645 ../parser_misc.c:380 ../parser_misc.c:387
|
||||
#: ../parser_misc.c:573 ../parser_misc.c:580
|
||||
msgid "Conflict 'a' and 'w' perms are mutually exclusive."
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:491 ../parser_misc.c:662 ../parser_misc.c:404
|
||||
#: ../parser_misc.c:597
|
||||
msgid "Exec qualifier 'i' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:502 ../parser_misc.c:673 ../parser_misc.c:415
|
||||
#: ../parser_misc.c:608
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unconfined exec qualifier (%c%c) allows some dangerous environment variables "
|
||||
@@ -329,23 +358,27 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:510 ../parser_misc.c:551 ../parser_misc.c:681
|
||||
#: ../parser_misc.c:722 ../parser_misc.c:423 ../parser_misc.c:464
|
||||
#: ../parser_misc.c:616 ../parser_misc.c:657
|
||||
#, c-format
|
||||
msgid "Exec qualifier '%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:537 ../parser_misc.c:545 ../parser_misc.c:708
|
||||
#: ../parser_misc.c:716 ../parser_misc.c:450 ../parser_misc.c:458
|
||||
#: ../parser_misc.c:643 ../parser_misc.c:651
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Exec qualifier '%c%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:593 ../parser_misc.c:764 ../parser_misc.c:506
|
||||
#: ../parser_misc.c:699
|
||||
#, c-format
|
||||
msgid "Internal: unexpected mode character '%c' in input"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:615 ../parser_misc.c:786 ../parser_misc.c:528
|
||||
#: ../parser_misc.c:721
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid perm 0x%llx\n"
|
||||
msgstr ""
|
||||
@@ -357,10 +390,12 @@ msgid "AppArmor parser error: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_merge.c:92 ../parser_merge.c:91 ../parser_merge.c:83
|
||||
#: ../parser_merge.c:71
|
||||
msgid "Couldn't merge entries. Out of Memory\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#: ../parser_merge.c:93
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
@@ -369,115 +404,118 @@ msgstr ""
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348 parser_yacc.y:407
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384 parser_yacc.y:449
|
||||
#, c-format
|
||||
msgid "Failed to create alias %s -> %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506 parser_yacc.y:581
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510 parser_yacc.y:585
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513 parser_yacc.y:588
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516 parser_yacc.y:591
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530 parser_yacc.y:607
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552 parser_yacc.y:629
|
||||
#, c-format
|
||||
msgid "Invalid profile flag: %s."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:498 parser_yacc.y:520 parser_yacc.y:548 parser_yacc.y:594
|
||||
#: parser_yacc.y:673
|
||||
msgid "Assert: `rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:501 parser_yacc.y:546 parser_yacc.y:552 parser_yacc.y:584
|
||||
#: parser_yacc.y:598 parser_yacc.y:630
|
||||
#: parser_yacc.y:598 parser_yacc.y:630 parser_yacc.y:677 parser_yacc.y:709
|
||||
msgid ""
|
||||
"Invalid mode, in deny rules 'x' must not be preceded by exec qualifier 'i', "
|
||||
"'p', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602 parser_yacc.y:681
|
||||
msgid ""
|
||||
"Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', 'c', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633 parser_yacc.y:712
|
||||
msgid "Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:574 parser_yacc.y:612 parser_yacc.y:614 parser_yacc.y:660
|
||||
#: parser_yacc.y:739
|
||||
msgid "Assert: `network_rule' return invalid protocol."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786 parser_yacc.y:867
|
||||
msgid "Assert: `change_profile' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810 parser_yacc.y:905
|
||||
msgid "Assert: 'hat rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819 parser_yacc.y:914
|
||||
msgid "Assert: 'local_profile rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992 parser_yacc.y:1077
|
||||
#, c-format
|
||||
msgid "Unset boolean variable %s used in if-expression"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092 parser_yacc.y:1181
|
||||
msgid "unsafe rule missing exec permissions"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060 parser_yacc.y:1148
|
||||
msgid "subset can only be used with link rules."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062 parser_yacc.y:1150
|
||||
msgid "link and exec perms conflict on a file rule using ->"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064 parser_yacc.y:1152
|
||||
msgid "link perms are not allowed on a named profile transition.\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109 parser_yacc.y:1198
|
||||
#, c-format
|
||||
msgid "missing an end of line character? (entry: %s)"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:975 parser_yacc.y:985 parser_yacc.y:1057 parser_yacc.y:1067
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155 parser_yacc.y:1234 parser_yacc.y:1244
|
||||
msgid "Invalid network entry."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1039 parser_yacc.y:1048 parser_yacc.y:1254 parser_yacc.y:1510
|
||||
#: parser_yacc.y:1617
|
||||
#, c-format
|
||||
msgid "Invalid capability %s."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525 parser_yacc.y:1637
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
@@ -493,17 +531,20 @@ msgid "%s: Illegal open {, nesting groupings not allowed\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:265 ../parser_regex.c:274 ../parser_regex.c:278
|
||||
#: ../parser_regex.c:306
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Invalid number of items between {}\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:271 ../parser_regex.c:280 ../parser_regex.c:284
|
||||
#: ../parser_regex.c:312
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close }, no matching open { detected\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:337 ../parser_regex.c:343 ../parser_regex.c:361
|
||||
#: ../parser_regex.c:403
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Unclosed grouping or character class, expecting "
|
||||
@@ -516,16 +557,19 @@ msgid "%s: Internal buffer overflow detected, %d characters exceeded\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:355 ../parser_regex.c:361 ../parser_regex.c:377
|
||||
#: ../parser_regex.c:419
|
||||
#, c-format
|
||||
msgid "%s: Unable to parse input line '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#: ../parser_regex.c:487
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#: ../parser_policy.c:383
|
||||
#, c-format
|
||||
msgid "ERROR merging rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
@@ -539,16 +583,19 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:279 ../parser_policy.c:359 ../parser_policy.c:332
|
||||
#: ../parser_policy.c:340
|
||||
#, c-format
|
||||
msgid "ERROR processing regexs for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:306 ../parser_policy.c:389 ../parser_policy.c:362
|
||||
#: ../parser_policy.c:370
|
||||
#, c-format
|
||||
msgid "ERROR expanding variables for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:390 ../parser_policy.c:382 ../parser_policy.c:355
|
||||
#: ../parser_policy.c:363
|
||||
#, c-format
|
||||
msgid "ERROR adding hat access rule for profile %s\n"
|
||||
msgstr ""
|
||||
@@ -578,7 +625,7 @@ msgstr ""
|
||||
msgid "%s: Errors found in combining rules postprocessing. Aborting.\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#: parser_lex.l:180 parser_lex.l:186 parser_lex.l:187
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
@@ -588,7 +635,8 @@ msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
#: ../parser_main.c:1041 ../parser_main.c:1332 ../parser_main.c:1354
|
||||
#: ../parser_misc.c:280 ../parser_misc.c:299 ../parser_misc.c:308
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
@@ -617,11 +665,11 @@ msgstr ""
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
#: parser_yacc.y:575 parser_yacc.y:621 parser_yacc.y:700
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
#: parser_yacc.y:612 parser_yacc.y:658 parser_yacc.y:737
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
|
||||
@@ -637,41 +685,41 @@ msgstr ""
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613 parser_yacc.y:1722
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628 parser_yacc.y:1737
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635 parser_yacc.y:1744
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650 parser_yacc.y:1759
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236 ../parser_regex.c:264
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256 ../parser_regex.c:284
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339 ../parser_policy.c:347
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369 ../parser_policy.c:377
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
@@ -691,51 +739,51 @@ msgstr ""
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#: ../parser_misc.c:575 ../parser_misc.c:768
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#: ../parser_misc.c:599 ../parser_misc.c:792
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:703
|
||||
#: parser_yacc.y:703 parser_yacc.y:784
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:720
|
||||
#: parser_yacc.y:720 parser_yacc.y:801
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:736
|
||||
#: parser_yacc.y:736 parser_yacc.y:817
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:752
|
||||
#: parser_yacc.y:752 parser_yacc.y:833
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:768
|
||||
#: parser_yacc.y:768 parser_yacc.y:849 parser_yacc.y:869
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:794
|
||||
#: parser_yacc.y:794 parser_yacc.y:885
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#: parser_yacc.y:1293 parser_yacc.y:1377
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#: parser_yacc.y:1371 parser_yacc.y:1455
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#: ../parser_regex.c:368 ../parser_regex.c:410
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
|
@@ -16,14 +16,14 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2014-05-01 19:38+0000\n"
|
||||
"Last-Translator: Jiri Grönroos <Unknown>\n"
|
||||
"PO-Revision-Date: 2021-04-11 15:29+0000\n"
|
||||
"Last-Translator: Markus Mikkonen <Unknown>\n"
|
||||
"Language-Team: Suomi <fi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2021-04-12 06:41+0000\n"
|
||||
"X-Generator: Launchpad (build f3c8a1aed7c0b9bc4f5601dbf2698b30e1ab66f1)\n"
|
||||
"Language: fi\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
@@ -643,7 +643,7 @@ msgstr ""
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
msgstr "Muisti lopussa"
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
|
@@ -11,49 +11,49 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-15 02:58+0000\n"
|
||||
"Last-Translator: Krešimir Jozić <Unknown>\n"
|
||||
"PO-Revision-Date: 2021-10-03 10:20+0000\n"
|
||||
"Last-Translator: gogo <trebelnik2@gmail.com>\n"
|
||||
"Language-Team: Croatian <en@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2021-10-04 06:23+0000\n"
|
||||
"X-Generator: Launchpad (build 1ce78163f6a09ed42b4201fe7d3f0e3a2eba7d02)\n"
|
||||
"Language: hr\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr "Greška: Nedovoljno memorije.\n"
|
||||
msgstr "Greška: ponestalo memorije.\n"
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr "Greška: temeljni direktorij %s nije direktorij, preskačem.\n"
|
||||
msgstr "Greška: osnovni direktorij %s nije direktorij, preskačem.\n"
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr "Greška: Ne mogu dodati direktorij %s u putanju za pretragu.\n"
|
||||
msgstr "Greška: nemoguće dodavanje direktorija %s u putanju pretrage.\n"
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr "Greška: Ne mogu rezervirati memoriju.\n"
|
||||
msgstr "Greška: nemoguće dodijeliti memoriju.\n"
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
msgid "Bad write position\n"
|
||||
msgstr "Neipravan položaj za zapisivanje\n"
|
||||
msgstr "Netočan položaj zapisivanja\n"
|
||||
|
||||
#: ../parser_interface.c:72 ../parser_interface.c:75 ../parser_interface.c:52
|
||||
msgid "Permission denied\n"
|
||||
msgstr "Pristup odbijen\n"
|
||||
msgstr "Pristup uskraćen\n"
|
||||
|
||||
#: ../parser_interface.c:75 ../parser_interface.c:78 ../parser_interface.c:55
|
||||
msgid "Out of memory\n"
|
||||
msgstr "Nema dovoljno memorije\n"
|
||||
msgstr "Ponestalo memorije\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
msgstr "Nemoguće kopiranje profila: neispravna memorijska adresa\n"
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
@@ -65,7 +65,7 @@ msgstr "Profil ne odgovara potpisu\n"
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr "Verzija profila nije podržana od Apparmor modula\n"
|
||||
msgstr "Inačicu profila ne podržava Apparmor modul\n"
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
msgid "Profile already exists\n"
|
||||
@@ -77,42 +77,42 @@ msgstr "Profil ne postoji\n"
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
msgstr "Pristup odbijen, pokušaj učitavanja profila tijekom ograničenja?\n"
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
msgstr "Nepoznata greška (%d): %s\n"
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
#, c-format
|
||||
msgid "%s: Unable to add \"%s\". "
|
||||
msgstr "%s: Ne mogu dodati \"%s\". "
|
||||
msgstr "%s: Nemoguće je dodati \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:121 ../parser_interface.c:124
|
||||
#: ../parser_interface.c:101
|
||||
#, c-format
|
||||
msgid "%s: Unable to replace \"%s\". "
|
||||
msgstr "%s: Ne mogu zamijeniti \"%s\". "
|
||||
msgstr "%s: Nemoguće je zamijeniti \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:126 ../parser_interface.c:129
|
||||
#: ../parser_interface.c:106
|
||||
#, c-format
|
||||
msgid "%s: Unable to remove \"%s\". "
|
||||
msgstr "%s : Ne mogu ukloniti \"%s\". "
|
||||
msgstr "%s : Nemoguće je ukloniti \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:134
|
||||
#: ../parser_interface.c:111
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to stdout\n"
|
||||
msgstr "%s: Ne mogu pisati na stdout\n"
|
||||
msgstr "%s: Nemoguće je zapisivati u stdout\n"
|
||||
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:138
|
||||
#: ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Nemoguće je zapisivati u izlaznu datoteku\n"
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
|
368
parser/po/ka.po
368
parser/po/ka.po
@@ -9,267 +9,293 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-14 22:25+0000\n"
|
||||
"Last-Translator: George Machitidze <giomac@gmail.com>\n"
|
||||
"PO-Revision-Date: 2023-06-26 15:06+0000\n"
|
||||
"Last-Translator: NorwayFun <temuri.doghonadze@gmail.com>\n"
|
||||
"Language-Team: Georgian <i18n@suse.de>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2023-06-27 04:31+0000\n"
|
||||
"X-Generator: Launchpad (build aedf8597c50c1abc5fb7f9e871e686dfcb381fde)\n"
|
||||
"Language: ka\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
#: ../parser_include.c:113 ../parser_include.c:111 ../parser_include.c:96
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr ""
|
||||
msgstr "შეცდომა: არასაკმარისი მეხსიერება.\n"
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#: ../parser_include.c:123 ../parser_include.c:121 ../parser_include.c:106
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr ""
|
||||
"შეცდომა: საბაზისო საქაღალდე %s საქაღალდეს არ წარმოადგენს. გამოტოვება\n"
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#: ../parser_include.c:137 ../parser_include.c:122
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr ""
|
||||
msgstr "შეცდომა: საქაღალდის %s ძებნის ბილიკში ჩამატების შეცდომა.\n"
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
#: ../parser_include.c:147 ../parser_include.c:151 ../parser_include.c:136
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr ""
|
||||
msgstr "შეცდომა: მეხსიერების გამოყოფა შეუძლებელია.\n"
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
#: ../parser_interface.c:52
|
||||
msgid "Bad write position\n"
|
||||
msgstr ""
|
||||
msgstr "არასწორი ჩაწერის მდებარეობა\n"
|
||||
|
||||
#: ../parser_interface.c:72 ../parser_interface.c:75 ../parser_interface.c:52
|
||||
#: ../parser_interface.c:55
|
||||
msgid "Permission denied\n"
|
||||
msgstr ""
|
||||
msgstr "წვდომა აკრძალულია\n"
|
||||
|
||||
#: ../parser_interface.c:75 ../parser_interface.c:78 ../parser_interface.c:55
|
||||
#: ../parser_interface.c:58
|
||||
msgid "Out of memory\n"
|
||||
msgstr ""
|
||||
msgstr "არასაკმარისი მეხსიერება\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
#: ../parser_interface.c:61
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
msgstr "პროფილს კოპირება შეუძლებელია: არასწორი მეხსიერების მისამართი\n"
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
#: ../parser_interface.c:64
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
msgstr ""
|
||||
msgstr "პროფილი პროტოკოლს არ ემორჩილება\n"
|
||||
|
||||
#: ../parser_interface.c:84 ../parser_interface.c:87 ../parser_interface.c:64
|
||||
#: ../parser_interface.c:67
|
||||
msgid "Profile does not match signature\n"
|
||||
msgstr ""
|
||||
msgstr "პროფილი ხელმოწერას არ ემთხვევა\n"
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
#: ../parser_interface.c:70
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr ""
|
||||
msgstr "პროფილის ვერსია Apparmor-ის მოდულის მიერ მხარდაჭერილი არაა\n"
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
#: ../parser_interface.c:73
|
||||
msgid "Profile already exists\n"
|
||||
msgstr ""
|
||||
msgstr "პროფილი უკვე არსებობს\n"
|
||||
|
||||
#: ../parser_interface.c:93 ../parser_interface.c:96 ../parser_interface.c:73
|
||||
#: ../parser_interface.c:76
|
||||
msgid "Profile doesn't exist\n"
|
||||
msgstr ""
|
||||
msgstr "პროფილი არ არსებობს\n"
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
#: ../parser_interface.c:79
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
msgstr "წვდომა აკრძალულია. პროფილის ჩატვირთვის მცდელობა შეზღუდვისას?\n"
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#: ../parser_interface.c:82
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
msgstr "უცნობი შეცდომა (%d): %s\n"
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119 ../parser_interface.c:96
|
||||
#: ../parser_interface.c:100
|
||||
#, c-format
|
||||
msgid "%s: Unable to add \"%s\". "
|
||||
msgstr ""
|
||||
msgstr "%s: \"%s\"-ის დამატების შეცდომა. "
|
||||
|
||||
#: ../parser_interface.c:121 ../parser_interface.c:124
|
||||
#: ../parser_interface.c:101
|
||||
#: ../parser_interface.c:101 ../parser_interface.c:105
|
||||
#, c-format
|
||||
msgid "%s: Unable to replace \"%s\". "
|
||||
msgstr ""
|
||||
msgstr "%s: \"%s\"-ის ჩანაცვლების შეცდომა. "
|
||||
|
||||
#: ../parser_interface.c:126 ../parser_interface.c:129
|
||||
#: ../parser_interface.c:106
|
||||
#: ../parser_interface.c:106 ../parser_interface.c:110
|
||||
#, c-format
|
||||
msgid "%s: Unable to remove \"%s\". "
|
||||
msgstr ""
|
||||
msgstr "%s: \"%s\"-ის წაშლის შეცდომა. "
|
||||
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:134
|
||||
#: ../parser_interface.c:111
|
||||
#: ../parser_interface.c:111 ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to stdout\n"
|
||||
msgstr ""
|
||||
msgstr "%s: stdout-ში ჩაწერის შეცდომა\n"
|
||||
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:138
|
||||
#: ../parser_interface.c:115
|
||||
#: ../parser_interface.c:115 ../parser_interface.c:119
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
msgstr "%s: გამოტანის ფაილში ჩაწერის შეცდომა\n"
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
#: ../parser_interface.c:118 ../parser_interface.c:142
|
||||
#: ../parser_interface.c:123 ../parser_interface.c:147
|
||||
#, c-format
|
||||
msgid "%s: ASSERT: Invalid option: %d\n"
|
||||
msgstr ""
|
||||
msgstr "%s: მტკიცება: არასწორი პარამეტრი: %d\n"
|
||||
|
||||
#: ../parser_interface.c:147 ../parser_interface.c:150
|
||||
#: ../parser_interface.c:127
|
||||
#: ../parser_interface.c:127 ../parser_interface.c:132
|
||||
#, c-format
|
||||
msgid "Addition succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "\"%s\"-სთვის დამატება წარმატებულია.\n"
|
||||
|
||||
#: ../parser_interface.c:151 ../parser_interface.c:154
|
||||
#: ../parser_interface.c:131
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:136
|
||||
#, c-format
|
||||
msgid "Replacement succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "\"%s\"-სთვის ჩანაცვლება წარმატებულია.\n"
|
||||
|
||||
#: ../parser_interface.c:155 ../parser_interface.c:158
|
||||
#: ../parser_interface.c:135
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:140
|
||||
#, c-format
|
||||
msgid "Removal succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "\"%s\"-სთვის წაშლა წარმატებულია.\n"
|
||||
|
||||
#: ../parser_interface.c:251 ../parser_interface.c:254
|
||||
#, c-format
|
||||
msgid "PANIC bad increment buffer %p pos %p ext %p size %d res %p\n"
|
||||
msgstr ""
|
||||
msgstr "პანიკა. არასწორი ზრდადი ბუფერი %p მდებ %p გაფართ %p ზომა %d რეს %p\n"
|
||||
|
||||
#: ../parser_interface.c:656 ../parser_interface.c:658
|
||||
#: ../parser_interface.c:446
|
||||
#: ../parser_interface.c:446 ../parser_interface.c:476
|
||||
#, c-format
|
||||
msgid "profile %s network rules not enforced\n"
|
||||
msgstr ""
|
||||
msgstr "პროფილის %s ქსელის წესები არ მოქმედებს\n"
|
||||
|
||||
#: ../parser_interface.c:666
|
||||
msgid "Unknown pattern type\n"
|
||||
msgstr ""
|
||||
msgstr "უცნობი ნიმუშის ტიპი\n"
|
||||
|
||||
#: ../parser_interface.c:750 ../parser_interface.c:902
|
||||
#: ../parser_interface.c:743 ../parser_interface.c:894
|
||||
#: ../parser_interface.c:518 ../parser_interface.c:669
|
||||
#, c-format
|
||||
msgid "Unable to open %s - %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s-ის გახსნა შეუძლებელია - %s\n"
|
||||
|
||||
#: ../parser_interface.c:776 ../parser_interface.c:768
|
||||
#: ../parser_interface.c:543
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove ^%s\n"
|
||||
msgstr ""
|
||||
msgstr "მეხსიერების გამოყოფის შეცდომა: ^%s-ის წაშლა შეუძლებელია\n"
|
||||
|
||||
#: ../parser_interface.c:789 ../parser_interface.c:781
|
||||
#: ../parser_interface.c:556
|
||||
#, c-format
|
||||
msgid "Memory Allocation Error: Unable to remove %s:%s."
|
||||
msgstr ""
|
||||
msgstr "მეხსიერების გამოყოფის შეცდომა: %s-ის წაშლა შეუძლებელია: %s."
|
||||
|
||||
#: ../parser_interface.c:810 ../parser_interface.c:802
|
||||
msgid "unable to create work area\n"
|
||||
msgstr ""
|
||||
msgstr "სამუშაო ფართობის შექმნა შეუძლებელია\n"
|
||||
|
||||
#: ../parser_interface.c:818 ../parser_interface.c:810
|
||||
#, c-format
|
||||
msgid "unable to serialize profile %s\n"
|
||||
msgstr ""
|
||||
msgstr "პროფილის %s სერიალიზაცია შეუძლებელია\n"
|
||||
|
||||
#: ../parser_interface.c:829 ../parser_interface.c:916
|
||||
#: ../parser_interface.c:821 ../parser_interface.c:908
|
||||
#: ../parser_interface.c:582
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry\n"
|
||||
msgstr ""
|
||||
msgstr "%s: სრული პროფილის ელემენტის ჩაწერა შეუძლებელია\n"
|
||||
|
||||
#: ../parser_interface.c:839 ../parser_interface.c:831
|
||||
#: ../parser_interface.c:593
|
||||
#: ../parser_interface.c:593 ../parser_interface.c:579
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr ""
|
||||
msgstr "%s: სრული პროფილის ელემენტის კეშში ჩაწერა შეუძლებელია\n"
|
||||
|
||||
#: parser_lex.l:100 parser_lex.l:163 parser_lex.l:169
|
||||
#, c-format
|
||||
msgid "Could not open '%s'"
|
||||
msgstr ""
|
||||
msgstr "'%s'-ის გახსნის შეცდომა"
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173 parser_lex.l:174
|
||||
#, c-format
|
||||
msgid "fstat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "fstat-ის შეცდომა '%s'-სთვის"
|
||||
|
||||
#: parser_lex.l:121
|
||||
#, c-format
|
||||
msgid "opendir failed '%s'"
|
||||
msgstr ""
|
||||
msgstr "opendir -ის შეცდომა '%s'-სთვის"
|
||||
|
||||
#: parser_lex.l:152
|
||||
#, c-format
|
||||
msgid "stat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "%s-სთვის stat()-ის შეცდომა"
|
||||
|
||||
#: parser_lex.l:155 parser_lex.l:133 parser_lex.l:139
|
||||
#, c-format
|
||||
msgid "Could not open '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "'%s'-ის '%s'-ში გახსნის შეცდომა"
|
||||
|
||||
#: parser_lex.l:284 parser_lex.l:322 parser_lex.l:362 parser_lex.l:399
|
||||
#: parser_lex.l:469 parser_lex.l:655 parser_lex.l:586 parser_lex.l:638
|
||||
#, c-format
|
||||
msgid "Found unexpected character: '%s'"
|
||||
msgstr ""
|
||||
msgstr "ნაპოვნია მოულოდნელი სიმბოლო: '%s'"
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428 parser_lex.l:474
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
msgstr "ცვლადის სახელებს ბოლოში მიწერილი მძიმეების მხარდაჭერა არ გააჩნია"
|
||||
|
||||
#: parser_lex.l:420
|
||||
#, c-format
|
||||
msgid "(network_mode) Found unexpected character: '%s'"
|
||||
msgstr ""
|
||||
msgstr "(network_mode) ნაპოვნია მოულოდნელი სიმბოლო: '%s'"
|
||||
|
||||
#: ../parser_main.c:333 ../parser_common.c:61 ../parser_common.c:106
|
||||
#, c-format
|
||||
msgid "Warning from %s (%s%sline %d): %s"
|
||||
msgstr ""
|
||||
msgstr "გაფრთხილება %s-დან (%s%s ხაზი %d): %s"
|
||||
|
||||
#: ../parser_main.c:531
|
||||
#, c-format
|
||||
msgid "%s: Could not allocate memory for subdomainbase mount point\n"
|
||||
msgstr ""
|
||||
"%s: მეხსიერების გამოყოფის შეცდომა subdomainbase მიმაგრების წერტილისთვის\n"
|
||||
|
||||
#: ../parser_main.c:577 ../parser_main.c:616 ../parser_main.c:479
|
||||
#: ../parser_main.c:1444
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Warning: unable to find a suitable fs in %s, is it mounted?\n"
|
||||
"Use --subdomainfs to override.\n"
|
||||
msgstr ""
|
||||
"გაფრთხილება: %s-ში შესაბამისი FS ვერ ვიპოვე. მიმაგრებულია?\n"
|
||||
"გადასაფარად გამოიყენეთ --subdomainfs.\n"
|
||||
|
||||
#: ../parser_main.c:597 ../parser_main.c:635 ../parser_main.c:498
|
||||
#: ../parser_main.c:822
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Sorry. You need root privileges to run this program.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"%s: უკაცრავად, მაგრამ ამ პროგრამის გასაშვებად root-ის პრივილეგიები "
|
||||
"დაგჭირდებათ.\n"
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:604 ../parser_main.c:642 ../parser_main.c:505
|
||||
#: ../parser_main.c:828
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Warning! You've set this program setuid root.\n"
|
||||
"Anybody who can run this program can update your AppArmor profiles.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"%s: გაფრთხილება: პროგრამაზე setuid root დააყენეთ.\n"
|
||||
"ყველა, ვინც ამ პროგრამას გაუშვებს, AppArmor-ის პროფილების განახლება "
|
||||
"შეეძლება.\n"
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:704 ../parser_main.c:813 ../parser_main.c:836
|
||||
#: ../parser_main.c:946 ../parser_main.c:860
|
||||
#: ../parser_main.c:946 ../parser_main.c:860 ../parser_main.c:1038
|
||||
#, c-format
|
||||
msgid "Error: Could not read profile %s: %s.\n"
|
||||
msgstr ""
|
||||
msgstr "შეცდომა: პროფილის '%s' წაკითხვის შეცდომა: %s.\n"
|
||||
|
||||
#: ../parser_main.c:718 ../parser_misc.c:270 parser_yacc.y:227
|
||||
#: parser_yacc.y:374 parser_yacc.y:386 parser_yacc.y:484 parser_yacc.y:586
|
||||
@@ -288,26 +314,36 @@ msgstr ""
|
||||
#: parser_yacc.y:1166 parser_yacc.y:1170 parser_yacc.y:1180 parser_yacc.y:1190
|
||||
#: parser_yacc.y:1298 parser_yacc.y:1376 parser_yacc.y:1479 parser_yacc.y:1490
|
||||
#: parser_yacc.y:1565 parser_yacc.y:1583 parser_yacc.y:1590 parser_yacc.y:1639
|
||||
#: ../network.c:314 ../af_unix.cc:203
|
||||
#: ../network.c:314 ../af_unix.cc:203 ../parser_misc.c:215 ../parser_misc.c:939
|
||||
#: parser_yacc.y:343 parser_yacc.y:367 parser_yacc.y:533 parser_yacc.y:543
|
||||
#: parser_yacc.y:660 parser_yacc.y:741 parser_yacc.y:750 parser_yacc.y:1171
|
||||
#: parser_yacc.y:1219 parser_yacc.y:1255 parser_yacc.y:1264 parser_yacc.y:1268
|
||||
#: parser_yacc.y:1278 parser_yacc.y:1288 parser_yacc.y:1382 parser_yacc.y:1460
|
||||
#: parser_yacc.y:1592 parser_yacc.y:1597 parser_yacc.y:1674 parser_yacc.y:1692
|
||||
#: parser_yacc.y:1699 parser_yacc.y:1748 ../network.c:315 ../af_unix.cc:194
|
||||
msgid "Memory allocation error."
|
||||
msgstr ""
|
||||
msgstr "მეხსიერების გამოყოფის შეცდომა."
|
||||
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#: ../parser_main.c:975
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "დაკეშილი ჩატვირთვა \"%s\"-სთვის წარმატებულია.\n"
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#: ../parser_main.c:979
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "დაკეშილი თავიდან ჩატვირთვა \"%s\"-სთვის წარმატებულია.\n"
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#: ../parser_main.c:1132
|
||||
#, c-format
|
||||
msgid "%s: Errors found in file. Aborting.\n"
|
||||
msgstr ""
|
||||
msgstr "%s: ფაილში აღმოჩენილია შეცდომები. მუშაობის დასრულება.\n"
|
||||
|
||||
#: ../parser_misc.c:426 ../parser_misc.c:597 ../parser_misc.c:339
|
||||
#: ../parser_misc.c:532
|
||||
msgid ""
|
||||
"Uppercase qualifiers \"RWLIMX\" are deprecated, please convert to lowercase\n"
|
||||
"See the apparmor.d(5) manpage for details.\n"
|
||||
@@ -315,14 +351,17 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:467 ../parser_misc.c:474 ../parser_misc.c:638
|
||||
#: ../parser_misc.c:645 ../parser_misc.c:380 ../parser_misc.c:387
|
||||
#: ../parser_misc.c:573 ../parser_misc.c:580
|
||||
msgid "Conflict 'a' and 'w' perms are mutually exclusive."
|
||||
msgstr ""
|
||||
msgstr "წვდომები 'a' და 'w' ურთიერთგამომრიცხავია."
|
||||
|
||||
#: ../parser_misc.c:491 ../parser_misc.c:662 ../parser_misc.c:404
|
||||
#: ../parser_misc.c:597
|
||||
msgid "Exec qualifier 'i' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:502 ../parser_misc.c:673 ../parser_misc.c:415
|
||||
#: ../parser_misc.c:608
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unconfined exec qualifier (%c%c) allows some dangerous environment variables "
|
||||
@@ -331,163 +370,176 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:510 ../parser_misc.c:551 ../parser_misc.c:681
|
||||
#: ../parser_misc.c:722 ../parser_misc.c:423 ../parser_misc.c:464
|
||||
#: ../parser_misc.c:616 ../parser_misc.c:657
|
||||
#, c-format
|
||||
msgid "Exec qualifier '%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:537 ../parser_misc.c:545 ../parser_misc.c:708
|
||||
#: ../parser_misc.c:716 ../parser_misc.c:450 ../parser_misc.c:458
|
||||
#: ../parser_misc.c:643 ../parser_misc.c:651
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Exec qualifier '%c%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:593 ../parser_misc.c:764 ../parser_misc.c:506
|
||||
#: ../parser_misc.c:699
|
||||
#, c-format
|
||||
msgid "Internal: unexpected mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "შიდა: შეყვანაში აღმოჩენილია მოულოდნელი რეჟიმის სიმბოლო '%c'"
|
||||
|
||||
#: ../parser_misc.c:615 ../parser_misc.c:786 ../parser_misc.c:528
|
||||
#: ../parser_misc.c:721
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid perm 0x%llx\n"
|
||||
msgstr ""
|
||||
msgstr "შიდა შეცდომის მიერ გენერირებული არასწორი წვდომა 0x%llx\n"
|
||||
|
||||
#: ../parser_misc.c:865 ../parser_symtab.c:561 ../parser_regex.c:626
|
||||
#: ../parser_variable.c:229
|
||||
#, c-format
|
||||
msgid "AppArmor parser error: %s\n"
|
||||
msgstr ""
|
||||
msgstr "AppArmor-ის დამმუშავებლის შეცდომა: %s\n"
|
||||
|
||||
#: ../parser_merge.c:92 ../parser_merge.c:91 ../parser_merge.c:83
|
||||
#: ../parser_merge.c:71
|
||||
msgid "Couldn't merge entries. Out of Memory\n"
|
||||
msgstr ""
|
||||
msgstr "ელემენტების შერწყმა შეუძლებელია. არასაკმარისი მეხსიერება\n"
|
||||
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#: ../parser_merge.c:93
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:236 parser_yacc.y:277 parser_yacc.y:320
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
msgstr "პროფილის მიმაგრება '/'-ით უნდა იწყებოდეს."
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348 parser_yacc.y:407
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
"პროფილის სახელი '/'-ით, სახელის სივრცით ან საკვანძო სიტყვებიდან 'profile' ან "
|
||||
"'hat' უნდა იწყებოდეს."
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384 parser_yacc.y:449
|
||||
#, c-format
|
||||
msgid "Failed to create alias %s -> %s\n"
|
||||
msgstr ""
|
||||
msgstr "შეცდომა ფსევდონიმის (%s) შექმნისას -> %s\n"
|
||||
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506 parser_yacc.y:581
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
"პროფილის ალამი chroot_relative კონფლიქტშია ალამთან namespace_relative"
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510 parser_yacc.y:585
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
msgstr "პროფილის ალამი mediate_deleted კონფლიქტშია ალამთან delegate_deleted"
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513 parser_yacc.y:588
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
"პროფილის ალამი attach_disconnect კონფლიქტშია ალამთან no_attach_disconnected"
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516 parser_yacc.y:591
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
msgstr "პროფილის ალამი chroot_attach კონფლიქტშია ალამთან chroot_no_attach"
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530 parser_yacc.y:607
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
msgstr ""
|
||||
msgstr "პროფილის ალამი 'debug' აღარ გამოიყენება."
|
||||
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552 parser_yacc.y:629
|
||||
#, c-format
|
||||
msgid "Invalid profile flag: %s."
|
||||
msgstr ""
|
||||
msgstr "არასწორი პროფილის ალამი: %s."
|
||||
|
||||
#: parser_yacc.y:498 parser_yacc.y:520 parser_yacc.y:548 parser_yacc.y:594
|
||||
#: parser_yacc.y:673
|
||||
msgid "Assert: `rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:501 parser_yacc.y:546 parser_yacc.y:552 parser_yacc.y:584
|
||||
#: parser_yacc.y:598 parser_yacc.y:630
|
||||
#: parser_yacc.y:598 parser_yacc.y:630 parser_yacc.y:677 parser_yacc.y:709
|
||||
msgid ""
|
||||
"Invalid mode, in deny rules 'x' must not be preceded by exec qualifier 'i', "
|
||||
"'p', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602 parser_yacc.y:681
|
||||
msgid ""
|
||||
"Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', 'c', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633 parser_yacc.y:712
|
||||
msgid "Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:574 parser_yacc.y:612 parser_yacc.y:614 parser_yacc.y:660
|
||||
#: parser_yacc.y:739
|
||||
msgid "Assert: `network_rule' return invalid protocol."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786 parser_yacc.y:867
|
||||
msgid "Assert: `change_profile' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810 parser_yacc.y:905
|
||||
msgid "Assert: 'hat rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819 parser_yacc.y:914
|
||||
msgid "Assert: 'local_profile rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992 parser_yacc.y:1077
|
||||
#, c-format
|
||||
msgid "Unset boolean variable %s used in if-expression"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092 parser_yacc.y:1181
|
||||
msgid "unsafe rule missing exec permissions"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060 parser_yacc.y:1148
|
||||
msgid "subset can only be used with link rules."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062 parser_yacc.y:1150
|
||||
msgid "link and exec perms conflict on a file rule using ->"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064 parser_yacc.y:1152
|
||||
msgid "link perms are not allowed on a named profile transition.\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109 parser_yacc.y:1198
|
||||
#, c-format
|
||||
msgid "missing an end of line character? (entry: %s)"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:975 parser_yacc.y:985 parser_yacc.y:1057 parser_yacc.y:1067
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155 parser_yacc.y:1234 parser_yacc.y:1244
|
||||
msgid "Invalid network entry."
|
||||
msgstr ""
|
||||
msgstr "არასწორი ქსელის ჩანაწერი."
|
||||
|
||||
#: parser_yacc.y:1039 parser_yacc.y:1048 parser_yacc.y:1254 parser_yacc.y:1510
|
||||
#: parser_yacc.y:1617
|
||||
#, c-format
|
||||
msgid "Invalid capability %s."
|
||||
msgstr ""
|
||||
msgstr "არასწორი შესაძლებლობა %s."
|
||||
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525 parser_yacc.y:1637
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "AppArmor-ის დამმუშავებლის შეცდომა. %s%s%s ხაზზე ნომრით %d: %s\n"
|
||||
|
||||
#: parser_yacc.y:1072 parser_yacc.y:1275 parser_yacc.y:1531
|
||||
#, c-format
|
||||
msgid "AppArmor parser error,%s%s line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "AppArmor-ის დამმუშავებლის შეცდომა. %s%s ხაზზე ნომრით %d: %s\n"
|
||||
|
||||
#: ../parser_regex.c:244
|
||||
#, c-format
|
||||
@@ -495,17 +547,20 @@ msgid "%s: Illegal open {, nesting groupings not allowed\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:265 ../parser_regex.c:274 ../parser_regex.c:278
|
||||
#: ../parser_regex.c:306
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Invalid number of items between {}\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:271 ../parser_regex.c:280 ../parser_regex.c:284
|
||||
#: ../parser_regex.c:312
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close }, no matching open { detected\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:337 ../parser_regex.c:343 ../parser_regex.c:361
|
||||
#: ../parser_regex.c:403
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Unclosed grouping or character class, expecting "
|
||||
@@ -518,16 +573,19 @@ msgid "%s: Internal buffer overflow detected, %d characters exceeded\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:355 ../parser_regex.c:361 ../parser_regex.c:377
|
||||
#: ../parser_regex.c:419
|
||||
#, c-format
|
||||
msgid "%s: Unable to parse input line '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#: ../parser_regex.c:487
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#: ../parser_policy.c:383
|
||||
#, c-format
|
||||
msgid "ERROR merging rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
@@ -541,16 +599,19 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:279 ../parser_policy.c:359 ../parser_policy.c:332
|
||||
#: ../parser_policy.c:340
|
||||
#, c-format
|
||||
msgid "ERROR processing regexs for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:306 ../parser_policy.c:389 ../parser_policy.c:362
|
||||
#: ../parser_policy.c:370
|
||||
#, c-format
|
||||
msgid "ERROR expanding variables for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:390 ../parser_policy.c:382 ../parser_policy.c:355
|
||||
#: ../parser_policy.c:363
|
||||
#, c-format
|
||||
msgid "ERROR adding hat access rule for profile %s\n"
|
||||
msgstr ""
|
||||
@@ -580,34 +641,35 @@ msgstr ""
|
||||
msgid "%s: Errors found in combining rules postprocessing. Aborting.\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#: parser_lex.l:180 parser_lex.l:186 parser_lex.l:187
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "ჩასასმელი საქაღალდის ('%s') '%s'-ში დამუშავება შეუძლებელია"
|
||||
|
||||
#: ../parser_main.c:660 ../parser_main.c:523
|
||||
msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
msgstr "თვისების ბუფერი სავსეა."
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
#: ../parser_main.c:1041 ../parser_main.c:1332 ../parser_main.c:1354
|
||||
#: ../parser_misc.c:280 ../parser_misc.c:299 ../parser_misc.c:308
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
msgstr "არასაკმარისი მეხსიერება"
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
msgid "Can't create cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "კეშის საქაღალდის შექმნის შეცდომა: %s\n"
|
||||
|
||||
#: ../parser_main.c:1185 ../parser_main.c:1094
|
||||
#, c-format
|
||||
msgid "File in cache directory location: %s\n"
|
||||
msgstr ""
|
||||
msgstr "ფაილი კეშის საქაღალდის მდებარეობაზე: %s\n"
|
||||
|
||||
#: ../parser_main.c:1188 ../parser_main.c:1097
|
||||
#, c-format
|
||||
msgid "Can't update cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "კეშის საქაღალდის განახლების შეცდომა: %s\n"
|
||||
|
||||
#: ../parser_misc.c:833
|
||||
#, c-format
|
||||
@@ -619,61 +681,61 @@ msgstr ""
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
#: parser_yacc.y:575 parser_yacc.y:621 parser_yacc.y:700
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "აკრძალვის პრეფიქსი დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
#: parser_yacc.y:612 parser_yacc.y:658 parser_yacc.y:737
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:660
|
||||
msgid "owner prefix not allow on mount rules"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი მიმაგრების წესებში დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:677
|
||||
msgid "owner prefix not allow on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი dbus-ის წესებში დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:704
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი შესაძლებლობების წესებში დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613 parser_yacc.y:1722
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
msgstr "არასწორი მიმაგრების პირობითი %s%s"
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628 parser_yacc.y:1737
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
msgstr "არასწორი მიმაგრების წესი"
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635 parser_yacc.y:1744
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
msgstr "მიმაგრების წერტილის პირობები ამჟამად მხარდაჭერილი არაა"
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650 parser_yacc.y:1759
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
msgstr "არასწორი pivotroot პირობითი '%s'"
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236 ../parser_regex.c:264
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256 ../parser_regex.c:284
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339 ../parser_policy.c:347
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369 ../parser_policy.c:377
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
@@ -693,51 +755,51 @@ msgstr ""
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#: ../parser_misc.c:575 ../parser_misc.c:768
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#: ../parser_misc.c:599 ../parser_misc.c:792
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:703
|
||||
#: parser_yacc.y:703 parser_yacc.y:784
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი მიმაგრების წესებზე დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:720
|
||||
#: parser_yacc.y:720 parser_yacc.y:801
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი dbus-ის წესებზე დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:736
|
||||
#: parser_yacc.y:736 parser_yacc.y:817
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი სიგნალის წესებზე დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:752
|
||||
#: parser_yacc.y:752 parser_yacc.y:833
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი ptrace-ის წესებზე დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:768
|
||||
#: parser_yacc.y:768 parser_yacc.y:849 parser_yacc.y:869
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი unix-ის წესებზე დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:794
|
||||
#: parser_yacc.y:794 parser_yacc.y:885
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
msgstr "მფლობლის პრეფიქსი შესაძლებლობების წესებზე დაშვებული არაა"
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#: parser_yacc.y:1293 parser_yacc.y:1377
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "dbus-ის წესი: არასწორი პირობითი ჯგუფი %s=0"
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#: parser_yacc.y:1371 parser_yacc.y:1455
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "unix-ის წესი: არასწორი პირობითი ჯგუფი %s=0"
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#: ../parser_regex.c:368 ../parser_regex.c:410
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
|
@@ -11,14 +11,14 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2016-03-03 08:40+0000\n"
|
||||
"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
|
||||
"PO-Revision-Date: 2020-07-13 00:17+0000\n"
|
||||
"Last-Translator: Peter J. Mello <admin@petermello.net>\n"
|
||||
"Language-Team: Portuguese <opensuse-pt@opensuse.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2020-07-14 05:50+0000\n"
|
||||
"X-Generator: Launchpad (build 4809fcb62f445aaa3ae919f7f6c3cc7d156ea57a)\n"
|
||||
"Language: pt\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
@@ -230,7 +230,7 @@ msgstr "Encontrado caracter inesperado: '%s'"
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
msgstr "As declarações variáveis não aceitam vírgulas de seguimento"
|
||||
|
||||
#: parser_lex.l:420
|
||||
#, c-format
|
||||
@@ -308,12 +308,12 @@ msgstr "Erro de alocação de memória."
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "A carga em cache foi bem sucedida para \"%s\".\n"
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "A recarga em cache foi bem sucedida para \"%s\".\n"
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#, c-format
|
||||
@@ -390,7 +390,7 @@ msgstr "Não é possível intercalar as entradas. Memória Esgotada\n"
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
msgstr "perfil %s: fundiu a regra %s com modificadores conflitantes x\n"
|
||||
|
||||
#: parser_yacc.y:236 parser_yacc.y:277 parser_yacc.y:320
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
@@ -400,6 +400,8 @@ msgstr "Anexo de perfil deve começar com '/'."
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
"Os nomes dos perfis têm que começar com '/', espaço de nomes, ou palavra-"
|
||||
"chave 'profile' ou 'hat'."
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#, c-format
|
||||
@@ -409,19 +411,21 @@ msgstr "Falha na criação da alcunha %s -> %s\n"
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
"A marcação do perfil chroot_relative conflitos com o namespace_relative"
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
msgstr "A marcação do perfil mediate_deleted conflitos com delegate_deleted"
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
"A marcação do perfil attach_disconnected conflitos com no_attach_disconnected"
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
msgstr "A marcação do perfil chroot_attach conflitos com chroot_no_attach"
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
@@ -515,12 +519,12 @@ msgstr "Capacidade inválida %s."
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Erro de analisador AppArmor para %s%s%s na linha %d: %s\n"
|
||||
|
||||
#: parser_yacc.y:1072 parser_yacc.y:1275 parser_yacc.y:1531
|
||||
#, c-format
|
||||
msgid "AppArmor parser error,%s%s line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Erro de analisador AppArmor,%s%s linha %d: %s\n"
|
||||
|
||||
#: ../parser_regex.c:244
|
||||
#, c-format
|
||||
@@ -565,7 +569,7 @@ msgstr "%s: Não foi possível analisar a linha de entrada '%s'\n"
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Nome de perfil inválido '%s' - má expressão regular\n"
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#, c-format
|
||||
@@ -633,11 +637,11 @@ msgstr ""
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "Não foi possível processar incluir pasta '%s' em '%s'"
|
||||
|
||||
#: ../parser_main.c:660 ../parser_main.c:523
|
||||
msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
msgstr "Amortecedor de características cheio."
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
@@ -652,7 +656,7 @@ msgstr "Não foi possível criar diretório de cache: %s\n"
|
||||
#: ../parser_main.c:1185 ../parser_main.c:1094
|
||||
#, c-format
|
||||
msgid "File in cache directory location: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Ficheiro na localização da pasta do cache: %s\n"
|
||||
|
||||
#: ../parser_main.c:1188 ../parser_main.c:1097
|
||||
#, c-format
|
||||
@@ -662,132 +666,137 @@ msgstr "Não foi possível atualizar o diretório da cache: %s\n"
|
||||
#: ../parser_misc.c:833
|
||||
#, c-format
|
||||
msgid "Internal: unexpected DBus mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interno: carácter do modo D-Bus '%c' inesperado na entrada"
|
||||
|
||||
#: ../parser_misc.c:857
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Erro interno gerado por permissão do D-Bus inválido 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "Não é permitido prefixo deny"
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "Não é permitido prefixo owner"
|
||||
|
||||
#: parser_yacc.y:660
|
||||
msgid "owner prefix not allow on mount rules"
|
||||
msgstr ""
|
||||
msgstr "Não é permitido prefixo owner nas regras de montar"
|
||||
|
||||
#: parser_yacc.y:677
|
||||
msgid "owner prefix not allow on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "Não é permitido prefixo owner nas regras de D-Bus"
|
||||
|
||||
#: parser_yacc.y:704
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
msgstr "Não é permitido prefixo owner nas regras de capacidade"
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
msgstr "montar condicional inválido %s%s"
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
msgstr "regra de montagem errada"
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
msgstr "condições do ponto de montagem não suportadas atualmente"
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
msgstr "pivotroot condicional inválido '%s'"
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
"%s: Erro de agrupamento de expressões regulares: Fechamento inválido ], sem "
|
||||
"abertura correspondente [ detectado\n"
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
"%s: Erro de agrupamento de expressões regulares: Excedido o máximo de "
|
||||
"aninhamento de {}\n"
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"O ERRO processando regras de policydb para perfil %s, falhou em carregar\n"
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "O ERRO substituindo aliases para perfil %s, falhou em carregar\n"
|
||||
|
||||
#: ../parser_interface.c:635 ../parser_interface.c:638
|
||||
#, c-format
|
||||
msgid "%s: Unable to write %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Não foi possível gravar %s\n"
|
||||
|
||||
#: ../parser_main.c:721
|
||||
#, c-format
|
||||
msgid "Error: Could not read binary profile or cache file %s: %s.\n"
|
||||
msgstr ""
|
||||
msgstr "Erro: Não pôde ler o perfil binário ou o ficheiro de cache %s: %s.\n"
|
||||
|
||||
#: ../parser_main.c:811
|
||||
#, c-format
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
msgstr "Erro: Não foi possível ler o ficheiro de cache '%s', a ignorar...\n"
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interno: caractere inesperado do modo %s: '%c' na entrada"
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Erro interno gerado permissão %s inválido 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:703
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido nas regras de montar"
|
||||
|
||||
#: parser_yacc.y:720
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido nas regras de D-Bus"
|
||||
|
||||
#: parser_yacc.y:736
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido nas regras do sinal"
|
||||
|
||||
#: parser_yacc.y:752
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido nas regras de ptrace"
|
||||
|
||||
#: parser_yacc.y:768
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido nas regras de unix"
|
||||
|
||||
#: parser_yacc.y:794
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido nas regras de capacidade"
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "regra dbus: grupo condicional inválido %s=()"
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "regra unix: grupo condicional inválido %s=()"
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Erro de expressão regular: carácter de fuga '\\' seguinte\n"
|
||||
|
@@ -6,131 +6,143 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-15 03:51+0000\n"
|
||||
"Last-Translator: Novell Language <Unknown>\n"
|
||||
"PO-Revision-Date: 2022-06-17 21:43+0000\n"
|
||||
"Last-Translator: Isabella Rocha de Oliveira <Unknown>\n"
|
||||
"Language-Team: Novell Language <language@novell.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2022-06-18 04:31+0000\n"
|
||||
"X-Generator: Launchpad (build ae54683eb2eb8ed62cda30dc44e60c5387c78159)\n"
|
||||
"Language: pt_BR\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
#: ../parser_include.c:113 ../parser_include.c:111 ../parser_include.c:96
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr "Erro: Sem memória.\n"
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#: ../parser_include.c:123 ../parser_include.c:121 ../parser_include.c:106
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr "Erro: O diretório base %s não é um diretório; ignorando.\n"
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#: ../parser_include.c:137 ../parser_include.c:122
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr ""
|
||||
"Erro: Não foi possível adicionar o diretório %s ao caminho de pesquisa.\n"
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
#: ../parser_include.c:147 ../parser_include.c:151 ../parser_include.c:136
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr "Erro: Não foi possível alocar memória.\n"
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
#: ../parser_interface.c:52
|
||||
msgid "Bad write position\n"
|
||||
msgstr "Posição de gravação incorreta\n"
|
||||
|
||||
#: ../parser_interface.c:72 ../parser_interface.c:75 ../parser_interface.c:52
|
||||
#: ../parser_interface.c:55
|
||||
msgid "Permission denied\n"
|
||||
msgstr "Permissão negada\n"
|
||||
|
||||
#: ../parser_interface.c:75 ../parser_interface.c:78 ../parser_interface.c:55
|
||||
#: ../parser_interface.c:58
|
||||
msgid "Out of memory\n"
|
||||
msgstr "Memória insuficiente\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
#: ../parser_interface.c:61
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
msgstr "Não foi possível copiar perfil: Endereço de memória incorreto\n"
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
#: ../parser_interface.c:64
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
msgstr "Perfil não compatível com o protocolo\n"
|
||||
|
||||
#: ../parser_interface.c:84 ../parser_interface.c:87 ../parser_interface.c:64
|
||||
#: ../parser_interface.c:67
|
||||
msgid "Profile does not match signature\n"
|
||||
msgstr "Perfil não corresponde à assinatura\n"
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
#: ../parser_interface.c:70
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr "Versão de perfil não suportada pelo módulo do AppArmor\n"
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
#: ../parser_interface.c:73
|
||||
msgid "Profile already exists\n"
|
||||
msgstr "O perfil já existe\n"
|
||||
|
||||
#: ../parser_interface.c:93 ../parser_interface.c:96 ../parser_interface.c:73
|
||||
#: ../parser_interface.c:76
|
||||
msgid "Profile doesn't exist\n"
|
||||
msgstr "O perfil não existe\n"
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
#: ../parser_interface.c:79
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
msgstr "Permissão negada; tentou carregar um perfil enquanto restrito?\n"
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#: ../parser_interface.c:82
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
msgstr "Erro desconhecido (%d): %s\n"
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119 ../parser_interface.c:96
|
||||
#: ../parser_interface.c:100
|
||||
#, c-format
|
||||
msgid "%s: Unable to add \"%s\". "
|
||||
msgstr "%s: Impossível adicionar \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:121 ../parser_interface.c:124
|
||||
#: ../parser_interface.c:101
|
||||
#: ../parser_interface.c:101 ../parser_interface.c:105
|
||||
#, c-format
|
||||
msgid "%s: Unable to replace \"%s\". "
|
||||
msgstr "%s: Impossível substituir \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:126 ../parser_interface.c:129
|
||||
#: ../parser_interface.c:106
|
||||
#: ../parser_interface.c:106 ../parser_interface.c:110
|
||||
#, c-format
|
||||
msgid "%s: Unable to remove \"%s\". "
|
||||
msgstr "%s: Impossível remover \"%s\". "
|
||||
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:134
|
||||
#: ../parser_interface.c:111
|
||||
#: ../parser_interface.c:111 ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to stdout\n"
|
||||
msgstr "%s: Impossível gravar em stdout\n"
|
||||
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:138
|
||||
#: ../parser_interface.c:115
|
||||
#: ../parser_interface.c:115 ../parser_interface.c:119
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Não é possível salvar no arquivo de saída\n"
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
#: ../parser_interface.c:118 ../parser_interface.c:142
|
||||
#: ../parser_interface.c:123 ../parser_interface.c:147
|
||||
#, c-format
|
||||
msgid "%s: ASSERT: Invalid option: %d\n"
|
||||
msgstr "%s: DECLARAR: Opção inválida: %d\n"
|
||||
|
||||
#: ../parser_interface.c:147 ../parser_interface.c:150
|
||||
#: ../parser_interface.c:127
|
||||
#: ../parser_interface.c:127 ../parser_interface.c:132
|
||||
#, c-format
|
||||
msgid "Addition succeeded for \"%s\".\n"
|
||||
msgstr "Adição bem-sucedida de \"%s\".\n"
|
||||
|
||||
#: ../parser_interface.c:151 ../parser_interface.c:154
|
||||
#: ../parser_interface.c:131
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:136
|
||||
#, c-format
|
||||
msgid "Replacement succeeded for \"%s\".\n"
|
||||
msgstr "Substituição bem-sucedida de \"%s\".\n"
|
||||
|
||||
#: ../parser_interface.c:155 ../parser_interface.c:158
|
||||
#: ../parser_interface.c:135
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:140
|
||||
#, c-format
|
||||
msgid "Removal succeeded for \"%s\".\n"
|
||||
msgstr "Remoção bem-sucedida de \"%s\".\n"
|
||||
@@ -142,14 +154,14 @@ msgstr ""
|
||||
"PÂNICO: buffer de incremento incorreto %p pos %p ext %p tamanho %d res %p\n"
|
||||
|
||||
#: ../parser_interface.c:656 ../parser_interface.c:658
|
||||
#: ../parser_interface.c:446
|
||||
#: ../parser_interface.c:446 ../parser_interface.c:476
|
||||
#, c-format
|
||||
msgid "profile %s network rules not enforced\n"
|
||||
msgstr ""
|
||||
msgstr "perfil %s regras de rede não impostas\n"
|
||||
|
||||
#: ../parser_interface.c:666
|
||||
msgid "Unknown pattern type\n"
|
||||
msgstr ""
|
||||
msgstr "Tipo padrão desconhecido\n"
|
||||
|
||||
#: ../parser_interface.c:750 ../parser_interface.c:902
|
||||
#: ../parser_interface.c:743 ../parser_interface.c:894
|
||||
@@ -187,35 +199,35 @@ msgid "%s: Unable to write entire profile entry\n"
|
||||
msgstr "%s: Impossível gravar toda a entrada do perfil\n"
|
||||
|
||||
#: ../parser_interface.c:839 ../parser_interface.c:831
|
||||
#: ../parser_interface.c:593
|
||||
#: ../parser_interface.c:593 ../parser_interface.c:579
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Não é possível gravar o perfil de entrada completo no cache\n"
|
||||
|
||||
#: parser_lex.l:100 parser_lex.l:163 parser_lex.l:169
|
||||
#, c-format
|
||||
msgid "Could not open '%s'"
|
||||
msgstr ""
|
||||
msgstr "Não foi possível abrir '%s'"
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173 parser_lex.l:174
|
||||
#, c-format
|
||||
msgid "fstat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "fstat falhou para '%s'"
|
||||
|
||||
#: parser_lex.l:121
|
||||
#, c-format
|
||||
msgid "opendir failed '%s'"
|
||||
msgstr ""
|
||||
msgstr "opendir falhou '%s'"
|
||||
|
||||
#: parser_lex.l:152
|
||||
#, c-format
|
||||
msgid "stat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "stat falhou para '%s'"
|
||||
|
||||
#: parser_lex.l:155 parser_lex.l:133 parser_lex.l:139
|
||||
#, c-format
|
||||
msgid "Could not open '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "Não foi possível abrir '%s' em '%s'"
|
||||
|
||||
#: parser_lex.l:284 parser_lex.l:322 parser_lex.l:362 parser_lex.l:399
|
||||
#: parser_lex.l:469 parser_lex.l:655 parser_lex.l:586 parser_lex.l:638
|
||||
@@ -223,9 +235,9 @@ msgstr ""
|
||||
msgid "Found unexpected character: '%s'"
|
||||
msgstr "Caractere inesperado encontrado: '%s'"
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428 parser_lex.l:474
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
msgstr "Declarações de variável não aceitam vírgulas como último caractere"
|
||||
|
||||
#: parser_lex.l:420
|
||||
#, c-format
|
||||
@@ -235,7 +247,7 @@ msgstr "(network_mode) Caractere inesperado encontrado: '%s'"
|
||||
#: ../parser_main.c:333 ../parser_common.c:61 ../parser_common.c:106
|
||||
#, c-format
|
||||
msgid "Warning from %s (%s%sline %d): %s"
|
||||
msgstr ""
|
||||
msgstr "Aviso de %s (%s%sline %d): %s"
|
||||
|
||||
#: ../parser_main.c:531
|
||||
#, c-format
|
||||
@@ -244,6 +256,7 @@ msgstr ""
|
||||
"%s: Impossível alocar memória para ponto de montagem de base de subdomínio\n"
|
||||
|
||||
#: ../parser_main.c:577 ../parser_main.c:616 ../parser_main.c:479
|
||||
#: ../parser_main.c:1444
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Warning: unable to find a suitable fs in %s, is it mounted?\n"
|
||||
@@ -253,6 +266,7 @@ msgstr ""
|
||||
"Use --subdomainfs para anular.\n"
|
||||
|
||||
#: ../parser_main.c:597 ../parser_main.c:635 ../parser_main.c:498
|
||||
#: ../parser_main.c:822
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Sorry. You need root privileges to run this program.\n"
|
||||
@@ -262,6 +276,7 @@ msgstr ""
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:604 ../parser_main.c:642 ../parser_main.c:505
|
||||
#: ../parser_main.c:828
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Warning! You've set this program setuid root.\n"
|
||||
@@ -274,7 +289,7 @@ msgstr ""
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:704 ../parser_main.c:813 ../parser_main.c:836
|
||||
#: ../parser_main.c:946 ../parser_main.c:860
|
||||
#: ../parser_main.c:946 ../parser_main.c:860 ../parser_main.c:1038
|
||||
#, c-format
|
||||
msgid "Error: Could not read profile %s: %s.\n"
|
||||
msgstr "Erro: Não foi possível ler o perfil %s: %s.\n"
|
||||
@@ -296,26 +311,36 @@ msgstr "Erro: Não foi possível ler o perfil %s: %s.\n"
|
||||
#: parser_yacc.y:1166 parser_yacc.y:1170 parser_yacc.y:1180 parser_yacc.y:1190
|
||||
#: parser_yacc.y:1298 parser_yacc.y:1376 parser_yacc.y:1479 parser_yacc.y:1490
|
||||
#: parser_yacc.y:1565 parser_yacc.y:1583 parser_yacc.y:1590 parser_yacc.y:1639
|
||||
#: ../network.c:314 ../af_unix.cc:203
|
||||
#: ../network.c:314 ../af_unix.cc:203 ../parser_misc.c:215 ../parser_misc.c:939
|
||||
#: parser_yacc.y:343 parser_yacc.y:367 parser_yacc.y:533 parser_yacc.y:543
|
||||
#: parser_yacc.y:660 parser_yacc.y:741 parser_yacc.y:750 parser_yacc.y:1171
|
||||
#: parser_yacc.y:1219 parser_yacc.y:1255 parser_yacc.y:1264 parser_yacc.y:1268
|
||||
#: parser_yacc.y:1278 parser_yacc.y:1288 parser_yacc.y:1382 parser_yacc.y:1460
|
||||
#: parser_yacc.y:1592 parser_yacc.y:1597 parser_yacc.y:1674 parser_yacc.y:1692
|
||||
#: parser_yacc.y:1699 parser_yacc.y:1748 ../network.c:315 ../af_unix.cc:194
|
||||
msgid "Memory allocation error."
|
||||
msgstr "Erro de alocação de memória."
|
||||
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#: ../parser_main.c:975
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "Cache carregado com sucesso para \"%s\".\n"
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#: ../parser_main.c:979
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "Cache recarregado com sucesso para \"%s\".\n"
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#: ../parser_main.c:1132
|
||||
#, c-format
|
||||
msgid "%s: Errors found in file. Aborting.\n"
|
||||
msgstr "%s: Erros encontrados no arquivo. Interrompendo.\n"
|
||||
|
||||
#: ../parser_misc.c:426 ../parser_misc.c:597 ../parser_misc.c:339
|
||||
#: ../parser_misc.c:532
|
||||
msgid ""
|
||||
"Uppercase qualifiers \"RWLIMX\" are deprecated, please convert to lowercase\n"
|
||||
"See the apparmor.d(5) manpage for details.\n"
|
||||
@@ -326,16 +351,19 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:467 ../parser_misc.c:474 ../parser_misc.c:638
|
||||
#: ../parser_misc.c:645 ../parser_misc.c:380 ../parser_misc.c:387
|
||||
#: ../parser_misc.c:573 ../parser_misc.c:580
|
||||
msgid "Conflict 'a' and 'w' perms are mutually exclusive."
|
||||
msgstr "As permissões 'a' e 'w' de conflito são mutuamente exclusivas."
|
||||
|
||||
#: ../parser_misc.c:491 ../parser_misc.c:662 ../parser_misc.c:404
|
||||
#: ../parser_misc.c:597
|
||||
msgid "Exec qualifier 'i' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
"Qualificador de execução 'i' inválido. Qualificador em conflito já "
|
||||
"especificado"
|
||||
|
||||
#: ../parser_misc.c:502 ../parser_misc.c:673 ../parser_misc.c:415
|
||||
#: ../parser_misc.c:608
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unconfined exec qualifier (%c%c) allows some dangerous environment variables "
|
||||
@@ -347,6 +375,7 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:510 ../parser_misc.c:551 ../parser_misc.c:681
|
||||
#: ../parser_misc.c:722 ../parser_misc.c:423 ../parser_misc.c:464
|
||||
#: ../parser_misc.c:616 ../parser_misc.c:657
|
||||
#, c-format
|
||||
msgid "Exec qualifier '%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
@@ -355,6 +384,7 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:537 ../parser_misc.c:545 ../parser_misc.c:708
|
||||
#: ../parser_misc.c:716 ../parser_misc.c:450 ../parser_misc.c:458
|
||||
#: ../parser_misc.c:643 ../parser_misc.c:651
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Exec qualifier '%c%c' invalid, conflicting qualifier already specified"
|
||||
@@ -363,11 +393,13 @@ msgstr ""
|
||||
"especificado"
|
||||
|
||||
#: ../parser_misc.c:593 ../parser_misc.c:764 ../parser_misc.c:506
|
||||
#: ../parser_misc.c:699
|
||||
#, c-format
|
||||
msgid "Internal: unexpected mode character '%c' in input"
|
||||
msgstr "Interno: caractere '%c' inesperado de modo na entrada"
|
||||
|
||||
#: ../parser_misc.c:615 ../parser_misc.c:786 ../parser_misc.c:528
|
||||
#: ../parser_misc.c:721
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid perm 0x%llx\n"
|
||||
msgstr "Erro interno gerou permissão inválida 0x%llx\n"
|
||||
@@ -379,60 +411,70 @@ msgid "AppArmor parser error: %s\n"
|
||||
msgstr "Erro do analisador do AppArmor: %s\n"
|
||||
|
||||
#: ../parser_merge.c:92 ../parser_merge.c:91 ../parser_merge.c:83
|
||||
#: ../parser_merge.c:71
|
||||
msgid "Couldn't merge entries. Out of Memory\n"
|
||||
msgstr "Impossível mesclar entradas. Memória Insuficiente\n"
|
||||
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#: ../parser_merge.c:93
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
msgstr "perfil % s: mesclou regra %s com conflitantes x modificadores\n"
|
||||
|
||||
#: parser_yacc.y:236 parser_yacc.y:277 parser_yacc.y:320
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
msgstr "O anexo do perfil deve começar com um '/'."
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348 parser_yacc.y:407
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
"Nomes de perfil devem começar com um '/', namespace ou palavra-chave "
|
||||
"'perfil' ou 'chapéu'."
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384 parser_yacc.y:449
|
||||
#, c-format
|
||||
msgid "Failed to create alias %s -> %s\n"
|
||||
msgstr "Falha ao criar o álias %s -> %s\n"
|
||||
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506 parser_yacc.y:581
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
"Sinalizador de perfil chroot_relative está em conflito com namespace_relative"
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510 parser_yacc.y:585
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
"Sinalizador de perfil mediate_deleted está em conflito com delegate_deleted"
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513 parser_yacc.y:588
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
"Sinalizador de perfil attach_disconnected está em conflito com "
|
||||
"no_attach_disconnected"
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516 parser_yacc.y:591
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
"Sinalizador de perfil chroot_attach está em conflito com chroot_no_attach"
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530 parser_yacc.y:607
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
msgstr "O flag de perfil 'debug' não é mais válido."
|
||||
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552 parser_yacc.y:629
|
||||
#, c-format
|
||||
msgid "Invalid profile flag: %s."
|
||||
msgstr "Flag de perfil inválido: %s."
|
||||
|
||||
#: parser_yacc.y:498 parser_yacc.y:520 parser_yacc.y:548 parser_yacc.y:594
|
||||
#: parser_yacc.y:673
|
||||
msgid "Assert: `rule' returned NULL."
|
||||
msgstr "Declarar: `rule' retornou NULL."
|
||||
|
||||
#: parser_yacc.y:501 parser_yacc.y:546 parser_yacc.y:552 parser_yacc.y:584
|
||||
#: parser_yacc.y:598 parser_yacc.y:630
|
||||
#: parser_yacc.y:598 parser_yacc.y:630 parser_yacc.y:677 parser_yacc.y:709
|
||||
msgid ""
|
||||
"Invalid mode, in deny rules 'x' must not be preceded by exec qualifier 'i', "
|
||||
"'p', or 'u'"
|
||||
@@ -440,82 +482,84 @@ msgstr ""
|
||||
"Modo inválido. Nas regras de negação, o 'x' não deve ser precedido pelo "
|
||||
"qualificador de execução 'i', 'p' ou 'u'"
|
||||
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602 parser_yacc.y:681
|
||||
msgid ""
|
||||
"Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', 'c', or 'u'"
|
||||
msgstr ""
|
||||
"Modo inválido. O 'x' deve ser precedido pelo qualificador de execução 'i', "
|
||||
"'p','c' ou 'u'"
|
||||
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633 parser_yacc.y:712
|
||||
msgid "Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'"
|
||||
msgstr ""
|
||||
"Modo inválido; 'x' deve ser precedido pelo qualificador de execução 'i', 'p' "
|
||||
"ou 'u'"
|
||||
|
||||
#: parser_yacc.y:574 parser_yacc.y:612 parser_yacc.y:614 parser_yacc.y:660
|
||||
#: parser_yacc.y:739
|
||||
msgid "Assert: `network_rule' return invalid protocol."
|
||||
msgstr "Declarar: `network_rule' retornou um protocolo inválido."
|
||||
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786 parser_yacc.y:867
|
||||
msgid "Assert: `change_profile' returned NULL."
|
||||
msgstr "Declarar: `change_profile' retornou NULL."
|
||||
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810 parser_yacc.y:905
|
||||
msgid "Assert: 'hat rule' returned NULL."
|
||||
msgstr "Declarar: 'hat rule' retornou NULL."
|
||||
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819 parser_yacc.y:914
|
||||
msgid "Assert: 'local_profile rule' returned NULL."
|
||||
msgstr "Declaração: a regra 'local_profile' retornou NULO."
|
||||
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992 parser_yacc.y:1077
|
||||
#, c-format
|
||||
msgid "Unset boolean variable %s used in if-expression"
|
||||
msgstr "Cancelar a definição da variável booleana %s usada na expressão if"
|
||||
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092 parser_yacc.y:1181
|
||||
msgid "unsafe rule missing exec permissions"
|
||||
msgstr "permissões de execução não seguras com regra ausente"
|
||||
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060 parser_yacc.y:1148
|
||||
msgid "subset can only be used with link rules."
|
||||
msgstr "subconjunto somente deve ser usado com regras de link."
|
||||
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062 parser_yacc.y:1150
|
||||
msgid "link and exec perms conflict on a file rule using ->"
|
||||
msgstr ""
|
||||
"conflito de permissões de link e execução em uma regra de arquivo usando ->"
|
||||
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064 parser_yacc.y:1152
|
||||
msgid "link perms are not allowed on a named profile transition.\n"
|
||||
msgstr ""
|
||||
"permissões de link não são permitidas em uma transição de perfil nomeada.\n"
|
||||
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109 parser_yacc.y:1198
|
||||
#, c-format
|
||||
msgid "missing an end of line character? (entry: %s)"
|
||||
msgstr "caractere de fim de linha ausente? (entrada: %s)"
|
||||
|
||||
#: parser_yacc.y:975 parser_yacc.y:985 parser_yacc.y:1057 parser_yacc.y:1067
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155 parser_yacc.y:1234 parser_yacc.y:1244
|
||||
msgid "Invalid network entry."
|
||||
msgstr "Entrada de rede inválida."
|
||||
|
||||
#: parser_yacc.y:1039 parser_yacc.y:1048 parser_yacc.y:1254 parser_yacc.y:1510
|
||||
#: parser_yacc.y:1617
|
||||
#, c-format
|
||||
msgid "Invalid capability %s."
|
||||
msgstr "Recurso inválido %s."
|
||||
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525 parser_yacc.y:1637
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Erro do analisador AppArmor para %s%s%s na linha %d: %s\n"
|
||||
|
||||
#: parser_yacc.y:1072 parser_yacc.y:1275 parser_yacc.y:1531
|
||||
#, c-format
|
||||
msgid "AppArmor parser error,%s%s line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Erro do analisador AppArmor,%s%s linha %d: %s\n"
|
||||
|
||||
#: ../parser_regex.c:244
|
||||
#, c-format
|
||||
@@ -523,6 +567,7 @@ msgid "%s: Illegal open {, nesting groupings not allowed\n"
|
||||
msgstr "%s: Abertura ilegal {, agrupamentos aninhados não permitidos\n"
|
||||
|
||||
#: ../parser_regex.c:265 ../parser_regex.c:274 ../parser_regex.c:278
|
||||
#: ../parser_regex.c:306
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Invalid number of items between {}\n"
|
||||
msgstr ""
|
||||
@@ -530,6 +575,7 @@ msgstr ""
|
||||
"{}\n"
|
||||
|
||||
#: ../parser_regex.c:271 ../parser_regex.c:280 ../parser_regex.c:284
|
||||
#: ../parser_regex.c:312
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close }, no matching open { detected\n"
|
||||
@@ -538,6 +584,7 @@ msgstr ""
|
||||
"abertura correspondente { detectada\n"
|
||||
|
||||
#: ../parser_regex.c:337 ../parser_regex.c:343 ../parser_regex.c:361
|
||||
#: ../parser_regex.c:403
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Unclosed grouping or character class, expecting "
|
||||
@@ -552,16 +599,19 @@ msgid "%s: Internal buffer overflow detected, %d characters exceeded\n"
|
||||
msgstr "%s: Overflow de buffer interno detectado; %d caracteres excedidos\n"
|
||||
|
||||
#: ../parser_regex.c:355 ../parser_regex.c:361 ../parser_regex.c:377
|
||||
#: ../parser_regex.c:419
|
||||
#, c-format
|
||||
msgid "%s: Unable to parse input line '%s'\n"
|
||||
msgstr "%s: Impossível analisar linha de entrada '%s'\n"
|
||||
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#: ../parser_regex.c:487
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Nome do perfil inválido '%s' - expressão regular inválida\n"
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#: ../parser_policy.c:383
|
||||
#, c-format
|
||||
msgid "ERROR merging rules for profile %s, failed to load\n"
|
||||
msgstr "ERRO ao fundir regras para o perfil %s; falha ao carregar\n"
|
||||
@@ -579,6 +629,7 @@ msgstr ""
|
||||
"\t'**' somente podem ser usados no final de uma regra.\n"
|
||||
|
||||
#: ../parser_policy.c:279 ../parser_policy.c:359 ../parser_policy.c:332
|
||||
#: ../parser_policy.c:340
|
||||
#, c-format
|
||||
msgid "ERROR processing regexs for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
@@ -586,11 +637,13 @@ msgstr ""
|
||||
"carregar\n"
|
||||
|
||||
#: ../parser_policy.c:306 ../parser_policy.c:389 ../parser_policy.c:362
|
||||
#: ../parser_policy.c:370
|
||||
#, c-format
|
||||
msgid "ERROR expanding variables for profile %s, failed to load\n"
|
||||
msgstr "ERRO ao expandir variáveis para o perfil %s; falha ao carregar\n"
|
||||
|
||||
#: ../parser_policy.c:390 ../parser_policy.c:382 ../parser_policy.c:355
|
||||
#: ../parser_policy.c:363
|
||||
#, c-format
|
||||
msgid "ERROR adding hat access rule for profile %s\n"
|
||||
msgstr "ERRO ao adicionar a regra de acesso hat para o perfil %s\n"
|
||||
@@ -624,164 +677,170 @@ msgstr ""
|
||||
"%s: Erros encontrados no pós-processamento de regras de combinação. "
|
||||
"Interrompendo.\n"
|
||||
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#: parser_lex.l:180 parser_lex.l:186 parser_lex.l:187
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "Não foi possível processar a inclusão do diretório '%s' em '%s'"
|
||||
|
||||
#: ../parser_main.c:660 ../parser_main.c:523
|
||||
msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
msgstr "Recurso buffer está lotado."
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
#: ../parser_main.c:1041 ../parser_main.c:1332 ../parser_main.c:1354
|
||||
#: ../parser_misc.c:280 ../parser_misc.c:299 ../parser_misc.c:308
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
msgstr "Memória insuficiente"
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
msgid "Can't create cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Não é possível criar o diretório de cache: %s\n"
|
||||
|
||||
#: ../parser_main.c:1185 ../parser_main.c:1094
|
||||
#, c-format
|
||||
msgid "File in cache directory location: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Arquivo no local do diretório de cache: %s\n"
|
||||
|
||||
#: ../parser_main.c:1188 ../parser_main.c:1097
|
||||
#, c-format
|
||||
msgid "Can't update cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "Não é possível atualizar o diretório de cache: %s\n"
|
||||
|
||||
#: ../parser_misc.c:833
|
||||
#, c-format
|
||||
msgid "Internal: unexpected DBus mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interno: caractere mode DBus '%c' inesperado na entrada"
|
||||
|
||||
#: ../parser_misc.c:857
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Erro interno gerou DBus perm 0x%x inválido\n"
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
#: parser_yacc.y:575 parser_yacc.y:621 parser_yacc.y:700
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "Prefixo deny não é permitido"
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
#: parser_yacc.y:612 parser_yacc.y:658 parser_yacc.y:737
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "Prefixo owner não é permitido"
|
||||
|
||||
#: parser_yacc.y:660
|
||||
msgid "owner prefix not allow on mount rules"
|
||||
msgstr ""
|
||||
msgstr "Prefixo owner não é permitido em regras de montagem"
|
||||
|
||||
#: parser_yacc.y:677
|
||||
msgid "owner prefix not allow on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "Prefixo owner não é permitido em regras de dbus"
|
||||
|
||||
#: parser_yacc.y:704
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
msgstr "Prefixo owner não é permitido em regras de capacidade"
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613 parser_yacc.y:1722
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
msgstr "montagem condicional inválida %s%s"
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628 parser_yacc.y:1737
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
msgstr "regra de montagem inválida"
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635 parser_yacc.y:1744
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
msgstr "condições do ponto de montagem não são suportadas atualmente"
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650 parser_yacc.y:1759
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
msgstr "pivotroot condicional inválido '%s'"
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236 ../parser_regex.c:264
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
"%s: Erro de agrupamento de regex: Fechamento inválido ], nenhuma abertura "
|
||||
"compatível ] foi detectada\n"
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256 ../parser_regex.c:284
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
"%s: Erro de agrupamento de regex: Excedeu o aninhamento máximo de {}\n"
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339 ../parser_policy.c:347
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"ERRO processando regras do policydb para o perfil %s, falha ao carregar\n"
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369 ../parser_policy.c:377
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "Erro substituindo pseudônimos para o perfil %s, falha ao carregar\n"
|
||||
|
||||
#: ../parser_interface.c:635 ../parser_interface.c:638
|
||||
#, c-format
|
||||
msgid "%s: Unable to write %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Não foi possível escrever %s\n"
|
||||
|
||||
#: ../parser_main.c:721
|
||||
#, c-format
|
||||
msgid "Error: Could not read binary profile or cache file %s: %s.\n"
|
||||
msgstr ""
|
||||
"Erro: Não foi possível ler o perfil binário ou arquivo cache %s: %s.\n"
|
||||
|
||||
#: ../parser_main.c:811
|
||||
#, c-format
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
msgstr "Erro: Não foi possível ler o arquivo cache '%s', pulando...\n"
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#: ../parser_misc.c:575 ../parser_misc.c:768
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "Interno: modo %s caractere '%c' inesperado na entrada"
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#: ../parser_misc.c:599 ../parser_misc.c:792
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Erro interno gerou %s perm 0x%x inválido\n"
|
||||
|
||||
#: parser_yacc.y:703
|
||||
#: parser_yacc.y:703 parser_yacc.y:784
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido em regras de montagem"
|
||||
|
||||
#: parser_yacc.y:720
|
||||
#: parser_yacc.y:720 parser_yacc.y:801
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido em regras dbus"
|
||||
|
||||
#: parser_yacc.y:736
|
||||
#: parser_yacc.y:736 parser_yacc.y:817
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido em regras de sinal"
|
||||
|
||||
#: parser_yacc.y:752
|
||||
#: parser_yacc.y:752 parser_yacc.y:833
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido em regras ptrace"
|
||||
|
||||
#: parser_yacc.y:768
|
||||
#: parser_yacc.y:768 parser_yacc.y:849 parser_yacc.y:869
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido em regras unix"
|
||||
|
||||
#: parser_yacc.y:794
|
||||
#: parser_yacc.y:794 parser_yacc.y:885
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
msgstr "prefixo owner não permitido em regras de capacidade"
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#: parser_yacc.y:1293 parser_yacc.y:1377
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "regra dbus: grupo condicional inválido %s=()"
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#: parser_yacc.y:1371 parser_yacc.y:1455
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "regra unix: grupo condicional inválido %s=()"
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#: ../parser_regex.c:368 ../parser_regex.c:410
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Erro regex: caractere de escape à direita '\\'\n"
|
||||
|
490
parser/po/ro.po
490
parser/po/ro.po
File diff suppressed because it is too large
Load Diff
191
parser/po/tr.po
191
parser/po/tr.po
@@ -11,130 +11,142 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-15 03:41+0000\n"
|
||||
"Last-Translator: Ömer Kehri <Unknown>\n"
|
||||
"PO-Revision-Date: 2022-04-25 20:47+0000\n"
|
||||
"Last-Translator: Sabri Ünal <Unknown>\n"
|
||||
"Language-Team: turkish <i18n@suse.de>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2022-04-26 06:26+0000\n"
|
||||
"X-Generator: Launchpad (build 1445a2883c2be41f8e3d484e7c1c2b98b0a1caf9)\n"
|
||||
"Language: tr\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
#: ../parser_include.c:113 ../parser_include.c:111 ../parser_include.c:96
|
||||
msgid "Error: Out of memory.\n"
|
||||
msgstr "Hata: Yetersiz bellek.\n"
|
||||
|
||||
#: ../parser_include.c:123 ../parser_include.c:121
|
||||
#: ../parser_include.c:123 ../parser_include.c:121 ../parser_include.c:106
|
||||
#, c-format
|
||||
msgid "Error: basedir %s is not a directory, skipping.\n"
|
||||
msgstr "Hata: %s temel dizini bir dizin değil, atlanıyor.\n"
|
||||
|
||||
#: ../parser_include.c:137
|
||||
#: ../parser_include.c:137 ../parser_include.c:122
|
||||
#, c-format
|
||||
msgid "Error: Could not add directory %s to search path.\n"
|
||||
msgstr "Hata: %s dizini arama yollarına eklenemedi.\n"
|
||||
|
||||
#: ../parser_include.c:147 ../parser_include.c:151
|
||||
#: ../parser_include.c:147 ../parser_include.c:151 ../parser_include.c:136
|
||||
msgid "Error: Could not allocate memory.\n"
|
||||
msgstr "Hata: Bellek tahsis edilemedi.\n"
|
||||
|
||||
#: ../parser_interface.c:69 ../parser_interface.c:72 ../parser_interface.c:49
|
||||
#: ../parser_interface.c:52
|
||||
msgid "Bad write position\n"
|
||||
msgstr "Hatalı yazma pozisyonu\n"
|
||||
|
||||
#: ../parser_interface.c:72 ../parser_interface.c:75 ../parser_interface.c:52
|
||||
#: ../parser_interface.c:55
|
||||
msgid "Permission denied\n"
|
||||
msgstr "İzin verilmedi\n"
|
||||
|
||||
#: ../parser_interface.c:75 ../parser_interface.c:78 ../parser_interface.c:55
|
||||
#: ../parser_interface.c:58
|
||||
msgid "Out of memory\n"
|
||||
msgstr "Yetersiz bellek\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
#: ../parser_interface.c:61
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
#: ../parser_interface.c:64
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
msgstr "Profil protokole uymuyor\n"
|
||||
|
||||
#: ../parser_interface.c:84 ../parser_interface.c:87 ../parser_interface.c:64
|
||||
#: ../parser_interface.c:67
|
||||
msgid "Profile does not match signature\n"
|
||||
msgstr "Profil imzası tutmuyor\n"
|
||||
|
||||
#: ../parser_interface.c:87 ../parser_interface.c:90 ../parser_interface.c:67
|
||||
#: ../parser_interface.c:70
|
||||
msgid "Profile version not supported by Apparmor module\n"
|
||||
msgstr "Profil sürümü Apparmor modülü tarafından desteklenmiyor\n"
|
||||
|
||||
#: ../parser_interface.c:90 ../parser_interface.c:93 ../parser_interface.c:70
|
||||
#: ../parser_interface.c:73
|
||||
msgid "Profile already exists\n"
|
||||
msgstr "Profil zaten mevcut\n"
|
||||
|
||||
#: ../parser_interface.c:93 ../parser_interface.c:96 ../parser_interface.c:73
|
||||
#: ../parser_interface.c:76
|
||||
msgid "Profile doesn't exist\n"
|
||||
msgstr "Profil mevcut değil\n"
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
#: ../parser_interface.c:79
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#: ../parser_interface.c:82
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
msgstr "Bilinmeyen hata (%d): %s\n"
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119 ../parser_interface.c:96
|
||||
#: ../parser_interface.c:100
|
||||
#, c-format
|
||||
msgid "%s: Unable to add \"%s\". "
|
||||
msgstr "%s: \"%s\" eklenemedi. "
|
||||
|
||||
#: ../parser_interface.c:121 ../parser_interface.c:124
|
||||
#: ../parser_interface.c:101
|
||||
#: ../parser_interface.c:101 ../parser_interface.c:105
|
||||
#, c-format
|
||||
msgid "%s: Unable to replace \"%s\". "
|
||||
msgstr "%s: \"%s\" değiştirilemedi. "
|
||||
|
||||
#: ../parser_interface.c:126 ../parser_interface.c:129
|
||||
#: ../parser_interface.c:106
|
||||
#: ../parser_interface.c:106 ../parser_interface.c:110
|
||||
#, c-format
|
||||
msgid "%s: Unable to remove \"%s\". "
|
||||
msgstr "%s: \"%s\" silinemedi. "
|
||||
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:134
|
||||
#: ../parser_interface.c:111
|
||||
#: ../parser_interface.c:111 ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to stdout\n"
|
||||
msgstr "%s: stdout'a yazılamadı.\n"
|
||||
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:138
|
||||
#: ../parser_interface.c:115
|
||||
#: ../parser_interface.c:115 ../parser_interface.c:119
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
msgstr "%s: çıkış dosyasına yazılamıyor\n"
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
#: ../parser_interface.c:118 ../parser_interface.c:142
|
||||
#: ../parser_interface.c:123 ../parser_interface.c:147
|
||||
#, c-format
|
||||
msgid "%s: ASSERT: Invalid option: %d\n"
|
||||
msgstr "%s: ASSERT: Geçersiz seçenek: %d\n"
|
||||
|
||||
#: ../parser_interface.c:147 ../parser_interface.c:150
|
||||
#: ../parser_interface.c:127
|
||||
#: ../parser_interface.c:127 ../parser_interface.c:132
|
||||
#, c-format
|
||||
msgid "Addition succeeded for \"%s\".\n"
|
||||
msgstr "\"%s\" için ekleme başarılı oldu.\n"
|
||||
|
||||
#: ../parser_interface.c:151 ../parser_interface.c:154
|
||||
#: ../parser_interface.c:131
|
||||
#: ../parser_interface.c:131 ../parser_interface.c:136
|
||||
#, c-format
|
||||
msgid "Replacement succeeded for \"%s\".\n"
|
||||
msgstr "\"%s\" için değiştirme başarılı oldu.\n"
|
||||
|
||||
#: ../parser_interface.c:155 ../parser_interface.c:158
|
||||
#: ../parser_interface.c:135
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:140
|
||||
#, c-format
|
||||
msgid "Removal succeeded for \"%s\".\n"
|
||||
msgstr "\"%s\" için silme başarılı oldu.\n"
|
||||
@@ -146,7 +158,7 @@ msgstr ""
|
||||
"PANİK hatalı arttırma arabelleği %p pozisyon %p ext %p boyut %d res %p\n"
|
||||
|
||||
#: ../parser_interface.c:656 ../parser_interface.c:658
|
||||
#: ../parser_interface.c:446
|
||||
#: ../parser_interface.c:446 ../parser_interface.c:476
|
||||
#, c-format
|
||||
msgid "profile %s network rules not enforced\n"
|
||||
msgstr ""
|
||||
@@ -191,7 +203,7 @@ msgid "%s: Unable to write entire profile entry\n"
|
||||
msgstr "%s: Profil girdisinin tamamı yazılamadı\n"
|
||||
|
||||
#: ../parser_interface.c:839 ../parser_interface.c:831
|
||||
#: ../parser_interface.c:593
|
||||
#: ../parser_interface.c:593 ../parser_interface.c:579
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr ""
|
||||
@@ -199,9 +211,9 @@ msgstr ""
|
||||
#: parser_lex.l:100 parser_lex.l:163 parser_lex.l:169
|
||||
#, c-format
|
||||
msgid "Could not open '%s'"
|
||||
msgstr ""
|
||||
msgstr "'%s' açılamadı"
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173 parser_lex.l:174
|
||||
#, c-format
|
||||
msgid "fstat failed for '%s'"
|
||||
msgstr ""
|
||||
@@ -227,7 +239,7 @@ msgstr ""
|
||||
msgid "Found unexpected character: '%s'"
|
||||
msgstr "Beklenmeyen karakter bulundu: '%s'"
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428 parser_lex.l:474
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
|
||||
@@ -247,6 +259,7 @@ msgid "%s: Could not allocate memory for subdomainbase mount point\n"
|
||||
msgstr "%s: subdomainbase bağlantı noktası için bellek ayrılamadı\n"
|
||||
|
||||
#: ../parser_main.c:577 ../parser_main.c:616 ../parser_main.c:479
|
||||
#: ../parser_main.c:1444
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Warning: unable to find a suitable fs in %s, is it mounted?\n"
|
||||
@@ -254,6 +267,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:597 ../parser_main.c:635 ../parser_main.c:498
|
||||
#: ../parser_main.c:822
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Sorry. You need root privileges to run this program.\n"
|
||||
@@ -263,6 +277,7 @@ msgstr ""
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:604 ../parser_main.c:642 ../parser_main.c:505
|
||||
#: ../parser_main.c:828
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Warning! You've set this program setuid root.\n"
|
||||
@@ -274,7 +289,7 @@ msgstr ""
|
||||
"\n"
|
||||
|
||||
#: ../parser_main.c:704 ../parser_main.c:813 ../parser_main.c:836
|
||||
#: ../parser_main.c:946 ../parser_main.c:860
|
||||
#: ../parser_main.c:946 ../parser_main.c:860 ../parser_main.c:1038
|
||||
#, c-format
|
||||
msgid "Error: Could not read profile %s: %s.\n"
|
||||
msgstr "Hata: %s profili okunamadı: %s.\n"
|
||||
@@ -296,26 +311,36 @@ msgstr "Hata: %s profili okunamadı: %s.\n"
|
||||
#: parser_yacc.y:1166 parser_yacc.y:1170 parser_yacc.y:1180 parser_yacc.y:1190
|
||||
#: parser_yacc.y:1298 parser_yacc.y:1376 parser_yacc.y:1479 parser_yacc.y:1490
|
||||
#: parser_yacc.y:1565 parser_yacc.y:1583 parser_yacc.y:1590 parser_yacc.y:1639
|
||||
#: ../network.c:314 ../af_unix.cc:203
|
||||
#: ../network.c:314 ../af_unix.cc:203 ../parser_misc.c:215 ../parser_misc.c:939
|
||||
#: parser_yacc.y:343 parser_yacc.y:367 parser_yacc.y:533 parser_yacc.y:543
|
||||
#: parser_yacc.y:660 parser_yacc.y:741 parser_yacc.y:750 parser_yacc.y:1171
|
||||
#: parser_yacc.y:1219 parser_yacc.y:1255 parser_yacc.y:1264 parser_yacc.y:1268
|
||||
#: parser_yacc.y:1278 parser_yacc.y:1288 parser_yacc.y:1382 parser_yacc.y:1460
|
||||
#: parser_yacc.y:1592 parser_yacc.y:1597 parser_yacc.y:1674 parser_yacc.y:1692
|
||||
#: parser_yacc.y:1699 parser_yacc.y:1748 ../network.c:315 ../af_unix.cc:194
|
||||
msgid "Memory allocation error."
|
||||
msgstr "Bellek ayırma hatası."
|
||||
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#: ../parser_main.c:975
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#: ../parser_main.c:979
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#: ../parser_main.c:1132
|
||||
#, c-format
|
||||
msgid "%s: Errors found in file. Aborting.\n"
|
||||
msgstr "%s: Dosyada hatalar bulundu. Durduruluyor.\n"
|
||||
|
||||
#: ../parser_misc.c:426 ../parser_misc.c:597 ../parser_misc.c:339
|
||||
#: ../parser_misc.c:532
|
||||
msgid ""
|
||||
"Uppercase qualifiers \"RWLIMX\" are deprecated, please convert to lowercase\n"
|
||||
"See the apparmor.d(5) manpage for details.\n"
|
||||
@@ -326,15 +351,18 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:467 ../parser_misc.c:474 ../parser_misc.c:638
|
||||
#: ../parser_misc.c:645 ../parser_misc.c:380 ../parser_misc.c:387
|
||||
#: ../parser_misc.c:573 ../parser_misc.c:580
|
||||
msgid "Conflict 'a' and 'w' perms are mutually exclusive."
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:491 ../parser_misc.c:662 ../parser_misc.c:404
|
||||
#: ../parser_misc.c:597
|
||||
msgid "Exec qualifier 'i' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
"Çalıştırma niteleyicisi 'i' geçersiz, çakışan niteleyici zaten belirtilmiş"
|
||||
|
||||
#: ../parser_misc.c:502 ../parser_misc.c:673 ../parser_misc.c:415
|
||||
#: ../parser_misc.c:608
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Unconfined exec qualifier (%c%c) allows some dangerous environment variables "
|
||||
@@ -343,6 +371,7 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:510 ../parser_misc.c:551 ../parser_misc.c:681
|
||||
#: ../parser_misc.c:722 ../parser_misc.c:423 ../parser_misc.c:464
|
||||
#: ../parser_misc.c:616 ../parser_misc.c:657
|
||||
#, c-format
|
||||
msgid "Exec qualifier '%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
@@ -350,17 +379,20 @@ msgstr ""
|
||||
|
||||
#: ../parser_misc.c:537 ../parser_misc.c:545 ../parser_misc.c:708
|
||||
#: ../parser_misc.c:716 ../parser_misc.c:450 ../parser_misc.c:458
|
||||
#: ../parser_misc.c:643 ../parser_misc.c:651
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Exec qualifier '%c%c' invalid, conflicting qualifier already specified"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:593 ../parser_misc.c:764 ../parser_misc.c:506
|
||||
#: ../parser_misc.c:699
|
||||
#, c-format
|
||||
msgid "Internal: unexpected mode character '%c' in input"
|
||||
msgstr "Dahili: girdide beklenmeyen mod karakteri '%c'"
|
||||
|
||||
#: ../parser_misc.c:615 ../parser_misc.c:786 ../parser_misc.c:528
|
||||
#: ../parser_misc.c:721
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid perm 0x%llx\n"
|
||||
msgstr ""
|
||||
@@ -372,10 +404,12 @@ msgid "AppArmor parser error: %s\n"
|
||||
msgstr "AppArmor inceleyici hatası: %s\n"
|
||||
|
||||
#: ../parser_merge.c:92 ../parser_merge.c:91 ../parser_merge.c:83
|
||||
#: ../parser_merge.c:71
|
||||
msgid "Couldn't merge entries. Out of Memory\n"
|
||||
msgstr "Girdiler birleştirilemiyor. Yetersiz bellek\n"
|
||||
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#: ../parser_merge.c:93
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
@@ -384,117 +418,120 @@ msgstr ""
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348 parser_yacc.y:407
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384 parser_yacc.y:449
|
||||
#, c-format
|
||||
msgid "Failed to create alias %s -> %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506 parser_yacc.y:581
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510 parser_yacc.y:585
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513 parser_yacc.y:588
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516 parser_yacc.y:591
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530 parser_yacc.y:607
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552
|
||||
#: parser_yacc.y:463 parser_yacc.y:506 parser_yacc.y:552 parser_yacc.y:629
|
||||
#, c-format
|
||||
msgid "Invalid profile flag: %s."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:498 parser_yacc.y:520 parser_yacc.y:548 parser_yacc.y:594
|
||||
#: parser_yacc.y:673
|
||||
msgid "Assert: `rule' returned NULL."
|
||||
msgstr "Assert: `rule' NULL döndürdü."
|
||||
|
||||
#: parser_yacc.y:501 parser_yacc.y:546 parser_yacc.y:552 parser_yacc.y:584
|
||||
#: parser_yacc.y:598 parser_yacc.y:630
|
||||
#: parser_yacc.y:598 parser_yacc.y:630 parser_yacc.y:677 parser_yacc.y:709
|
||||
msgid ""
|
||||
"Invalid mode, in deny rules 'x' must not be preceded by exec qualifier 'i', "
|
||||
"'p', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602
|
||||
#: parser_yacc.y:524 parser_yacc.y:556 parser_yacc.y:602 parser_yacc.y:681
|
||||
msgid ""
|
||||
"Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', 'c', or 'u'"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633
|
||||
#: parser_yacc.y:549 parser_yacc.y:587 parser_yacc.y:633 parser_yacc.y:712
|
||||
msgid "Invalid mode, 'x' must be preceded by exec qualifier 'i', 'p', or 'u'"
|
||||
msgstr ""
|
||||
"Geçersiz mod; 'x', çalıştırma değişkenleri 'i', 'p' ya da 'u'dan sonra "
|
||||
"gelmelidir."
|
||||
|
||||
#: parser_yacc.y:574 parser_yacc.y:612 parser_yacc.y:614 parser_yacc.y:660
|
||||
#: parser_yacc.y:739
|
||||
msgid "Assert: `network_rule' return invalid protocol."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786 parser_yacc.y:867
|
||||
msgid "Assert: `change_profile' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810 parser_yacc.y:905
|
||||
msgid "Assert: 'hat rule' returned NULL."
|
||||
msgstr "Assert: `hat rule' NULL döndürdü."
|
||||
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819 parser_yacc.y:914
|
||||
msgid "Assert: 'local_profile rule' returned NULL."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992 parser_yacc.y:1077
|
||||
#, c-format
|
||||
msgid "Unset boolean variable %s used in if-expression"
|
||||
msgstr "If deyimi içinde ayarlanmamış boolean değişkeni %s"
|
||||
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092
|
||||
#: parser_yacc.y:882 parser_yacc.y:986 parser_yacc.y:1092 parser_yacc.y:1181
|
||||
msgid "unsafe rule missing exec permissions"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060
|
||||
#: parser_yacc.y:901 parser_yacc.y:954 parser_yacc.y:1060 parser_yacc.y:1148
|
||||
msgid "subset can only be used with link rules."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062
|
||||
#: parser_yacc.y:903 parser_yacc.y:956 parser_yacc.y:1062 parser_yacc.y:1150
|
||||
msgid "link and exec perms conflict on a file rule using ->"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064
|
||||
#: parser_yacc.y:905 parser_yacc.y:958 parser_yacc.y:1064 parser_yacc.y:1152
|
||||
msgid "link perms are not allowed on a named profile transition.\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109
|
||||
#: parser_yacc.y:921 parser_yacc.y:1003 parser_yacc.y:1109 parser_yacc.y:1198
|
||||
#, c-format
|
||||
msgid "missing an end of line character? (entry: %s)"
|
||||
msgstr "eksik satır sonu karakteri? (girdi: %s)"
|
||||
|
||||
#: parser_yacc.y:975 parser_yacc.y:985 parser_yacc.y:1057 parser_yacc.y:1067
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155
|
||||
#: parser_yacc.y:1145 parser_yacc.y:1155 parser_yacc.y:1234 parser_yacc.y:1244
|
||||
msgid "Invalid network entry."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1039 parser_yacc.y:1048 parser_yacc.y:1254 parser_yacc.y:1510
|
||||
#: parser_yacc.y:1617
|
||||
#, c-format
|
||||
msgid "Invalid capability %s."
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525 parser_yacc.y:1637
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
@@ -510,11 +547,13 @@ msgid "%s: Illegal open {, nesting groupings not allowed\n"
|
||||
msgstr "%s: Kural dışı açık {, iç içe konan gruplamalara izin verilmez\n"
|
||||
|
||||
#: ../parser_regex.c:265 ../parser_regex.c:274 ../parser_regex.c:278
|
||||
#: ../parser_regex.c:306
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Invalid number of items between {}\n"
|
||||
msgstr "%s: Regex gruplama hatası: {} içinde geçersiz öğe sayısı\n"
|
||||
|
||||
#: ../parser_regex.c:271 ../parser_regex.c:280 ../parser_regex.c:284
|
||||
#: ../parser_regex.c:312
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close }, no matching open { detected\n"
|
||||
@@ -523,6 +562,7 @@ msgstr ""
|
||||
"bulunamadı\n"
|
||||
|
||||
#: ../parser_regex.c:337 ../parser_regex.c:343 ../parser_regex.c:361
|
||||
#: ../parser_regex.c:403
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Unclosed grouping or character class, expecting "
|
||||
@@ -537,16 +577,19 @@ msgid "%s: Internal buffer overflow detected, %d characters exceeded\n"
|
||||
msgstr "%s: Dahili ara bellek taşması saptandı, %d karakter aşıldı\n"
|
||||
|
||||
#: ../parser_regex.c:355 ../parser_regex.c:361 ../parser_regex.c:377
|
||||
#: ../parser_regex.c:419
|
||||
#, c-format
|
||||
msgid "%s: Unable to parse input line '%s'\n"
|
||||
msgstr "%s: Giriş satırı '%s' incelenemedi\n"
|
||||
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#: ../parser_regex.c:487
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#: ../parser_policy.c:383
|
||||
#, c-format
|
||||
msgid "ERROR merging rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
@@ -565,17 +608,20 @@ msgstr ""
|
||||
"\t'**' sadece bir kuralın sonunda kullanılabilir.\n"
|
||||
|
||||
#: ../parser_policy.c:279 ../parser_policy.c:359 ../parser_policy.c:332
|
||||
#: ../parser_policy.c:340
|
||||
#, c-format
|
||||
msgid "ERROR processing regexs for profile %s, failed to load\n"
|
||||
msgstr "HATA: %s profilinin regex'leri işlenemedi, yükleme başarısız oldu\n"
|
||||
|
||||
#: ../parser_policy.c:306 ../parser_policy.c:389 ../parser_policy.c:362
|
||||
#: ../parser_policy.c:370
|
||||
#, c-format
|
||||
msgid "ERROR expanding variables for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
"HATA: %s profili için değişkenler genişletilemedi, yükleme başarısız oldu\n"
|
||||
|
||||
#: ../parser_policy.c:390 ../parser_policy.c:382 ../parser_policy.c:355
|
||||
#: ../parser_policy.c:363
|
||||
#, c-format
|
||||
msgid "ERROR adding hat access rule for profile %s\n"
|
||||
msgstr ""
|
||||
@@ -606,7 +652,7 @@ msgid "%s: Errors found in combining rules postprocessing. Aborting.\n"
|
||||
msgstr ""
|
||||
"%s: Kural birleştirme sonrası işlemlerde hata bulundu. Durduruluyor.\n"
|
||||
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#: parser_lex.l:180 parser_lex.l:186 parser_lex.l:187
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
@@ -616,9 +662,10 @@ msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
#: ../parser_main.c:1041 ../parser_main.c:1332 ../parser_main.c:1354
|
||||
#: ../parser_misc.c:280 ../parser_misc.c:299 ../parser_misc.c:308
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
msgstr "Yetersiz bellek"
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
@@ -645,11 +692,11 @@ msgstr ""
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
#: parser_yacc.y:575 parser_yacc.y:621 parser_yacc.y:700
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
#: parser_yacc.y:612 parser_yacc.y:658 parser_yacc.y:737
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
|
||||
@@ -665,41 +712,41 @@ msgstr ""
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613 parser_yacc.y:1722
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628 parser_yacc.y:1737
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635 parser_yacc.y:1744
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650 parser_yacc.y:1759
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236 ../parser_regex.c:264
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256 ../parser_regex.c:284
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339 ../parser_policy.c:347
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369 ../parser_policy.c:377
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
@@ -719,51 +766,51 @@ msgstr ""
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#: ../parser_misc.c:575 ../parser_misc.c:768
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#: ../parser_misc.c:599 ../parser_misc.c:792
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:703
|
||||
#: parser_yacc.y:703 parser_yacc.y:784
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:720
|
||||
#: parser_yacc.y:720 parser_yacc.y:801
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:736
|
||||
#: parser_yacc.y:736 parser_yacc.y:817
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:752
|
||||
#: parser_yacc.y:752 parser_yacc.y:833
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:768
|
||||
#: parser_yacc.y:768 parser_yacc.y:849 parser_yacc.y:869
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:794
|
||||
#: parser_yacc.y:794 parser_yacc.y:885
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#: parser_yacc.y:1293 parser_yacc.y:1377
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#: parser_yacc.y:1371 parser_yacc.y:1455
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#: ../parser_regex.c:368 ../parser_regex.c:410
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
|
@@ -13,14 +13,14 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-15 12:27+0000\n"
|
||||
"Last-Translator: yurchor <Unknown>\n"
|
||||
"PO-Revision-Date: 2020-05-19 21:52+0000\n"
|
||||
"Last-Translator: Nazarii Ritter <nazariy.ritter@gmail.com>\n"
|
||||
"Language-Team: Ukrainian <translation@linux.org.ua>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2020-05-20 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 0385b538081bc4718df6fb844a3afc89729c94ce)\n"
|
||||
"Language: uk\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
@@ -747,27 +747,29 @@ msgstr "ПОМИЛКА заміри псевдонімів для профілю
|
||||
#: ../parser_interface.c:635 ../parser_interface.c:638
|
||||
#, c-format
|
||||
msgid "%s: Unable to write %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s: Неможливо записати %s\n"
|
||||
|
||||
#: ../parser_main.c:721
|
||||
#, c-format
|
||||
msgid "Error: Could not read binary profile or cache file %s: %s.\n"
|
||||
msgstr ""
|
||||
"Помилка: Не вдалося прочитати бінарний профіль або файл кешу %s: %s.\n"
|
||||
|
||||
#: ../parser_main.c:811
|
||||
#, c-format
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
msgstr "Помилка: Не вдалося прочитати файл кешу '%s', пропуск…\n"
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
"Внутрішня помилка: неочікуваний режим %s символу «%c» у вхідних даних"
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "Внутрішня помилка, спричинена невірним дозволом %s 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:703
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
|
@@ -6,14 +6,14 @@ msgstr ""
|
||||
"Project-Id-Version: apparmor-parser\n"
|
||||
"Report-Msgid-Bugs-To: <apparmor@lists.ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2014-09-13 00:11-0700\n"
|
||||
"PO-Revision-Date: 2013-11-15 04:12+0000\n"
|
||||
"Last-Translator: Novell Language <Unknown>\n"
|
||||
"PO-Revision-Date: 2022-01-15 11:52+0000\n"
|
||||
"Last-Translator: Yulin Yang <yylteam@icloud.com>\n"
|
||||
"Language-Team: Novell Language <language@novell.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2019-04-18 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 18928)\n"
|
||||
"X-Launchpad-Export-Date: 2022-01-16 04:32+0000\n"
|
||||
"X-Generator: Launchpad (build 0072e2709f85567cc6c8d33e98acde9fcc09f491)\n"
|
||||
"Language: zh_CN\n"
|
||||
|
||||
#: ../parser_include.c:113 ../parser_include.c:111
|
||||
@@ -40,7 +40,7 @@ msgstr "写入位置无效\n"
|
||||
|
||||
#: ../parser_interface.c:72 ../parser_interface.c:75 ../parser_interface.c:52
|
||||
msgid "Permission denied\n"
|
||||
msgstr "拒绝许可权限\n"
|
||||
msgstr "权限不足\n"
|
||||
|
||||
#: ../parser_interface.c:75 ../parser_interface.c:78 ../parser_interface.c:55
|
||||
msgid "Out of memory\n"
|
||||
@@ -48,7 +48,7 @@ msgstr "内存不足\n"
|
||||
|
||||
#: ../parser_interface.c:78 ../parser_interface.c:81 ../parser_interface.c:58
|
||||
msgid "Couldn't copy profile: Bad memory address\n"
|
||||
msgstr ""
|
||||
msgstr "无法复制配置文件:内存地址不正确\n"
|
||||
|
||||
#: ../parser_interface.c:81 ../parser_interface.c:84 ../parser_interface.c:61
|
||||
msgid "Profile doesn't conform to protocol\n"
|
||||
@@ -72,12 +72,12 @@ msgstr "配置文件不存在\n"
|
||||
|
||||
#: ../parser_interface.c:96 ../parser_interface.c:99 ../parser_interface.c:76
|
||||
msgid "Permission denied; attempted to load a profile while confined?\n"
|
||||
msgstr ""
|
||||
msgstr "权限被拒绝;试图在受限时加载配置文件?\n"
|
||||
|
||||
#: ../parser_interface.c:99 ../parser_interface.c:102 ../parser_interface.c:79
|
||||
#, c-format
|
||||
msgid "Unknown error (%d): %s\n"
|
||||
msgstr ""
|
||||
msgstr "未知错误 (%d): %s\n"
|
||||
|
||||
#: ../parser_interface.c:116 ../parser_interface.c:119
|
||||
#: ../parser_interface.c:96
|
||||
@@ -101,13 +101,13 @@ msgstr "%s: 无法去除\"%s\"。 "
|
||||
#: ../parser_interface.c:111
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to stdout\n"
|
||||
msgstr "%s: 无法写入 stdout\n"
|
||||
msgstr "%s: 无法写入到标准输出\n"
|
||||
|
||||
#: ../parser_interface.c:135 ../parser_interface.c:138
|
||||
#: ../parser_interface.c:115
|
||||
#, c-format
|
||||
msgid "%s: Unable to write to output file\n"
|
||||
msgstr ""
|
||||
msgstr "%s: 无法写入输出文件\n"
|
||||
|
||||
#: ../parser_interface.c:138 ../parser_interface.c:162
|
||||
#: ../parser_interface.c:141 ../parser_interface.c:165
|
||||
@@ -143,11 +143,11 @@ msgstr "PANIC 无效的递增缓冲区:%p pos %p ext %p size %d res %p\n"
|
||||
#: ../parser_interface.c:446
|
||||
#, c-format
|
||||
msgid "profile %s network rules not enforced\n"
|
||||
msgstr ""
|
||||
msgstr "配置文件%s网络规则未强制执行\n"
|
||||
|
||||
#: ../parser_interface.c:666
|
||||
msgid "Unknown pattern type\n"
|
||||
msgstr ""
|
||||
msgstr "未知模式类型\n"
|
||||
|
||||
#: ../parser_interface.c:750 ../parser_interface.c:902
|
||||
#: ../parser_interface.c:743 ../parser_interface.c:894
|
||||
@@ -188,32 +188,32 @@ msgstr "%s: 无法写入整个配置文件项\n"
|
||||
#: ../parser_interface.c:593
|
||||
#, c-format
|
||||
msgid "%s: Unable to write entire profile entry to cache\n"
|
||||
msgstr ""
|
||||
msgstr "%s: 无法将整个配置文件项写入缓存\n"
|
||||
|
||||
#: parser_lex.l:100 parser_lex.l:163 parser_lex.l:169
|
||||
#, c-format
|
||||
msgid "Could not open '%s'"
|
||||
msgstr ""
|
||||
msgstr "无法打开“%s”"
|
||||
|
||||
#: parser_lex.l:104 parser_lex.l:167 parser_lex.l:173
|
||||
#, c-format
|
||||
msgid "fstat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "\"%s\"的 fstat 失败"
|
||||
|
||||
#: parser_lex.l:121
|
||||
#, c-format
|
||||
msgid "opendir failed '%s'"
|
||||
msgstr ""
|
||||
msgstr "打开目录\"%s\"失败"
|
||||
|
||||
#: parser_lex.l:152
|
||||
#, c-format
|
||||
msgid "stat failed for '%s'"
|
||||
msgstr ""
|
||||
msgstr "\"%s\"的 stat 失败"
|
||||
|
||||
#: parser_lex.l:155 parser_lex.l:133 parser_lex.l:139
|
||||
#, c-format
|
||||
msgid "Could not open '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "无法在\"%2$s\"中打开\"%1$s\""
|
||||
|
||||
#: parser_lex.l:284 parser_lex.l:322 parser_lex.l:362 parser_lex.l:399
|
||||
#: parser_lex.l:469 parser_lex.l:655 parser_lex.l:586 parser_lex.l:638
|
||||
@@ -223,7 +223,7 @@ msgstr "发现意外字符: '%s'"
|
||||
|
||||
#: parser_lex.l:386 parser_lex.l:418 parser_lex.l:428
|
||||
msgid "Variable declarations do not accept trailing commas"
|
||||
msgstr ""
|
||||
msgstr "变量声明不接受尾随逗号"
|
||||
|
||||
#: parser_lex.l:420
|
||||
#, c-format
|
||||
@@ -233,7 +233,7 @@ msgstr "(network_mode) 发现意外字符:“%s”"
|
||||
#: ../parser_main.c:333 ../parser_common.c:61 ../parser_common.c:106
|
||||
#, c-format
|
||||
msgid "Warning from %s (%s%sline %d): %s"
|
||||
msgstr ""
|
||||
msgstr "来自%s(%s%s行 %d)的警告:%s"
|
||||
|
||||
#: ../parser_main.c:531
|
||||
#, c-format
|
||||
@@ -299,12 +299,12 @@ msgstr "内存分配错误。"
|
||||
#: ../parser_main.c:740 ../parser_main.c:872 ../parser_main.c:757
|
||||
#, c-format
|
||||
msgid "Cached load succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "\"%s\"的缓存加载成功。\n"
|
||||
|
||||
#: ../parser_main.c:744 ../parser_main.c:876 ../parser_main.c:761
|
||||
#, c-format
|
||||
msgid "Cached reload succeeded for \"%s\".\n"
|
||||
msgstr ""
|
||||
msgstr "\"%s\"的缓存重加载成功。\n"
|
||||
|
||||
#: ../parser_main.c:910 ../parser_main.c:1058 ../parser_main.c:967
|
||||
#, c-format
|
||||
@@ -372,16 +372,16 @@ msgstr "无法合并项。内存不足\n"
|
||||
#: ../parser_merge.c:111 ../parser_merge.c:113 ../parser_merge.c:105
|
||||
#, c-format
|
||||
msgid "profile %s: has merged rule %s with conflicting x modifiers\n"
|
||||
msgstr ""
|
||||
msgstr "配置文件%s:已将规则%s与冲突的x修饰符合并\n"
|
||||
|
||||
#: parser_yacc.y:236 parser_yacc.y:277 parser_yacc.y:320
|
||||
msgid "Profile attachment must begin with a '/'."
|
||||
msgstr ""
|
||||
msgstr "配置文件附件必须以\"/\"开头。"
|
||||
|
||||
#: parser_yacc.y:260 parser_yacc.y:302 parser_yacc.y:348
|
||||
msgid ""
|
||||
"Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."
|
||||
msgstr ""
|
||||
msgstr "配置文件名称必须以\"/\"、命名空间或关键字\"profile\"或\"hat\"开头。"
|
||||
|
||||
#: parser_yacc.y:296 parser_yacc.y:338 parser_yacc.y:384
|
||||
#, c-format
|
||||
@@ -390,20 +390,20 @@ msgstr "无法创建别名 %s -> %s\n"
|
||||
|
||||
#: parser_yacc.y:417 parser_yacc.y:460 parser_yacc.y:506
|
||||
msgid "Profile flag chroot_relative conflicts with namespace_relative"
|
||||
msgstr ""
|
||||
msgstr "配置文件标志 chroot_relative 与 namespace_relative 冲突"
|
||||
|
||||
#: parser_yacc.y:421 parser_yacc.y:464 parser_yacc.y:510
|
||||
msgid "Profile flag mediate_deleted conflicts with delegate_deleted"
|
||||
msgstr ""
|
||||
msgstr "配置文件标志 mediate_deleted 与 delegate_deleted 冲突"
|
||||
|
||||
#: parser_yacc.y:424 parser_yacc.y:467 parser_yacc.y:513
|
||||
msgid ""
|
||||
"Profile flag attach_disconnected conflicts with no_attach_disconnected"
|
||||
msgstr ""
|
||||
msgstr "配置文件标志 attach_disconnected 与 no_attach_disconnected 冲突"
|
||||
|
||||
#: parser_yacc.y:427 parser_yacc.y:470 parser_yacc.y:516
|
||||
msgid "Profile flag chroot_attach conflicts with chroot_no_attach"
|
||||
msgstr ""
|
||||
msgstr "配置文件标志 chroot_attach 与 chroot_no_attach 冲突"
|
||||
|
||||
#: parser_yacc.y:441 parser_yacc.y:484 parser_yacc.y:530
|
||||
msgid "Profile flag 'debug' is no longer valid."
|
||||
@@ -416,7 +416,7 @@ msgstr "无效的配置文件标志:%s。"
|
||||
|
||||
#: parser_yacc.y:498 parser_yacc.y:520 parser_yacc.y:548 parser_yacc.y:594
|
||||
msgid "Assert: `rule' returned NULL."
|
||||
msgstr "声明:`rule'返回 NULL。"
|
||||
msgstr "声明:`rule'返回空值(NULL)。"
|
||||
|
||||
#: parser_yacc.y:501 parser_yacc.y:546 parser_yacc.y:552 parser_yacc.y:584
|
||||
#: parser_yacc.y:598 parser_yacc.y:630
|
||||
@@ -440,15 +440,15 @@ msgstr "声明:“network_rule”返回无效协议。"
|
||||
|
||||
#: parser_yacc.y:649 parser_yacc.y:696 parser_yacc.y:786
|
||||
msgid "Assert: `change_profile' returned NULL."
|
||||
msgstr "声明:“change_profile”返回 NULL。"
|
||||
msgstr "声明:“change_profile”返回空值(NULL)。"
|
||||
|
||||
#: parser_yacc.y:680 parser_yacc.y:720 parser_yacc.y:810
|
||||
msgid "Assert: 'hat rule' returned NULL."
|
||||
msgstr "声明:'hat rule'返回 NULL。"
|
||||
msgstr "声明:'hat rule'返回空值(NULL)。"
|
||||
|
||||
#: parser_yacc.y:689 parser_yacc.y:729 parser_yacc.y:819
|
||||
msgid "Assert: 'local_profile rule' returned NULL."
|
||||
msgstr "声明:“local_profile rule”返回 NULL。"
|
||||
msgstr "声明:“local_profile rule”返回空值(NULL)。"
|
||||
|
||||
#: parser_yacc.y:824 parser_yacc.y:885 parser_yacc.y:992
|
||||
#, c-format
|
||||
@@ -489,12 +489,12 @@ msgstr "功能 %s 无效。"
|
||||
#: parser_yacc.y:1066 parser_yacc.y:1269 parser_yacc.y:1525
|
||||
#, c-format
|
||||
msgid "AppArmor parser error for %s%s%s at line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "第 %4$d 行 %1$s%2$s%3$s 的AppArmor分析器错误:%5$s\n"
|
||||
|
||||
#: parser_yacc.y:1072 parser_yacc.y:1275 parser_yacc.y:1531
|
||||
#, c-format
|
||||
msgid "AppArmor parser error,%s%s line %d: %s\n"
|
||||
msgstr ""
|
||||
msgstr "AppArmor分析器错误,在 %s%s 行 %d:%s\n"
|
||||
|
||||
#: ../parser_regex.c:244
|
||||
#, c-format
|
||||
@@ -532,7 +532,7 @@ msgstr "%s: 无法对输入行'%s'进行语法分析\n"
|
||||
#: ../parser_regex.c:397 ../parser_regex.c:405 ../parser_regex.c:421
|
||||
#, c-format
|
||||
msgid "%s: Invalid profile name '%s' - bad regular expression\n"
|
||||
msgstr ""
|
||||
msgstr "%s: 配置文件名称\"%s\"无效-错误的正则表达式\n"
|
||||
|
||||
#: ../parser_policy.c:202 ../parser_policy.c:402 ../parser_policy.c:375
|
||||
#, c-format
|
||||
@@ -593,161 +593,161 @@ msgstr "%s: 在组合规则后处理中发现错误。正在中止。\n"
|
||||
#: parser_lex.l:180 parser_lex.l:186
|
||||
#, c-format
|
||||
msgid "Could not process include directory '%s' in '%s'"
|
||||
msgstr ""
|
||||
msgstr "无法处理\"%s\"中的包含目录\"%s\""
|
||||
|
||||
#: ../parser_main.c:660 ../parser_main.c:523
|
||||
msgid "Feature buffer full."
|
||||
msgstr ""
|
||||
msgstr "功能缓冲区已满。"
|
||||
|
||||
#: ../parser_main.c:1115 ../parser_main.c:1132 ../parser_main.c:1024
|
||||
#: ../parser_main.c:1041
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
msgstr "内存不足"
|
||||
|
||||
#: ../parser_main.c:1182 ../parser_main.c:1091
|
||||
#, c-format
|
||||
msgid "Can't create cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "无法创建目录:%s\n"
|
||||
|
||||
#: ../parser_main.c:1185 ../parser_main.c:1094
|
||||
#, c-format
|
||||
msgid "File in cache directory location: %s\n"
|
||||
msgstr ""
|
||||
msgstr "缓存目录位置中的文件:%s\n"
|
||||
|
||||
#: ../parser_main.c:1188 ../parser_main.c:1097
|
||||
#, c-format
|
||||
msgid "Can't update cache directory: %s\n"
|
||||
msgstr ""
|
||||
msgstr "无法更新缓存目录:%s\n"
|
||||
|
||||
#: ../parser_misc.c:833
|
||||
#, c-format
|
||||
msgid "Internal: unexpected DBus mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "内部:输入中意外的DBus模式字符\"%c\""
|
||||
|
||||
#: ../parser_misc.c:857
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid DBus perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "内部错误,生成了无效的DBus perm 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:575 parser_yacc.y:621
|
||||
msgid "deny prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "不允许使用拒绝前缀"
|
||||
|
||||
#: parser_yacc.y:612 parser_yacc.y:658
|
||||
msgid "owner prefix not allowed"
|
||||
msgstr ""
|
||||
msgstr "不允许使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:660
|
||||
msgid "owner prefix not allow on mount rules"
|
||||
msgstr ""
|
||||
msgstr "装载规则中不允许使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:677
|
||||
msgid "owner prefix not allow on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "dbus规则上不允许使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:704
|
||||
msgid "owner prefix not allow on capability rules"
|
||||
msgstr ""
|
||||
msgstr "不允许在功能规则上使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:1357 parser_yacc.y:1613
|
||||
#, c-format
|
||||
msgid "invalid mount conditional %s%s"
|
||||
msgstr ""
|
||||
msgstr "无效的装载条件%s%s"
|
||||
|
||||
#: parser_yacc.y:1374 parser_yacc.y:1628
|
||||
msgid "bad mount rule"
|
||||
msgstr ""
|
||||
msgstr "错误的装载规则"
|
||||
|
||||
#: parser_yacc.y:1381 parser_yacc.y:1635
|
||||
msgid "mount point conditions not currently supported"
|
||||
msgstr ""
|
||||
msgstr "当前不支持装载点条件"
|
||||
|
||||
#: parser_yacc.y:1398 parser_yacc.y:1650
|
||||
#, c-format
|
||||
msgid "invalid pivotroot conditional '%s'"
|
||||
msgstr ""
|
||||
msgstr "无效的pivotroot条件\"%s\""
|
||||
|
||||
#: ../parser_regex.c:241 ../parser_regex.c:236
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: Regex grouping error: Invalid close ], no matching open [ detected\n"
|
||||
msgstr ""
|
||||
msgstr "%s: 正则表达式分组错误:无效的关闭\"]\",未检测到匹配的打开\"[\"\n"
|
||||
|
||||
#: ../parser_regex.c:257 ../parser_regex.c:256
|
||||
#, c-format
|
||||
msgid "%s: Regex grouping error: Exceeded maximum nesting of {}\n"
|
||||
msgstr ""
|
||||
msgstr "%s: 正则表达式分组错误:超过了{}的最大嵌套\n"
|
||||
|
||||
#: ../parser_policy.c:366 ../parser_policy.c:339
|
||||
#, c-format
|
||||
msgid "ERROR processing policydb rules for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "处理配置文件 %s 的policydb规则时出错,加载失败\n"
|
||||
|
||||
#: ../parser_policy.c:396 ../parser_policy.c:369
|
||||
#, c-format
|
||||
msgid "ERROR replacing aliases for profile %s, failed to load\n"
|
||||
msgstr ""
|
||||
msgstr "替换配置文件 %s 的别名时出错,加载失败\n"
|
||||
|
||||
#: ../parser_interface.c:635 ../parser_interface.c:638
|
||||
#, c-format
|
||||
msgid "%s: Unable to write %s\n"
|
||||
msgstr ""
|
||||
msgstr "%s: 无法写入 %s\n"
|
||||
|
||||
#: ../parser_main.c:721
|
||||
#, c-format
|
||||
msgid "Error: Could not read binary profile or cache file %s: %s.\n"
|
||||
msgstr ""
|
||||
msgstr "错误:无法读取二进制配置文件或缓存文件 %s:%s。\n"
|
||||
|
||||
#: ../parser_main.c:811
|
||||
#, c-format
|
||||
msgid "Error: Could not read cache file '%s', skipping...\n"
|
||||
msgstr ""
|
||||
msgstr "错误:无法读取缓存文件\"%s\",正在跳过...\n"
|
||||
|
||||
#: ../parser_misc.c:575
|
||||
#, c-format
|
||||
msgid "Internal: unexpected %s mode character '%c' in input"
|
||||
msgstr ""
|
||||
msgstr "内部:输入中出现意外的 %s 模式字符\"%c\""
|
||||
|
||||
#: ../parser_misc.c:599
|
||||
#, c-format
|
||||
msgid "Internal error generated invalid %s perm 0x%x\n"
|
||||
msgstr ""
|
||||
msgstr "内部错误,生成了无效的 %s perm 0x%x\n"
|
||||
|
||||
#: parser_yacc.y:703
|
||||
msgid "owner prefix not allowed on mount rules"
|
||||
msgstr ""
|
||||
msgstr "装载规则上不允许使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:720
|
||||
msgid "owner prefix not allowed on dbus rules"
|
||||
msgstr ""
|
||||
msgstr "dbus规则上不允许使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:736
|
||||
msgid "owner prefix not allowed on signal rules"
|
||||
msgstr ""
|
||||
msgstr "信号规则中不允许使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:752
|
||||
msgid "owner prefix not allowed on ptrace rules"
|
||||
msgstr ""
|
||||
msgstr "ptrace规则上不允许使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:768
|
||||
msgid "owner prefix not allowed on unix rules"
|
||||
msgstr ""
|
||||
msgstr "unix规则上不允许使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:794
|
||||
msgid "owner prefix not allowed on capability rules"
|
||||
msgstr ""
|
||||
msgstr "功能规则上不允许使用所有者前缀"
|
||||
|
||||
#: parser_yacc.y:1293
|
||||
#, c-format
|
||||
msgid "dbus rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "dbus规则:无效的条件组 %s=()"
|
||||
|
||||
#: parser_yacc.y:1371
|
||||
#, c-format
|
||||
msgid "unix rule: invalid conditional group %s=()"
|
||||
msgstr ""
|
||||
msgstr "unix规则:无效的条件组 %s=()"
|
||||
|
||||
#: ../parser_regex.c:368
|
||||
#, c-format
|
||||
msgid "%s: Regex error: trailing '\\' escape character\n"
|
||||
msgstr ""
|
||||
msgstr "%s: 正则表达式错误:尾随\"\\\"转义字符\n"
|
||||
|
@@ -27,7 +27,9 @@ const char *profile_mode_table[] = {
|
||||
"complain",
|
||||
"kill",
|
||||
"unconfined",
|
||||
"prompt"
|
||||
"prompt",
|
||||
"default_allow",
|
||||
"conflict" /* should not ever be displayed */
|
||||
};
|
||||
|
||||
bool deref_profileptr_lt::operator()(Profile * const &lhs, Profile * const &rhs) const
|
||||
@@ -71,20 +73,6 @@ void ProfileList::dump_profile_names(bool children)
|
||||
}
|
||||
}
|
||||
|
||||
bool Profile::alloc_net_table()
|
||||
{
|
||||
if (net.allow)
|
||||
return true;
|
||||
net.allow = (unsigned int *) calloc(get_af_max(), sizeof(unsigned int));
|
||||
net.audit = (unsigned int *) calloc(get_af_max(), sizeof(unsigned int));
|
||||
net.deny = (unsigned int *) calloc(get_af_max(), sizeof(unsigned int));
|
||||
net.quiet = (unsigned int *) calloc(get_af_max(), sizeof(unsigned int));
|
||||
if (!net.allow || !net.audit || !net.deny || !net.quiet)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Profile::~Profile()
|
||||
{
|
||||
hat_table.clear();
|
||||
@@ -114,14 +102,6 @@ Profile::~Profile()
|
||||
for (int i = (AA_EXEC_LOCAL >> 10) + 1; i < AA_EXEC_COUNT; i++)
|
||||
if (exec_table[i])
|
||||
free(exec_table[i]);
|
||||
if (net.allow)
|
||||
free(net.allow);
|
||||
if (net.audit)
|
||||
free(net.audit);
|
||||
if (net.deny)
|
||||
free(net.deny);
|
||||
if (net.quiet)
|
||||
free(net.quiet);
|
||||
}
|
||||
|
||||
static bool comp (rule_t *lhs, rule_t *rhs)
|
||||
@@ -347,6 +327,19 @@ static int profile_add_hat_rules(Profile *prof)
|
||||
|
||||
void Profile::post_parse_profile(void)
|
||||
{
|
||||
/* semantic check stuff that can't be done in parse, like flags */
|
||||
if (flags.flags & FLAG_INTERRUPTIBLE) {
|
||||
if (!features_supports_flag_interruptible) {
|
||||
warn_once(name, "flag interruptible not supported. Ignoring");
|
||||
/* TODO: don't clear in parse data, only at encode */
|
||||
flags.flags &= ~FLAG_INTERRUPTIBLE;
|
||||
}
|
||||
}
|
||||
if (flags.signal) {
|
||||
if (!features_supports_flag_signal) {
|
||||
warn_once(name, "kill.signal not supported. Ignoring");
|
||||
}
|
||||
}
|
||||
post_process_file_entries(this);
|
||||
post_process_rule_entries(this);
|
||||
}
|
||||
@@ -355,6 +348,12 @@ void Profile::add_implied_rules(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
for (RuleList::iterator i = rule_ents.begin(); i != rule_ents.end(); i++) {
|
||||
if ((*i)->skip())
|
||||
continue;
|
||||
(*i)->add_implied_rules(*this);
|
||||
}
|
||||
|
||||
error = profile_add_hat_rules(this);
|
||||
if (error) {
|
||||
PERROR(_("ERROR adding hat access rule for profile %s\n"),
|
||||
@@ -363,3 +362,9 @@ void Profile::add_implied_rules(void)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* do we want to warn once/profile or just once per compile?? */
|
||||
void Profile::warn_once(const char *name, const char *msg)
|
||||
{
|
||||
common_warn_once(name, msg, &warned_name);
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user