[Pkg-shadow-commits] r255 - in branches/experimental/debian: . patches

Martin Quinson pkg-shadow-devel@lists.alioth.debian.org
Tue, 14 Jun 2005 07:19:05 +0000


Author: mquinson
Date: 2005-06-14 07:19:03 +0000 (Tue, 14 Jun 2005)
New Revision: 255

Added:
   branches/experimental/debian/patches/010_more-i18ned-messages
   branches/experimental/debian/patches/351_libmisc_failure_UTMPX
Removed:
   branches/experimental/debian/patches/006_libmisc.dpatch
Modified:
   branches/experimental/debian/changelog
   branches/experimental/debian/login.defs
   branches/experimental/debian/passwd.config
   branches/experimental/debian/patches/README.patches
   branches/experimental/debian/patches/series
   branches/experimental/debian/rules
Log:
Sync with lastest changes in trunk

Modified: branches/experimental/debian/changelog
===================================================================
--- branches/experimental/debian/changelog	2005-06-14 00:10:30 UTC (rev 254)
+++ branches/experimental/debian/changelog	2005-06-14 07:19:03 UTC (rev 255)
@@ -13,6 +13,15 @@
     - Remove limits.5 and limits.conf.5 man pages which do not
       reflect the way we deal with limits in Debian
       Closes: #288106
+    - debian/login.defs:
+      Make SU_PATH and PATH consistent with the values used in /etc/profile
+      Closes: #286616
+    - debian/passwd.config:
+      Re-enable the password confirmation question at critical priority
+      Closes: #304350
+    - debian/rules:
+      Remove the setuid bit on login
+      Closes: #298060
   * Debconf translation updates:
     - Estonian added. Close: #312471
   * Man pages translation updates:
@@ -23,6 +32,10 @@
     - Corrected typos in shadow.5. Closes: #312430
     - Corrected typos in grpck.8. Closes: #312431
   * Translation updates:
+    - debian/patches/010_more-i18ned-messages
+      - More messages are translatable. We will deal with the translation
+        updates after syncing with upstream. 
+        Closes: #266281
 
  -- Christian Perrier <bubulle@debian.org>  Wed,  8 Jun 2005 20:22:56 +0200
 

Modified: branches/experimental/debian/login.defs
===================================================================
--- branches/experimental/debian/login.defs	2005-06-14 00:10:30 UTC (rev 254)
+++ branches/experimental/debian/login.defs	2005-06-14 07:19:03 UTC (rev 255)
@@ -132,7 +132,7 @@
 # *REQUIRED*  The default PATH settings, for superuser and normal users.
 #
 # (they are minimal, add the rest in the shell startup files)
-ENV_SUPATH	PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin
+ENV_SUPATH	PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
 ENV_PATH	PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
 
 #

Modified: branches/experimental/debian/passwd.config
===================================================================
--- branches/experimental/debian/passwd.config	2005-06-14 00:10:30 UTC (rev 254)
+++ branches/experimental/debian/passwd.config	2005-06-14 07:19:03 UTC (rev 255)
@@ -125,7 +125,7 @@
 			# priority, so it may not always be seen. If
 			# it isn't, don't compare passwords.
 			COMPARE_PW=''
-			db_input high passwd/root-password-again \
+			db_input critical passwd/root-password-again \
 				&& COMPARE_PW=1 || true
 		fi
 	;;
@@ -202,7 +202,7 @@
 			db_input critical passwd/username || true
 			db_input critical passwd/user-password || true
 			COMPARE_PW=''
-			db_input high passwd/user-password-again \
+			db_input critical passwd/user-password-again \
 				&& COMPARE_PW=1 || true
 		fi
 	;;

