| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/coreutils/src/src/id.c | 
| Source code | Switch to Preprocessed file | 
| Line | Source | Count | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | /* id -- print real and effective UIDs and GIDs | - | ||||||||||||||||||||||||
| 2 | Copyright (C) 1989-2018 Free Software Foundation, Inc. | - | ||||||||||||||||||||||||
| 3 | - | |||||||||||||||||||||||||
| 4 | This program is free software: you can redistribute it and/or modify | - | ||||||||||||||||||||||||
| 5 | it under the terms of the GNU General Public License as published by | - | ||||||||||||||||||||||||
| 6 | the Free Software Foundation, either version 3 of the License, or | - | ||||||||||||||||||||||||
| 7 | (at your option) any later version. | - | ||||||||||||||||||||||||
| 8 | - | |||||||||||||||||||||||||
| 9 | This program is distributed in the hope that it will be useful, | - | ||||||||||||||||||||||||
| 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | - | ||||||||||||||||||||||||
| 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | - | ||||||||||||||||||||||||
| 12 | GNU General Public License for more details. | - | ||||||||||||||||||||||||
| 13 | - | |||||||||||||||||||||||||
| 14 | You should have received a copy of the GNU General Public License | - | ||||||||||||||||||||||||
| 15 | along with this program. If not, see <https://www.gnu.org/licenses/>. */ | - | ||||||||||||||||||||||||
| 16 | - | |||||||||||||||||||||||||
| 17 | /* Written by Arnold Robbins. | - | ||||||||||||||||||||||||
| 18 | Major rewrite by David MacKenzie, djm@gnu.ai.mit.edu. */ | - | ||||||||||||||||||||||||
| 19 | - | |||||||||||||||||||||||||
| 20 | #include <config.h> | - | ||||||||||||||||||||||||
| 21 | #include <stdio.h> | - | ||||||||||||||||||||||||
| 22 | #include <sys/types.h> | - | ||||||||||||||||||||||||
| 23 | #include <pwd.h> | - | ||||||||||||||||||||||||
| 24 | #include <grp.h> | - | ||||||||||||||||||||||||
| 25 | #include <getopt.h> | - | ||||||||||||||||||||||||
| 26 | #include <selinux/selinux.h> | - | ||||||||||||||||||||||||
| 27 | - | |||||||||||||||||||||||||
| 28 | #include "system.h" | - | ||||||||||||||||||||||||
| 29 | #include "die.h" | - | ||||||||||||||||||||||||
| 30 | #include "error.h" | - | ||||||||||||||||||||||||
| 31 | #include "mgetgroups.h" | - | ||||||||||||||||||||||||
| 32 | #include "quote.h" | - | ||||||||||||||||||||||||
| 33 | #include "group-list.h" | - | ||||||||||||||||||||||||
| 34 | #include "smack.h" | - | ||||||||||||||||||||||||
| 35 | #include "userspec.h" | - | ||||||||||||||||||||||||
| 36 | - | |||||||||||||||||||||||||
| 37 | /* The official name of this program (e.g., no 'g' prefix). */ | - | ||||||||||||||||||||||||
| 38 | #define PROGRAM_NAME "id" | - | ||||||||||||||||||||||||
| 39 | - | |||||||||||||||||||||||||
| 40 | #define AUTHORS \ | - | ||||||||||||||||||||||||
| 41 | proper_name ("Arnold Robbins"), \ | - | ||||||||||||||||||||||||
| 42 | proper_name ("David MacKenzie") | - | ||||||||||||||||||||||||
| 43 | - | |||||||||||||||||||||||||
| 44 | /* If nonzero, output only the SELinux context. */ | - | ||||||||||||||||||||||||
| 45 | static bool just_context = 0; | - | ||||||||||||||||||||||||
| 46 | - | |||||||||||||||||||||||||
| 47 | static void print_user (uid_t uid); | - | ||||||||||||||||||||||||
| 48 | static void print_full_info (const char *username); | - | ||||||||||||||||||||||||
| 49 | - | |||||||||||||||||||||||||
| 50 | /* If true, output user/group name instead of ID number. -n */ | - | ||||||||||||||||||||||||
| 51 | static bool use_name = false; | - | ||||||||||||||||||||||||
| 52 | - | |||||||||||||||||||||||||
| 53 | /* The real and effective IDs of the user to print. */ | - | ||||||||||||||||||||||||
| 54 | static uid_t ruid, euid; | - | ||||||||||||||||||||||||
| 55 | static gid_t rgid, egid; | - | ||||||||||||||||||||||||
| 56 | - | |||||||||||||||||||||||||
| 57 | /* True unless errors have been encountered. */ | - | ||||||||||||||||||||||||
| 58 | static bool ok = true; | - | ||||||||||||||||||||||||
| 59 | - | |||||||||||||||||||||||||
| 60 | /* The SELinux context. Start with a known invalid value so print_full_info | - | ||||||||||||||||||||||||
| 61 | knows when 'context' has not been set to a meaningful value. */ | - | ||||||||||||||||||||||||
| 62 | static char *context = NULL; | - | ||||||||||||||||||||||||
| 63 | - | |||||||||||||||||||||||||
| 64 | static struct option const longopts[] = | - | ||||||||||||||||||||||||
| 65 | { | - | ||||||||||||||||||||||||
| 66 | {"context", no_argument, NULL, 'Z'}, | - | ||||||||||||||||||||||||
| 67 | {"group", no_argument, NULL, 'g'}, | - | ||||||||||||||||||||||||
| 68 | {"groups", no_argument, NULL, 'G'}, | - | ||||||||||||||||||||||||
| 69 | {"name", no_argument, NULL, 'n'}, | - | ||||||||||||||||||||||||
| 70 | {"real", no_argument, NULL, 'r'}, | - | ||||||||||||||||||||||||
| 71 | {"user", no_argument, NULL, 'u'}, | - | ||||||||||||||||||||||||
| 72 | {"zero", no_argument, NULL, 'z'}, | - | ||||||||||||||||||||||||
| 73 | {GETOPT_HELP_OPTION_DECL}, | - | ||||||||||||||||||||||||
| 74 | {GETOPT_VERSION_OPTION_DECL}, | - | ||||||||||||||||||||||||
| 75 | {NULL, 0, NULL, 0} | - | ||||||||||||||||||||||||
| 76 | }; | - | ||||||||||||||||||||||||
| 77 | - | |||||||||||||||||||||||||
| 78 | void | - | ||||||||||||||||||||||||
| 79 | usage (int status) | - | ||||||||||||||||||||||||
| 80 | { | - | ||||||||||||||||||||||||
| 81 |   if (status != EXIT_SUCCESS)
  | 3-16 | ||||||||||||||||||||||||
| 82 |     emit_try_help (); executed 3 times by 1 test:  end of blockExecuted by: 
  | 3 | ||||||||||||||||||||||||
| 83 | else | - | ||||||||||||||||||||||||
| 84 | { | - | ||||||||||||||||||||||||
| 85 | printf (_("Usage: %s [OPTION]... [USER]\n"), program_name); | - | ||||||||||||||||||||||||
| 86 | fputs (_("\ | - | ||||||||||||||||||||||||
| 87 | Print user and group information for the specified USER,\n\ | - | ||||||||||||||||||||||||
| 88 | or (when USER omitted) for the current user.\n\ | - | ||||||||||||||||||||||||
| 89 | \n"), | - | ||||||||||||||||||||||||
| 90 | stdout); | - | ||||||||||||||||||||||||
| 91 | fputs (_("\ | - | ||||||||||||||||||||||||
| 92 | -a ignore, for compatibility with other versions\n\ | - | ||||||||||||||||||||||||
| 93 | -Z, --context print only the security context of the process\n\ | - | ||||||||||||||||||||||||
| 94 | -g, --group print only the effective group ID\n\ | - | ||||||||||||||||||||||||
| 95 | -G, --groups print all group IDs\n\ | - | ||||||||||||||||||||||||
| 96 | -n, --name print a name instead of a number, for -ugG\n\ | - | ||||||||||||||||||||||||
| 97 | -r, --real print the real ID instead of the effective ID, with -ugG\n\ | - | ||||||||||||||||||||||||
| 98 | -u, --user print only the effective user ID\n\ | - | ||||||||||||||||||||||||
| 99 | -z, --zero delimit entries with NUL characters, not whitespace;\n\ | - | ||||||||||||||||||||||||
| 100 | not permitted in default format\n\ | - | ||||||||||||||||||||||||
| 101 | "), stdout); | - | ||||||||||||||||||||||||
| 102 | fputs (HELP_OPTION_DESCRIPTION, stdout); | - | ||||||||||||||||||||||||
| 103 | fputs (VERSION_OPTION_DESCRIPTION, stdout); | - | ||||||||||||||||||||||||
| 104 | fputs (_("\ | - | ||||||||||||||||||||||||
| 105 | \n\ | - | ||||||||||||||||||||||||
| 106 | Without any OPTION, print some useful set of identified information.\n\ | - | ||||||||||||||||||||||||
| 107 | "), stdout); | - | ||||||||||||||||||||||||
| 108 | emit_ancillary_info (PROGRAM_NAME); | - | ||||||||||||||||||||||||
| 109 |     } executed 16 times by 1 test:  end of blockExecuted by: 
  | 16 | ||||||||||||||||||||||||
| 110 |   exit (status); executed 19 times by 1 test:  exit (status);Executed by: 
  | 19 | ||||||||||||||||||||||||
| 111 | } | - | ||||||||||||||||||||||||
| 112 | - | |||||||||||||||||||||||||
| 113 | int | - | ||||||||||||||||||||||||
| 114 | main (int argc, char **argv) | - | ||||||||||||||||||||||||
| 115 | { | - | ||||||||||||||||||||||||
| 116 | int optc; | - | ||||||||||||||||||||||||
| 117 | int selinux_enabled = (is_selinux_enabled () > 0); | - | ||||||||||||||||||||||||
| 118 | bool smack_enabled = is_smack_enabled (); | - | ||||||||||||||||||||||||
| 119 | bool opt_zero = false; | - | ||||||||||||||||||||||||
| 120 | char *pw_name = NULL; | - | ||||||||||||||||||||||||
| 121 | - | |||||||||||||||||||||||||
| 122 | /* If true, output the list of all group IDs. -G */ | - | ||||||||||||||||||||||||
| 123 | bool just_group_list = false; | - | ||||||||||||||||||||||||
| 124 | /* If true, output only the group ID(s). -g */ | - | ||||||||||||||||||||||||
| 125 | bool just_group = false; | - | ||||||||||||||||||||||||
| 126 | /* If true, output real UID/GID instead of default effective UID/GID. -r */ | - | ||||||||||||||||||||||||
| 127 | bool use_real = false; | - | ||||||||||||||||||||||||
| 128 | /* If true, output only the user ID(s). -u */ | - | ||||||||||||||||||||||||
| 129 | bool just_user = false; | - | ||||||||||||||||||||||||
| 130 | - | |||||||||||||||||||||||||
| 131 | initialize_main (&argc, &argv); | - | ||||||||||||||||||||||||
| 132 | set_program_name (argv[0]); | - | ||||||||||||||||||||||||
| 133 | setlocale (LC_ALL, ""); | - | ||||||||||||||||||||||||
| 134 | bindtextdomain (PACKAGE, LOCALEDIR); | - | ||||||||||||||||||||||||
| 135 | textdomain (PACKAGE); | - | ||||||||||||||||||||||||
| 136 | - | |||||||||||||||||||||||||
| 137 | atexit (close_stdout); | - | ||||||||||||||||||||||||
| 138 | - | |||||||||||||||||||||||||
| 139 |   while ((optc = getopt_long (argc, argv, "agnruzGZ", longopts, NULL)) != -1)
  | 233-454 | ||||||||||||||||||||||||
| 140 | { | - | ||||||||||||||||||||||||
| 141 | switch (optc) | - | ||||||||||||||||||||||||
| 142 | { | - | ||||||||||||||||||||||||
| 143 |         case 'a': executed 1 time by 1 test:  case 'a':Executed by: 
  | 1 | ||||||||||||||||||||||||
| 144 | /* Ignore -a, for compatibility with SVR4. */ | - | ||||||||||||||||||||||||
| 145 |           break; executed 1 time by 1 test:  break;Executed by: 
  | 1 | ||||||||||||||||||||||||
| 146 | - | |||||||||||||||||||||||||
| 147 |         case 'Z': executed 3 times by 1 test:  case 'Z':Executed by: 
  | 3 | ||||||||||||||||||||||||
| 148 | /* politely decline if we're not on a SELinux/SMACK-enabled kernel. */ | - | ||||||||||||||||||||||||
| 149 | #ifdef HAVE_SMACK | - | ||||||||||||||||||||||||
| 150 | if (!selinux_enabled && !smack_enabled) | - | ||||||||||||||||||||||||
| 151 | die (EXIT_FAILURE, 0, | - | ||||||||||||||||||||||||
| 152 | _("--context (-Z) works only on " | - | ||||||||||||||||||||||||
| 153 | "an SELinux/SMACK-enabled kernel")); | - | ||||||||||||||||||||||||
| 154 | #else | - | ||||||||||||||||||||||||
| 155 |           if (!selinux_enabled)
  | 0-3 | ||||||||||||||||||||||||
| 156 |             die (EXIT_FAILURE, 0, executed 3 times by 1 test:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"--context (-Z) works only on an SELinux-enabled kernel\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0),...works only on an SELinux-enabled kernel" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "--context (-Z) works only on an SELinux-enabled kernel" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;Executed by: 
  | 3 | ||||||||||||||||||||||||
| 157 |                  _("--context (-Z) works only on an SELinux-enabled kernel")); executed 3 times by 1 test:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"--context (-Z) works only on an SELinux-enabled kernel\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0),...works only on an SELinux-enabled kernel" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "--context (-Z) works only on an SELinux-enabled kernel" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;Executed by: 
  | 3 | ||||||||||||||||||||||||
| 158 | #endif | - | ||||||||||||||||||||||||
| 159 | just_context = true; | - | ||||||||||||||||||||||||
| 160 |           break; never executed:  break; | 0 | ||||||||||||||||||||||||
| 161 | - | |||||||||||||||||||||||||
| 162 |         case 'g': executed 50 times by 1 test:  case 'g':Executed by: 
  | 50 | ||||||||||||||||||||||||
| 163 | just_group = true; | - | ||||||||||||||||||||||||
| 164 |           break; executed 50 times by 1 test:  break;Executed by: 
  | 50 | ||||||||||||||||||||||||
| 165 |         case 'n': executed 66 times by 1 test:  case 'n':Executed by: 
  | 66 | ||||||||||||||||||||||||
| 166 | use_name = true; | - | ||||||||||||||||||||||||
| 167 |           break; executed 66 times by 1 test:  break;Executed by: 
  | 66 | ||||||||||||||||||||||||
| 168 |         case 'r': executed 64 times by 1 test:  case 'r':Executed by: 
  | 64 | ||||||||||||||||||||||||
| 169 | use_real = true; | - | ||||||||||||||||||||||||
| 170 |           break; executed 64 times by 1 test:  break;Executed by: 
  | 64 | ||||||||||||||||||||||||
| 171 |         case 'u': executed 125 times by 1 test:  case 'u':Executed by: 
  | 125 | ||||||||||||||||||||||||
| 172 | just_user = true; | - | ||||||||||||||||||||||||
| 173 |           break; executed 125 times by 1 test:  break;Executed by: 
  | 125 | ||||||||||||||||||||||||
| 174 |         case 'z': executed 63 times by 1 test:  case 'z':Executed by: 
  | 63 | ||||||||||||||||||||||||
| 175 | opt_zero = true; | - | ||||||||||||||||||||||||
| 176 |           break; executed 63 times by 1 test:  break;Executed by: 
  | 63 | ||||||||||||||||||||||||
| 177 |         case 'G': executed 52 times by 1 test:  case 'G':Executed by: 
  | 52 | ||||||||||||||||||||||||
| 178 | just_group_list = true; | - | ||||||||||||||||||||||||
| 179 |           break; executed 52 times by 1 test:  break;Executed by: 
  | 52 | ||||||||||||||||||||||||
| 180 |         case_GETOPT_HELP_CHAR; never executed:  break;executed 16 times by 1 test:  case GETOPT_HELP_CHAR:Executed by: 
  | 0-16 | ||||||||||||||||||||||||
| 181 |         case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); executed 11 times by 1 test:  exit ( 0 );Executed by: 
 never executed:  break;executed 11 times by 1 test:  case GETOPT_VERSION_CHAR:Executed by: 
  | 0-11 | ||||||||||||||||||||||||
| 182 |         default: executed 3 times by 1 test:  default:Executed by: 
  | 3 | ||||||||||||||||||||||||
| 183 | usage (EXIT_FAILURE); | - | ||||||||||||||||||||||||
| 184 |         } never executed:  end of block | 0 | ||||||||||||||||||||||||
| 185 | } | - | ||||||||||||||||||||||||
| 186 | - | |||||||||||||||||||||||||
| 187 | size_t n_ids = argc - optind; | - | ||||||||||||||||||||||||
| 188 |   if (1 < n_ids)
  | 0-233 | ||||||||||||||||||||||||
| 189 | { | - | ||||||||||||||||||||||||
| 190 | error (0, 0, _("extra operand %s"), quote (argv[optind + 1])); | - | ||||||||||||||||||||||||
| 191 | usage (EXIT_FAILURE); | - | ||||||||||||||||||||||||
| 192 |     } never executed:  end of block | 0 | ||||||||||||||||||||||||
| 193 | - | |||||||||||||||||||||||||
| 194 |   if (n_ids && just_context)
 
  | 0-119 | ||||||||||||||||||||||||
| 195 |     die (EXIT_FAILURE, 0, never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"cannot print security context when user specified\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "cannot print security context when user specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "cannot print security context when user specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ; | 0 | ||||||||||||||||||||||||
| 196 |          _("cannot print security context when user specified")); never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"cannot print security context when user specified\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "cannot print security context when user specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "cannot print security context when user specified" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ; | 0 | ||||||||||||||||||||||||
| 197 | - | |||||||||||||||||||||||||
| 198 |   if (just_user + just_group + just_group_list + just_context > 1)
  | 0-233 | ||||||||||||||||||||||||
| 199 |     die (EXIT_FAILURE, 0, _("cannot print \"only\" of more than one choice")); never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"cannot print \\\"only\\\" of more than one choice\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "cannot print \"only\" of more than one choice" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "cannot print \"only\" of more than one choice" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))); | 0 | ||||||||||||||||||||||||
| 200 | - | |||||||||||||||||||||||||
| 201 |   bool default_format = ! (just_user
  | 110-123 | ||||||||||||||||||||||||
| 202 |                            || just_group
  | 48-62 | ||||||||||||||||||||||||
| 203 |                            || just_group_list
  | 12-50 | ||||||||||||||||||||||||
| 204 |                            || just_context);
  | 0-12 | ||||||||||||||||||||||||
| 205 | - | |||||||||||||||||||||||||
| 206 |   if (default_format && (use_real || use_name))
 
 
  | 0-221 | ||||||||||||||||||||||||
| 207 |     die (EXIT_FAILURE, 0, never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"cannot print only names or real IDs in default format\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), ...only names or real IDs in default format" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "cannot print only names or real IDs in default format" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ; | 0 | ||||||||||||||||||||||||
| 208 |          _("cannot print only names or real IDs in default format")); never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"cannot print only names or real IDs in default format\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), ...only names or real IDs in default format" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "cannot print only names or real IDs in default format" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ; | 0 | ||||||||||||||||||||||||
| 209 | - | |||||||||||||||||||||||||
| 210 |   if (default_format && opt_zero)
 
  | 1-221 | ||||||||||||||||||||||||
| 211 |     die (EXIT_FAILURE, 0, executed 1 time by 1 test:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"option --zero not permitted in default format\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "option --zero not permitted in default format" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "option --zero not permitted in default format" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;Executed by: 
  | 1 | ||||||||||||||||||||||||
| 212 |          _("option --zero not permitted in default format")); executed 1 time by 1 test:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"option --zero not permitted in default format\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "option --zero not permitted in default format" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "option --zero not permitted in default format" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;Executed by: 
  | 1 | ||||||||||||||||||||||||
| 213 | - | |||||||||||||||||||||||||
| 214 | /* If we are on a SELinux/SMACK-enabled kernel, no user is specified, and | - | ||||||||||||||||||||||||
| 215 | either --context is specified or none of (-u,-g,-G) is specified, | - | ||||||||||||||||||||||||
| 216 | and we're not in POSIXLY_CORRECT mode, get our context. Otherwise, | - | ||||||||||||||||||||||||
| 217 | leave the context variable alone - it has been initialized to an | - | ||||||||||||||||||||||||
| 218 | invalid value that will be not displayed in print_full_info(). */ | - | ||||||||||||||||||||||||
| 219 |   if (n_ids == 0
  | 114-118 | ||||||||||||||||||||||||
| 220 |       && (just_context
  | 0-118 | ||||||||||||||||||||||||
| 221 |           || (default_format && ! getenv ("POSIXLY_CORRECT"))))
 
  | 0-117 | ||||||||||||||||||||||||
| 222 | { | - | ||||||||||||||||||||||||
| 223 | /* Report failure only if --context (-Z) was explicitly requested. */ | - | ||||||||||||||||||||||||
| 224 |       if ((selinux_enabled && getcon (&context) && just_context)
 
 
  | 0-1 | ||||||||||||||||||||||||
| 225 |           || (smack_enabled
  | 0-1 | ||||||||||||||||||||||||
| 226 |               && smack_new_label_from_self (&context) < 0
  | 0 | ||||||||||||||||||||||||
| 227 |               && just_context))
  | 0 | ||||||||||||||||||||||||
| 228 |         die (EXIT_FAILURE, 0, _("can't get process context")); never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"can't get process context\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "can't get process context" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "can't get process context" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))); | 0 | ||||||||||||||||||||||||
| 229 |     } executed 1 time by 1 test:  end of blockExecuted by: 
  | 1 | ||||||||||||||||||||||||
| 230 | - | |||||||||||||||||||||||||
| 231 |   if (n_ids == 1)
  | 114-118 | ||||||||||||||||||||||||
| 232 | { | - | ||||||||||||||||||||||||
| 233 | struct passwd *pwd = NULL; | - | ||||||||||||||||||||||||
| 234 | const char *spec = argv[optind]; | - | ||||||||||||||||||||||||
| 235 | /* Disallow an empty spec here as parse_user_spec() doesn't | - | ||||||||||||||||||||||||
| 236 | give an error for that as it seems it's a valid way to | - | ||||||||||||||||||||||||
| 237 | specify a noop or "reset special bits" depending on the system. */ | - | ||||||||||||||||||||||||
| 238 |       if (*spec)
  | 1-113 | ||||||||||||||||||||||||
| 239 | { | - | ||||||||||||||||||||||||
| 240 |           if (parse_user_spec (spec, &euid, NULL, NULL, NULL) == NULL)
  | 2-111 | ||||||||||||||||||||||||
| 241 | { | - | ||||||||||||||||||||||||
| 242 | /* parse_user_spec will only extract a numeric spec, | - | ||||||||||||||||||||||||
| 243 | so we lookup that here to verify and also retrieve | - | ||||||||||||||||||||||||
| 244 | the PW_NAME used subsequently in group lookup. */ | - | ||||||||||||||||||||||||
| 245 | pwd = getpwuid (euid); | - | ||||||||||||||||||||||||
| 246 |             } executed 111 times by 1 test:  end of blockExecuted by: 
  | 111 | ||||||||||||||||||||||||
| 247 |         } executed 113 times by 1 test:  end of blockExecuted by: 
  | 113 | ||||||||||||||||||||||||
| 248 |       if (pwd == NULL)
  | 3-111 | ||||||||||||||||||||||||
| 249 |         die (EXIT_FAILURE, 0, _("%s: no such user"), quote (spec)); executed 3 times by 1 test:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: no such user\", 5), quote (spec)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s: no such user" , 5) , quote (spec)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: no such user" , 5) , quote (spec)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));Executed by: 
  | 3 | ||||||||||||||||||||||||
| 250 | pw_name = xstrdup (pwd->pw_name); | - | ||||||||||||||||||||||||
| 251 | ruid = euid = pwd->pw_uid; | - | ||||||||||||||||||||||||
| 252 | rgid = egid = pwd->pw_gid; | - | ||||||||||||||||||||||||
| 253 |     } executed 111 times by 1 test:  end of blockExecuted by: 
  | 111 | ||||||||||||||||||||||||
| 254 | else | - | ||||||||||||||||||||||||
| 255 | { | - | ||||||||||||||||||||||||
| 256 | /* POSIX says identification functions (getuid, getgid, and | - | ||||||||||||||||||||||||
| 257 | others) cannot fail, but they can fail under GNU/Hurd and a | - | ||||||||||||||||||||||||
| 258 | few other systems. Test for failure by checking errno. */ | - | ||||||||||||||||||||||||
| 259 | uid_t NO_UID = -1; | - | ||||||||||||||||||||||||
| 260 | gid_t NO_GID = -1; | - | ||||||||||||||||||||||||
| 261 | - | |||||||||||||||||||||||||
| 262 |       if (just_user ? !use_real
 
  | 29-89 | ||||||||||||||||||||||||
| 263 |           : !just_group && !just_group_list && !just_context)
 
 
 
  | 0-85 | ||||||||||||||||||||||||
| 264 | { | - | ||||||||||||||||||||||||
| 265 | errno = 0; | - | ||||||||||||||||||||||||
| 266 | euid = geteuid (); | - | ||||||||||||||||||||||||
| 267 |           if (euid == NO_UID && errno)
 
  | 0-85 | ||||||||||||||||||||||||
| 268 |             die (EXIT_FAILURE, errno, _("cannot get effective UID")); never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"cannot get effective UID\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot get effective UID" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot get effective UID" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))); | 0 | ||||||||||||||||||||||||
| 269 |         } executed 85 times by 1 test:  end of blockExecuted by: 
  | 85 | ||||||||||||||||||||||||
| 270 | - | |||||||||||||||||||||||||
| 271 |       if (just_user ? use_real
 
  | 21-97 | ||||||||||||||||||||||||
| 272 |           : !just_group && (just_group_list || !just_context))
 
 
 
  | 0-97 | ||||||||||||||||||||||||
| 273 | { | - | ||||||||||||||||||||||||
| 274 | errno = 0; | - | ||||||||||||||||||||||||
| 275 | ruid = getuid (); | - | ||||||||||||||||||||||||
| 276 |           if (ruid == NO_UID && errno)
 
  | 0-21 | ||||||||||||||||||||||||
| 277 |             die (EXIT_FAILURE, errno, _("cannot get real UID")); never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"cannot get real UID\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot get real UID" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot get real UID" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))); | 0 | ||||||||||||||||||||||||
| 278 |         } executed 21 times by 1 test:  end of blockExecuted by: 
  | 21 | ||||||||||||||||||||||||
| 279 | - | |||||||||||||||||||||||||
| 280 |       if (!just_user && (just_group || just_group_list || !just_context))
 
 
 
  | 0-89 | ||||||||||||||||||||||||
| 281 | { | - | ||||||||||||||||||||||||
| 282 | errno = 0; | - | ||||||||||||||||||||||||
| 283 | egid = getegid (); | - | ||||||||||||||||||||||||
| 284 |           if (egid == NO_GID && errno)
 
  | 0-29 | ||||||||||||||||||||||||
| 285 |             die (EXIT_FAILURE, errno, _("cannot get effective GID")); never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"cannot get effective GID\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot get effective GID" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot get effective GID" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))); | 0 | ||||||||||||||||||||||||
| 286 | - | |||||||||||||||||||||||||
| 287 | errno = 0; | - | ||||||||||||||||||||||||
| 288 | rgid = getgid (); | - | ||||||||||||||||||||||||
| 289 |           if (rgid == NO_GID && errno)
 
  | 0-29 | ||||||||||||||||||||||||
| 290 |             die (EXIT_FAILURE, errno, _("cannot get real GID")); never executed:  ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"cannot get real GID\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot get real GID" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot get real GID" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))); | 0 | ||||||||||||||||||||||||
| 291 |         } executed 29 times by 1 test:  end of blockExecuted by: 
  | 29 | ||||||||||||||||||||||||
| 292 |     } executed 118 times by 1 test:  end of blockExecuted by: 
  | 118 | ||||||||||||||||||||||||
| 293 | - | |||||||||||||||||||||||||
| 294 |   if (just_user)
  | 106-123 | ||||||||||||||||||||||||
| 295 | { | - | ||||||||||||||||||||||||
| 296 | print_user (use_real ? ruid : euid); | - | ||||||||||||||||||||||||
| 297 |     } executed 123 times by 1 test:  end of blockExecuted by: 
  | 123 | ||||||||||||||||||||||||
| 298 |   else if (just_group)
  | 48-58 | ||||||||||||||||||||||||
| 299 | { | - | ||||||||||||||||||||||||
| 300 |       if (!print_group (use_real ? rgid : egid, use_name))
  | 0-48 | ||||||||||||||||||||||||
| 301 |         ok = false; never executed:  ok = 0 ; | 0 | ||||||||||||||||||||||||
| 302 |     } executed 48 times by 1 test:  end of blockExecuted by: 
  | 48 | ||||||||||||||||||||||||
| 303 |   else if (just_group_list)
  | 8-50 | ||||||||||||||||||||||||
| 304 | { | - | ||||||||||||||||||||||||
| 305 |       if (!print_group_list (pw_name, ruid, rgid, egid, use_name,
  | 0-50 | ||||||||||||||||||||||||
| 306 |                              opt_zero ? '\0' : ' '))
  | 0-50 | ||||||||||||||||||||||||
| 307 |         ok = false; never executed:  ok = 0 ; | 0 | ||||||||||||||||||||||||
| 308 |     } executed 50 times by 1 test:  end of blockExecuted by: 
  | 50 | ||||||||||||||||||||||||
| 309 |   else if (just_context)
  | 0-8 | ||||||||||||||||||||||||
| 310 | { | - | ||||||||||||||||||||||||
| 311 | fputs (context, stdout); | - | ||||||||||||||||||||||||
| 312 |     } never executed:  end of block | 0 | ||||||||||||||||||||||||
| 313 | else | - | ||||||||||||||||||||||||
| 314 | { | - | ||||||||||||||||||||||||
| 315 | print_full_info (pw_name); | - | ||||||||||||||||||||||||
| 316 |     } executed 8 times by 1 test:  end of blockExecuted by: 
  | 8 | ||||||||||||||||||||||||
| 317 | putchar (opt_zero ? '\0' : '\n'); | - | ||||||||||||||||||||||||
| 318 | - | |||||||||||||||||||||||||
| 319 | IF_LINT (free (pw_name)); | - | ||||||||||||||||||||||||
| 320 |   return ok ? EXIT_SUCCESS : EXIT_FAILURE; executed 229 times by 1 test:  return ok ? 0 : 1 ;Executed by: 
  | 229 | ||||||||||||||||||||||||
| 321 | } | - | ||||||||||||||||||||||||
| 322 | - | |||||||||||||||||||||||||
| 323 | /* Convert a gid_t to string. Do not use this function directly. | - | ||||||||||||||||||||||||
| 324 | Instead, use it via the gidtostr macro. | - | ||||||||||||||||||||||||
| 325 | Beware that it returns a pointer to static storage. */ | - | ||||||||||||||||||||||||
| 326 | static char * | - | ||||||||||||||||||||||||
| 327 | gidtostr_ptr (gid_t const *gid) | - | ||||||||||||||||||||||||
| 328 | { | - | ||||||||||||||||||||||||
| 329 | static char buf[INT_BUFSIZE_BOUND (uintmax_t)]; | - | ||||||||||||||||||||||||
| 330 |   return umaxtostr (*gid, buf); executed 66 times by 1 test:  return umaxtostr (*gid, buf);Executed by: 
  | 66 | ||||||||||||||||||||||||
| 331 | } | - | ||||||||||||||||||||||||
| 332 | #define gidtostr(g) gidtostr_ptr (&(g)) | - | ||||||||||||||||||||||||
| 333 | - | |||||||||||||||||||||||||
| 334 | /* Convert a uid_t to string. Do not use this function directly. | - | ||||||||||||||||||||||||
| 335 | Instead, use it via the uidtostr macro. | - | ||||||||||||||||||||||||
| 336 | Beware that it returns a pointer to static storage. */ | - | ||||||||||||||||||||||||
| 337 | static char * | - | ||||||||||||||||||||||||
| 338 | uidtostr_ptr (uid_t const *uid) | - | ||||||||||||||||||||||||
| 339 | { | - | ||||||||||||||||||||||||
| 340 | static char buf[INT_BUFSIZE_BOUND (uintmax_t)]; | - | ||||||||||||||||||||||||
| 341 |   return umaxtostr (*uid, buf); executed 108 times by 1 test:  return umaxtostr (*uid, buf);Executed by: 
  | 108 | ||||||||||||||||||||||||
| 342 | } | - | ||||||||||||||||||||||||
| 343 | #define uidtostr(u) uidtostr_ptr (&(u)) | - | ||||||||||||||||||||||||
| 344 | - | |||||||||||||||||||||||||
| 345 | /* Print the name or value of user ID UID. */ | - | ||||||||||||||||||||||||
| 346 | - | |||||||||||||||||||||||||
| 347 | static void | - | ||||||||||||||||||||||||
| 348 | print_user (uid_t uid) | - | ||||||||||||||||||||||||
| 349 | { | - | ||||||||||||||||||||||||
| 350 | struct passwd *pwd = NULL; | - | ||||||||||||||||||||||||
| 351 | - | |||||||||||||||||||||||||
| 352 |   if (use_name)
  | 23-100 | ||||||||||||||||||||||||
| 353 | { | - | ||||||||||||||||||||||||
| 354 | pwd = getpwuid (uid); | - | ||||||||||||||||||||||||
| 355 |       if (pwd == NULL)
  | 0-23 | ||||||||||||||||||||||||
| 356 | { | - | ||||||||||||||||||||||||
| 357 | error (0, 0, _("cannot find name for user ID %s"), | - | ||||||||||||||||||||||||
| 358 | uidtostr (uid)); | - | ||||||||||||||||||||||||
| 359 | ok = false; | - | ||||||||||||||||||||||||
| 360 |         } never executed:  end of block | 0 | ||||||||||||||||||||||||
| 361 |     } executed 23 times by 1 test:  end of blockExecuted by: 
  | 23 | ||||||||||||||||||||||||
| 362 | - | |||||||||||||||||||||||||
| 363 |   char *s = pwd ? pwd->pw_name : uidtostr (uid);
  | 23-100 | ||||||||||||||||||||||||
| 364 | fputs (s, stdout); | - | ||||||||||||||||||||||||
| 365 | } executed 123 times by 1 test:  end of blockExecuted by: 
  | 123 | ||||||||||||||||||||||||
