Bug#224301: [Adduser-devel] Bug#224301: Some thoughts about this bug report

Denis Barbier barbier at linuxfr.org
Fri Oct 21 22:02:43 UTC 2005


On Fri, Oct 21, 2005 at 09:23:36AM +0200, Marc Haber wrote:
> On Fri, Oct 21, 2005 at 08:36:10AM +0200, Christian Perrier wrote:
> > (Marc pinged me on IRC about this bug report in adduser)
> 
> Thanks for your help!
> 
> > First of all, I think that adduser should probably make better use of
> > the locales information for this Yes/No answer.
> 
> I think that would be a good idea here.
> 
> > I don't have the required skills to lead you to the solution, Marc,
> > but I think that Denis Barbier could.
> 
> Thanks for directly Ccing him, I hope that he can find the time to help.
> 
> > This fr.po file for adduser is under work now and you should soon have
> > a new version anyway with these fixes among others.
> 
> OK, I'll wait for that before applying stuff. Better not mess with
> things that I don't understand.

Hi,

There is very good documentation in libc.info, section "Yes-or-No Questions",
but unfortunately it is not relevant here because adduser is a perl script.
So I had a look at perllocale(1), which has some nice tips, in particular
about I18N::Langinfo.  But be warned that their example is not very
valuable under GNU/Linux, because glibc introduced YESSTR/NOSTR lately
and many locales do not provide them.  On the other hand, they all
provide YESEXPR/NOEXPR, so you can run something like:
  use I18N::Langinfo qw(langinfo YESEXPR);
  my $yesexpr = langinfo(YESEXPR());
  for (;;) {
    &systemcall('/usr/bin/chfn', $new_name);
    #  Translators: [y/N] has to be replaced by values defined in your
    #  locale.  You can see by running "locale yesexpr" which regular
    #  expression will be checked to find positive answer.
    print (gtx("Is the information correct? [y/N] "));
    chop ($answer=<STDIN>);
    last if ($answer =~ m/$yesexpr/o);
  }

Of course this comment may be improved ;)
You need to call xgettext with the -c flag so that comments are inserted
into PO files.
Other minor i18n problems with your package:
 * the gtx() function is useless and confuses xgettext
 * Some msgid are concatenated to build a full sentence.  This is bad.
   and in this case only the first part was present in PO files.
Here is a patch.  I tested it, but of course it may introduce bugs,
please review it carefully ;)

Denis
-------------- next part --------------
diff -ur adduser-3.74.orig/AdduserCommon.pm adduser-3.74/AdduserCommon.pm
--- adduser-3.74.orig/AdduserCommon.pm	2005-10-18 16:20:00.000000000 +0200
+++ adduser-3.74/AdduserCommon.pm	2005-10-21 23:49:30.000000000 +0200
@@ -10,7 +10,7 @@
 #                     Ian A. Murdock <imurdock at gnu.ai.mit.edu>
 #
 
- at EXPORT = qw(invalidate_nscd gtx dief warnf read_config get_users_groups get_group_members s_print s_printf systemcall);
+ at EXPORT = qw(invalidate_nscd dief warnf read_config get_users_groups get_group_members s_print s_printf systemcall);
 
 sub invalidate_nscd {
     # Check if we need to do make -C /var/yp for NIS
@@ -56,10 +56,6 @@
       }
 }
 
-sub gtx {
-    return gettext( join "", @_);
-}
-
 sub dief {
     my ($form, at argu)=@_;
     printf STDERR "$0: $form", at argu;
@@ -80,7 +76,7 @@
     my ($var, $lcvar, $val);
 
     if (! -f $conf_file) {
-	printf gtx("%s: `%s' doesn't exist.  Using defaults.\n"),$0,$conf_file if $verbose;
+	printf gettext("%s: `%s' doesn't exist.  Using defaults.\n"),$0,$conf_file if $verbose;
 	return;
     }
 
@@ -90,12 +86,12 @@
 	next if /^#/ || /^\s*$/;
 
 	if ((($var, $val) = /^\s*(\S+)\s*=\s*(.*)/) != 2) {
-	    warnf gtx("Couldn't parse `%s':%s.\n"),$conf_file,$.;
+	    warnf gettext("Couldn't parse `%s':%s.\n"),$conf_file,$.;
 	    next;
 	}
 	$lcvar = lc $var;
 	if (!defined($configref->{$lcvar})) {
-	    warnf gtx("Unknown variable `%s' at `%s':%s.\n"),$var,$conf_file,$.;
+	    warnf gettext("Unknown variable `%s' at `%s':%s.\n"),$var,$conf_file,$.;
 	    next;
 	}
 
diff -ur adduser-3.74.orig/adduser adduser-3.74/adduser
--- adduser-3.74.orig/adduser	2005-10-19 15:09:09.000000000 +0200
+++ adduser-3.74/adduser	2005-10-21 23:45:02.000000000 +0200
@@ -48,10 +48,19 @@
     if ($@) {
 	*setlocale = sub { return 1 };
     }
+    eval {
+	require I18N::Langinfo;
+	import I18N::Langinfo qw(langinfo YESEXPR);
+    };
+    if ($@) {
+	*langinfo = sub { "^[yY]" };
+	*YESEXPR = sub { 1 };
+    }
 }
 
 setlocale(LC_MESSAGES, "");
 textdomain("adduser");
