Bug#688932: g_get_user_{cache,config,data}_dir () fail to meet XDG Base Directory Specification

2012-10-26 Thread Ivan Shmakov
reopen688932
retitle   688932 g_get_user_{cache,config,data}_dir () fail to meet XDG Base 
Directory Specification 
severity  688932 minor
thanks

[Re-opening, as it's essentially the same issue, and it's /not/
resolved.  I also hope to forward this one to the upstream
tracker, possibly with a patch, sometime next week.]

As per XDG Base Directory Specification 0.8 (quoted below), the
default values for XDG_CACHE_HOME, XDG_CONFIG_HOME, and
XDG_DATA_HOME, are both defined relative to the value of the
HOME environment variable.  Contrary to that, the respective
g_get_user_{cache,config,data}_dir () functions return values
relative to the user's /initial/ home directory (as per
getpwuid ()-pw_dir) by default instead.

Consider, e. g. (the source is MIME'd):

$ LC_ALL=C make LDFLAGS=-lglib-2.0 ugpzy4dbahtheg6tnc1m39anxd 
cc  -lglib-2.0  ugpzy4dbahtheg6tnc1m39anxd.c   -o ugpzy4dbahtheg6tnc1m39anxd
$ ./ugpzy4dbahtheg6tnc1m39anxd 
XDG_CACHE_HOME  = /home/private/users/jrh/.cache
XDG_CONFIG_HOME = /home/private/users/jrh/.config
XDG_DATA_HOME   = /home/private/users/jrh/.local/share
$ HOME=$(mktemp -dt -- foo.) ./ugpzy4dbahtheg6tnc1m39anxd 
XDG_CACHE_HOME  = /home/private/users/jrh/.cache
XDG_CONFIG_HOME = /home/private/users/jrh/.config
XDG_DATA_HOME   = /home/private/users/jrh/.local/share
$ (HOME=$(mktemp -dt -- foo.) \
XDG_CACHE_HOME=${HOME}/.cache \
  XDG_CONFIG_HOME=${HOME}/.config \
  XDG_DATA_HOME=${HOME}/.local/share \
  ./ugpzy4dbahtheg6tnc1m39anxd) 
XDG_CACHE_HOME  = /tmp/foo.nmGK6HNL/.cache
XDG_CONFIG_HOME = /tmp/foo.nmGK6HNL/.config
XDG_DATA_HOME   = /tmp/foo.nmGK6HNL/.local/share
$ 

The end result is that the calling applications become
non-compliant to the specification.

Could this please be fixed?

TIA.

PS.  As it seems, the easiest way to fix this issue is to change
g_get_home_dir () to prefer HOME over the value returned by
getpwuid () (either in the “sane” cases, or always), as was
suggested before.  This would also fix the applications which
choose not to use g_get_user_*_dir (), and call the plain old
g_get_home_dir () instead.

--cut: http://standards.freedesktop.org/basedir-spec/basedir-spec-0.8.html --
$XDG_DATA_HOME defines the base directory relative to which user
specific data files should be stored.  If $XDG_DATA_HOME is either
not set or empty, a default equal to $HOME/.local/share should be
used.

$XDG_CONFIG_HOME defines the base directory relative to which user
specific configuration files should be stored.  If $XDG_CONFIG_HOME is
either not set or empty, a default equal to $HOME/.config should be
used.

…

$XDG_CACHE_HOME defines the base directory relative to which user
specific non-essential data files should be stored.  If
$XDG_CACHE_HOME is either not set or empty, a default equal to
$HOME/.cache should be used.
--cut: http://standards.freedesktop.org/basedir-spec/basedir-spec-0.8.html --

-- 
FSF associate member #7257
/*** ugpzy4dbahtheg6tnc1m39anxd.c  -*- C -*- */

#include stdio.h

const char *g_get_user_cache_dir  (void);
const char *g_get_user_config_dir (void);
const char *g_get_user_data_dir   (void);

int
main ()
{
  printf ((XDG_CACHE_HOME  = %s\n
   XDG_CONFIG_HOME = %s\n
   XDG_DATA_HOME   = %s\n),
  g_get_user_cache_dir  (),
  g_get_user_config_dir (),
  g_get_user_data_dir   ());
  /* . */
  return 0;
}

/*** ugpzy4dbahtheg6tnc1m39anxd.c ends here */


Bug#688932: g_get_user_{cache, config, data}_dir () fail to meet XDG Base Directory Specification

2012-10-26 Thread Josselin Mouette
Le vendredi 26 octobre 2012 à 16:51 +0700, Ivan Shmakov a écrit : 
   As per XDG Base Directory Specification 0.8 (quoted below), the
   default values for XDG_CACHE_HOME, XDG_CONFIG_HOME, and
   XDG_DATA_HOME, are both defined relative to the value of the
   HOME environment variable.  Contrary to that, the respective
   g_get_user_{cache,config,data}_dir () functions return values
   relative to the user's /initial/ home directory (as per
   getpwuid ()-pw_dir) by default instead.

Please discuss this with upstream. There is no way we will diverge on
such an important API compatibility matter.

Cheers,
-- 
 .''`.  Josselin Mouette
: :' :
`. `'
  `-


--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org