[Pkg-shadow-devel] [shadow] 02/05: Drop patches merged upstream or no longer used

Christian Perrier bubulle at moszumanska.debian.org
Wed Nov 19 20:51:46 UTC 2014


This is an automated email from the git hooks/post-receive script.

bubulle pushed a commit to branch master
in repository shadow.

commit d5849a0f2b170afff30f58e301e27fefeb603095
Author: Christian Perrier <bubulle at debian.org>
Date:   Fri May 9 19:16:39 2014 +0200

    Drop patches merged upstream or no longer used
---
 debian/patches/1000_configure_userns               |   93 -
 debian/patches/1010_vietnamese_translation         | 2687 --------------------
 debian/patches/1011_french_translation             | 1430 -----------
 debian/patches/1012_german_translation             |   31 -
 debian/patches/1020_fix-typo-manpage               |   13 -
 debian/patches/userns/01_userns_doc                |  334 ---
 debian/patches/userns/02_userns_doc_login.defs     |  218 --
 .../userns/03_userns_implement_commonio_append     |  110 -
 .../patches/userns/04_userns_add_backend_support   |  685 -----
 .../userns/05_userns_implemend_find_new_sub_xids   |  283 ---
 debian/patches/userns/06_userns_userdel            |  236 --
 debian/patches/userns/07_userns_useradd            |  285 ---
 debian/patches/userns/08_userns_detect_busy_subids |  133 -
 debian/patches/userns/09_userns_usermod            |  536 ----
 debian/patches/userns/10_userns_newusers           |  256 --
 debian/patches/userns/11_userns_newxidmap          | 1004 --------
 debian/patches/userns/12_userns_selinuxlibs        |   13 -
 .../patches/userns/13_subordinate_parse_static_buf |   23 -
 debian/patches/userns/14_fix_getopt                |   24 -
 .../userns/16_add-argument-sanity-checking.patch   |   80 -
 debian/patches/userns/manpagetypo                  |   26 -
 21 files changed, 8500 deletions(-)