+my $yesexpr = langinfo(YESEXPR());
 
 our $verbose = 1;		# should we be verbose?
 my $allow_badname = 0;		# should we allow bad names?
@@ -86,7 +95,7 @@
 	    "debug" => \$debugging );
 
 # everyone can issue "--help" and "--version", but only root can go on
-die ("$0: ",gtx("Only root may add a user or group to the system.\n")) if ($> != 0);
+die ("$0: ",gettext("Only root may add a user or group to the system.\n")) if ($> != 0);
 
 if( defined($configfile) ) { @defaults = ($configfile); }
 
@@ -106,30 +115,30 @@
 
 while (defined($arg = shift(@ARGV))) {
   if (defined($names[0]) && $arg =~ /^--/) {
-      die ("$0: ",gtx("No options allowed after names.\n"))
+      die ("$0: ",gettext("No options allowed after names.\n"))
     } else {			# it's a username
 	push (@names, $arg);
     }
 }
 
-die ("$0: ",gtx("I need a name to add.\n")) if (length($names[0]) == 0);
-die ("$0: ",gtx("No more than two names.\n")) if (@names > 2);
+die ("$0: ",gettext("I need a name to add.\n")) if (length($names[0]) == 0);
+die ("$0: ",gettext("No more than two names.\n")) if (@names > 2);
 	    
 if (@names == 0) {
     if($found_group_opt || $action eq "addgroup" || $action eq "addsysgroup")
       {
-	  print (gtx("Enter a groupname to add: "));
+	  print (gettext("Enter a groupname to add: "));
       }
     else
       {
-	  print (gtx("Enter a username to add: "));
+	  print (gettext("Enter a username to add: "));
       }
     chomp($answer=<STDIN>);
     push(@names, $answer);
 }
 
 if (@names == 2) {	# must be addusertogroup
-    die ("$0: ",gtx("Specify only one name in this mode.\n"))
+    die ("$0: ",gettext("Specify only one name in this mode.\n"))
 	if ($action eq "addsysuser" || $found_group_opt);
     $action = "addusertogroup";
     $existing_user = shift (@names);
@@ -145,18 +154,18 @@
 
 if ($action ne "addgroup" &&
     defined($found_group_opt) +defined($ingroup_name) +defined($new_gid) > 1 ) {
-    die ("$0: ",gtx("The --group, --ingroup, and --gid options are mutually exclusive.\n"));
+    die ("$0: ",gettext("The --group, --ingroup, and --gid options are mutually exclusive.\n"));
 }
 
 
 if ((defined($special_home)) && ($special_home !~ m+^/+ )) {
-  (die "$0: ",gtx("The home dir must be an absolute path.\n"))
+  (die "$0: ",gettext("The home dir must be an absolute path.\n"))
 }
 	   
 if (defined($special_home) && $verbose) {
-    print "$0: ",gtx("Warning: The home dir you specified already exists.\n")
+    print "$0: ",gettext("Warning: The home dir you specified already exists.\n")
       if (!defined($no_create_home) && -d $special_home);
-    print "$0: ",gtx("Warning: The home dir you specified does not exist.\n")
+    print "$0: ",gettext("Warning: The home dir you specified does not exist.\n")
       if (defined($no_create_home) && ! -d $special_home);
 }
 
@@ -217,12 +226,12 @@
 if ($action eq "addsysgroup") {
     # Check if requested group already exists and we can exit safely
     if (existing_group_ok($new_name, $new_gid)) {
-	printf (gtx("The group `%s' already exists as a system group. Exiting...\n"), $new_name) if $verbose;
+	printf (gettext("The group `%s' already exists as a system group. Exiting...\n"), $new_name) if $verbose;
 	exit 0;
     }
-    dief (gtx("The group `%s' already exists and is not a system group.\n"),$new_name)
+    dief (gettext("The group `%s' already exists and is not a system group.\n"),$new_name)
 	if (defined getgrnam($new_name));
-    dief (gtx("The GID `%s' is already in use.\n"),$new_gid)
+    dief (gettext("The GID `%s' is already in use.\n"),$new_gid)
 	if (defined($new_gid) && defined(getgrgid($new_gid)));
     if (!defined($new_gid)) {
         $new_gid = &first_avail_id($config{"first_system_gid"},
@@ -230,18 +239,17 @@
 				   &get_current_gids);
 
         if ($new_gid == -1) {
-            print STDERR ("$0: ",gtx("No GID is available in the range "),
-            $config{"first_system_gid"}, " - ", $config{"last_system_gid"},
-            " (FIRST_SYS_GID - LAST_SYS_GID).\n");
-            dief (gtx("The group `%s' was not created.\n"),$new_name);
+            print STDERR "$0: ";
+            printf STDERR gettext("No GID is available in the range %d-%d (FIRST_SYS_GID - LAST_SYS_GID).\n"),$config{"first_system_gid"},$config{"last_system_gid"};
+            dief (gettext("The group `%s' was not created.\n"),$new_name);
         }
     }
 
-    printf (gtx("Adding group `%s' (%s)...\n"),$new_name,$new_gid) if $verbose;
+    printf (gettext("Adding group `%s' (%s)...\n"),$new_name,$new_gid) if $verbose;
     &invalidate_nscd("group");
     &systemcall('/usr/sbin/groupadd', '-g', $new_gid, $new_name);
     &invalidate_nscd("group");
-    print (gtx("Done.\n")) if $verbose;
+    print (gettext("Done.\n")) if $verbose;
     exit 0;
 }
 
@@ -250,9 +258,9 @@
 ## addgroup ##
 ##############
 if ($action eq "addgroup") {
-    dief (gtx("The group `%s' already exists.\n"),$new_name)
+    dief (gettext("The group `%s' already exists.\n"),$new_name)
 	if (defined getgrnam($new_name));
-    dief (gtx("The GID `%s' is already in use.\n"),$new_gid)
+    dief (gettext("The GID `%s' is already in use.\n"),$new_gid)
 	if (defined($new_gid) && defined(getgrgid($new_gid)));
     if (!defined($new_gid)) {
         $new_gid = &first_avail_id($config{"first_gid"},
@@ -260,18 +268,17 @@
 				   &get_current_gids);
 
         if ($new_gid == -1) {
-            print STDERR ("$0: ",gtx("No GID is available in the range "),
-            $config{"first_gid"}," - ", $config{"last_gid"},
-            " (FIRST_GID - LAST_GID).\n");
-            dief (gtx("The group `%s' was not created.\n"),$new_name);
+            print STDERR "$0: ";
+            printf STDERR gettext("No GID is available in the range %d-%d (FIRST_GID - LAST_GID).\n"),$config{"first_gid"},$config{"last_gid"};
+            dief (gettext("The group `%s' was not created.\n"),$new_name);
         }
     }
 
-    printf (gtx("Adding group `%s' (%s)...\n"),$new_name,$new_gid) if $verbose;
+    printf (gettext("Adding group `%s' (%s)...\n"),$new_name,$new_gid) if $verbose;
     &invalidate_nscd("group");
     &systemcall('/usr/sbin/groupadd', '-g', $new_gid, $new_name);
     &invalidate_nscd("group");
-    print (gtx("Done.\n")) if $verbose;
+    print (gettext("Done.\n")) if $verbose;
     exit 0;
 }
 
@@ -280,17 +287,17 @@
 ## addusertogroup ##
 ####################
 if ($action eq "addusertogroup") {
-    dief (gtx("The user `%s' does not exist.\n"),$existing_user)
+    dief (gettext("The user `%s' does not exist.\n"),$existing_user)
 	if (!defined getpwnam($existing_user));
-    dief (gtx("The group `%s' does not exist.\n"),$existing_group)
+    dief (gettext("The group `%s' does not exist.\n"),$existing_group)
 	if (!defined getgrnam($existing_group));
     if (&user_is_member($existing_user, $existing_group)) {
-	printf gtx("The user `%s' is already a member of `%s'.\n"),
+	printf gettext("The user `%s' is already a member of `%s'.\n"),
                 $existing_user,$existing_group if $verbose;
 	exit 0;			# not really an error
     }
 
-    printf gtx("Adding user `%s' to group `%s'...\n"),$existing_user,$existing_group
+    printf gettext("Adding user `%s' to group `%s'...\n"),$existing_user,$existing_group
 	if $verbose;
     &invalidate_nscd();
     # FIXME - the next line has a race condition.
@@ -303,7 +310,7 @@
 		$existing_group);
     #&systemcall('gpasswd', '-a',$existing_user,$existing_group);
     &invalidate_nscd();
-    print (gtx("Done.\n")) if $verbose;
+    print (gettext("Done.\n")) if $verbose;
     exit 0;
 }
 