| 366 | - | |||||||||||||||||||||||||
| 367 | /* Print all of the info about the user's user and group IDs. */ | - | ||||||||||||||||||||||||
| 368 | - | |||||||||||||||||||||||||
| 369 | static void | - | ||||||||||||||||||||||||
| 370 | print_full_info (const char *username) | - | ||||||||||||||||||||||||
| 371 | { | - | ||||||||||||||||||||||||
| 372 | struct passwd *pwd; | - | ||||||||||||||||||||||||
| 373 | struct group *grp; | - | ||||||||||||||||||||||||
| 374 | - | |||||||||||||||||||||||||
| 375 | printf (_("uid=%s"), uidtostr (ruid)); | - | ||||||||||||||||||||||||
| 376 | pwd = getpwuid (ruid); | - | ||||||||||||||||||||||||
| 377 |   if (pwd)
  | 0-8 | ||||||||||||||||||||||||
| 378 |     printf ("(%s)", pwd->pw_name); executed 8 times by 1 test:  printf ("(%s)", pwd->pw_name);Executed by: 
  | 8 | ||||||||||||||||||||||||
| 379 | - | |||||||||||||||||||||||||
| 380 | printf (_(" gid=%s"), gidtostr (rgid)); | - | ||||||||||||||||||||||||
| 381 | grp = getgrgid (rgid); | - | ||||||||||||||||||||||||
| 382 |   if (grp)
  | 0-8 | ||||||||||||||||||||||||
| 383 |     printf ("(%s)", grp->gr_name); executed 8 times by 1 test:  printf ("(%s)", grp->gr_name);Executed by: 
  | 8 | ||||||||||||||||||||||||
| 384 | - | |||||||||||||||||||||||||
| 385 |   if (euid != ruid)
  | 0-8 | ||||||||||||||||||||||||
| 386 | { | - | ||||||||||||||||||||||||
| 387 | printf (_(" euid=%s"), uidtostr (euid)); | - | ||||||||||||||||||||||||
| 388 | pwd = getpwuid (euid); | - | ||||||||||||||||||||||||
| 389 |       if (pwd)
  | 0 | ||||||||||||||||||||||||
| 390 |         printf ("(%s)", pwd->pw_name); never executed:  printf ("(%s)", pwd->pw_name); | 0 | ||||||||||||||||||||||||
| 391 |     } never executed:  end of block | 0 | ||||||||||||||||||||||||
| 392 | - | |||||||||||||||||||||||||
| 393 |   if (egid != rgid)
  | 0-8 | ||||||||||||||||||||||||
| 394 | { | - | ||||||||||||||||||||||||
| 395 | printf (_(" egid=%s"), gidtostr (egid)); | - | ||||||||||||||||||||||||
| 396 | grp = getgrgid (egid); | - | ||||||||||||||||||||||||
| 397 |       if (grp)
  | 0 | ||||||||||||||||||||||||
| 398 |         printf ("(%s)", grp->gr_name); never executed:  printf ("(%s)", grp->gr_name); | 0 | ||||||||||||||||||||||||
| 399 |     } never executed:  end of block | 0 | ||||||||||||||||||||||||
| 400 | - | |||||||||||||||||||||||||
| 401 | { | - | ||||||||||||||||||||||||
| 402 | gid_t *groups; | - | ||||||||||||||||||||||||
| 403 | - | |||||||||||||||||||||||||
| 404 | gid_t primary_group; | - | ||||||||||||||||||||||||
| 405 |     if (username)
  | 1-7 | ||||||||||||||||||||||||
| 406 |       primary_group = pwd ? pwd->pw_gid : -1; executed 7 times by 1 test:  primary_group = pwd ? pwd->pw_gid : -1;Executed by: 
 
  | 0-7 | ||||||||||||||||||||||||
| 407 | else | - | ||||||||||||||||||||||||
| 408 |       primary_group = egid; executed 1 time by 1 test:  primary_group = egid;Executed by: 
  | 1 | ||||||||||||||||||||||||
| 409 | - | |||||||||||||||||||||||||
| 410 | int n_groups = xgetgroups (username, primary_group, &groups); | - | ||||||||||||||||||||||||
| 411 |     if (n_groups < 0)
  | 0-8 | ||||||||||||||||||||||||
| 412 | { | - | ||||||||||||||||||||||||
| 413 |         if (username)
  | 0 | ||||||||||||||||||||||||
| 414 |           error (0, errno, _("failed to get groups for user %s"), never executed:  error (0, (*__errno_location ()) , dcgettext (((void *)0), "failed to get groups for user %s" , 5) , quote (username)); | 0 | ||||||||||||||||||||||||
| 415 |                  quote (username)); never executed:  error (0, (*__errno_location ()) , dcgettext (((void *)0), "failed to get groups for user %s" , 5) , quote (username)); | 0 | ||||||||||||||||||||||||
| 416 | else | - | ||||||||||||||||||||||||
| 417 |           error (0, errno, _("failed to get groups for the current process")); never executed:  error (0, (*__errno_location ()) , dcgettext (((void *)0), "failed to get groups for the current process" , 5) ); | 0 | ||||||||||||||||||||||||
| 418 | ok = false; | - | ||||||||||||||||||||||||
| 419 |         return; never executed:  return; | 0 | ||||||||||||||||||||||||
| 420 | } | - | ||||||||||||||||||||||||
| 421 | - | |||||||||||||||||||||||||
| 422 |     if (n_groups > 0)
  | 0-8 | ||||||||||||||||||||||||
| 423 |       fputs (_(" groups="), stdout); executed 8 times by 1 test:  fputs_unlocked ( dcgettext (((void *)0), " groups=" , 5) , stdout );Executed by: 
  | 8 | ||||||||||||||||||||||||
| 424 |     for (int i = 0; i < n_groups; i++)
  | 8-58 | ||||||||||||||||||||||||
| 425 | { | - | ||||||||||||||||||||||||
| 426 |         if (i > 0)
  | 8-50 | ||||||||||||||||||||||||
| 427 |           putchar (','); executed 50 times by 1 test:  putchar_unlocked (',');Executed by: 
  | 50 | ||||||||||||||||||||||||
| 428 | fputs (gidtostr (groups[i]), stdout); | - | ||||||||||||||||||||||||
| 429 | grp = getgrgid (groups[i]); | - | ||||||||||||||||||||||||
| 430 |         if (grp)
  | 0-58 | ||||||||||||||||||||||||
| 431 |           printf ("(%s)", grp->gr_name); executed 58 times by 1 test:  printf ("(%s)", grp->gr_name);Executed by: 
  | 58 | ||||||||||||||||||||||||
| 432 |       } executed 58 times by 1 test:  end of blockExecuted by: 
  | 58 | ||||||||||||||||||||||||
| 433 | free (groups); | - | ||||||||||||||||||||||||
| 434 | } | - | ||||||||||||||||||||||||
| 435 | - | |||||||||||||||||||||||||
| 436 | /* POSIX mandates the precise output format, and that it not include | - | ||||||||||||||||||||||||
| 437 | any context=... part, so skip that if POSIXLY_CORRECT is set. */ | - | ||||||||||||||||||||||||
| 438 |   if (context)
  | 0-8 | ||||||||||||||||||||||||
| 439 |     printf (_(" context=%s"), context); never executed:  printf ( dcgettext (((void *)0), " context=%s" , 5) , context); | 0 | ||||||||||||||||||||||||
| 440 | } executed 8 times by 1 test:  end of blockExecuted by: 
  | 8 | ||||||||||||||||||||||||
| Source code | Switch to Preprocessed file |