Deleted: branches/experimental/debian/patches/006_libmisc.dpatch
===================================================================
--- branches/experimental/debian/patches/006_libmisc.dpatch	2005-06-14 00:10:30 UTC (rev 254)
+++ branches/experimental/debian/patches/006_libmisc.dpatch	2005-06-14 07:19:03 UTC (rev 255)
@@ -1,85 +0,0 @@
-#! /bin/sh -e
-## 006_libmisc.dpatch by <unknown>
-##
-## All lines beginning with `## DP:' are a description of the patch.
-## DP: Various patches in libmisc for the Debian package (before switch to dpatch)
-
-if [ $# -lt 1 ]; then
-    echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
-    exit 1
-fi
-
-[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
-patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"
-
-case "$1" in
-    -patch) patch -p1 ${patch_opts} < $0;;
-    -unpatch) patch -R -p1 ${patch_opts} < $0;;
-    *)
-        echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
-        exit 1;;
-esac
-
-exit 0
-
-@DPATCH@
-
-Index: shadow-4.0.3/libmisc/failure.c
-===================================================================
---- shadow-4.0.3.orig/libmisc/failure.c	2005-06-10 01:15:35.652729000 +0200
-+++ shadow-4.0.3/libmisc/failure.c	2005-06-10 01:16:28.902729000 +0200
-@@ -39,7 +39,11 @@
- #include "getdef.h"
- #include "failure.h"
- 
-+#ifdef HAVE_UTMPX_H
-+#include <utmpx.h>
-+#else
- #include <utmp.h>
-+#endif
- 
- #define	YEAR	(365L*DAY)
- 
-@@ -248,7 +252,13 @@
-  */
- 
- void
--failtmp(const struct utmp *failent)
-+failtmp(
-+#ifdef HAVE_UTMPX_H
-+	const struct utmpx *failent
-+#else
-+	const struct utmp *failent
-+#endif
-+)
- {
- 	char *ftmp;
- 	int fd;
-Index: shadow-4.0.3/libmisc/failure.h
-===================================================================
---- shadow-4.0.3.orig/libmisc/failure.h	2005-06-10 01:15:35.652729000 +0200
-+++ shadow-4.0.3/libmisc/failure.h	2005-06-10 01:16:28.902729000 +0200
-@@ -4,7 +4,11 @@
- 
- #include "defines.h"
- #include "faillog.h"
-+#ifdef HAVE_UTMPX_H
-+#include <utmpx.h>
-+#else
- #include <utmp.h>
-+#endif
- 
- /*
-  * failure - make failure entry
-@@ -38,7 +42,11 @@
-  *	failtmp updates the (struct utmp) formatted failure log which
-  *	maintains a record of all login failures.
-  */
-+#ifdef HAVE_UTMPX_H
-+extern void failtmp(const struct utmpx *);
-+#else
- extern void failtmp(const struct utmp *);
-+#endif
- 
- #endif
- 

Added: branches/experimental/debian/patches/010_more-i18ned-messages
===================================================================
--- branches/experimental/debian/patches/010_more-i18ned-messages	2005-06-14 00:10:30 UTC (rev 254)
+++ branches/experimental/debian/patches/010_more-i18ned-messages	2005-06-14 07:19:03 UTC (rev 255)
@@ -0,0 +1,211 @@
+Purpose: Internationalise a few more messages
+	 
+Fixes: #266281
+
+Status wrt upstream: submitted 20050613 (slightly differently as upstream 
+                                         differs opn some files)
+
+Index: shadow-4.0.3/libmisc/obscure.c
+===================================================================
+--- shadow-4.0.3.orig/libmisc/obscure.c	1999-03-07 20:14:40.000000000 +0100
++++ shadow-4.0.3/libmisc/obscure.c	2005-06-13 20:06:09.000000000 +0200
+@@ -161,7 +161,7 @@
+ #endif
+ 
+ 	if (strcmp(new, old) == 0)
+-		return "no change";
++	  return _("no change");
+ 
+ 	newmono = str_lower(xstrdup(new));
+ 	oldmono = str_lower(xstrdup(old));
+@@ -170,19 +170,19 @@
+ 	strcat (wrapped, oldmono);
+ 
+ 	if (palindrome(oldmono, newmono))
+-		msg = "a palindrome";
++	  msg = _("a palindrome");
+ 
+ 	if (!msg && strcmp(oldmono, newmono) == 0)
+-		msg = "case changes only";
++	  msg = _("case changes only");
+ 
+ 	if (!msg && similar(oldmono, newmono))
+-		msg = "too similar";
++	  msg = _("too similar");
+ 
+ 	if (!msg && simple(old, new))
+-		msg = "too simple";
++	  msg = _("too simple");
+ 
+ 	if (!msg && strstr(wrapped, newmono))
+-		msg = "rotated";
++	  msg = _("rotated");
+ 
+ #ifdef HAVE_LIBCRACK
+ 	/*
+@@ -223,7 +223,7 @@
+ #endif
+ 
+ 	if ( newlen < getdef_num("PASS_MIN_LEN", 0) )
+-		return "too short";
++	  return _("too short");
+ 
+ 	/*
+ 	 * Remaining checks are optional.
+Index: shadow-4.0.3/libmisc/utmp.c
+===================================================================
+--- shadow-4.0.3.orig/libmisc/utmp.c	2005-06-13 20:06:07.000000000 +0200
++++ shadow-4.0.3/libmisc/utmp.c	2005-06-13 20:06:09.000000000 +0200
+@@ -54,9 +54,9 @@
+ extern	void	endutent();
+ 
+ #define	NO_UTENT \
+-	"No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
++	_("No utmp entry.  You must exec \"login\" from the lowest level \"sh\"")
+ #define	NO_TTY \
+-	"Unable to determine your tty name."
++	_("Unable to determine your tty name.")
+ 
+ /*
+  * checkutmp - see if utmp file is correct for this process
+Index: shadow-4.0.3/src/chage.c
+===================================================================
+--- shadow-4.0.3.orig/src/chage.c	2005-06-13 20:06:08.000000000 +0200
++++ shadow-4.0.3/src/chage.c	2005-06-13 20:06:09.000000000 +0200
+@@ -586,7 +586,7 @@
+ 	}
+ 
+ 	if (lflg && (setgid (getgid ()) || setuid (ruid))) {
+-		fprintf (stderr, "%s: failed to drop privileges (%s)\n",
++		fprintf (stderr, _("%s: failed to drop privileges (%s)\n"),
+ 			 Prog, strerror (errno));
+ 		exit (1);
+ 	}
+Index: shadow-4.0.3/src/login.c
+===================================================================
+--- shadow-4.0.3.orig/src/login.c	2005-06-13 20:06:07.000000000 +0200
++++ shadow-4.0.3/src/login.c	2005-06-13 20:06:09.000000000 +0200
+@@ -719,7 +719,7 @@
+ 		retcode = pam_start ("login", username, &conv, &pamh);
+ 		if (retcode != PAM_SUCCESS) {
+ 			fprintf (stderr,
+-				 "login: PAM Failure, aborting: %s\n",
++				 _("login: PAM Failure, aborting: %s\n"),
+ 				 pam_strerror (pamh, retcode));
+ 			syslog (LOG_ERR, "Couldn't initialize PAM: %s",
+ 				pam_strerror (pamh, retcode));
+@@ -841,7 +841,7 @@
+ 			  if (!failed)
+ 			    break;
+ 			  
+-			  fprintf(stderr,"Login incorrect\n\n");
++			  fprintf(stderr,_("Login incorrect\n\n"));
+ #ifndef USE_PAM
+ 			  if (pwd && getdef_bool("FAILLOG_ENAB"))
+ 			    failure (pwent.pw_uid, tty, &faillog);
+@@ -1314,7 +1314,7 @@
+ 		if (child < 0) {
+ 			/* error in fork() */
+ 			fprintf (stderr,
+-				 "login: failure forking: %s",
++				 _("login: failure forking: %s"),
+ 				 strerror (errno));
+ 			PAM_END;
+ 			exit (0);
+Index: shadow-4.0.3/src/logoutd.c
+===================================================================
+--- shadow-4.0.3.orig/src/logoutd.c	2002-01-05 16:41:43.000000000 +0100
++++ shadow-4.0.3/src/logoutd.c	2005-06-13 20:06:09.000000000 +0200
+@@ -48,7 +48,7 @@
+ static char *Prog;
+ 
+ #ifndef DEFAULT_HUP_MESG
+-#define DEFAULT_HUP_MESG "login time exceeded\r\n"
++#define DEFAULT_HUP_MESG _("login time exceeded\r\n")
+ #endif
+ 
+ #ifndef HUP_MESG_FILE
+Index: shadow-4.0.3/src/newgrp.c
+===================================================================
+--- shadow-4.0.3.orig/src/newgrp.c	2005-06-13 20:06:07.000000000 +0200
++++ shadow-4.0.3/src/newgrp.c	2005-06-13 20:06:09.000000000 +0200
+@@ -431,7 +431,7 @@
+ 			child = fork ();
+ 			if (child < 0) {
+ 				/* error in fork() */
+-				fprintf (stderr, "%s: failure forking: %s",
++				fprintf (stderr, _("%s: failure forking: %s"),
+ 					 is_newgrp ? "newgrp" : "sg",
+ 					 strerror (errno));
+ 				exit (1);
+Index: shadow-4.0.3/src/su.c
+===================================================================
+--- shadow-4.0.3.orig/src/su.c	2005-06-13 20:06:02.000000000 +0200
++++ shadow-4.0.3/src/su.c	2005-06-13 20:06:09.000000000 +0200
+@@ -462,7 +462,7 @@
+ 	if (ret != PAM_SUCCESS) {
+ 		SYSLOG ((LOG_ERR, "pam_set_item: %s",
+ 			 pam_strerror (pamh, ret)));
+-		fprintf (stderr, "%s: %s\n", Prog,
++		fprintf (stderr, _("%s: %s\n"), Prog,
+ 			 pam_strerror (pamh, ret));
+ 		pam_end (pamh, ret);
+ 		exit (1);
+@@ -562,7 +562,7 @@
+ 	if (ret != PAM_SUCCESS) {
+ 		SYSLOG ((LOG_ERR, "pam_authenticate: %s",
+ 			 pam_strerror (pamh, ret)));
+-		fprintf (stderr, "%s: %s\n", Prog,
++		fprintf (stderr, _("%s: %s\n"), Prog,
+ 			 pam_strerror (pamh, ret));
+ 		pam_end (pamh, ret);
+ 		su_failure (tty);
+@@ -576,7 +576,7 @@
+ 		} else {
+ 			SYSLOG ((LOG_ERR, "pam_acct_mgmt: %s",
+ 				 pam_strerror (pamh, ret)));
+-			fprintf (stderr, "%s: %s\n", Prog,
++			fprintf (stderr, _("%s: %s\n"), Prog,
+ 				 pam_strerror (pamh, ret));
+ 			pam_end (pamh, ret);
+ 			su_failure (tty);
+@@ -716,7 +716,7 @@
+ 	if (ret != PAM_SUCCESS) {
+ 		SYSLOG ((LOG_ERR, "pam_setcred: %s",
+ 			 pam_strerror (pamh, ret)));
+-		fprintf (stderr, "%s: %s\n", Prog,
++		fprintf (stderr, _("%s: %s\n"), Prog,
+ 			 pam_strerror (pamh, ret));
+ 		pam_end (pamh, ret);
+ 		exit (1);
+@@ -724,7 +724,7 @@
+ 	ret = pam_open_session(pamh, 0);
+ 	if (ret != PAM_SUCCESS) {
+ 		SYSLOG((LOG_ERR, "pam_open_session: %s\n", pam_strerror(pamh, ret)));
+-		fprintf(stderr, "%s: %s\n", Prog, pam_strerror(pamh, ret));
++		fprintf(stderr, _("%s: %s\n"), Prog, pam_strerror(pamh, ret));
+ 		pam_setcred(pamh, PAM_DELETE_CRED);
+ 		pam_end(pamh, ret);
+ 		exit(1);
+Index: shadow-4.0.3/src/useradd.c
+===================================================================
+--- shadow-4.0.3.orig/src/useradd.c	2005-06-13 20:06:08.000000000 +0200
++++ shadow-4.0.3/src/useradd.c	2005-06-13 20:06:09.000000000 +0200
+@@ -904,7 +904,7 @@
+ 		ngrp->gr_mem = add_list (ngrp->gr_mem, user_name);
+ 		if (!gr_update (ngrp)) {
+ 			fprintf (stderr,
+-				 "%s: error adding new group entry\n",
++				 _("%s: error adding new group entry\n"),
+ 				 Prog);
+ 			fail_exit (E_GRP_UPDATE);
+ 		}
+@@ -915,7 +915,7 @@
+ 
+ 		if (!gr_dbm_update (ngrp)) {
+ 			fprintf (stderr,
+-				 "%s: cannot add new dbm group entry\n",
++				 _("%s: cannot add new dbm group entry\n"),
+ 				 Prog);
+ 			fail_exit (E_GRP_UPDATE);
+ 		} else

Added: branches/experimental/debian/patches/351_libmisc_failure_UTMPX
===================================================================
--- branches/experimental/debian/patches/351_libmisc_failure_UTMPX	2005-06-14 00:10:30 UTC (rev 254)
+++ branches/experimental/debian/patches/351_libmisc_failure_UTMPX	2005-06-14 07:19:03 UTC (rev 255)
@@ -0,0 +1,65 @@
+Goal: Use UTMPX, if available, for the failure log.
+
+Status wrt upstream: Applied (2005 06 10, should enter 4.0.10)
+
+Upstream also noted that it affects login when compiled without PAM.
+
+Index: shadow-4.0.3/libmisc/failure.c
+===================================================================
+--- shadow-4.0.3.orig/libmisc/failure.c	2005-06-10 01:15:35.652729000 +0200
++++ shadow-4.0.3/libmisc/failure.c	2005-06-10 01:16:28.902729000 +0200
+@@ -39,7 +39,11 @@
+ #include "getdef.h"
+ #include "failure.h"
+ 
++#ifdef HAVE_UTMPX_H
++#include <utmpx.h>
++#else
+ #include <utmp.h>
++#endif
+ 
+ #define	YEAR	(365L*DAY)
+ 
+@@ -248,7 +252,13 @@
+  */
+ 
+ void
+-failtmp(const struct utmp *failent)
++failtmp(
++#ifdef HAVE_UTMPX_H
++	const struct utmpx *failent
++#else
++	const struct utmp *failent
++#endif
++)
+ {
+ 	char *ftmp;
+ 	int fd;
+Index: shadow-4.0.3/libmisc/failure.h
+===================================================================
+--- shadow-4.0.3.orig/libmisc/failure.h	2005-06-10 01:15:35.652729000 +0200
++++ shadow-4.0.3/libmisc/failure.h	2005-06-10 01:16:28.902729000 +0200
+@@ -4,7 +4,11 @@
+ 
+ #include "defines.h"
+ #include "faillog.h"
++#ifdef HAVE_UTMPX_H
++#include <utmpx.h>
++#else
+ #include <utmp.h>
++#endif
+ 
+ /*
+  * failure - make failure entry
+@@ -38,7 +42,11 @@
+  *	failtmp updates the (struct utmp) formatted failure log which
+  *	maintains a record of all login failures.
+  */
++#ifdef HAVE_UTMPX_H
++extern void failtmp(const struct utmpx *);
++#else
+ extern void failtmp(const struct utmp *);
++#endif
+ 
+ #endif
+ 


Property changes on: branches/experimental/debian/patches/351_libmisc_failure_UTMPX
___________________________________________________________________
Name: svn:executable
   + *

Modified: branches/experimental/debian/patches/README.patches
===================================================================
--- branches/experimental/debian/patches/README.patches	2005-06-14 00:10:30 UTC (rev 254)
+++ branches/experimental/debian/patches/README.patches	2005-06-14 07:19:03 UTC (rev 255)
@@ -44,7 +44,7 @@
 application. This is how it can refresh it afterward (comparing the version
 in .pc and the one you currently have in your working dir).
 
-There is two common pitfall with quilt:
+There are three common pitfalls with quilt:
  - doing "quilt pop" without doing "quilt refresh". The version of current
      dir is replaced with the version of the .pc dir. Your changes are lost.
    Quilt wont let you do so, but you can force it with '-f' if you're fool.
@@ -53,62 +53,17 @@
    Use "quilt add" to add files to patches.
    Set $EDITOR and use "quilt edit" to edit a file, and add it onto the
      patch if needed.
-		 
+ - If you update your working directory, patches may not revert cleanly.
+   It is thus recommended to use "quilt pop -a" before updating with
+   "svn up".
+   If you forget (and run into trouble), you may want to remove the whole
+   shadow-?.?.? directory. If you use the makefile which is in the upper
+   directory (trunk/), shadow-?.?.?/debian/patches is a link to
+   debian/patches, so this dirctory does not contain any valuable info.
+
 The documentation is quite well done, I think. "quilt -h" will list you the
 commands. "quilt <cmd> -h" will give you some hints about it. "man quilt" is
 a reference documentation. /usr/share/doc/quilt/quilt.pdf.gz is a complete
 manual, with tutorial.
 
 
-
-
-Short HOWTO for dpatch (old cruft we should kill once everyone is convinced by the Quilt Power)
-======================
-
-Applying a patch
-----------------
-* dpatch apply <name>
-  <name> is the name of the patch without the .dpatch extension
-
-* dpatch apply-all
-  will apply allpatches from the debian/patches/00list file
-
-Creating a new patch
---------------------
-Here is a way to create a new dpatch patch.
- * extract the original archive (shadow_4.0.3.orig.tar.gz)
- * put the debian directory from the sid branch inside the shadow-4.0.3
-   directory
- * prepare the creation of the new patch (I assume you want to create
-   the 314_lastlog_usage_249611 dpatch):
-
-       dpatch-edit-patch patch 314_lastlog_usage_249611 131_tl
-
-   (131_tl indicates that I want all patches up to 131_tl to be applied)
-
-   if there is no dependency with any other patch, you can use:
-       dpatch-edit-patch 314_lastlog_usage_249611
-
- * A new temporary directory should have been created, and a new shell
-   is invoked (by dpatch-edit-patch) in this directory.
- * You can make you modifications in this directory.
- * When you have made all you modifications, you just have to exit the
-   new shell created by dpatch-edit-patch, and the patch will be created
-   in the debian/patches directory.
-
-   You can also cancel the operation with an "exit 230".
- * The last step is to add the patch to debian/patches/00list, at the right
-   place if the patch has some dependancies.
-   If you don't want it to be applied automatically by a "dpatch apply-all",
-   you can comment it.
-   This is used to 
-
-If you have an existing standard patch, you can convert it with dpatch
-(see the dpatch man page).
-
-Editing an existing patch
--------------------------
-If you want to modify an existing dpatch (and if the modification cannot
-be performed easily by editing the patch), you can use:
-dpatch-edit-patch <name-of-the-existing-patch>
-

Modified: branches/experimental/debian/patches/series
===================================================================
--- branches/experimental/debian/patches/series	2005-06-14 00:10:30 UTC (rev 254)
+++ branches/experimental/debian/patches/series	2005-06-14 07:19:03 UTC (rev 255)
@@ -19,7 +19,7 @@
 346_suauth.5
 352_userdel.8
 353_groupdel.8
-006_libmisc.dpatch
+351_libmisc_failure_UTMPX
 006_libmisc_chowntty_ro_root_fs
 008_su_addenv_HOME_and_SHELL
 008_su_uid_0_not_root
@@ -118,3 +118,4 @@
 407_32char_grnames.dpatch
 421_login.1_pishing
 422_getdate.c_generated_file
+010_more-i18ned-messages

Modified: branches/experimental/debian/rules
===================================================================
--- branches/experimental/debian/rules	2005-06-14 00:10:30 UTC (rev 254)
+++ branches/experimental/debian/rules	2005-06-14 07:19:03 UTC (rev 255)
@@ -22,8 +22,6 @@
 
 export DH_COMPAT=3
 
-#include /usr/share/dpatch/dpatch.make
-
 # The autotools target adds forced build-time dependencies on
 # autotools-dev (for /usr/share/misc/config.*) and devscripts (for dch)
 # It's also a .PHONY make target.
@@ -131,7 +129,8 @@
 	chmod u+s debian/passwd/usr/bin/chsh
 	chmod u+s debian/passwd/usr/bin/gpasswd
 	chmod u+s debian/passwd/usr/bin/passwd
-	chmod u+s debian/login/bin/login
+	# No real need for login to be setuid root
+	# chmod u+s debian/login/bin/login
 	chmod u+s debian/login/bin/su
 	chmod u+s debian/login/usr/bin/newgrp
 	chgrp shadow debian/passwd/usr/bin/chage