@@ -313,23 +320,22 @@
 ################
 if ($action eq "addsysuser") {
     if (existing_user_ok($new_name, $new_uid)) {
-	printf (gtx("The user `%s' already exists as a system user. Exiting...\n"), $new_name) if $verbose;
+	printf (gettext("The user `%s' already exists as a system user. Exiting...\n"), $new_name) if $verbose;
 	exit 0;
     }
     $new_gid = $nogroup_id
 	if (!$ingroup_name && !defined($new_gid) && !$make_group_also);
     check_user_group(1);
-    printf (gtx("Adding system user `%s'...\n"),$new_name) if $verbose;
+    printf (gettext("Adding system user `%s'...\n"),$new_name) if $verbose;
 
     if (!defined($new_uid) && $make_group_also) {
 	$new_uid = &first_avail_id($config{"first_system_uid"},
 				   $config{"last_system_uid"},
 				   &get_current_uids, &get_current_gids);
         if ($new_uid == -1) {
-            print STDERR ("$0: ",gtx("No UID/GID pair is available in the range "),
-            $config{"first_system_uid"}, " - ", $config{"last_system_uid"},
-            " (FIRST_SYS_UID - LAST_SYS_UID).\n");
-            dief (gtx("The user `%s' was not created.\n"),$new_name);
+            print STDERR "$0: ";
+            printf STDERR gettext("No UID/GID pair is available in the range %d-%d (FIRST_SYS_UID - LAST_SYS_UID).\n"),$config{"first_system_uid"},$config{"last_system_uid"};
+            dief (gettext("The user `%s' was not created.\n"),$new_name);
         }
         $new_gid = $new_uid;
 	$ingroup_name = $new_name;
@@ -339,32 +345,31 @@
 				   $config{"last_system_uid"},
 				   &get_current_uids);
         if ($new_uid == -1) {
-            print STDERR ("$0: ",gtx("No UID is available in the range "),
-            $config{"first_system_uid"}," - ", $config{"last_system_uid"},
-            "(FIRST_SYS_UID - LAST_SYS_UID).\n");
-            dief (gtx("The user `%s' was not created.\n"),$new_name);
+            print STDERR "$0: ";
+            printf STDERR gettext("No UID is available in the range %d-%d (FIRST_SYS_UID - LAST_SYS_UID).\n"),$config{"first_system_uid"},$config{"last_system_uid"};
+            dief (gettext("The user `%s' was not created.\n"),$new_name);
         }
         if (defined($new_gid)) { $ingroup_name = getgrgid($new_gid); }
 	elsif ($ingroup_name) { $new_gid = getgrnam($ingroup_name); }
-	else { die (gtx("Internal error")); }
+	else { die (gettext("Internal error")); }
     }
     else {
 	if (defined($new_gid)) { $ingroup_name = getgrgid($new_gid); }
 	elsif ($ingroup_name) { $new_gid = getgrnam($ingroup_name); }
 	elsif ($make_group_also){ $new_gid=$new_uid; $ingroup_name=$new_name; }
-	else { die (gtx("Internal error")); }
+	else { die (gettext("Internal error")); }
     }
 
     &invalidate_nscd();
     # if we reach this point, and the group does already exist, we can use it.
     if ($make_group_also && !getgrnam($new_name)) {
-	printf (gtx("Adding new group `%s' (%s).\n"),$new_name,$new_gid) if $verbose;
+	printf (gettext("Adding new group `%s' (%s).\n"),$new_name,$new_gid) if $verbose;
 	$undogroup = $new_name;
 	&systemcall('/usr/sbin/groupadd', '-g', $new_gid, $new_name);
 	&invalidate_nscd("group");
     }
 
