]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #12550 from stiopaa1/B9935_segfaultInRmDir
authorJohn Spray <jspray@redhat.com>
Thu, 19 Jan 2017 08:15:27 +0000 (09:15 +0100)
committerGitHub <noreply@github.com>
Thu, 19 Jan 2017 08:15:27 +0000 (09:15 +0100)
client/Client.cc: prevent segfaulting

Reviewed-by: John Spray <john.spray@redhat.com>
1  2 
src/client/Client.cc
src/test/libcephfs/test.cc

Simple merge
index 927db4eb6ae8f21d94ae198a2399da9766baa2de,baea14fcf35887115ce30e0ec9614276eda974af..e2864f8e964cc1e37034163872928a13c688f813
@@@ -1766,10 -1733,47 +1766,48 @@@ TEST(LibCephFS, ClearSetuid) 
    stx.stx_uid++;
    stx.stx_gid++;
    ASSERT_EQ(ceph_ll_setattr(cmount, in, &stx, CEPH_SETATTR_UID|CEPH_SETATTR_GID, rootcred), 0);
 -  ASSERT_EQ(ceph_ll_getattr(cmount, in, &stx, CEPH_STATX_MODE, 0, ceph_mount_perms(cmount)), 0);
 +  ASSERT_EQ(ceph_ll_getattr(cmount, in, &stx, CEPH_STATX_MODE, 0, usercred), 0);
    ASSERT_TRUE(stx.stx_mask & CEPH_STATX_MODE);
 -  ASSERT_FALSE(stx.stx_mode & (S_ISUID|S_ISGID));
 +  ASSERT_EQ(stx.stx_mode & (mode_t)ALLPERMS, after_mode);
  
 +  ASSERT_EQ(ceph_ll_close(cmount, fh), 0);
    ceph_shutdown(cmount);
  }
+ TEST(LibCephFS, OperationsOnRoot)
+ {
+   struct ceph_mount_info *cmount;
+   ASSERT_EQ(ceph_create(&cmount, NULL), 0);
+   ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
+   ASSERT_EQ(0, ceph_conf_parse_env(cmount, NULL));
+   ASSERT_EQ(ceph_mount(cmount, "/"), 0);
+   char dirname[32];
+   sprintf(dirname, "/somedir%x", getpid());
+   ASSERT_EQ(ceph_mkdir(cmount, dirname, 0755), 0);
+   ASSERT_EQ(ceph_rmdir(cmount, "/"), -EBUSY);
+   ASSERT_EQ(ceph_link(cmount, "/", "/"), -EEXIST);
+   ASSERT_EQ(ceph_link(cmount, dirname, "/"), -EEXIST);
+   ASSERT_EQ(ceph_link(cmount, "nonExisitingDir", "/"), -ENOENT);
+   ASSERT_EQ(ceph_unlink(cmount, "/"), -EISDIR);
+   ASSERT_EQ(ceph_rename(cmount, "/", "/"), -EBUSY);
+   ASSERT_EQ(ceph_rename(cmount, dirname, "/"), -EBUSY);
+   ASSERT_EQ(ceph_rename(cmount, "nonExistingDir", "/"), -EBUSY);
+   ASSERT_EQ(ceph_rename(cmount, "/", dirname), -EBUSY);
+   ASSERT_EQ(ceph_rename(cmount, "/", "nonExistingDir"), -EBUSY);
+   ASSERT_EQ(ceph_mkdir(cmount, "/", 0777), -EEXIST);
+   ASSERT_EQ(ceph_mknod(cmount, "/", 0, 0), -EEXIST);
+   ASSERT_EQ(ceph_symlink(cmount, "/", "/"), -EEXIST);
+   ASSERT_EQ(ceph_symlink(cmount, dirname, "/"), -EEXIST);
+   ASSERT_EQ(ceph_symlink(cmount, "nonExistingDir", "/"), -EEXIST);
+   ceph_shutdown(cmount);
+ }