--- a/src/modules/sysattr.py Fri Oct 16 13:55:01 2015 -0700
+++ b/src/modules/sysattr.py Wed Oct 21 10:05:52 2015 -0700
@@ -66,11 +66,11 @@
fd = os.open(filename, os.O_RDONLY)
if fd == -1:
- raise ffi.error(ffi.errno)
+ raise OSError(ffi.errno, os.strerror(ffi.errno), filename)
if lib.fgetattr(fd, lib.XATTR_VIEW_READWRITE, response):
os.close(fd)
- raise ffi.error(ffi.errno)
+ raise OSError(ffi.errno, os.strerror(ffi.errno), filename)
os.close(fd)
count = 0
@@ -131,7 +131,7 @@
request[0] = ffi.gc(request[0], lib.nvlist_free)
if lib.nvlist_alloc(request, lib.NV_UNIQUE_NAME, 0) != 0:
- raise ffi.error(ffi.errno)
+ raise OSError(ffi.errno, os.strerror(ffi.errno))
# A single string indicates system attributes are passed in compact
# form (e.g. AHi), verbose attributes are read as a list of strings.
@@ -161,15 +161,15 @@
"attribute".format(attr))
if lib.nvlist_add_boolean_value(request[0], lib.attr_to_name(sys_attr),
1) != 0:
- raise ffi.error(ffi.errno)
+ raise OSError(ffi.errno, os.strerror(ffi.errno))
fd = os.open(filename, os.O_RDONLY)
if fd == -1:
- raise ffi.error(ffi.errno)
+ raise OSError(ffi.errno, os.strerror(ffi.errno), filename)
if lib.fsetattr(fd, lib.XATTR_VIEW_READWRITE, request[0]):
os.close(fd)
- raise ffi.error(ffi.errno)
+ raise OSError(ffi.errno, os.strerror(ffi.errno), filename)
os.close(fd)
--- a/src/modules/syscallat.py Fri Oct 16 13:55:01 2015 -0700
+++ b/src/modules/syscallat.py Wed Oct 21 10:05:52 2015 -0700
@@ -25,6 +25,7 @@
#
from __future__ import unicode_literals
+import os
import six
from pkg._syscallat import lib, ffi
@@ -41,7 +42,7 @@
rv = lib.mkdirat(fd, path, mode)
if rv != 0:
- raise OSError(ffi.errno, "No such file or directory")
+ raise OSError(ffi.errno, os.strerror(ffi.errno), path)
def openat(fildes, path, oflag, mode):
@@ -58,7 +59,7 @@
rv = lib.openat(fildes, path, oflag, mode)
if rv < 0:
- raise OSError(ffi.errno, "No such file or directory")
+ raise OSError(ffi.errno, os.strerror(ffi.errno), path)
return rv
@@ -76,7 +77,7 @@
rv = lib.renameat(fromfd, old, tofd, new)
if rv != 0:
- raise OSError(ffi.errno, "No such file or directory")
+ raise OSError(ffi.errno, os.strerror(ffi.errno), old)
def unlinkat(dirfd, path, flag):
@@ -91,4 +92,4 @@
rv = lib.unlinkat(dirfd, path, flag)
if rv < 0:
- raise OSError(ffi.errno, "No such file or directory")
+ raise OSError(ffi.errno, os.strerror(ffi.errno), path)
--- a/src/tests/api/t_sysattr.py Fri Oct 16 13:55:01 2015 -0700
+++ b/src/tests/api/t_sysattr.py Wed Oct 21 10:05:52 2015 -0700
@@ -76,10 +76,16 @@
dir="/var/tmp")
self.test_fh, self.test_fn = tempfile.mkstemp(
dir=self.test_path)
+ self.unsup_test_path = tempfile.mkdtemp(prefix="test-suite",
+ dir="/tmp")
+ self.test_fh2, self.test_fn2 = tempfile.mkstemp(
+ dir=self.unsup_test_path)
def tearDown(self):
portable.remove(self.test_fn)
+ portable.remove(self.test_fn2)
os.rmdir(self.test_path)
+ os.rmdir(self.unsup_test_path)
def test_0_bad_input(self):
# fsetattr
@@ -91,6 +97,9 @@
"xyz")
self.assertRaises(OSError, portable.fsetattr, "/nofile",
"H")
+ # FS does not support system attributes.
+ self.assertRaises(OSError, portable.fsetattr, self.test_fn2,
+ "H")
# fgetattr
self.assertRaises(OSError, portable.fgetattr, "/nofile")
--- a/src/tests/cli/t_pkg_install.py Fri Oct 16 13:55:01 2015 -0700
+++ b/src/tests/cli/t_pkg_install.py Wed Oct 21 10:05:52 2015 -0700
@@ -1058,6 +1058,11 @@
plist = self.pkgsend_bulk(self.rurl, [self.secret1,
self.secret2, self.secret3, self.secret4])
+ # Try to install in /tmp which does not support system
+ # attributes. Just make sure we fail gracefully.
+ self.image_create(self.rurl)
+ self.pkg("install secret1", exit=1)
+
# Need to create an image in /var/tmp since sysattrs don't work
# in tmpfs.
self.debug(self.rurl)