-    printf gtx("Adding new user `%s' (%s) with group `%s'.\n"),$new_name,$new_uid,$ingroup_name
+    printf gettext("Adding new user `%s' (%s) with group `%s'.\n"),$new_name,$new_uid,$ingroup_name
 	if $verbose;
     $home_dir = $special_home || &homedir($new_name, $ingroup_name);
 	$shell = $special_shell || '/bin/false';
@@ -378,7 +383,7 @@
 	      if ($?>>8);
 	    &cleanup("$0: `/usr/bin/chage -M 99999 $new_name' exited from signal " . ($?&255) . ".  Aborting.\n");
 	} else {
-	    print (gtx("chage failed with return code 15, shadow not enabled, password aging cannot be set. Continuing.\n"));
+	    print (gettext("chage failed with return code 15, shadow not enabled, password aging cannot be set. Continuing.\n"));
 	}
     }
     &invalidate_nscd();
@@ -404,17 +409,16 @@
     check_user_group(0);
     $first_uid = $new_firstuid || $config{"first_uid"};
     $last_uid = $new_lastuid || $config{"last_uid"};
-    printf (gtx("Adding user `%s'...\n"),$new_name) if $verbose;
+    printf (gettext("Adding user `%s'...\n"),$new_name) if $verbose;
 
     if (!defined($new_uid) && $make_group_also) {
 	$new_uid = &first_avail_id($first_uid,
 				   $last_uid,
 				   &get_current_uids, &get_current_gids);
         if ($new_uid == -1) {
-            print STDERR ("$0: ",gtx("No UID/GID pair is available in the range "),
-            "$first_uid - $last_uid\n",
-            "(FIRST_UID - LAST_UID).  ");
-            dief (gtx("The user `%s' was not created.\n"),$new_name);
+            print STDERR "$0: ";
+            printf STDERR gettext("No UID/GID pair is available in the range %d-%d (FIRST_UID - LAST_UID).\n"),$first_uid,$last_uid;
+            dief (gettext("The user `%s' was not created.\n"),$new_name);
         }
 	$new_gid = $new_uid;
 	$ingroup_name = $new_name;
@@ -424,31 +428,30 @@
 				   $last_uid,
 				   &get_current_uids);
 	if ($new_uid == -1) {
-            print STDERR ("$0: ",gtx("No UID is available in the range "),
-            $config{"first_uid"}, " - ", $config{"last_uid"},
-            "(FIRST_UID - LAST_UID).\n");
-            dief (gtx("The user `%s' was not created.\n"),$new_name);
+            print STDERR "$0: ";
+            printf STDERR gettext("No UID is available in the range %d-%d (FIRST_UID - LAST_UID).\n"),$config{"first_uid"},$config{"last_uid"};
+            dief (gettext("The user `%s' was not created.\n"),$new_name);
         }
 	if (defined($new_gid)) { $ingroup_name = getgrgid($new_gid); }
 	elsif ($ingroup_name) { $new_gid = getgrnam($ingroup_name); }