diff --git a/debian/patches/1000_configure_userns b/debian/patches/1000_configure_userns
deleted file mode 100644
index 5cd39b6..0000000
--- a/debian/patches/1000_configure_userns
+++ /dev/null
@@ -1,93 +0,0 @@
-=== modified file 'etc/login.defs'
-Index: git/etc/login.defs
-===================================================================
---- git.orig/etc/login.defs
-+++ git/etc/login.defs
-@@ -229,7 +229,7 @@
- # Extra per user uids
- SUB_UID_MIN		   100000
- SUB_UID_MAX		600100000
--SUB_UID_COUNT		    10000
-+SUB_UID_COUNT		    65536
- 
- #
- # Min/max values for automatic gid selection in groupadd(8)
-@@ -242,7 +242,7 @@
- # Extra per user group ids
- SUB_GID_MIN		   100000
- SUB_GID_MAX		600100000
--SUB_GID_COUNT		    10000
-+SUB_GID_COUNT		    65536
- 
- #
- # Max number of login(1) retries if password is bad
-Index: git/src/newusers.c
-===================================================================
---- git.orig/src/newusers.c
-+++ git/src/newusers.c
-@@ -988,8 +988,8 @@
- 	is_shadow_grp = sgr_file_present ();
- #endif
- #ifdef ENABLE_SUBIDS
--	is_sub_uid = sub_uid_file_present ();
--	is_sub_gid = sub_gid_file_present ();
-+	is_sub_uid = sub_uid_file_present () && !rflg;
-+	is_sub_gid = sub_gid_file_present () && !rflg;
- #endif				/* ENABLE_SUBIDS */
- 
- 	open_files ();
-Index: git/src/useradd.c
-===================================================================
---- git.orig/src/useradd.c
-+++ git/src/useradd.c
-@@ -1994,6 +1994,10 @@
- #endif				/* USE_PAM */
- #endif				/* ACCT_TOOLS_SETUID */
- 
-+	/* Needed for userns check */
-+	uid_t uid_min = (uid_t) getdef_ulong ("UID_MIN", 1000UL);
-+	uid_t uid_max = (uid_t) getdef_ulong ("UID_MAX", 60000UL);
-+
- 	/*
- 	 * Get my name so that I can use it to report errors.
- 	 */
-@@ -2023,8 +2027,10 @@
- 	is_shadow_grp = sgr_file_present ();
- #endif
- #ifdef ENABLE_SUBIDS
--	is_sub_uid = sub_uid_file_present ();
--	is_sub_gid = sub_gid_file_present ();
-+	is_sub_uid = sub_uid_file_present () && !rflg &&
-+	    (!user_id || (user_id <= uid_max && user_id >= uid_min));
-+	is_sub_gid = sub_gid_file_present () && !rflg &&
-+	    (!user_id || (user_id <= uid_max && user_id >= uid_min));
- #endif				/* ENABLE_SUBIDS */
- 
- 	get_defaults ();
- 
-Index: git/libmisc/find_new_sub_uids.c
-===================================================================
---- git.orig/libmisc/find_new_sub_uids.c
-+++ git/libmisc/find_new_sub_uids.c
-@@ -58,7 +58,7 @@
- 
- 	min = getdef_ulong ("SUB_UID_MIN", 100000UL);
- 	max = getdef_ulong ("SUB_UID_MAX", 600100000UL);
--	count = getdef_ulong ("SUB_UID_COUNT", 10000);
-+	count = getdef_ulong ("SUB_UID_COUNT", 65536);
- 
- 	if (min > max || count >= max || (min + count - 1) > max) {
- 		(void) fprintf (stderr,
-Index: git/libmisc/find_new_sub_gids.c
-===================================================================
---- git.orig/libmisc/find_new_sub_gids.c
-+++ git/libmisc/find_new_sub_gids.c
-@@ -58,7 +58,7 @@
- 
- 	min = getdef_ulong ("SUB_GID_MIN", 100000UL);
- 	max = getdef_ulong ("SUB_GID_MAX", 600100000UL);
--	count = getdef_ulong ("SUB_GID_COUNT", 10000);
-+	count = getdef_ulong ("SUB_GID_COUNT", 65536);
- 
- 	if (min > max || count >= max || (min + count - 1) > max) {
- 		(void) fprintf (stderr,
diff --git a/debian/patches/1010_vietnamese_translation b/debian/patches/1010_vietnamese_translation
deleted file mode 100644
index f3331d3..0000000
--- a/debian/patches/1010_vietnamese_translation
+++ /dev/null
@@ -1,2687 +0,0 @@
-Index: git/po/vi.po
-===================================================================
---- git.orig/po/vi.po
-+++ git/po/vi.po
-@@ -1,15 +1,17 @@
- # Vietnamese translation for Shadow.
--# Copyright © 2009 Free Software Foundation, Inc.
-+# Bản dịch tiếng Việt dành cho shadow.
-+# Copyright © 2014 Free Software Foundation, Inc.
- # Clytie Siddall <clytie at riverland.net.au>, 2005-2008.
-+# Trần Ngọc Quân <vnwildman at gmail.com>, 2014.
- #
- msgid ""
- msgstr ""
- "Project-Id-Version: shadow\n"
- "Report-Msgid-Bugs-To: pkg-shadow-devel at lists.alioth.debian.org\n"
- "POT-Creation-Date: 2012-05-20 19:52+0200\n"
--"PO-Revision-Date: 2012-01-08 18:13+0100\n"
--"Last-Translator: Clytie Siddall <clytie at riverland.net.au>\n"
--"Language-Team: Vietnamese <vi-VN at googlegroups.com>\n"
-+"PO-Revision-Date: 2014-04-11 15:01+0700\n"
-+"Last-Translator: Trần Ngọc Quân <vnwildman at gmail.com>\n"
-+"Language-Team: Vietnamese <debian-l10n-vietnamese at lists.debian.org>\n"
- "Language: vi\n"
- "MIME-Version: 1.0\n"
- "Content-Type: text/plain; charset=UTF-8\n"
-@@ -21,34 +23,34 @@
- msgid ""
- "Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
- msgstr ""
--"Có nhiều mục nhập tên « %s » trong %s. Hãy sửa chữa trường hợp này, dùng "
-+"Có nhiều mục tin mang tên “%s” trong %s. Hãy sửa chữa trường hợp này, dùng "
- "pwck hoặc grpck.\n"
- 
- #, c-format
- msgid "crypt method not supported by libcrypt? (%s)\n"
--msgstr "Phương pháp mã hoá không được libcrypt hỗ trợ ? (%s)\n"
-+msgstr "Phương pháp mã hoá không được thư viện libcrypt hỗ trợ? (%s)\n"
- 
- #, c-format
- msgid "configuration error - cannot parse %s value: '%s'"
--msgstr "lỗi cấu hình — không thể phân tích cú pháp của giá trị %s: « %s »"
-+msgstr "lỗi cấu hình — không thể phân tích cú pháp của giá trị %s: “%s”"
- 
- msgid "Could not allocate space for config info.\n"
- msgstr "Không thể cấp phát sức chứa cho thông tin cấu hình.\n"
- 
- #, c-format
- msgid "configuration error - unknown item '%s' (notify administrator)\n"
--msgstr "lỗi cấu hình: không rõ mục « %s » (báo quản trị).\n"
-+msgstr "lỗi cấu hình - không hiểu mục tin “%s” (báo cho người quản trị).\n"
- 
- #, c-format
- msgid "%s: nscd did not terminate normally (signal %d)\n"
--msgstr ""
-+msgstr "%s: nscd đã kết thúc bất thường (tín hiệu %d)\n"
- 
- #, c-format
- msgid "%s: nscd exited with status %d\n"
--msgstr ""
-+msgstr "%s: nscd đã thoát với mã là %d\n"
- 
- msgid "Password: "
--msgstr "Mật khẩu : "
-+msgstr "Mật khẩu: "
- 
- #, c-format
- msgid "%s's Password: "
-@@ -56,212 +58,198 @@
- 
- #, c-format
- msgid "[libsemanage]: %s\n"
--msgstr ""
-+msgstr "[libsemanage]: %s\n"
- 
- #, c-format
- msgid "Cannot create SELinux management handle\n"
--msgstr ""
-+msgstr "Không thể tạo bộ tiếp hợp quản lý SELinux\n"
- 
- #, c-format
- msgid "SELinux policy not managed\n"
--msgstr ""
-+msgstr "Chính sách cho SELinux chưa được quản lý\n"
- 
- #, c-format
- msgid "Cannot read SELinux policy store\n"
--msgstr ""
-+msgstr "Không thể đọc kho lưu chính sách SELinux\n"
- 
- #, c-format
- msgid "Cannot establish SELinux management connection\n"
--msgstr ""
-+msgstr "Không thể thiết lập kết nối quản lý SELinux\n"
- 
- #, c-format
- msgid "Cannot begin SELinux transaction\n"
--msgstr ""
-+msgstr "Không thể bắt đầu phiên giao dịch SELinux\n"
- 
- #, c-format
- msgid "Could not query seuser for %s\n"
--msgstr ""
-+msgstr "Không thể truy vấn seuser cho %s\n"
- 
- #, c-format
- msgid "Could not set serange for %s\n"
--msgstr ""
-+msgstr "Không thể đặt serange cho %s\n"
- 
--#, fuzzy, c-format
--#| msgid "Could not allocate space for config info.\n"
-+#, c-format
- msgid "Could not set sename for %s\n"
--msgstr "Không thể cấp phát sức chứa cho thông tin cấu hình.\n"
-+msgstr "Không thể đặt sename cho %s\n"
- 
- #, c-format
- msgid "Could not modify login mapping for %s\n"
--msgstr ""
-+msgstr "Không thể sửa đổi ánh xạ đăng nhập cho %s\n"
- 
--#, fuzzy, c-format
--#| msgid "Changing the aging information for %s\n"
-+#, c-format
- msgid "Cannot create SELinux login mapping for %s\n"
--msgstr "Đang thay đổi thông tin về thời gian hoạt động đối với %s\n"
-+msgstr "Không thể tạo ánh xạ đăng nhập SELinux cho %s\n"
- 
- #, c-format
- msgid "Could not set name for %s\n"
--msgstr ""
-+msgstr "Không thể đặt tên %s\n"
- 
- #, c-format
- msgid "Could not set SELinux user for %s\n"
--msgstr ""
-+msgstr "Không thể đặt người dùng SELinux cho %s\n"
- 
- #, c-format
- msgid "Could not add login mapping for %s\n"
--msgstr ""
-+msgstr "Không thể thêm ánh xạ đăng nhập cho %s\n"
- 
- #, c-format
- msgid "Cannot init SELinux management\n"
--msgstr ""
-+msgstr "Không thể khởi tạo bộ quản lý SELinux\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: Cannot determine your user name.\n"
-+#, c-format
- msgid "Cannot create SELinux user key\n"
--msgstr "%s: không thể quyết định tên người dùng của bạn.\n"
-+msgstr "Không thể tạo khóa người dùng SELinux\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: Cannot determine your user name.\n"
-+#, c-format
- msgid "Cannot verify the SELinux user\n"
--msgstr "%s: không thể quyết định tên người dùng của bạn.\n"
-+msgstr "Không thể thẩm định người dùng SELinux\n"
- 
- #, c-format
- msgid "Cannot modify SELinux user mapping\n"
--msgstr ""
-+msgstr "Không thể sửa đổi ánh xạ người dùng SELinux\n"
- 
- #, c-format
- msgid "Cannot add SELinux user mapping\n"
--msgstr ""
-+msgstr "Không thể thêm ánh xạ người dùng SELinux\n"
- 
- #, c-format
- msgid "Cannot commit SELinux transaction\n"
--msgstr ""
-+msgstr "Không thể chuyển giao giao dịch SELinux\n"
- 
- #, c-format
- msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
- msgstr ""
-+"Ánh xạ đăng nhập cho %s chưa được định nghĩa, OK nếu ánh xạ mặc định được "
-+"dùng\n"
- 
- #, c-format
- msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
- msgstr ""
-+"Ánh xạ đăng nhập cho %s được định nghĩa trong chính sách, không thể xóa đi\n"
- 
- #, c-format
- msgid "Could not delete login mapping for %s"
--msgstr ""
-+msgstr "Không thể xóa ánh xạ đăng nhập cho %s"
- 
- #, c-format
- msgid "%s: out of memory\n"
--msgstr "%s: tràn bộ nhớ\n"
-+msgstr "%s: hết bộ nhớ\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot delete %s\n"
-+#, c-format
- msgid "%s: Cannot stat %s: %s\n"
--msgstr "%s: không thể xoá %s\n"
-+msgstr "%s: Không thể lấy thống kê về %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: %s home directory (%s) not found\n"
-+#, c-format
- msgid "%s: %s is neither a directory, nor a symlink.\n"
--msgstr "%s: %s không tìm thấy thư mục chính (%s)\n"
-+msgstr "%s: %s không phải là thư mục mà cũng không phải là liên kết mềm.\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot remove entry '%s' from %s\n"
-+#, c-format
- msgid "%s: Cannot read symbolic link %s: %s\n"
--msgstr "%s: không thể gỡ bỏ mục nhập « %s » khỏi %s\n"
-+msgstr "%s: Không thể đọc liên kết mềm %s: %s\n"
- 
- #, c-format
- msgid "%s: Suspiciously long symlink: %s\n"
--msgstr ""
-+msgstr "%s: Liên kết mềm dài một cách điên rồ: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "%s: Cannot create directory %s: %s\n"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "%s: Không thể tạo thư mục %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "lastlog: Cannot get the size of %s: %s\n"
-+#, c-format
- msgid "%s: Cannot change owner of %s: %s\n"
--msgstr "lastlog: Không thể lấy kích cỡ của %s: %s\n"
-+msgstr "%s: Không thể thay đổi người sở hữu của %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: warning: can't remove %s: %s\n"
-+#, c-format
- msgid "%s: Cannot change mode of %s: %s\n"
--msgstr "%s: cảnh báo : không thể gỡ bỏ %s: %s\n"
-+msgstr "%s: Không thể thay đổi chế độ của %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: rename: %s: %s"
-+#, c-format
- msgid "%s: unlink: %s: %s\n"
--msgstr "%s: thay tên: %s: %s"
-+msgstr "%s: unlink: %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot rename directory %s to %s\n"
-+#, c-format
- msgid "%s: Cannot remove directory %s: %s\n"
--msgstr "%s: không thể thay đổi lại tên thư mục %s thành %s\n"
-+msgstr "%s: Không thể gỡ bỏ thư mục %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot rename directory %s to %s\n"
-+#, c-format
- msgid "%s: Cannot rename %s to %s: %s\n"
--msgstr "%s: không thể thay đổi lại tên thư mục %s thành %s\n"
-+msgstr "%s: Không thể đổi tên %s thành %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: warning: can't remove %s: %s\n"
-+#, c-format
- msgid "%s: Cannot remove %s: %s\n"
--msgstr "%s: cảnh báo : không thể gỡ bỏ %s: %s\n"
-+msgstr "%s: Không thể gỡ bỏ %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "%s: Cannot create symbolic link %s: %s\n"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "%s: Không thể tạo liên kết mềm %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "lastlog: Cannot get the size of %s: %s\n"
-+#, c-format
- msgid "%s: Cannot change owners of %s: %s\n"
--msgstr "lastlog: Không thể lấy kích cỡ của %s: %s\n"
-+msgstr "%s: Không thể thay đổi chủ sở hữu của %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot delete %s\n"
-+#, c-format
- msgid "%s: Cannot lstat %s: %s\n"
--msgstr "%s: không thể xoá %s\n"
-+msgstr "%s: Không thể lstat %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: (line %d, user %s) password not changed\n"
-+#, c-format
- msgid "%s: Warning, user %s has no tcb shadow file.\n"
--msgstr "%s: (dòng %d, người dùng %s) mật khẩu chưa thay đổi\n"
-+msgstr "%s: Cảnh báo, người dùng  %s không có tập tin shadow tcb.\n"
- 
- #, c-format
- msgid ""
- "%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
- "The account is left locked.\n"
- msgstr ""
-+"%s: Khẩn cấp: shadow tcb của %s không phải là tập tin thường với "
-+"st_nlink=1.\n"
-+"Tài khoản vẫn bị khóa.\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: rename: %s: %s"
-+#, c-format
- msgid "%s: mkdir: %s: %s\n"
--msgstr "%s: thay tên: %s: %s"
-+msgstr "%s: mkdir: %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot open %s\n"
-+#, c-format
- msgid "%s: Cannot open %s: %s\n"
--msgstr "%s: không thể mở %s\n"
-+msgstr "%s: Không thể mở %s: %s\n"
- 
- #, c-format
- msgid "Warning: unknown group %s\n"
--msgstr "Cảnh báo : không rõ nhóm %s.\n"
-+msgstr "Cảnh báo: không biết nhóm %s.\n"
- 
- msgid "Warning: too many groups\n"
--msgstr "Cảnh báo : quá nhiều nhóm\n"
-+msgstr "Cảnh báo: quá nhiều nhóm\n"
- 
- msgid "Your password has expired."
- msgstr "Mật khẩu của bạn đã hết hạn dùng."
- 
- msgid "Your password is inactive."
--msgstr "Mật khẩu của bạn không phải hoạt động."
-+msgstr "Mật khẩu của bạn là không hoạt động."
- 
- msgid "Your login has expired."
- msgstr "Đăng nhập của bạn đã hết hạn dùng."
- 
- msgid "  Contact the system administrator."
--msgstr "  Hãy liên lạc với quản trị hệ thống."
-+msgstr "  Hãy liên lạc với người quản trị hệ thống."
- 
- msgid "  Choose a new password."
- msgstr "  Hãy chọn mật khẩu mới."
-@@ -291,13 +279,12 @@
- msgid "%s: failed to unlock %s\n"
- msgstr "%s: lỗi mở khoá %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: %s\n"
-+#, c-format
- msgid "%s: "
--msgstr "%s: %s\n"
-+msgstr "%s: "
- 
- msgid ": "
--msgstr ""
-+msgstr ": "
- 
- msgid "Environment overflow\n"
- msgstr "Tràn môi trường\n"
-@@ -319,18 +306,19 @@
- 
- #, c-format
- msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
--msgstr ""
-+msgstr "%s: Cấu hình không hợp lệ: GID_MIN (%lu), GID_MAX (%lu)\n"
- 
- #, c-format
- msgid ""
- "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
- "(%lu)\n"
- msgstr ""
-+"%s: Cấu hình không hợp lệ: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
-+"(%lu)\n"
- 
--#, fuzzy, c-format
--#| msgid "failed to change mailbox owner"
-+#, c-format
- msgid "%s: failed to allocate memory: %s\n"
--msgstr "lỗi thay đổi chủ hộp thư"
-+msgstr "%s: gặp lỗi khi cấp phát bộ nhớ: %s\n"
- 
- #, c-format
- msgid "%s: Can't get unique system GID (no more available GIDs)\n"
-@@ -343,13 +331,15 @@
- 
- #, c-format
- msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
--msgstr ""
-+msgstr "%s: Cấu hình không hợp lệ: UID_MIN (%lu), UID_MAX (%lu)\n"
- 
- #, c-format
- msgid ""
- "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
- "(%lu)\n"
- msgstr ""
-+"%s: Cấu hình không hợp lệ: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
-+"(%lu)\n"
- 
- #, c-format
- msgid "%s: Can't get unique system UID (no more available UIDs)\n"
-@@ -379,7 +369,7 @@
- msgstr "từ đọc xuôi ngược đều giống như nhau"
- 
- msgid "case changes only"
--msgstr "chỉ thay đổi chữ thường/hoa"
-+msgstr "chỉ thay đổi HOA/thường"
- 
- msgid "too similar"
- msgstr "quá tương tự"
-@@ -403,10 +393,10 @@
- 
- #, c-format
- msgid "passwd: %s\n"
--msgstr "passwd: (mật khẩu) %s\n"
-+msgstr "passwd: %s\n"
- 
- msgid "passwd: password unchanged\n"
--msgstr "passwd: chưa thay đổi mật khẩu\n"
-+msgstr "passwd: chưa đổi mật khẩu\n"
- 
- msgid "passwd: password updated successfully\n"
- msgstr "passwd: mật khẩu đã được cập nhật\n"
-@@ -417,45 +407,42 @@
- 
- #, c-format
- msgid "%s: multiple --root options\n"
--msgstr ""
-+msgstr "%s: nhiều tùy chọn --root\n"
- 
- #, c-format
- msgid "%s: option '%s' requires an argument\n"
--msgstr ""
-+msgstr "%s: tùy chọn “%s” cần một đối số\n"
- 
- #, c-format
- msgid "%s: failed to drop privileges (%s)\n"
--msgstr "%s: lỗi bỏ quyền truy cập (%s)\n"
-+msgstr "%s: gặp lỗi khi xóa bỏ đặc quyền (%s)\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: invalid home phone: '%s'\n"
-+#, c-format
- msgid "%s: invalid chroot path '%s'\n"
--msgstr "%s: số điện thoại ở nhà không hợp lệ: « %s »\n"
-+msgstr "%s: đường dẫn chroot không hợp lệ “%s”\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "%s: cannot access chroot directory %s: %s\n"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "%s: không thể truy cập thư mục chroot %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "%s: unable to chroot to directory %s: %s\n"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "%s: không thể thay đổi thư mục gốc thành %s: %s\n"
- 
- #, c-format
- msgid ""
- "Invalid ENCRYPT_METHOD value: '%s'.\n"
- "Defaulting to DES.\n"
- msgstr ""
--"Phương pháp mã hoá (ENCRYPT_METHOD) không hợp lệ: « %s »\n"
-+"Phương pháp mã hoá (ENCRYPT_METHOD) không hợp lệ: “%s”\n"
- "nên hoàn nguyên về giá trị mặc định: DES.\n"
- 
- #, c-format
- msgid "Unable to cd to '%s'\n"
--msgstr "Không thể cd (chuyển đổi thư mục) sang « %s ».\n"
-+msgstr "Không thể cd (chuyển đổi thư mục) sang “%s”.\n"
- 
- msgid "No directory, logging in with HOME=/"
--msgstr "Không có thư mục nên đăng nhập với « HOME=/ »"
-+msgstr "Không có thư mục nên đăng nhập với “HOME=/”"
- 
- #, c-format
- msgid "Cannot execute %s"
-@@ -463,11 +450,11 @@
- 
- #, c-format
- msgid "Invalid root directory '%s'\n"
--msgstr "Thư mục gốc không hợp lệ « %s »\n"
-+msgstr "Thư mục gốc không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "Can't change root directory to '%s'\n"
--msgstr "Không thể thay đổi thư mục gốc thành « %s »\n"
-+msgstr "Không thể thay đổi thư mục gốc thành “%s”\n"
- 
- msgid "Unable to determine your tty name."
- msgstr "Không thể quyết định tên TTY của bạn."
-@@ -481,7 +468,7 @@
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...] [ĐĂNG_NHẬP]\n"
-+"Cách dùng: %s [các_tuỳ_chọn] ĐĂNG_NHẬP\n"
- "\n"
- "Tuỳ chọn:\n"
- 
-@@ -529,12 +516,12 @@
- "khi thay đổi mật khẩu\n"
- 
- msgid "  -R, --root CHROOT_DIR         directory to chroot into\n"
--msgstr ""
-+msgstr "  -R, --root THƯ_MỤC_ĐỔI        thư mục để chuyển gốc đến\n"
- 
- msgid ""
- "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
- msgstr ""
--"  -W, --warndays SỐ             đặt thành số này số các ngày gây ra cảnh báo "
-+"  -W, --warndays SỐ_NGÀY        đặt thành số này số các ngày gây ra cảnh báo "
- "về hết hạn dùng\n"
- 
- msgid "Enter the new value, or press ENTER for the default"
-@@ -574,7 +561,7 @@
- msgstr "Mật khẩu không hoạt động\t\t\t\t\t: "
- 
- msgid "Account expires\t\t\t\t\t\t: "
--msgstr "Tài khoản hết hạn dùng\t\t\t\t\t\t "
-+msgstr "Tài khoản hết hạn dùng\t\t\t\t\t\t: "
- 
- #, c-format
- msgid "Minimum number of days between password change\t\t: %ld\n"
-@@ -590,15 +577,15 @@
- 
- #, c-format
- msgid "%s: invalid date '%s'\n"
--msgstr "%s: ngày không hợp lệ « %s »\n"
-+msgstr "%s: ngày không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: invalid numeric argument '%s'\n"
--msgstr "%s: đối số thuộc số không hợp lệ « %s »\n"
-+msgstr "%s: đối số thuộc số không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: do not include \"l\" with other flags\n"
--msgstr "%s: đừng dùng « l » cùng với cờ khác\n"
-+msgstr "%s: đừng dùng “l” cùng với cờ khác\n"
- 
- #, c-format
- msgid "%s: Permission denied.\n"
-@@ -606,12 +593,11 @@
- 
- #, c-format
- msgid "%s: Cannot determine your user name.\n"
--msgstr "%s: không thể quyết định tên người dùng của bạn.\n"
-+msgstr "%s: Không thể phân giải tên người dùng của bạn.\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: %s\n"
-+#, c-format
- msgid "%s: PAM: %s\n"
--msgstr "%s: %s\n"
-+msgstr "%s: PAM: %s\n"
- 
- #, c-format
- msgid "%s: cannot lock %s; try again later.\n"
-@@ -627,15 +613,15 @@
- 
- #, c-format
- msgid "%s: failed to prepare the new %s entry '%s'\n"
--msgstr "%s: lỗi chuẩn bị mục nhập %s mới « %s »\n"
-+msgstr "%s: gặp lỗi khi chuẩn bị mục tin %s mới “%s”\n"
- 
- #, c-format
- msgid "%s: the shadow password file is not present\n"
--msgstr "%s: không có tập tin mật khẩu bóng\n"
-+msgstr "%s: không có tập tin mật khẩu shadow\n"
- 
- #, c-format
- msgid "%s: user '%s' does not exist in %s\n"
--msgstr "%s: người dùng « %s » không tồn tại trong %s\n"
-+msgstr "%s: người dùng “%s” không tồn tại trong %s\n"
- 
- #, c-format
- msgid "Changing the aging information for %s\n"
-@@ -645,47 +631,45 @@
- msgid "%s: error changing fields\n"
- msgstr "%s: gặp lỗi khi thay đổi trường\n"
- 
--#, fuzzy, c-format
--#| msgid ""
--#| "Usage: %s [options]\n"
--#| "\n"
--#| "Options:\n"
-+#, c-format
- msgid ""
- "Usage: %s [options] [LOGIN]\n"
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...]\n"
-+"Cách dùng: %s [tuỳ_chọn ...] [ĐĂNG_NHẬP]\n"
- "\n"
- "Tuỳ chọn:\n"
- 
- msgid "  -f, --full-name FULL_NAME     change user's full name\n"
--msgstr ""
-+msgstr "  -f, --full-name HỌ_TÊN        đổi tên thật của người dùng\n"
- 
- msgid "  -h, --home-phone HOME_PHONE   change user's home phone number\n"
--msgstr ""
-+msgstr "  -h, --home-phone ĐIỆN_THOẠI   đổi số điện thoại nhà của người dùng\n"
- 
- msgid "  -o, --other OTHER_INFO        change user's other GECOS information\n"
--msgstr ""
-+msgstr "  -o, --other THÔNG_TIN_KHÁC    đổi thông tin GECOS khác\n"
- 
- msgid "  -r, --room ROOM_NUMBER        change user's room number\n"
--msgstr ""
-+msgstr "  -r, --room SỐ_PHÒNG           đổi số phòng của người dùng\n"
- 
- msgid "  -u, --help                    display this help message and exit\n"
- msgstr "  -u, --help                    hiển thị trợ giúp này, sau đó thoát\n"
- 
- msgid "  -w, --work-phone WORK_PHONE   change user's office phone number\n"
- msgstr ""
-+"  -w, --work-phone ĐIỆN_THOẠI_LÀM   thay đổi số điện thoại nơi làm của người "
-+"dùng\n"
- 
- msgid "Full Name"
--msgstr "Họ tên"
-+msgstr "Họ và tên"
- 
- #, c-format
- msgid "\t%s: %s\n"
- msgstr "\t%s: %s\n"
- 
- msgid "Room Number"
--msgstr "Số thứ tự phòng"
-+msgstr "Số phòng"
- 
- msgid "Work Phone"
- msgstr "Điện thoại chỗ làm"
-@@ -697,51 +681,51 @@
- msgstr "Khác"
- 
- msgid "Cannot change ID to root.\n"
--msgstr "Không thể thay đổi mã số thành người chủ (root).\n"
-+msgstr "Không thể thay đổi mã số thành siêu quản trị (root).\n"
- 
- #, c-format
- msgid "%s: name with non-ASCII characters: '%s'\n"
--msgstr "%s: tên chứa ký tự khác ASCII: « %s »\n"
-+msgstr "%s: tên chứa ký tự khác ASCII: “%s”\n"
- 
- #, c-format
- msgid "%s: invalid name: '%s'\n"
--msgstr "%s: tên không hợp lệ: « %s »\n"
-+msgstr "%s: tên không hợp lệ: “%s”\n"
- 
- #, c-format
- msgid "%s: room number with non-ASCII characters: '%s'\n"
--msgstr "%s: số thứ tự phòng chứa ký tự khác ASCII: « %s »\n"
-+msgstr "%s: số thứ tự phòng chứa ký tự khác ASCII: “%s”\n"
- 
- #, c-format
- msgid "%s: invalid room number: '%s'\n"
--msgstr "%s: số thứ tự phòng không hợp lệ: « %s »\n"
-+msgstr "%s: số thứ tự phòng không hợp lệ: “%s”\n"
- 
- #, c-format
- msgid "%s: invalid work phone: '%s'\n"
--msgstr "%s: số điện thoại chỗ làm không hợp lệ: « %s »\n"
-+msgstr "%s: số điện thoại chỗ làm không hợp lệ: “%s”\n"
- 
- #, c-format
- msgid "%s: invalid home phone: '%s'\n"
--msgstr "%s: số điện thoại ở nhà không hợp lệ: « %s »\n"
-+msgstr "%s: số điện thoại ở nhà không hợp lệ: “%s”\n"
- 
- #, c-format
- msgid "%s: '%s' contains non-ASCII characters\n"
--msgstr "%s: « %s » chứa ký tự khác ASCII\n"
-+msgstr "%s: “%s” chứa ký tự không thuộc bảng mã ASCII\n"
- 
- #, c-format
- msgid "%s: '%s' contains illegal characters\n"
--msgstr "%s: « %s » chứa ký tự cấm\n"
-+msgstr "%s: “%s” chứa ký tự bị cấm\n"
- 
- #, c-format
- msgid "%s: user '%s' does not exist\n"
--msgstr "%s: người dùng « %s » không tồn tại\n"
-+msgstr "%s: người dùng “%s” không tồn tại\n"
- 
- #, c-format
- msgid "%s: cannot change user '%s' on NIS client.\n"
--msgstr "%s: không thể thay đổi người dùng « %s » trên ứng dụng khách NIS.\n"
-+msgstr "%s: không thể thay đổi người dùng “%s” trên ứng dụng khách NIS.\n"
- 
- #, c-format
- msgid "%s: '%s' is the NIS master for this client.\n"
--msgstr "%s: « %s » là NIS cái cho ứng dụng khách này.\n"
-+msgstr "%s: “%s” là NIS cái cho ứng dụng khách này.\n"
- 
- #, c-format
- msgid "Changing the user information for %s\n"
-@@ -757,14 +741,13 @@
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...]\n"
-+"Cách dùng: %s [tuỳ_chọn ...]\n"
- "\n"
- "Tuỳ chọn:\n"
- 
--#, fuzzy, c-format
--#| msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
-+#, c-format
- msgid "  -c, --crypt-method METHOD     the crypt method (one of %s)\n"
--msgstr "  -c, --crypt-method            phương pháp mật mã (một của %s)\n"
-+msgstr "  -c, --crypt-method PHƯƠNG_THỨC phương pháp mật mã (một trong %s)\n"
- 
- msgid "  -e, --encrypted               supplied passwords are encrypted\n"
- msgstr ""
-@@ -789,11 +772,11 @@
- 
- #, c-format
- msgid "%s: the -c, -e, and -m flags are exclusive\n"
--msgstr "%s: các cờ « -c », « -e » và « -m » loại từ lẫn nhau\n"
-+msgstr "%s: các cờ “-c”, “-e” và “-m” loại từ lẫn nhau\n"
- 
- #, c-format
- msgid "%s: unsupported crypt method: %s\n"
--msgstr "%s: phương pháp mã hoá không được hỗ trợ : %s\n"
-+msgstr "%s: phương pháp mã hoá không được hỗ trợ: %s\n"
- 
- #, c-format
- msgid "%s: line %d: line too long\n"
-@@ -805,11 +788,11 @@
- 
- #, c-format
- msgid "%s: line %d: group '%s' does not exist\n"
--msgstr "%s: dòng %d, nhóm « %s » không tồn tại\n"
-+msgstr "%s: dòng %d, nhóm “%s” không tồn tại\n"
- 
- #, c-format
- msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
--msgstr "%s: dòng %d: lỗi chuẩn bị mục nhập %s mới « %s »\n"
-+msgstr "%s: dòng %d: gặp lỗi khi chuẩn bị mục tin %s mới “%s”\n"
- 
- #, c-format
- msgid "%s: error detected, changes ignored\n"
-@@ -821,51 +804,51 @@
- 
- #, c-format
- msgid "%s: line %d: user '%s' does not exist\n"
--msgstr "%s: dòng %d: người dùng « %s » không tồn tại\n"
-+msgstr "%s: dòng %d: người dùng “%s” không tồn tại\n"
- 
- msgid "  -s, --shell SHELL             new login shell for the user account\n"
- msgstr ""
--"  -s, --shell TRÌNH_BAO         trình bao đăng nhập mới\n"
--"                                cho tài khoản người dùng\n"
-+"  -s, --shell HỆ_VỎ             dùng hệ vỏ đăng nhập mới\n"
-+"                                 cho tài khoản người dùng\n"
- 
- msgid "Login Shell"
--msgstr "Trình bao Đăng nhập"
-+msgstr "Hệ vỏ Đăng nhập"
- 
- #, c-format
- msgid "You may not change the shell for '%s'.\n"
--msgstr "Không cho phép bạn thay đổi trình bao đối với « %s ».\n"
-+msgstr "Không cho phép bạn thay đổi hệ vỏ đối với “%s”.\n"
- 
- #, c-format
- msgid "Changing the login shell for %s\n"
--msgstr "Đang thay đổi trình bao đăng nhập đối với %s\n"
-+msgstr "Đang thay đổi hệ vỏ đăng nhập đối với %s\n"
- 
- #, c-format
- msgid "%s: Invalid entry: %s\n"
--msgstr "%s: Mục nhập không hợp lệ: %s\n"
-+msgstr "%s: mục tin không hợp lệ: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: %s is an invalid shell.\n"
-+#, c-format
- msgid "%s: %s is an invalid shell\n"
--msgstr "%s: %s là một trình bao không hợp lệ.\n"
-+msgstr "%s: %s không phải là hệ vỏ hợp lệ\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: user '%s' does not exist\n"
-+#, c-format
- msgid "%s: Warning: %s does not exist\n"
--msgstr "%s: người dùng « %s » không tồn tại\n"
-+msgstr "%s: Cảnh báo: %s không tồn tại\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: warning: %s not owned by %s\n"
-+#, c-format
- msgid "%s: Warning: %s is not executable\n"
--msgstr "%s: cảnh báo : %s không phải được %s sở hữu\n"
-+msgstr "%s: Cảnh báo: %s không có quyền thực thi\n"
- 
- msgid "  -c, --check                   check the user's password expiration\n"
- msgstr ""
-+"  -c, --check                   kiểm tra sự hết hạn của mật khẩu người dùng\n"
- 
- msgid ""
- "  -f, --force                   force password change if the user's "
- "password\n"
- "                                is expired\n"
- msgstr ""
-+"  -f, --force                   ép buộc đổi mật khẩu nếu mật khẩu của người\n"
-+"                                 dùng hết hạn\n"
- 
- #, c-format
- msgid "%s: options %s and %s conflict\n"
-@@ -913,20 +896,20 @@
- "đếm\n"
- "                                lần không đăng nhập được và các giới hạn như "
- "thế\n"
--"                                (nếu dùng với cờ « -r », « -m » hay « -l » "
--"riêng từng cái)\n"
-+"                                (nếu dùng với cờ “-r”, “-m” hay “-l” riêng "
-+"từng cái)\n"
- "                                chỉ cho mỗi tên đăng nhập đưa ra\n"
- 
- #, c-format
- msgid "%s: Failed to get the entry for UID %lu\n"
--msgstr "%s: Không lấy được mục nhập cho UID %lu\n"
-+msgstr "%s: Không lấy được mục tin cho UID %lu\n"
- 
- msgid "Login       Failures Maximum Latest                   On\n"
--msgstr "Đăng nhập\t\tBị lỗi\tTối đa\tMới nhất        Vào\n"
-+msgstr "Đăng nhập   Bị lỗi   Tối đa  Mới nhất                 Vào\n"
- 
- #, c-format
- msgid " [%lus left]"
--msgstr " [%lus còn lại]"
-+msgstr " [còn %lus]"
- 
- #, c-format
- msgid " [%lds lock]"
-@@ -934,11 +917,11 @@
- 
- #, c-format
- msgid "%s: Failed to reset fail count for UID %lu\n"
--msgstr "%s: không đặt lại được hàm đếm cho UID %lu\n"
-+msgstr "%s: Gặp lỗi khi đặt lại số đếm cho UID %lu\n"
- 
- #, c-format
- msgid "%s: Failed to set max for UID %lu\n"
--msgstr "%s: không đặt được số tối đa cho UID %lu\n"
-+msgstr "%s: Gặp lỗi khi đặt số tối đa cho UID %lu\n"
- 
- #, c-format
- msgid "%s: Failed to set locktime for UID %lu\n"
-@@ -952,10 +935,9 @@
- msgid "%s: Cannot get the size of %s: %s\n"
- msgstr "%s: Không thể lấy kích cỡ của %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: failed to remove %s\n"
-+#, c-format
- msgid "%s: Failed to write %s: %s\n"
--msgstr "%s: không gỡ bỏ được %s\n"
-+msgstr "%s: Gặp lỗi khi ghi %s: %s\n"
- 
- #, c-format
- msgid ""
-@@ -963,7 +945,7 @@
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn] NHÓM\n"
-+"Cách dùng: %s [tuỳ_chọn] NHÓM\n"
- "\n"
- "Tuỳ chọn:\n"
- 
-@@ -974,7 +956,7 @@
- msgstr "  -d, --delete NGƯỜI_DÙNG       gỡ bỏ người dùng này khỏi NHÓM\n"
- 
- msgid "  -Q, --root CHROOT_DIR         directory to chroot into\n"
--msgstr ""
-+msgstr "  -Q, --root THƯ_MỤC_ĐỔI        thư mục gốc sẽ chuyển đến\n"
- 
- msgid "  -r, --remove-password         remove the GROUP's password\n"
- msgstr "  -r, --remove-password         gỡ bỏ mật khẩu của NHÓM\n"
-@@ -997,18 +979,18 @@
- "                                đặt danh sách các quản trị cho NHÓM\n"
- 
- msgid "Except for the -A and -M options, the options cannot be combined.\n"
--msgstr "Trừ hai tuỳ chọn « -A » và « -M », không thể tổ hợp các tuỳ chọn.\n"
-+msgstr "Trừ hai tuỳ chọn “-A” và “-M”, không thể tổ hợp các tuỳ chọn.\n"
- 
- msgid "The options cannot be combined.\n"
- msgstr "Không thể tổ hợp các tuỳ chọn.\n"
- 
- #, c-format
- msgid "%s: shadow group passwords required for -A\n"
--msgstr "%s: mật khẩu nhóm bóng cần thiết cho tùy chọn « -A »\n"
-+msgstr "%s: mật khẩu nhóm shadow cần cho tùy chọn “-A”\n"
- 
- #, c-format
- msgid "%s: group '%s' does not exist in %s\n"
--msgstr "%s: nhóm « %s » không tồn tại trong %s\n"
-+msgstr "%s: nhóm “%s” không tồn tại trong %s\n"
- 
- #, c-format
- msgid "%s: failure while closing read-only %s\n"
-@@ -1025,11 +1007,11 @@
- msgstr "Nhập lại mật khẩu mới: "
- 
- msgid "They don't match; try again"
--msgstr "Hai mật khẩu không trùng thì háy thử lại."
-+msgstr "Hai mật khẩu không khớp nhau, hãy thử lại"
- 
- #, c-format
- msgid "%s: Try again later\n"
--msgstr "%s: hãy thử lại sau.\n"
-+msgstr "%s: Hãy thử lại sau\n"
- 
- #, c-format
- msgid "Adding user %s to group %s\n"
-@@ -1041,7 +1023,7 @@
- 
- #, c-format
- msgid "%s: user '%s' is not a member of '%s'\n"
--msgstr "%s: người dùng « %s » không thuộc về « %s »\n"
-+msgstr "%s: người dùng “%s” không thuộc về “%s”\n"
- 
- #, c-format
- msgid "%s: Not a tty\n"
-@@ -1053,7 +1035,7 @@
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...] NHÓM\n"
-+"Cách dùng: %s [tuỳ_chọn ...] NHÓM\n"
- "\n"
- "Tuỳ chọn:\n"
- 
-@@ -1062,16 +1044,16 @@
- "exists,\n"
- "                                and cancel -g if the GID is already used\n"
- msgstr ""
--"  -f, --force                   thoát thành công nếu nhóm đã có, và hủy bỏ « "
--"-g » nếu GID đã được dùng\n"
-+"  -f, --force                   thoát thành công nếu nhóm đã có, và \n"
-+"                                hủy bỏ “-g” nếu GID đã được dùng\n"
- 
- msgid "  -g, --gid GID                 use GID for the new group\n"
- msgstr "  -g, --gid GID                 dùng GID này cho nhóm mới\n"
- 
- msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
- msgstr ""
--"  -K, --key KHOÁ=GIÁ_TRỊ        ghi đè lên các giá trị mặc định « /etc/login."
--"defs »\n"
-+"  -K, --key KHOÁ=GIÁ_TRỊ        ghi đè lên các giá trị mặc định “/etc/login."
-+"defs”\n"
- 
- msgid ""
- "  -o, --non-unique              allow to create groups with duplicate\n"
-@@ -1091,44 +1073,43 @@
- 
- #, c-format
- msgid "%s: '%s' is not a valid group name\n"
--msgstr "%s: « %s » không phải là tên nhóm hợp lệ\n"
-+msgstr "%s: “%s” không phải là tên nhóm hợp lệ\n"
- 
- #, c-format
- msgid "%s: invalid group ID '%s'\n"
--msgstr "%s: mã số nhóm (GID) không hợp lệ « %s »\n"
-+msgstr "%s: mã số nhóm (GID) không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: -K requires KEY=VALUE\n"
--msgstr "%s: -K cần thiết cú pháp KHÓA=GIÁ_TRỊ\n"
-+msgstr "%s: -K cần cú pháp KHÓA=GIÁ_TRỊ\n"
- 
- #, c-format
- msgid "%s: group '%s' already exists\n"
--msgstr "%s: nhóm « %s » đã có\n"
-+msgstr "%s: nhóm “%s” đã có\n"
- 
- #, c-format
- msgid "%s: GID '%lu' already exists\n"
--msgstr "%s: GID « %lu » đã có\n"
-+msgstr "%s: GID “%lu” đã có\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: Cannot determine your user name.\n"
-+#, c-format
- msgid "%s: Cannot setup cleanup service.\n"
--msgstr "%s: không thể quyết định tên người dùng của bạn.\n"
-+msgstr "%s: Không thể cài đặt dịch vụ dọn dẹp.\n"
- 
- #, c-format
- msgid "%s: cannot remove entry '%s' from %s\n"
--msgstr "%s: không thể gỡ bỏ mục nhập « %s » khỏi %s\n"
-+msgstr "%s: không thể gỡ bỏ mục tin “%s” khỏi %s\n"
- 
- #, c-format
- msgid "%s: cannot remove the primary group of user '%s'\n"
--msgstr "%s: không thể gỡ bỏ nhóm chính của người dùng « %s »\n"
-+msgstr "%s: không thể gỡ bỏ nhóm chính của người dùng “%s”\n"
- 
- #, c-format
- msgid "%s: group '%s' does not exist\n"
--msgstr "%s: nhóm « %s » không tồn tại\n"
-+msgstr "%s: nhóm “%s” không tồn tại\n"
- 
- #, c-format
- msgid "%s: group '%s' is a NIS group\n"
--msgstr "%s: nhóm « %s » là một nhóm kiểu NIS\n"
-+msgstr "%s: nhóm “%s” là một nhóm kiểu NIS\n"
- 
- #, c-format
- msgid "%s: %s is the NIS master\n"
-@@ -1136,11 +1117,11 @@
- 
- #, c-format
- msgid "%s: user '%s' is already a member of '%s'\n"
--msgstr "%s: người dùng « %s » đã thuộc về « %s »\n"
-+msgstr "%s: người dùng “%s” đã thuộc về “%s”\n"
- 
- #, c-format
- msgid "%s: Out of memory. Cannot update %s.\n"
--msgstr "%s: Không đủ bộ nhớ. Không thể cập nhật %s.\n"
-+msgstr "%s: Hết bộ nhớ. Không thể cập nhật %s.\n"
- 
- #, c-format
- msgid ""
-@@ -1148,7 +1129,7 @@
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...] [hành_vi]\n"
-+"Cách dùng: %s [tuỳ_chọn ...] [hành_vi]\n"
- "\n"
- "Tuỳ chọn:\n"
- 
-@@ -1157,14 +1138,14 @@
- "group\n"
- "                                (root only)\n"
- msgstr ""
--"  -g, --group TÊN_NHÓM          thay đổi tên của nhóm này thay cho nhóm của "
--"người dùng (chỉ người chủ)\n"
-+"  -g, --group TÊN_NHÓM          thay đổi tên của nhóm này thay cho nhóm của\n"
-+"                                  người dùng (chỉ siêu quản trị)\n"
- 
- msgid "\n"
- msgstr "\n"
- 
- msgid "Actions:\n"
--msgstr "Hành vi:\n"
-+msgstr "Hành động là:\n"
- 
- msgid ""
- "  -a, --add username            add username to the members of the group\n"
-@@ -1187,7 +1168,7 @@
- 
- #, c-format
- msgid "%s: only root can use the -g/--group option\n"
--msgstr "%s: chỉ người chủ có quyền sử dụng tuỳ chọn « -g/--group »\n"
-+msgstr "%s: chỉ siêu quản trị có quyền sử dụng tuỳ chọn “-g/--group”\n"
- 
- msgid "  -g, --gid GID                 change the group ID to GID\n"
- msgstr "  -g, --gid GID                 thay đổi mã số nhóm sang GID này\n"
-@@ -1210,7 +1191,7 @@
- 
- #, c-format
- msgid "%s: invalid group name '%s'\n"
--msgstr "%s: tên nhóm không hợp lệ « %s »\n"
-+msgstr "%s: tên nhóm không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: group %s is a NIS group\n"
-@@ -1220,70 +1201,57 @@
- msgid "%s: unknown user %s\n"
- msgstr "%s: không rõ người dùng %s\n"
- 
--#, fuzzy, c-format
--#| msgid ""
--#| "Usage: %s [options]\n"
--#| "\n"
--#| "Options:\n"
-+#, c-format
- msgid ""
- "Usage: %s [options] [group [gshadow]]\n"
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...]\n"
-+"Cách dùng: %s [các_tuỳ_chọn] [group [gshadow]]\n"
- "\n"
- "Tuỳ chọn:\n"
- 
--#, fuzzy, c-format
--#| msgid ""
--#| "Usage: %s [options]\n"
--#| "\n"
--#| "Options:\n"
-+#, c-format
- msgid ""
- "Usage: %s [options] [group]\n"
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...]\n"
-+"Cách dùng: %s [các_tuỳ_chọn] [group]\n"
- "\n"
- "Tuỳ chọn:\n"
- 
--#, fuzzy
--#| msgid ""
--#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
--#| "                                crypt algorithms\n"
- msgid ""
- "  -r, --read-only               display errors and warnings\n"
- "                                but do not change files\n"
- msgstr ""
--"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
-+"  -r, --read-only               hiển thị lỗi và cảnh báo\n"
-+"                                nhưng không thay đổi các tập tin\n"
- 
--#, fuzzy
--#| msgid "  -g, --gid GID                 use GID for the new group\n"
- msgid "  -s, --sort                    sort entries by UID\n"
--msgstr "  -g, --gid GID                 dùng GID này cho nhóm mới\n"
-+msgstr "  -s, --sort                    sắp xếp các mục tin theo UID\n"
- 
- #, c-format
- msgid "%s: -s and -r are incompatible\n"
--msgstr "%s: hai tùy chọn « -s » và « -r » không tương thích với nhau\n"
-+msgstr "%s: hai tùy chọn “-s” và “-r” không tương thích với nhau\n"
- 
- msgid "invalid group file entry"
--msgstr "mục nhập tập tin nhóm không hợp lệ"
-+msgstr "mục tin tập tin nhóm không hợp lệ"
- 
- #, c-format
- msgid "delete line '%s'? "
--msgstr "xóa dòng « %s » không? "
-+msgstr "xóa dòng “%s” không? "
- 
- msgid "duplicate group entry"
--msgstr "mục nhập nhóm trùng"
-+msgstr "mục tin nhóm trùng"
- 
- #, c-format
- msgid "invalid group name '%s'\n"
--msgstr "tên nhóm không hợp lệ « %s »\n"
-+msgstr "tên nhóm không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "invalid group ID '%lu'\n"
--msgstr "mã số nhóm không hợp lệ « %lu »\n"
-+msgstr "mã số nhóm không hợp lệ “%lu”\n"
- 
- #, c-format
- msgid "group %s: no user %s\n"
-@@ -1291,40 +1259,40 @@
- 
- #, c-format
- msgid "delete member '%s'? "
--msgstr "xóa thành viên « %s » không? "
-+msgstr "xóa thành viên “%s” không? "
- 
- #, c-format
- msgid "no matching group file entry in %s\n"
--msgstr "không có mục nhập tập tin nhóm tương ứng trong %s\n"
-+msgstr "không có mục tin tập tin nhóm tương ứng trong %s\n"
- 
- #, c-format
- msgid "add group '%s' in %s? "
--msgstr "thêm nhóm « %s » trong %s không?"
-+msgstr "thêm nhóm “%s” trong %s không?"
- 
- #, c-format
- msgid ""
- "group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
- msgstr ""
--"nhóm %s có một mục nhập trong %s, còn trường mật khẩu trong %s không phải "
--"được đặt thành « x »\n"
-+"nhóm %s có một mục tin trong %s, còn trường mật khẩu trong %s không phải "
-+"được đặt thành “x”\n"
- 
- msgid "invalid shadow group file entry"
--msgstr "mục nhập tập tin nhóm bóng không hợp lệ"
-+msgstr "mục tin tập tin nhóm shadow không hợp lệ"
- 
- msgid "duplicate shadow group entry"
--msgstr "mục nhập nhóm bóng trùng"
-+msgstr "mục tin nhóm shadow trùng"
- 
- #, c-format
- msgid "shadow group %s: no administrative user %s\n"
--msgstr "nhóm bóng %s: không có người dùng quản trị %s\n"
-+msgstr "nhóm shadow %s: không có người dùng quản trị %s\n"
- 
- #, c-format
- msgid "delete administrative member '%s'? "
--msgstr "xóa thành viên quản trị « %s » không? "
-+msgstr "xóa thành viên quản trị “%s” không? "
- 
- #, c-format
- msgid "shadow group %s: no user %s\n"
--msgstr "nhóm bóng %s: không có người dùng %s\n"
-+msgstr "nhóm shadow %s: không có người dùng %s\n"
- 
- #, c-format
- msgid "%s: the files have been updated\n"
-@@ -1339,10 +1307,10 @@
- msgstr "%s: không thể xoá %s\n"
- 
- msgid "Usage: id [-a]\n"
--msgstr "Sử dụng: id [-a]\n"
-+msgstr "Cách dùng: id [-a]\n"
- 
- msgid "Usage: id\n"
--msgstr "Sử dụng: id\n"
-+msgstr "Cách dùng: id\n"
- 
- msgid " groups="
- msgstr " nhóm="
-@@ -1350,7 +1318,8 @@
- msgid ""
- "  -b, --before DAYS             print only lastlog records older than DAYS\n"
- msgstr ""
--"  -b, --before SỐ               hiển thị chỉ những bản ghi lastlog\n"
-+"  -b, --before SỐ               hiển thị chỉ những bản ghi lastlog cũ hơn SỐ "
-+"ngày\n"
- "                                cũ hơn số ngày này (_trước_)\n"
- 
- msgid ""
-@@ -1358,7 +1327,7 @@
- "DAYS\n"
- msgstr ""
- "  -t, --time SỐ                 hiển thị chỉ những mục ghi lastlog\n"
--"                                mới hơn số ngày này (_thời gian_)\n"
-+"                                 mới hơn số ngày này (_thời gian_)\n"
- 
- msgid ""
- "  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
-@@ -1367,17 +1336,17 @@
- "tên này\n"
- 
- msgid "Username         Port     From             Latest"
--msgstr "Tên dùng\t\t Cổng    Từ\t\tMới nhất"
-+msgstr "Tài_khoản        Cổng     Từ               Mới nhất"
- 
- msgid "Username                Port     Latest"
--msgstr "Tên dùng\t\t\t Cổng   Mới nhất"
-+msgstr "Người dùng              Cổng     Mới nhất"
- 
- msgid "**Never logged in**"
- msgstr "**Chưa bao giờ đăng nhập**"
- 
- #, c-format
- msgid "Usage: %s [-p] [name]\n"
--msgstr "Sử dụng: %s [-p] [tên]\n"
-+msgstr "Cách dùng: %s [-p] [tên]\n"
- 
- #, c-format
- msgid "       %s [-p] [-h host] [-f name]\n"
-@@ -1389,7 +1358,7 @@
- 
- #, c-format
- msgid "configuration error - cannot parse %s value: '%d'"
--msgstr "lỗi cấu hình — không thể phân tích cú pháp của giá trị %s: « %d »"
-+msgstr "lỗi cấu hình — không thể phân tích cú pháp của giá trị %s: “%d”"
- 
- msgid "Invalid login time"
- msgstr "Thời gian đăng nhập không hợp lệ"
-@@ -1406,7 +1375,7 @@
- "[Disconnect bypassed -- root login allowed.]"
- msgstr ""
- "\n"
--"[Chức năng ngắt kết nối đã bị vòng: cho phép người chủ đăng nhập.]"
-+"[Chức năng ngắt kết nối đã bị vòng: cho phép siêu quản trị đăng nhập.]"
- 
- #, c-format
- msgid ""
-@@ -1422,12 +1391,12 @@
- 
- msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
- msgstr ""
--"Không có mục nhập utmp. Vì thế bạn cần phải thực hiện « login » (đăng nhập) "
--"từ « sh » (trình bao) cấp dưới cùng."
-+"Không có mục tin utmp. Vì thế bạn cần phải thực hiện “login” (đăng nhập) từ "
-+"“sh” (hệ vỏ) cấp dưới cùng."
- 
- #, c-format
- msgid "login: PAM Failure, aborting: %s\n"
--msgstr "login: (đăng nhập) PAM bị lỗi nên hủy bỏ : %s\n"
-+msgstr "login: (đăng nhập) PAM bị lỗi nên hủy bỏ: %s\n"
- 
- #, c-format
- msgid "%s login: "
-@@ -1446,10 +1415,9 @@
- msgid "Login incorrect"
- msgstr "Đăng nhập không đúng"
- 
--#, fuzzy, c-format
--#| msgid "%s: Cannot determine your user name.\n"
-+#, c-format
- msgid "Cannot find user (%s)\n"
--msgstr "%s: không thể quyết định tên người dùng của bạn.\n"
-+msgstr "Không thể tìm thấy người dùng (%s)\n"
- 
- #, c-format
- msgid ""
-@@ -1468,7 +1436,7 @@
- msgstr "TIOCSCTTY bị lỗi vào %s"
- 
- msgid "Warning: login re-enabled after temporary lockout."
--msgstr "Cảnh báo : đăng nhập đã bật lại sau bị khoá ra tạm thời."
-+msgstr "Cảnh báo: đăng nhập đã bật lại sau bị khoá ra tạm thời."
- 
- #, c-format
- msgid "Last login: %s on %s"
-@@ -1490,16 +1458,16 @@
- "\n"
- 
- msgid "Usage: logoutd\n"
--msgstr "Usage: logoutd\n"
-+msgstr "Cách dùng: logoutd\n"
- 
- msgid "Usage: newgrp [-] [group]\n"
- msgstr ""
--"Sử dụng: newgrp [-] [nhóm]\n"
-+"Cách dùng: newgrp [-] [nhóm]\n"
- "[newgrp: nhóm mới]\n"
- 
- msgid "Usage: sg group [[-c] command]\n"
- msgstr ""
--"Sử dụng: sg group [[-c] lệnh]\n"
-+"Cách dùng: sg group [[-c] lệnh]\n"
- "[group: nhóm]\n"
- 
- msgid "Invalid password.\n"
-@@ -1511,7 +1479,7 @@
- 
- #, c-format
- msgid "%s: GID '%lu' does not exist\n"
--msgstr "%s: GID « %lu » không tồn tại\n"
-+msgstr "%s: GID “%lu” không tồn tại\n"
- 
- msgid "too many groups\n"
- msgstr "quá nhiều nhóm\n"
-@@ -1522,15 +1490,15 @@
- #, c-format
- msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
- msgstr ""
--"%s: nhóm « %s » là một nhóm bóng, nhưng không tồn tại trong « /etc/group »\n"
-+"%s: nhóm “%s” là một nhóm shadow, nhưng không tồn tại trong “/etc/group”\n"
- 
- #, c-format
- msgid "%s: invalid user ID '%s'\n"
--msgstr "%s: mã số người dùng không hợp lệ « %s »\n"
-+msgstr "%s: mã số người dùng không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: invalid user name '%s'\n"
--msgstr "%s: tên dùng không hợp lệ « %s »\n"
-+msgstr "%s: tên dùng không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: line %d: invalid line\n"
-@@ -1539,7 +1507,7 @@
- #, c-format
- msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
- msgstr ""
--"%s: không thể cập nhật mục nhập của người dùng %s (không có trong cơ sở dữ "
-+"%s: không thể cập nhật mục tin của người dùng %s (không có trong cơ sở dữ "
- "liệu mật khẩu passwd)\n"
- 
- #, c-format
-@@ -1552,7 +1520,7 @@
- 
- #, c-format
- msgid "%s: line %d: user '%s' does not exist in %s\n"
--msgstr "%s: dòng %d: người dùng « %s » không tồn tại trong %s\n"
-+msgstr "%s: dòng %d: người dùng “%s” không tồn tại trong %s\n"
- 
- #, c-format
- msgid "%s: line %d: can't update password\n"
-@@ -1568,7 +1536,7 @@
- 
- #, c-format
- msgid "%s: line %d: can't update entry\n"
--msgstr "%s: dòng %d: không thể cập nhật mục nhập\n"
-+msgstr "%s: dòng %d: không thể cập nhật mục tin\n"
- 
- msgid ""
- "  -a, --all                     report password status on all accounts\n"
-@@ -1642,7 +1610,7 @@
- "khi thay đổi được mật khẩu\n"
- 
- msgid "Old password: "
--msgstr "Mật khẩu cũ : "
-+msgstr "Mật khẩu cũ: "
- 
- #, c-format
- msgid ""
-@@ -1671,7 +1639,7 @@
- "Warning: weak password (enter it again to use it anyway)."
- msgstr ""
- "\n"
--"Cảnh báo : mật khẩu yếu (nhập lại để vẫn chọn)"
-+"Cảnh báo: mật khẩu yếu (nhập lại để vẫn chọn)"
- 
- msgid "They don't match; try again.\n"
- msgstr "Hai mật khẩu không trùng: hãy thử lại.\n"
-@@ -1691,8 +1659,8 @@
- "account.\n"
- msgstr ""
- "%s: mở khoá mật khẩu thì gây ra một tài khoản không có mật khẩu.\n"
--"Bạn nên đặt một mật khẩu dùng câu lệnh « usermod -p » để mở khoá mật khẩu "
--"của tài khoản này.\n"
-+"Bạn nên đặt một mật khẩu dùng câu lệnh “usermod -p” để mở khoá mật khẩu của "
-+"tài khoản này.\n"
- 
- #, c-format
- msgid "%s: repository %s not supported\n"
-@@ -1723,109 +1691,96 @@
- msgid "%s: password expiry information changed.\n"
- msgstr "%s: thông tin đã thay đổi về sự hết hạn sử dụng mật khẩu.\n"
- 
--#, fuzzy, c-format
--#| msgid ""
--#| "Usage: %s [options]\n"
--#| "\n"
--#| "Options:\n"
-+#, c-format
- msgid ""
- "Usage: %s [options] [passwd]\n"
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...]\n"
-+"Cách dùng: %s [các_tuỳ_chọn] [passwd]\n"
- "\n"
- "Tuỳ chọn:\n"
- 
--#, fuzzy, c-format
--#| msgid ""
--#| "Usage: %s [options]\n"
--#| "\n"
--#| "Options:\n"
-+#, c-format
- msgid ""
- "Usage: %s [options] [passwd [shadow]]\n"
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...]\n"
-+"Cách dùng: %s [các_tuỳ_chọn] [passwd [shadow]]\n"
- "\n"
- "Tuỳ chọn:\n"
- 
--#, fuzzy
--#| msgid "  -g, --gid GID                 use GID for the new group\n"
- msgid "  -q, --quiet                   report errors only\n"
--msgstr "  -g, --gid GID                 dùng GID này cho nhóm mới\n"
-+msgstr "  -q, --quiet                   chỉ báo cáo lỗi\n"
- 
- #, c-format
- msgid "%s: no alternative shadow file allowed when USE_TCB is enabled.\n"
- msgstr ""
-+"%s: không cho phép tập tin shadow thay thế khi mà biến USE_TCB được đặt.\n"
- 
- msgid "invalid password file entry"
--msgstr "Mục nhập tập tin mật khẩu không hợp lệ"
-+msgstr "mục tin tập tin mật khẩu không hợp lệ"
- 
- msgid "duplicate password entry"
--msgstr "mục nhập mật khẩu trùng"
-+msgstr "mục tin mật khẩu trùng"
- 
- #, c-format
- msgid "invalid user name '%s'\n"
--msgstr "tên người dùng không hợp lệ « %s »\n"
-+msgstr "tên người dùng không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "invalid user ID '%lu'\n"
--msgstr "mã số người dùng không hợp lệ « %lu »\n"
-+msgstr "mã số người dùng không hợp lệ “%lu”\n"
- 
- #, c-format
- msgid "user '%s': no group %lu\n"
--msgstr "người dùng « %s »: không có nhóm %lu\n"
-+msgstr "người dùng “%s”: không có nhóm %lu\n"
- 
- #, c-format
- msgid "user '%s': directory '%s' does not exist\n"
--msgstr "người dùng « %s »: thư mục « %s » không tồn tại\n"
-+msgstr "người dùng “%s”: thư mục “%s” không tồn tại\n"
- 
- #, c-format
- msgid "user '%s': program '%s' does not exist\n"
--msgstr "người dùng « %s »: chương trình « %s » không tồn tại\n"
-+msgstr "người dùng “%s”: chương trình “%s” không tồn tại\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "no tcb directory for %s\n"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "không có thư mục tcb cho %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "create tcb directory for %s?"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "tạo thư mục tcb %s không?"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "failed to create tcb directory for %s\n"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "gặp lỗi khi tạo thư mục tcb cho %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot open %s\n"
-+#, c-format
- msgid "%s: cannot lock %s.\n"
--msgstr "%s: không thể mở %s\n"
-+msgstr "%s: không thể khóa %s.\n"
- 
- #, c-format
- msgid "no matching password file entry in %s\n"
--msgstr "không có mục nhập tập tin mật khẩu tương ứng trong %s\n"
-+msgstr "không có mục tin tập tin mật khẩu tương ứng trong %s\n"
- 
- #, c-format
- msgid "add user '%s' in %s? "
--msgstr "thêm người dùng « %s » trong %s không?"
-+msgstr "thêm người dùng “%s” trong %s không?"
- 
- #, c-format
- msgid ""
- "user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
- msgstr ""
--"người dùng %s có một mục nhập trong %s, còn trường mật khẩu trong %s không "
--"phải được đặt thành « s »\n"
-+"người dùng %s có một mục tin trong %s, còn trường mật khẩu trong %s không "
-+"phải được đặt thành “s”\n"
- 
- msgid "invalid shadow password file entry"
--msgstr "mục nhập tập tin mật khẩu bóng không hợp lệ"
-+msgstr "mục tin tập tin mật khẩu shadow không hợp lệ"
- 
- msgid "duplicate shadow password entry"
--msgstr "mục nhập mật khẩu bóng trùng"
-+msgstr "mục tin mật khẩu shadow trùng"
- 
- #, c-format
- msgid "user %s: last password change in the future\n"
-@@ -1833,18 +1788,18 @@
- 
- #, c-format
- msgid "%s: cannot sort entries in %s\n"
--msgstr "%s: không thể sắp xếp các mục nhập trong %s\n"
-+msgstr "%s: không thể sắp xếp các mục tin trong %s\n"
- 
- #, c-format
- msgid "%s: can't work with tcb enabled\n"
--msgstr ""
-+msgstr "%s: không thể làm việc khi tcb được bật\n"
- 
- #, c-format
- msgid "%s: failed to change the mode of %s to 0600\n"
- msgstr "%s: không thay đổi được chế độ của %s thành 0600\n"
- 
- msgid "Access to su to that account DENIED.\n"
--msgstr "Truy cập « su » vào tài khoản đó BỊ TỪ CHỐI.\n"
-+msgstr "Truy cập “su” vào tài khoản đó BỊ TỪ CHỐI.\n"
- 
- msgid "Password authentication bypassed.\n"
- msgstr "Xác thực mật khẩu bị đi vòng.\n"
-@@ -1853,33 +1808,32 @@
- msgstr "Hãy nhập mật khẩu của MÌNH để xác thực.\n"
- 
- msgid " ...killed.\n"
--msgstr ""
-+msgstr " ...đã chết.\n"
- 
- msgid " ...waiting for child to terminate.\n"
--msgstr ""
-+msgstr " ...đang đợi tiến con chấm dứt.\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: Cannot determine your user name.\n"
-+#, c-format
- msgid "%s: Cannot fork user shell\n"
--msgstr "%s: không thể quyết định tên người dùng của bạn.\n"
-+msgstr "%s: Không thể rẽ nhánh tiến trình hệ vỏ người dùng\n"
- 
- #, c-format
- msgid "%s: signal malfunction\n"
--msgstr ""
-+msgstr "%s: tín hiệu trục trặc\n"
- 
- #, c-format
- msgid "%s: signal masking malfunction\n"
--msgstr ""
-+msgstr "%s: trục trặc mặt nạ tín hiệu\n"
- 
- msgid "Session terminated, terminating shell..."
--msgstr ""
-+msgstr "Phiên làm việc đã kết thúc, nên kết thúc hệ vỏ..."
- 
- #, c-format
- msgid "%s: %s\n"
- msgstr "%s: %s\n"
- 
- msgid " ...terminated.\n"
--msgstr ""
-+msgstr " ...đã chấm dứt.\n"
- 
- msgid ""
- "Usage: su [options] [LOGIN]\n"
-@@ -1894,20 +1848,20 @@
- "  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
- "\n"
- msgstr ""
--"Sử dụng: su [tùy_chọn...] [đăng_nhập]\n"
-+"Cách dùng: su [tùy_chọn...] [đăng_nhập]\n"
- "\n"
- "[su: siêu người dùng]\n"
- "\n"
- "Tùy chọn:\n"
--"  -c, --command LỆNH            gởi lệnh này qua cho trình bao đã gọi\n"
-+"  -c, --command LỆNH            gởi lệnh này qua cho hệ vỏ đã gọi\n"
- "  -h, --help                    hiển thị _trợ giúp_ này rồi thoát\n"
--"  -, -l, --login                lập trình bao là trình bao _đăng nhập_\n"
-+"  -, -l, --login                lập hệ vỏ là hệ vỏ _đăng nhập_\n"
- "  -m, -p,\n"
--"  --preserve-environment        đừng lập lại các biến _môi trường_, và "
-+"  --preserve-environment        đừng đặt lại các biến _môi trường_, và "
- "_giữ_\n"
--"                                trình bao hiện có\n"
--"  -s, --shell TRÌNH_BAO         sử dụng trình bao này thay cho trình mặc "
--"định trong passwd\n"
-+"                                hệ vỏ hiện có\n"
-+"  -s, --shell HỆ_VỎ             dùng hệ vỏ này thay cho trình mặc định trong "
-+"passwd\n"
- "\n"
- 
- #, c-format
-@@ -1916,11 +1870,11 @@
- "(Ignored)\n"
- msgstr ""
- "%s: %s\n"
--"(Bị bo qua)\n"
-+"(Bị bỏ qua)\n"
- 
- #, c-format
- msgid "You are not authorized to su %s\n"
--msgstr "Bạn không có quyền sử dụng lệnh « su » (siêu người dùng) với %s.\n"
-+msgstr "Bạn không có quyền sử dụng lệnh “su” (siêu người dùng) với %s.\n"
- 
- msgid "(Enter your own password)"
- msgstr "(Nhập mật khẩu của mình)"
-@@ -1932,12 +1886,11 @@
- #, c-format
- msgid "%s: You are not authorized to su at that time\n"
- msgstr ""
--"%s: Bạn không có quyền sử dụng lệnh « su » (siêu người dùng) vào lúc đó\n"
-+"%s: Bạn không có quyền sử dụng lệnh “su” (siêu người dùng) vào lúc đó\n"
- 
--#, fuzzy, c-format
--#| msgid "No password entry for 'root'"
-+#, c-format
- msgid "No passwd entry for user '%s'\n"
--msgstr "Không có mục nhập mật khẩu cho « root » (người chủ)"
-+msgstr "Không có mục tin mật khẩu cho tài khoản '%s'\n"
- 
- #, c-format
- msgid "%s: must be run from a terminal\n"
-@@ -1947,15 +1900,13 @@
- msgid "%s: pam_start: error %d\n"
- msgstr "%s: pam_start: (pam bắt đầu) lỗi %d\n"
- 
--#, fuzzy, c-format
--#| msgid "lastlog: Cannot get the size of %s: %s\n"
-+#, c-format
- msgid "%s: Cannot drop the controlling terminal\n"
--msgstr "lastlog: Không thể lấy kích cỡ của %s: %s\n"
-+msgstr "%s: Không thể xóa thiết bị cuối điều khiển\n"
- 
--#, fuzzy, c-format
--#| msgid "Cannot execute %s"
-+#, c-format
- msgid "Cannot execute %s\n"
--msgstr "Không thể thực hiện %s"
-+msgstr "Không thể thực thi %s\n"
- 
- msgid "No password file"
- msgstr "Không có tập tin mật khẩu"
-@@ -1964,7 +1915,7 @@
- msgstr "TIOCSCTTY bị lỗi"
- 
- msgid "No password entry for 'root'"
--msgstr "Không có mục nhập mật khẩu cho « root » (người chủ)"
-+msgstr "Không có mục tin mật khẩu cho “root” (siêu quản trị)"
- 
- msgid ""
- "\n"
-@@ -1973,14 +1924,14 @@
- msgstr ""
- "\n"
- "Hãy gõ tổ hợp phím Ctrl-D để tiếp tục khởi động bình thường,\n"
--"(hoặc nhập mật khẩu người chủ để bảo dưỡng hệ thống):"
-+"(hoặc nhập mật khẩu siêu quản trị để bảo dưỡng hệ thống):"
- 
- msgid "Entering System Maintenance Mode"
- msgstr "Đang vào Chế độ Bảo dưỡng Hệ thống"
- 
- #, c-format
- msgid "%s: %s was created, but could not be removed\n"
--msgstr ""
-+msgstr "%s: %s đã được tạo, nhưng không thể bị gỡ bỏ\n"
- 
- #, c-format
- msgid "%s: the %s configuration in %s will be ignored\n"
-@@ -1998,10 +1949,9 @@
- msgid "%s: line too long in %s: %s..."
- msgstr "%s: dòng quá dài trong %s: %s..."
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "%s: Cannot create backup file (%s): %s\n"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "%s: Không thể tạo tập tin sao lưu dự phòng (%s): %s\n"
- 
- #, c-format
- msgid "%s: rename: %s: %s\n"
-@@ -2009,17 +1959,13 @@
- 
- #, c-format
- msgid "%s: group '%s' is a NIS group.\n"
--msgstr "%s: nhóm « %s » là nhóm kiểu NIS.\n"
-+msgstr "%s: nhóm “%s” là nhóm kiểu NIS.\n"
- 
- #, c-format
- msgid "%s: too many groups specified (max %d).\n"
- msgstr "%s: ghi rõ quá nhiều nhóm (tối đa %d).\n"
- 
--#, fuzzy, c-format
--#| msgid ""
--#| "Usage: %s [options]\n"
--#| "\n"
--#| "Options:\n"
-+#, c-format
- msgid ""
- "Usage: %s [options] LOGIN\n"
- "       %s -D\n"
-@@ -2027,7 +1973,9 @@
- "\n"
- "Options:\n"
- msgstr ""
--"Sử dụng: %s [tuỳ_chọn ...]\n"
-+"Cách dùng: %s [các_tuỳ_chọn] LOGIN\n"
-+"       %s -D\n"
-+"       %s -D [các-tùy-chọn]\n"
- "\n"
- "Tuỳ chọn:\n"
- 
-@@ -2036,63 +1984,62 @@
- "the\n"
- "                                new account\n"
- msgstr ""
--"  -b, --base-dir THƯ_MỤC       đặt thư mục cơ bản cho thư mục chính của tài "
-+"  -b, --base-dir THƯ_MỤC       đặt thư mục cơ bản cho thư mục riêng của tài "
- "khoản mới\n"
- 
- msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
- msgstr "  -c, --comment GHI_CHÚ         trường GECOS của tài khoản mới\n"
- 
- msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
--msgstr "  -d, --home-dir THƯ_MỤC       thư mục chính của tài khoản mới\n"
-+msgstr "  -d, --home-dir THƯ_MỤC        thư mục riêng của tài khoản mới\n"
- 
- msgid ""
- "  -D, --defaults                print or change default useradd "
- "configuration\n"
- msgstr ""
--"  -D, --defaults                ra ra hay thay đổi cấu hình useradd mặc "
--"định\n"
-+"  -D, --defaults                in hay thay đổi cấu hình useradd mặc định\n"
- 
- msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
--msgstr "  -e, --expiredate NGÀY      ngày hết hạn sử dụng tài khoản mới\n"
-+msgstr "  -e, --expiredate NGÀY         ngày hết hạn sử dụng tài khoản mới\n"
- 
- msgid ""
- "  -f, --inactive INACTIVE       password inactivity period of the new "
- "account\n"
- msgstr ""
--"  -f, --inactive KHOẢNG       khoảng thời gian không hoạt động của tài khoản "
--"mới\n"
-+"  -f, --inactive KHOẢNG         khoảng thời gian không hoạt động của tài "
-+"khoản mới\n"
- 
- msgid ""
- "  -g, --gid GROUP               name or ID of the primary group of the new\n"
- "                                account\n"
- msgstr ""
--"  -g, --gid NHÓM               tên của mã số của nhóm chính của tài khoản "
-+"  -g, --gid NHÓM                tên của mã số của nhóm chính của tài khoản "
- "mới\n"
- 
- msgid ""
- "  -G, --groups GROUPS           list of supplementary groups of the new\n"
- "                                account\n"
- msgstr ""
--"  -G, --groups NHÓM           danh sách các nhóm phụ của tài khoản mới\n"
-+"  -G, --groups NHÓM             danh sách các nhóm phụ của tài khoản mới\n"
- 
- msgid ""
- "  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
--msgstr "  -k, --skel THƯ_MỤC           dùng thư mục khung sườn xen kẽ\n"
-+msgstr "  -k, --skel THƯ_MỤC            dùng thư mục khung sườn thay thế\n"
- 
- msgid ""
- "  -l, --no-log-init             do not add the user to the lastlog and\n"
- "                                faillog databases\n"
- msgstr ""
--"  -l, --no-log-init             đừng thêm người dùng vào các cơ sở dữ liệu "
--"faillog và lastlog\n"
-+"  -l, --no-log-init             đừng thêm người dùng vào các cơ sở \n"
-+"                                 dữ liệu faillog và lastlog\n"
- 
- msgid "  -m, --create-home             create the user's home directory\n"
--msgstr "  -m, --create-home             tạo thư mục chính của người dùng\n"
-+msgstr "  -m, --create-home             tạo thư mục riêng của người dùng\n"
- 
- msgid ""
- "  -M, --no-create-home          do not create the user's home directory\n"
- msgstr ""
--"  -M, --no-create-home          đừng tạo thư mục chính của người dùng\n"
-+"  -M, --no-create-home          không tạo thư mục riêng của người dùng\n"
- 
- msgid ""
- "  -N, --no-user-group           do not create a group with the same name as\n"
-@@ -2104,16 +2051,15 @@
- "  -o, --non-unique              allow to create users with duplicate\n"
- "                                (non-unique) UID\n"
- msgstr ""
--"  -o, --non-unique              cho phép tạo người dùng có UID trùng (không "
--"duy nhất)\n"
-+"  -o, --non-unique              cho phép tạo người dùng có UID trùng\n"
-+"                                 (không duy nhất)\n"
- 
- msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
- msgstr ""
- "  -p, --password MẬT_KHẨU       mật khẩu được mật mã của tài khoản mới\n"
- 
- msgid "  -s, --shell SHELL             login shell of the new account\n"
--msgstr ""
--"  -s, --shell TRÌNH_BAO             trình bao đăng nhập của tài khoản mới\n"
-+msgstr "  -s, --shell HỆ_VỎ             hệ vỏ đăng nhập của tài khoản mới\n"
- 
- msgid "  -u, --uid UID                 user ID of the new account\n"
- msgstr "  -u, --uid UID                 mã số người dùng của tài khoản mới\n"
-@@ -2127,48 +2073,48 @@
- "  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
- "mapping\n"
- msgstr ""
--"  -Z, --selinux-user SEUSER     sử dụng một người dùng SE (SEUSER) riêng cho "
--"sự ánh xạ người dùng SELinux\n"
-+"  -Z, --selinux-user SEUSER     dùng một người dùng SE (SEUSER) riêng cho sự "
-+"ánh xạ người dùng SELinux\n"
- 
- #, c-format
- msgid "%s: invalid base directory '%s'\n"
--msgstr "%s: thư mục cơ ban không hợp lệ « %s »\n"
-+msgstr "%s: thư mục cơ sở không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: invalid comment '%s'\n"
--msgstr "%s: ghi chú không hợp lệ « %s »\n"
-+msgstr "%s: ghi chú không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: invalid home directory '%s'\n"
--msgstr "%s: thư mục chính không hợp lê « %s »\n"
-+msgstr "%s: thư mục riêng không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: shadow passwords required for -e\n"
--msgstr "%s: cần thiết mật khẩu bóng cho tùy chọn « -e »\n"
-+msgstr "%s: cần mật khẩu shadow cho tùy chọn “-e”\n"
- 
- #, c-format
- msgid "%s: shadow passwords required for -f\n"
--msgstr "%s: cần thiết mật khẩu bóng cho tùy chọn « -f »\n"
-+msgstr "%s: cần mật khẩu shadow cho tùy chọn “-f”\n"
- 
- #, c-format
- msgid "%s: invalid field '%s'\n"
--msgstr "%s: trường không hợp lệ « %s »\n"
-+msgstr "%s: trường không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: invalid shell '%s'\n"
--msgstr "%s: trình bao không hợp lệ « %s »\n"
-+msgstr "%s: hệ vỏ không hợp lệ “%s”\n"
- 
- #, c-format
- msgid "%s: -Z requires SELinux enabled kernel\n"
--msgstr "%s: « -Z » yêu cầu hạt nhân hiệu lực SELinux\n"
-+msgstr "%s: “-Z” yêu cầu nhân bật tính năng hỗ trợ SELinux\n"
- 
- #, c-format
- msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
--msgstr "%s: không đặt lại được mục nhập faillog của UID %lu: %s\n"
-+msgstr "%s: không đặt lại được mục tin faillog của UID %lu: %s\n"
- 
- #, c-format
- msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
--msgstr "%s: không đặt lại được mục nhập lastlog của UID %lu: %s\n"
-+msgstr "%s: gặp lỗi khi đặt lại mục tin lastlog của UID %lu: %s\n"
- 
- #, c-format
- msgid "%s: cannot create directory %s\n"
-@@ -2180,21 +2126,20 @@
- msgid ""
- "Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
- msgstr ""
--"Không tìm thấy nhóm « mail » (thư tín). Vì thế đang tạo tập tin hộp thư "
--"người dùng với chế độ 0600.\n"
-+"Không tìm thấy nhóm “mail” (thư tín). Vì thế đang tạo tập tin hộp thư người "
-+"dùng với chế độ 0600.\n"
- 
- msgid "Setting mailbox file permissions"
- msgstr "Đang đặt quyền truy cập tập tin hộp thư"
- 
- #, c-format
- msgid "%s: user '%s' already exists\n"
--msgstr "%s: người dùng « %s » đã có\n"
-+msgstr "%s: người dùng “%s” đã có\n"
- 
- #, c-format
- msgid ""
- "%s: group %s exists - if you want to add this user to that group, use -g.\n"
--msgstr ""
--"%s: nhóm %s đã có.  Muốn thêm họ vào nhóm đó thì dùng tùy chọn « -g ».\n"
-+msgstr "%s: nhóm %s đã có. Muốn thêm họ vào nhóm đó thì dùng tùy chọn “-g”.\n"
- 
- #, c-format
- msgid "%s: can't create user\n"
-@@ -2204,10 +2149,9 @@
- msgid "%s: UID %lu is not unique\n"
- msgstr "%s: UID %lu không phải duy nhất\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "%s: Failed to create tcb directory for %s\n"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "%s: Gặp lỗi khi tạo thư mục tcb cho %s\n"
- 
- #, c-format
- msgid "%s: can't create group\n"
-@@ -2218,59 +2162,55 @@
- "%s: warning: the home directory already exists.\n"
- "Not copying any file from skel directory into it.\n"
- msgstr ""
--"%s: cảnh báo : thư mục chính đã có.\n"
--"Vì vậy không sao chép vào nó tập tin nào từ thư mục « skel ».\n"
-+"%s: cảnh báo: thư mục riêng đã có.\n"
-+"Vì vậy không sao chép vào nó tập tin nào từ thư mục “skel”.\n"
- 
- #, c-format
- msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
- msgstr ""
--"%s: cảnh báo : lỗi ánh xạ tên người dùng %s tới người dùng SELinux %s.\n"
-+"%s: cảnh báo: lỗi ánh xạ tên người dùng %s tới người dùng SELinux %s.\n"
- 
- msgid ""
- "  -f, --force                   force removal of files,\n"
- "                                even if not owned by user\n"
- msgstr ""
- "  -f, --force                   ép buộc gỡ bỏ tập tin, thậm chí nếu không\n"
--"                                được sở hữu bởi người dùng\n"
-+"                                  được sở hữu bởi người dùng\n"
- 
- msgid "  -r, --remove                  remove home directory and mail spool\n"
- msgstr ""
--"  -r, --remove                  gỡ bỏ thư mục chính và ống chỉ thư tín\n"
-+"  -r, --remove                  gỡ bỏ thư mục riêng và ống chỉ thư tín\n"
- 
--#, fuzzy
--#| msgid ""
--#| "  -Z, --selinux-user            new SELinux user mapping for the user "
--#| "account\n"
- msgid ""
- "  -Z, --selinux-user            remove any SELinux user mapping for the "
- "user\n"
- msgstr ""
--"  -Z, --selinux-user            sự ánh xạ SELinux mới cho tài khoản người "
--"dùng\n"
-+"  -Z, --selinux-user            gỡ bỏ bất kỳ ánh xạ SELinux nào cho tài "
-+"khoản người dùng\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot remove the primary group of user '%s'\n"
-+#, c-format
- msgid ""
- "%s: group %s not removed because it is not the primary group of user %s.\n"
--msgstr "%s: không thể gỡ bỏ nhóm chính của người dùng « %s »\n"
-+msgstr ""
-+"%s: không gỡ bỏ nhóm %s bởi vì nó không phải là nhóm chính của người dùng "
-+"“%s”.\n"
- 
- #, c-format
- msgid "%s: group %s not removed because it has other members.\n"
--msgstr ""
-+msgstr "%s: không thể gỡ bỏ nhóm %s bởi vì nó có thành viên khác nữa.\n"
- 
- #, c-format
- msgid "%s: group %s is the primary group of another user and is not removed.\n"
- msgstr ""
- "%s: nhóm %s là nhóm chính của một người dùng khác thì không bị gỡ bỏ.\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: %s home directory (%s) not found\n"
-+#, c-format
- msgid "%s: %s mail spool (%s) not found\n"
--msgstr "%s: %s không tìm thấy thư mục chính (%s)\n"
-+msgstr "%s: không tìm thấy bể thư %s (%s)\n"
- 
- #, c-format
- msgid "%s: warning: can't remove %s: %s\n"
--msgstr "%s: cảnh báo : không thể gỡ bỏ %s: %s\n"
-+msgstr "%s: cảnh báo: không thể gỡ bỏ %s: %s\n"
- 
- #, c-format
- msgid "%s: %s not owned by %s, not removing\n"
-@@ -2278,22 +2218,19 @@
- 
- #, c-format
- msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
--msgstr ""
-+msgstr "%s: Không thể phân bổ bộ nhớ, mục tin tcb cho %s chưa được gỡ bỏ.\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: failed to drop privileges (%s)\n"
-+#, c-format
- msgid "%s: Cannot drop privileges: %s\n"
--msgstr "%s: lỗi bỏ quyền truy cập (%s)\n"
-+msgstr "%s: Gặp lỗi khi xóa bỏ đặc quyền: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "lastlog: Cannot get the size of %s: %s\n"
-+#, c-format
- msgid "%s: Cannot remove the content of %s: %s\n"
--msgstr "lastlog: Không thể lấy kích cỡ của %s: %s\n"
-+msgstr "%s: Không thể gỡ bỏ nội dung của %s: %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot remove entry '%s' from %s\n"
-+#, c-format
- msgid "%s: Cannot remove tcb files for %s: %s\n"
--msgstr "%s: không thể gỡ bỏ mục nhập « %s » khỏi %s\n"
-+msgstr "%s: Không thể gỡ bỏ tập tin tcb cho %s: %s\n"
- 
- #, c-format
- msgid "%s: user %s is a NIS user\n"
-@@ -2301,23 +2238,21 @@
- 
- #, c-format
- msgid "%s: %s home directory (%s) not found\n"
--msgstr "%s: %s không tìm thấy thư mục chính (%s)\n"
-+msgstr "%s: %s không tìm thấy thư mục riêng (%s)\n"
- 
- #, c-format
- msgid "%s: not removing directory %s (would remove home of user %s)\n"
- msgstr ""
--"%s: sẽ không gỡ bỏ thư mục %s (vì cũng gỡ bỏ thư mục chính của người dùng "
-+"%s: sẽ không gỡ bỏ thư mục %s (vì cũng gỡ bỏ thư mục riêng của người dùng "
- "%s)\n"
- 
- #, c-format
- msgid "%s: error removing directory %s\n"
- msgstr "%s: gặp lỗi khi gỡ bỏ thư mục %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
-+#, c-format
- msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
--msgstr ""
--"%s: cảnh báo : lỗi ánh xạ tên người dùng %s tới người dùng SELinux %s.\n"
-+msgstr "%s: cảnh báo: gặp lỗi khi gỡ bỏ ánh xạ người dùng %s tới SELinux.\n"
- 
- msgid "  -c, --comment COMMENT         new value of the GECOS field\n"
- msgstr "  -c, --comment GHI_LƯU         giá trị mới của trường GECOS\n"
-@@ -2325,7 +2260,7 @@
- msgid ""
- "  -d, --home HOME_DIR           new home directory for the user account\n"
- msgstr ""
--"  -d, --home THƯ_MỤC            thư mục chính mới cho tài khoản người dùng\n"
-+"  -d, --home THƯ_MỤC            thư mục riêng mới cho tài khoản người dùng\n"
- 
- msgid ""
- "  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
-@@ -2353,8 +2288,8 @@
- "                                mentioned by the -G option without removing\n"
- "                                him/her from other groups\n"
- msgstr ""
--"  -a, --append                  phụ thêm người dùng vào các nhóm phụ\n"
--"                                đưa ra bởi tuỳ chọn « -G » mà không gỡ bỏ ta "
-+"  -a, --append                  thêm người dùng vào các nhóm phụ\n"
-+"                                đưa ra bởi tuỳ chọn “-G” mà không gỡ bỏ ta "
- "khỏi nhóm khác\n"
- 
- msgid "  -l, --login NEW_LOGIN         new value of the login name\n"
-@@ -2367,9 +2302,9 @@
- "  -m, --move-home               move contents of the home directory to the\n"
- "                                new location (use only with -d)\n"
- msgstr ""
--"  -m, --move-home               di chuyển nội dung của thư mục chính sang vị "
-+"  -m, --move-home               di chuyển nội dung của thư mục riêng sang vị "
- "trí mới\n"
--"                                (chỉ dùng cùng với « -d »)\n"
-+"                                (chỉ dùng cùng với “-d”)\n"
- 
- msgid ""
- "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
-@@ -2386,16 +2321,11 @@
- msgid "  -U, --unlock                  unlock the user account\n"
- msgstr "  -U, --unlock                  mở khoá tài khoản người dùng\n"
- 
--#, fuzzy
--#| msgid ""
--#| "  -Z, --selinux-user            new SELinux user mapping for the user "
--#| "account\n"
- msgid ""
- "  -Z, --selinux-user SEUSER     new SELinux user mapping for the user "
- "account\n"
- msgstr ""
--"  -Z, --selinux-user            sự ánh xạ SELinux mới cho tài khoản người "
--"dùng\n"
-+"  -Z, --selinux-user SEUSER     ánh xạ SELinux mới cho tài khoản người dùng\n"
- 
- #, c-format
- msgid ""
-@@ -2404,29 +2334,28 @@
- msgstr ""
- "%s: mở khoá mật khẩu của người dùng thì gây ra một tài khoản không có mật "
- "khẩu.\n"
--"Bạn nên đặt một mật khẩu dùng « usermod -p » để mở khoá mật khẩu của người "
-+"Bạn nên đặt một mật khẩu dùng “usermod -p” để mở khoá mật khẩu của người "
- "dùng này.\n"
- 
- #, c-format
- msgid "%s: user '%s' already exists in %s\n"
--msgstr "%s: người dùng « %s » đã có trong %s\n"
-+msgstr "%s: người dùng “%s” đã có trong %s\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot open %s\n"
-+#, c-format
- msgid "%s: no options\n"
--msgstr "%s: không thể mở %s\n"
-+msgstr "%s: không tùy chọn\n"
- 
- #, c-format
- msgid "%s: the -L, -p, and -U flags are exclusive\n"
--msgstr "%s: các cờ « -L », « -p » và « -U » loại từ lẫn nhau\n"
-+msgstr "%s: các cờ “-L”, “-p” và “-U” loại từ lẫn nhau\n"
- 
- #, c-format
- msgid "%s: shadow passwords required for -e and -f\n"
--msgstr "%s: mật khẩu bóng cần thiết cho hai tùy chọn « -e » và « -f »\n"
-+msgstr "%s: mật khẩu shadow cần cho hai tùy chọn “-e” và “-f”\n"
- 
- #, c-format
- msgid "%s: UID '%lu' already exists\n"
--msgstr "%s: UID « %lu » đã có\n"
-+msgstr "%s: UID “%lu” đã có\n"
- 
- #, c-format
- msgid "%s: directory %s exists\n"
-@@ -2437,15 +2366,16 @@
- "%s: The previous home directory (%s) was not a directory. It is not removed "
- "and no home directories are created.\n"
- msgstr ""
-+"%s: Thư mục riêng trước đó (%s) không là một thư mục. Nó chưa được gỡ bỏ và "
-+"chưa tạo thư mục riêng (home).\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: cannot create directory %s\n"
-+#, c-format
- msgid "%s: Failed to change ownership of the home directory"
--msgstr "%s: không thể tạo thư mục %s\n"
-+msgstr "%s: Gặp lỗi khi thay đổi chủ sở hữu của thư mục home (riêng)"
- 
- #, c-format
- msgid "%s: warning: failed to completely remove old home directory %s"
--msgstr "%s: cảnh báo : lỗi gỡ bỏ hoàn toàn thư mục chính cũ %s"
-+msgstr "%s: cảnh báo: gặp lỗi khi gỡ bỏ hoàn toàn thư mục riêng cũ %s"
- 
- #, c-format
- msgid "%s: cannot rename directory %s to %s\n"
-@@ -2454,24 +2384,24 @@
- #, c-format
- msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
- msgstr ""
--"%s: không sao chép được mục nhập lastlog của người dùng %lu sang người dùng "
-+"%s: gặp lỗi khi sao chép mục tin lastlog của người dùng %lu sang người dùng "
- "%lu: %s\n"
- 
- #, c-format
- msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
- msgstr ""
--"%s: không sao chép được mục nhập faillog của người dùng %lu sang người dùng "
-+"%s: không sao chép được mục tin faillog của người dùng %lu sang người dùng "
- "%lu: %s\n"
- 
- #, c-format
- msgid "%s: warning: %s not owned by %s\n"
--msgstr "%s: cảnh báo : %s không phải được %s sở hữu\n"
-+msgstr "%s: cảnh báo: %s không do %s sở hữu\n"
- 
- msgid "failed to change mailbox owner"
--msgstr "lỗi thay đổi chủ hộp thư"
-+msgstr "gặp lỗi khi thay đổi chủ hộp thư"
- 
- msgid "failed to rename mailbox"
--msgstr "lỗi thay đổi tên của hộp thư"
-+msgstr "gặp lỗi khi thay đổi tên của hộp thư"
- 
- #, c-format
- msgid ""
-@@ -2481,7 +2411,7 @@
- msgstr ""
- "Bạn đã sửa đổi %s.\n"
- "Để thống nhất thì bạn cũng có thể cần sửa đổi %s.\n"
--"Hãy sử dụng câu lệnh « %s » để làm như thế.\n"
-+"Hãy sử dụng câu lệnh “%s” để làm như thế.\n"
- 
- msgid "  -g, --group                   edit group database\n"
- msgstr "  -g, --group                   sửa đổi cơ sở dữ liệu nhóm\n"
-@@ -2493,28 +2423,22 @@
- msgstr ""
- "  -s, --shadow                  sửa đổi cơ sở dữ liệu shadow hay gshadow\n"
- 
--#, fuzzy
--#| msgid "  -u, --uid UID                 user ID of the new account\n"
- msgid "  -u, --user                    which user's tcb shadow file to edit\n"
--msgstr "  -u, --uid UID                 mã số người dùng của tài khoản mới\n"
-+msgstr "  -u, --user                    sửa tập tin shadow tcb của người này\n"
- 
- #, c-format
- msgid "%s: failed to remove %s\n"
--msgstr "%s: không gỡ bỏ được %s\n"
-+msgstr "%s: gặp lỗi khi gỡ bỏ %s\n"
- 
- #, c-format
- msgid "%s: %s is unchanged\n"
- msgstr "%s: %s chưa thay đổi\n"
- 
--#, fuzzy
--#| msgid "failed to rename mailbox"
- msgid "failed to create scratch directory"
--msgstr "lỗi thay đổi tên của hộp thư"
-+msgstr "gặp lỗi khi tạo thư mục hỗn tạp"
- 
--#, fuzzy
--#| msgid "%s: failed to drop privileges (%s)\n"
- msgid "failed to drop privileges"
--msgstr "%s: lỗi bỏ quyền truy cập (%s)\n"
-+msgstr "gặp lỗi khi xóa đặc quyền"
- 
- msgid "Couldn't get file context"
- msgstr "Không thể lấy ngữ cảnh tập tin"
-@@ -2522,10 +2446,8 @@
- msgid "setfscreatecon () failed"
- msgstr "setfscreatecon () bị lỗi"
- 
--#, fuzzy
--#| msgid "%s: failed to drop privileges (%s)\n"
- msgid "failed to gain privileges"
--msgstr "%s: lỗi bỏ quyền truy cập (%s)\n"
-+msgstr "gặp lỗi khi cấp đặc quyền"
- 
- msgid "Couldn't lock file"
- msgstr "Không thể khoá tập tin"
-@@ -2533,39 +2455,28 @@
- msgid "Couldn't make backup"
- msgstr "Không thể sao lưu"
- 
--#, fuzzy
--#| msgid "failed to rename mailbox"
- msgid "failed to open scratch file"
--msgstr "lỗi thay đổi tên của hộp thư"
-+msgstr "gặp lỗi khi mở tập tin hỗn tạp"
- 
--#, fuzzy
--#| msgid "%s: failed to unlock %s\n"
- msgid "failed to unlink scratch file"
--msgstr "%s: lỗi mở khoá %s\n"
-+msgstr "gặp lỗi khi bỏ liên kết tập tin hỗn tạp"
- 
--#, fuzzy
--#| msgid "failed to rename mailbox"
- msgid "failed to stat edited file"
--msgstr "lỗi thay đổi tên của hộp thư"
-+msgstr "gặp lỗi khi lấy thống kê tập tin đã sửa"
- 
--#, fuzzy
--#| msgid "failed to change mailbox owner"
- msgid "failed to allocate memory"
--msgstr "lỗi thay đổi chủ hộp thư"
-+msgstr "gặp lỗi khi phân bổ bộ nhớ"
- 
--#, fuzzy
--#| msgid "failed to rename mailbox"
- msgid "failed to create backup file"
--msgstr "lỗi thay đổi tên của hộp thư"
-+msgstr "không thể tạo tập tin sao lưu dự phòng"
- 
- #, c-format
- msgid "%s: can't restore %s: %s (your changes are in %s)\n"
- msgstr "%s: không thể phục hồi %s: %s (các thay đổi của bạn nằm trong %s)\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: invalid base directory '%s'\n"
-+#, c-format
- msgid "%s: failed to find tcb directory for %s\n"
--msgstr "%s: thư mục cơ ban không hợp lệ « %s »\n"
-+msgstr "%s: gặp lỗi khi tìm thư mục tcb cho %s\n"
- 
- #~ msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
- #~ msgstr "  -c, --crypt-method            phương pháp mật mã (một của %s)\n"
-@@ -2575,7 +2486,7 @@
- #~ "\n"
- #~ "Options:\n"
- #~ msgstr ""
--#~ "Sử dụng: vipw [tuỳ_chọn ...]\n"
-+#~ "Cách dùng: vipw [tuỳ_chọn ...]\n"
- #~ "\n"
- #~ "Tuỳ chọn:\n"
- 
-@@ -2603,7 +2514,7 @@
- #~ "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
- #~ "\n"
- #~ msgstr ""
--#~ "Sử dụng: chage [tuỳ_chọn ...] [ĐĂNG_NHẬP]\n"
-+#~ "Cách dùng: chage [tuỳ_chọn ...] [ĐĂNG_NHẬP]\n"
- #~ "\n"
- #~ "Tuỳ chọn:\n"
- #~ "  -d, --lastday NGÀY_CUỐI        đặt ngày thay đổi mật khẩu cuối cùng "
-@@ -2631,12 +2542,12 @@
- #~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
- #~ "\t[-h home_ph] [-o other] [user]\n"
- #~ msgstr ""
--#~ "Sử dụng: %s [-f họ_tên] [-r số_phòng] [-w điện_thoại_chỗ_làm]\n"
-+#~ "Cách dùng: %s [-f họ_tên] [-r số_phòng] [-w điện_thoại_chỗ_làm]\n"
- #~ "\t[-h điện_thoại_ở_nhà] [-o khác] [người_dùng]\n"
- 
- #~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
- #~ msgstr ""
--#~ "Sử dụng: %s [-f họ_tên] [-r số_phòng] [-w điện_thoại_chỗ_làm]\n"
-+#~ "Cách dùng: %s [-f họ_tên] [-r số_phòng] [-w điện_thoại_chỗ_làm]\n"
- #~ "\t[-h điện_thoại_ở_nhà]\n"
- 
- #~ msgid ""
-@@ -2650,7 +2561,7 @@
- #~ "                                the MD5 algorithm\n"
- #~ "%s\n"
- #~ msgstr ""
--#~ "Sử dụng: %s [tùy_chọn]\n"
-+#~ "Cách dùng: %s [tùy_chọn]\n"
- #~ "\n"
- #~ "Tùy chọn:\n"
- #~ "  -c, --crypt-method            phương pháp mã hoá (một của %s)\n"
-@@ -2667,21 +2578,21 @@
- #~ "  -s, --shell SHELL             new login shell for the user account\n"
- #~ "\n"
- #~ msgstr ""
--#~ "Sử dụng: chsh [tùy_chọn...] [ĐĂNG_NHẬP]\n"
-+#~ "Cách dùng: chsh [tùy_chọn...] [ĐĂNG_NHẬP]\n"
- #~ "\n"
- #~ "Tùy chọn:\n"
- #~ "  -h, --help                    hiện _trợ giúp_ này rồi thoát\n"
--#~ "  -s, --shell TRÌNH_BAO        trình bao đăng nhập mới\n"
-+#~ "  -s, --shell TRÌNH_BAO        hệ vỏ đăng nhập mới\n"
- #~ "\t\t\t\t\t\tcho tài khoản người dùng\n"
- #~ "\n"
- 
- #~ msgid "Usage: expiry {-f|-c}\n"
- #~ msgstr ""
--#~ "Sử dụng: expiry {-f|-c}\n"
-+#~ "Cách dùng: expiry {-f|-c}\n"
- #~ "[expiry: mãn hạn]\n"
- 
- #~ msgid "faillog: Failed to get the entry for UID %lu\n"
--#~ msgstr "faillog: không lấy được mục nhập cho UID %lu\n"
-+#~ msgstr "faillog: không lấy được mục tin cho UID %lu\n"
- 
- #~ msgid "faillog: Cannot open %s: %s\n"
- #~ msgstr "faillog: không thể mở %s: %s\n"
-@@ -2691,23 +2602,23 @@
- 
- #~ msgid "Usage: groupdel group\n"
- #~ msgstr ""
--#~ "Sử dụng: groupdel nhóm\n"
-+#~ "Cách dùng: groupdel nhóm\n"
- #~ "[groupdel: xoá nhóm]\n"
- 
- #~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
--#~ msgstr "Sử dụng: %s [-r] [-s] [nhóm [gshadow]]\n"
-+#~ msgstr "Cách dùng: %s [-r] [-s] [nhóm [gshadow]]\n"
- 
- #~ msgid "Usage: %s [-r] [-s] [group]\n"
--#~ msgstr "Sử dụng: %s [-r] [-s] [nhóm]\n"
-+#~ msgstr "Cách dùng: %s [-r] [-s] [nhóm]\n"
- 
- #~ msgid "%s: -s and -r are incompatibile\n"
--#~ msgstr "%s: hai tùy chọn « -s » và « -r » không tương thích với nhau\n"
-+#~ msgstr "%s: hai tùy chọn “-s” và “-r” không tương thích với nhau\n"
- 
- #~ msgid "Usage: grpconv\n"
--#~ msgstr "Sử dụng: grpconv\n"
-+#~ msgstr "Cách dùng: grpconv\n"
- 
- #~ msgid "Usage: grpunconv\n"
--#~ msgstr "Sử dụng: grpunconv\n"
-+#~ msgstr "Cách dùng: grpunconv\n"
- 
- #~ msgid ""
- #~ "Usage: lastlog [options]\n"
-@@ -2722,7 +2633,7 @@
- #~ "LOGIN\n"
- #~ "\n"
- #~ msgstr ""
--#~ "Sử dụng: lastlog [tùy_chọn...]\n"
-+#~ "Cách dùng: lastlog [tùy_chọn...]\n"
- #~ "\n"
- #~ "[lastlog: bản ghi cuối cùng]\n"
- #~ "\n"
-@@ -2764,7 +2675,7 @@
- #~ "                                change to MAX_DAYS\n"
- #~ "\n"
- #~ msgstr ""
--#~ "Sử dụng: passwd [tuỳ_chọn ...] [ĐĂNG_NHẬP]\n"
-+#~ "Cách dùng: passwd [tuỳ_chọn ...] [ĐĂNG_NHẬP]\n"
- #~ "\n"
- #~ "Tuỳ chọn:\n"
- #~ "  -a, --all\t\t\tthông báo trạng thái mật khẩu về mọi tài khoản\n"
-@@ -2789,218 +2700,3 @@
- #~ "  -x, --maxdays NGÀY\tđặt thành số này số tối đa các ngày trước khi thay "
- #~ "đổi được mật khẩu\n"
- #~ "\n"
--
--#, fuzzy
--#~| msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
--#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
--#~ msgstr ""
--#~ "Sử dụng: %s [-q] [-r] [-s] [passwd [shadow]]\n"
--#~ "[passwd: mật khẩu\n"
--#~ "shadow: bóng]\n"
--
--#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
--#~ msgstr ""
--#~ "Sử dụng: %s [-q] [-r] [-s] [passwd [shadow]]\n"
--#~ "[passwd: mật khẩu\n"
--#~ "shadow: bóng]\n"
--
--#~ msgid "Usage: pwconv\n"
--#~ msgstr "Sử dụng: pwconv\n"
--
--#~ msgid "Usage: pwunconv\n"
--#~ msgstr "Sử dụng: pwunconv\n"
--
--#~ msgid "Unknown id: %s\n"
--#~ msgstr "Không rõ mã số : %s\n"
--
--#~ msgid "No shell\n"
--#~ msgstr "Không có trình bao\n"
--
--#~ msgid ""
--#~ "Usage: userdel [options] LOGIN\n"
--#~ "\n"
--#~ "Options:\n"
--#~ "  -f, --force                   force removal of files,\n"
--#~ "                                even if not owned by user\n"
--#~ "  -h, --help                    display this help message and exit\n"
--#~ "  -r, --remove                  remove home directory and mail spool\n"
--#~ "\n"
--#~ msgstr ""
--#~ "Sử dụng: userdel [tùy_chọn...] ĐĂNG_NHẬP\n"
--#~ "\n"
--#~ "Tùy chọn:\n"
--#~ "  -f, --force                   ép buộc gỡ bỏ tập tin, thậm chí nếu "
--#~ "không\n"
--#~ "                                được sở hữu bởi người dùng\n"
--#~ "  -h, --help                    hiển thị trợ giúp này, sau đó thoát\n"
--#~ "  -r, --remove                  gỡ bỏ thư mục chính và ống chỉ thư tín\n"
--#~ "\n"
--
--#~ msgid "%s: user %s is currently logged in\n"
--#~ msgstr "%s: người dùng %s hiện thời được đăng nhập\n"
--
--#~ msgid ""
--#~ "Usage: usermod [options] LOGIN\n"
--#~ "\n"
--#~ "Options:\n"
--#~ "  -c, --comment COMMENT         new value of the GECOS field\n"
--#~ "  -d, --home HOME_DIR           new home directory for the user account\n"
--#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
--#~ "EXPIRE_DATE\n"
--#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
--#~ "                                to INACTIVE\n"
--#~ "  -g, --gid GROUP               force use GROUP as new primary group\n"
--#~ "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
--#~ "  -a, --append                  append the user to the supplemental "
--#~ "GROUPS\n"
--#~ "                                mentioned by the -G option without "
--#~ "removing\n"
--#~ "                                him/her from other groups\n"
--#~ "  -h, --help                    display this help message and exit\n"
--#~ "  -l, --login NEW_LOGIN         new value of the login name\n"
--#~ "  -L, --lock                    lock the user account\n"
--#~ "  -m, --move-home               move contents of the home directory to "
--#~ "the\n"
--#~ "                                new location (use only with -d)\n"
--#~ "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
--#~ "  -p, --password PASSWORD       use encrypted password for the new "
--#~ "password\n"
--#~ "  -s, --shell SHELL             new login shell for the user account\n"
--#~ "  -u, --uid UID                 new UID for the user account\n"
--#~ "  -U, --unlock                  unlock the user account\n"
--#~ "%s\n"
--#~ msgstr ""
--#~ "Sử dụng: usermod [tuỳ_chọn...] ĐĂNG_NHẬP\n"
--#~ "\n"
--#~ "Tuỳ chọn:\n"
--#~ "  -c, --comment GHI_LƯU\t\tgiá trị mới của trường GECOS\n"
--#~ "  -d, --home THƯ_MỤC           \tthư mục chính mới cho tài khoản người "
--#~ "dùng\n"
--#~ "  -e, --expiredate NGÀY  \t\tđặt thành ngày này ngày hết hạn dùng tài "
--#~ "khoản\n"
--#~ "  -f, --inactive INACTIVE       \tđặt thành INACTIVE mật khẩu không còn "
--#~ "hoạt động lại\n"
--#~ "\t\t\t\t\t\tsau khi hết hạn dùng\n"
--#~ "  -g, --gid NHÓM               \t\tép buộc sử dụng nhóm này làm nhóm "
--#~ "chính mới\n"
--#~ "  -G, --groups NHÓM           \tdanh sách mới chứa các nhóm phụ\n"
--#~ "  -a, --append                  \t\tphụ thêm người dùng vào các nhóm phụ\n"
--#~ "\t\t\t\t\t\tđưa ra bởi tuỳ chọn « -G » mà không gỡ bỏ ta khỏi nhóm khác\n"
--#~ "  -h, --help                    \t\thiển thị trợ giúp này, sau đó thoát\n"
--#~ "  -l, --login ĐĂNG_NHẬP         \tgiá trị mới của tên đăng nhập\n"
--#~ "  -L, --lock                    \t\tkhoá tài khoản người dùng\n"
--#~ "  -m, --move-home              \tdi chuyển nội dung của thư mục chính "
--#~ "sang vị trí mới\n"
--#~ "\t\t\t\t\t\t(chỉ dùng cùng với « -d »)\n"
--#~ "  -o, --non-unique              \t\tcho phép sử dụng UID trùng (không duy "
--#~ "nhất)\n"
--#~ "  -p, --password MẬT_KHẨU   \tmật mã hoá mật khẩu mới\n"
--#~ "  -s, --shell TRÌNH_BAO             trình bao đăng nhập mới cho tài khoản "
--#~ "người dùng\n"
--#~ "  -u, --uid UID                 \t\tUID mới cho tài khoản người dùng\n"
--#~ "  -U, --unlock                  \t\tmở khoá tài khoản người dùng\n"
--#~ "%s\n"
--
--#~ msgid "%s: no flags given\n"
--#~ msgstr "%s: chưa đưa ra cờ\n"
--
--#, fuzzy
--#~| msgid ""
--#~| "Usage: vipw [options]\n"
--#~| "\n"
--#~| "Options:\n"
--#~| "  -g, --group                   edit group database\n"
--#~| "  -h, --help                    display this help message and exit\n"
--#~| "  -p, --passwd                  edit passwd database\n"
--#~| "  -q, --quiet                   quiet mode\n"
--#~| "  -s, --shadow                  edit shadow or gshadow database\n"
--#~| "\n"
--#~ msgid ""
--#~ "Usage: vipw [options]\n"
--#~ "\n"
--#~ "Options:\n"
--#~ "  -g, --group                   edit group database\n"
--#~ "  -h, --help                    display this help message and exit\n"
--#~ "  -p, --passwd                  edit passwd database\n"
--#~ "  -q, --quiet                   quiet mode\n"
--#~ "  -s, --shadow                  edit shadow or gshadow database\n"
--#~ "  -u, --user                    which user's tcb shadow file to edit\n"
--#~ "\n"
--#~ msgstr ""
--#~ "Sử dụng: vipw [tùy_chọn...]\n"
--#~ "\n"
--#~ "Tùy chọn:\n"
--#~ "  -g, --group                   sửa đổi cơ sở dữ liệu nhóm\n"
--#~ "  -h, --help                    hiển thị trợ giúp này, sau đó thoát\n"
--#~ "  -p, --passwd                  sửa đổi cơ sở dữ liệu passwd\n"
--#~ "  -q, --quiet                   chế độ im (không xuất chi tiết)\n"
--#~ "  -s, --shadow                  sửa đổi cơ sở dữ liệu shadow hay gshadow\n"
--#~ "\n"
--
--#~ msgid ""
--#~ "Usage: %s [option] GROUP\n"
--#~ "\n"
--#~ "Options:\n"
--#~ "  -a, --add USER                add USER to GROUP\n"
--#~ "  -d, --delete USER             remove USER from GROUP\n"
--#~ "  -r, --remove-password         remove the GROUP's password\n"
--#~ "  -R, --restrict                restrict access to GROUP to its members\n"
--#~ "  -M, --members USER,...        set the list of members of GROUP\n"
--#~ "%s\n"
--#~ "\n"
--#~ msgstr ""
--#~ "Sử dụng: %s [tuỳ_chọn] NHÓM\n"
--#~ "\n"
--#~ "Tuỳ chọn:\n"
--#~ "  -a, --add NGƯỜI_DÙNG\tthêm người dùng này vào NHÓM\n"
--#~ "  -d, --delete NGƯỜI_DÙNG   \tgỡ bỏ người dùng này khỏi NHÓM\n"
--#~ "  -r, --remove-password         \tgỡ bỏ mật khẩu của NHÓM\n"
--#~ "  -R, --restrict \t\t\t\thạn chế truy cập đến NHÓM thành các thành viên "
--#~ "của nó\n"
--#~ "  -M, --members NGƯỜI_DÙNG,...\t\tđặt danh sách các thành viên của NHÓM\n"
--#~ "%s\n"
--#~ "\n"
--
--#~ msgid ""
--#~ "Usage: groupmems [options] [action]\n"
--#~ "\n"
--#~ "Options:\n"
--#~ "  -g, --group groupname         change groupname instead of the user's "
--#~ "group\n"
--#~ "                                (root only)\n"
--#~ "\n"
--#~ "Actions:\n"
--#~ "  -a, --add username            add username to the members of the group\n"
--#~ "  -d, --delete username         remove username from the members of the "
--#~ "group\n"
--#~ "  -p, --purge                   purge all members from the group\n"
--#~ "  -l, --list                    list the members of the group\n"
--#~ "\n"
--#~ msgstr ""
--#~ "Sử dụng: groupmems [tuỳ_chọn ...] [hành_vi]\n"
--#~ "\n"
--#~ "Tuỳ chọn:\n"
--#~ "  -g, --group TÊN_NHÓM    thay đổi tên của nhóm này thay cho nhóm của "
--#~ "người dùng (chỉ người chủ)\n"
--#~ "\n"
--#~ "Hành vi:\n"
--#~ "  -a, --add TÊN\t\t\tthêm tên người dùng này vào nhóm\n"
--#~ "  -d, --delete TÊN         \tgỡ bỏ tên này khỏi nhóm\n"
--#~ "  -p, --purge                   \ttẩy mọi người ra nhóm\n"
--#~ "  -l, --list                    \t\tliệt kê những người trong nhóm\n"
--#~ "\n"
--
--#~ msgid ""
--#~ "Usage: useradd [options] LOGIN\n"
--#~ "\n"
--#~ "Options:\n"
--#~ msgstr ""
--#~ "Sử dụng: useradd [tuỳ_chọn ...] ĐĂNG_NHẬP\n"
--#~ "\n"
--#~ "Tuỳ chọn:\n"
--
--#~ msgid "%s: can't create %s\n"
--#~ msgstr "%s: không thể tạo %s\n"
--
--#~ msgid "%s: can't chown %s\n"
--#~ msgstr "%s: không thể chown (thay đổi quyền sở hữu) %s\n"
diff --git a/debian/patches/1011_french_translation b/debian/patches/1011_french_translation
deleted file mode 100644
index 2796841..0000000
--- a/debian/patches/1011_french_translation
+++ /dev/null
@@ -1,1430 +0,0 @@
-Index: git/man/po/fr.po
-===================================================================
---- git.orig/man/po/fr.po
-+++ git/man/po/fr.po
-@@ -1,7 +1,7 @@
- # translation of shadow-man.po to French
- # French translation of the shadow's man pages
- # Traduction des pages de manuel livrées avec shadow
--# Copyright (C) 2011, 2012  Debian French l10n team <debian-l10n-french at lists.debian.org>
-+# Copyright (C) 2011-2013  Debian French l10n team <debian-l10n-french at lists.debian.org>
- #
- #     Certaines pages étaient déjà traduites:
- #       chpasswd: Amand Tihon <amand at alrj.org>
-@@ -16,19 +16,19 @@
- #       shadow(5): Thierry Vignaud <tvignaud at mandrakesoft.com>, 1999.
- #       useradd: Frédéric Delanoy, 2000.
- # Christian Perrier <bubulle at debian.org>, 2009, 2012.
--# Thomas Blein <tblein at tblein.eu>, 2011, 2012.
-+# Thomas Blein <tblein at tblein.eu>, 2011, 2012, 2013.
- msgid ""
- msgstr ""
- "Project-Id-Version: shadow-man-pages 4.0.18\n"
- "POT-Creation-Date: 2013-08-23 01:54+0200\n"
--"PO-Revision-Date: 2013-08-23 01:37+0200\n"
-+"PO-Revision-Date: 2013-07-10 19:08+0200\n"
- "Last-Translator: Thomas Blein <tblein at tblein.eu>\n"
- "Language-Team: French <debian-l10n-french at lists.debian.org>\n"
- "Language: fr\n"
- "MIME-Version: 1.0\n"
- "Content-Type: text/plain; charset=UTF-8\n"
- "Content-Transfer-Encoding: 8bit\n"
--"X-Generator: Lokalize 1.2\n"
-+"X-Generator: Lokalize 1.4\n"
- "X-Poedit-Language: French\n"
- "X-Poedit-Country: FRANCE\n"
- "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-@@ -36,16 +36,16 @@
- #: vipw.8.xml:41(firstname) suauth.5.xml:39(firstname)
- #: pwconv.8.xml:45(firstname) login.access.5.xml:40(firstname)
- msgid "Marek"
--msgstr ""
-+msgstr "Marek"
- 
- #: vipw.8.xml:42(surname) suauth.5.xml:40(surname) pwconv.8.xml:46(surname)
- #: login.access.5.xml:41(surname)
- msgid "Michałkiewicz"
--msgstr ""
-+msgstr "Michałkiewicz"
- 
- #: vipw.8.xml:43(contrib) limits.5.xml:43(contrib)
- msgid "Creation, 1997"
--msgstr ""
-+msgstr "Création, 1997"
- 
- #: vipw.8.xml:46(firstname) usermod.8.xml:50(firstname)
- #: userdel.8.xml:50(firstname) useradd.8.xml:61(firstname)
-@@ -66,7 +66,7 @@
- #: chpasswd.8.xml:48(firstname) chgpasswd.8.xml:44(firstname)
- #: chfn.1.xml:47(firstname) chage.1.xml:45(firstname)
- msgid "Thomas"
--msgstr ""
-+msgstr "Thomas"
- 
- #: vipw.8.xml:47(surname) usermod.8.xml:51(surname) userdel.8.xml:51(surname)
- #: useradd.8.xml:62(surname) suauth.5.xml:45(surname) su.1.xml:62(surname)
-@@ -84,7 +84,7 @@
- #: expiry.1.xml:49(surname) chsh.1.xml:48(surname) chpasswd.8.xml:49(surname)
- #: chgpasswd.8.xml:45(surname) chfn.1.xml:48(surname) chage.1.xml:46(surname)
- msgid "Kłoczko"
--msgstr ""
-+msgstr "Kłoczko"
- 
- #: vipw.8.xml:48(email) usermod.8.xml:52(email) userdel.8.xml:52(email)
- #: useradd.8.xml:63(email) suauth.5.xml:46(email) su.1.xml:63(email)
-@@ -100,7 +100,7 @@
- #: chpasswd.8.xml:50(email) chgpasswd.8.xml:46(email) chfn.1.xml:49(email)
- #: chage.1.xml:47(email)
- msgid "kloczek at pld.org.pl"
--msgstr ""
-+msgstr "kloczek at pld.org.pl"
- 
- #: vipw.8.xml:49(contrib) usermod.8.xml:53(contrib) userdel.8.xml:53(contrib)
- #: useradd.8.xml:64(contrib) suauth.5.xml:47(contrib) su.1.xml:64(contrib)
-@@ -118,7 +118,7 @@
- #: expiry.1.xml:51(contrib) chsh.1.xml:50(contrib) chpasswd.8.xml:51(contrib)
- #: chfn.1.xml:50(contrib) chage.1.xml:48(contrib)
- msgid "shadow-utils maintainer, 2000 - 2007"
--msgstr ""
-+msgstr "Mainteneur de shadow-utils, 2000 - 2007"
- 
- #: vipw.8.xml:52(firstname) usermod.8.xml:56(firstname)
- #: userdel.8.xml:56(firstname) useradd.8.xml:67(firstname)
-@@ -140,7 +140,7 @@
- #: chpasswd.8.xml:54(firstname) chgpasswd.8.xml:50(firstname)
- #: chfn.1.xml:53(firstname) chage.1.xml:51(firstname)
- msgid "Nicolas"
--msgstr ""
-+msgstr "Nicolas"
- 
- #: vipw.8.xml:53(surname) usermod.8.xml:57(surname) userdel.8.xml:57(surname)
- #: useradd.8.xml:68(surname) suauth.5.xml:51(surname) su.1.xml:68(surname)
-@@ -159,7 +159,7 @@
- #: chpasswd.8.xml:55(surname) chgpasswd.8.xml:51(surname)
- #: chfn.1.xml:54(surname) chage.1.xml:52(surname)
- msgid "François"
--msgstr ""
-+msgstr "François"
- 
- #: vipw.8.xml:54(email) usermod.8.xml:58(email) userdel.8.xml:58(email)
- #: useradd.8.xml:69(email) suauth.5.xml:52(email) su.1.xml:69(email)
-@@ -176,7 +176,7 @@
- #: chpasswd.8.xml:56(email) chgpasswd.8.xml:52(email) chfn.1.xml:55(email)
- #: chage.1.xml:53(email)
- msgid "nicolas.francois at centraliens.net"
--msgstr ""
-+msgstr "nicolas.francois at centraliens.net"
- 
- #: vipw.8.xml:55(contrib) usermod.8.xml:59(contrib) userdel.8.xml:59(contrib)
- #: useradd.8.xml:70(contrib) suauth.5.xml:53(contrib) su.1.xml:70(contrib)
-@@ -195,7 +195,7 @@
- #: chpasswd.8.xml:57(contrib) chgpasswd.8.xml:53(contrib)
- #: chfn.1.xml:56(contrib) chage.1.xml:54(contrib)
- msgid "shadow-utils maintainer, 2007 - now"
--msgstr ""
-+msgstr "Mainteneur de shadow-utils, 2007 - maintenant"
- 
- #: vipw.8.xml:59(refentrytitle) vipw.8.xml:66(refname) vipw.8.xml:75(command)
- #: login.defs.5.xml:507(term)
-@@ -388,11 +388,15 @@
- #: groupdel.8.xml:101(term) groupadd.8.xml:204(term) faillog.8.xml:180(term)
- #: chsh.1.xml:107(term) chpasswd.8.xml:188(term) chgpasswd.8.xml:146(term)
- #: chfn.1.xml:153(term) chage.1.xml:197(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-R</option>, <option>--root</option><replaceable>CHROOT_DIR</"
-+#| "replaceable>"
- msgid ""
- "<option>-R</option>, <option>--root</option> <replaceable>CHROOT_DIR</"
- "replaceable>"
- msgstr ""
--"<option>-R</option>, <option>--root</option> <replaceable>RÉP_CHROOT</"
-+"<option>-R</option>, <option>--root</option> <replaceable>RÉP_CHROOT</"
- "replaceable>"
- 
- #: vipw.8.xml:142(para) usermod.8.xml:315(para) userdel.8.xml:150(para)
-@@ -650,7 +654,7 @@
- #: chsh.1.xml:42(firstname) chpasswd.8.xml:43(firstname)
- #: chfn.1.xml:42(firstname) chage.1.xml:40(firstname)
- msgid "Julianne Frances"
--msgstr ""
-+msgstr "Julianne Frances"
- 
- #: usermod.8.xml:46(surname) userdel.8.xml:46(surname)
- #: useradd.8.xml:57(surname) su.1.xml:57(surname) sg.1.xml:41(surname)
-@@ -665,7 +669,7 @@
- #: faillog.5.xml:40(surname) expiry.1.xml:44(surname) chsh.1.xml:43(surname)
- #: chpasswd.8.xml:44(surname) chfn.1.xml:43(surname) chage.1.xml:41(surname)
- msgid "Haugh"
--msgstr ""
-+msgstr "Haugh"
- 
- #: usermod.8.xml:47(contrib) userdel.8.xml:47(contrib)
- #: useradd.8.xml:58(contrib) sg.1.xml:42(contrib) newusers.8.xml:56(contrib)
-@@ -674,7 +678,7 @@
- #: groupmod.8.xml:42(contrib) groupdel.8.xml:42(contrib)
- #: groupadd.8.xml:44(contrib) chpasswd.8.xml:45(contrib)
- msgid "Creation, 1991"
--msgstr ""
-+msgstr "Création, 1991"
- 
- #: usermod.8.xml:63(refentrytitle) usermod.8.xml:70(refname)
- #: usermod.8.xml:76(command) login.defs.5.xml:498(term)
-@@ -719,12 +723,16 @@
- "qu'avec l'option <option>-G</option>."
- 
- #: usermod.8.xml:111(term) useradd.8.xml:150(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-c</option>, <option>--comment</option><replaceable>COMMENT</"
-+#| "replaceable>"
- msgid ""
- "<option>-c</option>, <option>--comment</option> <replaceable>COMMENT</"
- "replaceable>"
- msgstr ""
--"<option>-c</option>, <option>--comment</option> "
--"<replaceable>COMMENTAIRE</replaceable>"
-+"<option>-c</option>, <option>--comment</option> <replaceable>COMMENTAIRE</"
-+"replaceable>"
- 
- #: usermod.8.xml:115(para)
- msgid ""
-@@ -740,14 +748,14 @@
- #: usermod.8.xml:124(term)
- #, fuzzy
- #| msgid ""
--#| "<option>-d</option>, <option>--home-dir</option> "
--#| "<replaceable>HOME_DIR</replaceable>"
-+#| "<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
-+#| "replaceable>"
- msgid ""
- "<option>-d</option>, <option>--home</option> <replaceable>HOME_DIR</"
- "replaceable>"
- msgstr ""
--"<option>-d</option>, <option>--home-dir</option> "
--"<replaceable>RÉP_PERSO</replaceable>"
-+"<option>-d</option>, <option>--home</option> <replaceable>RÉP_PERSO</"
-+"replaceable>"
- 
- #: usermod.8.xml:128(para)
- msgid "The user's new login directory."
-@@ -764,11 +772,15 @@
- "créé si nécessaire."
- 
- #: usermod.8.xml:140(term) useradd.8.xml:188(term) useradd.8.xml:548(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-e</option>, <option>--expiredate</"
-+#| "option><replaceable>EXPIRE_DATE</replaceable>"
- msgid ""
- "<option>-e</option>, <option>--expiredate</option> "
- "<replaceable>EXPIRE_DATE</replaceable>"
- msgstr ""
--"<option>-e</option>, <option>--expiredate</option> "
-+"<option>-e</option>, <option>--expiredate</option> "
- "<replaceable>DATE_FIN_VALIDITÉ</replaceable>"
- 
- #: usermod.8.xml:144(para) useradd.8.xml:192(para)
-@@ -796,11 +808,15 @@
- "entrée <filename>/etc/shadow</filename> sera créée si il n'y en avait pas."
- 
- #: usermod.8.xml:160(term) useradd.8.xml:205(term) useradd.8.xml:560(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-f</option>, <option>--inactive</option><replaceable>INACTIVE</"
-+#| "replaceable>"
- msgid ""
- "<option>-f</option>, <option>--inactive</option> <replaceable>INACTIVE</"
- "replaceable>"
- msgstr ""
--"<option>-f</option>, <option>--inactive</option> "
-+"<option>-f</option>, <option>--inactive</option> "
- "<replaceable>DURÉE_INACTIVITÉ</replaceable>"
- 
- #: usermod.8.xml:164(para)
-@@ -820,12 +836,15 @@
- "de validité, et une valeur de -1 désactive cette fonctionnalité."
- 
- #: usermod.8.xml:181(term) useradd.8.xml:224(term) useradd.8.xml:575(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-g</option>, <option>--gid</option><replaceable>GROUP</"
-+#| "replaceable>"
- msgid ""
- "<option>-g</option>, <option>--gid</option> <replaceable>GROUP</"
- "replaceable>"
- msgstr ""
--"<option>-g</option>, <option>--gid</option> <replaceable>GROUPE</"
--"replaceable>"
-+"<option>-g</option>, <option>--gid</option> <replaceable>GROUPE</replaceable>"
- 
- #: usermod.8.xml:185(para)
- msgid ""
-@@ -852,12 +871,17 @@
- "l'utilisateur doit être modifié manuellement."
- 
- #: usermod.8.xml:200(term) useradd.8.xml:251(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-G</option>, <option>--groups</option><replaceable>GROUP1</"
-+#| "replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap="
-+#| "\"I\">,GROUPN</emphasis>]]]"
- msgid ""
- "<option>-G</option>, <option>--groups</option> <replaceable>GROUP1</"
- "replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
- "\">,GROUPN</emphasis>]]]"
- msgstr ""
--"<option>-G</option>, <option>--groups</option> <replaceable>GROUPE1</"
-+"<option>-G</option>, <option>--groups</option> <replaceable>GROUPE1</"
- "replaceable>[<emphasis remap=\"I\">,GROUPE2,...</emphasis>[<emphasis remap="
- "\"I\">,GROUPEN</emphasis>]]]"
- 
-@@ -886,12 +910,16 @@
- "actuelle des groupes supplémentaires."
- 
- #: usermod.8.xml:220(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-l</option>, <option>--login</option><replaceable>NEW_LOGIN</"
-+#| "replaceable>"
- msgid ""
- "<option>-l</option>, <option>--login</option> <replaceable>NEW_LOGIN</"
- "replaceable>"
- msgstr ""
--"<option>-l</option>, <option>--login</option> "
--"<replaceable>NOUVEAU_LOGIN</replaceable>"
-+"<option>-l</option>, <option>--login</option> <replaceable>NOUVEAU_LOGIN</"
-+"replaceable>"
- 
- #: usermod.8.xml:224(para)
- msgid ""
-@@ -974,12 +1002,16 @@
- 
- #: usermod.8.xml:284(term) useradd.8.xml:397(term) groupmod.8.xml:157(term)
- #: groupadd.8.xml:167(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-p</option>, <option>--password</option><replaceable>PASSWORD</"
-+#| "replaceable>"
- msgid ""
- "<option>-p</option>, <option>--password</option> <replaceable>PASSWORD</"
- "replaceable>"
- msgstr ""
--"<option>-p</option>, <option>--password</option> "
--"<replaceable>MOT_DE_PASSE</replaceable>"
-+"<option>-p</option>, <option>--password</option> <replaceable>MOT_DE_PASSE</"
-+"replaceable>"
- 
- #: usermod.8.xml:288(para) groupmod.8.xml:161(para)
- msgid ""
-@@ -1021,12 +1053,16 @@
- 
- #: usermod.8.xml:323(term) useradd.8.xml:457(term) useradd.8.xml:595(term)
- #: su.1.xml:187(term) chsh.1.xml:119(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
-+#| "replaceable>"
- msgid ""
- "<option>-s</option>, <option>--shell</option> <replaceable>SHELL</"
- "replaceable>"
- msgstr ""
--"<option>-s</option>, <option>--shell</option> "
--"<replaceable>INTERPRÉTEUR</replaceable>"
-+"<option>-s</option>, <option>--shell</option> <replaceable>INTERPRÉTEUR</"
-+"replaceable>"
- 
- #: usermod.8.xml:327(para) chsh.1.xml:123(para)
- msgid ""
-@@ -1038,12 +1074,14 @@
- "de commandes initial par défaut."
- 
- #: usermod.8.xml:334(term) useradd.8.xml:471(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
- msgid ""
- "<option>-u</option>, <option>--uid</option> <replaceable>UID</"
- "replaceable>"
- msgstr ""
--"<option>-u</option>, <option>--uid</option> <replaceable>UID</"
--"replaceable>"
-+"<option>-u</option>, <option>--uid</option> <replaceable>UID</replaceable>"
- 
- #: usermod.8.xml:338(para)
- msgid "The new numerical value of the user's ID."
-@@ -1115,13 +1153,13 @@
- #: usermod.8.xml:384(term)
- #, fuzzy
- #| msgid ""
--#| "<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
-+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
- #| "replaceable>|<replaceable>RANGE</replaceable>"
- msgid ""
- "<option>-v</option>, <option>--add-sub-uids</option> "
- "<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
- msgstr ""
--"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
-+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
- "replaceable>|<replaceable>INTERVALLE</replaceable>"
- 
- #: usermod.8.xml:388(para)
-@@ -1152,13 +1190,13 @@
- #: usermod.8.xml:402(term)
- #, fuzzy
- #| msgid ""
--#| "<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
-+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
- #| "replaceable>|<replaceable>RANGE</replaceable>"
- msgid ""
- "<option>-V</option>, <option>--del-sub-uids</option> "
- "<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
- msgstr ""
--"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
-+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
- "replaceable>|<replaceable>INTERVALLE</replaceable>"
- 
- #: usermod.8.xml:406(para)
-@@ -1176,13 +1214,13 @@
- #: usermod.8.xml:422(term)
- #, fuzzy
- #| msgid ""
--#| "<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
-+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
- #| "replaceable>|<replaceable>RANGE</replaceable>"
- msgid ""
- "<option>-w</option>, <option>--add-sub-gids</option> "
- "<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
- msgstr ""
--"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
-+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
- "replaceable>|<replaceable>INTERVALLE</replaceable>"
- 
- #: usermod.8.xml:426(para)
-@@ -1207,13 +1245,13 @@
- #: usermod.8.xml:440(term)
- #, fuzzy
- #| msgid ""
--#| "<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
-+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
- #| "replaceable>|<replaceable>RANGE</replaceable>"
- msgid ""
- "<option>-W</option>, <option>--del-sub-gids</option> "
- "<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
- msgstr ""
--"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
-+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
- "replaceable>|<replaceable>INTERVALLE</replaceable>"
- 
- #: usermod.8.xml:444(para)
-@@ -1233,11 +1271,15 @@
- msgstr ""
- 
- #: usermod.8.xml:460(term) useradd.8.xml:506(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-Z</option>, <option>--selinux-user</option><replaceable>SEUSER</"
-+#| "replaceable>"
- msgid ""
- "<option>-Z</option>, <option>--selinux-user</option> "
- "<replaceable>SEUSER</replaceable>"
- msgstr ""
--"<option>-Z</option>, <option>--selinux-user</option> "
-+"<option>-Z</option>, <option>--selinux-user</option> "
- "<replaceable>UTILISATEUR_SELINUX</replaceable>"
- 
- #: usermod.8.xml:464(para)
-@@ -2116,14 +2158,25 @@
- "Les options disponibles pour la commande <command>useradd</command> sont :"
- 
- #: useradd.8.xml:129(term) useradd.8.xml:530(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-b</option>, <option>--base-dir</option><replaceable>BASE_DIR</"
-+#| "replaceable>"
- msgid ""
- "<option>-b</option>, <option>--base-dir</option> <replaceable>BASE_DIR</"
- "replaceable>"
- msgstr ""
--"<option>-b</option>, <option>--base-dir</option> <replaceable>RÉP_BASE</"
-+"<option>-b</option>, <option>--base-dir</option> <replaceable>RÉP_BASE</"
- "replaceable>"
- 
- #: useradd.8.xml:133(para)
-+#, fuzzy
-+#| msgid ""
-+#| "The default base directory for the system if <option>-d</"
-+#| "option><replaceable>HOME_DIR</replaceable> is not specified. "
-+#| "<replaceable>BASE_DIR</replaceable> is concatenated with the account name "
-+#| "to define the home directory. If the <option>-m</option> option is not "
-+#| "used, <replaceable>BASE_DIR</replaceable> must exist."
- msgid ""
- "The default base directory for the system if <option>-d</option> "
- "<replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</"
-@@ -2131,8 +2184,8 @@
- "directory. If the <option>-m</option> option is not used, "
- "<replaceable>BASE_DIR</replaceable> must exist."
- msgstr ""
--"Répertoire de base par défaut du système si l'option <option>-d</"
--"option> <replaceable>RÉP_PERSO</replaceable> n'est pas spécifiée. "
-+"Répertoire de base par défaut du système si l'option <option>-d</option> "
-+"<replaceable>RÉP_PERSO</replaceable> n'est pas spécifiée. "
- "<replaceable>RÉP_BASE</replaceable> est concaténé avec le nom du compte pour "
- "définir le répertoire personnel. Quand l'option <option>-m</option> n'est "
- "pas utilisée, <replaceable>RÉP_BASE</replaceable> doit exister."
-@@ -2158,12 +2211,16 @@
- "l'utilisateur."
- 
- #: useradd.8.xml:162(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
-+#| "replaceable>"
- msgid ""
- "<option>-d</option>, <option>--home-dir</option> <replaceable>HOME_DIR</"
- "replaceable>"
- msgstr ""
--"<option>-d</option>, <option>--home-dir</option> "
--"<replaceable>RÉP_PERSO</replaceable>"
-+"<option>-d</option>, <option>--home</option> <replaceable>RÉP_PERSO</"
-+"replaceable>"
- 
- #: useradd.8.xml:166(para)
- msgid ""
-@@ -2271,12 +2328,16 @@
- "l'utilisateur est de n'appartenir qu'au groupe initial."
- 
- #: useradd.8.xml:272(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-k</option>, <option>--skel</option><replaceable>SKEL_DIR</"
-+#| "replaceable>"
- msgid ""
- "<option>-k</option>, <option>--skel</option> <replaceable>SKEL_DIR</"
- "replaceable>"
- msgstr ""
--"<option>-k</option>, <option>--skel</option> "
--"<replaceable>RÉP_SQUELETTE</replaceable>"
-+"<option>-k</option>, <option>--skel</option> <replaceable>RÉP_SQUELETTE</"
-+"replaceable>"
- 
- #: useradd.8.xml:276(para)
- msgid ""
-@@ -2311,14 +2372,30 @@
- msgstr "Si possible, les ACL et les attributs étendus seront copiés."
- 
- #: useradd.8.xml:297(term) groupadd.8.xml:137(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-K</option>, <option>--key</option><replaceable>KEY</"
-+#| "replaceable>=<replaceable>VALUE</replaceable>"
- msgid ""
- "<option>-K</option>, <option>--key</option> <replaceable>KEY</"
- "replaceable>=<replaceable>VALUE</replaceable>"
- msgstr ""
--"<option>-K</option>, <option>--key</option> <replaceable>CLÉ</"
-+"<option>-K</option>, <option>--key</option> <replaceable>CLÉ</"
- "replaceable>=<replaceable>VALEUR</replaceable>"
- 
- #: useradd.8.xml:301(para)
-+#, fuzzy
-+#| msgid ""
-+#| "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
-+#| "option>, <option>UID_MAX</option>, <option>UMASK</option>, "
-+#| "<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
-+#| "<option>-K </option><replaceable>PASS_MAX_DAYS</"
-+#| "replaceable>=<replaceable>-1</replaceable> can be used when creating "
-+#| "system account to turn off password ageing, even though system account "
-+#| "has no password at all. Multiple <option>-K</option> options can be "
-+#| "specified, e.g.: <option>-K </option><replaceable>UID_MIN</"
-+#| "replaceable>=<replaceable>100</replaceable><option>-K </"
-+#| "option><replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
- msgid ""
- "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
- "option>, <option>UID_MAX</option>, <option>UMASK</option>, "
-@@ -2334,13 +2411,13 @@
- "Surcharge les valeurs par défaut de <filename>/etc/login.defs</filename> "
- "(<option>UID_MIN</option>, <option>UID_MAX</option>, <option>UMASK</option>, "
- "<option>PASS_MAX_DAYS</option> et autres). <placeholder-1/> Par exemple : "
--"<option>-K</option> <replaceable>PASS_MAX_DAYS</"
-+"<option>-K</option> <replaceable>PASS_MAX_DAYS</"
- "replaceable>=<replaceable>-1</replaceable> peut être utilisé pour la "
- "création de comptes système pour désactiver la gestion de la durée de "
- "validité des mots de passe, même si les comptes système n'ont pas de mot de "
- "passe. Plusieurs options <option>-K</option> peuvent être précisées, comme "
--"par exemple : <option>-K</option> <replaceable>UID_MIN</"
--"replaceable>=<replaceable>100</replaceable> <option>-K</option> "
-+"par exemple : <option>-K</option> <replaceable>UID_MIN</"
-+"replaceable>=<replaceable>100</replaceable> <option>-K</option> "
- "<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
- 
- #: useradd.8.xml:322(term)
-@@ -2991,14 +3068,12 @@
- msgstr "impossible de créer le répertoire personnel"
- 
- #: useradd.8.xml:794(replaceable)
--#, fuzzy
--#| msgid "1"
- msgid "14"
--msgstr "1"
-+msgstr "14"
- 
- #: useradd.8.xml:796(para)
- msgid "can't update SELinux user mapping"
--msgstr ""
-+msgstr "Impossible de mettre à jour la correspondance d'utilisateur SELinux"
- 
- #: useradd.8.xml:736(para)
- msgid ""
-@@ -3071,7 +3146,7 @@
- #: suauth.5.xml:41(contrib) pwconv.8.xml:47(contrib)
- #: login.access.5.xml:42(contrib) gpasswd.1.xml:46(contrib)
- msgid "Creation, 1996"
--msgstr ""
-+msgstr "Création, 1996"
- 
- #: suauth.5.xml:57(refentrytitle) suauth.5.xml:64(refname)
- msgid "suauth"
-@@ -3322,7 +3397,7 @@
- #: passwd.1.xml:48(contrib) login.1.xml:74(contrib) faillog.8.xml:41(contrib)
- #: faillog.5.xml:41(contrib)
- msgid "Creation, 1989"
--msgstr ""
-+msgstr "Création, 1989"
- 
- #: su.1.xml:74(refentrytitle) su.1.xml:81(refname) su.1.xml:86(command)
- #: login.defs.5.xml:446(term)
-@@ -3429,11 +3504,15 @@
- msgstr "Les options applicables à la commande <command>su</command> sont :"
- 
- #: su.1.xml:150(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-c</option>, <option>--command</option><replaceable>COMMAND</"
-+#| "replaceable>"
- msgid ""
- "<option>-c</option>, <option>--command</option> <replaceable>COMMAND</"
- "replaceable>"
- msgstr ""
--"<option>-c</option>, <option>--command</option> <replaceable>COMMANDE</"
-+"<option>-c</option>, <option>--command</option> <replaceable>COMMANDE</"
- "replaceable>"
- 
- #: su.1.xml:154(para)
-@@ -4897,7 +4976,7 @@
- 
- #: pwck.8.xml:47(contrib) lastlog.8.xml:42(contrib) grpck.8.xml:42(contrib)
- msgid "Creation, 1992"
--msgstr ""
-+msgstr "Création, 1992"
- 
- #: pwck.8.xml:63(refentrytitle) pwck.8.xml:70(refname) pwck.8.xml:76(command)
- #: login.defs.5.xml:420(term)
-@@ -5603,11 +5682,15 @@
- "connexion."
- 
- #: passwd.1.xml:220(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-i</option>, <option>--inactive</option><replaceable>INACTIVE</"
-+#| "replaceable>"
- msgid ""
- "<option>-i</option>, <option>--inactive</option> <replaceable>INACTIVE</"
- "replaceable>"
- msgstr ""
--"<option>-i</option>, <option>--inactive</option> "
-+"<option>-i</option>, <option>--inactive</option> "
- "<replaceable>DURÉE_INACTIVITÉ</replaceable>"
- 
- # NOTE: Only this user account
-@@ -5673,11 +5756,15 @@
- "changer."
- 
- #: passwd.1.xml:269(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-n</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
-+#| "replaceable>"
- msgid ""
- "<option>-n</option>, <option>--mindays</option> <replaceable>MIN_DAYS</"
- "replaceable>"
- msgstr ""
--"<option>-n</option>, <option>--mindays</option> <replaceable>JOURS_MIN</"
-+"<option>-n</option>, <option>--mindays</option> <replaceable>JOURS_MIN</"
- "replaceable>"
- 
- #: passwd.1.xml:273(para) chage.1.xml:168(para)
-@@ -5691,12 +5778,16 @@
- "indique que l'utilisateur peut changer son mot de passe quand il le souhaite."
- 
- #: passwd.1.xml:291(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-r</option>, <option>--repository</"
-+#| "option><replaceable>REPOSITORY</replaceable>"
- msgid ""
- "<option>-r</option>, <option>--repository</option> "
- "<replaceable>REPOSITORY</replaceable>"
- msgstr ""
--"<option>-r</option>, <option>--repository</option> "
--"<replaceable>REPOSITORY</replaceable>"
-+"<option>-r</option>, <option>--repository</option> <replaceable>REPOSITORY</"
-+"replaceable>"
- 
- #: passwd.1.xml:295(para)
- msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
-@@ -5741,11 +5832,15 @@
- "présente avant l'utilisation de l'option <option>-l</option>)."
- 
- #: passwd.1.xml:344(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-w</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
-+#| "replaceable>"
- msgid ""
- "<option>-w</option>, <option>--warndays</option> "
- "<replaceable>WARN_DAYS</replaceable>"
- msgstr ""
--"<option>-w</option>, <option>--warndays</option> "
-+"<option>-w</option>, <option>--warndays</option> "
- "<replaceable>DURÉE_AVERTISSEMENT</replaceable>"
- 
- #: passwd.1.xml:348(para)
-@@ -5762,11 +5857,15 @@
- "d'arriver en fin de validité."
- 
- #: passwd.1.xml:357(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
-+#| "replaceable>"
- msgid ""
- "<option>-x</option>, <option>--maxdays</option> <replaceable>MAX_DAYS</"
- "replaceable>"
- msgstr ""
--"<option>-x</option>, <option>--maxdays</option> <replaceable>JOURS_MAX</"
-+"<option>-x</option>, <option>--maxdays</option> <replaceable>JOURS_MAX</"
- "replaceable>"
- 
- #: passwd.1.xml:361(para)
-@@ -5940,8 +6039,8 @@
- #: passwd.1.xml:35(para) login.defs.5.xml:35(para)
- msgid ""
- "Number of significant characters in the password for crypt(). "
--"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your crypt"
--"() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
-+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your "
-+"crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
- "<replaceable>yes</replaceable>."
- msgstr ""
- "Nombre de caractères significatifs dans le mot de passe pour crypt(). La "
-@@ -7723,11 +7822,11 @@
- 
- #: limits.5.xml:41(firstname)
- msgid "Luca"
--msgstr ""
-+msgstr "Luca"
- 
- #: limits.5.xml:42(surname)
- msgid "Berra"
--msgstr ""
-+msgstr "Berra"
- 
- #: limits.5.xml:59(refentrytitle) limits.5.xml:66(refname)
- msgid "limits"
-@@ -8019,11 +8118,15 @@
- "Les options disponibles pour la commande <command>lastlog</command> sont :"
- 
- #: lastlog.8.xml:97(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-b</option>, <option>--before</option><replaceable>DAYS</"
-+#| "replaceable>"
- msgid ""
- "<option>-b</option>, <option>--before</option> <replaceable>DAYS</"
- "replaceable>"
- msgstr ""
--"<option>-b</option>, <option>--before</option> <replaceable>JOURS</"
-+"<option>-b</option>, <option>--before</option> <replaceable>JOURS</"
- "replaceable>"
- 
- #: lastlog.8.xml:101(para)
-@@ -8034,12 +8137,15 @@
- "remap=\"I\">JOURS</emphasis>."
- 
- #: lastlog.8.xml:127(term) faillog.8.xml:192(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
-+#| "replaceable>"
- msgid ""
- "<option>-t</option>, <option>--time</option> <replaceable>DAYS</"
- "replaceable>"
- msgstr ""
--"<option>-t</option>, <option>--time</option> <replaceable>JOURS</"
--"replaceable>"
-+"<option>-t</option>, <option>--time</option> <replaceable>JOURS</replaceable>"
- 
- #: lastlog.8.xml:131(para)
- msgid ""
-@@ -8050,11 +8156,15 @@
- "\">JOURS</emphasis>."
- 
- #: lastlog.8.xml:138(term) faillog.8.xml:202(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
-+#| "replaceable>|<replaceable>RANGE</replaceable>"
- msgid ""
- "<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
- "replaceable>|<replaceable>RANGE</replaceable>"
- msgstr ""
--"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
-+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</"
- "replaceable>|<replaceable>INTERVALLE</replaceable>"
- 
- #: lastlog.8.xml:142(para)
-@@ -8143,7 +8253,7 @@
- 
- #: gshadow.5.xml:41(contrib)
- msgid "Creation, 2005"
--msgstr ""
-+msgstr "Création, 2005"
- 
- #: gshadow.5.xml:46(refentrytitle) gshadow.5.xml:53(refname)
- msgid "gshadow"
-@@ -8383,14 +8493,6 @@
- "\"gshadow\">et <filename>/etc/gshadow</filename></phrase> par GID."
- 
- #: grpck.8.xml:196(para)
--#, fuzzy
--#| msgid ""
--#| "By default, <command>grpck</command> operates on <filename>/etc/group</"
--#| "filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</"
--#| "filename></phrase>. The user may select alternate files with the "
--#| "<emphasis remap=\"I\">group</emphasis><phrase condition=\"no_gshadow"
--#| "\">parameter.</phrase><phrase condition=\"gshadow\">and <emphasis remap="
--#| "\"I\">shadow</emphasis> parameters.</phrase>"
- msgid ""
- "By default, <command>grpck</command> operates on <filename>/etc/group</"
- "filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
-@@ -8535,12 +8637,14 @@
- "Les options disponibles pour la commande <command>groupmod</command> sont :"
- 
- #: groupmod.8.xml:96(term) groupadd.8.xml:114(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
- msgid ""
- "<option>-g</option>, <option>--gid</option> <replaceable>GID</"
- "replaceable>"
- msgstr ""
--"<option>-g</option>, <option>--gid</option> <replaceable>GID</"
--"replaceable>"
-+"<option>-g</option>, <option>--gid</option> <replaceable>GID</replaceable>"
- 
- #: groupmod.8.xml:100(para)
- msgid ""
-@@ -8588,11 +8692,15 @@
- "<option>SYS_GID_MAX</option> du fichier <filename>/etc/login.defs</filename>."
- 
- #: groupmod.8.xml:135(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-n</option>, <option>--new-name</option><replaceable>NEW_GROUP</"
-+#| "replaceable>"
- msgid ""
- "<option>-n</option>, <option>--new-name</option> "
- "<replaceable>NEW_GROUP</replaceable>"
- msgstr ""
--"<option>-n</option>, <option>--new-name</option> "
-+"<option>-n</option>, <option>--new-name</option> "
- "<replaceable>NOUVEAU_NOM_GROUPE</replaceable>"
- 
- #: groupmod.8.xml:139(para)
-@@ -8660,19 +8768,19 @@
- 
- #: groupmems.8.xml:42(firstname)
- msgid "George"
--msgstr ""
-+msgstr "George"
- 
- #: groupmems.8.xml:43(surname)
- msgid "Kraft"
--msgstr ""
-+msgstr "Kraft"
- 
- #: groupmems.8.xml:44(lineage)
- msgid "IV"
--msgstr ""
-+msgstr "IV"
- 
- #: groupmems.8.xml:45(contrib)
- msgid "Creation, 2000"
--msgstr ""
-+msgstr "Création, 2000"
- 
- #: groupmems.8.xml:69(refpurpose)
- msgid "administer members of a user's primary group"
-@@ -8732,12 +8840,16 @@
- "Les options disponibles pour la commande <command>groupmems</command> sont :"
- 
- #: groupmems.8.xml:107(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-a</option>, <option>--add</option><replaceable>user_name</"
-+#| "replaceable>"
- msgid ""
- "<option>-a</option>, <option>--add</option> <replaceable>user_name</"
- "replaceable>"
- msgstr ""
--"<option>-a</option>, <option>--add</option> "
--"<replaceable>nom_utilisateur</replaceable>"
-+"<option>-a</option>, <option>--add</option> <replaceable>nom_utilisateur</"
-+"replaceable>"
- 
- #: groupmems.8.xml:109(para)
- msgid "Add an user to the group membership list."
-@@ -8754,12 +8866,16 @@
- "a pas d'entrée, une nouvelle entrée sera créée."
- 
- #: groupmems.8.xml:118(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-d</option>, <option>--delete</option><replaceable>user_name</"
-+#| "replaceable>"
- msgid ""
- "<option>-d</option>, <option>--delete</option> <replaceable>user_name</"
- "replaceable>"
- msgstr ""
--"<option>-d</option>, <option>--delete</option> "
--"<replaceable>nom_utilisateur</replaceable>"
-+"<option>-d</option>, <option>--delete</option> <replaceable>nom_utilisateur</"
-+"replaceable>"
- 
- #: groupmems.8.xml:120(para)
- msgid "Delete a user from the group membership list."
-@@ -8774,11 +8890,15 @@
- "retiré de la liste des membres et des administrateurs du groupe."
- 
- #: groupmems.8.xml:134(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-g</option>, <option>--group</option><replaceable>group_name</"
-+#| "replaceable>"
- msgid ""
- "<option>-g</option>, <option>--group</option> <replaceable>group_name</"
- "replaceable>"
- msgstr ""
--"<option>-g</option>, <option>--group</option> <replaceable>nom_groupe</"
-+"<option>-g</option>, <option>--group</option> <replaceable>nom_groupe</"
- "replaceable>"
- 
- #: groupmems.8.xml:136(para)
-@@ -9013,22 +9133,32 @@
- "être indiquée plusieurs fois."
- 
- #: groupadd.8.xml:146(para)
-+#, fuzzy
-+#| msgid ""
-+#| "Example: <option>-K </option><replaceable>GID_MIN</"
-+#| "replaceable>=<replaceable>100</replaceable><option>-K </"
-+#| "option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
- msgid ""
- "Example: <option>-K</option> <replaceable>GID_MIN</"
- "replaceable>=<replaceable>100</replaceable> <option>-K</option> "
- "<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
- msgstr ""
--"Exemple : <option>-K</option> <replaceable>GID_MIN</"
--"replaceable>=<replaceable>10</replaceable> <option>-K</option> "
-+"Exemple : <option>-K</option> <replaceable>GID_MIN</"
-+"replaceable>=<replaceable>10</replaceable> <option>-K</option> "
- "<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
- 
- #: groupadd.8.xml:150(para)
-+#, fuzzy
-+#| msgid ""
-+#| "Note: <option>-K </option><replaceable>GID_MIN</"
-+#| "replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
-+#| "replaceable>=<replaceable>499</replaceable> doesn't work yet."
- msgid ""
- "Note: <option>-K</option> <replaceable>GID_MIN</"
- "replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
- "replaceable>=<replaceable>499</replaceable> doesn't work yet."
- msgstr ""
--"Remarque : <option>-K</option> <replaceable>GID_MIN</"
-+"Remarque : <option>-K</option> <replaceable>GID_MIN</"
- "replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
- "replaceable>=<replaceable>499</replaceable> ne fonctionne pas pour l'instant."
- 
-@@ -9138,11 +9268,11 @@
- 
- #: gpasswd.1.xml:44(firstname)
- msgid "Rafal"
--msgstr ""
-+msgstr "Rafal"
- 
- #: gpasswd.1.xml:45(surname)
- msgid "Maszkowski"
--msgstr ""
-+msgstr "Maszkowski"
- 
- #: gpasswd.1.xml:71(phrase)
- msgid "administer <placeholder-1/>"
-@@ -9235,11 +9365,14 @@
- "Les options disponibles pour la commande <command>gpasswd</command> sont :"
- 
- #: gpasswd.1.xml:147(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-a</option>, <option>--add</option><replaceable>user</replaceable>"
- msgid ""
- "<option>-a</option>, <option>--add</option> <replaceable>user</"
- "replaceable>"
- msgstr ""
--"<option>-a</option>, <option>--add</option> <replaceable>utilisateur</"
-+"<option>-a</option>, <option>--add</option> <replaceable>utilisateur</"
- "replaceable>"
- 
- #: gpasswd.1.xml:151(para)
-@@ -9251,12 +9384,16 @@
- "replaceable>."
- 
- #: gpasswd.1.xml:160(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-d</option>, <option>--delete</option><replaceable>user</"
-+#| "replaceable>"
- msgid ""
- "<option>-d</option>, <option>--delete</option> <replaceable>user</"
- "replaceable>"
- msgstr ""
--"<option>-d</option>, <option>--delete</option> "
--"<replaceable>utilisateur</replaceable>"
-+"<option>-d</option>, <option>--delete</option> <replaceable>utilisateur</"
-+"replaceable>"
- 
- #: gpasswd.1.xml:164(para)
- msgid ""
-@@ -9267,11 +9404,15 @@
- "replaceable>."
- 
- #: gpasswd.1.xml:181(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-Q</option>, <option>--root</option><replaceable>CHROOT_DIR</"
-+#| "replaceable>"
- msgid ""
- "<option>-Q</option>, <option>--root</option> <replaceable>CHROOT_DIR</"
- "replaceable>"
- msgstr ""
--"<option>-Q</option>, <option>--root</option> <replaceable>RÉP_CHROOT</"
-+"<option>-Q</option>, <option>--root</option><replaceable>RÉP_CHROOT</"
- "replaceable>"
- 
- #: gpasswd.1.xml:195(term)
-@@ -9306,11 +9447,15 @@
- "replaceable>."
- 
- #: gpasswd.1.xml:227(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-A</option>, <option>--administrators</option><replaceable>user</"
-+#| "replaceable>,..."
- msgid ""
- "<option>-A</option>, <option>--administrators</option> "
- "<replaceable>user</replaceable>,..."
- msgstr ""
--"<option>-A</option>, <option>--administrators</option> "
-+"<option>-A</option>, <option>--administrators</option> "
- "<replaceable>utilisateur</replaceable>,..."
- 
- #: gpasswd.1.xml:231(para)
-@@ -9318,12 +9463,16 @@
- msgstr "Configurer la liste des administrateurs."
- 
- #: gpasswd.1.xml:239(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-M</option>, <option>--members</option><replaceable>user</"
-+#| "replaceable>,..."
- msgid ""
- "<option>-M</option>, <option>--members</option> <replaceable>user</"
- "replaceable>,..."
- msgstr ""
--"<option>-M</option>, <option>--members</option> "
--"<replaceable>utilisateur</replaceable>,..."
-+"<option>-M</option>, <option>--members</option> <replaceable>utilisateur</"
-+"replaceable>,..."
- 
- #: gpasswd.1.xml:243(para)
- msgid "Set the list of group members."
-@@ -9439,11 +9588,15 @@
- "d'utilisateurs."
- 
- #: faillog.8.xml:128(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-l</option>, <option>--lock-secs</option><replaceable>SEC</"
-+#| "replaceable>"
- msgid ""
- "<option>-l</option>, <option>--lock-secs</option> <replaceable>SEC</"
- "replaceable>"
- msgstr ""
--"<option>-l</option>, <option>--lock-secs</option> <replaceable>SEC</"
-+"<option>-l</option>, <option>--lock-secs</option> <replaceable>SEC</"
- "replaceable>"
- 
- # NOTE: s/to/during/
-@@ -9463,11 +9616,15 @@
- "pour cette option."
- 
- #: faillog.8.xml:143(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-m</option>, <option>--maximum</option><replaceable>MAX</"
-+#| "replaceable>"
- msgid ""
- "<option>-m</option>, <option>--maximum</option> <replaceable>MAX</"
- "replaceable>"
- msgstr ""
--"<option>-m</option>, <option>--maximum</option> <replaceable>MAX</"
-+"<option>-m</option>, <option>--maximum</option> <replaceable>MAX</"
- "replaceable>"
- 
- #: faillog.8.xml:147(para)
-@@ -9618,7 +9775,7 @@
- #: expiry.1.xml:45(contrib) chsh.1.xml:44(contrib) chfn.1.xml:44(contrib)
- #: chage.1.xml:42(contrib)
- msgid "Creation, 1990"
--msgstr ""
-+msgstr "Création, 1990"
- 
- #: expiry.1.xml:61(refentrytitle) expiry.1.xml:68(refname)
- #: expiry.1.xml:74(command)
-@@ -9845,12 +10002,16 @@
- "Les options disponibles pour la commande <command>chpasswd</command> sont :"
- 
- #: chpasswd.8.xml:137(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-c</option>, <option>--crypt-method</option><replaceable>METHOD</"
-+#| "replaceable>"
- msgid ""
- "<option>-c</option>, <option>--crypt-method</option> "
- "<replaceable>METHOD</replaceable>"
- msgstr ""
--"<option>-c</option>, <option>--crypt-method</option> "
--"<replaceable>MÉTHODE</replaceable>"
-+"<option>-c</option>, <option>--crypt-method</option><replaceable>MÉTHODE</"
-+"replaceable>"
- 
- #: chpasswd.8.xml:142(para) chgpasswd.8.xml:115(para)
- msgid "The available methods are DES, MD5, and NONE."
-@@ -9893,11 +10054,15 @@
- "passe fournis ne sont pas chiffrés."
- 
- #: chpasswd.8.xml:200(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-s</option>, <option>--sha-rounds</option><replaceable>ROUNDS</"
-+#| "replaceable>"
- msgid ""
- "<option>-s</option>, <option>--sha-rounds</option> <replaceable>ROUNDS</"
- "replaceable>"
- msgstr ""
--"<option>-s</option>, <option>--sha-rounds</option> <replaceable>ROUNDS</"
-+"<option>-s</option>, <option>--sha-rounds</option> <replaceable>ROUNDS</"
- "replaceable>"
- 
- #: chpasswd.8.xml:219(para)
-@@ -9944,7 +10109,7 @@
- 
- #: chgpasswd.8.xml:47(contrib)
- msgid "Creation, 2006"
--msgstr ""
-+msgstr "Création, 2006"
- 
- #: chgpasswd.8.xml:65(refpurpose)
- msgid "update group passwords in batch mode"
-@@ -10059,36 +10224,47 @@
- msgstr "Les options applicables à la commande <command>chfn</command> sont :"
- 
- #: chfn.1.xml:117(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-f</option>, <option>--full-name</option><replaceable>FULL_NAME</"
-+#| "replaceable>"
- msgid ""
- "<option>-f</option>, <option>--full-name</option> "
- "<replaceable>FULL_NAME</replaceable>"
- msgstr ""
--"<option>-f</option>, <option>--full-name</option> "
--"<replaceable>NOM_COMPLET</replaceable>"
-+"<option>-f</option>, <option>--full-name</option><replaceable>NOM_COMPLET</"
-+"replaceable>"
- 
- #: chfn.1.xml:121(para)
- msgid "Change the user's full name."
- msgstr "Modifier le nom complet de l'utilisateur."
- 
- #: chfn.1.xml:125(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-h</option>, <option>--home-phone</"
-+#| "option><replaceable>HOME_PHONE</replaceable>"
- msgid ""
- "<option>-h</option>, <option>--home-phone</option> "
- "<replaceable>HOME_PHONE</replaceable>"
- msgstr ""
--"<option>-h</option>, <option>--home-phone</option> "
--"<replaceable>TEL_PERSO</replaceable>"
-+"<option>-h</option>, <option>--home-phone</option><replaceable>TEL_PERSO</"
-+"replaceable>"
- 
- #: chfn.1.xml:129(para)
- msgid "Change the user's home phone number."
- msgstr "Modifier le numéro de téléphone personnel de l'utilisateur."
- 
- #: chfn.1.xml:133(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-o</option>, <option>--other</option><replaceable>OTHER</"
-+#| "replaceable>"
- msgid ""
- "<option>-o</option>, <option>--other</option> <replaceable>OTHER</"
- "replaceable>"
- msgstr ""
--"<option>-o</option>, <option>--other</option> <replaceable>AUTRE</"
--"replaceable>"
-+"<option>-o</option>, <option>--other</option><replaceable>AUTRE</replaceable>"
- 
- #: chfn.1.xml:137(para)
- msgid ""
-@@ -10101,12 +10277,16 @@
- "applications et peut être changé seulement par un superutilisateur."
- 
- #: chfn.1.xml:145(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-r</option>, <option>--room</option><replaceable>ROOM_NUMBER</"
-+#| "replaceable>"
- msgid ""
- "<option>-r</option>, <option>--room</option> <replaceable>ROOM_NUMBER</"
- "replaceable>"
- msgstr ""
--"<option>-r</option>, <option>--room</option> "
--"<replaceable>NUMÉRO_DE_BUREAU</replaceable>"
-+"<option>-r</option>, <option>--room</option><replaceable>NUMÉRO_DE_BUREAU</"
-+"replaceable>"
- 
- #: chfn.1.xml:149(para)
- msgid "Change the user's room number."
-@@ -10117,12 +10297,16 @@
- msgstr "<option>-u</option>, <option>--help</option>"
- 
- #: chfn.1.xml:173(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-w</option>, <option>--work-phone</"
-+#| "option><replaceable>WORK_PHONE</replaceable>"
- msgid ""
- "<option>-w</option>, <option>--work-phone</option> "
- "<replaceable>WORK_PHONE</replaceable>"
- msgstr ""
--"<option>-w</option>, <option>--work-phone</option> "
--"<replaceable>TEL_PRO</replaceable>"
-+"<option>-w</option>, <option>--work-phone</option><replaceable>TEL_PRO</"
-+"replaceable>"
- 
- #: chfn.1.xml:177(para)
- msgid "Change the user's office phone number."
-@@ -10180,12 +10364,16 @@
- "Les options disponibles pour la commande <command>chage</command> sont :"
- 
- #: chage.1.xml:97(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-d</option>, <option>--lastday</option><replaceable>LAST_DAY</"
-+#| "replaceable>"
- msgid ""
- "<option>-d</option>, <option>--lastday</option> <replaceable>LAST_DAY</"
- "replaceable>"
- msgstr ""
--"<option>-d</option>, <option>--lastday</option> "
--"<replaceable>DERNIER_JOUR</replaceable>"
-+"<option>-d</option>, <option>--lastday</option> <replaceable>DERNIER_JOUR</"
-+"replaceable>"
- 
- #: chage.1.xml:101(para)
- msgid ""
-@@ -10199,11 +10387,15 @@
- "région)."
- 
- #: chage.1.xml:109(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-E</option>, <option>--expiredate</"
-+#| "option><replaceable>EXPIRE_DATE</replaceable>"
- msgid ""
- "<option>-E</option>, <option>--expiredate</option> "
- "<replaceable>EXPIRE_DATE</replaceable>"
- msgstr ""
--"<option>-E</option>, <option>--expiredate</option> "
-+"<option>-E</option>, <option>--expiredate</option> "
- "<replaceable>DATE_FIN_VALIDITÉ</replaceable>"
- 
- # NOTE: s/date//
-@@ -10233,11 +10425,15 @@
- "date de fin de validité."
- 
- #: chage.1.xml:135(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-I</option>, <option>--inactive</option><replaceable>INACTIVE</"
-+#| "replaceable>"
- msgid ""
- "<option>-I</option>, <option>--inactive</option> <replaceable>INACTIVE</"
- "replaceable>"
- msgstr ""
--"<option>-I</option>, <option>--inactive</option> "
-+"<option>-I</option>, <option>--inactive</option> "
- "<replaceable>DURÉE_INACTIVITÉ</replaceable>"
- 
- #: chage.1.xml:139(para)
-@@ -10267,19 +10463,27 @@
- msgstr "Afficher les informations sur l'âge des comptes."
- 
- #: chage.1.xml:164(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
-+#| "replaceable>"
- msgid ""
- "<option>-m</option>, <option>--mindays</option> <replaceable>MIN_DAYS</"
- "replaceable>"
- msgstr ""
--"<option>-m</option>, <option>--mindays</option> <replaceable>JOURS_MIN</"
-+"<option>-m</option>, <option>--mindays</option> <replaceable>JOURS_MIN</"
- "replaceable>"
- 
- #: chage.1.xml:176(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
-+#| "replaceable>"
- msgid ""
- "<option>-M</option>, <option>--maxdays</option> <replaceable>MAX_DAYS</"
- "replaceable>"
- msgstr ""
--"<option>-M</option>, <option>--maxdays</option> <replaceable>JOURS_MAX</"
-+"<option>-M</option>, <option>--maxdays</option> <replaceable>JOURS_MAX</"
- "replaceable>"
- 
- #: chage.1.xml:180(para)
-@@ -10309,11 +10513,15 @@
- "<replaceable>JOURS_MAX</replaceable> supprime la vérification de validité."
- 
- #: chage.1.xml:209(term)
-+#, fuzzy
-+#| msgid ""
-+#| "<option>-W</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
-+#| "replaceable>"
- msgid ""
- "<option>-W</option>, <option>--warndays</option> "
- "<replaceable>WARN_DAYS</replaceable>"
- msgstr ""
--"<option>-W</option>, <option>--warndays</option> "
-+"<option>-W</option>, <option>--warndays</option> "
- "<replaceable>DURÉE_AVERTISSEMENT</replaceable>"
- 
- #: chage.1.xml:213(para)
-@@ -10419,6 +10627,12 @@
- #~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
- #~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
- 
-+#~ msgid "KÅ‚oczko"
-+#~ msgstr "Kłoczko"
-+
-+#~ msgid "François"
-+#~ msgstr "François"
-+
- #~ msgid ""
- #~ "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
- #~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
-@@ -10528,11 +10742,11 @@
- #~ msgstr "-o <placeholder-1/>"
- 
- #~ msgid ""
--#~ "Note: <option>-K</option> <replaceable>UID_MIN</"
-+#~ "Note: <option>-K </option><replaceable>UID_MIN</"
- #~ "replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
- #~ "replaceable>=<replaceable>499</replaceable> doesn't work yet."
- #~ msgstr ""
--#~ "Note : <option>-K</option> <replaceable>UID_MIN</"
-+#~ "Note : <option>-K</option> <replaceable>UID_MIN</"
- #~ "replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
- #~ "replaceable>=<replaceable>499</replaceable> ne fonctionne pas pour "
- #~ "l'instant."
-Index: git/po/fr.po
-===================================================================
---- git.orig/po/fr.po
-+++ git/po/fr.po
-@@ -1,19 +1,19 @@
- # Translation of shadow messages to French
- # Copyright (C) 1999, 2004, 2005, 2006, 2009 Free Software Foundation, Inc.
--# Copyright (C) 2011, 2012  Debian French l10n team <debian-l10n-french at lists.debian.org>
-+# Copyright (C) 2011-2013  Debian French l10n team <debian-l10n-french at lists.debian.org>
- # Patches, suggestions, etc welcome.
- #
- # Vincent Renardias <vincent at ldsol.com>, 1999, 2005.
- # Jean-Luc Coulon <jean.luc.coulon at wanadoo.fr>, 2005, 2006, 2008.
- # Christian Perrier <bubulle at debian.org>, 2005, 2006, 2008, 2009.
- # Jean-Luc Coulon (f5ibh) <jean-luc.coulon at wanadoo.fr>, 2009.
--# Thomas Blein <tblein at tblein.eu>, 2011, 2012.
-+# Thomas Blein <tblein at tblein.eu>, 2011, 2012, 2013.
- msgid ""
- msgstr ""
- "Project-Id-Version: shadow\n"
- "Report-Msgid-Bugs-To: pkg-shadow-devel at lists.alioth.debian.org\n"
- "POT-Creation-Date: 2012-05-20 19:52+0200\n"
--"PO-Revision-Date: 2012-01-13 17:09+0100\n"
-+"PO-Revision-Date: 2013-07-10 18:53+0200\n"
- "Last-Translator: Thomas Blein <tblein at tblein.eu>\n"
- "Language-Team: French <debian-l10n-french at lists.debian.org>\n"
- "Language: fr\n"
-@@ -21,7 +21,7 @@
- "Content-Type: text/plain; charset=UTF-8\n"
- "Content-Transfer-Encoding: 8bit\n"
- "Plural-Forms: nplurals=2; plural=n>1;\n"
--"X-Generator: Lokalize 1.0\n"
-+"X-Generator: Lokalize 1.4\n"
- 
- #, c-format
- msgid ""
-@@ -54,10 +54,9 @@
- msgid "%s: nscd did not terminate normally (signal %d)\n"
- msgstr "%s : nscd ne s'est pas terminé normalement (signal %d).\n"
- 
--#, fuzzy, c-format
--#| msgid "%s: nscd exited with status %d"
-+#, c-format
- msgid "%s: nscd exited with status %d\n"
--msgstr "%s : nscd s'est terminé avec le statut %d."
-+msgstr "%s : nscd s'est terminé avec l'état %d\n"
- 
- msgid "Password: "
- msgstr "Mot de passe : "
-@@ -2022,10 +2021,9 @@
- msgid "%s: line too long in %s: %s..."
- msgstr "%s : ligne trop longue dans %s : %s…"
- 
--#, fuzzy, c-format
--#| msgid "%s: Cannot create symbolic link %s: %s\n"
-+#, c-format
- msgid "%s: Cannot create backup file (%s): %s\n"
--msgstr "%s : impossible de créer le lien symbolique %s : %s\n"
-+msgstr "%s : impossible de créer le fichier de sauvegarde (%s) : %s\n"
- 
- #, c-format
- msgid "%s: rename: %s: %s\n"
diff --git a/debian/patches/1012_german_translation b/debian/patches/1012_german_translation
deleted file mode 100644
index 4ad0f5f..0000000
--- a/debian/patches/1012_german_translation
+++ /dev/null
@@ -1,31 +0,0 @@
-Index: git/man/po/de.po
-===================================================================
---- git.orig/man/po/de.po
-+++ git/man/po/de.po
-@@ -3064,7 +3064,7 @@
- #: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
- #: faillog.5.xml:59(refmiscinfo)
- msgid "File Formats and Conversions"
--msgstr "Dateiformate und -konvertierung"
-+msgstr "Dateiformate und konvertierung"
- 
- #: suauth.5.xml:65(refpurpose)
- msgid "detailed su control file"
-@@ -4315,7 +4315,7 @@
- 
- #: shadow.5.xml:235(para)
- msgid "An empty field means that the account will never expire."
--msgstr "Ein leeren Feld bedeutet, dass das Konto nicht verfallen wird."
-+msgstr "Ein leeres Feld bedeutet, dass das Konto nicht verfallen wird."
- 
- #: shadow.5.xml:238(para)
- msgid ""
-@@ -6884,7 +6884,7 @@
- "contents of this file should be a message indicating why logins are "
- "inhibited."
- msgstr ""
--"Falls angegeben, der Name einer Datei, dessen Existenz Anmeldungen außer von "
-+"Falls angegeben, der Name einer Datei, deren Existenz Anmeldungen außer von "
- "Root verhindert. Der Inhalt der Datei sollte die Gründe enthalten, weshalb "
- "Anmeldungen untersagt sind."
- 
diff --git a/debian/patches/1020_fix-typo-manpage b/debian/patches/1020_fix-typo-manpage
deleted file mode 100644
index 3b2af53..0000000
--- a/debian/patches/1020_fix-typo-manpage
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: git/man/su.1.xml
-===================================================================
---- git.orig/man/su.1.xml
-+++ git/man/su.1.xml
-@@ -157,7 +157,7 @@
- 	  </para>
- 	  <para>
- 	    The executed command will have no controlling terminal. This
--	    option cannot be used to execute interractive programs which
-+	    option cannot be used to execute interactive programs which
- 	    need a controlling TTY.
- 	    <!-- This avoids TTY hijacking when su is used to lower
- 	         privileges -->
diff --git a/debian/patches/userns/01_userns_doc b/debian/patches/userns/01_userns_doc
deleted file mode 100644
index f5f5241..0000000
--- a/debian/patches/userns/01_userns_doc
+++ /dev/null
@@ -1,334 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:14:18 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id DAC33C80F4; Tue, 22 Jan 2013 09:14:18 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=0.1 required=8.0 tests=BAD_ENC_HEADER,BAYES_00
-	autolearn=no version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id 274ACC80D1
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:14:14 +0000 (UTC)
-Received: from out01.mta.xmission.com ([166.70.13.231])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZuB-0006Xm-N5; Tue, 22 Jan 2013 02:12:31 -0700
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out01.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZuA-0005NR-BQ; Tue, 22 Jan 2013 02:12:30 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZu7-0004Pj-Ec; Tue, 22 Jan 2013 02:12:30 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:12:23 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <877gn5shs8.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX18YouPWtKNAX3LovSW2+p/ONbuCHMFEQpM=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 01/11] Documentation for /etc/subuid and /etc/subgid
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2071                                                  
-Status: RO
-Content-Length: 9835
-Lines: 286
-
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- man/Makefile.am  |    4 ++
- man/subgid.5.xml |  120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- man/subuid.5.xml |  120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 244 insertions(+), 0 deletions(-)
- create mode 100644 man/subgid.5.xml
- create mode 100644 man/subuid.5.xml
-
-Index: shadow/man/Makefile.am
-===================================================================
---- shadow.orig/man/Makefile.am	2013-02-01 15:26:14.428082026 -0600
-+++ shadow/man/Makefile.am	2013-02-01 15:27:37.000000000 -0600
-@@ -43,6 +43,8 @@
- 	man5/shadow.5 \
- 	man1/su.1 \
- 	man5/suauth.5 \
-+	man5/subgid.5 \
-+	man5/subuid.5 \
- 	man8/useradd.8 \
- 	man8/userdel.8 \
- 	man8/usermod.8 \
-@@ -94,6 +96,8 @@
- 	sg.1.xml \
- 	su.1.xml \
- 	suauth.5.xml \
-+	subgid.5.xml \
-+	subuid.5.xml \
- 	useradd.8.xml \
- 	userdel.8.xml \
- 	usermod.8.xml \
-Index: shadow/man/subgid.5.xml
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/man/subgid.5.xml	2013-02-01 15:26:14.424082026 -0600
-@@ -0,0 +1,120 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<!--
-+   Copyright (c) 2013 Eric W. Biederman
-+   All rights reserved.
-+  
-+   Redistribution and use in source and binary forms, with or without
-+   modification, are permitted provided that the following conditions
-+   are met:
-+   1. Redistributions of source code must retain the above copyright
-+      notice, this list of conditions and the following disclaimer.
-+   2. Redistributions in binary form must reproduce the above copyright
-+      notice, this list of conditions and the following disclaimer in the
-+      documentation and/or other materials provided with the distribution.
-+   3. The name of the copyright holders or contributors may not be used to
-+      endorse or promote products derived from this software without
-+      specific prior written permission.
-+  
-+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+-->
-+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
-+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-+<!-- SHADOW-CONFIG-HERE -->
-+]>
-+<refentry id='subgid.5'>
-+  <refmeta>
-+    <refentrytitle>subgid</refentrytitle>
-+    <manvolnum>5</manvolnum>
-+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
-+    <refmiscinfo class="source">shadow-utils</refmiscinfo>
-+    <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
-+  </refmeta>
-+  <refnamediv id='name'>
-+    <refname>subgid</refname>
-+    <refpurpose>the subordinate gid file</refpurpose>
-+  </refnamediv>
-+
-+  <refsect1 id='description'>
-+    <title>DESCRIPTION</title>
-+    <para>
-+      Each line in <filename>/etc/subgid</filename> contains
-+      a user id and a range of suboridinate user ids that user
-+      is allowed to use.
-+
-+      This is specified with three fields delimited by colons
-+      (<quote>:</quote>).
-+      These fields are:
-+    </para>
-+    <itemizedlist mark='bullet'>
-+      <listitem>
-+	<para>login name</para>
-+      </listitem>
-+      <listitem>
-+	<para>numerical subordinate user ID</para>
-+      </listitem>
-+      <listitem>
-+	<para>numerical subordinate user ID count</para>
-+      </listitem>
-+    </itemizedlist>
-+
-+    <para>
-+      This file specifies the group IDs to be that each user may use
-+      with the <command>newgidmap</command> command that ordinary users can use to
-+      configure gid mapping in a user namespace.
-+    </para>
-+
-+    <para>
-+      Multiple ranges may be specified per user ID.
-+    </para>
-+
-+  </refsect1>
-+
-+  <refsect1 id='files'>
-+    <title>FILES</title>
-+    <variablelist>
-+      <varlistentry>
-+	<term><filename>/etc/subgid</filename></term>
-+	<listitem>
-+	  <para>Per user subordinate group IDs.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><filename>/etc/subgid-</filename></term>
-+	<listitem>
-+	  <para>Backup file for /etc/subgid.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1 id='see_also'>
-+    <title>SEE ALSO</title>
-+    <para>
-+      <citerefentry>
-+	<refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>logindefs</refentrytitle><manvolnum>5</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>newuidmap</refentrytitle><manvolnum>1</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>newgidmap</refentrytitle><manvolnum>1</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+    </para>
-+  </refsect1>
-+</refentry>
-Index: shadow/man/subuid.5.xml
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/man/subuid.5.xml	2013-02-01 15:26:14.424082026 -0600
-@@ -0,0 +1,120 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<!--
-+   Copyright (c) 2013 Eric W. Biederman
-+   All rights reserved.
-+  
-+   Redistribution and use in source and binary forms, with or without
-+   modification, are permitted provided that the following conditions
-+   are met:
-+   1. Redistributions of source code must retain the above copyright
-+      notice, this list of conditions and the following disclaimer.
-+   2. Redistributions in binary form must reproduce the above copyright
-+      notice, this list of conditions and the following disclaimer in the
-+      documentation and/or other materials provided with the distribution.
-+   3. The name of the copyright holders or contributors may not be used to
-+      endorse or promote products derived from this software without
-+      specific prior written permission.
-+  
-+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+-->
-+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
-+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-+<!-- SHADOW-CONFIG-HERE -->
-+]>
-+<refentry id='subuid.5'>
-+  <refmeta>
-+    <refentrytitle>subuid</refentrytitle>
-+    <manvolnum>5</manvolnum>
-+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
-+    <refmiscinfo class="source">shadow-utils</refmiscinfo>
-+    <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
-+  </refmeta>
-+  <refnamediv id='name'>
-+    <refname>subuid</refname>
-+    <refpurpose>the subordinate uid file</refpurpose>
-+  </refnamediv>
-+
-+  <refsect1 id='description'>
-+    <title>DESCRIPTION</title>
-+    <para>
-+      Each line in <filename>/etc/subuid</filename> contains
-+      a user id and a range of suboridinate user ids that user
-+      is allowed to use.
-+
-+      This is specified with three fields delimited by colons
-+      (<quote>:</quote>).
-+      These fields are:
-+    </para>
-+    <itemizedlist mark='bullet'>
-+      <listitem>
-+	<para>login name</para>
-+      </listitem>
-+      <listitem>
-+	<para>numerical subordinate user ID</para>
-+      </listitem>
-+      <listitem>
-+	<para>numerical subordinate user ID count</para>
-+      </listitem>
-+    </itemizedlist>
-+
-+    <para>
-+      This file specifies the user IDs to be that each user may use
-+      with the <command>newuidmap</command> command that ordinary users can use to
-+      configure uid mapping in a user namespace.
-+    </para>
-+
-+    <para>
-+      Multiple ranges may be specified per user ID.
-+    </para>
-+
-+  </refsect1>
-+
-+  <refsect1 id='files'>
-+    <title>FILES</title>
-+    <variablelist>
-+      <varlistentry>
-+	<term><filename>/etc/subuid</filename></term>
-+	<listitem>
-+	  <para>Per user subordinate user IDs.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><filename>/etc/subuid-</filename></term>
-+	<listitem>
-+	  <para>Backup file for /etc/subuid.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1 id='see_also'>
-+    <title>SEE ALSO</title>
-+    <para>
-+      <citerefentry>
-+	<refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>logindefs</refentrytitle><manvolnum>5</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>newuidmap</refentrytitle><manvolnum>1</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>newgidmap</refentrytitle><manvolnum>1</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+    </para>
-+  </refsect1>
-+</refentry>
diff --git a/debian/patches/userns/02_userns_doc_login.defs b/debian/patches/userns/02_userns_doc_login.defs
deleted file mode 100644
index 5d85cce..0000000
--- a/debian/patches/userns/02_userns_doc_login.defs
+++ /dev/null
@@ -1,218 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:14:55 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id 140DBC80F4; Tue, 22 Jan 2013 09:14:55 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=0.1 required=8.0 tests=BAD_ENC_HEADER,BAYES_00
-	autolearn=no version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id 5D815C80D1
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:14:50 +0000 (UTC)
-Received: from out03.mta.xmission.com ([166.70.13.233])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZum-0006il-0f; Tue, 22 Jan 2013 02:13:08 -0700
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out03.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZul-0004GF-Id; Tue, 22 Jan 2013 02:13:07 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZuf-0004T0-MS; Tue, 22 Jan 2013 02:13:07 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:12:58 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <871uddshr9.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX19iYyOCEx6dl2v1Ya/KIGpixG5+3MVA1bY=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 02/11] login.defs.5: Document the new variables in login.defs
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2072                                                  
-Status: RO
-Content-Length: 7615
-Lines: 170
-
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- man/Makefile.am                    |    2 +
- man/login.defs.5.xml               |    8 ++++++
- man/login.defs.d/SUB_GID_COUNT.xml |   46 ++++++++++++++++++++++++++++++++++++
- man/login.defs.d/SUB_UID_COUNT.xml |   46 ++++++++++++++++++++++++++++++++++++
- 4 files changed, 102 insertions(+), 0 deletions(-)
- create mode 100644 man/login.defs.d/SUB_GID_COUNT.xml
- create mode 100644 man/login.defs.d/SUB_UID_COUNT.xml
-
-Index: shadow/man/Makefile.am
-===================================================================
---- shadow.orig/man/Makefile.am	2013-02-01 15:27:51.048080390 -0600
-+++ shadow/man/Makefile.am	2013-02-01 15:27:51.040080390 -0600
-@@ -163,6 +163,8 @@
- 	USERDEL_CMD.xml \
- 	USERGROUPS_ENAB.xml \
- 	USE_TCB.xml \
-+	SUB_GID_COUNT.xml \
-+	SUB_UID_COUNT.xml \
- 	SYS_GID_MAX.xml \
- 	SYS_UID_MAX.xml
- 
-Index: shadow/man/login.defs.5.xml
-===================================================================
---- shadow.orig/man/login.defs.5.xml	2013-02-01 15:27:51.048080390 -0600
-+++ shadow/man/login.defs.5.xml	2013-02-01 15:27:51.044080390 -0600
-@@ -78,6 +78,8 @@
- <!ENTITY SULOG_FILE            SYSTEM "login.defs.d/SULOG_FILE.xml">
- <!ENTITY SU_NAME               SYSTEM "login.defs.d/SU_NAME.xml">
- <!ENTITY SU_WHEEL_ONLY         SYSTEM "login.defs.d/SU_WHEEL_ONLY.xml">
-+<!ENTITY SUB_GID_COUNT         SYSTEM "login.defs.d/SUB_GID_COUNT.xml">
-+<!ENTITY SUB_UID_COUNT         SYSTEM "login.defs.d/SUB_UID_COUNT.xml">
- <!ENTITY SYS_GID_MAX           SYSTEM "login.defs.d/SYS_GID_MAX.xml">
- <!ENTITY SYSLOG_SG_ENAB        SYSTEM "login.defs.d/SYSLOG_SG_ENAB.xml">
- <!ENTITY SYSLOG_SU_ENAB        SYSTEM "login.defs.d/SYSLOG_SU_ENAB.xml">
-@@ -216,6 +218,8 @@
-       &SULOG_FILE;
-       &SU_NAME;
-       &SU_WHEEL_ONLY;
-+      &SUB_GID_COUNT; <!-- documents also SUB_GID_MIN SUB_GID_MAX -->
-+      &SUB_UID_COUNT; <!-- documents also SUB_UID_MIN SUB_UID_MAX -->
-       &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
-       &SYS_UID_MAX; <!-- documents also SYS_UID_MIN -->
-       &SYSLOG_SG_ENAB;
-@@ -393,6 +397,8 @@
- 	    PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
- 	    <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
- 	    SHA_CRYPT_MIN_ROUNDS</phrase>
-+	    SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN
-+	    SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN
- 	    SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN
- 	    UMASK
- 	  </para>
-@@ -470,6 +476,8 @@
- 	    GID_MAX GID_MIN
- 	    MAIL_DIR MAX_MEMBERS_PER_GROUP
- 	    PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
-+	    SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN
-+	    SUB_UID_COUNT SUB_UID_MAX SUB_UID_MIN
- 	    SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN
- 	    UMASK
- 	    <phrase condition="tcb">TCB_AUTH_GROUP TCB_SYMLINK USE_TCB</phrase>
-Index: shadow/man/login.defs.d/SUB_GID_COUNT.xml
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/man/login.defs.d/SUB_GID_COUNT.xml	2013-02-01 15:27:51.044080390 -0600
-@@ -0,0 +1,46 @@
-+<!--
-+   Copyright (c) 2013, Eric W. Biederman
-+   All rights reserved.
-+  
-+   Redistribution and use in source and binary forms, with or without
-+   modification, are permitted provided that the following conditions
-+   are met:
-+   1. Redistributions of source code must retain the above copyright
-+      notice, this list of conditions and the following disclaimer.
-+   2. Redistributions in binary form must reproduce the above copyright
-+      notice, this list of conditions and the following disclaimer in the
-+      documentation and/or other materials provided with the distribution.
-+   3. The name of the copyright holders or contributors may not be used to
-+      endorse or promote products derived from this software without
-+      specific prior written permission.
-+  
-+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+-->
-+<varlistentry>
-+  <term><option>SUB_GID_MIN</option> (number)</term>
-+  <term><option>SUB_GID_MAX</option> (number)</term>
-+  <term><option>SUB_GID_COUNT</option> (number)</term>
-+  <listitem>
-+    <para>
-+      The commands <command>useradd</command> and <command>newusers</command>
-+      allocate <option>SUB_GID_COUNT</option> unused group IDs from the range
-+      <option>SUB_GID_MIN</option> to <option>SUB_GID_MAX</option> for each
-+      new user.
-+    </para>
-+    <para>
-+      The default values for <option>SUB_GID_MAN</option>,
-+      <option>SUB_GID_MIN</option>, <option>SUB_GID_COUNT</option>
-+      are respectively 100000, 600100000 and 10000.
-+    </para>
-+  </listitem>
-+</varlistentry>
-Index: shadow/man/login.defs.d/SUB_UID_COUNT.xml
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/man/login.defs.d/SUB_UID_COUNT.xml	2013-02-01 15:27:51.044080390 -0600
-@@ -0,0 +1,46 @@
-+<!--
-+   Copyright (c) 2013, Eric W. Biederman
-+   All rights reserved.
-+  
-+   Redistribution and use in source and binary forms, with or without
-+   modification, are permitted provided that the following conditions
-+   are met:
-+   1. Redistributions of source code must retain the above copyright
-+      notice, this list of conditions and the following disclaimer.
-+   2. Redistributions in binary form must reproduce the above copyright
-+      notice, this list of conditions and the following disclaimer in the
-+      documentation and/or other materials provided with the distribution.
-+   3. The name of the copyright holders or contributors may not be used to
-+      endorse or promote products derived from this software without
-+      specific prior written permission.
-+  
-+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+-->
-+<varlistentry>
-+  <term><option>SUB_UID_MIN</option> (number)</term>
-+  <term><option>SUB_UID_MAX</option> (number)</term>
-+  <term><option>SUB_UID_COUNT</option> (number)</term>
-+  <listitem>
-+    <para>
-+      The commands <command>useradd</command> and <command>newusers</command>
-+      allocate <option>SUB_UID_COUNT</option> unused user IDs from the range
-+      <option>SUB_UID_MIN</option> to <option>SUB_UID_MAX</option> for each
-+      new user.
-+    </para>
-+    <para>
-+      The default values for <option>SUB_GID_MAN</option>,
-+      <option>SUB_GID_MIN</option>, <option>SUB_GID_COUNT</option>
-+      are respectively 100000, 600100000 and 10000.
-+    </para>
-+  </listitem>
-+</varlistentry>
diff --git a/debian/patches/userns/03_userns_implement_commonio_append b/debian/patches/userns/03_userns_implement_commonio_append
deleted file mode 100644
index b85d012..0000000
--- a/debian/patches/userns/03_userns_implement_commonio_append
+++ /dev/null
@@ -1,110 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:15:19 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id CAFA8C80F6; Tue, 22 Jan 2013 09:15:19 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=0.1 required=8.0 tests=BAD_ENC_HEADER,BAYES_00
-	autolearn=no version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id 43FAEC80D1
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:15:15 +0000 (UTC)
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZvA-0006sA-Pq; Tue, 22 Jan 2013 02:13:32 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZv8-0004VI-Fi; Tue, 22 Jan 2013 02:13:32 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:13:26 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <87vcapr361.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX1++0A/mQBimfZkeNedO095IfnCYGQfIolI=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 03/11] Implement commonio_append.
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2073                                                  
-Status: RO
-Content-Length: 1874
-Lines: 65
-
-
-To support files that do not have a simple unique key implement
-commonio_append to allow new entries to be added.
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- lib/commonio.c |   30 ++++++++++++++++++++++++++++++
- lib/commonio.h |    1 +
- 2 files changed, 31 insertions(+), 0 deletions(-)
-
-Index: shadow/lib/commonio.c
-===================================================================
---- shadow.orig/lib/commonio.c	2013-02-01 15:27:51.376080384 -0600
-+++ shadow/lib/commonio.c	2013-02-01 15:27:51.368080384 -0600
-@@ -1121,6 +1121,36 @@
- 	return 1;
- }
- 
-+int commonio_append (struct commonio_db *db, const void *eptr)
-+{
-+	struct commonio_entry *p;
-+	void *nentry;
-+
-+	if (!db->isopen || db->readonly) {
-+		errno = EINVAL;
-+		return 0;
-+	}
-+	nentry = db->ops->dup (eptr);
-+	if (NULL == nentry) {
-+		errno = ENOMEM;
-+		return 0;
-+	}
-+	/* new entry */
-+	p = (struct commonio_entry *) malloc (sizeof *p);
-+	if (NULL == p) {
-+		db->ops->free (nentry);
-+		errno = ENOMEM;
-+		return 0;
-+	}
-+
-+	p->eptr = nentry;
-+	p->line = NULL;
-+	p->changed = true;
-+	add_one_entry (db, p);
-+
-+	db->changed = true;
-+	return 1;
-+}
- 
- void commonio_del_entry (struct commonio_db *db, const struct commonio_entry *p)
- {
-Index: shadow/lib/commonio.h
-===================================================================
---- shadow.orig/lib/commonio.h	2013-02-01 15:27:51.376080384 -0600
-+++ shadow/lib/commonio.h	2013-02-01 15:27:51.368080384 -0600
-@@ -146,6 +146,7 @@
- extern int commonio_open (struct commonio_db *, int);
- extern /*@observer@*/ /*@null@*/const void *commonio_locate (struct commonio_db *, const char *);
- extern int commonio_update (struct commonio_db *, const void *);
-+extern int commonio_append (struct commonio_db *, const void *);
- extern int commonio_remove (struct commonio_db *, const char *);
- extern int commonio_rewind (struct commonio_db *);
- extern /*@observer@*/ /*@null@*/const void *commonio_next (struct commonio_db *);
diff --git a/debian/patches/userns/04_userns_add_backend_support b/debian/patches/userns/04_userns_add_backend_support
deleted file mode 100644
index 187b9b8..0000000
--- a/debian/patches/userns/04_userns_add_backend_support
+++ /dev/null
@@ -1,685 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:16:29 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id AF9A9C80F4; Tue, 22 Jan 2013 09:16:29 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=0.1 required=8.0 tests=BAD_ENC_HEADER,BAYES_00
-	autolearn=no version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id EDF70C80D1
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:16:24 +0000 (UTC)
-Received: from out01.mta.xmission.com ([166.70.13.231])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZwI-0007HS-Mn; Tue, 22 Jan 2013 02:14:42 -0700
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out01.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZwI-0005wP-8E; Tue, 22 Jan 2013 02:14:42 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZwE-0004bA-Mv; Tue, 22 Jan 2013 02:14:42 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:14:35 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <87liblr344.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX1/3QOlmT6VsAuzQbs/RJ/nb1IrpO++QYVA=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 04/11] Add backend support for suboridnate uids and gids
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2074                                                  
-Status: RO
-X-Status: A
-Content-Length: 15967
-Lines: 636
-
-
-These files list the set of subordinate uids and gids that users are allowed
-to use.   The expect use case is with the user namespace but other uses are
-allowed.
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- etc/login.defs      |    8 +
- lib/Makefile.am     |    2 +
- lib/getdef.c        |    6 +
- lib/subordinateio.c |  512 +++++++++++++++++++++++++++++++++++++++++++++++++++
- lib/subordinateio.h |   38 ++++
- 5 files changed, 566 insertions(+), 0 deletions(-)
- create mode 100644 lib/subordinateio.c
- create mode 100644 lib/subordinateio.h
-
-Index: shadow/etc/login.defs
-===================================================================
---- shadow.orig/etc/login.defs	2013-02-01 15:27:51.684080379 -0600
-+++ shadow/etc/login.defs	2013-02-01 15:27:51.676080379 -0600
-@@ -226,6 +226,10 @@
- # System accounts
- SYS_UID_MIN		  101
- SYS_UID_MAX		  999
-+# Extra per user uids
-+SUB_UID_MIN		   100000
-+SUB_UID_MAX		600100000
-+SUB_UID_COUNT		    10000
- 
- #
- # Min/max values for automatic gid selection in groupadd
-@@ -235,6 +239,10 @@
- # System accounts
- SYS_GID_MIN		  101
- SYS_GID_MAX		  999
-+# Extra per user group ids
-+SUB_GID_MIN		   100000
-+SUB_GID_MAX		600100000
-+SUB_GID_COUNT		    10000
- 
- #
- # Max number of login retries if password is bad
-Index: shadow/lib/Makefile.am
-===================================================================
---- shadow.orig/lib/Makefile.am	2013-02-01 15:27:51.684080379 -0600
-+++ shadow/lib/Makefile.am	2013-02-01 15:27:51.676080379 -0600
-@@ -39,6 +39,8 @@
- 	pwio.c \
- 	pwio.h \
- 	pwmem.c \
-+	subordinateio.h \
-+	subordinateio.c \
- 	selinux.c \
- 	semanage.c \
- 	sgetgrent.c \
-Index: shadow/lib/getdef.c
-===================================================================
---- shadow.orig/lib/getdef.c	2013-02-01 15:27:51.684080379 -0600
-+++ shadow/lib/getdef.c	2013-02-01 15:27:51.680080379 -0600
-@@ -82,6 +82,12 @@
- 	{"SHA_CRYPT_MAX_ROUNDS", NULL},
- 	{"SHA_CRYPT_MIN_ROUNDS", NULL},
- #endif
-+	{"SUB_GID_COUNT", NULL},
-+	{"SUB_GID_MAX", NULL},
-+	{"SUB_GID_MIN", NULL},
-+	{"SUB_UID_COUNT", NULL},
-+	{"SUB_UID_MAX", NULL},
-+	{"SUB_UID_MIN", NULL},
- 	{"SULOG_FILE", NULL},
- 	{"SU_NAME", NULL},
- 	{"SYS_GID_MAX", NULL},
-Index: shadow/lib/subordinateio.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/lib/subordinateio.c	2013-02-01 15:27:51.680080379 -0600
-@@ -0,0 +1,512 @@
-+/*
-+ * Copyright (c) 2012 - Eric Biederman
-+ */
-+
-+#include <config.h>
-+#include "prototypes.h"
-+#include "defines.h"
-+#include <stdio.h>
-+#include "commonio.h"
-+#include "subordinateio.h"
-+
-+struct subordinate_range {
-+	const char *owner;
-+	unsigned long start;
-+	unsigned long count;
-+};
-+
-+#define NFIELDS 3
-+
-+static /*@null@*/ /*@only@*/void *subordinate_dup (const void *ent)
-+{
-+	const struct subordinate_range *rangeent = ent;
-+	struct subordinate_range *range;
-+
-+	range = (struct subordinate_range *) malloc (sizeof *range);
-+	if (NULL == range) {
-+		return NULL;
-+	}
-+	range->owner = strdup (rangeent->owner);
-+	if (NULL == range->owner) {
-+		free(range);
-+		return NULL;
-+	}
-+	range->start = rangeent->start;
-+	range->count = rangeent->count;
-+
-+	return range;
-+}
-+
-+static void subordinate_free (/*@out@*/ /*@only@*/void *ent)
-+{
-+	struct subordinate_range *rangeent = ent;
-+	
-+	free ((void *)(rangeent->owner));
-+	free (rangeent);
-+}
-+
-+static void *subordinate_parse (const char *line)
-+{
-+	static struct subordinate_range range;
-+	char rangebuf[1024];
-+	int i;
-+	char *cp;
-+	char *fields[NFIELDS];
-+
-+	/*
-+	 * Copy the string to a temporary buffer so the substrings can
-+	 * be modified to be NULL terminated.
-+	 */
-+	if (strlen (line) >= sizeof rangebuf)
-+		return NULL;	/* fail if too long */
-+	strcpy (rangebuf, line);
-+
-+	/*
-+	 * Save a pointer to the start of each colon separated
-+	 * field.  The fields are converted into NUL terminated strings.
-+	 */
-+
-+	for (cp = rangebuf, i = 0; (i < NFIELDS) && (NULL != cp); i++) {
-+		fields[i] = cp;
-+		while (('\0' != *cp) && (':' != *cp)) {
-+			cp++;
-+		}
-+
-+		if ('\0' != *cp) {
-+			*cp = '\0';
-+			cp++;
-+		} else {
-+			cp = NULL;
-+		}
-+	}
-+
-+	/*
-+	 * There must be exactly NFIELDS colon separated fields or
-+	 * the entry is invalid.  Also, fields must be non-blank.
-+	 */
-+	if (i != NFIELDS || *fields[0] == '\0' || *fields[1] == '\0' || *fields[2] == '\0')
-+		return NULL;
-+	range.owner = fields[0];
-+	if (getulong (fields[1], &range.start) == 0)
-+		return NULL;
-+	if (getulong (fields[2], &range.count) == 0)
-+		return NULL;
-+
-+	return ⦥
-+}
-+
-+static int subordinate_put (const void *ent, FILE * file)
-+{
-+	const struct subordinate_range *range = ent;
-+
-+	return fprintf(file, "%s:%lu:%lu\n",
-+			       range->owner,
-+			       range->start,
-+			       range->count) < 0 ? -1  : 0;
-+}
-+
-+static struct commonio_ops subordinate_ops = {
-+	subordinate_dup,	/* dup */
-+	subordinate_free,	/* free */
-+	NULL,			/* getname */
-+	subordinate_parse,	/* parse */
-+	subordinate_put,	/* put */
-+	fgets,			/* fgets */
-+	fputs,			/* fputs */
-+	NULL,			/* open_hook */
-+	NULL,			/* close_hook */
-+};
-+
-+static /*@observer@*/ /*@null*/const struct subordinate_range *subordinate_next(struct commonio_db *db)
-+{
-+	commonio_next (db);
-+}
-+
-+static bool is_range_free(struct commonio_db *db, unsigned long start,
-+			  unsigned long count)
-+{
-+	const struct subordinate_range *range;
-+	unsigned long end = start + count - 1;
-+
-+	commonio_rewind(db);
-+	while ((range = commonio_next(db)) != NULL) {
-+		unsigned long first = range->start;
-+		unsigned long last = first + range->count - 1;
-+
-+		if ((end >= first) && (start <= last))
-+			return false;
-+	}
-+	return true;
-+}
-+
-+static const bool range_exists(struct commonio_db *db, const char *owner)
-+{
-+	const struct subordinate_range *range;
-+	commonio_rewind(db);
-+	while ((range = commonio_next(db)) != NULL) {
-+		unsigned long first = range->start;
-+		unsigned long last = first + range->count - 1;
-+
-+		if (0 == strcmp(range->owner, owner))
-+			return true;
-+	}
-+	return false;
-+}
-+
-+static const struct subordinate_range *find_range(struct commonio_db *db,
-+						  const char *owner, unsigned long val)
-+{
-+	const struct subordinate_range *range;
-+	commonio_rewind(db);
-+	while ((range = commonio_next(db)) != NULL) {
-+		unsigned long first = range->start;
-+		unsigned long last = first + range->count - 1;
-+
-+		if (0 != strcmp(range->owner, owner))
-+			continue;
-+
-+		if ((val >= first) && (val <= last))
-+			return range;
-+	}
-+	return NULL;
-+}
-+
-+static bool have_range(struct commonio_db *db,
-+		       const char *owner, unsigned long start, unsigned long count)
-+{
-+	const struct subordinate_range *range;
-+	unsigned long end;
-+
-+	if (count == 0)
-+		return false;
-+
-+	end = start + count - 1;
-+	range = find_range (db, owner, start);
-+	while (range) {
-+		unsigned long last; 
-+
-+		last = range->start + range->count - 1;
-+		if (last >= (start + count - 1))
-+			return true;
-+
-+		count = end - last;
-+		start = last + 1;
-+		range = find_range(db, owner, start);
-+	}
-+	return false;
-+}
-+
-+static int subordinate_range_cmp (const void *p1, const void *p2)
-+{
-+	struct subordinate_range *range1, *range2;
-+
-+	if ((*(struct commonio_entry **) p1)->eptr == NULL)
-+		return 1;
-+	if ((*(struct commonio_entry **) p2)->eptr == NULL)
-+		return -1;
-+
-+	range1 = ((struct subordinate_range *) (*(struct commonio_entry **) p1)->eptr);
-+	range2 = ((struct subordinate_range *) (*(struct commonio_entry **) p2)->eptr);
-+
-+	if (range1->start < range2->start)
-+		return -1;
-+	else if (range1->start > range2->start)
-+		return 1;
-+	else if (range1->count < range2->count)
-+		return -1;
-+	else if (range1->count > range2->count)
-+		return 1;
-+	else
-+		return strcmp(range1->owner, range2->owner);
-+}
-+
-+static unsigned long find_free_range(struct commonio_db *db,
-+				     unsigned long min, unsigned long max,
-+				     unsigned long count)
-+{
-+	const struct subordinate_range *range;
-+	unsigned long low, high;
-+
-+	/* When given invalid parameters fail */
-+	if ((count == 0) || (max <= min))
-+		goto fail;
-+
-+	/* Sort by range than by owner */
-+	commonio_sort (db, subordinate_range_cmp);
-+	commonio_rewind(db);
-+
-+	low = min;
-+	while ((range = commonio_next(db)) != NULL) {
-+		unsigned long first = range->start;
-+		unsigned long last = first + range->count - 1;
-+
-+		/* Find the top end of the hole before this range */
-+		high = first;
-+		if (high > max)
-+			high = max;
-+
-+		/* Is the hole before this range large enough? */
-+		if ((high > low) && (((high - low) + 1) >= count))
-+			return low;
-+
-+		/* Compute the low end of the next hole */
-+		if (low < (last + 1))
-+			low = last + 1;
-+		if (low > max)
-+			goto fail;
-+	}
-+
-+	/* Is the remaining unclaimed area large enough? */
-+	if (((max - low) + 1) >= count)
-+		return low;
-+fail:
-+	return ULONG_MAX;
-+}
-+
-+static int add_range(struct commonio_db *db,
-+	const char *owner, unsigned long start, unsigned long count)
-+{
-+	struct subordinate_range range;
-+	range.owner = owner;
-+	range.start = start;
-+	range.count = count;
-+
-+	/* See if the range is already present */
-+	if (have_range(db, owner, start, count))
-+		return 1;
-+
-+	/* Oterwise append the range */
-+	return commonio_append(db, &range);
-+}
-+
-+static int remove_range(struct commonio_db *db,
-+	const char *owner, unsigned long start, unsigned long count)
-+{
-+	struct commonio_entry *ent;
-+	unsigned long end;
-+
-+	if (count == 0)
-+		return 1;
-+
-+	end = start + count - 1;
-+	for (ent = db->head; ent; ent = ent->next) {
-+		struct subordinate_range *range = ent->eptr;
-+		unsigned long first;
-+		unsigned long last;
-+
-+		/* Skip unparsed entries */
-+		if (!range)
-+			continue;
-+
-+		first = range->start;
-+		last = first + range->count - 1;
-+
-+		/* Skip entries with a different owner */
-+		if (0 != strcmp(range->owner, owner))
-+			continue;
-+
-+		/* Skip entries outside of the range to remove */
-+		if ((end < first) || (start > last))
-+			continue;
-+
-+		/* Is entry completely contained in the range to remove? */
-+		if ((start <= first) && (end >= last)) {
-+			commonio_del_entry (db, ent);
-+		} 
-+		/* Is just the start of the entry removed? */
-+		else if ((start <= first) && (end < last)) {
-+			range->start = end + 1;
-+			range->count = (last - range->start) + 1;
-+
-+			ent->changed = true;
-+		}
-+		/* Is just the end of the entry removed? */
-+		else if ((start > first) && (end >= last)) {
-+			range->count = (start - range->start) + 1;
-+
-+			ent->changed = true;
-+		}
-+		/* The middle of the range is removed */
-+		else {
-+			struct subordinate_range tail;
-+			tail.owner = range->owner;
-+			tail.start = end + 1;
-+			tail.count = (last - tail.start) + 1;
-+
-+			if (!commonio_append(db, &tail))
-+				return 0;
-+
-+			range->count = (start - range->start) + 1;
-+
-+			ent->changed = true;
-+		}
-+	}
-+
-+	return 1;
-+}
-+
-+static struct commonio_db subordinate_uid_db = {
-+	"/etc/subuid",		/* filename */
-+	&subordinate_ops,	/* ops */
-+	NULL,			/* fp */
-+#ifdef WITH_SELINUX
-+	NULL,			/* scontext */
-+#endif
-+	NULL,			/* head */
-+	NULL,			/* tail */
-+	NULL,			/* cursor */
-+	false,			/* changed */
-+	false,			/* isopen */
-+	false,			/* locked */
-+	false			/* readonly */
-+};
-+
-+int sub_uid_setdbname (const char *filename)
-+{
-+	return commonio_setname (&subordinate_uid_db, filename);
-+}
-+
-+/*@observer@*/const char *sub_uid_dbname (void)
-+{
-+	return subordinate_uid_db.filename;
-+}
-+
-+bool sub_uid_file_present (void)
-+{
-+	return commonio_present (&subordinate_uid_db);
-+}
-+
-+int sub_uid_lock (void)
-+{
-+	return commonio_lock (&subordinate_uid_db);
-+}
-+
-+int sub_uid_open (int mode)
-+{
-+	return commonio_open (&subordinate_uid_db, mode);
-+}
-+
-+bool is_sub_uid_range_free(uid_t start, unsigned long count)
-+{
-+	return is_range_free (&subordinate_uid_db, start, count);
-+}
-+
-+bool sub_uid_assigned(const char *owner)
-+{
-+	return range_exists (&subordinate_uid_db, owner);
-+}
-+
-+bool have_sub_uids(const char *owner, uid_t start, unsigned long count)
-+{
-+	return have_range (&subordinate_uid_db, owner, start, count);
-+}
-+
-+int sub_uid_add (const char *owner, uid_t start, unsigned long count)
-+{
-+	return add_range (&subordinate_uid_db, owner, start, count);
-+}
-+
-+int sub_uid_remove (const char *owner, uid_t start, unsigned long count)
-+{
-+	return remove_range (&subordinate_uid_db, owner, start, count);
-+}
-+
-+int sub_uid_close (void)
-+{
-+	return commonio_close (&subordinate_uid_db);
-+}
-+
-+int sub_uid_unlock (void)
-+{
-+	return commonio_unlock (&subordinate_uid_db);
-+}
-+
-+uid_t sub_uid_find_free_range(uid_t min, uid_t max, unsigned long count)
-+{
-+	unsigned long start;
-+	start = find_free_range (&subordinate_uid_db, min, max, count);
-+	return start == ULONG_MAX ? (uid_t) -1 : start;
-+}
-+
-+static struct commonio_db subordinate_gid_db = {
-+	"/etc/subgid",		/* filename */
-+	&subordinate_ops,	/* ops */
-+	NULL,			/* fp */
-+#ifdef WITH_SELINUX
-+	NULL,			/* scontext */
-+#endif
-+	NULL,			/* head */
-+	NULL,			/* tail */
-+	NULL,			/* cursor */
-+	false,			/* changed */
-+	false,			/* isopen */
-+	false,			/* locked */
-+	false			/* readonly */
-+};
-+
-+int sub_gid_setdbname (const char *filename)
-+{
-+	return commonio_setname (&subordinate_gid_db, filename);
-+}
-+
-+/*@observer@*/const char *sub_gid_dbname (void)
-+{
-+	return subordinate_gid_db.filename;
-+}
-+
-+bool sub_gid_file_present (void)
-+{
-+	return commonio_present (&subordinate_gid_db);
-+}
-+
-+int sub_gid_lock (void)
-+{
-+	return commonio_lock (&subordinate_gid_db);
-+}
-+
-+int sub_gid_open (int mode)
-+{
-+	return commonio_open (&subordinate_gid_db, mode);
-+}
-+
-+bool is_sub_gid_range_free(gid_t start, unsigned long count)
-+{
-+	return is_range_free (&subordinate_gid_db, start, count);
-+}
-+
-+bool have_sub_gids(const char *owner, gid_t start, unsigned long count)
-+{
-+	return have_range(&subordinate_gid_db, owner, start, count);
-+}
-+
-+bool sub_gid_assigned(const char *owner)
-+{
-+	return range_exists (&subordinate_gid_db, owner);
-+}
-+
-+int sub_gid_add (const char *owner, gid_t start, unsigned long count)
-+{
-+	return add_range (&subordinate_gid_db, owner, start, count);
-+}
-+
-+int sub_gid_remove (const char *owner, gid_t start, unsigned long count)
-+{
-+	return remove_range (&subordinate_gid_db, owner, start, count);
-+}
-+
-+int sub_gid_close (void)
-+{
-+	return commonio_close (&subordinate_gid_db);
-+}
-+
-+int sub_gid_unlock (void)
-+{
-+	return commonio_unlock (&subordinate_gid_db);
-+}
-+
-+gid_t sub_gid_find_free_range(gid_t min, gid_t max, unsigned long count)
-+{
-+	unsigned long start;
-+	start = find_free_range (&subordinate_gid_db, min, max, count);
-+	return start == ULONG_MAX ? (gid_t) -1 : start;
-+}
-Index: shadow/lib/subordinateio.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/lib/subordinateio.h	2013-02-01 15:27:51.680080379 -0600
-@@ -0,0 +1,38 @@
-+/*
-+ * Copyright (c) 2012- Eric W. Biederman
-+ */
-+
-+#ifndef _SUBORDINATEIO_H
-+#define _SUBORDINATEIO_H
-+
-+#include <sys/types.h>
-+
-+extern int sub_uid_close(void);
-+extern bool is_sub_uid_range_free(uid_t start, unsigned long count);
-+extern bool have_sub_uids(const char *owner, uid_t start, unsigned long count);
-+extern bool sub_uid_file_present (void);
-+extern bool sub_uid_assigned(const char *owner);
-+extern int sub_uid_lock (void);
-+extern int sub_uid_setdbname (const char *filename);
-+extern /*@observer@*/const char *sub_uid_dbname (void);
-+extern int sub_uid_open (int mode);
-+extern int sub_uid_unlock (void);
-+extern int sub_uid_add (const char *owner, uid_t start, unsigned long count);
-+extern int sub_uid_remove (const char *owner, uid_t start, unsigned long count);
-+extern uid_t sub_uid_find_free_range(uid_t min, uid_t max, unsigned long count);
-+
-+extern int sub_gid_close(void);
-+extern bool is_sub_gid_range_free(gid_t start, unsigned long count);
-+extern bool have_sub_gids(const char *owner, gid_t start, unsigned long count);
-+extern bool sub_gid_file_present (void);
-+extern bool sub_gid_assigned(const char *owner);
-+extern int sub_gid_lock (void);
-+extern int sub_gid_setdbname (const char *filename);
-+extern /*@observer@*/const char *sub_gid_dbname (void);
-+extern int sub_gid_open (int mode);
-+extern int sub_gid_unlock (void);
-+extern int sub_gid_add (const char *owner, gid_t start, unsigned long count);
-+extern int sub_gid_remove (const char *owner, gid_t start, unsigned long count);
-+extern uid_t sub_gid_find_free_range(gid_t min, gid_t max, unsigned long count);
-+
-+#endif
diff --git a/debian/patches/userns/05_userns_implemend_find_new_sub_xids b/debian/patches/userns/05_userns_implemend_find_new_sub_xids
deleted file mode 100644
index 707b552..0000000
--- a/debian/patches/userns/05_userns_implemend_find_new_sub_xids
+++ /dev/null
@@ -1,283 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:17:02 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id 480ABC80F4; Tue, 22 Jan 2013 09:17:02 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=0.1 required=8.0 tests=BAD_ENC_HEADER,BAYES_00
-	autolearn=no version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id 90ACFC80D1
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:16:57 +0000 (UTC)
-Received: from out01.mta.xmission.com ([166.70.13.231])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZwp-0007cg-9X; Tue, 22 Jan 2013 02:15:15 -0700
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out01.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZwo-0006DN-OT; Tue, 22 Jan 2013 02:15:14 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZwj-0004g0-9e; Tue, 22 Jan 2013 02:15:14 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:15:05 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <87fw1tr33a.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX19KHX5xUOkaLY5iIEqDVLxZKDTByyA0Xk8=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 05/11] Implement find_new_sub_uids find_new_sub_gids
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2075                                                  
-Status: RO
-Content-Length: 8108
-Lines: 235
-
-
-Functions for finding new subordinate uid and gids ranges for use
-with useradd.
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- lib/prototypes.h            |    9 ++++
- libmisc/Makefile.am         |    2 +
- libmisc/find_new_sub_gids.c |   87 +++++++++++++++++++++++++++++++++++++++++++
- libmisc/find_new_sub_uids.c |   87 +++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 185 insertions(+), 0 deletions(-)
- create mode 100644 libmisc/find_new_sub_gids.c
- create mode 100644 libmisc/find_new_sub_uids.c
-
-Index: shadow/lib/prototypes.h
-===================================================================
---- shadow.orig/lib/prototypes.h	2013-02-01 15:27:52.044080373 -0600
-+++ shadow/lib/prototypes.h	2013-02-01 15:27:52.040080373 -0600
-@@ -149,6 +149,15 @@
-                          uid_t *uid,
-                          /*@null@*/uid_t const *preferred_uid);
- 
-+/* find_new_sub_gids.c */
-+extern int find_new_sub_gids (const char *owner,
-+			      gid_t *range_start, unsigned long *range_count);
-+
-+/* find_new_sub_uids.c */
-+extern int find_new_sub_uids (const char *owner,
-+			      uid_t *range_start, unsigned long *range_count);
-+
-+
- /* get_gid.c */
- extern int get_gid (const char *gidstr, gid_t *gid);
- 
-Index: shadow/libmisc/Makefile.am
-===================================================================
---- shadow.orig/libmisc/Makefile.am	2013-02-01 15:27:52.044080373 -0600
-+++ shadow/libmisc/Makefile.am	2013-02-01 15:27:52.040080373 -0600
-@@ -25,6 +25,8 @@
- 	failure.h \
- 	find_new_gid.c \
- 	find_new_uid.c \
-+	find_new_sub_gids.c \
-+	find_new_sub_uids.c \
- 	getdate.h \
- 	getdate.y \
- 	getgr_nam_gid.c \
-Index: shadow/libmisc/find_new_sub_gids.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/libmisc/find_new_sub_gids.c	2013-02-01 15:27:52.040080373 -0600
-@@ -0,0 +1,87 @@
-+/*
-+ * Copyright (c) 2012 Eric Biederman
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the copyright holders or contributors may not be used to
-+ *    endorse or promote products derived from this software without
-+ *    specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#include <config.h>
-+
-+#include <assert.h>
-+#include <stdio.h>
-+#include <errno.h>
-+
-+#include "prototypes.h"
-+#include "subordinateio.h"
-+#include "getdef.h"
-+
-+/*
-+ * find_new_sub_gids - Find a new unused range of GIDs.
-+ *
-+ * If successful, find_new_sub_gids provides a range of unused
-+ * user IDs in the [SUB_GID_MIN:SUB_GID_MAX] range.
-+ * 
-+ * Return 0 on success, -1 if no unused GIDs are available.
-+ */
-+int find_new_sub_gids (const char *owner,
-+		       gid_t *range_start, unsigned long *range_count)
-+{
-+	unsigned long min, max;
-+	unsigned long count;
-+	gid_t start;
-+
-+	assert (range_start != NULL);
-+	assert (range_count != NULL);
-+
-+	min = getdef_ulong ("SUB_GID_MIN", 100000UL);
-+	max = getdef_ulong ("SUB_GID_MAX", 600100000UL);
-+	count = getdef_ulong ("SUB_GID_COUNT", 10000);
-+
-+	/* Is there a preferred range that works? */
-+	if ((*range_count != 0) &&
-+	    (*range_start >= min) &&
-+	    (((*range_start) + (*range_count) - 1) <= max) &&
-+	    is_sub_gid_range_free(*range_start, *range_count)) {
-+		return 0;
-+	}
-+
-+	if (max < (min + count)) {
-+		(void) fprintf (stderr,
-+				_("%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu)\n"),
-+			Prog, min, max);
-+		return -1;
-+	}
-+	start = sub_gid_find_free_range(min, max, count);
-+	if (start == (gid_t)-1) {
-+		fprintf (stderr,
-+		         _("%s: Can't get unique secondary GID range\n"),
-+		         Prog);
-+		SYSLOG ((LOG_WARN, "no more available secondary GIDs on the system"));
-+		return -1;
-+	}
-+	*range_start = start;
-+	*range_count = count;
-+	return 0;
-+}
-+
-Index: shadow/libmisc/find_new_sub_uids.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/libmisc/find_new_sub_uids.c	2013-02-01 15:27:52.040080373 -0600
-@@ -0,0 +1,87 @@
-+/*
-+ * Copyright (c) 2012 Eric Biederman
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the copyright holders or contributors may not be used to
-+ *    endorse or promote products derived from this software without
-+ *    specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#include <config.h>
-+
-+#include <assert.h>
-+#include <stdio.h>
-+#include <errno.h>
-+
-+#include "prototypes.h"
-+#include "subordinateio.h"
-+#include "getdef.h"
-+
-+/*
-+ * find_new_sub_uids - Find a new unused range of UIDs.
-+ *
-+ * If successful, find_new_sub_uids provides a range of unused
-+ * user IDs in the [SUB_UID_MIN:SUB_UID_MAX] range.
-+ * 
-+ * Return 0 on success, -1 if no unused UIDs are available.
-+ */
-+int find_new_sub_uids (const char *owner,
-+		       uid_t *range_start, unsigned long *range_count)
-+{
-+	unsigned long min, max;
-+	unsigned long count;
-+	uid_t start;
-+
-+	assert (range_start != NULL);
-+	assert (range_count != NULL);
-+
-+	min = getdef_ulong ("SUB_UID_MIN", 100000UL);
-+	max = getdef_ulong ("SUB_UID_MAX", 600100000UL);
-+	count = getdef_ulong ("SUB_UID_COUNT", 10000);
-+
-+	/* Is there a preferred range that works? */
-+	if ((*range_count != 0) &&
-+	    (*range_start >= min) &&
-+	    (((*range_start) + (*range_count) - 1) <= max) &&
-+	    is_sub_uid_range_free(*range_start, *range_count)) {
-+		return 0;
-+	}
-+
-+	if (max < (min + count)) {
-+		(void) fprintf (stderr,
-+				_("%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu)\n"),
-+			Prog, min, max);
-+		return -1;
-+	}
-+	start = sub_uid_find_free_range(min, max, count);
-+	if (start == (uid_t)-1) {
-+		fprintf (stderr,
-+		         _("%s: Can't get unique secondary UID range\n"),
-+		         Prog);
-+		SYSLOG ((LOG_WARN, "no more available secondary UIDs on the system"));
-+		return -1;
-+	}
-+	*range_start = start;
-+	*range_count = count;
-+	return 0;
-+}
-+
diff --git a/debian/patches/userns/06_userns_userdel b/debian/patches/userns/06_userns_userdel
deleted file mode 100644
index 16e7051..0000000
--- a/debian/patches/userns/06_userns_userdel
+++ /dev/null
@@ -1,236 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:18:47 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id F2E6AC80F6; Tue, 22 Jan 2013 09:18:46 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=0.1 required=8.0 tests=BAD_ENC_HEADER,BAYES_00
-	autolearn=no version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id 996B1C80D1
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:18:42 +0000 (UTC)
-Received: from out03.mta.xmission.com ([166.70.13.233])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZyW-0008Bi-3X; Tue, 22 Jan 2013 02:17:00 -0700
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out03.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZyU-0005NA-Qm; Tue, 22 Jan 2013 02:16:59 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZyQ-0004qs-T1; Tue, 22 Jan 2013 02:16:58 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:16:51 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <878v7lr30c.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX1/1l7dElNy9uNLAXx8eC28OMs/pxPM8NEo=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 06/11] userdel: Add support for removing subordinate user and group ids.
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2076                                        
-Status: O
-Content-Length: 5573
-Lines: 186
-
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- src/userdel.c |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 115 insertions(+), 0 deletions(-)
-
-Index: shadow/src/userdel.c
-===================================================================
---- shadow.orig/src/userdel.c	2013-02-01 15:27:52.380080367 -0600
-+++ shadow/src/userdel.c	2013-02-01 15:27:52.372080367 -0600
-@@ -65,6 +65,7 @@
- #endif				/* WITH_TCB */
- /*@-exitarg@*/
- #include "exitcodes.h"
-+#include "subordinateio.h"
- 
- /*
-  * exit status values
-@@ -75,6 +76,8 @@
- #define E_GRP_UPDATE	10	/* can't update group file */
- #define E_HOMEDIR	12	/* can't remove home directory */
- #define E_SE_UPDATE	14	/* can't update SELinux user mapping */
-+#define E_SUB_UID_UPDATE 16	/* can't update the subordinate uid file */
-+#define E_SUB_GID_UPDATE 18	/* can't update the subordinate gid file */
- 
- /*
-  * Global variables
-@@ -96,9 +99,13 @@
- static bool is_shadow_grp;
- static bool sgr_locked = false;
- #endif				/* SHADOWGRP */
-+static bool is_sub_uid;
-+static bool is_sub_gid;
- static bool pw_locked  = false;
- static bool gr_locked   = false;
- static bool spw_locked  = false;
-+static bool sub_uid_locked = false;
-+static bool sub_gid_locked = false;
- 
- /* local function prototypes */
- static void usage (int status);
-@@ -437,6 +444,34 @@
- 		sgr_locked = false;
- 	}
- #endif				/* SHADOWGRP */
-+
-+	if (is_sub_uid) {
-+		if (sub_uid_close () == 0) {
-+			fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_uid_dbname ()));
-+			fail_exit (E_SUB_UID_UPDATE);
-+		}
-+		if (sub_uid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
-+			/* continue */
-+		}
-+		sub_uid_locked = false;
-+	}
-+
-+	if (is_sub_gid) {
-+		if (sub_gid_close () == 0) {
-+			fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_gid_dbname ()));
-+			fail_exit (E_SUB_GID_UPDATE);
-+		}
-+		if (sub_gid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
-+			/* continue */
-+		}
-+		sub_gid_locked = false;
-+	}
- }
- 
- /*
-@@ -474,6 +509,20 @@
- 		}
- 	}
- #endif				/* SHADOWGRP */
-+	if (sub_uid_locked) {
-+		if (sub_uid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
-+			/* continue */
-+		}
-+	}
-+	if (sub_gid_locked) {
-+		if (sub_gid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
-+			/* continue */
-+		}
-+	}
- 
- #ifdef WITH_AUDIT
- 	audit_logger (AUDIT_DEL_USER, Prog,
-@@ -595,6 +644,58 @@
- 		}
- 	}
- #endif				/* SHADOWGRP */
-+	if (is_sub_uid) {
-+		if (sub_uid_lock () == 0) {
-+			fprintf (stderr,
-+				_("%s: cannot lock %s; try again later.\n"),
-+				Prog, sub_uid_dbname ());
-+#ifdef WITH_AUDIT
-+			audit_logger (AUDIT_DEL_USER, Prog,
-+				"locking subordinate user file",
-+				user_name, (unsigned int) user_id,
-+				SHADOW_AUDIT_FAILURE);
-+#endif				/* WITH_AUDIT */
-+			fail_exit (E_SUB_UID_UPDATE);
-+		}
-+		sub_uid_locked = true;
-+		if (sub_uid_open (O_RDWR) == 0) {
-+			fprintf (stderr,
-+				_("%s: cannot open %s\n"), Prog, sub_uid_dbname ());
-+#ifdef WITH_AUDIT
-+			audit_logger (AUDIT_DEL_USER, Prog,
-+				"opening subordinate user file",
-+				user_name, (unsigned int) user_id,
-+				SHADOW_AUDIT_FAILURE);
-+#endif				/* WITH_AUDIT */
-+			fail_exit (E_SUB_UID_UPDATE);
-+		}
-+	}
-+	if (is_sub_gid) {
-+		if (sub_gid_lock () == 0) {
-+			fprintf (stderr,
-+				_("%s: cannot lock %s; try again later.\n"),
-+				Prog, sub_gid_dbname ());
-+#ifdef WITH_AUDIT
-+			audit_logger (AUDIT_DEL_USER, Prog,
-+				"locking subordinate group file",
-+				user_name, (unsigned int) user_id,
-+				SHADOW_AUDIT_FAILURE);
-+#endif				/* WITH_AUDIT */
-+			fail_exit (E_SUB_GID_UPDATE);
-+		}
-+		sub_gid_locked = true;
-+		if (sub_gid_open (O_RDWR) == 0) {
-+			fprintf (stderr,
-+				_("%s: cannot open %s\n"), Prog, sub_gid_dbname ());
-+#ifdef WITH_AUDIT
-+			audit_logger (AUDIT_DEL_USER, Prog,
-+				"opening subordinate group file",
-+				user_name, (unsigned int) user_id,
-+				SHADOW_AUDIT_FAILURE);
-+#endif				/* WITH_AUDIT */
-+			fail_exit (E_SUB_GID_UPDATE);
-+		}
-+	}
- }
- 
- /*
-@@ -619,6 +720,18 @@
- 		         Prog, user_name, spw_dbname ());
- 		fail_exit (E_PW_UPDATE);
- 	}
-+	if (is_sub_uid && sub_uid_remove(user_name, 0, ULONG_MAX) == 0) {
-+		fprintf (stderr,
-+			_("%s: cannot remove entry %lu from %s\n"),
-+			Prog, (unsigned long)user_id, sub_uid_dbname ());
-+		fail_exit (E_SUB_UID_UPDATE);
-+	}
-+	if (is_sub_gid && sub_gid_remove(user_name, 0, ULONG_MAX) == 0) {
-+		fprintf (stderr,
-+			_("%s: cannot remove entry %lu from %s\n"),
-+			Prog, (unsigned long)user_id, sub_gid_dbname ());
-+		fail_exit (E_SUB_GID_UPDATE);
-+	}
- #ifdef WITH_AUDIT
- 	audit_logger (AUDIT_DEL_USER, Prog,
- 	              "deleting user entries",
-@@ -966,6 +1079,8 @@
- #ifdef SHADOWGRP
- 	is_shadow_grp = sgr_file_present ();
- #endif				/* SHADOWGRP */
-+	is_sub_uid = sub_uid_file_present ();
-+	is_sub_gid = sub_gid_file_present ();
- 
- 	/*
- 	 * Start with a quick check to see if the user exists.
diff --git a/debian/patches/userns/07_userns_useradd b/debian/patches/userns/07_userns_useradd
deleted file mode 100644
index 35757e9..0000000
--- a/debian/patches/userns/07_userns_useradd
+++ /dev/null
@@ -1,285 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:19:29 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id 61652C80DB; Tue, 22 Jan 2013 09:19:29 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=0.1 required=8.0 tests=BAD_ENC_HEADER,BAYES_00
-	autolearn=no version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id E0ABBC80F4
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:19:23 +0000 (UTC)
-Received: from out03.mta.xmission.com ([166.70.13.233])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZzB-0008QG-Kq; Tue, 22 Jan 2013 02:17:41 -0700
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out03.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZz7-0005Ui-1H; Tue, 22 Jan 2013 02:17:37 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZz4-0004tF-BP; Tue, 22 Jan 2013 02:17:36 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:17:30 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <8738xtr2z9.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX1/Jm5H2PcjgcLXEyKh9YL3DVs2WZBJhDB8=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 07/11] useradd: Add support for subordinate user identifiers
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2077                                                  
-Status: RO
-Content-Length: 6886
-Lines: 235
-
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- src/useradd.c |  141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 140 insertions(+), 1 deletions(-)
-
-Index: shadow/src/useradd.c
-===================================================================
---- shadow.orig/src/useradd.c	2013-02-01 15:27:52.668080362 -0600
-+++ shadow/src/useradd.c	2013-02-01 15:27:52.660080362 -0600
-@@ -65,6 +65,7 @@
- #include "sgroupio.h"
- #endif
- #include "shadowio.h"
-+#include "subordinateio.h"
- #ifdef WITH_TCB
- #include "tcbfuncs.h"
- #endif
-@@ -121,12 +122,20 @@
- static bool is_shadow_grp;
- static bool sgr_locked = false;
- #endif
-+static bool is_sub_uid = false;
-+static bool is_sub_gid = false;
- static bool pw_locked = false;
- static bool gr_locked = false;
- static bool spw_locked = false;
-+static bool sub_uid_locked = false;
-+static bool sub_gid_locked = false;
- static char **user_groups;	/* NULL-terminated list */
- static long sys_ngroups;
- static bool do_grp_update = false;	/* group files need to be updated */
-+static uid_t sub_uid_start;	/* New subordinate uid range */
-+static unsigned long sub_uid_count;
-+static gid_t sub_gid_start;	/* New subordinate gid range */
-+static unsigned long sub_gid_count;
- 
- static bool
-     bflg = false,		/* new default root of home directory */
-@@ -168,6 +177,8 @@
- #define E_GRP_UPDATE	10	/* can't update group file */
- #define E_HOMEDIR	12	/* can't create home directory */
- #define E_SE_UPDATE	14	/* can't update SELinux user mapping */
-+#define E_SUB_UID_UPDATE 16	/* can't update the subordinate uid file */
-+#define E_SUB_GID_UPDATE 18	/* can't update the subordinate gid file */
- 
- #define DGROUP			"GROUP="
- #define DHOME			"HOME="
-@@ -268,6 +279,32 @@
- 		}
- 	}
- #endif
-+	if (sub_uid_locked) {
-+		if (sub_uid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
-+#ifdef WITH_AUDIT
-+			audit_logger (AUDIT_ADD_USER, Prog,
-+			              "unlocking subodinate user file",
-+			              user_name, AUDIT_NO_ID,
-+			              SHADOW_AUDIT_FAILURE);
-+#endif
-+			/* continue */
-+		}
-+	}
-+	if (sub_gid_locked) {
-+		if (sub_gid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
-+#ifdef WITH_AUDIT
-+			audit_logger (AUDIT_ADD_USER, Prog,
-+			              "unlocking subodinate group file",
-+			              user_name, AUDIT_NO_ID,
-+			              SHADOW_AUDIT_FAILURE);
-+#endif
-+			/* continue */
-+		}
-+	}
- 
- #ifdef WITH_AUDIT
- 	audit_logger (AUDIT_ADD_USER, Prog,
-@@ -1379,6 +1416,18 @@
- 		}
- #endif
- 	}
-+	if (is_sub_uid  && (sub_uid_close () == 0)) {
-+		fprintf (stderr,
-+		         _("%s: failure while writing changes to %s\n"), Prog, sub_uid_dbname ());
-+		SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_uid_dbname ()));
-+		fail_exit (E_SUB_UID_UPDATE);
-+	}
-+	if (is_sub_gid  && (sub_gid_close () == 0)) {
-+		fprintf (stderr,
-+		         _("%s: failure while writing changes to %s\n"), Prog, sub_gid_dbname ());
-+		SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_gid_dbname ()));
-+		fail_exit (E_SUB_GID_UPDATE);
-+	}
- 	if (is_shadow_pwd) {
- 		if (spw_unlock () == 0) {
- 			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
-@@ -1433,6 +1482,34 @@
- 		sgr_locked = false;
- 	}
- #endif
-+	if (is_sub_uid) {
-+		if (sub_uid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
-+#ifdef WITH_AUDIT
-+			audit_logger (AUDIT_ADD_USER, Prog,
-+				"unlocking subordinate user file",
-+				user_name, AUDIT_NO_ID,
-+				SHADOW_AUDIT_FAILURE);
-+#endif
-+			/* continue */
-+		}
-+		sub_uid_locked = false;
-+	}
-+	if (is_sub_gid) {
-+		if (sub_gid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
-+#ifdef WITH_AUDIT
-+			audit_logger (AUDIT_ADD_USER, Prog,
-+				"unlocking subordinate group file",
-+				user_name, AUDIT_NO_ID,
-+				SHADOW_AUDIT_FAILURE);
-+#endif
-+			/* continue */
-+		}
-+		sub_gid_locked = false;
-+	}
- }
- 
- /*
-@@ -1487,6 +1564,36 @@
- 		}
- 	}
- #endif
-+	if (is_sub_uid) {
-+		if (sub_uid_lock () == 0) {
-+			fprintf (stderr,
-+			         _("%s: cannot lock %s; try again later.\n"),
-+			         Prog, sub_uid_dbname ());
-+			fail_exit (E_SUB_UID_UPDATE);
-+		}
-+		sub_uid_locked = true;
-+		if (sub_uid_open (O_RDWR) == 0) {
-+			fprintf (stderr,
-+			         _("%s: cannot open %s\n"),
-+			         Prog, sub_uid_dbname ());
-+			fail_exit (E_SUB_UID_UPDATE);
-+		}
-+	}
-+	if (is_sub_gid) {
-+		if (sub_gid_lock () == 0) {
-+			fprintf (stderr,
-+			         _("%s: cannot lock %s; try again later.\n"),
-+			         Prog, sub_gid_dbname ());
-+			fail_exit (E_SUB_GID_UPDATE);
-+		}
-+		sub_gid_locked = true;
-+		if (sub_gid_open (O_RDWR) == 0) {
-+			fprintf (stderr,
-+			         _("%s: cannot open %s\n"),
-+			         Prog, sub_gid_dbname ());
-+			fail_exit (E_SUB_GID_UPDATE);
-+		}
-+	}
- }
- 
- static void open_shadow (void)
-@@ -1733,13 +1840,27 @@
- #endif
- 		fail_exit (E_PW_UPDATE);
- 	}
-+	if (is_sub_uid &&
-+	    (sub_uid_add(user_name, sub_uid_start, sub_uid_count) == 0)) {
-+		fprintf (stderr,
-+		         _("%s: failed to prepare the new %s entry\n"),
-+		         Prog, sub_uid_dbname ());
-+		fail_exit (E_SUB_UID_UPDATE);
-+	}
-+	if (is_sub_gid &&
-+	    (sub_gid_add(user_name, sub_gid_start, sub_gid_count) == 0)) {
-+		fprintf (stderr,
-+		         _("%s: failed to prepare the new %s entry\n"),
-+		         Prog, sub_uid_dbname ());
-+		fail_exit (E_SUB_GID_UPDATE);
-+	}
-+
- #ifdef WITH_AUDIT
- 	audit_logger (AUDIT_ADD_USER, Prog,
- 	              "adding user",
- 	              user_name, (unsigned int) user_id,
- 	              SHADOW_AUDIT_SUCCESS);
- #endif
--
- 	/*
- 	 * Do any group file updates for this user.
- 	 */
-@@ -1885,6 +2006,8 @@
- #ifdef SHADOWGRP
- 	is_shadow_grp = sgr_file_present ();
- #endif
-+	is_sub_uid = sub_uid_file_present ();
-+	is_sub_gid = sub_gid_file_present ();
- 
- 	get_defaults ();
- 
-@@ -2035,6 +2158,22 @@
- 		grp_add ();
- 	}
- 
-+	if (is_sub_uid) {
-+		if (find_new_sub_uids(user_name, &sub_uid_start, &sub_uid_count) < 0) {
-+			fprintf (stderr,
-+				_("%s: can't find subordinate user range\n"),
-+				Prog);
-+			fail_exit(E_SUB_UID_UPDATE);
-+		}
-+	}
-+	if (is_sub_gid) {
-+		if (find_new_sub_gids(user_name, &sub_gid_start, &sub_gid_count) < 0) {
-+			fprintf (stderr,
-+				_("%s: can't find subordinate group range\n"),
-+				Prog);
-+			fail_exit(E_SUB_GID_UPDATE);
-+		}
-+	}
- 	usr_update ();
- 
- 	if (mflg) {
diff --git a/debian/patches/userns/08_userns_detect_busy_subids b/debian/patches/userns/08_userns_detect_busy_subids
deleted file mode 100644
index 72c2862..0000000
--- a/debian/patches/userns/08_userns_detect_busy_subids
+++ /dev/null
@@ -1,133 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:19:49 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id E0EA3C80F4; Tue, 22 Jan 2013 09:19:49 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=-2.2 required=8.0 tests=BAD_ENC_HEADER,BAYES_00,
-	RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id 1A2C7C80D1
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:19:46 +0000 (UTC)
-Received: from out03.mta.xmission.com ([166.70.13.233])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZzX-00006D-G7; Tue, 22 Jan 2013 02:18:03 -0700
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out03.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZzV-0005Zh-Qq; Tue, 22 Jan 2013 02:18:02 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZzN-0004ul-H6; Tue, 22 Jan 2013 02:18:01 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:17:50 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <87y5flpoe9.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX1/ZWJZMWIVV2ekPIrRQjHLl4Oh/kdyWJUw=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 08/11] Add support for detecting busy subordinate user ids
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2078                                        
-Status: RO
-Content-Length: 2655
-Lines: 83
-
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- libmisc/user_busy.c |   18 +++++++++++++-----
- 1 files changed, 13 insertions(+), 5 deletions(-)
-
-Index: shadow/libmisc/user_busy.c
-===================================================================
---- shadow.orig/libmisc/user_busy.c	2013-02-01 15:27:52.952080357 -0600
-+++ shadow/libmisc/user_busy.c	2013-02-01 15:27:52.948080357 -0600
-@@ -38,11 +38,13 @@
- #include <stdio.h>
- #include <sys/types.h>
- #include <dirent.h>
-+#include <fcntl.h>
- #include "defines.h"
- #include "prototypes.h"
-+#include "subordinateio.h"
- 
- #ifdef __linux__
--static int check_status (const char *sname, uid_t uid);
-+static int check_status (const char *name, const char *sname, uid_t uid);
- static int user_busy_processes (const char *name, uid_t uid);
- #else				/* !__linux__ */
- static int user_busy_utmp (const char *name);
-@@ -102,7 +104,7 @@
- #endif				/* !__linux__ */
- 
- #ifdef __linux__
--static int check_status (const char *sname, uid_t uid)
-+static int check_status (const char *name, const char *sname, uid_t uid)
- {
- 	/* 40: /proc/xxxxxxxxxx/task/xxxxxxxxxx/status + \0 */
- 	char status[40];
-@@ -125,7 +127,10 @@
- 			            &ruid, &euid, &suid) == 3) {
- 				if (   (ruid == (unsigned long) uid)
- 				    || (euid == (unsigned long) uid)
--				    || (suid == (unsigned long) uid)) {
-+				    || (suid == (unsigned long) uid)
-+				    || have_sub_uids(name, ruid, 1)
-+				    || have_sub_uids(name, euid, 1)
-+				    || have_sub_uids(name, suid, 1)) {
- 					(void) fclose (sfile);
- 					return 1;
- 				}
-@@ -153,6 +158,8 @@
- 	struct stat sbroot;
- 	struct stat sbroot_process;
- 
-+	sub_uid_open (O_RDONLY);
-+
- 	proc = opendir ("/proc");
- 	if (proc == NULL) {
- 		perror ("opendir /proc");
-@@ -196,7 +203,7 @@
- 			continue;
- 		}
- 
--		if (check_status (tmp_d_name, uid) != 0) {
-+		if (check_status (name, tmp_d_name, uid) != 0) {
- 			(void) closedir (proc);
- 			fprintf (stderr,
- 			         _("%s: user %s is currently used by process %d\n"),
-@@ -216,7 +223,7 @@
- 				if (tid == pid) {
- 					continue;
- 				}
--				if (check_status (task_path+6, uid) != 0) {
-+				if (check_status (name, task_path+6, uid) != 0) {
- 					(void) closedir (proc);
- 					fprintf (stderr,
- 					         _("%s: user %s is currently used by process %d\n"),
-@@ -231,6 +238,7 @@
- 	}
- 
- 	(void) closedir (proc);
-+	sub_uid_close();
- 	return 0;
- }
- #endif				/* __linux__ */
diff --git a/debian/patches/userns/09_userns_usermod b/debian/patches/userns/09_userns_usermod
deleted file mode 100644
index 2fa5493..0000000
--- a/debian/patches/userns/09_userns_usermod
+++ /dev/null
@@ -1,536 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:20:27 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id 8625BC80F4; Tue, 22 Jan 2013 09:20:27 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=0.1 required=8.0 tests=BAD_ENC_HEADER,BAYES_00
-	autolearn=no version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id 69CACC80D1
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:20:23 +0000 (UTC)
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1Txa08-0000JL-Uo; Tue, 22 Jan 2013 02:18:41 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1TxZzw-0004wm-8g; Tue, 22 Jan 2013 02:18:40 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:18:24 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <87sj5tpodb.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX1/EkNiL4owL54HOscHbdbK8RucFTofOBo8=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 09/11] usermod: Add support for subordinate uids and gids.
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2079                                        
-Status: O
-Content-Length: 15455
-Lines: 491
-
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- man/usermod.8.xml |   80 +++++++++++++++++
- src/usermod.c     |  255 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
- 2 files changed, 332 insertions(+), 3 deletions(-)
-
-Index: shadow/man/usermod.8.xml
-===================================================================
---- shadow.orig/man/usermod.8.xml	2013-02-01 15:27:53.240080352 -0600
-+++ shadow/man/usermod.8.xml	2013-02-01 15:27:53.232080353 -0600
-@@ -391,6 +391,86 @@
-       </varlistentry>
-       <varlistentry>
- 	<term>
-+	  <option>-v</option>, <option>--add-sub-uids</option>
-+	  <replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
-+	</term>
-+	<listitem>
-+	  <para>
-+	    Add a range of subordinate uids to the users account. 
-+	  </para>
-+	  <para>
-+	    This option may be specified multiple times to add multiple ranges to a users account.
-+	  </para>
-+	  <para>
-+	     No checks will be performed with regard to
-+	     <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</option>, or
-+	     <option>SUB_UID_COUNT</option> from /etc/login.defs.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term>
-+	  <option>-V</option>, <option>--del-sub-uids</option>
-+	  <replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
-+	</term>
-+	<listitem>
-+	  <para>
-+	    Remove a range of subordinate uids from the users account.
-+	  </para>
-+	  <para>
-+	    This option may be specified multiple times to remove multiple ranges to a users account.
-+	    When both <option>--del-sub-uids</option> and <option>--add-sub-uids</option> are specified
-+	    remove of all subordinate uid ranges happens before any subordinate uid ranges are added.
-+	  </para>
-+	  <para>
-+	     No checks will be performed with regard to
-+	     <option>SUB_UID_MIN</option>, <option>SUB_UID_MAX</option>, or
-+	     <option>SUB_UID_COUNT</option> from /etc/login.defs.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term>
-+	  <option>-w</option>, <option>--add-sub-gids</option>
-+	  <replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
-+	</term>
-+	<listitem>
-+	  <para>
-+	    Add a range of subordinate gids to the users account.
-+	  </para>
-+	  <para>
-+	    This option may be specified multiple times to add multiple ranges to a users account.
-+	  </para>
-+	  <para>
-+	     No checks will be performed with regard to
-+	     <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</option>, or
-+	     <option>SUB_GID_COUNT</option> from /etc/login.defs.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term>
-+	  <option>-W</option>, <option>--del-sub-gids</option>
-+	  <replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
-+	</term>
-+	<listitem>
-+	  <para>
-+	    Remove a range of subordinate gids from the users account.
-+	  </para>
-+	  <para>
-+	    This option may be specified multiple times to remove multiple ranges to a users account.
-+	    When both <option>--del-sub-gids</option> and <option>--add-sub-gids</option> are specified
-+	    remove of all subordinate gid ranges happens before any subordinate gid ranges are added.
-+	  </para>
-+	  <para>
-+	     No checks will be performed with regard to
-+	     <option>SUB_GID_MIN</option>, <option>SUB_GID_MAX</option>, or
-+	     <option>SUB_GID_COUNT</option> from /etc/login.defs.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term>
- 	  <option>-Z</option>, <option>--selinux-user</option>
- 	  <replaceable>SEUSER</replaceable>
- 	</term>
-Index: shadow/src/usermod.c
-===================================================================
---- shadow.orig/src/usermod.c	2013-02-01 15:27:53.240080352 -0600
-+++ shadow/src/usermod.c	2013-02-01 15:27:53.236080353 -0600
-@@ -63,6 +63,7 @@
- #include "sgroupio.h"
- #endif
- #include "shadowio.h"
-+#include "subordinateio.h"
- #ifdef WITH_TCB
- #include "tcbfuncs.h"
- #endif
-@@ -86,6 +87,8 @@
- /* #define E_NOSPACE	11	   insufficient space to move home dir */
- #define E_HOMEDIR	12	/* unable to complete home dir move */
- #define E_SE_UPDATE	13	/* can't update SELinux user mapping */
-+#define E_SUB_UID_UPDATE 16	/* can't update the subordinate uid file */
-+#define E_SUB_GID_UPDATE 18	/* can't update the subordinate gid file */
- #define	VALID(s)	(strcspn (s, ":\n") == strlen (s))
- /*
-  * Global variables
-@@ -133,7 +136,11 @@
-     Zflg = false,		/* new selinux user */
- #endif
-     uflg = false,		/* specify new user ID */
--    Uflg = false;		/* unlock the password */
-+    Uflg = false,		/* unlock the password */
-+    vflg = false,		/*    add subordinate uids */
-+    Vflg = false,		/* delete subordinate uids */
-+    wflg = false,		/*    add subordinate gids */
-+    Wflg = false;		/* delete subordinate gids */
- 
- static bool is_shadow_pwd;
- 
-@@ -141,12 +148,17 @@
- static bool is_shadow_grp;
- #endif
- 
-+static bool is_sub_uid = false;
-+static bool is_sub_gid = false;
-+
- static bool pw_locked  = false;
- static bool spw_locked = false;
- static bool gr_locked  = false;
- #ifdef SHADOWGRP
- static bool sgr_locked = false;
- #endif
-+static bool sub_uid_locked = false;
-+static bool sub_gid_locked = false;
- 
- 
- /* local function prototypes */
-@@ -302,6 +314,69 @@
- 	return 0;
- }
- 
-+struct ulong_range
-+{
-+	unsigned long first;
-+	unsigned long last;
-+};
-+
-+static struct ulong_range getulong_range(const char *str)
-+{
-+	struct ulong_range result = { .first = ULONG_MAX, .last = 0 };
-+	unsigned long long first, last;
-+	char *pos;
-+
-+	errno = 0;
-+	first = strtoll(str, &pos, 10);
-+	if (('\0' == *str) || ('-' != *pos ) || (ERANGE == errno) ||
-+	    (first != (unsigned long int)first))
-+		goto out;
-+
-+	errno = 0;
-+	last = strtoul(pos + 1, &pos, 10);
-+	if (('\0' != *pos ) || (ERANGE == errno) ||
-+	    (last != (unsigned long int)last))
-+		goto out;
-+
-+	if (first > last)
-+		goto out;
-+
-+	result.first = (unsigned long int)first;
-+	result.last = (unsigned long int)last;
-+out:
-+	return result;
-+	
-+}
-+
-+struct ulong_range_list_entry {
-+	struct ulong_range_list_entry *next;
-+	struct ulong_range range;
-+};
-+
-+static struct ulong_range_list_entry *add_sub_uids = NULL, *del_sub_uids = NULL;
-+static struct ulong_range_list_entry *add_sub_gids = NULL, *del_sub_gids = NULL;
-+
-+static int prepend_range(const char *str, struct ulong_range_list_entry **head)
-+{
-+	struct ulong_range range;
-+	struct ulong_range_list_entry *entry;
-+	range = getulong_range(str);
-+	if (range.first > range.last)
-+		return 0;
-+
-+	entry = malloc(sizeof(*entry));
-+	if (!entry) {
-+		fprintf (stderr,
-+			_("%s: failed to allocate memory: %s\n"),
-+			Prog, strerror (errno));
-+		return 0;
-+	}
-+	entry->next = *head;
-+	entry->range = range;
-+	*head = entry;
-+	return 1;
-+}
-+
- /*
-  * usage - display usage message and exit
-  */
-@@ -334,6 +409,10 @@
- 	(void) fputs (_("  -s, --shell SHELL             new login shell for the user account\n"), usageout);
- 	(void) fputs (_("  -u, --uid UID                 new UID for the user account\n"), usageout);
- 	(void) fputs (_("  -U, --unlock                  unlock the user account\n"), usageout);
-+	(void) fputs (_("  -v, --add-subuids FIRST-LAST  add range of subordinate uids\n"), usageout);
-+	(void) fputs (_("  -V, --del-subuids FIRST-LAST  remvoe range of subordinate uids\n"), usageout);
-+	(void) fputs (_("  -w, --add-subgids FIRST-LAST  add range of subordinate gids\n"), usageout);
-+	(void) fputs (_("  -W, --del-subgids FIRST-LAST  remvoe range of subordinate gids\n"), usageout);
- #ifdef WITH_SELINUX
- 	(void) fputs (_("  -Z, --selinux-user SEUSER     new SELinux user mapping for the user account\n"), usageout);
- #endif				/* WITH_SELINUX */
-@@ -590,6 +669,20 @@
- 			/* continue */
- 		}
- 	}
-+	if (sub_uid_locked) {
-+		if (sub_uid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
-+			/* continue */
-+		}
-+	}
-+	if (sub_gid_locked) {
-+		if (sub_gid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
-+			/* continue */
-+		}
-+	}
- 
- #ifdef WITH_AUDIT
- 	audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
-@@ -889,6 +982,10 @@
- 			{"shell",        required_argument, NULL, 's'},
- 			{"uid",          required_argument, NULL, 'u'},
- 			{"unlock",       no_argument,       NULL, 'U'},
-+			{"add-subuids",  required_argument, NULL, 'v'},
-+			{"del-subuids",  required_argument, NULL, 'V'},
-+ 			{"add-subgids",  required_argument, NULL, 'w'},
-+ 			{"del-subgids",  required_argument, NULL, 'W'},
- #ifdef WITH_SELINUX
- 			{"selinux-user", required_argument, NULL, 'Z'},
- #endif				/* WITH_SELINUX */
-@@ -1018,6 +1115,41 @@
- 			case 'U':
- 				Uflg = true;
- 				break;
-+			case 'v':
-+				if (prepend_range (optarg, &add_sub_uids) == 0) {
-+					fprintf (stderr,
-+						_("%s: invalid subordinate uid range '%s'\n"),
-+						Prog, optarg);
-+					exit(E_BAD_ARG);
-+				}
-+				vflg = true;
-+				break;
-+			case 'V':
-+				if (prepend_range (optarg, &del_sub_uids) == 0) {
-+					fprintf (stderr,
-+						_("%s: invalid subordinate uid range '%s'\n"),
-+						Prog, optarg);
-+					exit(E_BAD_ARG);
-+				}
-+				Vflg = true;
-+				break;
-+			case 'w':
-+				if (prepend_range (optarg, &add_sub_gids) == 0) {
-+					fprintf (stderr,
-+						_("%s: invalid subordinate gid range '%s'\n"),
-+						Prog, optarg);
-+					exit(E_BAD_ARG);
-+				}
-+				wflg = true;
-+			case 'W':
-+				if (prepend_range (optarg, &del_sub_gids) == 0) {
-+					fprintf (stderr,
-+						_("%s: invalid subordinate gid range '%s'\n"),
-+						Prog, optarg);
-+					exit(E_BAD_ARG);
-+				}
-+				Wflg = true;
-+				break;
- #ifdef WITH_SELINUX
- 			case 'Z':
- 				if (is_selinux_enabled () > 0) {
-@@ -1170,6 +1302,7 @@
- 
- 	if (!(Uflg || uflg || sflg || pflg || mflg || Lflg ||
- 	      lflg || Gflg || gflg || fflg || eflg || dflg || cflg
-+	      || vflg || Vflg || wflg || Wflg
- #ifdef WITH_SELINUX
- 	      || Zflg
- #endif				/* WITH_SELINUX */
-@@ -1200,6 +1333,7 @@
- 		         Prog, (unsigned long) user_newid);
- 		exit (E_UID_IN_USE);
- 	}
-+
- }
- 
- /*
-@@ -1248,6 +1382,10 @@
- 				         sgr_dbname ()));
- 				fail_exit (E_GRP_UPDATE);
- 			}
-+		}
-+#endif
-+#ifdef SHADOWGRP
-+		if (is_shadow_grp) {
- 			if (sgr_unlock () == 0) {
- 				fprintf (stderr,
- 				         _("%s: failed to unlock %s\n"),
-@@ -1296,6 +1434,33 @@
- 	sgr_locked = false;
- #endif
- 
-+	if (vflg || Vflg) {
-+		if (!is_sub_uid || (sub_uid_close () == 0)) {
-+			fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_uid_dbname ()));
-+			fail_exit (E_SUB_UID_UPDATE);
-+		}
-+		if (!is_sub_uid || (sub_uid_unlock () == 0)) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
-+			/* continue */
-+		}
-+		sub_uid_locked = false;
-+	}
-+	if (wflg || Wflg) {
-+		if (!is_sub_gid || (sub_gid_close () == 0)) {
-+			fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_gid_dbname ()));
-+			fail_exit (E_SUB_GID_UPDATE);
-+		}
-+		if (!is_sub_gid || (sub_gid_unlock () == 0)) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
-+			/* continue */
-+		}
-+		sub_gid_locked = false;
-+	}
-+
- 	/*
- 	 * Close the DBM and/or flat files
- 	 */
-@@ -1375,6 +1540,36 @@
- 		}
- #endif
- 	}
-+	if (vflg || Vflg) {
-+		if (!is_sub_uid || (sub_uid_lock () == 0)) {
-+			fprintf (stderr,
-+			         _("%s: cannot lock %s; try again later.\n"),
-+			         Prog, sub_uid_dbname ());
-+			fail_exit (E_SUB_UID_UPDATE);
-+		}
-+		sub_uid_locked = true;
-+		if (!is_sub_uid || (sub_uid_open (O_RDWR) == 0)) {
-+			fprintf (stderr,
-+			         _("%s: cannot open %s\n"),
-+			         Prog, sub_uid_dbname ());
-+			fail_exit (E_SUB_UID_UPDATE);
-+		}
-+	}
-+	if (wflg || Wflg) {
-+		if (!is_sub_gid || (sub_gid_lock () == 0)) {
-+			fprintf (stderr,
-+			         _("%s: cannot lock %s; try again later.\n"),
-+			         Prog, sub_gid_dbname ());
-+			fail_exit (E_SUB_GID_UPDATE);
-+		}
-+		sub_gid_locked = true;
-+		if (!is_sub_gid || (sub_gid_open (O_RDWR) == 0)) {
-+			fprintf (stderr,
-+			         _("%s: cannot open %s\n"),
-+			         Prog, sub_gid_dbname ());
-+			fail_exit (E_SUB_GID_UPDATE);
-+		}
-+	}
- }
- 
- /*
-@@ -1476,6 +1671,58 @@
- 			fail_exit (E_PW_UPDATE);
- 		}
- 	}
-+	if (Vflg) {
-+		struct ulong_range_list_entry *ptr;
-+		for (ptr = del_sub_uids; ptr != NULL; ptr = ptr->next) {
-+			unsigned long count = ptr->range.last - ptr->range.first + 1;
-+			if (sub_uid_remove(user_name, ptr->range.first, count) == 0) {
-+				fprintf (stderr,
-+					_("%s: failed to remove uid range %lu-%lu from '%s'\n"),
-+					Prog, ptr->range.first, ptr->range.last, 
-+					sub_uid_dbname ());
-+				fail_exit (E_SUB_UID_UPDATE);
-+			}
-+		}
-+	}
-+	if (vflg) {
-+		struct ulong_range_list_entry *ptr;
-+		for (ptr = add_sub_uids; ptr != NULL; ptr = ptr->next) {
-+			unsigned long count = ptr->range.last - ptr->range.first + 1;
-+			if (sub_uid_add(user_name, ptr->range.first, count) == 0) {
-+				fprintf (stderr,
-+					_("%s: failed to add uid range %lu-%lu from '%s'\n"),
-+					Prog, ptr->range.first, ptr->range.last, 
-+					sub_uid_dbname ());
-+				fail_exit (E_SUB_UID_UPDATE);
-+			}
-+		}
-+	}
-+	if (Wflg) {
-+		struct ulong_range_list_entry *ptr;
-+		for (ptr = del_sub_gids; ptr != NULL; ptr = ptr->next) {
-+			unsigned long count = ptr->range.last - ptr->range.first + 1;
-+			if (sub_gid_remove(user_name, ptr->range.first, count) == 0) {
-+				fprintf (stderr,
-+					_("%s: failed to remove gid range %lu-%lu from '%s'\n"),
-+					Prog, ptr->range.first, ptr->range.last, 
-+					sub_gid_dbname ());
-+				fail_exit (E_SUB_GID_UPDATE);
-+			}
-+		}
-+	}
-+	if (wflg) {
-+		struct ulong_range_list_entry *ptr;
-+		for (ptr = add_sub_gids; ptr != NULL; ptr = ptr->next) {
-+			unsigned long count = ptr->range.last - ptr->range.first + 1;
-+			if (sub_gid_add(user_name, ptr->range.first, count) == 0) {
-+				fprintf (stderr,
-+					_("%s: failed to add gid range %lu-%lu from '%s'\n"),
-+					Prog, ptr->range.first, ptr->range.last, 
-+					sub_gid_dbname ());
-+				fail_exit (E_SUB_GID_UPDATE);
-+			}
-+		}
-+	}
- }
- 
- /*
-@@ -1811,6 +2058,8 @@
- #ifdef SHADOWGRP
- 	is_shadow_grp = sgr_file_present ();
- #endif
-+	is_sub_uid = sub_uid_file_present ();
-+	is_sub_gid = sub_gid_file_present ();
- 
- 	process_flags (argc, argv);
- 
-@@ -1818,7 +2067,7 @@
- 	 * The home directory, the username and the user's UID should not
- 	 * be changed while the user is logged in.
- 	 */
--	if (   (uflg || lflg || dflg)
-+	if (   (uflg || lflg || dflg || Vflg || Wflg)
- 	    && (user_busy (user_name, user_id) != 0)) {
- 		exit (E_USER_BUSY);
- 	}
-@@ -1871,7 +2120,7 @@
- 	 */
- 	open_files ();
- 	if (   cflg || dflg || eflg || fflg || gflg || Lflg || lflg || pflg
--	    || sflg || uflg || Uflg) {
-+	    || sflg || uflg || Uflg || vflg || Vflg || wflg || Wflg) {
- 		usr_update ();
- 	}
- 	if (Gflg || lflg) {
diff --git a/debian/patches/userns/10_userns_newusers b/debian/patches/userns/10_userns_newusers
deleted file mode 100644
index 8072cf7..0000000
--- a/debian/patches/userns/10_userns_newusers
+++ /dev/null
@@ -1,256 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:21:21 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id ADE59C80F5; Tue, 22 Jan 2013 09:21:21 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=-2.2 required=8.0 tests=BAD_ENC_HEADER,BAYES_00,
-	RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id D56AEC80DB
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:21:17 +0000 (UTC)
-Received: from out03.mta.xmission.com ([166.70.13.233])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1Txa11-0000bo-MQ; Tue, 22 Jan 2013 02:19:35 -0700
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out03.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1Txa11-0005wx-1p; Tue, 22 Jan 2013 02:19:35 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1Txa0y-000519-2O; Tue, 22 Jan 2013 02:19:34 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:19:28 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <87k3r5pobj.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX1+qhualZ5pxk+DVqanIJA7JrJwlPXicL8c=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 10/11] newusers: Add support for assiging subordinate uids and gids.
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2080                                        
-Status: O
-Content-Length: 5597
-Lines: 206
-
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- src/newusers.c |  124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 124 insertions(+), 0 deletions(-)
-
-Index: shadow/src/newusers.c
-===================================================================
---- shadow.orig/src/newusers.c	2013-02-01 15:27:53.548080347 -0600
-+++ shadow/src/newusers.c	2013-02-01 15:27:53.540080347 -0600
-@@ -65,6 +65,7 @@
- #include "pwio.h"
- #include "sgroupio.h"
- #include "shadowio.h"
-+#include "subordinateio.h"
- #include "chkname.h"
- 
- /*
-@@ -82,6 +83,8 @@
- #endif				/* USE_SHA_CRYPT */
- #endif				/* !USE_PAM */
- 
-+static bool is_sub_uid = false;
-+static bool is_sub_gid = false;
- static bool is_shadow;
- #ifdef SHADOWGRP
- static bool is_shadow_grp;
-@@ -90,6 +93,8 @@
- static bool pw_locked = false;
- static bool gr_locked = false;
- static bool spw_locked = false;
-+static bool sub_uid_locked = false;
-+static bool sub_gid_locked = false;
- 
- /* local function prototypes */
- static void usage (int status);
-@@ -178,6 +183,20 @@
- 		}
- 	}
- #endif
-+	if (sub_uid_locked) {
-+		if (sub_uid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
-+			/* continue */
-+		}
-+	}
-+	if (sub_gid_locked) {
-+		if (sub_gid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
-+			/* continue */
-+		}
-+	}
- 
- 	exit (code);
- }
-@@ -732,6 +751,24 @@
- 		sgr_locked = true;
- 	}
- #endif
-+	if (is_sub_uid) {
-+		if (sub_uid_lock () == 0) {
-+			fprintf (stderr,
-+			         _("%s: cannot lock %s; try again later.\n"),
-+			         Prog, sub_uid_dbname ());
-+			fail_exit (EXIT_FAILURE);
-+		}
-+		sub_uid_locked = true;
-+	}
-+	if (is_sub_gid) {
-+		if (sub_gid_lock () == 0) {
-+			fprintf (stderr,
-+			         _("%s: cannot lock %s; try again later.\n"),
-+			         Prog, sub_gid_dbname ());
-+			fail_exit (EXIT_FAILURE);
-+		}
-+		sub_gid_locked = true;
-+	}
- 
- 	if (pw_open (O_RDWR) == 0) {
- 		fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ());
-@@ -751,6 +788,22 @@
- 		fail_exit (EXIT_FAILURE);
- 	}
- #endif
-+	if (is_sub_uid) {
-+		if (sub_uid_open (O_RDWR) == 0) {
-+			fprintf (stderr,
-+			         _("%s: cannot open %s\n"),
-+			         Prog, sub_uid_dbname ());
-+			fail_exit (EXIT_FAILURE);
-+		}
-+	}
-+	if (is_sub_gid) {
-+		if (sub_gid_open (O_RDWR) == 0) {
-+			fprintf (stderr,
-+			         _("%s: cannot open %s\n"),
-+			         Prog, sub_gid_dbname ());
-+			fail_exit (EXIT_FAILURE);
-+		}
-+	}
- }
- 
- /*
-@@ -795,6 +848,19 @@
- 		SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
- 		fail_exit (EXIT_FAILURE);
- 	}
-+	if (is_sub_uid  && (sub_uid_close () == 0)) {
-+		fprintf (stderr,
-+		         _("%s: failure while writing changes to %s\n"), Prog, sub_uid_dbname ());
-+		SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_uid_dbname ()));
-+		fail_exit (EXIT_FAILURE);
-+	}
-+	if (is_sub_gid  && (sub_gid_close () == 0)) {
-+		fprintf (stderr,
-+		         _("%s: failure while writing changes to %s\n"), Prog, sub_gid_dbname ());
-+		SYSLOG ((LOG_ERR, "failure while writing changes to %s", sub_gid_dbname ()));
-+		fail_exit (EXIT_FAILURE);
-+	}
-+
- 	if (gr_unlock () == 0) {
- 		fprintf (stderr,
- 		         _("%s: failed to unlock %s\n"),
-@@ -823,6 +889,22 @@
- 		sgr_locked = false;
- 	}
- #endif
-+	if (is_sub_uid) {
-+		if (sub_uid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_uid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_uid_dbname ()));
-+			/* continue */
-+		}
-+		sub_uid_locked = false;
-+	}
-+	if (is_sub_gid) {
-+		if (sub_gid_unlock () == 0) {
-+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sub_gid_dbname ());
-+			SYSLOG ((LOG_ERR, "failed to unlock %s", sub_gid_dbname ()));
-+			/* continue */
-+		}
-+		sub_gid_locked = false;
-+	}
- }
- 
- int main (int argc, char **argv)
-@@ -864,6 +946,8 @@
- #ifdef SHADOWGRP
- 	is_shadow_grp = sgr_file_present ();
- #endif
-+	is_sub_uid = sub_uid_file_present ();
-+	is_sub_gid = sub_gid_file_present ();
- 
- 	open_files ();
- 
-@@ -1044,6 +1128,46 @@
- 			errors++;
- 			continue;
- 		}
-+
-+		/*
-+		 * Add subordinate uids if the user does not have them.
-+		 */
-+		if (is_sub_uid && !sub_uid_assigned(fields[0])) {
-+			uid_t sub_uid_start = 0;
-+			unsigned long sub_uid_count = 0;
-+			if (find_new_sub_uids(fields[0], &sub_uid_start, &sub_uid_count) == 0) {
-+				if (sub_uid_add(fields[0], sub_uid_start, sub_uid_count) == 0) {
-+					fprintf (stderr,
-+						_("%s: failed to prepare new %s entry\n"),
-+						Prog, sub_uid_dbname ());
-+				}
-+			} else {
-+				fprintf (stderr,
-+					_("%s: can't find subordinate user range\n"),
-+					Prog);
-+				errors++;
-+			}
-+		}
-+	
-+		/*
-+		 * Add subordinate gids if the user does not have them.
-+		 */
-+		if (is_sub_gid && !sub_gid_assigned(fields[0])) {
-+			gid_t sub_gid_start = 0;
-+			unsigned long sub_gid_count = 0;
-+			if (find_new_sub_gids(fields[0], &sub_gid_start, &sub_gid_count) == 0) {
-+				if (sub_gid_add(fields[0], sub_gid_start, sub_gid_count) == 0) {
-+					fprintf (stderr,
-+						_("%s: failed to prepare new %s entry\n"),
-+						Prog, sub_uid_dbname ());
-+				}
-+			} else {
-+				fprintf (stderr,
-+					_("%s: can't find subordinate group range\n"),
-+					Prog);
-+				errors++;
-+			}
-+		}
- 	}
- 
- 	/*
diff --git a/debian/patches/userns/11_userns_newxidmap b/debian/patches/userns/11_userns_newxidmap
deleted file mode 100644
index f4e6a19..0000000
--- a/debian/patches/userns/11_userns_newxidmap
+++ /dev/null
@@ -1,1004 +0,0 @@
-From ebiederm at xmission.com  Tue Jan 22 09:22:07 2013
-Return-Path: <ebiederm at xmission.com>
-X-Original-To: serge at hallyn.com
-Delivered-To: serge at hallyn.com
-Received: by mail.hallyn.com (Postfix, from userid 5001)
-	id E5D16C80F4; Tue, 22 Jan 2013 09:22:07 +0000 (UTC)
-X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail
-X-Spam-Level: 
-X-Spam-Status: No, score=-0.2 required=8.0 tests=BAD_ENC_HEADER,BAYES_00,
-	LONGWORDS,RCVD_IN_DNSWL_MED autolearn=no version=3.3.1
-Received: from out02.mta.xmission.com (out02.mta.xmission.com [166.70.13.232])
-	(using TLSv1 with cipher AES256-SHA (256/256 bits))
-	(No client certificate requested)
-	by mail.hallyn.com (Postfix) with ESMTPS id 2E206C80D1
-	for <serge at hallyn.com>; Tue, 22 Jan 2013 09:22:03 +0000 (UTC)
-Received: from in02.mta.xmission.com ([166.70.13.52])
-	by out02.mta.xmission.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1Txa1k-0000xE-Ix; Tue, 22 Jan 2013 02:20:20 -0700
-Received: from c-98-207-153-68.hsd1.ca.comcast.net ([98.207.153.68] helo=eric-ThinkPad-X220.xmission.com)
-	by in02.mta.xmission.com with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)
-	(Exim 4.76)
-	(envelope-from <ebiederm at xmission.com>)
-	id 1Txa1b-00059T-Lu; Tue, 22 Jan 2013 02:20:20 -0700
-From: ebiederm at xmission.com (Eric W. Biederman)
-To: Nicolas =?utf-8?Q?Fran=C3=A7ois?= <nicolas.francois at centraliens.net>
-Cc: <Pkg-shadow-devel at lists.alioth.debian.org>,  Linux Containers <containers at lists.linux-foundation.org>,  "Michael Kerrisk \(man-pages\)" <mtk.manpages at gmail.com>,  "Serge E. Hallyn" <serge at hallyn.com>
-References: <87d2wxshu0.fsf at xmission.com>
-Date: Tue, 22 Jan 2013 01:20:07 -0800
-In-Reply-To: <87d2wxshu0.fsf at xmission.com> (Eric W. Biederman's message of
-	"Tue, 22 Jan 2013 01:11:19 -0800")
-Message-ID: <87ehhdpoag.fsf at xmission.com>
-User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)
-MIME-Version: 1.0
-Content-Type: text/plain
-X-XM-AID: U2FsdGVkX1/nox3f5bDq7zL9eOiGra/HoCkv7o07HDs=
-X-SA-Exim-Connect-IP: 98.207.153.68
-X-SA-Exim-Mail-From: ebiederm at xmission.com
-Subject: [PATCH 11/11] newuidmap,newgidmap: New suid helpers for using subordinate uids and gids
-X-SA-Exim-Version: 4.2.1 (built Wed, 14 Nov 2012 14:26:46 -0700)
-X-SA-Exim-Scanned: Yes (on in02.mta.xmission.com)
-X-UID: 2081                                                  
-Status: RO
-Content-Length: 31344
-Lines: 965
-
-
-Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
----
- libmisc/Makefile.am |    2 +
- libmisc/idmapping.c |  126 +++++++++++++++++++++++++++++++++++
- libmisc/idmapping.h |   44 ++++++++++++
- man/Makefile.am     |    4 +
- man/newgidmap.1.xml |  157 +++++++++++++++++++++++++++++++++++++++++++
- man/newuidmap.1.xml |  154 +++++++++++++++++++++++++++++++++++++++++++
- src/Makefile.am     |    5 +-
- src/newgidmap.c     |  183 +++++++++++++++++++++++++++++++++++++++++++++++++++
- src/newuidmap.c     |  183 +++++++++++++++++++++++++++++++++++++++++++++++++++
- 9 files changed, 856 insertions(+), 2 deletions(-)
- create mode 100644 libmisc/idmapping.c
- create mode 100644 libmisc/idmapping.h
- create mode 100644 man/newgidmap.1.xml
- create mode 100644 man/newuidmap.1.xml
- create mode 100644 src/newgidmap.c
- create mode 100644 src/newuidmap.c
-
-Index: shadow/libmisc/Makefile.am
-===================================================================
---- shadow.orig/libmisc/Makefile.am	2013-02-01 15:27:53.836080342 -0600
-+++ shadow/libmisc/Makefile.am	2013-02-01 15:27:53.828080343 -0600
-@@ -32,6 +32,8 @@
- 	getgr_nam_gid.c \
- 	getrange.c \
- 	hushed.c \
-+	idmapping.h \
-+	idmapping.c \
- 	isexpired.c \
- 	limits.c \
- 	list.c log.c \
-Index: shadow/libmisc/idmapping.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/libmisc/idmapping.c	2013-02-01 15:27:53.828080343 -0600
-@@ -0,0 +1,126 @@
-+/*
-+ * Copyright (c) 2013 Eric Biederman
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the copyright holders or contributors may not be used to
-+ *    endorse or promote products derived from this software without
-+ *    specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#include <config.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include <limits.h>
-+#include <stdlib.h>
-+#include "prototypes.h"
-+#include "idmapping.h"
-+
-+struct map_range *get_map_ranges(int ranges, int argc, char **argv)
-+{
-+	struct map_range *mappings, *mapping;
-+	int idx, argidx;
-+
-+	if ((ranges * 3) > argc) {
-+		fprintf(stderr, "ranges: %u argc: %d\n",
-+			ranges, argc);
-+		fprintf(stderr,
-+			_( "%s: Not enough arguments to form %u mappings\n"),
-+			Prog, ranges);
-+		return NULL;
-+	}
-+
-+	mappings = calloc(ranges, sizeof(*mappings));
-+	if (!mappings) {
-+		fprintf(stderr, _( "%s: Memory allocation failure\n"),
-+			Prog);
-+		exit(EXIT_FAILURE);
-+	}
-+
-+	/* Gather up the ranges from the command line */
-+	mapping = mappings;
-+	for (idx = 0; idx < ranges; idx++, argidx += 3, mapping++) {
-+		if (!getulong(argv[argidx + 0], &mapping->upper))
-+			return NULL;
-+		if (!getulong(argv[argidx + 1], &mapping->lower))
-+			return NULL;
-+		if (!getulong(argv[argidx + 2], &mapping->count))
-+			return NULL;
-+	}
-+	return mappings;
-+}
-+
-+/* Number of ascii digits needed to print any unsigned long in decimal.
-+ * There are approximately 10 bits for every 3 decimal digits.
-+ * So from bits to digits the formula is roundup((Number of bits)/10) * 3.
-+ * For common sizes of integers this works out to:
-+ *  2bytes -->  6 ascii estimate  -> 65536  (5 real)
-+ *  4bytes --> 12 ascii estimated -> 4294967296 (10 real)
-+ *  8bytes --> 21 ascii estimated -> 18446744073709551616 (20 real)
-+ * 16bytes --> 39 ascii estimated -> 340282366920938463463374607431768211456 (39 real)
-+ */
-+#define ULONG_DIGITS ((((sizeof(unsigned long) * CHAR_BIT) + 9)/10)*3)
-+
-+
-+void write_mapping(int proc_dir_fd, int ranges, struct map_range *mappings,
-+	const char *map_file)
-+{
-+	int idx;
-+	struct map_range *mapping;
-+	size_t bufsize;
-+	char *buf, *pos;
-+	int fd;
-+
-+	bufsize = ranges * ((ULONG_DIGITS  + 1) * 3);
-+	pos = buf = xmalloc(bufsize);
-+
-+	/* Build the mapping command */
-+	mapping = mappings;
-+	for (idx = 0; idx < ranges; idx++, mapping++) {
-+		/* Append this range to the string that will be written */
-+		int written = snprintf(pos, bufsize - (pos - buf),
-+			"%lu %lu %lu\n",
-+			mapping->upper,
-+			mapping->lower,
-+			mapping->count);
-+		if ((written <= 0) || (written >= (bufsize - (pos - buf)))) {
-+			fprintf(stderr, _("%s: snprintf failed!\n"), Prog);
-+			exit(EXIT_FAILURE);
-+		}
-+		pos += written;
-+	}
-+
-+	/* Write the mapping to the maping file */
-+	fd = openat(proc_dir_fd, map_file, O_WRONLY);
-+	if (fd < 0) {
-+		fprintf(stderr, _("%s: open of %s failed: %s\n"),
-+			Prog, map_file, strerror(errno));
-+		exit(EXIT_FAILURE);
-+	}
-+	if (write(fd, buf, pos - buf) != (pos - buf)) {
-+		fprintf(stderr, _("%s: write to %s failed: %s\n"),
-+			Prog, map_file, strerror(errno));
-+		exit(EXIT_FAILURE);
-+	}
-+	close(fd);
-+}
-Index: shadow/libmisc/idmapping.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/libmisc/idmapping.h	2013-02-01 15:27:53.828080343 -0600
-@@ -0,0 +1,44 @@
-+/*
-+ * Copyright (c) 2013 Eric Biederman
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the copyright holders or contributors may not be used to
-+ *    endorse or promote products derived from this software without
-+ *    specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#ifndef _IDMAPPING_H_
-+#define _IDMAPPING_H_
-+
-+struct map_range {
-+	unsigned long upper;
-+	unsigned long lower;
-+	unsigned long count;
-+};
-+
-+extern struct map_range *get_map_ranges(int ranges, int argc, char **argv);
-+extern void write_mapping(int proc_dir_fd, int ranges,
-+	struct map_range *mappings, const char *map_file);
-+
-+#endif /* _ID_MAPPING_H_ */
-+
-Index: shadow/man/Makefile.am
-===================================================================
---- shadow.orig/man/Makefile.am	2013-02-01 15:27:53.836080342 -0600
-+++ shadow/man/Makefile.am	2013-02-01 15:27:53.828080343 -0600
-@@ -30,7 +30,9 @@
- 	man1/login.1 \
- 	man5/login.defs.5 \
- 	man8/logoutd.8 \
-+	man1/newgidmap.1 \
- 	man1/newgrp.1 \
-+	man1/newuidmap.1 \
- 	man8/newusers.8 \
- 	man8/nologin.8 \
- 	man1/passwd.1 \
-@@ -83,7 +85,9 @@
- 	login.access.5.xml \
- 	login.defs.5.xml \
- 	logoutd.8.xml \
-+	newgidmap.1.xml \
- 	newgrp.1.xml \
-+	newuidmap.1.xml \
- 	newusers.8.xml \
- 	nologin.8.xml \
- 	passwd.1.xml \
-Index: shadow/man/newgidmap.1.xml
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/man/newgidmap.1.xml	2013-02-01 15:27:53.828080343 -0600
-@@ -0,0 +1,157 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<!--
-+   Copyright (c) 2013 Eric W. Biederman
-+   All rights reserved.
-+  
-+   Redistribution and use in source and binary forms, with or without
-+   modification, are permitted provided that the following conditions
-+   are met:
-+   1. Redistributions of source code must retain the above copyright
-+      notice, this list of conditions and the following disclaimer.
-+   2. Redistributions in binary form must reproduce the above copyright
-+      notice, this list of conditions and the following disclaimer in the
-+      documentation and/or other materials provided with the distribution.
-+   3. The name of the copyright holders or contributors may not be used to
-+      endorse or promote products derived from this software without
-+      specific prior written permission.
-+  
-+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+-->
-+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
-+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-+<!-- SHADOW-CONFIG-HERE -->
-+]>
-+
-+<refentry id='newgidmap.1'>
-+  <refmeta>
-+    <refentrytitle>newgidmap</refentrytitle>
-+    <manvolnum>1</manvolnum>
-+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
-+    <refmiscinfo class="source">shadow-utils</refmiscinfo>
-+    <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
-+  </refmeta>
-+  <refnamediv id='name'>
-+    <refname>newgidmap</refname>
-+    <refpurpose>set the gid mapping of a user namespace</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv id='synopsis'>
-+    <cmdsynopsis>
-+      <command>newgidmap</command>
-+      <arg choice='plain'>
-+	<replaceable>pid</replaceable>
-+      </arg>
-+      <arg choice='plain'>
-+	<replaceable>gid</replaceable>
-+      </arg>
-+      <arg choice='plain'>
-+	<replaceable>lowergid</replaceable>
-+      </arg>
-+      <arg choice='plain'>
-+	<replaceable>count</replaceable>
-+      </arg>
-+      <arg choice='opt'>
-+	<arg choice='plain'>
-+	  <replaceable>pid</replaceable>
-+	</arg>
-+	<arg choice='plain'>
-+	  <replaceable>gid</replaceable>
-+	</arg>
-+	<arg choice='plain'>
-+	  <replaceable>lowergid</replaceable>
-+	</arg>
-+	<arg choice='plain'>
-+	  <replaceable>count</replaceable>
-+	</arg>
-+	<arg choice='opt'>
-+	  <replaceable>...</replaceable>
-+	</arg>
-+      </arg>
-+    </cmdsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1 id='description'>
-+    <title>DESCRIPTION</title>
-+    <para>
-+      The <command>newgidmap</command> sets <filename>/proc/[pid]/gid_map</filename> based on it's
-+      command line arguments and the gids allowed in <filename>/etc/subgid</filename>.
-+    </para>
-+
-+  </refsect1>
-+
-+  <refsect1 id='options'>
-+    <title>OPTIONS</title>
-+    <para>
-+      There currently are no options to the <command>newgidmap</command> command.
-+    </para>
-+    <variablelist remap='IP'>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1 id='note'>
-+    <title>NOTE</title>
-+    <para>
-+      The only restriction placed on the login shell is that the command
-+      name must be listed in <filename>/etc/shells</filename>, unless the
-+      invoker is the superuser, and then any value may be added. An
-+      account with a restricted login shell may not change her login shell.
-+      For this reason, placing <filename>/bin/rsh</filename> in
-+      <filename>/etc/shells</filename> is discouraged since accidentally
-+      changing to a restricted shell would prevent the user from ever
-+      changing her login shell back to its original value.
-+    </para>
-+  </refsect1>
-+
-+
-+  <refsect1 id='files'>
-+    <title>FILES</title>
-+    <variablelist>
-+      <varlistentry>
-+	<term><filename>/etc/subgid</filename></term>
-+	<listitem>
-+	  <para>List of users subordinate user IDs.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><filename>/proc/[pid]/gid_map</filename></term>
-+	<listitem>
-+	  <para>Mapping of gids from one between user namespaces.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1 id='see_also'>
-+    <title>SEE ALSO</title>
-+    <para>
-+      <citerefentry>
-+	<refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum>
-+      </citerefentry>.
-+    </para>
-+  </refsect1>
-+</refentry>
-Index: shadow/man/newuidmap.1.xml
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/man/newuidmap.1.xml	2013-02-01 15:27:53.828080343 -0600
-@@ -0,0 +1,154 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<!--
-+   Copyright (c) 2013 Eric W. Biederman
-+   All rights reserved.
-+  
-+   Redistribution and use in source and binary forms, with or without
-+   modification, are permitted provided that the following conditions
-+   are met:
-+   1. Redistributions of source code must retain the above copyright
-+      notice, this list of conditions and the following disclaimer.
-+   2. Redistributions in binary form must reproduce the above copyright
-+      notice, this list of conditions and the following disclaimer in the
-+      documentation and/or other materials provided with the distribution.
-+   3. The name of the copyright holders or contributors may not be used to
-+      endorse or promote products derived from this software without
-+      specific prior written permission.
-+  
-+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+-->
-+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
-+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-+<!-- SHADOW-CONFIG-HERE -->
-+]>
-+
-+<refentry id='newuidmap.1'>
-+  <refmeta>
-+    <refentrytitle>newuidmap</refentrytitle>
-+    <manvolnum>1</manvolnum>
-+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
-+    <refmiscinfo class="source">shadow-utils</refmiscinfo>
-+    <refmiscinfo class="version">&SHADOW_UTILS_VERSION;</refmiscinfo>
-+  </refmeta>
-+  <refnamediv id='name'>
-+    <refname>newuidmap</refname>
-+    <refpurpose>set the uid mapping of a user namespace</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv id='synopsis'>
-+    <cmdsynopsis>
-+      <command>newuidmap</command>
-+      <arg choice='plain'>
-+	<replaceable>pid</replaceable>
-+      </arg>
-+      <arg choice='plain'>
-+	<replaceable>uid</replaceable>
-+      </arg>
-+      <arg choice='plain'>
-+	<replaceable>loweruid</replaceable>
-+      </arg>
-+      <arg choice='plain'>
-+	<replaceable>count</replaceable>
-+      </arg>
-+      <arg choice='opt'>
-+	<arg choice='plain'>
-+	  <replaceable>uid</replaceable>
-+	</arg>
-+	<arg choice='plain'>
-+	  <replaceable>loweruid</replaceable>
-+	</arg>
-+	<arg choice='plain'>
-+	  <replaceable>count</replaceable>
-+	</arg>
-+	<arg choice='opt'>
-+	  <replaceable>...</replaceable>
-+	</arg>
-+      </arg>
-+    </cmdsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1 id='description'>
-+    <title>DESCRIPTION</title>
-+    <para>
-+      The <command>newuidmap</command> sets <filename>/proc/[pid]/uid_map</filename> based on it's
-+      command line arguments and the uids allowed in <filename>/etc/subuid</filename>.
-+    </para>
-+
-+  </refsect1>
-+
-+  <refsect1 id='options'>
-+    <title>OPTIONS</title>
-+    <para>
-+      There currently are no options to the <command>newuidmap</command> command.
-+    </para>
-+    <variablelist remap='IP'>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1 id='note'>
-+    <title>NOTE</title>
-+    <para>
-+      The only restriction placed on the login shell is that the command
-+      name must be listed in <filename>/etc/shells</filename>, unless the
-+      invoker is the superuser, and then any value may be added. An
-+      account with a restricted login shell may not change her login shell.
-+      For this reason, placing <filename>/bin/rsh</filename> in
-+      <filename>/etc/shells</filename> is discouraged since accidentally
-+      changing to a restricted shell would prevent the user from ever
-+      changing her login shell back to its original value.
-+    </para>
-+  </refsect1>
-+
-+
-+  <refsect1 id='files'>
-+    <title>FILES</title>
-+    <variablelist>
-+      <varlistentry>
-+	<term><filename>/etc/subuid</filename></term>
-+	<listitem>
-+	  <para>List of users subordinate user IDs.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><filename>/proc/[pid]/uid_map</filename></term>
-+	<listitem>
-+	  <para>Mapping of uids from one between user namespaces.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1 id='see_also'>
-+    <title>SEE ALSO</title>
-+    <para>
-+      <citerefentry>
-+	<refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
-+      </citerefentry>,
-+      <citerefentry>
-+	<refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum>
-+      </citerefentry>.
-+    </para>
-+  </refsect1>
-+</refentry>
-Index: shadow/src/Makefile.am
-===================================================================
---- shadow.orig/src/Makefile.am	2013-02-01 15:27:53.836080342 -0600
-+++ shadow/src/Makefile.am	2013-02-01 15:27:53.832080342 -0600
-@@ -23,7 +23,8 @@
- # $prefix/bin and $prefix/sbin, no install-data hacks...)
- 
- bin_PROGRAMS   = groups login su
--ubin_PROGRAMS  = faillog lastlog chage chfn chsh expiry gpasswd newgrp passwd
-+ubin_PROGRAMS  = faillog lastlog chage chfn chsh expiry gpasswd newgrp passwd \
-+	newgidmap newuidmap
- usbin_PROGRAMS = \
- 	cppw \
- 	chgpasswd \
-@@ -50,7 +51,7 @@
- noinst_PROGRAMS = id sulogin
- 
- suidbins       = su
--suidubins      = chage chfn chsh expiry gpasswd newgrp passwd
-+suidubins      = chage chfn chsh expiry gpasswd newgrp passwd newuidmap newgidmap
- if ACCT_TOOLS_SETUID
- 	suidubins += chage chgpasswd chpasswd groupadd groupdel groupmod newusers useradd userdel usermod
- endif
-Index: shadow/src/newgidmap.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/src/newgidmap.c	2013-02-01 15:27:53.832080342 -0600
-@@ -0,0 +1,183 @@
-+/*
-+ * Copyright (c) 2013 Eric Biederman
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the copyright holders or contributors may not be used to
-+ *    endorse or promote products derived from this software without
-+ *    specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#include <config.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <stdbool.h>
-+#include <stdlib.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include "defines.h"
-+#include "prototypes.h"
-+#include "subordinateio.h"
-+#include "idmapping.h"
-+
-+/*
-+ * Global variables
-+ */
-+const char *Prog;
-+
-+static bool verify_range(struct passwd *pw, struct map_range *range)
-+{
-+	/* An empty range is invalid */
-+	if (range->count == 0)
-+		return false;
-+
-+	/* Test /etc/subgid */
-+	if (have_sub_gids(pw->pw_name, range->lower, range->count))
-+		return true;
-+
-+	/* Allow a process to map it's own gid */
-+	if ((range->count == 1) && (pw->pw_gid == range->lower))
-+		return true;
-+
-+	return false;
-+}
-+
-+static void verify_ranges(struct passwd *pw, int ranges,
-+	struct map_range *mappings)
-+{
-+	struct map_range *mapping;
-+	int idx;
-+
-+	mapping = mappings;
-+	for (idx = 0; idx < ranges; idx++, mapping++) {
-+		if (!verify_range(pw, mapping)) {
-+			fprintf(stderr, _( "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"),
-+				Prog,
-+				mapping->upper,
-+				mapping->upper + mapping->count,
-+				mapping->lower,
-+				mapping->lower + mapping->count);
-+			exit(EXIT_FAILURE);
-+		}
-+	}
-+}
-+
-+static void usage(void)
-+{
-+	fprintf(stderr, _("usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"), Prog);
-+	exit(EXIT_FAILURE);
-+}
-+
-+/*
-+ * newgidmap - Set the gid_map for the specified process
-+ */
-+int main(int argc, char **argv)
-+{
-+	char proc_dir_name[PATH_MAX];
-+	char *target_str;
-+	pid_t target, parent;
-+	int proc_dir_fd;
-+	int ranges;
-+	struct map_range *mappings;
-+	struct stat st;
-+	struct passwd *pw;
-+	int written;
-+
-+	Prog = Basename (argv[0]);
-+
-+	/*
-+	 * The valid syntax are
-+	 * newgidmap target_pid
-+	 */
-+	if (argc < 2)
-+		usage();
-+
-+	/* Find the process that needs it's user namespace
-+	 * gid mapping set.
-+	 */
-+	target_str = argv[1];
-+	if (!get_pid(target_str, &target))
-+		usage();
-+
-+	written = snprintf(proc_dir_name, sizeof(proc_dir_name), "/proc/%u/",
-+		target);
-+	if ((written <= 0) || (written >= sizeof(proc_dir_name))) {
-+		fprintf(stderr, "%s: snprintf of proc path failed: %s\n",
-+			Prog, strerror(errno));
-+	}
-+
-+	proc_dir_fd = open(proc_dir_name, O_DIRECTORY);
-+	if (proc_dir_fd < 0) {
-+		fprintf(stderr, _("%s: Could not open proc directory for target %u\n"),
-+			Prog, target);
-+		return EXIT_FAILURE;
-+	}
-+
-+	/* Who am i? */
-+	pw = get_my_pwent ();
-+	if (NULL == pw) {
-+		fprintf (stderr,
-+			_("%s: Cannot determine your user name.\n"),
-+			Prog);
-+		SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
-+				(unsigned long) getuid ()));
-+		return EXIT_FAILURE;
-+	}
-+	
-+	/* Get the effective uid and effective gid of the target process */
-+	if (fstat(proc_dir_fd, &st) < 0) {
-+		fprintf(stderr, _("%s: Could not stat directory for target %u\n"),
-+			Prog, target);
-+		return EXIT_FAILURE;
-+	}
-+
-+	/* Verify real user and real group matches the password entry
-+	 * and the effective user and group of the program whose
-+	 * mappings we have been asked to set.
-+	 */
-+	if ((getuid() != pw->pw_uid) ||
-+	    (getgid() != pw->pw_gid) ||
-+	    (pw->pw_uid != st.st_uid) ||
-+	    (pw->pw_gid != st.st_gid)) {
-+		fprintf(stderr, _( "%s: Target %u is owned by a different user\n" ),
-+			Prog, target);
-+		return EXIT_FAILURE;
-+	}
-+
-+	if (!sub_gid_open(O_RDONLY)) {
-+		return EXIT_FAILURE;
-+	}
-+
-+	ranges = ((argc - 2) + 2) / 3;
-+	mappings = get_map_ranges(ranges, argc - 2, argv + 2);
-+	if (!mappings)
-+		usage();
-+
-+	verify_ranges(pw, ranges, mappings);
-+
-+	write_mapping(proc_dir_fd, ranges, mappings, "gid_map");
-+	sub_gid_close();
-+
-+	return EXIT_SUCCESS;
-+}
-Index: shadow/src/newuidmap.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ shadow/src/newuidmap.c	2013-02-01 15:27:53.832080342 -0600
-@@ -0,0 +1,183 @@
-+/*
-+ * Copyright (c) 2013 Eric Biederman
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. The name of the copyright holders or contributors may not be used to
-+ *    endorse or promote products derived from this software without
-+ *    specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
-+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#include <config.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <stdbool.h>
-+#include <stdlib.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include "defines.h"
-+#include "prototypes.h"
-+#include "subordinateio.h"
-+#include "idmapping.h"
-+
-+/*
-+ * Global variables
-+ */
-+const char *Prog;
-+
-+static bool verify_range(struct passwd *pw, struct map_range *range)
-+{
-+	/* An empty range is invalid */
-+	if (range->count == 0)
-+		return false;
-+
-+	/* Test /etc/subuid */
-+	if (have_sub_uids(pw->pw_name, range->lower, range->count))
-+		return true;
-+
-+	/* Allow a process to map it's own uid */
-+	if ((range->count == 1) && (pw->pw_uid == range->lower))
-+		return true;
-+
-+	return false;
-+}
-+
-+static void verify_ranges(struct passwd *pw, int ranges,
-+	struct map_range *mappings)
-+{
-+	struct map_range *mapping;
-+	int idx;
-+
-+	mapping = mappings;
-+	for (idx = 0; idx < ranges; idx++, mapping++) {
-+		if (!verify_range(pw, mapping)) {
-+			fprintf(stderr, _( "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"),
-+				Prog,
-+				mapping->upper,
-+				mapping->upper + mapping->count,
-+				mapping->lower,
-+				mapping->lower + mapping->count);
-+			exit(EXIT_FAILURE);
-+		}
-+	}
-+}
-+
-+void usage(void)
-+{
-+	fprintf(stderr, _("usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"), Prog);
-+	exit(EXIT_FAILURE);
-+}
-+
-+/*
-+ * newuidmap - Set the uid_map for the specified process
-+ */
-+int main(int argc, char **argv)
-+{
-+	char proc_dir_name[PATH_MAX];
-+	char *target_str;
-+	pid_t target, parent;
-+	int proc_dir_fd;
-+	int ranges;
-+	struct map_range *mappings;
-+	struct stat st;
-+	struct passwd *pw;
-+	int written;
-+
-+	Prog = Basename (argv[0]);
-+
-+	/*
-+	 * The valid syntax are
-+	 * newuidmap target_pid
-+	 */
-+	if (argc < 2)
-+		usage();
-+
-+	/* Find the process that needs it's user namespace
-+	 * uid mapping set.
-+	 */
-+	target_str = argv[1];
-+	if (!get_pid(target_str, &target))
-+		usage();
-+
-+	written = snprintf(proc_dir_name, sizeof(proc_dir_name), "/proc/%u/",
-+		target);
-+	if ((written <= 0) || (written >= sizeof(proc_dir_name))) {
-+		fprintf(stderr, "%s: snprintf of proc path failed: %s\n",
-+			Prog, strerror(errno));
-+	}
-+
-+	proc_dir_fd = open(proc_dir_name, O_DIRECTORY);
-+	if (proc_dir_fd < 0) {
-+		fprintf(stderr, _("%s: Could not open proc directory for target %u\n"),
-+			Prog, target);
-+		return EXIT_FAILURE;
-+	}
-+
-+	/* Who am i? */
-+	pw = get_my_pwent ();
-+	if (NULL == pw) {
-+		fprintf (stderr,
-+			_("%s: Cannot determine your user name.\n"),
-+			Prog);
-+		SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
-+				(unsigned long) getuid ()));
-+		return EXIT_FAILURE;
-+	}
-+	
-+	/* Get the effective uid and effective gid of the target process */
-+	if (fstat(proc_dir_fd, &st) < 0) {
-+		fprintf(stderr, _("%s: Could not stat directory for target %u\n"),
-+			Prog, target);
-+		return EXIT_FAILURE;
-+	}
-+
-+	/* Verify real user and real group matches the password entry
-+	 * and the effective user and group of the program whose
-+	 * mappings we have been asked to set.
-+	 */
-+	if ((getuid() != pw->pw_uid) ||
-+	    (getgid() != pw->pw_gid) ||
-+	    (pw->pw_uid != st.st_uid) ||
-+	    (pw->pw_gid != st.st_gid)) {
-+		fprintf(stderr, _( "%s: Target %u is owned by a different user\n" ),
-+			Prog, target);
-+		return EXIT_FAILURE;
-+	}
-+
-+	if (!sub_uid_open(O_RDONLY)) {
-+		return EXIT_FAILURE;
-+	}
-+
-+	ranges = ((argc - 2) + 2) / 3;
-+	mappings = get_map_ranges(ranges, argc - 2, argv + 2);
-+	if (!mappings)
-+		usage();
-+
-+	verify_ranges(pw, ranges, mappings);
-+
-+	write_mapping(proc_dir_fd, ranges, mappings, "uid_map");
-+	sub_uid_close();
-+
-+	return EXIT_SUCCESS;
-+}
diff --git a/debian/patches/userns/12_userns_selinuxlibs b/debian/patches/userns/12_userns_selinuxlibs
deleted file mode 100644
index 71833c4..0000000
--- a/debian/patches/userns/12_userns_selinuxlibs
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: shadow-4.1.5.1/src/Makefile.am
-===================================================================
---- shadow-4.1.5.1.orig/src/Makefile.am	2013-02-04 11:56:40.485335430 -0600
-+++ shadow-4.1.5.1/src/Makefile.am	2013-02-04 11:57:49.525334261 -0600
-@@ -80,6 +80,8 @@
- endif
- 
- chage_LDADD    = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
-+newuidmap_LDADD    = $(LDADD) $(LIBSELINUX)
-+newgidmap_LDADD    = $(LDADD) $(LIBSELINUX)
- chfn_LDADD     = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
- chgpasswd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBSELINUX) $(LIBCRYPT)
- chsh_LDADD     = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
diff --git a/debian/patches/userns/13_subordinate_parse_static_buf b/debian/patches/userns/13_subordinate_parse_static_buf
deleted file mode 100644
index 7c9eb3a..0000000
--- a/debian/patches/userns/13_subordinate_parse_static_buf
+++ /dev/null
@@ -1,23 +0,0 @@
-Description: subordinateio: Fix subordinate_parse to have an internal static buffer
- subordinate_parse is supposed to return a static structure that
- represents one line in /etc/subuid or /etc/subgid.  I goofed and
- failed to make the variable rangebuf that holds the username of
- in the returned structure static.
- .
- Add this missing static specification.
-Author: <Eric W. Biederman" <ebiederm at xmission.com>
-Origin: upstream
-Forwarded: no
-Index: shadow-4.1.5.1/lib/subordinateio.c
-===================================================================
---- shadow-4.1.5.1.orig/lib/subordinateio.c	2013-02-04 11:56:40.265335433 -0600
-+++ shadow-4.1.5.1/lib/subordinateio.c	2013-02-04 12:32:46.653298752 -0600
-@@ -48,7 +48,7 @@
- static void *subordinate_parse (const char *line)
- {
- 	static struct subordinate_range range;
--	char rangebuf[1024];
-+	static char rangebuf[1024];
- 	int i;
- 	char *cp;
- 	char *fields[NFIELDS];
diff --git a/debian/patches/userns/14_fix_getopt b/debian/patches/userns/14_fix_getopt
deleted file mode 100644
index 988e9d0..0000000
--- a/debian/patches/userns/14_fix_getopt
+++ /dev/null
@@ -1,24 +0,0 @@
-Index: shadow-userns/src/usermod.c
-===================================================================
---- shadow-userns.orig/src/usermod.c	2013-02-05 16:35:10.608485591 +0000
-+++ shadow-userns/src/usermod.c	2013-02-05 17:16:20.540485591 +0000
-@@ -993,9 +993,9 @@
- 		};
- 		while ((c = getopt_long (argc, argv,
- #ifdef WITH_SELINUX
--			                 "ac:d:e:f:g:G:hl:Lmop:R:s:u:UZ:",
-+			                 "ac:d:e:f:g:G:hl:Lmop:R:s:u:UZ:v:w:V:W:",
- #else				/* !WITH_SELINUX */
--			                 "ac:d:e:f:g:G:hl:Lmop:R:s:u:U",
-+			                 "ac:d:e:f:g:G:hl:Lmop:R:s:u:Uv:w:V:W:",
- #endif				/* !WITH_SELINUX */
- 			                 long_options, NULL)) != -1) {
- 			switch (c) {
-@@ -1141,6 +1141,7 @@
- 					exit(E_BAD_ARG);
- 				}
- 				wflg = true;
-+                break;
- 			case 'W':
- 				if (prepend_range (optarg, &del_sub_gids) == 0) {
- 					fprintf (stderr,
diff --git a/debian/patches/userns/16_add-argument-sanity-checking.patch b/debian/patches/userns/16_add-argument-sanity-checking.patch
deleted file mode 100644
index d2f3515..0000000
--- a/debian/patches/userns/16_add-argument-sanity-checking.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From df3c8c1f7f47ceff607595067458f1d8e53eaab8 Mon Sep 17 00:00:00 2001
-From: Serge Hallyn <serge.hallyn at ubuntu.com>
-Date: Fri, 21 Jun 2013 11:47:36 -0500
-Subject: [PATCH 1/1] userns: add argument sanity checking
-
-In find_new_sub_{u,g}ids, check for min, count and max values.
-
-In idmapping.c:get_map_ranges(), make sure that the value passed
-in for ranges did not overflow.  Couldn't happen with the current
-code, but this is a sanity check for any future potential mis-uses.
-
-Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
----
- libmisc/find_new_sub_gids.c |  8 ++++++++
- libmisc/find_new_sub_uids.c |  8 ++++++++
- libmisc/idmapping.c         | 10 ++++++++++
- 3 files changed, 26 insertions(+)
-
-diff --git a/libmisc/find_new_sub_gids.c b/libmisc/find_new_sub_gids.c
-index 68046ac..fd44978 100644
---- a/libmisc/find_new_sub_gids.c
-+++ b/libmisc/find_new_sub_gids.c
-@@ -58,6 +58,14 @@ int find_new_sub_gids (const char *owner,
- 	max = getdef_ulong ("SUB_GID_MAX", 600100000UL);
- 	count = getdef_ulong ("SUB_GID_COUNT", 10000);
- 
-+	if (min >= max || count >= max || (min + count) >= max) {
-+		(void) fprintf (stderr,
-+				_("%s: Invalid configuration: SUB_GID_MIN (%lu),"
-+				  " SUB_GID_MAX (%lu), SUB_GID_COUNT (%lu)\n"),
-+			Prog, min, max, count);
-+		return -1;
-+	}
-+
- 	/* Is there a preferred range that works? */
- 	if ((*range_count != 0) &&
- 	    (*range_start >= min) &&
-diff --git a/libmisc/find_new_sub_uids.c b/libmisc/find_new_sub_uids.c
-index f1720f9..b608c59 100644
---- a/libmisc/find_new_sub_uids.c
-+++ b/libmisc/find_new_sub_uids.c
-@@ -58,6 +58,14 @@ int find_new_sub_uids (const char *owner,
- 	max = getdef_ulong ("SUB_UID_MAX", 600100000UL);
- 	count = getdef_ulong ("SUB_UID_COUNT", 10000);
- 
-+	if (min >= max || count >= max || (min + count) >= max) {
-+		(void) fprintf (stderr,
-+				_("%s: Invalid configuration: SUB_UID_MIN (%lu),"
-+				  " SUB_UID_MAX (%lu), SUB_UID_COUNT (%lu)\n"),
-+			Prog, min, max, count);
-+		return -1;
-+	}
-+
- 	/* Is there a preferred range that works? */
- 	if ((*range_count != 0) &&
- 	    (*range_start >= min) &&
-diff --git a/libmisc/idmapping.c b/libmisc/idmapping.c
-index cb9e898..4147796 100644
---- a/libmisc/idmapping.c
-+++ b/libmisc/idmapping.c
-@@ -41,6 +41,16 @@ struct map_range *get_map_ranges(int ranges, int argc, char **argv)
- 	struct map_range *mappings, *mapping;
- 	int idx, argidx;
- 
-+	if (ranges < 0 || argc < 0) {
-+		fprintf(stderr, "%s: error calculating number of arguments\n", Prog);
-+		return NULL;
-+	}
-+
-+	if (ranges != ((argc - 2) + 2) / 3) {
-+		fprintf(stderr, "%s: ranges: %u is wrong for argc: %d\n", Prog, ranges, argc);
-+		return NULL;
-+	}
-+
- 	if ((ranges * 3) > argc) {
- 		fprintf(stderr, "ranges: %u argc: %d\n",
- 			ranges, argc);
--- 
-1.8.1.2
-
diff --git a/debian/patches/userns/manpagetypo b/debian/patches/userns/manpagetypo
deleted file mode 100644
index 5c88585..0000000
--- a/debian/patches/userns/manpagetypo
+++ /dev/null
@@ -1,26 +0,0 @@
-Index: shadow/man/subgid.5.xml
-===================================================================
---- shadow.orig/man/subgid.5.xml	2013-03-06 15:19:23.848386200 -0600
-+++ shadow/man/subgid.5.xml	2013-03-06 15:19:51.240386816 -0600
-@@ -104,7 +104,7 @@
- 	<refentrytitle>subuid</refentrytitle><manvolnum>5</manvolnum>
-       </citerefentry>,
-       <citerefentry>
--	<refentrytitle>logindefs</refentrytitle><manvolnum>5</manvolnum>
-+	<refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
-       </citerefentry>,
-       <citerefentry>
- 	<refentrytitle>newuidmap</refentrytitle><manvolnum>1</manvolnum>
-Index: shadow/man/subuid.5.xml
-===================================================================
---- shadow.orig/man/subuid.5.xml	2013-03-06 15:19:09.660385881 -0600
-+++ shadow/man/subuid.5.xml	2013-03-06 15:19:44.956386675 -0600
-@@ -104,7 +104,7 @@
- 	<refentrytitle>subgid</refentrytitle><manvolnum>5</manvolnum>
-       </citerefentry>,
-       <citerefentry>
--	<refentrytitle>logindefs</refentrytitle><manvolnum>5</manvolnum>
-+	<refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
-       </citerefentry>,
-       <citerefentry>
- 	<refentrytitle>newuidmap</refentrytitle><manvolnum>1</manvolnum>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-shadow/shadow.git



More information about the Pkg-shadow-devel mailing list