- Как в ядре Linux найти на каком разделе инода?, Аноним, 23:56 , 20-Авг-12 (1)
> Я думал inode->i_rdev, но что то непохоже. > Подскажите плиз. > Спасибо.unsigned int minor = MINOR(inode->i_rdev);
- Как в ядре Linux найти на каком разделе инода?, tux2002, 20:35 , 21-Авг-12 (2)
>> Я думал inode->i_rdev, но что то непохоже. >> Подскажите плиз. >> Спасибо. > unsigned int minor = MINOR(inode->i_rdev); printk(KERN_INFO \ "Owner of inode %ld on device %u change from %d to %d\n",\ inode->i_ino,MINOR(inode->i_rdev),inode->i_uid,attr->ia_uid);dmesg | grep Owner ... [ 6.639927] Owner of inode 3213 on device 16 change from 0 to 0 [ 6.640186] Owner of inode 3217 on device 15 change from 0 to 0 [ 6.640530] Owner of inode 3221 on device 18 change from 0 to 0 [ 6.640902] Owner of inode 3225 on device 20 change from 0 to 0 [ 6.641172] Owner of inode 3229 on device 19 change from 0 to 0 [ 6.641518] Owner of inode 3233 on device 22 change from 0 to 0 [ 6.641768] Owner of inode 3237 on device 21 change from 0 to 0 [ 6.642120] Owner of inode 3241 on device 24 change from 0 to 0 [ 6.642369] Owner of inode 3245 on device 23 change from 0 to 0 [ 6.642619] Owner of inode 3249 on device 17 change from 0 to 0 [ 6.643018] Owner of inode 3253 on device 27 change from 0 to 0 [ 6.643367] Owner of inode 3257 on device 26 change from 0 to 0 [ 6.643853] Owner of inode 3261 on device 29 change from 0 to 0 [ 6.644181] Owner of inode 3265 on device 28 change from 0 to 0 [ 6.644528] Owner of inode 3269 on device 31 change from 0 to 0 ... Смотрю 9-ый столбец dmesg | grep Owner | awk '{print $9}' | sort | uniq 0 1 10 11 12 128 129 13 130 131 132 133 134 135 136 14 15 16 17 18 19 2 20 21 22 229 23 232 24 25 26 27 28 29 3 30 31 32 33 34 35 36 37 38 39 4 40 41 42 43 44 45 46 47
У меня нет столько разделов, откуда эти цифры берутся?
- Как в ядре Linux найти на каком разделе инода?, tux2002, 16:10 , 23-Авг-12 (3) –1
Ребята! Давайте подсказывайте! Будущее Юникс на карте! Я могу объясниться что я делаю.
- Как в ядре Linux найти на каком разделе инода?, pavlinux, 04:20 , 28-Авг-12 (5)
> Ребята! Давайте подсказывайте! Будущее Юникс на карте! Я могу объясниться что я > делаю.Ты код давай, мы сами объясним. :)
- Как в ядре Linux найти на каком разделе инода?, tux2002, 15:37 , 28-Авг-12 (6)
>> Ребята! Давайте подсказывайте! Будущее Юникс на карте! Я могу объясниться что я >> делаю. > Ты код давай, мы сами объясним. :) --- ./fs/attr.c.orig 2012-08-26 18:07:47.000000000 +0400 +++ ./fs/attr.c 2012-08-27 15:47:22.000000000 +0400 @@ -45,26 +45,29 @@ return 0; /* Make sure a caller can chown. */ - if ((ia_valid & ATTR_UID) && - (current_fsuid() != inode->i_uid || - attr->ia_uid != inode->i_uid) && !capable(CAP_CHOWN)) - return -EPERM; + if (ia_valid & ATTR_UID) { + if ((current_fsuid() == inode->i_uid) || + capable(CAP_CHOWN)) + printk(KERN_INFO \ + "Owner of inode %ld on device %u (device information may be wrong) change from %d to %d\n",\ + inode->i_ino,MINOR(inode->i_rdev),\ + inode->i_uid,attr->ia_uid); + + else + return -EPERM; + } /* Make sure caller can chgrp. */ - if ((ia_valid & ATTR_GID) && - (current_fsuid() != inode->i_uid || - (!in_group_p(attr->ia_gid) && attr->ia_gid != inode->i_gid)) && - !capable(CAP_CHOWN)) + if ((ia_valid & ATTR_GID) && !is_owner_or_cap(inode)) return -EPERM; /* Make sure a caller can chmod. */ if (ia_valid & ATTR_MODE) { if (!is_owner_or_cap(inode)) return -EPERM; - /* Also check the setgid bit! */ - if (!in_group_p((ia_valid & ATTR_GID) ? attr->ia_gid : - inode->i_gid) && !capable(CAP_FSETID)) - attr->ia_mode &= ~S_ISGID; + /*S_ISGID set only for member of inode group*/ + if ((attr->ia_mode & S_ISGID) && !in_group_p(inode->i_gid)) + return -EPERM; } /* Check for setting the inode time. */ @@ -139,10 +142,15 @@ { unsigned int ia_valid = attr->ia_valid; - if (ia_valid & ATTR_UID) - inode->i_uid = attr->ia_uid; - if (ia_valid & ATTR_GID) - inode->i_gid = attr->ia_gid; + if (ia_valid & ATTR_UID) { + inode->i_uid = attr->ia_uid; + inode->i_mode &= ~S_ISUID; + inode->i_mode &= ~S_ISGID; + } + if (ia_valid & ATTR_GID) { + inode->i_gid = attr->ia_gid; + inode->i_mode &= ~S_ISGID; + } if (ia_valid & ATTR_ATIME) inode->i_atime = timespec_trunc(attr->ia_atime, inode->i_sb->s_time_gran); @@ -152,20 +160,14 @@ if (ia_valid & ATTR_CTIME) inode->i_ctime = timespec_trunc(attr->ia_ctime, inode->i_sb->s_time_gran); - if (ia_valid & ATTR_MODE) { - umode_t mode = attr->ia_mode; - - if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) - mode &= ~S_ISGID; - inode->i_mode = mode; - } + if (ia_valid & ATTR_MODE) + inode->i_mode = attr->ia_mode; } EXPORT_SYMBOL(setattr_copy); int notify_change(struct dentry * dentry, struct iattr * attr) { struct inode *inode = dentry->d_inode; - mode_t mode = inode->i_mode; int error; struct timespec now; unsigned int ia_valid = attr->ia_valid; @@ -203,21 +205,6 @@ (ia_valid & ATTR_MODE)) BUG(); - if (ia_valid & ATTR_KILL_SUID) { - if (mode & S_ISUID) { - ia_valid = attr->ia_valid |= ATTR_MODE; - attr->ia_mode = (inode->i_mode & ~S_ISUID); - } - } - if (ia_valid & ATTR_KILL_SGID) { - if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) { - if (!(ia_valid & ATTR_MODE)) { - ia_valid = attr->ia_valid |= ATTR_MODE; - attr->ia_mode = inode->i_mode; - } - attr->ia_mode &= ~S_ISGID; - } - } if (!(attr->ia_valid & ~(ATTR_KILL_SUID | ATTR_KILL_SGID))) return 0;
- Как в ядре Linux найти на каком разделе инода?, pavlinux, 01:35 , 29-Авг-12 (7)
> + printk(KERN_INFO \ > + "Owner of inode %ld on device > %u (device information may be wrong) change from %d to %d\n",\ > + inode->i_ino,MINOR(inode->i_rdev),\ printk(KERN_INFO "%u:%u\n", MAJOR(inode->i_rdev), MINOR(inode->i_rdev)); загляни в <linux/kdev_t.h>, там есть пару макросов нужных.
- Как в ядре Linux найти на каком разделе инода?, tux2002, 16:15 , 31-Авг-12 (8)
>> + printk(KERN_INFO \ >> + "Owner of inode %ld on device >> %u (device information may be wrong) change from %d to %d\n",\ >> + inode->i_ino,MINOR(inode->i_rdev),\ > printk(KERN_INFO "%u:%u\n", MAJOR(inode->i_rdev), MINOR(inode->i_rdev)); > загляни в <linux/kdev_t.h>, там есть пару макросов нужных.i_rdev заполняется 0 когда инода создаётся и больше нигде не меняется. struct inode видимо была сделана на вырост и у неё многое до сих пор неактуально. Работает вот это через суперблок: printk(KERN_INFO \ "Owner of inode %ld on device %u:%u change from %d to %d\n",\ inode->i_ino, MAJOR(inode->i_sb->s_dev), MINOR(inode->i_sb->s_dev),\ Всем спасибо!
- Как в ядре Linux найти на каком разделе инода?, Alex_S, 08:31 , 24-Авг-12 (4)
> У меня нет столько разделов, откуда эти цифры берутся? /dev ?
|