-	else { die (gtx("Internal error")); }
+	else { die (gettext("Internal error")); }
     }
     else {
 	if (defined($new_gid)) { $ingroup_name = getgrgid($new_gid); }
 	elsif ($ingroup_name) { $new_gid = getgrnam($ingroup_name); }
 	elsif ($make_group_also){ $new_gid=$new_uid; $ingroup_name=$new_name; }
-	else { die (gtx("Internal error")); }
+	else { die (gettext("Internal error")); }
     }
 
     &invalidate_nscd();
     if ($make_group_also) {
-	printf (gtx("Adding new group `%s' (%s).\n"),$new_name,$new_gid) if $verbose;
+	printf (gettext("Adding new group `%s' (%s).\n"),$new_name,$new_gid) if $verbose;
 	$undogroup = $new_name;
 	&systemcall('/usr/sbin/groupadd', '-g', $new_gid, $new_name);
 	&invalidate_nscd();
     }
 
-    printf gtx("Adding new user `%s' (%s) with group `%s'.\n"),$new_name,$new_uid,$ingroup_name
+    printf gettext("Adding new user `%s' (%s) with group `%s'.\n"),$new_name,$new_uid,$ingroup_name
 	if $verbose;
     $home_dir = $special_home || &homedir($new_name, $ingroup_name);
 	$shell = $special_shell || $config{"dshell"};
@@ -474,14 +477,17 @@
     else {
 	for (;;) {
 	    &systemcall('/usr/bin/chfn', $new_name);
-	    print (gtx("Is the information correct? [y/N] "));
+	    #  Translators: [y/N] has to be replaced by values defined in your
+	    #  locale.  You can see by running "locale yesexpr" which regular
+	    #  expression will be checked to find positive answer.
+	    print (gettext("Is the information correct? [y/N] "));
 	    chop ($answer=<STDIN>);
-	    last if ($answer eq gtx("y"));
+	    last if ($answer =~ m/$yesexpr/o);
 	}
     }
 
     if ($config{"quotauser"}) {
-	printf (gtx("Setting quota from `%s'.\n"),$config{quotauser});
+	printf (gettext("Setting quota from `%s'.\n"),$config{quotauser});
 	&systemcall('/usr/sbin/edquota', '-p', $config{quotauser}, $new_name);
     }
 
