summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* shutil: Change rm_rf() to use new GSDirFdIterator, and add *at variantwip/diriterColin Walters2014-12-122-73/+66
| | | | | This noticeably cleans up the rm_rf() code. And also it now becomes easy add a gs_shutil_rm_rf_at() variant.
* fileutil: Add new API to iterate over a directory with *at system callsColin Walters2014-12-122-0/+119
| | | | | | | | | | | Using the GFileEnumerator doesn't allow using the *at system calls such as unlinkat() very easily. These system calls are both more performant (no need to traverse paths repeatedly) and more secure (assuming an attacker has write access to an intervening path). Currently, this exposes the Unix "struct dirent*" which means it's not available to introspection, but a future API addition could add a binding to create a GFileInfo*.
* fsutils: Add two small APIs for opendirat()Colin Walters2014-12-112-0/+54
| | | | | | | | We already had gs_file_open_dir_fd, but it didn't support O_NOFOLLOW, which is quite useful. Also add a raw function wrapping the core bits we need to opendir(), also taking a follow boolean.
* Fix typoGiuseppe Scrivano2014-11-201-1/+1
| | | | Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
* subprocess: Fix a potential GCancellable leakPhilip Withnall2014-10-271-0/+1
|
* doap category coreOlav Vitters2014-07-301-0/+1
|
* fileutil: avoid using PATH_MAXAndreas Henriksson2014-07-151-3/+8
| | | | | Use the dynamically allocated buffer returned by realpath instead of using PATH_MAX which is not defined on platforms like Hurd.
* localalloc: add gs_free_slistThomas Haller2014-07-151-0/+10
| | | | Signed-off-by: Thomas Haller <thaller@redhat.com>
* localalloc: add gs_free_listThomas Haller2014-07-151-0/+7
| | | | Signed-off-by: Thomas Haller <thaller@redhat.com>
* local-alloc: Define cleanup functions for GKeyFile and GListColin Walters2014-06-041-0/+2
| | | | See https://github.com/hughsie/libhif/pull/2
* fileutil: Add API to retrieve xattrs relative to a directory fdColin Walters2014-04-292-28/+57
| | | | | This is the only safe way to get xattrs for a symlink relative to a dirfd.
* Release 2014.2v2014.2Colin Walters2014-04-011-1/+1
|
* fileutil: Consistently prefix errno with system callColin Walters2014-04-011-31/+25
| | | | For file operations, it's relevant.
* fileutils: error-prefix both xattr code pathsColin Walters2014-03-071-1/+2
| | | | | | | We had a g_prefix_error() for the lsetxattr() path, but not fsetxattr(). Add one for the latter, and change the former to not use the pathname because we always go through /proc/self/fd so it won't be useful to show.
* fileutils: Add gs_file_open_dir_fd_at()Colin Walters2014-02-272-0/+34
| | | | | This will be used in the OSTree checkout code, where we want to mkdir() and then open it.
* fileutil: Add API to set xattrs of a filename relative to a dir fdColin Walters2014-02-262-19/+49
| | | | This is a Linux-specific way to work around the missing lsetxattrat().
* shutil: Ignore EPERM/ENOTSUP errors while copying xattrs by defaultColin Walters2014-02-111-2/+16
| | | | | Unprivileged users won't be able to copy e.g. security.selinux; let's ignore this by default, the same way coreutils does.
* packaging: Ensure we require libsystemd-journalColin Walters2014-02-091-1/+2
|
* Fix systemd journal detectionColin Walters2014-02-081-1/+4
|
* Rework to be an installed libraryv2014.1Colin Walters2014-02-0626-22/+351
| | | | See https://mail.gnome.org/archives/desktop-devel-list/2014-February/msg00028.html
* Include gsystem-glib-compat.h for compatibility with GLib 2.32Jiří Klimeš2014-01-161-0/+1
| | | | | | Needed for g_clear_pointer(). Signed-off-by: Jiří Klimeš <jklimes@redhat.com>
* COPYING: Update to latest FSF with current addressColin Walters2014-01-161-10/+9
| | | | Hooray for rpmlint.
* console: Print a newline when starting a status line the first timeColin Walters2014-01-151-1/+1
| | | | This ensures we're not overwriting any earlier output.
* fileutil: Squash some unused-variable etc. warnings without CONFIG_XATTRColin Walters2014-01-031-29/+47
| | | | | A bit tricky; we have to move the implementation into an internal helper.
* README: Note where to report bugsColin Walters2013-12-081-0/+3
|
* Only use fdatasync() on LinuxRyan Lortie2013-12-081-4/+10
| | | | | | This function is not universally available, and since we don't have our own autoconf script to check for it, just assume that we have it iff we're on Linux.
* Import xattr code from OSTree, use it to make gs_shutil_cp_a() copy xattrsColin Walters2013-11-283-90/+425
| | | | | | | | | | | | | | | | | | | | | For SELinux, it's crucial that we actually copy the "security.selinux" xattr which provides the security context. the "cp_a" name kind of strongly implies that we do what coreutils "cp -a" does, and this patch moves us a lot closer to what it says on the tin. Concretely, we now match directory modes (and ownership), and we copy all xattrs for directories. We're not (yet) copying xattrs for files, but sadly this is a GLib bug. This patch will allow OSTree to simply use gs_shutil_cp_a() for merging configuration. Still TODO: * Timestamps https://bugzilla.gnome.org/show_bug.cgi?id=711058
* GSSubprocess: remove unnecessary NULL check (trivial)Thomas Haller2013-11-061-2/+1
| | | | | | | | | | | This fixes a warning found during Coverity scan. Error: REVERSE_INULL (CWE-476): [#def5] libgsystem/gsystem-subprocess.c:949: deref_ptr_in_call: Dereferencing pointer "context". libgsystem/gsystem-subprocess-context.c:330:3: deref_parm: Directly dereferencing parameter "self". libgsystem/gsystem-subprocess.c:960: check_after_deref: Null-checking "context" suggests that it may be null, but it has already been dereferenced on all paths leading to the check. Signed-off-by: Thomas Haller <thaller@redhat.com>
* shutil: Make gs_shutil_cp_a copy ownership as wellSjoerd Simons2013-11-031-1/+11
| | | | | | | | Like cp -a gs_shutil_cp_a should really copy all directory metadata. This adds support for at least copying the ownership metadata (user/group). https://bugzilla.gnome.org/show_bug.cgi?id=711057
* file-utils: fix wrong condition in open_nointr (open returns -1 on error)Thomas Haller2013-10-311-1/+1
| | | | | | This error was found by running Coverity. Signed-off-by: Thomas Haller <thaller@redhat.com>
* file-utils: Don't leaking fd on error path in gs_file_create()Thomas Haller2013-10-311-0/+1
| | | | | | This error was found by running Coverity. Signed-off-by: Thomas Haller <thaller@redhat.com>
* file-utils: gs_file_open_in_tmpdir_at did never retryThomas Haller2013-10-311-1/+2
| | | | | | | | | | In case of creating an existing file name, gs_file_open_in_tmpdir_at did not retry and failed to create the temporary file (while signalling success). This error was found by running Coverity. Signed-off-by: Thomas Haller <thaller@redhat.com>
* localalloc: Declare the cleanup functions inline in the headerChristian Persch2013-10-232-96/+26
| | | | | This enables gcc with -Wuninitialized to warn if the cleanup function is used on an uninitialised variable.
* Fix signed/unsigned comparision warningsChristian Persch2013-10-213-5/+5
|
* localalloc: Add gs_free_errorChristian Persch2013-10-212-0/+14
|
* Fix introspection warningsJasper St. Pierre2013-10-092-4/+4
|
* file-utils: Rename a functionJasper St. Pierre2013-10-092-7/+7
| | | | The proper prefix is gsystem_, not gs_
* gs_file_get_path_cached: Unlock mutex on errorAlexander Larsson2013-09-301-1/+4
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=708824
* fileutil: Close fd if passed NULL for output streamColin Walters2013-09-291-0/+2
| | | | So we don't leak it.
* fileutil: Handle recent: and trash: URIsBastien Nocera2013-09-201-2/+24
| | | | | | | | | | | | The gs_file_get_path_cached() was rather brittle in its handling of URIs. It would assert() when a GFile didn't have a backing path (such as when handling trash: or recent: URIs), and didn't know how to get the target URI for those items either. Make sure that we do not assert() when a backing path cannot be found, and handle recent: and trash: URIs. https://bugzilla.gnome.org/show_bug.cgi?id=708435
* fileutil: Drop gs_file_create_with_uidgid()Colin Walters2013-09-132-84/+0
| | | | | This was only used by OSTree as far as I know, and it now has a better solution.
* fileutils: Avoid crash if g_set_prgname() has not been calledColin Walters2013-09-131-4/+16
| | | | While we're here, also squash spaces in the filename to '_'.
* shutil: Treat ELOOP like ENOTDIRColin Walters2013-09-101-1/+1
| | | | | We can apparently get this if we try to open with O_NOFOLLOW a chain of symlinks. Just treat it like it's not a directory so we unlink.
* shutil: Use at-relative walking for gs_shutil_rm_rf()Colin Walters2013-09-091-62/+167
| | | | | This is safer against concurrent modification, as well as being more efficient.
* fileutil: Add gs_file_openat_noatime()Colin Walters2013-09-072-31/+54
| | | | | | | While porting relevant parts of OSTree to use openat()/renameat() and friends, it commonly occurs that I wanted to do gs_file_read_noatime(). Make a variant of that API, named differently because the _noatime implies reading.
* fileutil: Add initial directory-relative APIColin Walters2013-09-062-22/+101
| | | | | | | | | | | | | | | | | | | | | | | | Modern UNIX come with a variety of filesystem API suffixed with "at", like openat(), linkat(), etc. The reason for their existence is multiple. First, if you're doing a lot of file operations in a directory, it's simply more efficient to avoid having the kernel traverse potentially long pathnames constantly. Second, this avoids a problem where if a user does e.g.: rm -rf somedir & mv somedir othername mkdir somedir touch somedir/otherfile We won't end up deleting otherfile, because all of our operations are relative to the original "somedir". The second rationale is unlikely to matter for OSTree since we'll assume the user isn't going to move a repository around while we're committing to it, but anyways, it's just better to use fd-relative pathnames.
* fileutil: Add lock around pathname cachingColin Walters2013-09-061-0/+12
| | | | | | | | | | | | | | | | | | | If two threads both call gs_file_get_path_cached() on the same GFile, then it's possible that both threads see the pathname isn't cached, and set the qdata. The second one will end up freeing the cached qdata from the first, causing it to read freed memory. Fix this by just slapping a lock around the whole business. This was observed in the real world in ostree where two threads were calling gs_file_get_path_cached() on the shared repo->tmp_dir. But really, what we want to do is two things: 1) Upstream this into gio 2) Stop using gs_file_get_path_cached() so much; instead, we should be using openat() and friends. This will also avoid malloc, and help us earn our UNIX merit badge.
* gs_file_read_noatime: Always return errorsBastien Nocera2013-09-051-1/+8
| | | | | | | When passed an invalid GFile, or one that's not FUSE backed, we should error out properly instead of not returning an error. https://bugzilla.gnome.org/show_bug.cgi?id=699252
* fileutil: New gs_file_lchown() APIColin Walters2013-08-302-18/+60
| | | | Needed for ostree to chown symbolic links.
* localalloc: Fix extra indirection on gs_strfrev implementationColin Walters2013-08-291-10/+10
| | | | | | This was tripping a compiler warning in NetworkManager; the right way to fix it is actually to be less magical in the macro and lose our synthesized *. Instead add it explicitly for each type.