[darwinbuild-changes] [997] trunk

source_changes at macosforge.org source_changes at macosforge.org
Mon Jan 23 10:55:11 PST 2012


Revision: 997
          http://trac.macosforge.org/projects/darwinbuild/changeset/997
Author:   mww at apple.com
Date:     2012-01-23 10:55:08 -0800 (Mon, 23 Jan 2012)
Log Message:
-----------
darwinup: Clear quarantine xattr from installed files.

Modified Paths:
--------------
    trunk/darwinup/Depot.cpp
    trunk/darwinup/File.cpp
    trunk/darwinup/File.h

Property Changed:
----------------
    trunk/


Property changes on: trunk
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/PR-10008999:984
/branches/PR-10363375:959-960
/branches/PR-10397485:967
/branches/PR-10412052:973-975
/branches/PR-10412066:974-975
/branches/PR-10431324:979-980
/branches/PR-4841388:399-419
/branches/PR-6358021:442-443
/branches/PR-6392966:423-427
/branches/PR-6398060:433-434
/branches/PR-6493844:460-461
/branches/PR-6497694:466-468,471
/branches/PR-6634286:632-650
/branches/PR-6688645:479-490
/branches/PR-6722857:495-499
/branches/PR-6729491:655-664
/branches/PR-6973110:804-813
/branches/PR-7250612:635-650
/branches/PR-7341154:682-694
/branches/PR-7431723:660-664
/branches/PR-7461534:650-664
/branches/PR-7482850:670-671
/branches/PR-7489777:676-731
/branches/PR-7529688:692-694
/branches/PR-7593824:739-772
/branches/PR-7598640:703-731
/branches/PR-7748469:777-785
/branches/PR-7765119:790-791
/branches/PR-7798586:796-799
/branches/PR-7872907:830-840
/branches/PR-7935095:819-821
/branches/PR-8116613:849
/branches/PR-8279204:854-862
/branches/PR-8416637:870-880
/branches/PR-8486662:885-889
/branches/PR-8488185:894-898
/branches/PR-8604911:903-905
/branches/PR-8817822:917-933
/branches/PR-8908468:912
   + /branches/PR-10008999:984
/branches/PR-10307836:993-996
/branches/PR-10363375:959-960
/branches/PR-10397485:967
/branches/PR-10412052:973-975
/branches/PR-10412066:974-975
/branches/PR-10431324:979-980
/branches/PR-4841388:399-419
/branches/PR-6358021:442-443
/branches/PR-6392966:423-427
/branches/PR-6398060:433-434
/branches/PR-6493844:460-461
/branches/PR-6497694:466-468,471
/branches/PR-6634286:632-650
/branches/PR-6688645:479-490
/branches/PR-6722857:495-499
/branches/PR-6729491:655-664
/branches/PR-6973110:804-813
/branches/PR-7250612:635-650
/branches/PR-7341154:682-694
/branches/PR-7431723:660-664
/branches/PR-7461534:650-664
/branches/PR-7482850:670-671
/branches/PR-7489777:676-731
/branches/PR-7529688:692-694
/branches/PR-7593824:739-772
/branches/PR-7598640:703-731
/branches/PR-7748469:777-785
/branches/PR-7765119:790-791
/branches/PR-7798586:796-799
/branches/PR-7872907:830-840
/branches/PR-7935095:819-821
/branches/PR-8116613:849
/branches/PR-8279204:854-862
/branches/PR-8416637:870-880
/branches/PR-8486662:885-889
/branches/PR-8488185:894-898
/branches/PR-8604911:903-905
/branches/PR-8817822:917-933
/branches/PR-8908468:912

Modified: trunk/darwinup/Depot.cpp
===================================================================
--- trunk/darwinup/Depot.cpp	2012-01-21 18:07:29 UTC (rev 996)
+++ trunk/darwinup/Depot.cpp	2012-01-23 18:55:08 UTC (rev 997)
@@ -434,7 +434,7 @@
 						"aborting to avoid damaging darwinup metadata.\n");
 				return DEPOT_ERROR;
 			}
-			
+
 			// Perform a three-way-diff between the file to be installed (file),
 			// the file we last installed in this location (preceding),
 			// and the file that actually exists in this location (actual).
@@ -706,6 +706,12 @@
 	InstallContext* context = (InstallContext*)ctx;
 	int res = 0;
 
+	// Strip the quarantine xattr off all files to avoid them being rendered useless.
+	if (file->unquarantine(context->depot->m_archives_path) != 0) {
+		fprintf(stderr, "Error: unable to unquarantine file in staging area.\n");
+		return DEPOT_ERROR;
+	}
+
 	if (INFO_TEST(file->info(), FILE_INFO_INSTALL_DATA)) {
 		++context->files_modified;
 

Modified: trunk/darwinup/File.cpp
===================================================================
--- trunk/darwinup/File.cpp	2012-01-21 18:07:29 UTC (rev 996)
+++ trunk/darwinup/File.cpp	2012-01-23 18:55:08 UTC (rev 997)
@@ -42,6 +42,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <removefile.h>
+#include <sys/xattr.h>
 
 File::File() {
 	m_serial = 0;
@@ -244,6 +245,26 @@
 	return -1;
 }
 
+int File::unquarantine(const char *prefix) {
+	int res = 0;
+	Archive *archive = this->archive();
+	const char *srcpath = archive->directory_name(prefix);
+	char path[PATH_MAX];
+	snprintf(path, sizeof(path), "%s/%s", srcpath, this->path());
+
+	res = removexattr(path, "com.apple.quarantine", XATTR_NOFOLLOW);
+	IF_DEBUG("[unquarantine] removexattr %s\n", path);
+	if (res == -1 && errno == ENOATTR) {
+		// Safely ignore ENOATTR, we didn't have the quarantine
+		// xattr set on this file.
+		res = 0;
+	} else if (res != 0) {
+		fprintf(stderr, "%s:%d: %s: %s (%d)\n",
+				__FILE__, __LINE__, m_path, strerror(errno), errno);
+	}
+	return res;
+}
+
 int File::install_info(const char* dest) {
 	int res = 0;
 	char* path;

Modified: trunk/darwinup/File.h
===================================================================
--- trunk/darwinup/File.h	2012-01-21 18:07:29 UTC (rev 996)
+++ trunk/darwinup/File.h	2012-01-23 18:55:08 UTC (rev 997)
@@ -183,6 +183,9 @@
 	// Removes the file
 	virtual int remove();
 
+	// Removes any quarantine xattrs present
+	int unquarantine(const char *prefix);
+
 	// Prints one line to the output stream indicating
 	// the file mode, ownership, digest and name.
 	virtual void print(FILE* stream);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20120123/a4ce1ba5/attachment.html>


More information about the darwinbuild-changes mailing list