LINUX.ORG.RU

[Java]Не работает setLastModified для файлов с правами 777 но отличным от текущего пользователя овн

 


0

0
import java.io.File;

public class Main {
    public static void main(String[] args) {
        File file = new File(args[0]);
        System.out.println("exec:" + file.canExecute());
        System.out.println("read:" + file.canRead());
        System.out.println("write:" + file.canWrite());
      System.out.println(file.setLastModified(System.currentTimeMillis()));
    }
}

Компилируем в ~. В ~ создаем файл aaa.txt, делаем

~ $ sudo chown root:root aaa.txt
~ $ sudo chmod 777 aaa.txt
Проверяем
~ $ ls -la aaa.txt
-rwxrwxrwx 1 root root 472 2009-11-24 12:09 aaa.txt
Запускаем программу
~ $ java -Djava.security.debug=all Main /home/jfreem/aaa.txt
scl:  getPermissions ProtectionDomain  (file:/home/jfreem/ <no signer certificates>)
 sun.misc.Launcher$AppClassLoader@1c78e57
 <no principals>
 java.security.Permissions@1186fab (
 (java.lang.RuntimePermission exitVM)
 (java.io.FilePermission /home/jfreem/- read)
)
scl:
exec:true
read:true
write:true
false
Почему не работает setLastModified?

Что самое непонятное -

~ $ touch aaa.txt
отрабатывает без всяких проблем, но
~ $ touch -m aaa.txt
touch: setting times of `aaa.txt': Operation not permitted

★★★☆

вот исходники джавовского метода setLastModified

JNIEXPORT jboolean JNICALL  
Java_java_io_UnixFileSystem_setLastModifiedTime(JNIEnv *env, jobject this,
      jobject file, jlong time)
{
....
if (utimes(path, tv) >= 0)
            rv = JNI_TRUE;
....
   return rv;
}
а вот что говорит официальная дока http://www.gnu.org/s/libc/manual/html_node/File-Times.html
The utime function returns 0 if successful and -1 on failure. In addition to the usual file name errors (see File Name Errors), the following errno error conditions are defined for this function:
....
EPERM
    If the times argument is not a null pointer, you must either be the owner of the file or be a privileged user.
для изменения файла необходимо быть или овнером или привелегированным пользователем т.е. это не баг, это так и задумано

JFreeM ★★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.