(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/eacces-error.c) |
| |
| 83 | | | static const char * |
| 84 | | | eacces_error_get_full(const char *func, const char *path, bool creating) |
| 85 | | | { |
| 86 | | | const char *prev_path = path, *dir = "/", *p; |
| 87 | | | const struct passwd *pw; |
| 88 | | | const struct group *group; |
| 89 | | | string_t *errmsg; |
| 90 | | | struct stat st, dir_st; |
| 91 | | | int orig_errno, ret = -1; |
| 92 | | | |
| 93 | | | orig_errno = errno; |
| 94 | | | errmsg = t_str_new(256); |
| 95 | | | str_printfa(errmsg, "%s(%s) failed: Permission denied (euid=%s", |
| 96 | | | func, path, dec2str(geteuid())); |
| 97 | | | |
| 98 | | | pw = getpwuid(geteuid()); |
| 99 | | | if (pw != NULL) |
Event 1:
Skipping " if". pw != (void *)0 evaluates to false.
hide
|
|
| 100 | | | str_printfa(errmsg, "(%s)", pw->pw_name); |
| 101 | | | |
| 102 | | | str_printfa(errmsg, " egid=%s", dec2str(getegid())); |
| 103 | | | group = getgrgid(getegid()); |
| 104 | | | if (group != NULL) |
Event 2:
Skipping " if". group != (void *)0 evaluates to false.
hide
|
|
| 105 | | | str_printfa(errmsg, "(%s)", group->gr_name); |
| 106 | | | |
| 107 | | | while ((p = strrchr(prev_path, '/')) != NULL) { |
Event 3:
Entering loop body. (p = strrchr(...)) != (void *)0 evaluates to true.
hide
|
|
| 108 | | | dir = t_strdup_until(prev_path, p); |
| 109 | | | ret = stat(dir, &st); |
Event 4:
stat64() does not initialize st. - This may be because of a failure case or other special case for stat64(). Consult the stat64() documentation for more information.
hide
|
|
| 110 | | | if (ret == 0) |
Event 5:
Skipping " if". ret == 0 evaluates to false.
hide
|
|
| 111 | | | break; |
| 112 | | | if (errno == EACCES) {
x /usr/include/asm-generic/errno-base.h |
| |
16 | #define EACCES 13 /* Permission denied */ |
| |
|
Event 6:
Skipping " if". errno == 13 evaluates to true.
hide
|
|
| 113 | | | |
| 114 | | | } else if (errno == ENOENT && creating) {
x /usr/include/asm-generic/errno-base.h |
| |
5 | #define ENOENT 2 /* No such file or directory */ |
| |
|
| 115 | | | |
| 116 | | | |
| 117 | | | } else { |
| 118 | | | |
| 119 | | | str_printfa(errmsg, " stat(%s) failed: %m", dir); |
| 120 | | | break; |
| 121 | | | } |
| 122 | | | prev_path = dir; |
| 123 | | | dir = "/"; |
| 124 | | | dir_st = st; |
Uninitialized Variable
st was not initialized. The issue can occur if the highlighted code executes. See related event 4. Show: All events | Only primary events |
|
| |