2011/2/14 james frize <jamesfr...@gmail.com>: > Hey mentors, I'm not a mentor, I just lurk on this list to learn.
> I like the idea of having a default copy of the file used by my > program, as suggested by Lars and PJ, so I've altered my source code > to use a default file and allow multiple users to have their own > copies of this file in their home/<user>/Documents folder. > > "creating a default file in /usr/share and having the program copy it > to the user's directory when it's run" > > However, I can't open a file from /usr/share via my python script as I > don't have permission to open files in a protected directory, and > after reading up a bit on it, it's been suggested that it's bad form > to invoke super user in a script, as it's construed as a security risk > (i.e. http://tldp.org/HOWTO/Security-HOWTO/file-security.html; > http://www.velocityreviews.com/forums/t346075-sudo-open-python-newbee-question.html) > > Do I really have to use sudo or super user privileges to just open and > copy a text template? Not at all. I was thinking along the lines of: def homedir(): '''Get current user's homedir''' home = os.getenv('HOME') if home == None: raise IOError('cannot copy links.txt: HOME not set') return home def open_links_txt(): '''Open links.txt; install for current user if necessary''' # http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html datadir = os.getenv('XDG_DATA_HOME') if datadir == None: datadir = os.path.join(homedir(), '.local', 'share') links_txt = os.path.join(datadir, 'links.txt') if not os.path.exists(links_txt): shutil.copy('/usr/share/gtk-link-lizard/links.txt', links_txt) return open(links_txt) Notes: * UNTESTED CODE, may contain the stupidest of syntax errors or worse * contains a race condition due to the use of os.path.exists, but that shoudn't matter unless the user sets XDG_DATA_HOME to the wrong value or has a world-writable homedir (in which case s/he's doomed anyway) * I know this doesn't fit the original app particularly well, so please integrate with existing code. > Where do packagers normally install files of this type? I put it in /usr/share/gtk-link-lizard for the purpose of the example. I don't know the Debian packaging rules by heart, but /usr/share/doc seems to be the wrong place; that's for documentation. It should be safe to remove documentation (sudo rm -rf /usr/share/doc) without applications suddenly starting to malfunction. > I thought it might be a good idea to store it in > home/<user>/.<packageName> But I'm still at a loss as to how I can > find a users home directory from the rules makefile :( > > been trying to use ~/ and $XDG_CONFIG_HOME but I just end up with > everything being installed in folders called "~" or "DG_CONFIG_HOME" DON'T. Users' homedirs are off limits to package managers such as dpkg. The application, when run, may install a file there, but the rules script should not. Regards, Lars -- To UNSUBSCRIBE, email to debian-mentors-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/aanlktini7anmw0fcspshj2sxpf4wyafbtl70diz8p...@mail.gmail.com