[Pkg-shadow-commits] r3196 - in upstream/trunk: . libmisc

Nicolas FRANÇOIS nekral-guest at alioth.debian.org
Tue Mar 30 23:14:04 UTC 2010


Author: nekral-guest
Date: 2010-03-30 23:14:04 +0000 (Tue, 30 Mar 2010)
New Revision: 3196

Modified:
   upstream/trunk/ChangeLog
   upstream/trunk/NEWS
   upstream/trunk/libmisc/copydir.c
Log:
	* NEWS, libmisc/copydir.c: When a hardlink is detected, the
	original hardlink should not be removed.

Modified: upstream/trunk/ChangeLog
===================================================================
--- upstream/trunk/ChangeLog	2010-03-30 21:54:29 UTC (rev 3195)
+++ upstream/trunk/ChangeLog	2010-03-30 23:14:04 UTC (rev 3196)
@@ -1,3 +1,8 @@
+2010-03-31  Nicolas François  <nicolas.francois at centraliens.net>
+
+	* NEWS, libmisc/copydir.c: When a hardlink is detected, the
+	original hardlink should not be removed.
+
 2010-03-30  Nicolas François  <nicolas.francois at centraliens.net>
 
 	* po/POTFILES.in, libmisc/Makefile.am, lib/prototypes.h,

Modified: upstream/trunk/NEWS
===================================================================
--- upstream/trunk/NEWS	2010-03-30 21:54:29 UTC (rev 3195)
+++ upstream/trunk/NEWS	2010-03-30 23:14:04 UTC (rev 3196)
@@ -33,6 +33,9 @@
   * Default ENV_SUPATH is /sbin:/bin:/usr/sbin:/usr/bin
 - newgrp, sg, groupmems
   * Fix parsing of gshadow entries.
+- useradd
+  * If the skeleton directory contained hardlinked files, copies of the
+    hardlink were removed from the skeleton directory.
 
 *** translation
   * Updated Czech translation.

Modified: upstream/trunk/libmisc/copydir.c
===================================================================
--- upstream/trunk/libmisc/copydir.c	2010-03-30 21:54:29 UTC (rev 3195)
+++ upstream/trunk/libmisc/copydir.c	2010-03-30 23:14:04 UTC (rev 3196)
@@ -305,6 +305,11 @@
 	if (set_orig) {
 		src_orig = NULL;
 		dst_orig = NULL;
+		/* FIXME: clean links
+		 * Since there can be hardlinks elsewhere on the device,
+		 * we cannot check that all the hardlinks were found:
+		assert (NULL == links);
+		 */
 	}
 
 #ifdef WITH_SELINUX
@@ -312,10 +317,6 @@
 	setfscreatecon (NULL);
 #endif				/* WITH_SELINUX */
 
-	/* FIXME: with the call to remove_link, we could also check that
-	 *        no links remain in links.
-	 * assert (NULL == links); */
-
 	return err;
 }
 
@@ -538,7 +539,6 @@
 	/* If src was a link to an entry of the src_orig directory itself,
 	 * create a link to the corresponding entry in the dst_orig
 	 * directory.
-	 * FIXME: This may change a relative link to an absolute link
 	 */
 	if (strncmp (oldlink, src_orig, strlen (src_orig)) == 0) {
 		size_t len = strlen (dst_orig) + strlen (oldlink) - strlen (src_orig) + 1;
@@ -592,20 +592,14 @@
 static int copy_hardlink (const char *src, const char *dst,
                           struct link_name *lp)
 {
-	/* TODO: selinux, ACL, Extended Attributes needed? */
+	/* FIXME: selinux, ACL, Extended Attributes needed? */
 
 	if (link (lp->ln_name, dst) != 0) {
 		return -1;
 	}
 
-	/* FIXME: why is it unlinked? This is a copy, not a move */
-	if (unlink (src) != 0) {
-		return -1;
-	}
-
-	/* FIXME: idem, although it may never be used again */
 	/* If the file could be unlinked, decrement the links counter,
-	 * and delete the file if it was the last reference */
+	 * and forget about this link if it was the last reference */
 	lp->ln_count--;
 	if (lp->ln_count <= 0) {
 		remove_link (lp);




More information about the Pkg-shadow-commits mailing list