@@ -514,21 +520,21 @@
   my ($copy_skeleton) = @_;
 
   if ($no_create_home) {
-      print gtx("Not creating $home_dir.\n") if $verbose;
+      printf gettext("Not creating %s.\n"), $home_dir if $verbose;
   }
   elsif (-e $home_dir) {
-      printf gtx("The home directory `%s' already exists.  Not copying from `%s'\n"),
+      printf gettext("The home directory `%s' already exists.  Not copying from `%s'\n"),
       $home_dir,$config{skel} if $verbose && !$no_create_home;
       my @homedir_stat = stat($home_dir);
       my $home_uid = $homedir_stat[4];
       my $home_gid = $homedir_stat[5];
       if (($home_uid != $new_uid) || ($home_gid != $new_gid)) {
-          warnf gtx("Warning: that home directory does not belong to user you're just creating\n");
+          warnf gettext("Warning: that home directory does not belong to user you're just creating\n");
       }
       undef @homedir_stat; undef $home_uid; undef $home_gid;
   }
   else {
-      printf gtx("Creating home directory `%s'.\n"),$home_dir if $verbose;
+      printf gettext("Creating home directory `%s'.\n"),$home_dir if $verbose;
       $undohome = $home_dir;
       &mktree($home_dir) || &cleanup("Couldn't create $home_dir: $!.\n");
       chown($new_uid, $new_gid, $home_dir)
@@ -538,7 +544,7 @@
 	  &cleanup("chmod $dir_mode $home_dir: $!\n");
 
       if ($config{"skel"} && $copy_skeleton) {
-	  printf gtx("Copying files from `%s'\n"),$config{skel} if $verbose;
+	  printf gettext("Copying files from `%s'\n"),$config{skel} if $verbose;
 	  open(FIND, "cd $config{skel}; find .  ! -name '*.dpkg-*' -print |")
 	      || &cleanup("fork for find: $!\n");
 	  while (<FIND>) {
@@ -613,26 +619,26 @@
     if( !$system || !existing_user_ok($new_name, $new_uid) ) {
 	if( defined getpwnam($new_name) ) {
 	    if( $system ) {
-		dief (gtx("The user `%s' already exists, and is not a system user.\n"),$new_name);
+		dief (gettext("The user `%s' already exists, and is not a system user.\n"),$new_name);
 	    } else {
-		dief (gtx("The user `%s' already exists.\n"),$new_name);
+		dief (gettext("The user `%s' already exists.\n"),$new_name);
 	    }
 	}
-	dief (gtx("The UID %s is already in use.\n"),$new_uid)
+	dief (gettext("The UID %s is already in use.\n"),$new_uid)
 	  if (defined($new_uid) && getpwuid($new_uid));
     }
     if ($make_group_also) {
 	if( !$system || !existing_group_ok($new_name, $new_uid) ) {
-	    dief (gtx("The group `%s' already exists.\n"),$new_name)
+	    dief (gettext("The group `%s' already exists.\n"),$new_name)
 	      if (defined getgrnam($new_name));
-	    dief (gtx("The GID %s is already in use.\n"),$new_uid)
+	    dief (gettext("The GID %s is already in use.\n"),$new_uid)
 	      if (defined($new_uid) && defined(getgrgid($new_uid)));
 	}
     }
     else {
-	dief (gtx("The group `%s' does not exist.\n"),$ingroup_name)
+	dief (gettext("The group `%s' does not exist.\n"),$ingroup_name)
 	    if ($ingroup_name && !defined(getgrnam($ingroup_name)));
-	dief (gtx("The GID %s does not exist.\n"),$new_gid)
+	dief (gettext("The GID %s does not exist.\n"),$new_gid)
 	    if (defined($new_gid) && !defined(getgrgid($new_gid)));
     }
 }
@@ -688,18 +694,18 @@
     my ($name) = @_;
     if ($name !~ /^[-_\.A-Za-z0-9]*\$?$/) {
 	print STDERR
-("$0: ",gtx("To avoid problems, the username should consist of
+("$0: ",gettext("To avoid problems, the username should consist of
 letters, digits, underscores, periods and dashes. For compatibility with
 Samba machine accounts \$ is also supported at the end of the username\n"));
 	exit 1;
     }
     if ($name !~ qr/$config{"name_regex"}/) {
       if ($allow_badname) {
-	print (gtx("Allowing use of questionable username.\n")) if ($verbose);
+	print (gettext("Allowing use of questionable username.\n")) if ($verbose);
       }
       else {
         print STDERR
-("$0: ",gtx("Please enter a username matching the regular expression configured
+("$0: ",gettext("Please enter a username matching the regular expression configured
 via the name_regex configuration variable.  Use the `--force-badname'
 option to relax this check or reconfigure name_regex.\n"));
         exit 1;
@@ -714,7 +720,7 @@
 sub first_avail_id {
     my ($min, $max, @ids) = @_;
     @ids = sort {$a <=> $b} @ids;
-    printf (gtx("Selecting from %s %s (%s).\n"),$min,$max,join(",", at ids)) if $debugging;
+    printf (gettext("Selecting from %s %s (%s).\n"),$min,$max,join(",", at ids)) if $debugging;
     
     while ($min <= $max) {
 	return $min if ($min <  $ids[0] || @ids==0);
@@ -779,15 +785,15 @@
 sub cleanup {
     print ("@{_}Cleaning up.\n");
     if ($undohome) {
-	printf (gtx("Removing directory `%s'\n"),$undohome);
+	printf (gettext("Removing directory `%s'\n"),$undohome);
 	system('rm', '-rf', $undohome);
     }
     if ($undouser) {
-	printf (gtx("Removing user `%s'.\n"),$undouser);
+	printf (gettext("Removing user `%s'.\n"),$undouser);
 	system('userdel', $undouser);
     }
     if ($undogroup) {
-	printf (gtx("Removing group `%s'.\n"),$undogroup);
+	printf (gettext("Removing group `%s'.\n"),$undogroup);
 	system('groupdel', $undogroup);
     }
     # do we need to invalidate the nscd cache here, too?
@@ -819,7 +825,7 @@
 }
 
 sub usage {
-    printf gtx(
+    printf gettext(
 "adduser [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
 [--firstuid ID] [--lastuid ID] [--gecos GECOS] [--ingroup GROUP | --gid ID]
 [--disabled-password] [--disabled-login] user
diff -ur adduser-3.74.orig/deluser adduser-3.74/deluser
--- adduser-3.74.orig/deluser	2005-10-18 16:20:00.000000000 +0200
+++ adduser-3.74/deluser	2005-10-21 23:48:55.000000000 +0200
@@ -91,7 +91,7 @@
 	    "backup-to" => \$pconfig{"backup_to"}
 	  );
 
-die ("$0: ",gtx("Only root may remove a user or group from the system.\n")) if ($> != 0);
+die ("$0: ",gettext("Only root may remove a user or group from the system.\n")) if ($> != 0);
 
 if (!defined($configfile)) { 
     @defaults = ("/etc/adduser.conf", "/etc/deluser.conf");
@@ -108,7 +108,7 @@
 
 while (defined(my $arg = shift(@ARGV))) {
   if (defined($names[0]) && $arg =~ /^--/) {
-      die ("$0: ",gtx("No options allowed after names.\n"));
+      die ("$0: ",gettext("No options allowed after names.\n"));
     } else {			# it's a username
 	push (@names, $arg);
     }
@@ -116,15 +116,15 @@
 
 if(@names == 0) {
     if($action eq "delgroup") {
-	print (gtx("Enter a group name to remove: "));
+	print (gettext("Enter a group name to remove: "));
     } else {
-	print (gtx("Enter a user name to remove: "));
+	print (gettext("Enter a user name to remove: "));
     }
     chomp(my $answer=<STDIN>);
     push(@names, $answer);
 }
-die ("$0: ",gtx("No name to remove given.\n")) if (length($names[0]) == 0);
-die ("$0: ",gtx("No more than two names.\n")) if (@names > 2);
+die ("$0: ",gettext("No name to remove given.\n")) if (length($names[0]) == 0);
+die ("$0: ",gettext("No more than two names.\n")) if (@names > 2);
 
 if(@names == 2) {      # must be deluserfromgroup
     $action = "deluserfromgroup";
@@ -157,9 +157,9 @@
 undef (%pconfig);
 
 if (($config{remove_home} || $config{remove_all_files} || $config{backup}) && ($install_more_packages)) {
-    die (gtx("In order to use the --remove-home, --remove-all-files, and --backup features,\n
-    you need to install the `perl-modules' package. To accomplish that, run\n
-    apt-get install perl-modules\n"));
+    die (gettext("In order to use the --remove-home, --remove-all-files, and --backup features,
+you need to install the `perl-modules' package. To accomplish that, run
+apt-get install perl-modules\n"));
 }
 
  
@@ -206,36 +206,36 @@
 	if( ($dummy1,$dummy2,$uid) = getpwnam($user) ) {
 	    if ( ($uid < $config{"first_system_uid"} ||
 		$uid > $config{"last_system_uid" } ) ) {
-		printf (gtx("The user `%s' is not a system account... Exiting.\n"), $user) if $verbose;
+		printf (gettext("The user `%s' is not a system account... Exiting.\n"), $user) if $verbose;
 		exit 0;
 	    }
         } else {
-	    printf (gtx("The user `%s' does not exist, but --system was given... Exiting.\n"), $user) if $verbose;
+	    printf (gettext("The user `%s' does not exist, but --system was given... Exiting.\n"), $user) if $verbose;
 	    exit 0;
 	}
     }
     
     unless(exist_user($user)) {
-	dief (gtx("The user `%s' does not exist.\n"),$user);
+	dief (gettext("The user `%s' does not exist.\n"),$user);
     }
 
     if($config{"remove_home"} && $config{"home"} && ($config{"home"} ne "") && ($config{"home"} ne $pw_homedir)) {
-	dief (gtx("passwd home dir `%s' does not match command line home dir, aborting.\n"),
+	dief (gettext("passwd home dir `%s' does not match command line home dir, aborting.\n"),
 	$pw_homedir,$config{"home"});
     } 
 
 
     if($config{"remove_home"} || $config{"remove_all_files"}) {
-      s_print (gtx("Looking for files to backup/remove...\n"));
+      s_print (gettext("Looking for files to backup/remove...\n"));
       my @mountpoints;
       open(MOUNT, "mount |")
-	      || die (gtx("fork for parse mount points failed: %s\n", $!));
+	      || die (gettext("fork for parse mount points failed: %s\n", $!));
       while (<MOUNT>) {
 	      chomp;
 	      my @temparray = split;
 	      push @mountpoints,$temparray[2];
       }
-      close(MOUNT) or die (gtx("can't close mount pipe: %s\n",$!));
+      close(MOUNT) or die (gettext("can't close mount pipe: %s\n",$!));
       my(@files, at dirs);
       if($config{"remove_home"} && ! $config{"remove_all_files"}) {
 
@@ -243,14 +243,14 @@
 	  # according to the manpage
 	  foreach my $mount (@mountpoints) {
 	    if( $File::Find::name eq $mount ) {
-	      s_printf (gtx("Not backing up/removing `%s', it is a mount point.\n"),$File::Find::name);
+	      s_printf (gettext("Not backing up/removing `%s', it is a mount point.\n"),$File::Find::name);
 	      $File::Find::prune=1;
 	      return;
 	    }
 	  }
 	  foreach my $re ( split ' ', $config{"no_del_paths"} ) {
 	    if( $File::Find::name =~ qr/$re/ ) {
-	      s_printf (gtx("Not backing up/removing `%s', it matches %s.\n"),$File::Find::name,$re);
+	      s_printf (gettext("Not backing up/removing `%s', it matches %s.\n"),$File::Find::name,$re);
 	      $File::Find::prune=1;
 	      return;
 	    }
@@ -282,7 +282,7 @@
       }
 
       if($config{"backup"}) {
-	  s_print (gtx("Backing up files to be removed to ". $config{"backup_to"}. " ...\n"));
+	  s_print (gettext("Backing up files to be removed to ". $config{"backup_to"}. " ...\n"));
 	  my $filesfile = new File::Temp(TEMPLATE=>"deluser.XXXXX", DIR=>"/tmp");
 	  my $filesfilename = $filesfile->filename;
 	  print $filesfile join("\n", at files);
@@ -297,7 +297,7 @@
       }
 
       if(@files || @dirs) {
-	  s_print (gtx("Removing files...\n"));
+	  s_print (gettext("Removing files...\n"));
 	  unlink(@files) if(@files);
 	  foreach(reverse(sort(@dirs))) {
 	      rmdir($_);
@@ -305,14 +305,14 @@
       }
     }
 
-    s_printf (gtx("Removing user `%s'...\n"),$user);
+    s_printf (gettext("Removing user `%s'...\n"),$user);
     systemcall("/usr/sbin/userdel", $user);
     &invalidate_nscd();
 
     systemcall('/usr/local/sbin/deluser.local', $user, $pw_uid,
                 $pw_gid, $pw_homedir) if (-x "/usr/local/sbin/deluser.local");
 
-    s_print (gtx("done.\n"));
+    s_print (gettext("done.\n"));
     exit 0;
 }
 
@@ -320,34 +320,34 @@
 if($action eq "delgroup") {
     &invalidate_nscd();
     unless(exist_group($group)) {
-	dief (gtx("The group `%s' does not exist.\n"),$group);
+	dief (gettext("The group `%s' does not exist.\n"),$group);
     }
     my($dummy,$gid,$members);
     if( !(($dummy, $dummy, $gid, $members ) = getgrnam($group)) ) {
-	dief (gtx("getgrnam `%s' failed. This shouldn't happen.\n"), $group);
+	dief (gettext("getgrnam `%s' failed. This shouldn't happen.\n"), $group);
     }
     if( $config{"system"} && 
 	($gid < $config{"first_system_gid"} ||
 	 $gid > $config{"last_system_gid" } )) {
-        printf (gtx("The group `%s' is not a system group... Exiting.\n"), $group) if $verbose;
+        printf (gettext("The group `%s' is not a system group... Exiting.\n"), $group) if $verbose;
 	exit 0;
     }
     if( $config{"only_if_empty"} && $members ne "") {
-	dief (gtx("The group `%s' is not empty!\n"),$group);
+	dief (gettext("The group `%s' is not empty!\n"),$group);
     }
     
     setpwent;
     while ((my $acctname,my $primgrp) = (getpwent)[0,3]) {
 	if( $primgrp eq $gr_gid ) {
-	    dief (gtx("`%s' still has `%s' as their primary group!\n"),$acctname,$group);
+	    dief (gettext("`%s' still has `%s' as their primary group!\n"),$acctname,$group);
 	}
     }
     endpwent;
 
-    s_printf (gtx("Removing group `%s'...\n"),$group);
+    s_printf (gettext("Removing group `%s'...\n"),$group);
     systemcall("/usr/sbin/groupdel",$group);
     &invalidate_nscd();
-    s_print (gtx("done.\n"));
+    s_print (gettext("done.\n"));
     exit 0;
 }
 
@@ -356,13 +356,13 @@
 {
     &invalidate_nscd();
     unless(exist_user($user)) {
-	dief (gtx("The user `%s' does not exist.\n"),$user);
+	dief (gettext("The user `%s' does not exist.\n"),$user);
     }
     unless(exist_group($group)) {
-	dief (gtx("The group `%s' does not exist.\n"),$group);
+	dief (gettext("The group `%s' does not exist.\n"),$group);
     }
     if($maingroup eq $group) {
-	die ("$0: ",gtx("You may not remove the user from his/her primary group.\n"));
+	die ("$0: ",gettext("You may not remove the user from his/her primary group.\n"));
     }
 
     my @members = get_group_members($group);
@@ -376,29 +376,29 @@
     }
 
     unless($ismember) {
-	dief (gtx("The user `%s' is not a member of group `%s'.\n"),$user,$group);
+	dief (gettext("The user `%s' is not a member of group `%s'.\n"),$user,$group);
     }
 
-    s_printf (gtx("Removing user `%s' from group `%s'...\n"),$user,$group);
+    s_printf (gettext("Removing user `%s' from group `%s'...\n"),$user,$group);
     #systemcall("usermod","-G", join(",", at groups), $user );
     systemcall('/usr/bin/gpasswd','-M', join(',', at members), $group);
     &invalidate_nscd();
-    s_print (gtx("done.\n"));
+    s_print (gettext("done.\n"));
 }
 
 
 ######
 
 sub version {
-    printf (gtx("deluser: (version: %s)\n\n", $version));
-    printf (gtx("removing user and groups from the system. "));
+    printf (gettext("deluser: (version: %s)\n\n", $version));
+    printf (gettext("removing user and groups from the system. "));
 
-    printf gtx("Copyright (C) 2000 Roland Bauerschmidt <roland\@copyleft.de>\n\n");
+    printf gettext("Copyright (C) 2000 Roland Bauerschmidt <roland\@copyleft.de>\n\n");
 
-    printf gtx("deluser is based on adduser by Guy Maor <maor\@debian.org>, Ian Murdock\n",
+    printf gettext("deluser is based on adduser by Guy Maor <maor\@debian.org>, Ian Murdock\n",
 	  "<imurdock\@gnu.ai.mit.edu> and Ted Hajek <tedhajek\@boombox.micro.umn.edu>\n");
 
-    printf gtx("\nThis program is free software; you can redistribute it and/or modify
+    printf gettext("\nThis program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or (at
 your option) any later version.
@@ -410,10 +410,10 @@
 }
 
 sub usage {
-    printf (gtx("deluser: (version %s)\n\n", $version));
-    printf gtx("removing user and groups from the system. Version:");
+    printf (gettext("deluser: (version %s)\n\n", $version));
+    printf gettext("removing user and groups from the system. Version:");
 
-    printf gtx("deluser user
+    printf gettext("deluser user
   remove a normal user from the system
   example: deluser mike
 
diff -ur adduser-3.74.orig/po/Makefile adduser-3.74/po/Makefile
--- adduser-3.74.orig/po/Makefile	2005-10-04 14:27:49.000000000 +0200
+++ adduser-3.74/po/Makefile	2005-10-21 23:24:01.000000000 +0200
@@ -21,7 +21,7 @@
 	done;
 
 adduser.pot: ../adduser ../deluser ../AdduserCommon.pm
-	$(XGETTEXT) -L Perl -k_ -o $@ $?
+	$(XGETTEXT) -L Perl -c -o $@ $?
 
 install: all
 	for i in $(MO) ; do \


More information about the Adduser-devel mailing list