Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4751177

Preferences storage placed unavailable to non-root users

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • None
    • 1.4.1
    • core-libs



      Name: gm110360 Date: 09/20/2002


      FULL PRODUCT VERSION :
      java version "1.4.1"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
      Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)


      FULL OPERATING SYSTEM VERSION :
      Linux 2.4.18-4GB #1 Wed Mar 27 13:57:05 UTC 2002 i686
      unknown (SuSE 8.0)
        
        
      ADDITIONAL OPERATING SYSTEMS :
      any Unix-like system

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      J2SDK is stored on NFS-based place (below /usr/local)

      A DESCRIPTION OF THE PROBLEM :
      Java 1.4 introduced the preferences API. It stores data in
      certain files on the system (and hides this from the
      user).
       
      The storage position is either below the install directory
      or (if the install directory is remotely mounted, e.g. by
      NFS) below /etc. Both locations are normally systemwide
      and only writeable by root. So, if you run your Java
      programs as other user, you get arbitrary error messages
      from the java.util.prefs package.
       
      As Unix is a multi-user system, the whole idea of having a
      global file for preferences storage is wrong, in my
      opinion. Preferences should be stored in $HOME/.java by
      default, and it should be possible to adjust this place by
      an environment variable. This would lead to the
      preferences being user-dependent which is the only
      sensible way of doing things in Unix, as I see it.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      1. Install JDK/JRE 1.4(.1) as root in a systemwide
      directory
      2. Run a Java Swing application (Swing happens to use the
      Preferences API somewhere)
      3. Be happy with the error messages.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      Expecting: JVM/java.utils.prefs should create files below
      user-owned storage segments, e.g. $HOME/.java
        
      Actual: JVM/java.util.prefs tries to create files below
      $JAVAHOME/.java or /etc/.java which leads to error
      messages due to being unable to create the files or
      directories. Reason: The global file structures are not
      writeable by the non-root user.

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      20.09.2002 18:15:00 java.util.prefs.FileSystemPreferences syncWorld
      WARNING: Couldn't flush system prefs: java.util.prefs.BackingStoreException:
      Couldn't get file lock.


      REPRODUCIBILITY :
      This bug can be reproduced always.

      CUSTOMER WORKAROUND :
      - Make .java directory world writeable. Problem: Only the
      first user will be able to work with preferences. And
      admin's nightmare, of course (below /etc...)
        
      - Install JRE/JDK for each user locally. Ridiculous and
      works only if home directory is not mounted via NFS.
        
      - Write a new Preferences implementation. But why
      reinventing the wheel?
        
      - Ignore the warnings. But they are annoying and you
      cannot use the Preferences API on Unix.
      (Review ID: 164796)
      ======================================================================

            jjb Josh Bloch
            gmanwanisunw Girish Manwani (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: