]> granicus.if.org Git - linux-pam/commitdiff
Relevant BUGIDs: none
authorThorsten Kukuk <kukuk@thkukuk.de>
Wed, 20 Jul 2005 14:52:38 +0000 (14:52 +0000)
committerThorsten Kukuk <kukuk@thkukuk.de>
Wed, 20 Jul 2005 14:52:38 +0000 (14:52 +0000)
Purpose of commit: new feature

Commit summary:
---------------

Mark message strings for translation

config.h.in
configure
configure.in
libpam/pam_strerror.c
libpam_misc/misc_conv.c
modules/pam_selinux/pam_selinux.c
modules/pam_stress/pam_stress.c
modules/pam_tally/pam_tally.c
modules/pam_unix/pam_unix_acct.c
modules/pam_unix/pam_unix_passwd.c

index acf6c435e94f97add7710fb93ee21cb818d9f3ad..d9c445b35c1a7db6eac137770b995dd02ecbb778 100644 (file)
    `char[]'. */
 #undef YYTEXT_POINTER
 
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#define _(msgid) dgettext("Linux-PAM", msgid)
+#define N_(msgid) msgid
+#else
+#define _(msgid) (msgid)
+#define N_(msgid) msgid
+#endif /* ENABLE_NLS */
+
 #ifdef MEMORY_DEBUG
 /*
  * this is basically a hack - we need to include a semiarbitrary
index 389997c71412ecc856b6dabef975928af4d032f3..308e2c4a0a13badf7d1a0b68fbdfc4d9c4215d7f 100755 (executable)
--- a/configure
+++ b/configure
@@ -7615,6 +7615,9 @@ fi
 
 
 
+
+
+
           ac_config_files="$ac_config_files Make.Rules"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
index 59c90a988eb8f467a2b398a7dc463d84ba42023e..de6074da5777926f3d2c5ba8120612b656590411 100644 (file)
@@ -71,7 +71,7 @@ AC_ARG_ENABLE(memory-debug,
        WITH_MEMORY_DEBUG=yes ; AC_DEFINE([MEMORY_DEBUG],,
                [Every malloc etc. call will be tracked]) , WITH_MEMORY_DEBUG=no)
 AC_SUBST(WITH_MEMORY_DEBUG)
-AH_VERBATIM([_MEMORY_DEBUG], 
+AH_VERBATIM([_MEMORY_DEBUG],
 [#ifdef MEMORY_DEBUG
 /*
  * this is basically a hack - we need to include a semiarbitrary
@@ -474,5 +474,15 @@ fi
 AC_SUBST(PSER)
 AC_SUBST(PS2PDF)
 
+AH_VERBATIM([_ENABLE_NLS],
+[#ifdef ENABLE_NLS
+#include <libintl.h>
+#define _(msgid) dgettext("Linux-PAM", msgid)
+#define N_(msgid) msgid
+#else
+#define _(msgid) (msgid)
+#define N_(msgid) msgid
+#endif /* ENABLE_NLS */])
+
 dnl Files to be created from when we run configure
 AC_OUTPUT(Make.Rules)
index 3bec2a6d97b42b7fc0ccf93461dadb44dc052a57..ecdad0c0c3ec7c14031748aae01267fa388b9af0 100644 (file)
@@ -10,70 +10,70 @@ const char *pam_strerror(pam_handle_t *pamh, int errnum)
 {
     switch (errnum) {
     case PAM_SUCCESS:
-       return "Success";
+      return _("Success");
     case PAM_ABORT:
-       return "Critical error - immediate abort";
+      return _("Critical error - immediate abort");
     case PAM_OPEN_ERR:
-       return "dlopen() failure";
+      return _("dlopen() failure");
     case PAM_SYMBOL_ERR:
-       return "Symbol not found";
+      return _("Symbol not found");
     case PAM_SERVICE_ERR:
-       return "Error in service module";
+      return _("Error in service module");
     case PAM_SYSTEM_ERR:
-       return "System error";
+      return _("System error");
     case PAM_BUF_ERR:
-       return "Memory buffer error";
+      return _("Memory buffer error");
     case PAM_PERM_DENIED:
-       return "Permission denied";
+      return _("Permission denied");
     case PAM_AUTH_ERR:
-       return "Authentication failure";
+      return _("Authentication failure");
     case PAM_CRED_INSUFFICIENT:
-       return "Insufficient credentials to access authentication data";
+      return _("Insufficient credentials to access authentication data");
     case PAM_AUTHINFO_UNAVAIL:
-       return "Authentication service cannot retrieve authentication info.";
+      return _("Authentication service cannot retrieve authentication info.");
     case PAM_USER_UNKNOWN:
-       return "User not known to the underlying authentication module";
+      return _("User not known to the underlying authentication module");
     case PAM_MAXTRIES:
-       return "Have exhausted maximum number of retries for service.";
+      return _("Have exhausted maximum number of retries for service.");
     case PAM_NEW_AUTHTOK_REQD:
-       return "Authentication token is no longer valid; new one required.";
+      return _("Authentication token is no longer valid; new one required.");
     case PAM_ACCT_EXPIRED:
-       return "User account has expired";
+      return _("User account has expired");
     case PAM_SESSION_ERR:
-       return "Cannot make/remove an entry for the specified session";
+      return _("Cannot make/remove an entry for the specified session");
     case PAM_CRED_UNAVAIL:
-       return "Authentication service cannot retrieve user credentials";
+      return _("Authentication service cannot retrieve user credentials");
     case PAM_CRED_EXPIRED:
-       return "User credentials expired";
+      return _("User credentials expired");
     case PAM_CRED_ERR:
-       return "Failure setting user credentials";
+      return _("Failure setting user credentials");
     case PAM_NO_MODULE_DATA:
-       return "No module specific data is present";
+      return _("No module specific data is present");
     case PAM_BAD_ITEM:
-       return "Bad item passed to pam_*_item()";
+      return _("Bad item passed to pam_*_item()");
     case PAM_CONV_ERR:
-       return "Conversation error";
+      return _("Conversation error");
     case PAM_AUTHTOK_ERR:
-       return "Authentication token manipulation error";
+      return _("Authentication token manipulation error");
     case PAM_AUTHTOK_RECOVER_ERR:
-       return "Authentication information cannot be recovered";
+      return _("Authentication information cannot be recovered");
     case PAM_AUTHTOK_LOCK_BUSY:
-       return "Authentication token lock busy";
+      return _("Authentication token lock busy");
     case PAM_AUTHTOK_DISABLE_AGING:
-       return "Authentication token aging disabled";
+      return _("Authentication token aging disabled");
     case PAM_TRY_AGAIN:
-       return "Failed preliminary check by password service";
+      return _("Failed preliminary check by password service");
     case PAM_IGNORE:
-       return "The return value should be ignored by PAM dispatch";
+      return _("The return value should be ignored by PAM dispatch");
     case PAM_MODULE_UNKNOWN:
-       return "Module is unknown";
+      return _("Module is unknown");
     case PAM_AUTHTOK_EXPIRED:
-       return "Authentication token expired";
+      return _("Authentication token expired");
     case PAM_CONV_AGAIN:
-       return "Conversation is waiting for event";
+      return _("Conversation is waiting for event");
     case PAM_INCOMPLETE:
-       return "Application needs to call libpam again";
+      return _("Application needs to call libpam again");
     }
 
-    return "Unknown PAM error";
+    return _("Unknown PAM error");
 }
index 926603bde1de22c144714f5dd3f3c7082591fa55..90869f96867a2647848e6053c41aa6ba73cf59b9 100644 (file)
@@ -32,8 +32,8 @@
 time_t pam_misc_conv_warn_time = 0;                  /* time when we warn */
 time_t pam_misc_conv_die_time  = 0;               /* time when we timeout */
 
-const char *pam_misc_conv_warn_line = "..\a.Time is running out...\n";
-const char *pam_misc_conv_die_line  = "..\a.Sorry, your time is up!\n";
+const char *pam_misc_conv_warn_line = N_("..\a.Time is running out...\n");
+const char *pam_misc_conv_die_line  = N_("..\a.Sorry, your time is up!\n");
 
 int pam_misc_conv_died=0;       /* application can probe this for timeout */
 
@@ -156,9 +156,9 @@ static int read_string(int echo, const char *prompt, char **retstr)
         * the conversation without giving PAM a chance to clean up.
         */
 
-       sigemptyset(&nset); 
-       sigaddset(&nset, SIGINT); 
-       sigaddset(&nset, SIGTSTP); 
+       sigemptyset(&nset);
+       sigaddset(&nset, SIGINT);
+       sigaddset(&nset, SIGTSTP);
        (void) sigprocmask(SIG_BLOCK, &nset, &oset);
 
     } else if (!echo) {
@@ -331,8 +331,8 @@ int misc_conv(int num_msg, const struct pam_message **msgm,
            break;
        }
        default:
-           fprintf(stderr, "erroneous conversation (%d)\n"
-                   ,msgm[count]->msg_style);
+           fprintf(stderr, _("erroneous conversation (%d)\n"),
+                  msgm[count]->msg_style);
            goto failed_conversation;
        }
 
@@ -373,7 +373,7 @@ failed_conversation:
            case PAM_TEXT_INFO:
                /* should not actually be able to get here... */
                free(reply[count].resp);
-           }                                            
+           }
            reply[count].resp = NULL;
        }
        /* forget reply too */
@@ -383,4 +383,3 @@ failed_conversation:
 
     return PAM_CONV_ERR;
 }
-
index 4f0100097b6de9779e9f16460bb72b3a3d018633..de795e1195f0b09d1043df49b0edc7f065a40699 100644 (file)
@@ -59,9 +59,6 @@
 #include <security/_pam_macros.h>
 #include <security/_pam_modutil.h>
 
-#include <libintl.h>
-#define _(x) gettext(x)
-
 #ifndef PAM_SELINUX_MAIN
 #define MODULE "pam_selinux"
 
@@ -139,7 +136,7 @@ select_context (pam_handle_t *pamh, security_context_t* contextlist,
       {
          int choice=0;
          int i;
-         char *prompt=_("Enter number of choice: ");
+         const char *prompt=_("Enter number of choice: ");
          int len=strlen(prompt);
          char buf[PATH_MAX];
 
@@ -166,11 +163,11 @@ select_context (pam_handle_t *pamh, security_context_t* contextlist,
         _pam_drop_reply(responses, 1);
     } else {
       if (debug)
-       syslog(LOG_NOTICE, _("%s: bogus conversation function"),MODULE);
+       syslog(LOG_NOTICE, "%s: bogus conversation function",MODULE);
     }
   } else {
     if (debug)
-      syslog(LOG_NOTICE, _("%s: no conversation function"),MODULE);
+      syslog(LOG_NOTICE, "%s: no conversation function",MODULE);
   }
   return (security_context_t) strdup(contextlist[0]);
 }
@@ -249,11 +246,11 @@ manual_context (pam_handle_t *pamh, const char *user, int debug)
       } /* end while */
     } else {
       if (debug)
-       syslog(LOG_NOTICE, _("%s: bogus conversation function"),MODULE);
+       syslog(LOG_NOTICE, "%s: bogus conversation function",MODULE);
     }
   } else {
     if (debug)
-      syslog(LOG_NOTICE, _("%s: no conversation function"),MODULE);
+      syslog(LOG_NOTICE, "%s: no conversation function",MODULE);
   }
   return NULL;
 }
@@ -276,7 +273,7 @@ static void security_restorelabel_tty(const char *tty,
   if (setfilecon(ptr, context) && errno != ENOENT)
   {
       syslog(LOG_NOTICE,
-             _("Warning!  Could not relabel %s with %s, not relabeling.\n"),
+             "Warning!  Could not relabel %s with %s, not relabeling.\n",
              ptr, context);
   }
 }
@@ -300,14 +297,15 @@ static security_context_t security_label_tty(char *tty,
   if (getfilecon(ptr, &prev_context) < 0)
   {
       syslog(LOG_NOTICE,
-           _("Warning!  Could not get current context for %s, not relabeling."),           ptr);
+            "Warning!  Could not get current context for %s, not relabeling.",
+            ptr);
       return NULL;
   }
   if( security_compute_relabel(usercon,prev_context,SECCLASS_CHR_FILE,
                                &newdev_context)!=0)
   {
     syslog(LOG_NOTICE,
-           _("Warning!  Could not get new context for %s, not relabeling."),
+           "Warning!  Could not get new context for %s, not relabeling.",
            ptr);
     syslog(LOG_NOTICE, "usercon=%s, prev_context=%s\n", usercon, prev_context);
     freecon(prev_context);
@@ -317,7 +315,7 @@ static security_context_t security_label_tty(char *tty,
   if (status)
   {
       syslog(LOG_NOTICE,
-             _("Warning!  Could not relabel %s with %s, not relabeling.%s"),
+             "Warning!  Could not relabel %s with %s, not relabeling.%s",
              ptr,newdev_context,strerror(errno));
       freecon(prev_context);
       prev_context=NULL;
@@ -358,11 +356,11 @@ verbose_message(pam_handle_t *pamh, char *msg, int debug)
         _pam_drop_reply(responses, 1);
     } else {
       if (debug)
-       syslog(LOG_NOTICE, _("%s: bogus conversation function"),MODULE);
+       syslog(LOG_NOTICE, "%s: bogus conversation function", MODULE);
     }
   } else {
     if (debug)
-      syslog(LOG_NOTICE,_("%s: no conversation function"),MODULE);
+      syslog(LOG_NOTICE, "%s: no conversation function", MODULE);
   }
 }
 
@@ -435,13 +433,13 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
     if (has_tty) {
       user_context = manual_context(pamh,username,debug);
       if (user_context == NULL) {
-       syslog (LOG_ERR, _("Unable to get valid context for %s"),
+       syslog (LOG_ERR, "Unable to get valid context for %s",
                (const char *)username);
        return PAM_AUTH_ERR;
       }
     } else {
        syslog (LOG_ERR,
-               _("Unable to get valid context for %s, No valid tty"),
+               "Unable to get valid context for %s, No valid tty",
                (const char *)username);
        return PAM_AUTH_ERR;
     }
@@ -478,13 +476,13 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
     verbose_message(pamh, msg, debug);
   }
   if (ret) {
-    syslog(LOG_ERR, _("Error!  Unable to set %s executable context %s."),
+    syslog(LOG_ERR, "Error!  Unable to set %s executable context %s.",
            (const char *)username, user_context);
     freecon(user_context);
     return PAM_AUTH_ERR;
   } else {
     if (debug)
-      syslog(LOG_NOTICE, _("%s: set %s security context to %s"),MODULE,
+      syslog(LOG_NOTICE, "%s: set %s security context to %s", MODULE,
              (const char *)username, user_context);
   }
   freecon(user_context);
@@ -527,13 +525,13 @@ pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
   status=setexeccon(prev_user_context);
   freecon(prev_user_context);
   if (status) {
-    syslog(LOG_ERR, _("Error!  Unable to set executable context %s."),
+    syslog(LOG_ERR, "Error!  Unable to set executable context %s.",
            prev_user_context);
     return PAM_AUTH_ERR;
   }
 
   if (debug)
-    syslog(LOG_NOTICE, _("%s: setcontext back to orginal"),MODULE);
+    syslog(LOG_NOTICE, "%s: setcontext back to orginal", MODULE);
 
   return PAM_SUCCESS;
 }
index 0365f443a365c028924f9c2169f52fc8f59af132..f4edf60e27070a826bd546d9a66d781c3bb9b20b 100644 (file)
@@ -478,8 +478,8 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
               }
               pmsg[0] = &msg[0];
               msg[0].msg_style = PAM_TEXT_INFO;
-#define _LOCAL_STRESS_COMMENT "Changing STRESS password for "
-              txt = (char *) malloc(sizeof(_LOCAL_STRESS_COMMENT)
+#define _LOCAL_STRESS_COMMENT _("Changing STRESS password for ")
+              txt = (char *) malloc(strlen(_LOCAL_STRESS_COMMENT)
                                     +strlen(username)+1);
               strcpy(txt, _LOCAL_STRESS_COMMENT);
 #undef _LOCAL_STRESS_COMMENT
@@ -492,10 +492,10 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
 
          pmsg[i] = &msg[i];
          msg[i].msg_style = PAM_PROMPT_ECHO_OFF;
-         msg[i++].msg = "Enter new STRESS password: ";
+         msg[i++].msg = _("Enter new STRESS password: ");
          pmsg[i] = &msg[i];
          msg[i].msg_style = PAM_PROMPT_ECHO_OFF;
-         msg[i++].msg = "Retype new STRESS password: ";
+         msg[i++].msg = _("Retype new STRESS password: ");
          resp = NULL;
 
          retval = converse(pamh,i,pmsg,&resp);
@@ -523,8 +523,8 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
                    if (!(flags & PAM_SILENT) && !(ctrl & PAM_ST_NO_WARN)) {
                         pmsg[0] = &msg[0];
                         msg[0].msg_style = PAM_ERROR_MSG;
-                        msg[0].msg = "Verification mis-typed; "
-                             "password unchanged";
+                        msg[0].msg = _("Verification mis-typed; "
+                                       "password unchanged");
                         resp = NULL;
                         (void) converse(pamh,1,pmsg,&resp);
                         if (resp) {
index b49ef352fb53385e9d571ff72940d2babf36b092..4c48062513425a835ccb9224e0c0cb17f446c498 100644 (file)
@@ -727,10 +727,10 @@ static int cline_quiet =  0;
 
 static const char * pam_errors( int i ) {
   switch (i) {
-  case PAM_AUTH_ERR:     return "Authentication error";
-  case PAM_SERVICE_ERR:  return "Service error";
-  case PAM_USER_UNKNOWN: return "Unknown user";
-  default:               return "Unknown error";
+  case PAM_AUTH_ERR:     return _("Authentication error");
+  case PAM_SERVICE_ERR:  return _("Service error");
+  case PAM_USER_UNKNOWN: return _("Unknown user");
+  default:               return _("Unknown error");
   }
 }
 
@@ -744,11 +744,11 @@ static int getopts( int argc, char **argv ) {
     else if ( !strcmp (*argv,"--reset")   ) cline_reset=0;
     else if ( !strncmp(*argv,"--reset=",8)) {
       if ( sscanf(*argv+8,TALLY_FMT,&cline_reset) != 1 )
-        fprintf(stderr,"%s: Bad number given to --reset=\n",pname), exit(0);
+        fprintf(stderr,_("%s: Bad number given to --reset=\n"),pname), exit(0);
     }
     else if ( !strcmp (*argv,"--quiet")   ) cline_quiet=1;
     else {
-      fprintf(stderr,"%s: Unrecognised option %s\n",pname,*argv);
+      fprintf(stderr,_("%s: Unrecognised option %s\n"),pname,*argv);
       return FALSE;
     }
   }
@@ -760,8 +760,8 @@ int main ( int argc, char **argv ) {
   struct fail_s fs, *fsp = &fs;
 
   if ( ! getopts( argc, argv+1 ) ) {
-    printf("%s: [--file rooted-filename] [--user username] "
-           "[--reset[=n]] [--quiet]\n",
+    printf(_("%s: [--file rooted-filename] [--user username] "
+            "[--reset[=n]] [--quiet]\n"),
            *argv);
     exit(0);
   }
@@ -833,7 +833,7 @@ int main ( int argc, char **argv ) {
     }
     fclose(TALLY);
     if ( cline_reset!=0 && cline_reset!=TALLY_HI ) {
-      fprintf(stderr,"%s: Can't reset all users to non-zero\n",*argv);
+      fprintf(stderr,_("%s: Can't reset all users to non-zero\n"),*argv);
     }
     else if ( !cline_reset ) {
       TALLY=fopen(cline_filename, "w");
index b5160cdeed79f1d4d8e68f8bf4a10d7a35eb8fc8..9264fd472ce00e10767b2519265d2ce183c5b275 100644 (file)
@@ -193,7 +193,7 @@ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t * pamh, int flags,
        time_t curdays;
        struct spwd *spent;
        struct passwd *pwent;
-       char buf[80];
+       char buf[256];
 
        D(("called."));
 
@@ -265,7 +265,7 @@ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t * pamh, int flags,
                         ,"account %s has expired (account expired)"
                         ,uname);
                _make_remark(pamh, ctrl, PAM_ERROR_MSG,
-                           "Your account has expired; please contact your system administrator");
+                            _("Your account has expired; please contact your system administrator"));
                D(("account expired"));
                return PAM_ACCT_EXPIRED;
        }
@@ -274,7 +274,7 @@ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t * pamh, int flags,
                         ,"expired password for user %s (root enforced)"
                         ,uname);
                _make_remark(pamh, ctrl, PAM_ERROR_MSG,
-                           "You are required to change your password immediately (root enforced)");
+                            _("You are required to change your password immediately (root enforced)"));
                D(("need a new password"));
                return PAM_NEW_AUTHTOK_REQD;
        }
@@ -292,7 +292,7 @@ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t * pamh, int flags,
                    ,"account %s has expired (failed to change password)"
                         ,uname);
                _make_remark(pamh, ctrl, PAM_ERROR_MSG,
-                           "Your account has expired; please contact your system administrator");
+                            _("Your account has expired; please contact your system administrator"));
                D(("account expired 2"));
                return PAM_ACCT_EXPIRED;
        }
@@ -301,7 +301,7 @@ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t * pamh, int flags,
                         ,"expired password for user %s (password aged)"
                         ,uname);
                _make_remark(pamh, ctrl, PAM_ERROR_MSG,
-                           "You are required to change your password immediately (password aged)");
+                            _("You are required to change your password immediately (password aged)"));
                D(("need a new password 2"));
                return PAM_NEW_AUTHTOK_REQD;
        }
@@ -311,7 +311,7 @@ PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t * pamh, int flags,
                _log_err(LOG_DEBUG, pamh
                         ,"password for user %s will expire in %d days"
                         ,uname, daysleft);
-               snprintf(buf, 80, "Warning: your password will expire in %d day%.2s",
+               snprintf(buf, sizeof (buf), _("Warning: your password will expire in %d day%.2s"),
                         daysleft, daysleft == 1 ? "" : "s");
                _make_remark(pamh, ctrl, PAM_TEXT_INFO, buf);
        }
index f1f87a2c96ebf0a7c161bd20796e828dc440e7c7..480dc3370ed5b043c7639acbcb94ef1be37e125a 100644 (file)
@@ -815,7 +815,7 @@ static int _do_setpass(pam_handle_t* pamh, const char *forwho,
                clnt_destroy(clnt);
                if (err || status) {
                        _make_remark(pamh, ctrl, PAM_TEXT_INFO,
-                               "NIS password could not be changed.");
+                               _("NIS password could not be changed."));
                        retval = PAM_TRY_AGAIN;
                }
 #ifdef DEBUG
@@ -959,7 +959,7 @@ static int _pam_unix_approve_pass(pam_handle_t * pamh
                        _log_err(LOG_DEBUG, pamh, "bad authentication token");
                }
                _make_remark(pamh, ctrl, PAM_ERROR_MSG, pass_new == NULL ?
-                         "No password supplied" : "Password unchanged");
+                       _("No password supplied") : _("Password unchanged"));
                return PAM_AUTHTOK_ERR;
        }
        /*
@@ -980,12 +980,12 @@ static int _pam_unix_approve_pass(pam_handle_t * pamh
                D(("called cracklib [%s]", remark));
 #else
                if (strlen(pass_new) < 6)
-                       remark = "You must choose a longer password";
+                 remark = _("You must choose a longer password");
                D(("length check [%s]", remark));
 #endif
                if (on(UNIX_REMEMBER_PASSWD, ctrl)) {
                        if ((retval = check_old_password(user, pass_new)) == PAM_AUTHTOK_ERR)
-                               remark = "Password has been already used. Choose another.";
+                         remark = _("Password has been already used. Choose another.");
                        if (retval == PAM_ABORT) {
                                _log_err(LOG_ERR, pamh, "can't open %s file to check old passwords",
                                        OLD_PASSWORDS_FILE);
@@ -1144,7 +1144,7 @@ PAM_EXTERN int pam_sm_chauthtok(pam_handle_t * pamh, int flags,
                if (retval == PAM_AUTHTOK_ERR) {
                        if (off(UNIX__IAMROOT, ctrl))
                                _make_remark(pamh, ctrl, PAM_ERROR_MSG,
-                                           "You must wait longer to change your password");
+                                            _("You must wait longer to change your password"));
                        else
                                retval = PAM_SUCCESS;
                }