Text   |  XML   |  ReML   |   Visible Warnings:

File System Race Condition  at mkdir-parents.c:22

No properties have been set. | edit properties
Jump to warning location ↓ warning details...
Show Events | Options

mbox_get_list_settings

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib-storage/index/mbox/mbox-storage.c)expand/collapse
Show more  
 279  mbox_get_list_settings(struct mailbox_list_settings *list_set,
 280                         const char *data, struct mail_storage *storage,
 281                         const char **layout_r, const char **error_r)
 282  {
 283          enum mail_storage_flags flags = storage->flags;
 284          bool debug = (flags & MAIL_STORAGE_FLAG_DEBUG) != 0;
 285          const char *p;
 286          struct stat st;
 287          bool autodetect;
 288   
 289          *layout_r = "fs";
 290   
 291          memset(list_set, 0, sizeof(*list_set));
 292          list_set->subscription_fname = MBOX_SUBSCRIPTION_FILE_NAME;
 293          list_set->maildir_name = "";
 294   
 295          autodetect = data == NULL || *data == '\0';
 296          if (autodetect) {
 297                  if ((flags & MAIL_STORAGE_FLAG_NO_AUTODETECTION) != 0) {
 298                          *error_r = "Root mail directory not given";
 299                          return -1;
 300                  }
 301   
 302                  /* we'll need to figure out the mail location ourself.
 303                     it's root dir if we've already chroot()ed, otherwise 
 304                     either ~/mail or ~/Mail */
 305[+]                 list_set->root_dir = get_root_dir(storage);
 306                  if (list_set->root_dir == NULL) {
 307                          *error_r = "Autodetection failed";
 308                          return -1;
 309                  }
 310          } else {
 311                  if (debug)
 312                          i_info("mbox: data=%s", data);
 313                  p = strchr(data, ':');
 314                  if ((flags & MAIL_STORAGE_FLAG_NO_AUTODETECTION) == 0 &&
 315                      p == NULL && data[strlen(data)-1] != '/') {
 316                          /* if the data points to a file, treat it as an INBOX */
 317
326
Show [ Lines 317 to 326 omitted. ]
 327                          return -1;
 328                  } else {
 329                          if (mailbox_list_settings_parse(data, list_set,
 330                                                          storage->ns,
 331                                                          layout_r, NULL,
 332                                                          error_r) < 0)
 333                                  return -1;
 334                  }
 335          }
 336   
 337          if (list_set->root_dir == NULL || *list_set->root_dir == '\0') {
 338                  if ((flags & MAIL_STORAGE_FLAG_NO_AUTOCREATE) != 0) {
 339                          *error_r = "Root mail directory not given";
 340                          return -1;
 341                  }
 342   
 343                  list_set->root_dir = create_root_dir(storage, error_r);
 344                  if (list_set->root_dir == NULL)
 345                          return -1;
 346          } else {
 347                  /* make sure the directory exists */
 348                  if (lstat(list_set->root_dir, &st) == 0) {
 349                          /* yep, go ahead */
 350                  } else if (errno == EACCES) {
 351                          *error_r = mail_error_eacces_msg("lstat",
 352                                                           list_set->root_dir);
 353                          return -1;
 354                  } else if (errno != ENOENT && errno != ENOTDIR) {
 355                          *error_r = t_strdup_printf("lstat(%s) failed: %m",
 356                                                     list_set->root_dir);
 357                          return -1;
 358                  } else if (errno == ENOENT &&
 359                             storage->ns->type == NAMESPACE_SHARED) {
 360                          /* can't create a new user, but we don't want to fail 
 361                             the storage creation. */
 362                  } else if ((flags & MAIL_STORAGE_FLAG_NO_AUTOCREATE) != 0) {
 363                          *error_r = t_strdup_printf(
 364                                          "Root mail directory doesn't exist: %s",
 365                                          list_set->root_dir);
 366                          return -1;
 367[+]                 } else if (mkdir_parents(list_set->root_dir, CREATE_MODE) < 0 &&
expand/collapse

mkdir_parents

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/mkdir-parents.c)expand/collapse
Show more  
 121  int mkdir_parents(const char *path, mode_t mode)
 122  {
 123[+]         return mkdir_parents_chown(path, mode, (uid_t)-1, (gid_t)-1);
expand/collapse

mkdir_parents_chown

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/mkdir-parents.c)expand/collapse
Show more  
 110  int mkdir_parents_chown(const char *path, mode_t mode, uid_t uid, gid_t gid)
 111  {
 112[+]         return mkdir_parents_chown_full(path, mode, uid, gid, NULL);
expand/collapse

mkdir_parents_chown_full

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/mkdir-parents.c)expand/collapse
Show more  
 80  mkdir_parents_chown_full(const char *path, mode_t mode, uid_t uid, gid_t gid,
 81                           const char *gid_origin)
 82  {
 83          const char *p;
 84          int ret;
 85   
 86[+]         if (mkdir_chown_full(path, mode, uid, gid, gid_origin) < 0) {
expand/collapse

mkdir_chown_full

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/mkdir-parents.c)expand/collapse
Show more  
 14  mkdir_chown_full(const char *path, mode_t mode, uid_t uid,
 15                   gid_t gid, const char *gid_origin)
 16  {
 17          string_t *str;
 18          mode_t old_mask;
 19          int ret, orig_errno;
 20   
 21          old_mask = umask(0);
 22          ret = mkdir(path, mode);
Show more  
Show more  
Show more  
Show more  
Show more  




Change Warning 7434.25052 : File System Race Condition

Priority:
State:
Finding:
Owner:
Note: