Compare commits

..

226 Commits
4.8.1 ... v4.9

Author SHA1 Message Date
Serge Hallyn
6f9124b7f7 configure.ac: get ready to release 4.9
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-07-22 16:50:51 -05:00
Serge Hallyn
496fc2919d update Changelog
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-07-22 16:49:26 -05:00
Serge Hallyn
905eb76cec Merge pull request #378 from besser82/topic/besser82/update_po
Update translation files.
2021-07-14 09:35:31 -05:00
Serge Hallyn
0c821fcf0c Merge pull request #383 from ikerexxe/wrong_free
libmisc: don't free members variable
2021-07-14 07:25:55 -05:00
Serge Hallyn
93086e9aa7 Merge pull request #382 from StevenYGui/master
fread returns element count, not element size
2021-07-14 07:20:24 -05:00
Iker Pedrosa
c3cf23b00c libmisc: don't free members variable
In 9eb191edc4 I included a free() that
frees the members variable, which in turn causes the comma_to_list()
function to return an array of empty elements. The array variable holds
a list of pointers that point to offsets of the members variable. When
the function succeeds freeing members variable causes the elements of
the array variable to point to an empty string.

This is causing several regressions in our internal testing environment.
So, I'm reverting the change.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
2021-07-14 12:13:25 +02:00
steven Y Gui
ffd35d8902 fread returns element count, not element size 2021-07-14 16:17:48 +08:00
Björn Esser
c7b4f317f9 po/de.po: Update German translations.
Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-07-05 11:49:45 +02:00
Björn Esser
9b58a623f4 po: Update translation files from updated template.
Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-07-05 11:49:45 +02:00
Björn Esser
1a20189b83 po: Update pot file.
Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-07-05 11:49:36 +02:00
Serge Hallyn
bd102eaa35 Merge pull request #357 from besser82/topic/besser82/xcrypt_gensalt
Use crypt_gensalt(), if available in libcrypt.
2021-07-04 22:23:56 -05:00
Björn Esser
ea04eb301d libmisc/salt.c: Use crypt_gensalt(), if available in libcrypt.
Most Linux distributions, including Fedora and RHEL 8, are shipping
with libxcrypt >= 4.0.

Since that version of libxcrypt the provided family of crypt_gensalt()
functions are able to use automatic entropy drawn from secure system
ressources, like arc4random(), getentropy() or getrandom().

Anyways, the settings generated by crypt_gensalt() are always
guaranteed to works with the crypt() function.

Using crypt_gensalt() is also needed to make proper use of newer
hashing methods, like yescrypt, provided by libxcrypt.

Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-07-04 13:01:22 +02:00
Björn Esser
c93897a8d7 lib/defines.h: Include <crypt.h> if present on the system.
The functions crypt(3), crypt_gensalt(3), and their
feature test macros may be defined in there.

Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-07-04 13:01:21 +02:00
Björn Esser
c82ed0c15e libmisc/salt.c: Use secure system ressources to obtain random bytes.
In a previous commit we introduced /dev/urandom as a source to obtain
random bytes from.  This may not be available on all systems, or when
operating inside of a chroot.

Almost all systems provide functions to obtain random bytes from
secure system ressources.  Thus we should prefer to use these, and
fall back to /dev/urandom, if there is no such function present, as
a last resort.

Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-07-04 13:00:32 +02:00
Serge Hallyn
9eb191edc4 Merge pull request #359 from ikerexxe/rest_resource_leak
Fix covscan RESOURCE_LEAK
2021-06-24 13:14:15 -05:00
Iker Pedrosa
e65cc6aebc Fix covscan RESOURCE_LEAK
Error: RESOURCE_LEAK (CWE-772): [#def1]
shadow-4.8.1/lib/commonio.c:320: alloc_fn: Storage is returned from allocation function "fopen_set_perms".
shadow-4.8.1/lib/commonio.c:320: var_assign: Assigning: "bkfp" = storage returned from "fopen_set_perms(backup, "w", &sb)".
shadow-4.8.1/lib/commonio.c:329: noescape: Resource "bkfp" is not freed or pointed-to in "putc".
shadow-4.8.1/lib/commonio.c:334: noescape: Resource "bkfp" is not freed or pointed-to in "fflush".
shadow-4.8.1/lib/commonio.c:339: noescape: Resource "bkfp" is not freed or pointed-to in "fileno".
shadow-4.8.1/lib/commonio.c:342: leaked_storage: Variable "bkfp" going out of scope leaks the storage it points to.
  340|   	    || (fclose (bkfp) != 0)) {
  341|   		/* FIXME: unlink the backup file? */
  342|-> 		return -1;
  343|   	}
  344|

Error: RESOURCE_LEAK (CWE-772): [#def2]
shadow-4.8.1/libmisc/addgrps.c:69: alloc_fn: Storage is returned from allocation function "malloc".
shadow-4.8.1/libmisc/addgrps.c:69: var_assign: Assigning: "grouplist" = storage returned from "malloc(i * 4UL)".
shadow-4.8.1/libmisc/addgrps.c:73: noescape: Resource "grouplist" is not freed or pointed-to in "getgroups". [Note: The source code implementation of the function has been overridden by a builtin model.]
shadow-4.8.1/libmisc/addgrps.c:126: leaked_storage: Variable "grouplist" going out of scope leaks the storage it points to.
  124|   	}
  125|
  126|-> 	return 0;
  127|   }
  128|   #else				/* HAVE_SETGROUPS && !USE_PAM */

Error: RESOURCE_LEAK (CWE-772): [#def3]
shadow-4.8.1/libmisc/chowntty.c:62: alloc_fn: Storage is returned from allocation function "getgr_nam_gid".
shadow-4.8.1/libmisc/chowntty.c:62: var_assign: Assigning: "grent" = storage returned from "getgr_nam_gid(getdef_str("TTYGROUP"))".
shadow-4.8.1/libmisc/chowntty.c:98: leaked_storage: Variable "grent" going out of scope leaks the storage it points to.
   96|   	 */
   97|   #endif
   98|-> }
   99|

Error: RESOURCE_LEAK (CWE-772): [#def4]
shadow-4.8.1/libmisc/copydir.c:742: open_fn: Returning handle opened by "open". [Note: The source code implementation of the function has been overridden by a user model.]
shadow-4.8.1/libmisc/copydir.c:742: var_assign: Assigning: "ifd" = handle returned from "open(src, 0)".
shadow-4.8.1/libmisc/copydir.c:748: leaked_handle: Handle variable "ifd" going out of scope leaks the handle.
  746|   #ifdef WITH_SELINUX
  747|   	if (set_selinux_file_context (dst, NULL) != 0) {
  748|-> 		return -1;
  749|   	}
  750|   #endif				/* WITH_SELINUX */

Error: RESOURCE_LEAK (CWE-772): [#def5]
shadow-4.8.1/libmisc/copydir.c:751: open_fn: Returning handle opened by "open". [Note: The source code implementation of the function has been overridden by a user model.]
shadow-4.8.1/libmisc/copydir.c:751: var_assign: Assigning: "ofd" = handle returned from "open(dst, 577, statp->st_mode & 0xfffU)".
shadow-4.8.1/libmisc/copydir.c:752: noescape: Resource "ofd" is not freed or pointed-to in "fchown_if_needed".
shadow-4.8.1/libmisc/copydir.c:775: leaked_handle: Handle variable "ofd" going out of scope leaks the handle.
  773|   	   ) {
  774|   		(void) close (ifd);
  775|-> 		return -1;
  776|   	}
  777|

Error: RESOURCE_LEAK (CWE-772): [#def7]
shadow-4.8.1/libmisc/idmapping.c:188: alloc_fn: Storage is returned from allocation function "xmalloc".
shadow-4.8.1/libmisc/idmapping.c:188: var_assign: Assigning: "buf" = storage returned from "xmalloc(bufsize)".
shadow-4.8.1/libmisc/idmapping.c:188: var_assign: Assigning: "pos" = "buf".
shadow-4.8.1/libmisc/idmapping.c:213: noescape: Resource "buf" is not freed or pointed-to in "write".
shadow-4.8.1/libmisc/idmapping.c:219: leaked_storage: Variable "pos" going out of scope leaks the storage it points to.
shadow-4.8.1/libmisc/idmapping.c:219: leaked_storage: Variable "buf" going out of scope leaks the storage it points to.
  217|   	}
  218|   	close(fd);
  219|-> }

Error: RESOURCE_LEAK (CWE-772): [#def8]
shadow-4.8.1/libmisc/list.c:211: alloc_fn: Storage is returned from allocation function "xstrdup".
shadow-4.8.1/libmisc/list.c:211: var_assign: Assigning: "members" = storage returned from "xstrdup(comma)".
shadow-4.8.1/libmisc/list.c:217: var_assign: Assigning: "cp" = "members".
shadow-4.8.1/libmisc/list.c:218: noescape: Resource "cp" is not freed or pointed-to in "strchr".
shadow-4.8.1/libmisc/list.c:244: leaked_storage: Variable "cp" going out of scope leaks the storage it points to.
shadow-4.8.1/libmisc/list.c:244: leaked_storage: Variable "members" going out of scope leaks the storage it points to.
  242|   	if ('\0' == *members) {
  243|   		*array = (char *) 0;
  244|-> 		return array;
  245|   	}
  246|

Error: RESOURCE_LEAK (CWE-772): [#def11]
shadow-4.8.1/libmisc/myname.c:61: alloc_fn: Storage is returned from allocation function "xgetpwnam".
shadow-4.8.1/libmisc/myname.c:61: var_assign: Assigning: "pw" = storage returned from "xgetpwnam(cp)".
shadow-4.8.1/libmisc/myname.c:67: leaked_storage: Variable "pw" going out of scope leaks the storage it points to.
   65|   	}
   66|
   67|-> 	return xgetpwuid (ruid);
   68|   }
   69|

Error: RESOURCE_LEAK (CWE-772): [#def12]
shadow-4.8.1/libmisc/user_busy.c:260: alloc_fn: Storage is returned from allocation function "opendir".
shadow-4.8.1/libmisc/user_busy.c:260: var_assign: Assigning: "task_dir" = storage returned from "opendir(task_path)".
shadow-4.8.1/libmisc/user_busy.c:262: noescape: Resource "task_dir" is not freed or pointed-to in "readdir".
shadow-4.8.1/libmisc/user_busy.c:278: leaked_storage: Variable "task_dir" going out of scope leaks the storage it points to.
  276|   					         _("%s: user %s is currently used by process %d\n"),
  277|   					         Prog, name, pid);
  278|-> 					return 1;
  279|   				}
  280|   			}

Error: RESOURCE_LEAK (CWE-772): [#def20]
shadow-4.8.1/src/newgrp.c:162: alloc_fn: Storage is returned from allocation function "xgetspnam".
shadow-4.8.1/src/newgrp.c:162: var_assign: Assigning: "spwd" = storage returned from "xgetspnam(pwd->pw_name)".
shadow-4.8.1/src/newgrp.c:234: leaked_storage: Variable "spwd" going out of scope leaks the storage it points to.
  232|   	}
  233|
  234|-> 	return;
  235|
  236|   failure:

Error: RESOURCE_LEAK (CWE-772): [#def21]
shadow-4.8.1/src/passwd.c:530: alloc_fn: Storage is returned from allocation function "xstrdup".
shadow-4.8.1/src/passwd.c:530: var_assign: Assigning: "cp" = storage returned from "xstrdup(crypt_passwd)".
shadow-4.8.1/src/passwd.c:551: noescape: Resource "cp" is not freed or pointed-to in "strlen".
shadow-4.8.1/src/passwd.c:554: noescape: Resource "cp" is not freed or pointed-to in "strcat". [Note: The source code implementation of the function has been overridden by a builtin model.]
shadow-4.8.1/src/passwd.c:555: overwrite_var: Overwriting "cp" in "cp = newpw" leaks the storage that "cp" points to.
  553|   		strcpy (newpw, "!");
  554|   		strcat (newpw, cp);
  555|-> 		cp = newpw;
  556|   	}
  557|   	return cp;
2021-06-24 09:18:35 +02:00
Serge Hallyn
b3b1f5d4a4 Merge pull request #377 from besser82/topic/besser82/salt_c_random
libmisc/salt.c: Obtain random bytes from /dev/urandom.
2021-06-23 14:54:25 -05:00
Björn Esser
bc8257cf73 libmisc/salt.c: Obtain random bytes from /dev/urandom.
Using the random() function to obtain pseudo-random bytes
for generating salt strings is considered to be dangerous.
See CWE-327.

We really should use a more reliable source for obtaining
pseudo-random bytes like /dev/urandom.

Fixes #376.

Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-06-23 16:30:21 +02:00
Björn Esser
dbf230e4cf libmisc/salt.c: Add comments how the minmum buffer length is computed.
In the previous commit we refactored the functions converting the
rounds number into a string for use with the crypt() function, to
not require any static buffer anymore.

Add some clarifying comments about how the minimum required buffer
length is computed inside of these functions.

Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-06-23 16:29:24 +02:00
Serge Hallyn
2f0d14eb21 Merge pull request #361 from besser82/topic/besser82/simplyfy_libmisc_salt
Sanitize code in libmisc/salt.c
2021-06-23 09:18:05 -05:00
Serge Hallyn
d4535015a0 Merge pull request #362 from ikerexxe/buffer_size
Fix covscan BUFFER_SIZE
2021-06-22 20:55:31 -05:00
Björn Esser
14b108728a libmisc/salt.c: Sanitize code.
* Move all pre-processor defines to the top of the file.
* Unify the gensalt() function to be useable for all supported
  hash methods.
* Drop the gensalt_{b,yes}crypt() functions in favor of the
  previous change.
* Refactor the functions converting the rounds number into
  a string for use with the crypt() function, to not require
  any static buffer anymore.
* Clarify the comment about how crypt_make_salt() chooses the used
  hash method from the settings in the login.defs file.
* Use memset() to fill static buffers with zero before using them.
* Use a fixed amount of 16 random base64-chars for the
  sha{256,512}crypt hash methods, which is effectively still less
  than the recommendation from NIST (>= 128 bits), but the maximum
  those methods can effectively use (approx. 90 bits).
* Rename ROUNDS_{MIN,MAX} to SHA_ROUNDS_{MIN,MAX}.
* Bugfixes in the logic of setting rounds in BCRYPT_salt_rounds().
* Likewise for YESCRYPT_salt_cost().
* Fix formatting and white-space errors.

Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-06-22 22:03:21 +02:00
Serge Hallyn
dbfad7d1c9 Merge pull request #360 from besser82/topic/besser82/bcrypt_prefix
bcrypt should use $2b$ as prefix for setting.
2021-06-22 14:46:41 -05:00
Björn Esser
738d92a4bd libmisc/salt.c: bcrypt should use $2b$ as prefix for setting.
This prefix is the recommended one for new bcrypt hashes
for a long time.

Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-06-22 18:52:39 +02:00
Björn Esser
7a3bb4d0ea libmisc/salt.c: Use int pointer for YESCRYPT_salt_cost().
The corresponding functions for the other hash methods all take
a pointer to an integer value as the only paramater, so this
particular function should do so as well.

Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2021-06-22 18:51:59 +02:00
Serge Hallyn
a026ea6bbf Merge pull request #354 from ikerexxe/useradd_resource_leak
useradd.c: fix covscan RESOURCE_LEAK
2021-06-22 09:22:09 -05:00
Serge Hallyn
5939e066db Merge pull request #353 from ikerexxe/man_subid
man: improve subid documentation
2021-06-22 09:20:11 -05:00
Serge Hallyn
af9984bff1 Merge pull request #356 from tzccinct/pass-min-days-doc
man: use the consistent value 0 to disable PASS_MIN_DAYS restriction
2021-06-22 08:51:08 -05:00
Iker Pedrosa
0faec51bf0 man: definition and configuration of subid
Define the subid functionality and explain the way to configure its
delegation.
2021-06-16 12:25:06 +02:00
Iker Pedrosa
5d0d784197 Fix covscan BUFFER_SIZE
Error: BUFFER_SIZE (CWE-170): [#def6]
shadow-4.8.1/libmisc/failure.c:101: buffer_size_warning: Calling "strncpy" with a maximum size argument of 12 bytes on destination array "fl->fail_line" of size 12 bytes might leave the destination string unterminated.
   99|   	}
  100|
  101|-> 	strncpy (fl->fail_line, tty, sizeof fl->fail_line);
  102|   	(void) time (&fl->fail_time);
  103|

Error: BUFFER_SIZE (CWE-170): [#def9]
shadow-4.8.1/libmisc/log.c:103: buffer_size_warning: Calling "strncpy" with a maximum size argument of 32 bytes on destination array "newlog.ll_line" of size 32 bytes might leave the destination string unterminated.
  101|   	(void) time (&ll_time);
  102|   	newlog.ll_time = ll_time;
  103|-> 	strncpy (newlog.ll_line, line, sizeof newlog.ll_line);
  104|   #if HAVE_LL_HOST
  105|   	strncpy (newlog.ll_host, host, sizeof newlog.ll_host);

Error: BUFFER_SIZE (CWE-170): [#def10]
shadow-4.8.1/libmisc/log.c:105: buffer_size_warning: Calling "strncpy" with a maximum size argument of 256 bytes on destination array "newlog.ll_host" of size 256 bytes might leave the destination string unterminated.
  103|   	strncpy (newlog.ll_line, line, sizeof newlog.ll_line);
  104|   #if HAVE_LL_HOST
  105|-> 	strncpy (newlog.ll_host, host, sizeof newlog.ll_host);
  106|   #endif
  107|   	if (   (lseek (fd, offset, SEEK_SET) != offset)

Error: BUFFER_SIZE (CWE-170): [#def13]
shadow-4.8.1/libmisc/utmp.c:260: buffer_size_warning: Calling "strncpy" with a maximum size argument of 32 bytes on destination array "utent->ut_line" of size 32 bytes might leave the destination string unterminated.
  258|   #endif				/* HAVE_STRUCT_UTMP_UT_TYPE */
  259|   	utent->ut_pid = getpid ();
  260|-> 	strncpy (utent->ut_line, line,      sizeof (utent->ut_line));
  261|   #ifdef HAVE_STRUCT_UTMP_UT_ID
  262|   	if (NULL != ut) {

Error: BUFFER_SIZE (CWE-170): [#def14]
shadow-4.8.1/libmisc/utmp.c:266: buffer_size_warning: Calling "strncpy" with a maximum size argument of 4 bytes on destination array "utent->ut_id" of size 4 bytes might leave the destination string unterminated.
  264|   	} else {
  265|   		/* XXX - assumes /dev/tty?? */
  266|-> 		strncpy (utent->ut_id, line + 3, sizeof (utent->ut_id));
  267|   	}
  268|   #endif				/* HAVE_STRUCT_UTMP_UT_ID */

Error: BUFFER_SIZE (CWE-170): [#def15]
shadow-4.8.1/libmisc/utmp.c:273: buffer_size_warning: Calling "strncpy" with a maximum size argument of 32 bytes on destination array "utent->ut_user" of size 32 bytes might leave the destination string unterminated.
  271|   #endif				/* HAVE_STRUCT_UTMP_UT_NAME */
  272|   #ifdef HAVE_STRUCT_UTMP_UT_USER
  273|-> 	strncpy (utent->ut_user, name,      sizeof (utent->ut_user));
  274|   #endif				/* HAVE_STRUCT_UTMP_UT_USER */
  275|   	if (NULL != hostname) {

Error: BUFFER_SIZE (CWE-170): [#def16]
shadow-4.8.1/libmisc/utmp.c:278: buffer_size_warning: Calling "strncpy" with a maximum size argument of 256 bytes on destination array "utent->ut_host" of size 256 bytes might leave the destination string unterminated.
  276|   		struct addrinfo *info = NULL;
  277|   #ifdef HAVE_STRUCT_UTMP_UT_HOST
  278|-> 		strncpy (utent->ut_host, hostname, sizeof (utent->ut_host));
  279|   #endif				/* HAVE_STRUCT_UTMP_UT_HOST */
  280|   #ifdef HAVE_STRUCT_UTMP_UT_SYSLEN

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
2021-06-16 09:50:53 +02:00
Iker Pedrosa
1aed7ae945 useradd.c: fix covscan RESOURCE_LEAK
Error: RESOURCE_LEAK (CWE-772): [#def28]
shadow-4.8.1/src/useradd.c:1905: open_fn: Returning handle opened by "open". [Note: The source code implementation of the function has been overridden by a user model.]
shadow-4.8.1/src/useradd.c:1905: var_assign: Assigning: "fd" = handle returned from "open("/var/log/faillog", 2)".
shadow-4.8.1/src/useradd.c:1906: noescape: Resource "fd" is not freed or pointed-to in "lseek".
shadow-4.8.1/src/useradd.c:1917: leaked_handle: Handle variable "fd" going out of scope leaks the handle.
 1915|   		/* continue */
 1916|   	}
 1917|-> }
 1918|
 1919|   static void lastlog_reset (uid_t uid)

Error: RESOURCE_LEAK (CWE-772): [#def29]
shadow-4.8.1/src/useradd.c:1938: open_fn: Returning handle opened by "open". [Note: The source code implementation of the function has been overridden by a user model.]
shadow-4.8.1/src/useradd.c:1938: var_assign: Assigning: "fd" = handle returned from "open("/var/log/lastlog", 2)".
shadow-4.8.1/src/useradd.c:1939: noescape: Resource "fd" is not freed or pointed-to in "lseek".
shadow-4.8.1/src/useradd.c:1950: leaked_handle: Handle variable "fd" going out of scope leaks the handle.
 1948|   		/* continue */
 1949|   	}
 1950|-> }
 1951|
 1952|   static void tallylog_reset (const char *user_name)

Error: RESOURCE_LEAK (CWE-772): [#def30]
shadow-4.8.1/src/useradd.c:2109: alloc_fn: Storage is returned from allocation function "strdup".
shadow-4.8.1/src/useradd.c:2109: var_assign: Assigning: "bhome" = storage returned from "strdup(prefix_user_home)".
shadow-4.8.1/src/useradd.c:2131: noescape: Resource "bhome" is not freed or pointed-to in "strtok".
shadow-4.8.1/src/useradd.c:2207: leaked_storage: Variable "bhome" going out of scope leaks the storage it points to.
 2205|   		}
 2206|   #endif
 2207|-> 	}
 2208|   }
 2209|
2021-06-15 09:40:40 +02:00
Iker Pedrosa
68ebbf9360 man: clarify subid delegation behaviour
Following the discussion https://github.com/shadow-maint/shadow/pull/345
I have changed the documentation to clarify the behaviour of subid
delegation when any subid source except files is configured.
2021-06-15 09:25:48 +02:00
tzccinct
83db204477 man: use the consistent value 0 to disable PASS_MIN_DAYS restriction 2021-06-12 12:55:57 +09:00
Serge Hallyn
456bdb78f8 Merge pull request #355 from ikerexxe/usermod_resource_leak
usermod.c: fix covscan RESOURCE_LEAK
2021-06-11 13:57:38 -05:00
Iker Pedrosa
8281c82e32 usermod.c: fix covscan RESOURCE_LEAK
Error: RESOURCE_LEAK (CWE-772): [#def31]
shadow-4.8.1/src/usermod.c:813: alloc_fn: Storage is returned from allocation function "__gr_dup".
shadow-4.8.1/src/usermod.c:813: var_assign: Assigning: "ngrp" = storage returned from "__gr_dup(grp)".
shadow-4.8.1/src/usermod.c:892: leaked_storage: Variable "ngrp" going out of scope leaks the storage it points to.
  890|   		}
  891|   	}
  892|-> }
  893|
  894|   #ifdef SHADOWGRP

Error: RESOURCE_LEAK (CWE-772): [#def32]
shadow-4.8.1/src/usermod.c:933: alloc_fn: Storage is returned from allocation function "__sgr_dup".
shadow-4.8.1/src/usermod.c:933: var_assign: Assigning: "nsgrp" = storage returned from "__sgr_dup(sgrp)".
shadow-4.8.1/src/usermod.c:1031: leaked_storage: Variable "nsgrp" going out of scope leaks the storage it points to.
 1029|   		}
 1030|   	}
 1031|-> }
 1032|   #endif				/* SHADOWGRP */
 1033|

Error: RESOURCE_LEAK (CWE-772): [#def34]
shadow-4.8.1/src/usermod.c:1161: alloc_fn: Storage is returned from allocation function "getgr_nam_gid".
shadow-4.8.1/src/usermod.c:1161: var_assign: Assigning: "grp" = storage returned from "getgr_nam_gid(optarg)".
shadow-4.8.1/src/usermod.c:1495: leaked_storage: Variable "grp" going out of scope leaks the storage it points to.
 1493|   	}
 1494|   #endif				/* ENABLE_SUBIDS */
 1495|-> }
 1496|
 1497|   /*

Error: RESOURCE_LEAK (CWE-772): [#def35]
shadow-4.8.1/src/usermod.c:1991: open_fn: Returning handle opened by "open". [Note: The source code implementation of the function has been overridden by a user model.]
shadow-4.8.1/src/usermod.c:1991: var_assign: Assigning: "fd" = handle returned from "open("/var/log/lastlog", 2)".
shadow-4.8.1/src/usermod.c:2000: noescape: Resource "fd" is not freed or pointed-to in "lseek".
shadow-4.8.1/src/usermod.c:2000: noescape: Resource "fd" is not freed or pointed-to in "read". [Note: The source code implementation of the function has been overridden by a builtin model.]
shadow-4.8.1/src/usermod.c:2003: noescape: Resource "fd" is not freed or pointed-to in "lseek".
shadow-4.8.1/src/usermod.c:2032: leaked_handle: Handle variable "fd" going out of scope leaks the handle.
 2030|   		}
 2031|   	}
 2032|-> }
 2033|
 2034|   /*

Error: RESOURCE_LEAK (CWE-772): [#def36]
shadow-4.8.1/src/usermod.c:2052: open_fn: Returning handle opened by "open". [Note: The source code implementation of the function has been overridden by a user model.]
shadow-4.8.1/src/usermod.c:2052: var_assign: Assigning: "fd" = handle returned from "open("/var/log/faillog", 2)".
shadow-4.8.1/src/usermod.c:2061: noescape: Resource "fd" is not freed or pointed-to in "lseek".
shadow-4.8.1/src/usermod.c:2061: noescape: Resource "fd" is not freed or pointed-to in "read". [Note: The source code implementation of the function has been overridden by a builtin model.]
shadow-4.8.1/src/usermod.c:2064: noescape: Resource "fd" is not freed or pointed-to in "lseek".
shadow-4.8.1/src/usermod.c:2092: leaked_handle: Handle variable "fd" going out of scope leaks the handle.
 2090|   		}
 2091|   	}
 2092|-> }
 2093|
 2094|   #ifndef NO_MOVE_MAILBOX
2021-06-11 11:50:49 +02:00
Serge Hallyn
a6154b8572 Merge pull request #352 from hallyn/2021-06-01/relpath
usermod, newusers, prefix: enforce absolute paths for homedir
2021-06-03 21:31:17 -05:00
Serge Hallyn
9d37173b24 usermod, newusers, prefix: enforce absolute paths for homedir
useradd already was enforcing this, but these were not.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-06-01 22:12:24 -05:00
Serge Hallyn
bd920ab36a Merge pull request #348 from hallyn/2021-05-28/notextern
libsubid/api.c: make shadow_logfd not extern
2021-06-01 10:12:46 -05:00
Serge Hallyn
1d767fb779 libsubid/api.c: make shadow_logfd not extern
Closes #346

Also #include stdio.h

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-06-01 10:11:46 -05:00
Serge Hallyn
8eb6f8ace4 Merge pull request #327 from squat/bugfix_relative_prefix_path
fix: create relative home path correctly
2021-05-29 14:16:46 -05:00
Christian Brauner
0871122443 Merge pull request #345 from ikerexxe/subid_single_source
man: clarify subid delegation
2021-05-25 14:20:17 +02:00
Iker Pedrosa
d5b15f8633 man: clarify subid delegation
Clarify that the subid delegation can only come from one source.
Moreover, add an example of what might happen if the subid source is NSS
and useradd is executed.

Related: https://github.com/shadow-maint/shadow/issues/331
2021-05-24 12:43:40 +02:00
Serge Hallyn
ec1951c181 Merge pull request #344 from hallyn/2021-05-23/hasanyrange
fix newusers when nss provides subids
2021-05-23 09:26:54 -05:00
Serge Hallyn
9d169ffc41 fix newusers when nss provides subids
Closes #331

1. drop 'has_any_range' nss method as it is not useful

2. do not try to create a subid range in newusers when using nss for
   subids, since that's not possible.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
(cherry picked from commit 88a434adbdcf4a8640793fd58bcd2ba77598349d)
2021-05-23 08:16:16 -05:00
Serge Hallyn
0fe42f571c Merge pull request #343 from hallyn/2021-05-23/quiet
libsubid_init: don't print messages on error
2021-05-23 08:03:58 -05:00
Serge Hallyn
b0e86b959f libsubid_init: don't print messages on error
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-05-23 08:03:14 -05:00
Serge Hallyn
ea7af4e154 Merge pull request #340 from hallyn/2021-05-16/subidrange
Don't return owner in list_owner_ranges API call.
2021-05-22 18:16:43 -05:00
Serge Hallyn
3d670ba7ed nss/libsubid: simplify the ranges variable for list_owner_ranges
Following alexey-tikhonov's suggestion.

Since we've dropped the 'owner' field in the data returned for
get_subid_ranges, we can just return a single allocated array of
simple structs.  This means we can return a ** instead of ***, and
we can get rid of the subid_free_ranges() helper, since the caller
can just free() the returned data.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-05-22 17:59:57 -05:00
Serge Hallyn
2f1f45d64f Merge pull request #342 from hallyn/2021-05-22/subuidzero
Fix useradd with SUB_UID_COUNT=0
2021-05-22 11:43:23 -05:00
Serge Hallyn
663824ef4c Fix useradd with SUB_UID_COUNT=0
Closes #298

Fix useradd when SUB_UID_COUNT=0 in login.defs.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-05-22 11:42:02 -05:00
Serge Hallyn
c6cab4a7ba Merge pull request #341 from hallyn/2021-05-17/fail
libsubid_init: return false if out of memory
2021-05-17 08:49:31 -05:00
Serge Hallyn
e34f49c196 libsubid_init: return false if out of memory
The rest of the run isn't likely to get much better, is it?

Thanks to Alexey for pointing this out.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
Cc: Alexey Tikhonov <atikhono@redhat.com>
2021-05-17 08:49:01 -05:00
Serge Hallyn
322db32971 Don't return owner in list_owner_ranges API call.
Closes: 339

struct subordinate_range is pretty closely tied to the existing
subid code and /etc/subuid format, so it includes an owner.  Dropping
that or even renaming it is more painful than I'd first thought.
So introduce a 'struct subid_range' which is only the start and
count, leaving 'struct subordinate_range' as the owner, start and
count.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-05-16 21:49:53 -05:00
Serge Hallyn
f9831a4a1a Merge pull request #335 from hallyn/2021-05-08/stderr
[WIP] libsubid: don't print error messages on stderr by default
2021-05-16 21:44:22 -05:00
Serge Hallyn
2b22a6909d libsubid: don't print error messages on stderr by default
Closes #325

Add a new subid_init() function which can be used to specify the
stream on which error messages should be printed.  (If you want to
get fancy you can redirect that to memory :)  If subid_init() is
not called, use stderr.  If NULL is passed, then /dev/null will
be used.

This patch also fixes up the 'Prog', which previously had to be
defined by any program linking against libsubid.  Now, by default
in libsubid it will show (subid).  Once subid_init() is called,
it will use the first variable passed to subid_init().

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-05-15 12:38:55 -05:00
Serge Hallyn
ca1d912e6b Merge pull request #333 from ikerexxe/hmac_crypto_algo
login.defs: include HMAC_CRYPTO_ALGO key
2021-05-08 16:35:05 -05:00
Serge Hallyn
3ac8d97825 Merge pull request #323 from cgzones/selinux
SELinux modernizations
2021-05-07 08:32:01 -05:00
Serge Hallyn
e9e8e3270f Merge pull request #334 from brauner/2021-05-06.cap_setfcap
libmisc: retain CAP_SETFCAP when mapping uid 0
2021-05-06 14:45:50 -05:00
Christian Brauner
91d4ab622b libmisc: retain setfcap when mapping uid 0
When uid 0 maps host uid 0 into the child userns newer kernels require
CAP_SETFCAP be retained as this allows the caller to create fscaps that
are valid in the ancestor userns. This was a security issue (in very
rare circumstances). So whenever host uid 0 is mapped, retain
CAP_SETFCAP if the caller had it.
Userspace won't need to set CAP_SETFCAP on newuidmap as this is really
only a scenario that real root should be doing which always has
CAP_SETFCAP. And if they don't then they are in a locked-down userns.
(LXC sometimes maps host uid 0 during chown operations in a helper
 userns but will not rely on newuidmap for that. But we don't want to
 risk regressing callers that want to rely on this behavior.)

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2021-05-06 19:04:42 +02:00
Iker Pedrosa
b8cbc2c113 login.defs: include HMAC_CRYPTO_ALGO key
Include the new HMAC_CRYPTO_ALGO key that is needed by pam_timestamp to
select the algorithm that is going to be used to calculate the message
authentication code.

pam_timestamp is currently using an embedded algorithm to calculate the
HMAC message, but the idea is to improve this behaviour by relying on
openssl's implementation. On top of that, the ability to change the
algorithm with a simple configuration change allows to simplify the
process of removing unsecure algorithms.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1947294
2021-05-06 17:31:53 +02:00
Christian Göttsche
dfe95bd08b selinux: only open selabel database once
Once opened, keep the selabel database open for further lookups.
Register an exit handler to close the database.

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
Acked-by: James Carter <jwcart2@gmail.com>
2021-05-06 16:58:10 +02:00
Christian Göttsche
eb1d2de0e9 set_selinux_file_context(): prepare context for actual file type
Search the SELinux selabel database for the file type to be created.
Not specifying the file mode can cause an incorrect file context to be
returned.

Also prepare contexts in commonio_close() for the generic database
filename, not with the backup suffix appended, to ensure the desired
file context after the final rename.

Closes: #322

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
Acked-by: James Carter <jwcart2@gmail.com>
2021-05-06 16:58:10 +02:00
Christian Göttsche
5f7649fb37 selinux.c: use modern selabel interface instead of deprecated matchpathcon
matchpathcon(3) is deprecated in favor of selabel_lookup(3).

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
Acked-by: James Carter <jwcart2@gmail.com>
2021-05-06 16:58:10 +02:00
Christian Göttsche
e367d111e5 selinux.c:reset_selinux_file_context(): do not fail in permissive mode
Return 0 on setfscreatecon(3) failure, like set_selinux_file_context().

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
Acked-by: James Carter <jwcart2@gmail.com>
2021-05-06 16:58:10 +02:00
Christian Göttsche
95fd179683 selinux.c: do not use deprecated typedef and skip context translation
These retrieved contexts are just passed to libselinux functions and not
printed or otherwise made available to the outside, so a context
translation to human readable MCS/MLS labels is not needed.
(see man:setrans.conf(5))

The typedef security_context_t is deprecated, see
9eb9c93275

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
Acked-by: James Carter <jwcart2@gmail.com>
2021-05-06 16:58:10 +02:00
Christian Göttsche
c0aa8a876e vipw[selinux]: do not use deprecated typedef and skip context translation
This retrieved context is just passed to libselinux functions and not
printed or otherwise made available to the outside, so a context
translation to human readable MCS/MLS labels is not needed.
(see man:setrans.conf(5))

The typedef security_context_t is deprecated, see
9eb9c93275

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
Acked-by: James Carter <jwcart2@gmail.com>
2021-05-06 16:58:10 +02:00
Christian Göttsche
6e4b2fe25d struct commonio_db[selinux]: do not use deprecated type security_context_t
The typedef security_context_t is deprecated, see
9eb9c93275

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
Acked-by: James Carter <jwcart2@gmail.com>
2021-05-06 16:58:10 +02:00
Serge Hallyn
e6416fd81b Merge pull request #332 from hallyn/2021-05-04/manpage
manpages: mention NSS in new[ug]idmap manpages
2021-05-04 14:40:28 -05:00
Serge Hallyn
186b1b7ac1 manpages: mention NSS in new[ug]idmap manpages
Closes #328

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-05-04 14:39:26 -05:00
Serge Hallyn
38c079366d Merge pull request #330 from hallyn/2021-05-04/subidhinclude
Install subid.h
2021-05-04 09:22:48 -05:00
Serge Hallyn
77e39de1e6 Install subid.h
Now subid.h gets installed under /usr/include/shadow/subid.h

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-05-04 09:21:11 -05:00
Lucas Servén Marín
2c542f6c65 fix: create relative home path correctly
Currently, supplying a relative path via the --prefix flag to the
useradd command triggers a bug in the creation of home directories. The
code seems to unintentionally prepend a leading "/" to all paths,
quietly transforming a relative prefixed home path into an absolute
path. This can be seen in the following strace logs from running
"useradd --create-home --prefix tmp/root squat":

```
access("tmp/root//home/squat", F_OK)    = -1 ENOENT (No such file or directory)
access("/mp", F_OK)                     = 0
access("/mp/root", F_OK)                = 0
access("/mp/root/home", F_OK)           = 0
access("/mp/root/home/squat", F_OK)     = -1 ENOENT (No such file or directory)
mkdir("/mp/root/home/squat", 000)       = 0
chown("/mp/root/home/squat", 0, 0)      = 0
chmod("/mp/root/home/squat", 0755)      = 0
chown("tmp/root//home/squat", 1000, 1000) = -1 ENOENT (No such file or directory)
chmod("tmp/root//home/squat", 0700)     = -1 ENOENT (No such file or directory)
```

Note that the relative path is correctly probed in the beginning and it
is only during the recursive creation that the path is turned into an
absolute path. This invocation results in the creation of a "/mp"
hierarchy in the root of the filesystem.

Similar problems occur when using `--prefix ./tmp/root`.

This commit fixes the handling of relative paths by not assuming that
the given path is anchored with a "/".

Signed-off-by: Lucas Servén Marín <lserven@gmail.com>
2021-04-29 15:06:53 +02:00
Serge Hallyn
b30e9614c3 Merge pull request #321 from hallyn/2021-04-08/nss
Subids: support nsswitch
2021-04-16 21:03:37 -05:00
Serge Hallyn
cc7ea6e8e5 tests: fix su failures under travis
HOME has to start as /root since we are testing
that su didn't change it.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-04-16 21:03:08 -05:00
Serge Hallyn
fa90ac11c8 su/03: export shell = sh
Otherwise our su -p uses bash if that is what root was
configured to use, and then fails to read /root/ for
.bash_profile.  This caused an unexpected error message
in /tmp/err, failing the test.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-04-16 21:03:08 -05:00
Serge Hallyn
716f3f99ce test: su -p doesn't set home
with out also doing '-'

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-04-16 21:03:08 -05:00
Serge Hallyn
0f4347d148 clean up libsubid headers
Move libsubid/api.h into libsubid/subid.h, and document the api in subid.h

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-04-16 21:03:08 -05:00
Serge Hallyn
8492dee663 subids: support nsswitch
Closes #154

When starting any operation to do with subuid delegation, check
nsswitch for a module to use.  If none is specified, then use
the traditional /etc/subuid and /etc/subgid files.

Currently only one module is supported, and there is no fallback
to the files on errors.  Several possibilities could be considered:

1. in case of connection error, fall back to files
2. in case of unknown user, also fall back to files

etc...

When non-files nss module is used, functions to edit the range
are not supported.  It may make sense to support it, but it also
may make sense to require another tool to be used.

libsubordinateio also uses the nss_ helpers.  This is how for instance
lxc could easily be converted to supporting nsswitch.

Add a set of test cases, including a dummy libsubid_zzz module.  This
hardcodes values such that:

'ubuntu' gets 200000 - 300000
'user1' gets 100000 - 165536
'error' emulates an nss module error
'unknown' emulates a user unknown to the nss module
'conn' emulates a connection error ot the nss module

Changes to libsubid:

Change the list_owner_ranges api: return a count instead of making the array
null terminated.

This is a breaking change, so bump the libsubid abi major number.

Rename free_subuid_range and free_subgid_range to ungrant_subuid_range,
because otherwise it's confusing with free_subid_ranges which frees
    memory.

Run libsubid tests in jenkins

Switch argument order in find_subid_owners

Move the db locking into subordinateio.c

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-04-16 21:02:37 -05:00
Serge Hallyn
514c1328b6 try again to fix libmisc sharing problem
Issue #297 reported seeing

*** Warning: Linking the shared library libsubid.la against the
*** static library ../libmisc/libmisc.a is not portable!

which commit b5fb1b38ee was supposed
to fix.  But a few commits later it's back.  So try to fix it
in the way the bug reporter suggested.  This broke builds some
other ways, namely a few missing library specifications, so add
those.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-04-11 17:42:04 -05:00
Serge Hallyn
7cfe134090 Merge pull request #314 from sevan/patch-1
passwd(5): Note the use of an ampersand in the comment field
2021-03-30 10:21:17 -05:00
Iker Pedrosa
df6ec1d169 man: include lastlog file caveat (#313)
man/lastlog.8.xml: add another point to the caveats section regarding
the handling of the lastlog file by external tools.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=951564
2021-03-28 22:26:28 -05:00
Haelwenn Monnier
b865e14f25 login & su: Treat an empty passwd field as invalid (#315)
* login & su: Treat an empty passwd field as invalid

Otherwise it's treated like the “require no password” clause while it probably
should be treated like a normal su that can't validate anyway.

A similar change should be done for USE_PAM.

* su & login: Introduce PREVENT_NO_AUTH
2021-03-28 22:16:03 -05:00
Serge Hallyn
697901a328 Merge pull request #303 from breard-r/yescrypt
Add yescrypt support
2021-03-28 22:13:56 -05:00
Sevan Janiyan
9f1a43996c Note the use of an ampersand in the comment field 2021-03-12 23:56:38 +00:00
Serge Hallyn
7273c25cc2 Merge pull request #308 from martijndegouw/relaxgidcheck
newuidmap,newgidmap: Relax gid checking to allow running under alternative group ID
2021-03-02 12:42:25 -06:00
Serge Hallyn
c0818ab01d Merge pull request #310 from ikerexxe/upstream_man_clarifications
Man clarifications
2021-03-01 10:02:44 -06:00
Serge Hallyn
f4cbf38ad7 Merge pull request #311 from ikerexxe/upstream_userdel_clarification
userdel: clarify "-f" usage
2021-03-01 09:59:14 -06:00
ikerexxe
0409c91a7f userdel: clarify "-f" usage
src/userdel.c: clarify the examples for "-f" option
2021-02-23 12:21:42 +01:00
ikerexxe
4faf42b31b man: usermod clarification
man/usermod.8.xml: specify what happens when the current home directory
doesn't exist if using -d and -m options. Moreover, specify what happens
when the group ownership is changed and the uid's don't match in -u and
-g options.
2021-02-18 16:08:27 +01:00
ikerexxe
786e44f6dd man: useradd clarification
man/useradd.8.xml: specify the SELinux requirements for -m option.
2021-02-18 16:08:27 +01:00
ikerexxe
bc22009031 man: shadow clarification
man/shadow.5.xml: indicate the exact time and timezone for the dates.
Moreover, clarify that when the password expires the user won't be able
to login.
2021-02-18 16:08:27 +01:00
ikerexxe
4ea269d23e man: groupadd and groupmod clarification
man/groupadd.8.xml: clarify the exit values meaning.
man/groupmod.8.xml: clarify the E_GID_IN_USE value meaning.
2021-02-18 16:07:03 +01:00
Serge Hallyn
f28660f5dd Merge pull request #307 from glysbaysb/usermod-shell-path
usermod: check if shell is know
2021-02-08 10:03:11 -06:00
Martijn de Gouw
246d5c1c25 Add tests for group checking in newuidmap/newgidmap 2021-02-08 13:32:18 +01:00
Martijn de Gouw
c464ec5570 newuidmap,newgidmap: Relax gid checking to allow running under alternative group ID
Signed-off-by: Martijn de Gouw <martijn.de.gouw@prodrive-technologies.com>
2021-02-08 13:32:18 +01:00
Geert Ijewski
b628850a09 usermod expects a path
Closes #307
2021-02-07 19:31:49 +01:00
Geert Ijewski
fe159b7668 usermod: check if shell exists & is executable 2021-02-07 19:26:55 +01:00
ikerexxe
325bf584ce man: chage clarification
man/chage.1.xml: Indicate that -d option with a value of 0 forces the
user to change his password. Besides, set an example on how to use -E
option. Finally, add a general note to clarify that chage only takes
charge of local users and another note to indicate that it doesn't check
inconsistencies between shadow and passwd files.
2021-02-02 11:35:34 +01:00
Rodolphe Bréard
5cd04d03f9 Add yescrypt support 2021-02-01 22:11:10 +01:00
Serge Hallyn
ae169c4046 Merge pull request #306 from hallyn/2021-01-01/nosubids
useradd: don't try to create 0 subuids
2021-01-01 13:10:53 -06:00
Serge Hallyn
0dffc7c612 useradd: don't try to create 0 subuids
Closes #289

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-01-01 13:10:12 -06:00
Serge Hallyn
5d53e0bf07 Merge pull request #305 from hallyn/2021-01-01/static-dynamic
libsubid: move libmisc.a to last LIBADD entry
2021-01-01 13:05:33 -06:00
Serge Hallyn
b5fb1b38ee libsubid: move libmisc.a to last LIBADD entry
Closes #297

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2021-01-01 13:01:54 -06:00
Serge Hallyn
c917ed7b76 Merge pull request #302 from whzhe51/br_master
useradd.c:fix memleaks of grp
2020-12-27 00:37:46 -06:00
Serge Hallyn
08f5577018 Merge pull request #301 from whzhe51/br_whzhe
useradd.c:fix memleak in get_groups
2020-12-27 00:31:30 -06:00
Serge Hallyn
1021195bfe Merge pull request #299 from lnussel/master
useradd: use built-in settings by default
2020-12-27 00:26:47 -06:00
Serge Hallyn
a8361e7410 Merge pull request #296 from ikerexxe/log_exit_code
useradd: log exit code when failing
2020-12-27 00:18:12 -06:00
Serge Hallyn
7384865775 Merge pull request #295 from ikerexxe/newusers_clarification
newusers: doesn't create parent home directories
2020-12-27 00:16:18 -06:00
whzhe
fd9d79a1a3 useradd.c:fix memleak in get_groups
Signed-off-by: whzhe <wanghongzhe@huawei.com>
2020-12-20 22:05:03 -05:00
whzhe51
c44b71cec2 useradd.c:fix memleaks of grp
Signed-off-by: whzhe51 <wanghongzhe@huawei.com>
2020-12-20 20:14:49 -05:00
Ludwig Nussel
bbf4b79bc4 useradd: use built-in settings by default
Avoids installing inconsistent settings. The correct ones would be
written as soon as an admin uses useradd -D to modify the defaults.
2020-12-04 09:20:18 +01:00
ikerexxe
abb5c99114 useradd: log exit code when failing
src/useradd.c: log exit code when failing
2020-11-17 16:58:40 +01:00
ikerexxe
88128000c9 newusers: doesn't create parent home directories
man/newusers.8.xml: clarify that newusers doesn't create parent
directories of the new user's home directory.
2020-11-17 16:46:10 +01:00
Serge Hallyn
599cc003da Merge pull request #293 from ikerexxe/sync_file_write
commonio: force lock file sync
2020-11-08 16:36:36 -06:00
Serge Hallyn
e7938d5a30 Merge pull request #291 from ikerexxe/covscan_issues
Two covscan issues
2020-11-08 16:33:55 -06:00
Serge Hallyn
bd32c1c8fc Merge pull request #290 from jamincollins/master
add parsing support for advertised force long opt
2020-11-08 16:29:29 -06:00
ikerexxe
fb0f702cbf commonio: force lock file sync
lib/commonio.c: after writing to the lock file, force a file sync to
the storage system.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1862056
2020-11-05 17:15:56 +01:00
Jamin W. Collins
a04287cf24 update groupdel man page for the --force option
Signed-off-by: Jamin W. Collins <jamin.collins@gmail.com>
2020-11-01 21:22:54 -07:00
ikerexxe
569bd1d54f useradd: free grp to avoid leak
covscan issue:
Error: RESOURCE_LEAK (CWE-772): [#def39] [important]
src/useradd.c:728: alloc_fn: Storage is returned from allocation function "get_local_group".
src/useradd.c:728: var_assign: Assigning: "grp" = storage returned from "get_local_group(list)".
src/useradd.c:728: overwrite_var: Overwriting "grp" in "grp = get_local_group(list)" leaks the storage that "grp" points to.
726|   		 * GID values, otherwise the string is looked up as is.
727|   		 */
728|-> 		grp = get_local_group (list);
729|
730|   		/*
2020-10-27 11:42:34 +01:00
ikerexxe
2df8c0728d newgrp: delete dead code
covscan issue:
Error: CLANG_WARNING: [#def31]
src/newgrp.c:448:2: warning: Value stored to 'gid' is never read [deadcode.DeadStores]
	gid = getgid ();
2020-10-27 11:42:08 +01:00
Jamin W. Collins
bd4dc81a82 add parsing support for advertised force long opt
Existing help output advertises --force as a long opt.

  -f, --force                   delete group even if it is the primary group of a user

But errors when the long opt is used.

groupdel: unrecognized option '--force'

Signed-off-by: Jamin W. Collins <jamin.collins@gmail.com>
2020-10-17 09:18:30 -07:00
Serge Hallyn
f8642a1986 Merge pull request #288 from whzhe51/br_whzhe
xfree: move xfree() function to xmalloc.c
2020-10-16 09:59:34 -05:00
w00475903
e24700fd5d xfree: move xfree() function to xmalloc.c
Signed-off-by: whzhe <wanghongzhe@huawei.com>
2020-10-15 21:52:06 -04:00
Serge Hallyn
18c5c6139d Merge pull request #286 from karelzak/defs
getdefs: add foreign (non-shadow-utils) items
2020-10-12 08:40:50 -05:00
Serge Hallyn
af0f55a625 Merge pull request #285 from masmullin2000/master
Fix the undefined xfree issue
2020-10-12 08:36:33 -05:00
Karel Zak
3f09f7b6fb getdefs: add foreign (non-shadow-utils) items
The login.defs is shared between more upstream projects (util-linux,
etc.). We need to improve compatibility between the projects do not
report valid, but foreign items.

Addresses: https://github.com/shadow-maint/shadow/issues/276
Signed-off-by: Karel Zak <kzak@redhat.com>
2020-10-08 12:30:53 +02:00
Michael Mullin
dfd19fc35b Use {} to kep more in line with code style 2020-10-03 14:23:06 -04:00
Michael Mullin
0407fa8813 Fix the undefined xfree issue 2020-10-03 14:19:46 -04:00
Serge Hallyn
e84df9e163 Merge pull request #282 from ikerexxe/sssd_cache_error
lib/sssd: redirect warning message to file
2020-10-02 19:38:35 -05:00
Serge Hallyn
46ad1856ac Merge pull request #277 from whzhe51/br_whzhe
gpasswd.c: fix memory leak in sg_adm
2020-10-02 19:37:20 -05:00
ikerexxe
87257a49a1 lib/sssd: redirect warning message to file
Instead of printing warning in stderr print it to file. This way the
user is not spammed with unnecessary messages when updating packages.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749001
2020-10-02 16:09:42 +02:00
Serge Hallyn
9d3546c695 Merge pull request #281 from towerpark/fix-newxidmap-man
Fix the inaccurate description about ID range in man new{u,g}idmap
2020-10-01 13:26:11 -05:00
towerpark
287a9041a1 Fix the inaccurate description about the ID range to be verified against /etc/sub{u,g}id. 2020-09-26 21:01:01 +09:00
w00475903
22bfaf9e26 gpasswd.c: fix memory leak in sg_adm
Signed-off-by: whzhe <wanghongzhe@huawei.com>
2020-09-24 23:29:53 -04:00
Serge Hallyn
2748b4230a Merge pull request #279 from juergenhoetzel/fix-de-translation
Fix incorrect translation (de)
2020-09-24 21:59:58 -05:00
Serge Hallyn
6bd08f7d18 Merge pull request #278 from edneville/104_su_waitpid
loop until waitpid returns pid_child or error
2020-09-24 21:58:35 -05:00
Juergen Hoetzel
00f01dd416 Fix incorrect translation (de) 2020-09-23 18:00:00 +02:00
ed neville
01a8df79b3 loop until waitpid returns pid_child or error
closes #104

Signed-off-by: ed neville <ed@s5h.net>
2020-09-20 23:04:11 +01:00
Serge Hallyn
9a10373ddb Revert "su.c: replace getopt with ad-hoc flag processing"
This reverts commit dc732e7734.
2020-08-28 15:16:11 -05:00
Serge Hallyn
b065fa4741 Revert "su.c: s/doshell/do_interactive_shell/"
This reverts commit 6f38f43fdd.
2020-08-28 15:16:04 -05:00
Serge Hallyn
3f35983656 Revert "su.c: implement --exec"
This reverts commit 4047d1fe8e.
2020-08-28 15:15:56 -05:00
Serge Hallyn
c32743808d Revert "Update su tests"
This reverts commit cf8101aaae.
2020-08-28 15:15:47 -05:00
Christian Brauner
ec98f190c1 Merge pull request #275 from hallyn/2020-08-27/test-su
Add tests on top of #254
2020-08-28 12:13:49 +02:00
Serge Hallyn
cf8101aaae Update su tests
Some of these tests seem wrong.  The assume that

    su -- -c command

should work, whereas -- should mean pass all remaining arguments
along to the command.

Add some new tests based on examples in Issue 253

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-08-27 23:59:07 -05:00
Vito Caputo
4047d1fe8e su.c: implement --exec
It's now possible to run commands as other users without shell
interpolation by using "--exec":

Read /etc/shadow as root without specifying user:
```
su --exec /bin/cat -- /etc/shadow
```

Or specify user:
```
su --exec /bin/cat root -- /etc/shadow
```
2020-08-27 23:43:32 -05:00
Vito Caputo
6f38f43fdd su.c: s/doshell/do_interactive_shell/
Mechanical rename distinguishing this variable from intended changes
supporting executing commands without using an interpretive shell
(i.e. no '/bin/sh -c').
2020-08-27 23:43:29 -05:00
Vito Caputo
dc732e7734 su.c: replace getopt with ad-hoc flag processing
In preparation for supporting --exec I was testing the robustness
of "--" handling and it became apparent that things are currently
a bit broken in `su`.

Since "--" is currently of limited utility, as the subsequent
words are simply passed to the shell after "-c","command_string",
it seems to have gone unnoticed for ages.

However, with --exec, it's expected that "--" would be an almost
required separator with every such usage, considering the
following flags must be passed verbatim to execve() and will
likely begin with hyphens looking indistinguishable from any
other flags in lieu of shell interpolation to worry about.

For some practical context of the existing situation, this
invocation doesn't work today:
```
  $ su --command ls -- flags for shell
  No passwd entry for user 'flags'
  $
```

This should just run ls as root with "flags","for","shell"
forwarded to the shell after "-c","ls".

The "--" should block "flags" from being treated as the user.
That particular issue isn't a getopt one per-se, it's arguably
just a bug in su.c's implementation.

It *seemed* like an easy fix for this would be to add a check if
argv[optind-1] were "--" before treating argv[optind] as USER.

But testing that fix revealed getopt was rearranging things when
encountering "--", the "--" would always separate the handled
opts from the unhandled ones.  USER would become shifted to
*after* "--" even when it occurred before it!

If we change the command to specify the user, it works as-is:
```
  $ su --command ls root -- flags for shell
  Password:
  testfile
  $

```

But what's rather surprising is how that works; the argv winds up:

"su","--command","ls","--","root","flags","for","shell"

with optind pointing at "root".

That arrangement of argv is indistinguishable from omitting the
user and having "root","flags","for","shell" as the stuff after
"--".

This makes it non-trivial to fix the bug of omitting user
treating the first word after "--" as the user, which one could
argue is a potentially serious security bug if you omit the user,
expect the command to run as root, and the first word after "--"
is a valid user, and what follows that something valid and
potentially destructive not only running in unintended form but
as whatever user happened to be the first word after "--".

So, it seems like something important to fix, and getopt seems to
be getting in the way of fixing it properly without being more
trouble than replacing getopt.

In disbelief of what I was seeing getopt doing with argv here, I
took a glance at the getopt source and found the following:

```
      /* The special ARGV-element '--' means premature end of options.
	 Skip it like a null option,
	 then exchange with previous non-options as if it were an option,
	 then skip everything else like a non-option.  */

      if (d->optind != argc && !strcmp (argv[d->optind], "--"))
```

I basically never use getopt personally because ages ago it
annoyed me with its terrible API for what little it brought to
the table, and this brings it to a whole new level of awful.
2020-08-27 23:43:25 -05:00
Serge Hallyn
291c6fcc87 Merge pull request #267 from stoeckmann/chage
chage: Prevent signed integer overflows.
2020-08-13 00:34:19 -05:00
Serge Hallyn
94d40b4521 Merge pull request #273 from edneville/trailing_n_in_help_typo
Removing trailing n typo
2020-08-13 00:11:24 -05:00
ed neville
3c9836a298 Removing trailing n typo
Signed-off-by: ed neville <ed@s5h.net>
2020-08-12 17:53:28 +01:00
Serge Hallyn
a271076041 Merge pull request #263 from edneville/261_grpck_questionable_warning
Option to suppress group/gshadow inconsistencies
2020-08-11 13:58:22 -05:00
ed neville
e8c44a4c12 Option to suppress group/gshadow inconsistencies
'gshadow' man page suggests that "You should use the same list of users
as in /etc/group", but not must.

Closes #261
2020-08-11 13:53:48 -05:00
Serge Hallyn
d041eec354 Merge pull request #270 from darktemplarbasealt/fix_resource_leak
Fix potential resource leak in set_selinux_file_context function
2020-08-10 20:34:50 -05:00
Serge Hallyn
b215e9d02c Merge pull request #268 from stoeckmann/chfn
chfn: Prevent buffer overflow.
2020-08-10 13:45:15 -05:00
Christian Brauner
994a3b463c Merge pull request #272 from ikerexxe/useradd_covscan
useradd: check return value from chmod and log it
2020-08-10 12:34:52 +02:00
ikerexxe
508b968cb1 useradd: check return value from chmod and log it
covscan was complaining abot calling chmod and ignoring the return
value:
Error: CHECKED_RETURN (CWE-252):
shadow-4.6/src/useradd.c:2084: check_return: Calling
"chmod(prefix_user_home, mode)" without checking return value. This
library function may fail and return an error code.
2082|   		mode_t mode = getdef_num ("HOME_MODE",
2083|   		                          0777 & ~getdef_num ("UMASK", GETDEF_DEFAULT_UMASK));
2084|-> 		chmod (prefix_user_home, mode);
2085|   		home_added = true;
2086|   #ifdef WITH_AUDIT
2020-08-10 11:44:00 +02:00
Christian Brauner
6afa2aaf9d Merge pull request #271 from hallyn/2020-08-08/groupmembers
add -U option to groupadd and groupmod
2020-08-10 10:22:45 +02:00
Serge Hallyn
342c934a35 add -U option to groupadd and groupmod
Add a -U option which adds new usernames as members.  For groupmod,
also add -a (append), without which existing members are removed.

Closes #265
2020-08-09 22:11:33 -05:00
Aleksei Nikiforov
49930bd3a6 Fix potential resource leak in set_selinux_file_context function 2020-08-04 10:24:46 +03:00
Serge Hallyn
7ea342579e useradd: suggest --badnames when given a bad name
Closes #266
2020-07-31 21:29:21 -05:00
Tobias Stoeckmann
875d2d49c1 chfn: Prevent buffer overflow.
This is a stability fix, not a security fix, because the affected -o
option can only be used by root and it takes a modified passwd file.

If a gecos field for a user has BUFSIZ characters without commas and an
equals sign (i.e. a huge slop/extra field) and chfn is called with -o,
then a buffer overflow occurs.

It is not possible to trigger this with shadow tools. Therefore, the
passwd file must be modified manually.

I have fixed this unlikely case the easiest and cleanest way possible.
Since chfn bails out if more than 80 characters excluding commas are
supposed to be written into gecos field, we can stop processing early on
if -o argument is too long.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
2020-07-12 19:09:14 +02:00
Tobias Stoeckmann
83aa88466d chage: Prevent signed integer overflows.
This is merely a stability fix, not a security fix.

As the root user, it is possible to set time values which later on
result in signed integer overflows.

For this to work, an sgetspent implementation must be used which
supports long values (glibc on amd64 only parses 32 bit, not 64).
Either use musl or simply call configure with following environment
variable:

$ ac_cv_func_sgetspent=no ./configure

Also it is recommended to compile with -fsanitize=undefined or
-ftrapv to see these issues easily.

Examples to trigger issues when calling "chage -l user":

$ chage -d 9223372036854775807 user

$ chage -d 106751991167300 user
$ chage -M 9999 user

$ chage -d 90000000000000 user
$ chage -I 90000000000000 user
$ chage -M 9999 user

$ chage -E 9223372036854775807 user

While at it, I fixed casting issues which could lead to signed integer
overflows on systems which still have a 32 bit time_t.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
2020-07-12 17:56:38 +02:00
Serge Hallyn
607f1dd549 libsubid: fix a prototype in api.h
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-06-19 22:09:20 -05:00
Serge Hallyn
6baeb25038 Merge pull request #234 from edneville/79_userdel
Adding run-parts for userdel
2020-06-10 00:31:10 -05:00
ed
32cfa176f2 Adding run-parts style for pre and post useradd/del
Signed-off-by: ed neville <ed@s5h.net>
2020-06-10 00:26:55 -05:00
Serge Hallyn
b01bd3b139 Merge pull request #250 from hallyn/libsubid
[strawman] Implement libsubid
2020-06-08 00:10:16 -05:00
Serge Hallyn
0a7888b1fa Create a new libsubid
Closes #154

Currently this has three functions: one which returns the
list of subuid ranges for a user, one returning the subgids,
and one which frees the ranges lists.

I might be mistaken about what -disable-man means;  some of
the code suggests it means just don't re-generate them, but
not totally ignore them.  But that doesn't seem to really work,
so let's just ignore man/ when -disable-man.

Remove --disable-shared.  I'm not sure why it was there, but it stems
from long, long ago, and I suspect it comes from some ancient
toolchain bug.

Create a tests/run_some, a shorter version of run_all.  I'll
slowly add tests to this as I verify they work, then I can
work on fixing the once which don't.

Also, don't touch man/ if not -enable-man.

Changelog:
	Apr 22: change the subid list api as recomended by Dan Walsh.
	Apr 23: implement get_subid_owner
	Apr 24: implement range add/release
	Apr 25: finish tests and rebase
	May 10: make @owner const

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2020-06-07 12:11:58 -05:00
Serge Hallyn
43a917cce5 configure: define abi versions
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2020-06-07 12:07:23 -05:00
Serge Hallyn
089cf55e2c drop svn complications from test runner
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-06-07 12:07:14 -05:00
Serge Hallyn
316a153abb tests: use git to determine top_dir
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-06-07 12:07:09 -05:00
Serge Hallyn
6e6494680d trivial: drop useless version-info from libshadow_la_LDFLAGS
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2020-06-07 12:07:00 -05:00
Serge Hallyn
6155e91f4e Merge pull request #262 from andydna/master
correct grammar in shadow(5)
2020-06-06 12:59:59 -05:00
andydna
967bfb0376 correct grammar in shadow(5) 2020-06-04 22:29:15 -05:00
Serge Hallyn
9cb21c2bdf Merge pull request #259 from Inrin/lastlog_MaxPadding
Add maximum padding to fit IPv6-Addresses
2020-05-28 14:45:23 -05:00
Serge Hallyn
5cb839d977 Merge pull request #257 from Frans-Spiesschaert/new_dutch_po_branch
(nl) updated Dutch translation
2020-05-26 14:48:48 -05:00
Inrin
b128222477 Add maximum padding to fit IPv6-Addresses
We use a fixed padding for the From column to fit the maximum of a
minimized IPv6-LL-Address and it's interface.
2020-05-24 23:48:25 +02:00
Frans Spiesschaert
fc95155aa4 (nl) updated Dutch translation 2020-05-24 15:26:06 +02:00
Serge Hallyn
320707fcb0 Merge pull request #251 from lifecrisis/nonexistent
Add "NONEXISTENT" to "login.defs"
2020-05-11 09:13:34 -05:00
Jason Franklin
4086aed1ed Update the "README" file 2020-05-11 09:27:01 -04:00
Jason Franklin
096dad6305 Add "NONEXISTENT.xml" to "man/Makefile.am" 2020-05-11 09:27:00 -04:00
Jason Franklin
4772689d27 Name "NONEXISTENT" in the man page for "pwck" 2020-05-11 09:27:00 -04:00
Jason Franklin
1566921dd8 Add detailed documentation for "NONEXISTENT" 2020-05-11 09:26:45 -04:00
Jason Franklin
04062cda11 Add "NONEXISTENT" to the "login.defs" man page 2020-05-11 09:26:43 -04:00
Jason Franklin
c040058fe3 Check for "NONEXISTENT" in "src/pwck.c" 2020-05-11 09:26:43 -04:00
Jason Franklin
c56fe7117b Add "NONEXISTENT" to def_table 2020-05-11 09:26:42 -04:00
Jason Franklin
e2f74c347b Add "NONEXISTENT" to "etc/login.defs" 2020-05-11 09:26:04 -04:00
Serge Hallyn
f929bfd90b Merge pull request #237 from ikerexxe/usermod_fails
Check only local groups when adding new supplementary groups to a user
2020-05-01 22:26:41 -05:00
Serge Hallyn
c889ebc2c9 Merge pull request #249 from brauner/coverity
travis: reorder sections and add regenerated coverity token
2020-04-25 12:32:13 -05:00
Christian Brauner
a3a1cf6536 travis: reorder sections and add regenerated coverity token
Also remove the openssl section since both lxc and lxcfs don't need it
either.

Signed-off-by: Christian Brauner <christian@brauner.io>
2020-04-25 18:45:24 +02:00
Serge Hallyn
7e0e931519 Merge pull request #248 from brauner/coverity
travis: add more architectures + enable Coverity
2020-04-25 11:32:23 -05:00
Christian Brauner
97a76bd9e6 travis: add more architectures and Coverity support
Now that travis supports more architectures let's make sure we test on
all of them and that we enable Coverity too.

Signed-off-by: Christian Brauner <christian@brauner.io>
2020-04-25 12:59:25 +02:00
Christian Brauner
69332884b1 Merge pull request #247 from jubalh/unusedcpp
Remove unused variables
2020-04-25 12:34:49 +02:00
Michael Vetter
992c1723af Remove unused 'buf' in shadow.c 2020-04-25 12:23:10 +02:00
Michael Vetter
8eee5d03fd Remove unused variable 'cpp' 2020-04-25 12:10:39 +02:00
Serge Hallyn
77be9c35c7 Merge pull request #244 from sthibaul/master
Fix hurd build
2020-04-23 10:56:48 -05:00
Christian Brauner
f7ae4d48f4 Merge pull request #246 from blueskycs2c/stderr-pr
check_uid_range : warnings go to stderr
2020-04-20 10:01:27 +02:00
blueskycs2c
1d8487d851 check_uid_range : warnings go to stderr 2020-04-20 10:16:19 +08:00
Christian Brauner
52aba825af Merge pull request #245 from hallyn/2020-04-17/libmisc
remove unused and misleading 'owner' argument from find_new_sub*
2020-04-18 12:32:38 +02:00
Serge Hallyn
25b1a8d591 remove unused and misleading 'owner' argument from find_new_sub*
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-04-17 16:32:44 -05:00
Samuel Thibault
5de28353d4 Fix hurd build
Do not include <sys/prctl.h> we don't have <sys/capability.h>, we don't
need prctl in that case anyway.

Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
2020-04-17 21:50:48 +02:00
Serge Hallyn
7b36b160f7 Merge pull request #243 from blueskycs2c/uid-pr
print a warning from useradd if -u is used with uid number outside ra…
2020-04-16 11:48:21 -05:00
blueskycs2c
00e629c0ba print a warning from useradd if -u is used with uid number outside range. 2020-04-11 22:45:54 +08:00
Christian Brauner
942f1945bb Merge pull request #242 from topimiettinen/login-defs-modernize
login.defs: warn about weak choices
2020-04-10 16:58:29 +02:00
Topi Miettinen
69301dfa24 login.defs: warn about weak choices
According to crypt(5), MD5 and DES should not be used for new
hashes. Also the default number of SHA rounds chosen by libc is orders
of magnitude too low for modern hardware. Let's warn the users about
weak choices.

Signed-off-by: Topi Miettinen <toiwoton@gmail.com>
2020-04-10 14:09:55 +03:00
ikerexxe
8762f465d4 useradd: check only local groups with -G option
Check only local groups when adding new supplementary groups to a user

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1727236
2020-03-30 13:08:30 +02:00
ikerexxe
140510de9d usermod: check only local groups with -G option
Check only local groups when adding new supplementary groups to a user

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1727236
2020-03-30 13:07:32 +02:00
Serge Hallyn
125a5dc309 Merge pull request #236 from jsoref/with-an
spelling: with-an
2020-03-20 22:30:16 -05:00
Serge Hallyn
e78be3df43 Merge pull request #232 from eagleoflqj/master
fix typo 登陆->登录
2020-03-20 22:29:55 -05:00
Serge Hallyn
d60b59b156 Merge pull request #226 from ikerexxe/dev1
useradd: clarify the useradd -d parameter behavior in man page
2020-03-20 17:45:37 -05:00
ikerexxe
6543c600d8 useradd: clarify the useradd -d parameter behavior in man page
Explanation: clarify the useradd -d parameter as it does create directory HOME_DIR if it doesn't exit.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1677005

Changelog: [serge] minor tweak to the text
2020-03-20 17:45:01 -05:00
Josh Soref
5070132ee6 spelling: with-an 2020-03-17 17:09:26 -04:00
eagleoflqj
143b97193d fix typo 登陆->登录 2020-03-11 18:51:02 -04:00
Serge Hallyn
3f2bbcfa91 Merge pull request #229 from edneville/130_segfaults_on_strftime
Fix segfault on strftime
2020-03-09 13:17:11 -05:00
ed
8a2e3d500c Replacing exit with return 2020-03-09 18:01:32 +00:00
Serge Hallyn
c48011d19c Merge pull request #228 from blueskycs2c/br1
fix #223comment at #endif does not match condition of #if
2020-03-09 11:05:27 -05:00
Serge Hallyn
ebe6def4b7 Merge pull request #230 from Frans-Spiesschaert/new_dutch_po_branch
updated Dutch translation
2020-03-09 11:00:45 -05:00
Frans Spiesschaert
a8533719ed updated Dutch translation 2020-03-07 21:55:53 +01:00
ed@s5h.net
c667083c81 Fix segfault when time is unreadable
Adding myself to contributors

Closes #130
2020-03-07 17:08:19 +00:00
blueskycs2c
e5bb71b2fd modify #endif does not match condition of #if in passwd.c 2020-03-05 10:51:39 +08:00
Serge Hallyn
b2753b146a man/Makefile.am: add HOME_MODE.xml
Closes #217

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-02-26 19:57:17 -06:00
Serge Hallyn
724442c3af Merge pull request #219 from infinnovation-dev/master
libmisc: Accept --root=path and --prefix=path option syntax
2020-02-26 19:34:13 -06:00
Serge Hallyn
b6aaaba35e Merge pull request #215 from imba-tjd/patch-1
man(zh_CN): fix typo 现实 -> 显示
2020-02-26 18:13:54 -06:00
Serge Hallyn
fa6c58a773 Merge pull request #216 from ikerexxe/master
useradd: doesn't generate /var/spool/mail/$USER with the proper SELinux user identity
2020-02-23 18:00:23 -06:00
ikerexxe
8a1e92aff1 useradd: generate /var/spool/mail/$USER with the proper SELinux user identity
Explanation: use set_selinux_file_context() and reset_selinux_file_context() for create_mail() just as is done for create_home()

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1690527
2020-02-19 15:28:41 +01:00
Colin Hogben
12ce42be44 libmisc: Accept --root=path and --prefix=path option syntax
Recognise --root=path in addition to --root path (and similarly for
--prefix) to match the syntax accepted by getopt_long.

Fixes #218
2020-02-07 21:57:12 +00:00
谭九鼎
915cc6bb9c man(zh_CN): fix typo 现实 -> 显示 2020-02-03 22:02:16 +08:00
238 changed files with 22859 additions and 2431 deletions

View File

@@ -1,20 +1,52 @@
dist: bionic
sudo: false
language: c
compiler:
- gcc
- clang
- gcc
- clang
addons:
apt:
packages:
- autopoint
- xsltproc
arch:
- amd64
- arm64
- ppc64le
- s390x
before_install:
- sudo apt-get update -qq
- sudo apt-get -y install -qq automake autopoint xsltproc libselinux1-dev gettext expect
- sudo apt-get -y install -qq byacc libtool
script:
- ./autogen.sh --without-selinux --disable-man
- grep ENABLE_ config.status
- make
env:
global:
- secure: "G47VYFrtzqalrVjixTqBG9Qsa8EZRcaqsh1k6fq5JgEyHmMQActpvTUDs9FXf1MEqiY5XX3VDVfBsZgKPHgmHsMzD1bX11xpnpGByB8g7gr8I3u2ZkCREqgi77a5l3LeBh+seWiambe/DYOgvPCNa6pCynLgR9advqtgKhpCruU="
addons:
coverity_scan:
project:
name: "shadow-maint/shadow"
description: "Upstream shadow utils tree"
notification_email: christian.brauner@ubuntu.com,serge@hallyn.com
build_command_prepend: "./autogen.sh --without-selinux --disable-man"
build_command: "make -j4"
branch_pattern: master
script:
- cat /proc/self/uid_map
- cat /proc/self/status
- systemd-detect-virt
- ./autogen.sh --without-selinux --disable-man
- grep ENABLE_ config.status
- make
- sudo make install
- (cd tests; sudo ./run_some; cat testsuite.log)
# vim:et:ts=2:sw=2

View File

@@ -1,3 +1,26 @@
2021-07-22 Serge Hallyn <serge@hallyn.com>
* Updated translations (Björn Esser, Juergen Hoetzel)
* Major salt updates (Björn Esser)
* Various coverity and cleanup fixes (Iker Pedrosa)
* Consistently use 0 to disable PASS_MIN_DAYS in man (tzccinct)
* Implement NSS support for subids and a libsubid (Serge Hallyn)
* setfcap: retain setfcap when mapping uid 0 (Christian Brauner)
* login.defs: include HMAC_CRYPTO_ALGO key (Iker Pedrosa)
* selinux fixes (Christian Göttsche)
* Fix path prefix path handling (Lucas Servén Marín)
* Manpage updates (tzccinct, Sevan Janiyan, Iker Pedrosa, Geert Ijewski,
谭九鼎, Jamin W. Collins, towerpark, andydna, Frans Spiesschaert)
* Treat an empty passwd field as invalid (Haelwenn Monnier)
* newxidmap: allow running under alternative gid (Martijn de Gouw)
* usermod: check that shell is executable (Geert Ijewski)
* Add yescript support (Rodolphe Bréard)
* useradd memleak fixes (whzhe)
* useradd: use built-in settings by default (Ludwig Nussel)
* getdefs: add foreign (non-shadow-utils) items (Karel Zak)
* buffer overflow fixes (Tobias Stoeckmann)
* Adding run-parts style for pre and post useradd/del (ed@s5h.net)
2020-01-23 Serge Hallyn <serge@hallyn.com>
* selinux: inclue stdio (Michael Vetter)

View File

@@ -2,5 +2,14 @@
EXTRA_DIST = NEWS README TODO shadow.spec.in
SUBDIRS = po man libmisc lib src \
contrib doc etc
SUBDIRS = libmisc lib
if ENABLE_SUBIDS
SUBDIRS += libsubid
endif
SUBDIRS += src po contrib doc etc
if ENABLE_REGENERATE_MAN
SUBDIRS += man
endif

2
README
View File

@@ -59,6 +59,7 @@ Dave Hagewood <admin@arrowweb.com>
David A. Holland <dholland@hcs.harvard.edu>
David Frey <David.Frey@lugs.ch>
Ed Carp <ecarp@netcom.com>
Ed Neville <ed@s5h.net>
Eric W. Biederman" <ebiederm@xmission.com>
Floody <flood@evcom.net>
Frank Denis <j@4u.net>
@@ -69,6 +70,7 @@ Guy Maor <maor@debian.org>
Hrvoje Dogan <hdogan@bjesomar.srce.hr>
Jakub Hrozek <jhrozek@redhat.com>
Janos Farkas <chexum@bankinf.banki.hu>
Jason Franklin <jason.franklin@quoininc.com>
Jay Soffian <jay@lw.net>
Jesse Thilo <Jesse.Thilo@pobox.com>
Joey Hess <joey@kite.ml.org>

View File

@@ -6,7 +6,7 @@ autoreconf -v -f --install || exit 1
CFLAGS="-O2 -Wall" \
--enable-man \
--enable-maintainer-mode \
--disable-shared \
--enable-shared \
--without-libpam \
--with-selinux \
"$@"

View File

@@ -1,19 +1,29 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ([2.64])
AC_INIT([shadow], [4.8.1], [pkg-shadow-devel@lists.alioth.debian.org], [],
AC_PREREQ([2.69])
m4_define([libsubid_abi_major], 3)
m4_define([libsubid_abi_minor], 0)
m4_define([libsubid_abi_micro], 0)
m4_define([libsubid_abi], [libsubid_abi_major.libsubid_abi_minor.libsubid_abi_micro])
AC_INIT([shadow], [4.9], [pkg-shadow-devel@lists.alioth.debian.org], [],
[https://github.com/shadow-maint/shadow])
AM_INIT_AUTOMAKE([1.11 foreign dist-xz])
AC_CONFIG_MACRO_DIRS([m4])
AM_SILENT_RULES([yes])
AC_CONFIG_HEADERS([config.h])
AC_SUBST([LIBSUBID_ABI_MAJOR], [libsubid_abi_major])
AC_SUBST([LIBSUBID_ABI_MINOR], [libsubid_abi_minor])
AC_SUBST([LIBSUBID_ABI_MICRO], [libsubid_abi_micro])
AC_SUBST([LIBSUBID_ABI], [libsubid_abi])
dnl Some hacks...
test "$prefix" = "NONE" && prefix="/usr"
test "$prefix" = "/usr" && exec_prefix=""
AC_GNU_SOURCE
AM_DISABLE_SHARED
AM_ENABLE_STATIC
AM_ENABLE_SHARED
AM_MAINTAINER_MODE
@@ -32,20 +42,21 @@ AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_STDBOOL
AC_CHECK_HEADERS(errno.h fcntl.h limits.h unistd.h sys/time.h utmp.h \
AC_CHECK_HEADERS(crypt.h errno.h fcntl.h limits.h unistd.h sys/time.h utmp.h \
utmpx.h termios.h termio.h sgtty.h sys/ioctl.h syslog.h paths.h \
utime.h ulimit.h sys/capability.h sys/resource.h gshadow.h lastlog.h \
locale.h rpc/key_prot.h netdb.h acl/libacl.h attr/libattr.h \
attr/error_context.h)
utime.h ulimit.h sys/capability.h sys/random.h sys/resource.h \
gshadow.h lastlog.h locale.h rpc/key_prot.h netdb.h acl/libacl.h \
attr/libattr.h attr/error_context.h)
dnl shadow now uses the libc's shadow implementation
AC_CHECK_HEADER([shadow.h],,[AC_MSG_ERROR([You need a libc with shadow.h])])
AC_CHECK_FUNCS(l64a fchmod fchown fsync futimes getgroups gethostname getspnam \
gettimeofday getusershell getutent initgroups lchown lckpwdf lstat \
lutimes memcpy memset setgroups sigaction strchr updwtmp updwtmpx innetgr \
getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r getaddrinfo \
ruserok)
AC_CHECK_FUNCS(arc4random_buf l64a fchmod fchown fsync futimes getgroups \
gethostname getentropy getrandom getspnam gettimeofday getusershell \
getutent initgroups lchown lckpwdf lstat lutimes memcpy memset \
setgroups sigaction strchr updwtmp updwtmpx innetgr getpwnam_r \
getpwuid_r getgrnam_r getgrgid_r getspnam_r getaddrinfo ruserok \
dlopen)
AC_SYS_LARGEFILE
dnl Checks for typedefs, structures, and compiler characteristics.
@@ -280,6 +291,9 @@ AC_ARG_WITH(sha-crypt,
AC_ARG_WITH(bcrypt,
[AC_HELP_STRING([--with-bcrypt], [allow the bcrypt password encryption algorithm @<:@default=no@:>@])],
[with_bcrypt=$withval], [with_bcrypt=no])
AC_ARG_WITH(yescrypt,
[AC_HELP_STRING([--with-yescrypt], [allow the yescrypt password encryption algorithm @<:@default=no@:>@])],
[with_yescrypt=$withval], [with_yescrypt=no])
AC_ARG_WITH(nscd,
[AC_HELP_STRING([--with-nscd], [enable support for nscd @<:@default=yes@:>@])],
[with_nscd=$withval], [with_nscd=yes])
@@ -312,6 +326,11 @@ if test "$with_bcrypt" = "yes"; then
AC_DEFINE(USE_BCRYPT, 1, [Define to allow the bcrypt password encryption algorithm])
fi
AM_CONDITIONAL(USE_YESCRYPT, test "x$with_yescrypt" = "xyes")
if test "$with_yescrypt" = "yes"; then
AC_DEFINE(USE_YESCRYPT, 1, [Define to allow the yescrypt password encryption algorithm])
fi
if test "$with_nscd" = "yes"; then
AC_CHECK_FUNC(posix_spawn,
[AC_DEFINE(USE_NSCD, 1, [Define to support flushing of nscd caches])],
@@ -392,6 +411,10 @@ AC_SUBST(LIBCRYPT)
AC_CHECK_LIB(crypt, crypt, [LIBCRYPT=-lcrypt],
[AC_MSG_ERROR([crypt() not found])])
AC_SUBST(LIYESCRYPT)
AC_CHECK_LIB(crypt, crypt, [LIYESCRYPT=-lcrypt],
[AC_MSG_ERROR([crypt() not found])])
AC_SUBST(LIBACL)
if test "$with_acl" != "no"; then
AC_CHECK_HEADERS(acl/libacl.h attr/error_context.h, [acl_header="yes"], [acl_header="no"])
@@ -715,6 +738,7 @@ AC_CONFIG_FILES([
man/zh_TW/Makefile
libmisc/Makefile
lib/Makefile
libsubid/Makefile
src/Makefile
contrib/Makefile
etc/Makefile
@@ -741,6 +765,7 @@ echo " shadow group support: $enable_shadowgrp"
echo " S/Key support: $with_skey"
echo " SHA passwords encryption: $with_sha_crypt"
echo " bcrypt passwords encryption: $with_bcrypt"
echo " yescrypt passwords encryption: $with_yescrypt"
echo " nscd support: $with_nscd"
echo " sssd support: $with_sssd"
echo " subordinate IDs support: $enable_subids"

View File

@@ -4,8 +4,7 @@
sysconf_DATA = login.defs
defaultdir = $(sysconfdir)/default
default_DATA = \
useradd
default_DATA =
nonpam_files = \
limits \

View File

@@ -295,7 +295,7 @@ CHFN_AUTH yes
# any combination of letters "frwh" (full name, room number, work
# phone, home phone). If not defined, no changes are allowed.
# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
#
#
CHFN_RESTRICT rwh
#
@@ -326,7 +326,9 @@ CHFN_RESTRICT rwh
# If set to SHA256, SHA256-based algorithm will be used for encrypting password
# If set to SHA512, SHA512-based algorithm will be used for encrypting password
# If set to BCRYPT, BCRYPT-based algorithm will be used for encrypting password
# If set to YESCRYPT, YESCRYPT-based algorithm will be used for encrypting password
# If set to DES, DES-based algorithm will be used for encrypting password (default)
# MD5 and DES should not be used for new hashes, see crypt(5) for recommendations.
# Overrides the MD5_CRYPT_ENAB option
#
# Note: If you use PAM, it is recommended to use a value consistent with
@@ -342,7 +344,8 @@ CHFN_RESTRICT rwh
# However, more CPU resources will be needed to authenticate users if
# this value is increased.
#
# If not specified, the libc will choose the default number of rounds (5000).
# If not specified, the libc will choose the default number of rounds (5000),
# which is orders of magnitude too low for modern hardware.
# The values must be within the 1000-999999999 range.
# If only one of the MIN or MAX values is set, then this value will be used.
# If MIN > MAX, the highest value will be used.
@@ -365,6 +368,19 @@ CHFN_RESTRICT rwh
#BCRYPT_MIN_ROUNDS 13
#BCRYPT_MAX_ROUNDS 13
#
# Only works if ENCRYPT_METHOD is set to YESCRYPT.
#
# Define the YESCRYPT cost factor.
# With a higher cost factor, it is more difficult to brute-force the password.
# However, more CPU time and more memory will be needed to authenticate users
# if this value is increased.
#
# If not specified, a cost factor of 5 will be used.
# The value must be within the 1-11 range.
#
#YESCRYPT_COST_FACTOR 5
#
# List of groups to add to the user's supplementary group set
# when logging in from the console (as determined by the CONSOLE
@@ -382,6 +398,14 @@ CHFN_RESTRICT rwh
#
DEFAULT_HOME yes
#
# The pwck(8) utility emits a warning for any system account with a home
# directory that does not exist. Some system accounts intentionally do
# not have a home directory. Such accounts may have this string as
# their home directory in /etc/passwd to avoid a spurious warning.
#
NONEXISTENT /nonexistent
#
# If this file exists and is readable, login environment will be
# read from it. Every line should be in the form name=value.
@@ -428,3 +452,28 @@ USERGROUPS_ENAB yes
# missing.
#
#FORCE_SHADOW yes
#
# Allow newuidmap and newgidmap when running under an alternative
# primary group.
#
#GRANT_AUX_GROUP_SUBIDS yes
#
# Prevents an empty password field to be interpreted as "no authentication
# required".
# Set to "yes" to prevent for all accounts
# Set to "superuser" to prevent for UID 0 / root (default)
# Set to "no" to not prevent for any account (dangerous, historical default)
PREVENT_NO_AUTH superuser
#
# Select the HMAC cryptography algorithm.
# Used in pam_timestamp module to calculate the keyed-hash message
# authentication code.
#
# Note: It is recommended to check hmac(3) to see the possible algorithms
# that are available in your system.
#
#HMAC_CRYPTO_ALGO SHA512

View File

@@ -1,8 +0,0 @@
# useradd defaults file
GROUP=1000
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

View File

@@ -5,7 +5,6 @@ DEFS =
noinst_LTLIBRARIES = libshadow.la
libshadow_la_LDFLAGS = -version-info 0:0:0
libshadow_la_CPPFLAGS = $(ECONF_CPPFLAGS)
if HAVE_VENDORDIR
libshadow_la_CPPFLAGS += -DVENDORDIR=\"$(VENDORDIR)\"
@@ -32,6 +31,7 @@ libshadow_la_SOURCES = \
groupio.h \
gshadow.c \
lockpw.c \
nss.c \
nscd.c \
nscd.h \
sssd.c \
@@ -45,6 +45,8 @@ libshadow_la_SOURCES = \
pwio.c \
pwio.h \
pwmem.c \
run_part.h \
run_part.c \
subordinateio.h \
subordinateio.c \
selinux.c \

View File

@@ -144,7 +144,7 @@ static int do_lock_file (const char *file, const char *lock, bool log)
fd = open (file, O_CREAT | O_TRUNC | O_WRONLY, 0600);
if (-1 == fd) {
if (log) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: %s: %s\n",
Prog, file, strerror (errno));
}
@@ -156,8 +156,18 @@ static int do_lock_file (const char *file, const char *lock, bool log)
len = (ssize_t) strlen (buf) + 1;
if (write (fd, buf, (size_t) len) != len) {
if (log) {
(void) fprintf (stderr,
"%s: %s: %s\n",
(void) fprintf (shadow_logfd,
"%s: %s file write error: %s\n",
Prog, file, strerror (errno));
}
(void) close (fd);
unlink (file);
return 0;
}
if (fdatasync (fd) == -1) {
if (log) {
(void) fprintf (shadow_logfd,
"%s: %s file sync error: %s\n",
Prog, file, strerror (errno));
}
(void) close (fd);
@@ -169,7 +179,7 @@ static int do_lock_file (const char *file, const char *lock, bool log)
if (link (file, lock) == 0) {
retval = check_link_count (file);
if ((0==retval) && log) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: %s: lock file already used\n",
Prog, file);
}
@@ -180,7 +190,7 @@ static int do_lock_file (const char *file, const char *lock, bool log)
fd = open (lock, O_RDWR);
if (-1 == fd) {
if (log) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: %s: %s\n",
Prog, lock, strerror (errno));
}
@@ -192,7 +202,7 @@ static int do_lock_file (const char *file, const char *lock, bool log)
close (fd);
if (len <= 0) {
if (log) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: existing lock file %s without a PID\n",
Prog, lock);
}
@@ -203,7 +213,7 @@ static int do_lock_file (const char *file, const char *lock, bool log)
buf[len] = '\0';
if (get_pid (buf, &pid) == 0) {
if (log) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: existing lock file %s with an invalid PID '%s'\n",
Prog, lock, buf);
}
@@ -213,7 +223,7 @@ static int do_lock_file (const char *file, const char *lock, bool log)
}
if (kill (pid, 0) == 0) {
if (log) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: lock %s already used by PID %lu\n",
Prog, lock, (unsigned long) pid);
}
@@ -223,7 +233,7 @@ static int do_lock_file (const char *file, const char *lock, bool log)
}
if (unlink (lock) != 0) {
if (log) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: cannot get lock %s: %s\n",
Prog, lock, strerror (errno));
}
@@ -235,13 +245,13 @@ static int do_lock_file (const char *file, const char *lock, bool log)
if (link (file, lock) == 0) {
retval = check_link_count (file);
if ((0==retval) && log) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: %s: lock file already used\n",
Prog, file);
}
} else {
if (log) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: cannot get lock %s: %s\n",
Prog, lock, strerror (errno));
}
@@ -326,8 +336,12 @@ static int create_backup (const char *backup, FILE * fp)
/* FIXME: unlink the backup file? */
return -1;
}
if ( (fsync (fileno (bkfp)) != 0)
|| (fclose (bkfp) != 0)) {
if (fsync (fileno (bkfp)) != 0) {
(void) fclose (bkfp);
/* FIXME: unlink the backup file? */
return -1;
}
if (fclose (bkfp) != 0) {
/* FIXME: unlink the backup file? */
return -1;
}
@@ -432,7 +446,7 @@ int commonio_lock (struct commonio_db *db)
if (0 == lock_count) {
if (lckpwdf () == -1) {
if (geteuid () != 0) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
"%s: Permission denied.\n",
Prog);
}
@@ -468,7 +482,7 @@ int commonio_lock (struct commonio_db *db)
}
/* no unnecessary retries on "permission denied" errors */
if (geteuid () != 0) {
(void) fprintf (stderr, "%s: Permission denied.\n",
(void) fprintf (shadow_logfd, "%s: Permission denied.\n",
Prog);
return 0;
}
@@ -964,7 +978,7 @@ int commonio_close (struct commonio_db *db)
snprintf (buf, sizeof buf, "%s-", db->filename);
#ifdef WITH_SELINUX
if (set_selinux_file_context (buf) != 0) {
if (set_selinux_file_context (db->filename, S_IFREG) != 0) {
errors++;
}
#endif
@@ -997,7 +1011,7 @@ int commonio_close (struct commonio_db *db)
snprintf (buf, sizeof buf, "%s+", db->filename);
#ifdef WITH_SELINUX
if (set_selinux_file_context (buf) != 0) {
if (set_selinux_file_context (db->filename, S_IFREG) != 0) {
errors++;
}
#endif
@@ -1099,7 +1113,7 @@ int commonio_update (struct commonio_db *db, const void *eptr)
p = find_entry_by_name (db, db->ops->getname (eptr));
if (NULL != p) {
if (next_entry_by_name (db, p->next, db->ops->getname (eptr)) != NULL) {
fprintf (stderr, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), db->ops->getname (eptr), db->filename);
fprintf (shadow_logfd, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), db->ops->getname (eptr), db->filename);
db->ops->free (nentry);
return 0;
}
@@ -1204,7 +1218,7 @@ int commonio_remove (struct commonio_db *db, const char *name)
return 0;
}
if (next_entry_by_name (db, p->next, name) != NULL) {
fprintf (stderr, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), name, db->filename);
fprintf (shadow_logfd, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), name, db->filename);
return 0;
}

View File

@@ -34,10 +34,6 @@
#ifndef COMMONIO_H
#define COMMONIO_H
#ifdef WITH_SELINUX
#include <selinux/selinux.h>
#endif
#include "defines.h" /* bool */
/*
@@ -121,7 +117,7 @@ struct commonio_db {
/*@dependent@*/ /*@null@*/FILE *fp;
#ifdef WITH_SELINUX
/*@null@*/security_context_t scontext;
/*@null@*/char *scontext;
#endif
/*
* Default permissions and owner for newly created data file.

View File

@@ -4,6 +4,8 @@
#ifndef _DEFINES_H_
#define _DEFINES_H_
#include "config.h"
#if HAVE_STDBOOL_H
# include <stdbool.h>
#else
@@ -94,6 +96,14 @@ char *strchr (), *strrchr (), *strtok ();
# include <unistd.h>
#endif
/*
* crypt(3), crypt_gensalt(3), and their
* feature test macros may be defined in here.
*/
#if HAVE_CRYPT_H
# include <crypt.h>
#endif
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>

View File

@@ -74,6 +74,9 @@
case '6':
method = "SHA512";
break;
case 'y':
method = "YESCRYPT";
break;
default:
{
static char nummethod[4] = "$x$";
@@ -81,7 +84,7 @@
method = &nummethod[0];
}
}
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("crypt method not supported by libcrypt? (%s)\n"),
method);
exit (EXIT_FAILURE);

View File

@@ -61,6 +61,7 @@ struct itemdef {
{"ENV_TZ", NULL}, \
{"FAILLOG_ENAB", NULL}, \
{"FTMP_FILE", NULL}, \
{"HMAC_CRYPTO_ALGO", NULL}, \
{"ISSUE_FILE", NULL}, \
{"LASTLOG_ENAB", NULL}, \
{"LOGIN_STRING", NULL}, \
@@ -77,6 +78,16 @@ struct itemdef {
{"SU_WHEEL_ONLY", NULL}, \
{"ULIMIT", NULL},
/*
* Items used in other tools (util-linux, etc.)
*/
#define FOREIGNDEFS \
{"ALWAYS_SET_PATH", NULL}, \
{"ENV_ROOTPATH", NULL}, \
{"LOGIN_KEEP_USERNAME", NULL}, \
{"LOGIN_PLAIN_PROMPT", NULL}, \
{"MOTD_FIRSTONLY", NULL}, \
#define NUMDEFS (sizeof(def_table)/sizeof(def_table[0]))
static struct itemdef def_table[] = {
@@ -105,6 +116,7 @@ static struct itemdef def_table[] = {
{"MAIL_FILE", NULL},
{"MAX_MEMBERS_PER_GROUP", NULL},
{"MD5_CRYPT_ENAB", NULL},
{"NONEXISTENT", NULL},
{"PASS_MAX_DAYS", NULL},
{"PASS_MIN_DAYS", NULL},
{"PASS_WARN_AGE", NULL},
@@ -115,6 +127,9 @@ static struct itemdef def_table[] = {
#ifdef USE_BCRYPT
{"BCRYPT_MAX_ROUNDS", NULL},
{"BCRYPT_MIN_ROUNDS", NULL},
#endif
#ifdef USE_YESCRYPT
{"YESCRYPT_COST_FACTOR", NULL},
#endif
{"SUB_GID_COUNT", NULL},
{"SUB_GID_MAX", NULL},
@@ -149,6 +164,8 @@ static struct itemdef def_table[] = {
{"USE_TCB", NULL},
#endif
{"FORCE_SHADOW", NULL},
{"GRANT_AUX_GROUP_SUBIDS", NULL},
{"PREVENT_NO_AUTH", NULL},
{NULL, NULL}
};
@@ -157,6 +174,7 @@ static struct itemdef knowndef_table[] = {
#ifdef USE_PAM
PAMDEFS
#endif
FOREIGNDEFS
{NULL, NULL}
};
@@ -249,7 +267,7 @@ int getdef_num (const char *item, int dflt)
if ( (getlong (d->value, &val) == 0)
|| (val > INT_MAX)
|| (val < INT_MIN)) {
fprintf (stderr,
fprintf (shadow_logfd,
_("configuration error - cannot parse %s value: '%s'"),
item, d->value);
return dflt;
@@ -284,7 +302,7 @@ unsigned int getdef_unum (const char *item, unsigned int dflt)
if ( (getlong (d->value, &val) == 0)
|| (val < 0)
|| (val > INT_MAX)) {
fprintf (stderr,
fprintf (shadow_logfd,
_("configuration error - cannot parse %s value: '%s'"),
item, d->value);
return dflt;
@@ -317,7 +335,7 @@ long getdef_long (const char *item, long dflt)
}
if (getlong (d->value, &val) == 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("configuration error - cannot parse %s value: '%s'"),
item, d->value);
return dflt;
@@ -350,7 +368,7 @@ unsigned long getdef_ulong (const char *item, unsigned long dflt)
if (getulong (d->value, &val) == 0) {
/* FIXME: we should have a getulong */
fprintf (stderr,
fprintf (shadow_logfd,
_("configuration error - cannot parse %s value: '%s'"),
item, d->value);
return dflt;
@@ -388,7 +406,7 @@ int putdef_str (const char *name, const char *value)
cp = strdup (value);
if (NULL == cp) {
(void) fputs (_("Could not allocate space for config info.\n"),
stderr);
shadow_logfd);
SYSLOG ((LOG_ERR, "could not allocate space for config info"));
return -1;
}
@@ -413,7 +431,6 @@ static /*@observer@*/ /*@null@*/struct itemdef *def_find (const char *name)
{
struct itemdef *ptr;
/*
* Search into the table.
*/
@@ -433,7 +450,7 @@ static /*@observer@*/ /*@null@*/struct itemdef *def_find (const char *name)
goto out;
}
}
fprintf (stderr,
fprintf (shadow_logfd,
_("configuration error - unknown item '%s' (notify administrator)\n"),
name);
SYSLOG ((LOG_CRIT, "unknown configuration item `%s'", name));

View File

@@ -87,6 +87,18 @@
return gr;
}
void gr_free_members (struct group *grent)
{
if (NULL != grent->gr_mem) {
size_t i;
for (i = 0; NULL != grent->gr_mem[i]; i++) {
free (grent->gr_mem[i]);
}
free (grent->gr_mem);
grent->gr_mem = NULL;
}
}
void gr_free (/*@out@*/ /*@only@*/struct group *grent)
{
free (grent->gr_name);
@@ -94,13 +106,36 @@ void gr_free (/*@out@*/ /*@only@*/struct group *grent)
memzero (grent->gr_passwd, strlen (grent->gr_passwd));
free (grent->gr_passwd);
}
if (NULL != grent->gr_mem) {
size_t i;
for (i = 0; NULL != grent->gr_mem[i]; i++) {
free (grent->gr_mem[i]);
}
free (grent->gr_mem);
}
gr_free_members(grent);
free (grent);
}
bool gr_append_member(struct group *grp, char *member)
{
int i;
if (NULL == grp->gr_mem || grp->gr_mem[0] == NULL) {
grp->gr_mem = (char **)malloc(2 * sizeof(char *));
if (!grp->gr_mem) {
return false;
}
grp->gr_mem[0] = strdup(member);
if (!grp->gr_mem[0]) {
return false;
}
grp->gr_mem[1] = NULL;
return true;
}
for (i = 0; grp->gr_mem[i]; i++) ;
grp->gr_mem = realloc(grp->gr_mem, (i + 2) * sizeof(char *));
if (NULL == grp->gr_mem) {
return false;
}
grp->gr_mem[i] = strdup(member);
if (NULL == grp->gr_mem[i]) {
return false;
}
grp->gr_mem[i + 1] = NULL;
return true;
}

View File

@@ -25,13 +25,13 @@ int nscd_flush_cache (const char *service)
if (run_command (cmd, spawnedArgs, spawnedEnv, &status) != 0) {
/* run_command writes its own more detailed message. */
(void) fprintf (stderr, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
(void) fprintf (shadow_logfd, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
return -1;
}
code = WEXITSTATUS (status);
if (!WIFEXITED (status)) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("%s: nscd did not terminate normally (signal %d)\n"),
Prog, WTERMSIG (status));
return -1;
@@ -43,9 +43,9 @@ int nscd_flush_cache (const char *service)
/* nscd is installed, but it isn't active. */
return 0;
} else if (code != 0) {
(void) fprintf (stderr, _("%s: nscd exited with status %d\n"),
(void) fprintf (shadow_logfd, _("%s: nscd exited with status %d\n"),
Prog, code);
(void) fprintf (stderr, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
(void) fprintf (shadow_logfd, _(MSG_NSCD_FLUSH_CACHE_FAILED), Prog);
return -1;
}

149
lib/nss.c Normal file
View File

@@ -0,0 +1,149 @@
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <stdbool.h>
#include <string.h>
#include <strings.h>
#include <ctype.h>
#include <stdatomic.h>
#include "prototypes.h"
#include "../libsubid/subid.h"
#define NSSWITCH "/etc/nsswitch.conf"
// NSS plugin handling for subids
// If nsswitch has a line like
// subid: sssd
// then sssd will be consulted for subids. Unlike normal NSS dbs,
// only one db is supported at a time. That's open to debate, but
// the subids are a pretty limited resource, and local files seem
// bound to step on any other allocations leading to insecure
// conditions.
static atomic_flag nss_init_started;
static atomic_bool nss_init_completed;
static struct subid_nss_ops *subid_nss;
bool nss_is_initialized() {
return atomic_load(&nss_init_completed);
}
void nss_exit() {
if (nss_is_initialized() && subid_nss) {
dlclose(subid_nss->handle);
free(subid_nss);
subid_nss = NULL;
}
}
// nsswitch_path is an argument only to support testing.
void nss_init(char *nsswitch_path) {
FILE *nssfp = NULL;
char *line = NULL, *p, *token, *saveptr;
size_t len = 0;
if (atomic_flag_test_and_set(&nss_init_started)) {
// Another thread has started nss_init, wait for it to complete
while (!atomic_load(&nss_init_completed))
usleep(100);
return;
}
if (!nsswitch_path)
nsswitch_path = NSSWITCH;
// read nsswitch.conf to check for a line like:
// subid: files
nssfp = fopen(nsswitch_path, "r");
if (!nssfp) {
fprintf(shadow_logfd, "Failed opening %s: %m", nsswitch_path);
atomic_store(&nss_init_completed, true);
return;
}
while ((getline(&line, &len, nssfp)) != -1) {
if (line[0] == '\0' || line[0] == '#')
continue;
if (strlen(line) < 8)
continue;
if (strncasecmp(line, "subid:", 6) != 0)
continue;
p = &line[6];
while ((*p) && isspace(*p))
p++;
if (!*p)
continue;
for (token = strtok_r(p, " \n\t", &saveptr);
token;
token = strtok_r(NULL, " \n\t", &saveptr)) {
char libname[65];
void *h;
if (strcmp(token, "files") == 0) {
subid_nss = NULL;
goto done;
}
if (strlen(token) > 50) {
fprintf(shadow_logfd, "Subid NSS module name too long (longer than 50 characters): %s\n", token);
fprintf(shadow_logfd, "Using files\n");
subid_nss = NULL;
goto done;
}
snprintf(libname, 64, "libsubid_%s.so", token);
h = dlopen(libname, RTLD_LAZY);
if (!h) {
fprintf(shadow_logfd, "Error opening %s: %s\n", libname, dlerror());
fprintf(shadow_logfd, "Using files\n");
subid_nss = NULL;
goto done;
}
subid_nss = malloc(sizeof(*subid_nss));
if (!subid_nss) {
dlclose(h);
goto done;
}
subid_nss->has_range = dlsym(h, "shadow_subid_has_range");
if (!subid_nss->has_range) {
fprintf(shadow_logfd, "%s did not provide @has_range@\n", libname);
dlclose(h);
free(subid_nss);
subid_nss = NULL;
goto done;
}
subid_nss->list_owner_ranges = dlsym(h, "shadow_subid_list_owner_ranges");
if (!subid_nss->list_owner_ranges) {
fprintf(shadow_logfd, "%s did not provide @list_owner_ranges@\n", libname);
dlclose(h);
free(subid_nss);
subid_nss = NULL;
goto done;
}
subid_nss->find_subid_owners = dlsym(h, "shadow_subid_find_subid_owners");
if (!subid_nss->find_subid_owners) {
fprintf(shadow_logfd, "%s did not provide @find_subid_owners@\n", libname);
dlclose(h);
free(subid_nss);
subid_nss = NULL;
goto done;
}
subid_nss->handle = h;
goto done;
}
fprintf(shadow_logfd, "No usable subid NSS module found, using files\n");
// subid_nss has to be null here, but to ease reviews:
free(subid_nss);
subid_nss = NULL;
goto done;
}
done:
atomic_store(&nss_init_completed, true);
free(line);
if (nssfp) {
atexit(nss_exit);
fclose(nssfp);
}
}
struct subid_nss_ops *get_subid_nss_handle() {
nss_init(NULL);
return subid_nss;
}

View File

@@ -59,7 +59,8 @@
#include "defines.h"
#include "commonio.h"
extern /*@observer@*/ const char *Prog;
extern /*@observer@*/ const char *Prog; /* Program name showed in error messages */
extern FILE *shadow_logfd; /* file descripter to which error messages are printed */
/* addgrps.c */
#if defined (HAVE_SETGROUPS) && ! defined (USE_PAM)
@@ -161,12 +162,10 @@ extern int find_new_uid (bool sys_user,
#ifdef ENABLE_SUBIDS
/* find_new_sub_gids.c */
extern int find_new_sub_gids (const char *owner,
gid_t *range_start, unsigned long *range_count);
extern int find_new_sub_gids (gid_t *range_start, unsigned long *range_count);
/* find_new_sub_uids.c */
extern int find_new_sub_uids (const char *owner,
uid_t *range_start, unsigned long *range_count);
extern int find_new_sub_uids (uid_t *range_start, unsigned long *range_count);
#endif /* ENABLE_SUBIDS */
@@ -208,7 +207,9 @@ extern void __gr_set_changed (void);
/* groupmem.c */
extern /*@null@*/ /*@only@*/struct group *__gr_dup (const struct group *grent);
extern void gr_free_members (struct group *grent);
extern void gr_free (/*@out@*/ /*@only@*/struct group *grent);
extern bool gr_append_member (struct group *grp, char *member);
/* hushed.c */
extern bool hushed (const char *username);
@@ -262,6 +263,62 @@ extern void motd (void);
/* myname.c */
extern /*@null@*//*@only@*/struct passwd *get_my_pwent (void);
/* nss.c */
#include <libsubid/subid.h>
extern void nss_init(char *nsswitch_path);
extern bool nss_is_initialized();
struct subid_nss_ops {
/*
* nss_has_range: does a user own a given subid range
*
* @owner: username
* @start: first subid in queried range
* @count: number of subids in queried range
* @idtype: subuid or subgid
* @result: true if @owner has been allocated the subid range.
*
* returns success if the module was able to determine an answer (true or false),
* else an error status.
*/
enum subid_status (*has_range)(const char *owner, unsigned long start, unsigned long count, enum subid_type idtype, bool *result);
/*
* nss_list_owner_ranges: list the subid ranges delegated to a user.
*
* @owner - string representing username being queried
* @id_type - subuid or subgid
* @ranges - pointer to an array of struct subid_range, or NULL. The
* returned array must be freed by the caller.
* @count - pointer to an integer into which the number of returned ranges
* is written.
* returns success if the module was able to determine an answer,
* else an error status.
*/
enum subid_status (*list_owner_ranges)(const char *owner, enum subid_type id_type, struct subid_range **ranges, int *count);
/*
* nss_find_subid_owners: find uids who own a given subuid or subgid.
*
* @id - the delegated id (subuid or subgid) being queried
* @id_type - subuid or subgid
* @uids - pointer to an array of uids which will be allocated by
* nss_find_subid_owners()
* @count - number of uids found
*
* returns success if the module was able to determine an answer,
* else an error status.
*/
enum subid_status (*find_subid_owners)(unsigned long id, enum subid_type id_type, uid_t **uids, int *count);
/* The dlsym handle to close */
void *handle;
};
extern struct subid_nss_ops *get_subid_nss_handle();
/* pam_pass_non_interactive.c */
#ifdef USE_PAM
extern int do_pam_passwd_non_interactive (const char *pam_service,
@@ -334,7 +391,7 @@ extern /*@observer@*/const char *crypt_make_salt (/*@null@*//*@observer@*/const
/* selinux.c */
#ifdef WITH_SELINUX
extern int set_selinux_file_context (const char *dst_name);
extern int set_selinux_file_context (const char *dst_name, mode_t mode);
extern int reset_selinux_file_context (void);
extern int check_selinux_permit (const char *perm_name);
#endif
@@ -448,6 +505,7 @@ extern bool valid (const char *, const struct passwd *);
extern /*@maynotreturn@*/ /*@only@*//*@out@*//*@notnull@*/char *xmalloc (size_t size)
/*@ensures MaxSet(result) == (size - 1); @*/;
extern /*@maynotreturn@*/ /*@only@*//*@notnull@*/char *xstrdup (const char *);
extern void xfree(void *ap);
/* xgetpwnam.c */
extern /*@null@*/ /*@only@*/struct passwd *xgetpwnam (const char *);

102
lib/run_part.c Normal file
View File

@@ -0,0 +1,102 @@
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <lib/prototypes.h>
int run_part (char *script_path, char *name, char *action)
{
int pid;
int wait_status;
int pid_status;
char *args[] = { script_path, NULL };
pid=fork();
if (pid==-1){
perror ("Could not fork");
return 1;
}
if (pid==0) {
setenv ("ACTION",action,1);
setenv ("SUBJECT",name,1);
execv (script_path,args);
perror ("execv");
exit(1);
}
pid_status = wait (&wait_status);
if (pid_status == pid) {
return (wait_status);
}
perror ("waitpid");
return (1);
}
int run_parts (char *directory, char *name, char *action)
{
struct dirent **namelist;
int scanlist;
int n;
int execute_result;
scanlist = scandir (directory, &namelist, 0, alphasort);
if (scanlist<0) {
return (0);
}
for (n=0; n<scanlist; n++) {
int path_length;
struct stat sb;
path_length=strlen(directory) + strlen(namelist[n]->d_name) + 2;
char *s = (char*)malloc(path_length);
if (!s) {
printf ("could not allocate memory\n");
for (; n<scanlist; n++) {
free (namelist[n]);
}
free (namelist);
return (1);
}
snprintf (s, path_length, "%s/%s", directory, namelist[n]->d_name);
execute_result = 0;
if (stat (s, &sb) == -1) {
perror ("stat");
free (s);
for (; n<scanlist; n++) {
free (namelist[n]);
}
free (namelist);
return (1);
}
if (S_ISREG (sb.st_mode) || S_ISLNK (sb.st_mode)) {
execute_result = run_part (s, name, action);
}
free (s);
if (execute_result!=0) {
fprintf (shadow_logfd,
"%s: did not exit cleanly.\n",
namelist[n]->d_name);
for (; n<scanlist; n++) {
free (namelist[n]);
}
break;
}
free (namelist[n]);
}
free (namelist);
return (execute_result);
}

2
lib/run_part.h Normal file
View File

@@ -0,0 +1,2 @@
int run_part (char *script_path, char *name, char *action);
int run_parts (char *directory, char *name, char *action);

View File

@@ -35,11 +35,20 @@
#include "defines.h"
#include <selinux/selinux.h>
#include <selinux/context.h>
#include <selinux/label.h>
#include "prototypes.h"
static bool selinux_checked = false;
static bool selinux_enabled;
static /*@null@*/struct selabel_handle *selabel_hnd = NULL;
static void cleanup(void)
{
if (selabel_hnd) {
selabel_close(selabel_hnd);
selabel_hnd = NULL;
}
}
/*
* set_selinux_file_context - Set the security context before any file or
@@ -51,10 +60,8 @@ static bool selinux_enabled;
* Callers may have to Reset SELinux to create files with default
* contexts with reset_selinux_file_context
*/
int set_selinux_file_context (const char *dst_name)
int set_selinux_file_context (const char *dst_name, mode_t mode)
{
/*@null@*/security_context_t scontext = NULL;
if (!selinux_checked) {
selinux_enabled = is_selinux_enabled () > 0;
selinux_checked = true;
@@ -62,18 +69,34 @@ int set_selinux_file_context (const char *dst_name)
if (selinux_enabled) {
/* Get the default security context for this file */
if (matchpathcon (dst_name, 0, &scontext) < 0) {
if (security_getenforce () != 0) {
return 1;
/*@null@*/char *fcontext_raw = NULL;
int r;
if (selabel_hnd == NULL) {
selabel_hnd = selabel_open(SELABEL_CTX_FILE, NULL, 0);
if (selabel_hnd == NULL) {
return security_getenforce () != 0;
}
(void) atexit(cleanup);
}
r = selabel_lookup_raw(selabel_hnd, &fcontext_raw, dst_name, mode);
if (r < 0) {
/* No context specified for the searched path */
if (errno == ENOENT) {
return 0;
}
return security_getenforce () != 0;
}
/* Set the security context for the next created file */
if (setfscreatecon (scontext) < 0) {
if (security_getenforce () != 0) {
return 1;
}
r = setfscreatecon_raw (fcontext_raw);
freecon (fcontext_raw);
if (r < 0) {
return security_getenforce () != 0;
}
freecon (scontext);
}
return 0;
}
@@ -92,8 +115,8 @@ int reset_selinux_file_context (void)
selinux_checked = true;
}
if (selinux_enabled) {
if (setfscreatecon (NULL) != 0) {
return 1;
if (setfscreatecon_raw (NULL) != 0) {
return security_getenforce () != 0;
}
}
return 0;
@@ -131,7 +154,7 @@ static int selinux_log_cb (int type, const char *fmt, ...) {
&& (errno != EAFNOSUPPORT)) {
(void) fputs (_("Cannot open audit interface.\n"),
stderr);
shadow_logfd);
SYSLOG ((LOG_WARN, "Cannot open audit interface."));
}
}
@@ -174,7 +197,7 @@ skip_syslog:
*/
int check_selinux_permit (const char *perm_name)
{
char *user_context_str;
char *user_context_raw;
int r;
if (0 == is_selinux_enabled ()) {
@@ -183,8 +206,8 @@ int check_selinux_permit (const char *perm_name)
selinux_set_callback (SELINUX_CB_LOG, (union selinux_callback) selinux_log_cb);
if (getprevcon (&user_context_str) != 0) {
fprintf (stderr,
if (getprevcon_raw (&user_context_raw) != 0) {
fprintf (shadow_logfd,
_("%s: can not get previous SELinux process context: %s\n"),
Prog, strerror (errno));
SYSLOG ((LOG_WARN,
@@ -193,8 +216,8 @@ int check_selinux_permit (const char *perm_name)
return (security_getenforce () != 0);
}
r = selinux_check_access (user_context_str, user_context_str, "passwd", perm_name, NULL);
freecon (user_context_str);
r = selinux_check_access (user_context_raw, user_context_raw, "passwd", perm_name, NULL);
freecon (user_context_raw);
return r;
}

View File

@@ -69,7 +69,7 @@ static void semanage_error_callback (unused void *varg,
switch (semanage_msg_get_level (handle)) {
case SEMANAGE_MSG_ERR:
case SEMANAGE_MSG_WARN:
fprintf (stderr, _("[libsemanage]: %s\n"), message);
fprintf (shadow_logfd, _("[libsemanage]: %s\n"), message);
break;
case SEMANAGE_MSG_INFO:
/* nop */
@@ -87,7 +87,7 @@ static semanage_handle_t *semanage_init (void)
handle = semanage_handle_create ();
if (NULL == handle) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Cannot create SELinux management handle\n"));
return NULL;
}
@@ -96,26 +96,26 @@ static semanage_handle_t *semanage_init (void)
ret = semanage_is_managed (handle);
if (ret != 1) {
fprintf (stderr, _("SELinux policy not managed\n"));
fprintf (shadow_logfd, _("SELinux policy not managed\n"));
goto fail;
}
ret = semanage_access_check (handle);
if (ret < SEMANAGE_CAN_READ) {
fprintf (stderr, _("Cannot read SELinux policy store\n"));
fprintf (shadow_logfd, _("Cannot read SELinux policy store\n"));
goto fail;
}
ret = semanage_connect (handle);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Cannot establish SELinux management connection\n"));
goto fail;
}
ret = semanage_begin_transaction (handle);
if (ret != 0) {
fprintf (stderr, _("Cannot begin SELinux transaction\n"));
fprintf (shadow_logfd, _("Cannot begin SELinux transaction\n"));
goto fail;
}
@@ -137,7 +137,7 @@ static int semanage_user_mod (semanage_handle_t *handle,
semanage_seuser_query (handle, key, &seuser);
if (NULL == seuser) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Could not query seuser for %s\n"), login_name);
ret = 1;
goto done;
@@ -145,7 +145,7 @@ static int semanage_user_mod (semanage_handle_t *handle,
ret = semanage_seuser_set_mlsrange (handle, seuser, DEFAULT_SERANGE);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Could not set serange for %s\n"), login_name);
ret = 1;
goto done;
@@ -153,7 +153,7 @@ static int semanage_user_mod (semanage_handle_t *handle,
ret = semanage_seuser_set_sename (handle, seuser, seuser_name);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Could not set sename for %s\n"),
login_name);
ret = 1;
@@ -162,7 +162,7 @@ static int semanage_user_mod (semanage_handle_t *handle,
ret = semanage_seuser_modify_local (handle, key, seuser);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Could not modify login mapping for %s\n"),
login_name);
ret = 1;
@@ -186,7 +186,7 @@ static int semanage_user_add (semanage_handle_t *handle,
ret = semanage_seuser_create (handle, &seuser);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Cannot create SELinux login mapping for %s\n"),
login_name);
ret = 1;
@@ -195,14 +195,14 @@ static int semanage_user_add (semanage_handle_t *handle,
ret = semanage_seuser_set_name (handle, seuser, login_name);
if (ret != 0) {
fprintf (stderr, _("Could not set name for %s\n"), login_name);
fprintf (shadow_logfd, _("Could not set name for %s\n"), login_name);
ret = 1;
goto done;
}
ret = semanage_seuser_set_mlsrange (handle, seuser, DEFAULT_SERANGE);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Could not set serange for %s\n"),
login_name);
ret = 1;
@@ -211,7 +211,7 @@ static int semanage_user_add (semanage_handle_t *handle,
ret = semanage_seuser_set_sename (handle, seuser, seuser_name);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Could not set SELinux user for %s\n"),
login_name);
ret = 1;
@@ -220,7 +220,7 @@ static int semanage_user_add (semanage_handle_t *handle,
ret = semanage_seuser_modify_local (handle, key, seuser);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Could not add login mapping for %s\n"),
login_name);
ret = 1;
@@ -248,21 +248,21 @@ int set_seuser (const char *login_name, const char *seuser_name)
handle = semanage_init ();
if (NULL == handle) {
fprintf (stderr, _("Cannot init SELinux management\n"));
fprintf (shadow_logfd, _("Cannot init SELinux management\n"));
ret = 1;
goto done;
}
ret = semanage_seuser_key_create (handle, login_name, &key);
if (ret != 0) {
fprintf (stderr, _("Cannot create SELinux user key\n"));
fprintf (shadow_logfd, _("Cannot create SELinux user key\n"));
ret = 1;
goto done;
}
ret = semanage_seuser_exists (handle, key, &seuser_exists);
if (ret < 0) {
fprintf (stderr, _("Cannot verify the SELinux user\n"));
fprintf (shadow_logfd, _("Cannot verify the SELinux user\n"));
ret = 1;
goto done;
}
@@ -270,7 +270,7 @@ int set_seuser (const char *login_name, const char *seuser_name)
if (0 != seuser_exists) {
ret = semanage_user_mod (handle, key, login_name, seuser_name);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Cannot modify SELinux user mapping\n"));
ret = 1;
goto done;
@@ -278,7 +278,7 @@ int set_seuser (const char *login_name, const char *seuser_name)
} else {
ret = semanage_user_add (handle, key, login_name, seuser_name);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Cannot add SELinux user mapping\n"));
ret = 1;
goto done;
@@ -287,7 +287,7 @@ int set_seuser (const char *login_name, const char *seuser_name)
ret = semanage_commit (handle);
if (ret < 0) {
fprintf (stderr, _("Cannot commit SELinux transaction\n"));
fprintf (shadow_logfd, _("Cannot commit SELinux transaction\n"));
ret = 1;
goto done;
}
@@ -310,27 +310,27 @@ int del_seuser (const char *login_name)
handle = semanage_init ();
if (NULL == handle) {
fprintf (stderr, _("Cannot init SELinux management\n"));
fprintf (shadow_logfd, _("Cannot init SELinux management\n"));
ret = 1;
goto done;
}
ret = semanage_seuser_key_create (handle, login_name, &key);
if (ret != 0) {
fprintf (stderr, _("Cannot create SELinux user key\n"));
fprintf (shadow_logfd, _("Cannot create SELinux user key\n"));
ret = 1;
goto done;
}
ret = semanage_seuser_exists (handle, key, &exists);
if (ret < 0) {
fprintf (stderr, _("Cannot verify the SELinux user\n"));
fprintf (shadow_logfd, _("Cannot verify the SELinux user\n"));
ret = 1;
goto done;
}
if (0 == exists) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Login mapping for %s is not defined, OK if default mapping was used\n"),
login_name);
ret = 0; /* probably default mapping */
@@ -339,13 +339,13 @@ int del_seuser (const char *login_name)
ret = semanage_seuser_exists_local (handle, key, &exists);
if (ret < 0) {
fprintf (stderr, _("Cannot verify the SELinux user\n"));
fprintf (shadow_logfd, _("Cannot verify the SELinux user\n"));
ret = 1;
goto done;
}
if (0 == exists) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Login mapping for %s is defined in policy, cannot be deleted\n"),
login_name);
ret = 0; /* Login mapping defined in policy can't be deleted */
@@ -354,7 +354,7 @@ int del_seuser (const char *login_name)
ret = semanage_seuser_del_local (handle, key);
if (ret != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Could not delete login mapping for %s"),
login_name);
ret = 1;
@@ -363,7 +363,7 @@ int del_seuser (const char *login_name)
ret = semanage_commit (handle);
if (ret < 0) {
fprintf (stderr, _("Cannot commit SELinux transaction\n"));
fprintf (shadow_logfd, _("Cannot commit SELinux transaction\n"));
ret = 1;
goto done;
}

View File

@@ -52,7 +52,6 @@ struct spwd *sgetspent (const char *string)
static struct spwd spwd;
char *fields[FIELDS];
char *cp;
char *cpp;
int i;
/*

View File

@@ -130,7 +130,6 @@ static struct spwd *my_sgetspent (const char *string)
static struct spwd spwd;
char *fields[FIELDS];
char *cp;
char *cpp;
int i;
/*
@@ -389,7 +388,6 @@ struct spwd *getspent (void)
#ifdef USE_NIS
int nis_1_user = 0;
struct spwd *val;
char buf[BUFSIZ];
#endif
if (NULL == shadow) {
setspent ();
@@ -484,7 +482,6 @@ struct spwd *getspnam (const char *name)
struct spwd *sp;
#ifdef USE_NIS
char buf[BUFSIZ];
static char save_name[16];
bool nis_disabled = false;
#endif

View File

@@ -48,7 +48,7 @@ int run_command (const char *cmd, const char *argv[],
}
(void) fflush (stdout);
(void) fflush (stderr);
(void) fflush (shadow_logfd);
pid = fork ();
if (0 == pid) {
@@ -57,11 +57,11 @@ int run_command (const char *cmd, const char *argv[],
if (ENOENT == errno) {
exit (E_CMD_NOTFOUND);
}
fprintf (stderr, "%s: cannot execute %s: %s\n",
fprintf (shadow_logfd, "%s: cannot execute %s: %s\n",
Prog, cmd, strerror (errno));
exit (E_CMD_NOEXEC);
} else if ((pid_t)-1 == pid) {
fprintf (stderr, "%s: cannot execute %s: %s\n",
fprintf (shadow_logfd, "%s: cannot execute %s: %s\n",
Prog, cmd, strerror (errno));
return -1;
}
@@ -74,7 +74,7 @@ int run_command (const char *cmd, const char *argv[],
|| ((pid_t)-1 != wpid && wpid != pid));
if ((pid_t)-1 == wpid) {
fprintf (stderr, "%s: waitpid (status: %d): %s\n",
fprintf (shadow_logfd, "%s: waitpid (status: %d): %s\n",
Prog, *status, strerror (errno));
return -1;
}

View File

@@ -11,7 +11,7 @@
#include "prototypes.h"
#include "sssd.h"
#define MSG_SSSD_FLUSH_CACHE_FAILED "%s: Failed to flush the sssd cache.\n"
#define MSG_SSSD_FLUSH_CACHE_FAILED "%s: Failed to flush the sssd cache."
int sssd_flush_cache (int dbflags)
{
@@ -46,24 +46,22 @@ int sssd_flush_cache (int dbflags)
free(sss_cache_args);
if (rv != 0) {
/* run_command writes its own more detailed message. */
(void) fprintf (stderr, _(MSG_SSSD_FLUSH_CACHE_FAILED), Prog);
SYSLOG ((LOG_WARN, MSG_SSSD_FLUSH_CACHE_FAILED, Prog));
return -1;
}
code = WEXITSTATUS (status);
if (!WIFEXITED (status)) {
(void) fprintf (stderr,
_("%s: sss_cache did not terminate normally (signal %d)\n"),
Prog, WTERMSIG (status));
SYSLOG ((LOG_WARN, "%s: sss_cache did not terminate normally (signal %d)",
Prog, WTERMSIG (status)));
return -1;
} else if (code == E_CMD_NOTFOUND) {
/* sss_cache is not installed, or it is installed but uses an
interpreter that is missing. Probably the former. */
return 0;
} else if (code != 0) {
(void) fprintf (stderr, _("%s: sss_cache exited with status %d\n"),
Prog, code);
(void) fprintf (stderr, _(MSG_SSSD_FLUSH_CACHE_FAILED), Prog);
SYSLOG ((LOG_WARN, "%s: sss_cache exited with status %d", Prog, code));
SYSLOG ((LOG_WARN, MSG_SSSD_FLUSH_CACHE_FAILED, Prog));
return -1;
}

View File

@@ -11,16 +11,11 @@
#include <stdio.h>
#include "commonio.h"
#include "subordinateio.h"
#include "../libsubid/subid.h"
#include <sys/types.h>
#include <pwd.h>
struct subordinate_range {
const char *owner;
unsigned long start;
unsigned long count;
};
#define NFIELDS 3
#include <ctype.h>
#include <fcntl.h>
/*
* subordinate_dup: create a duplicate range
@@ -78,7 +73,7 @@ static void *subordinate_parse (const char *line)
static char rangebuf[1024];
int i;
char *cp;
char *fields[NFIELDS];
char *fields[SUBID_NFIELDS];
/*
* Copy the string to a temporary buffer so the substrings can
@@ -93,7 +88,7 @@ static void *subordinate_parse (const char *line)
* field. The fields are converted into NUL terminated strings.
*/
for (cp = rangebuf, i = 0; (i < NFIELDS) && (NULL != cp); i++) {
for (cp = rangebuf, i = 0; (i < SUBID_NFIELDS) && (NULL != cp); i++) {
fields[i] = cp;
while (('\0' != *cp) && (':' != *cp)) {
cp++;
@@ -108,10 +103,10 @@ static void *subordinate_parse (const char *line)
}
/*
* There must be exactly NFIELDS colon separated fields or
* There must be exactly SUBID_NFIELDS colon separated fields or
* the entry is invalid. Also, fields must be non-blank.
*/
if (i != NFIELDS || *fields[0] == '\0' || *fields[1] == '\0' || *fields[2] == '\0')
if (i != SUBID_NFIELDS || *fields[0] == '\0' || *fields[1] == '\0' || *fields[2] == '\0')
return NULL;
range.owner = fields[0];
if (getulong (fields[1], &range.start) == 0)
@@ -314,6 +309,35 @@ static bool have_range(struct commonio_db *db,
return false;
}
static bool append_range(struct subid_range **ranges, const struct subordinate_range *new, int n)
{
if (!*ranges) {
*ranges = malloc(sizeof(struct subid_range));
if (!*ranges)
return false;
} else {
struct subid_range *alloced;
alloced = realloc(*ranges, (n + 1) * (sizeof(struct subid_range)));
if (!alloced)
return false;
*ranges = alloced;
}
(*ranges)[n].start = new->start;
(*ranges)[n].count = new->count;
return true;
}
void free_subordinate_ranges(struct subordinate_range **ranges, int count)
{
int i;
if (!ranges)
return;
for (i = 0; i < count; i++)
subordinate_free(ranges[i]);
free(ranges);
}
/*
* subordinate_range_cmp: compare uid ranges
*
@@ -574,23 +598,37 @@ int sub_uid_open (int mode)
return commonio_open (&subordinate_uid_db, mode);
}
bool sub_uid_assigned(const char *owner)
bool local_sub_uid_assigned(const char *owner)
{
return range_exists (&subordinate_uid_db, owner);
}
bool have_sub_uids(const char *owner, uid_t start, unsigned long count)
{
struct subid_nss_ops *h;
bool found;
enum subid_status status;
h = get_subid_nss_handle();
if (h) {
status = h->has_range(owner, start, count, ID_TYPE_UID, &found);
if (status == SUBID_STATUS_SUCCESS && found)
return true;
return false;
}
return have_range (&subordinate_uid_db, owner, start, count);
}
int sub_uid_add (const char *owner, uid_t start, unsigned long count)
{
if (get_subid_nss_handle())
return -EOPNOTSUPP;
return add_range (&subordinate_uid_db, owner, start, count);
}
int sub_uid_remove (const char *owner, uid_t start, unsigned long count)
{
if (get_subid_nss_handle())
return -EOPNOTSUPP;
return remove_range (&subordinate_uid_db, owner, start, count);
}
@@ -658,21 +696,35 @@ int sub_gid_open (int mode)
bool have_sub_gids(const char *owner, gid_t start, unsigned long count)
{
struct subid_nss_ops *h;
bool found;
enum subid_status status;
h = get_subid_nss_handle();
if (h) {
status = h->has_range(owner, start, count, ID_TYPE_GID, &found);
if (status == SUBID_STATUS_SUCCESS && found)
return true;
return false;
}
return have_range(&subordinate_gid_db, owner, start, count);
}
bool sub_gid_assigned(const char *owner)
bool local_sub_gid_assigned(const char *owner)
{
return range_exists (&subordinate_gid_db, owner);
}
int sub_gid_add (const char *owner, gid_t start, unsigned long count)
{
if (get_subid_nss_handle())
return -EOPNOTSUPP;
return add_range (&subordinate_gid_db, owner, start, count);
}
int sub_gid_remove (const char *owner, gid_t start, unsigned long count)
{
if (get_subid_nss_handle())
return -EOPNOTSUPP;
return remove_range (&subordinate_gid_db, owner, start, count);
}
@@ -692,6 +744,308 @@ gid_t sub_gid_find_free_range(gid_t min, gid_t max, unsigned long count)
start = find_free_range (&subordinate_gid_db, min, max, count);
return start == ULONG_MAX ? (gid_t) -1 : start;
}
/*
* int list_owner_ranges(const char *owner, enum subid_type id_type, struct subordinate_range ***ranges)
*
* @owner: username
* @id_type: UID or GUID
* @ranges: pointer to array of ranges into which results will be placed.
*
* Fills in the subuid or subgid ranges which are owned by the specified
* user. Username may be a username or a string representation of a
* UID number. If id_type is UID, then subuids are returned, else
* subgids are given.
* Returns the number of ranges found, or < 0 on error.
*
* The caller must free the subordinate range list.
*/
int list_owner_ranges(const char *owner, enum subid_type id_type, struct subid_range **in_ranges)
{
// TODO - need to handle owner being either uid or username
struct subid_range *ranges = NULL;
const struct subordinate_range *range;
struct commonio_db *db;
enum subid_status status;
int count = 0;
struct subid_nss_ops *h;
*in_ranges = NULL;
h = get_subid_nss_handle();
if (h) {
status = h->list_owner_ranges(owner, id_type, in_ranges, &count);
if (status == SUBID_STATUS_SUCCESS)
return count;
return -1;
}
switch (id_type) {
case ID_TYPE_UID:
if (!sub_uid_open(O_RDONLY)) {
return -1;
}
db = &subordinate_uid_db;
break;
case ID_TYPE_GID:
if (!sub_gid_open(O_RDONLY)) {
return -1;
}
db = &subordinate_gid_db;
break;
default:
return -1;
}
commonio_rewind(db);
while ((range = commonio_next(db)) != NULL) {
if (0 == strcmp(range->owner, owner)) {
if (!append_range(&ranges, range, count++)) {
free(ranges);
ranges = NULL;
count = -1;
goto out;
}
}
}
out:
if (id_type == ID_TYPE_UID)
sub_uid_close();
else
sub_gid_close();
*in_ranges = ranges;
return count;
}
static bool all_digits(const char *str)
{
int i;
for (i = 0; str[i] != '\0'; i++)
if (!isdigit(str[i]))
return false;
return true;
}
static int append_uids(uid_t **uids, const char *owner, int n)
{
uid_t owner_uid;
uid_t *ret;
int i;
if (all_digits(owner)) {
i = sscanf(owner, "%d", &owner_uid);
if (i != 1) {
// should not happen
free(*uids);
*uids = NULL;
return -1;
}
} else {
struct passwd *pwd = getpwnam(owner);
if (NULL == pwd) {
/* Username not defined in /etc/passwd, or error occured during lookup */
free(*uids);
*uids = NULL;
return -1;
}
owner_uid = pwd->pw_uid;
}
for (i = 0; i < n; i++) {
if (owner_uid == (*uids)[i])
return n;
}
ret = realloc(*uids, (n + 1) * sizeof(uid_t));
if (!ret) {
free(*uids);
return -1;
}
ret[n] = owner_uid;
*uids = ret;
return n+1;
}
int find_subid_owners(unsigned long id, enum subid_type id_type, uid_t **uids)
{
const struct subordinate_range *range;
struct subid_nss_ops *h;
enum subid_status status;
struct commonio_db *db;
int n = 0;
h = get_subid_nss_handle();
if (h) {
status = h->find_subid_owners(id, id_type, uids, &n);
// Several ways we could handle the error cases here.
if (status != SUBID_STATUS_SUCCESS)
return -1;
return n;
}
switch (id_type) {
case ID_TYPE_UID:
if (!sub_uid_open(O_RDONLY)) {
return -1;
}
db = &subordinate_uid_db;
break;
case ID_TYPE_GID:
if (!sub_gid_open(O_RDONLY)) {
return -1;
}
db = &subordinate_gid_db;
break;
default:
return -1;
}
*uids = NULL;
commonio_rewind(db);
while ((range = commonio_next(db)) != NULL) {
if (id >= range->start && id < range->start + range-> count) {
n = append_uids(uids, range->owner, n);
if (n < 0)
break;
}
}
if (id_type == ID_TYPE_UID)
sub_uid_close();
else
sub_gid_close();
return n;
}
bool new_subid_range(struct subordinate_range *range, enum subid_type id_type, bool reuse)
{
struct commonio_db *db;
const struct subordinate_range *r;
bool ret;
if (get_subid_nss_handle())
return false;
switch (id_type) {
case ID_TYPE_UID:
if (!sub_uid_lock()) {
printf("Failed loging subuids (errno %d)\n", errno);
return false;
}
if (!sub_uid_open(O_CREAT | O_RDWR)) {
printf("Failed opening subuids (errno %d)\n", errno);
sub_uid_unlock();
return false;
}
db = &subordinate_uid_db;
break;
case ID_TYPE_GID:
if (!sub_gid_lock()) {
printf("Failed loging subgids (errno %d)\n", errno);
return false;
}
if (!sub_gid_open(O_CREAT | O_RDWR)) {
printf("Failed opening subgids (errno %d)\n", errno);
sub_gid_unlock();
return false;
}
db = &subordinate_gid_db;
break;
default:
return false;
}
commonio_rewind(db);
if (reuse) {
while ((r = commonio_next(db)) != NULL) {
// TODO account for username vs uid_t
if (0 != strcmp(r->owner, range->owner))
continue;
if (r->count >= range->count) {
range->count = r->count;
range->start = r->start;
return true;
}
}
}
range->start = find_free_range(db, range->start, ULONG_MAX, range->count);
if (range->start == ULONG_MAX) {
ret = false;
goto out;
}
ret = add_range(db, range->owner, range->start, range->count) == 1;
out:
if (id_type == ID_TYPE_UID) {
sub_uid_close();
sub_uid_unlock();
} else {
sub_gid_close();
sub_gid_unlock();
}
return ret;
}
bool release_subid_range(struct subordinate_range *range, enum subid_type id_type)
{
struct commonio_db *db;
bool ret;
if (get_subid_nss_handle())
return false;
switch (id_type) {
case ID_TYPE_UID:
if (!sub_uid_lock()) {
printf("Failed loging subuids (errno %d)\n", errno);
return false;
}
if (!sub_uid_open(O_CREAT | O_RDWR)) {
printf("Failed opening subuids (errno %d)\n", errno);
sub_uid_unlock();
return false;
}
db = &subordinate_uid_db;
break;
case ID_TYPE_GID:
if (!sub_gid_lock()) {
printf("Failed loging subgids (errno %d)\n", errno);
return false;
}
if (!sub_gid_open(O_CREAT | O_RDWR)) {
printf("Failed opening subgids (errno %d)\n", errno);
sub_gid_unlock();
return false;
}
db = &subordinate_gid_db;
break;
default:
return false;
}
ret = remove_range(db, range->owner, range->start, range->count) == 1;
if (id_type == ID_TYPE_UID) {
sub_uid_close();
sub_uid_unlock();
} else {
sub_gid_close();
sub_gid_unlock();
}
return ret;
}
#else /* !ENABLE_SUBIDS */
extern int errno; /* warning: ANSI C forbids an empty source file */
#endif /* !ENABLE_SUBIDS */

View File

@@ -11,10 +11,12 @@
#include <sys/types.h>
#include "../libsubid/subid.h"
extern int sub_uid_close(void);
extern bool have_sub_uids(const char *owner, uid_t start, unsigned long count);
extern bool sub_uid_file_present (void);
extern bool sub_uid_assigned(const char *owner);
extern bool local_sub_uid_assigned(const char *owner);
extern int sub_uid_lock (void);
extern int sub_uid_setdbname (const char *filename);
extern /*@observer@*/const char *sub_uid_dbname (void);
@@ -23,11 +25,16 @@ extern int sub_uid_unlock (void);
extern int sub_uid_add (const char *owner, uid_t start, unsigned long count);
extern int sub_uid_remove (const char *owner, uid_t start, unsigned long count);
extern uid_t sub_uid_find_free_range(uid_t min, uid_t max, unsigned long count);
extern int list_owner_ranges(const char *owner, enum subid_type id_type, struct subid_range **ranges);
extern bool new_subid_range(struct subordinate_range *range, enum subid_type id_type, bool reuse);
extern bool release_subid_range(struct subordinate_range *range, enum subid_type id_type);
extern int find_subid_owners(unsigned long id, enum subid_type id_type, uid_t **uids);
extern void free_subordinate_ranges(struct subordinate_range **ranges, int count);
extern int sub_gid_close(void);
extern bool have_sub_gids(const char *owner, gid_t start, unsigned long count);
extern bool sub_gid_file_present (void);
extern bool sub_gid_assigned(const char *owner);
extern bool local_sub_gid_assigned(const char *owner);
extern int sub_gid_lock (void);
extern int sub_gid_setdbname (const char *filename);
extern /*@observer@*/const char *sub_gid_dbname (void);

View File

@@ -72,8 +72,8 @@ shadowtcb_status shadowtcb_gain_priv (void)
* to exit soon.
*/
#define OUT_OF_MEMORY do { \
fprintf (stderr, _("%s: out of memory\n"), Prog); \
(void) fflush (stderr); \
fprintf (shadow_logfd, _("%s: out of memory\n"), Prog); \
(void) fflush (shadow_logfd); \
} while (false)
/* Returns user's tcb directory path relative to TCB_DIR. */
@@ -116,7 +116,7 @@ static /*@null@*/ char *shadowtcb_path_rel_existing (const char *name)
return NULL;
}
if (lstat (path, &st) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, path, strerror (errno));
free (path);
@@ -132,7 +132,7 @@ static /*@null@*/ char *shadowtcb_path_rel_existing (const char *name)
return rval;
}
if (!S_ISLNK (st.st_mode)) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: %s is neither a directory, nor a symlink.\n"),
Prog, path);
free (path);
@@ -140,7 +140,7 @@ static /*@null@*/ char *shadowtcb_path_rel_existing (const char *name)
}
ret = readlink (path, link, sizeof (link) - 1);
if (-1 == ret) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot read symbolic link %s: %s\n"),
Prog, path, strerror (errno));
free (path);
@@ -149,7 +149,7 @@ static /*@null@*/ char *shadowtcb_path_rel_existing (const char *name)
free (path);
if ((size_t)ret >= sizeof(link) - 1) {
link[sizeof(link) - 1] = '\0';
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Suspiciously long symlink: %s\n"),
Prog, link);
return NULL;
@@ -207,7 +207,7 @@ static shadowtcb_status mkdir_leading (const char *name, uid_t uid)
}
ptr = path;
if (stat (TCB_DIR, &st) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, TCB_DIR, strerror (errno));
goto out_free_path;
@@ -219,19 +219,19 @@ static shadowtcb_status mkdir_leading (const char *name, uid_t uid)
return SHADOWTCB_FAILURE;
}
if ((mkdir (dir, 0700) != 0) && (errno != EEXIST)) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot create directory %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free_dir;
}
if (chown (dir, 0, st.st_gid) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free_dir;
}
if (chmod (dir, 0711) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free_dir;
@@ -261,7 +261,7 @@ static shadowtcb_status unlink_suffs (const char *user)
return SHADOWTCB_FAILURE;
}
if ((unlink (tmp) != 0) && (errno != ENOENT)) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: unlink: %s: %s\n"),
Prog, tmp, strerror (errno));
free (tmp);
@@ -286,7 +286,7 @@ static shadowtcb_status rmdir_leading (char *path)
}
if (rmdir (dir) != 0) {
if (errno != ENOTEMPTY) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot remove directory %s: %s\n"),
Prog, dir, strerror (errno));
ret = SHADOWTCB_FAILURE;
@@ -315,7 +315,7 @@ static shadowtcb_status move_dir (const char *user_newname, uid_t user_newid)
goto out_free_nomem;
}
if (stat (olddir, &oldmode) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, olddir, strerror (errno));
goto out_free;
@@ -342,7 +342,7 @@ static shadowtcb_status move_dir (const char *user_newname, uid_t user_newid)
goto out_free;
}
if (rename (real_old_dir, real_new_dir) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot rename %s to %s: %s\n"),
Prog, real_old_dir, real_new_dir, strerror (errno));
goto out_free;
@@ -351,7 +351,7 @@ static shadowtcb_status move_dir (const char *user_newname, uid_t user_newid)
goto out_free;
}
if ((unlink (olddir) != 0) && (errno != ENOENT)) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot remove %s: %s\n"),
Prog, olddir, strerror (errno));
goto out_free;
@@ -365,7 +365,7 @@ static shadowtcb_status move_dir (const char *user_newname, uid_t user_newid)
}
if ( (strcmp (real_new_dir, newdir) != 0)
&& (symlink (real_new_dir_rel, newdir) != 0)) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot create symbolic link %s: %s\n"),
Prog, real_new_dir_rel, strerror (errno));
goto out_free;
@@ -464,37 +464,37 @@ shadowtcb_status shadowtcb_move (/*@NULL@*/const char *user_newname, uid_t user_
return SHADOWTCB_FAILURE;
}
if (stat (tcbdir, &dirmode) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, tcbdir, strerror (errno));
goto out_free;
}
if (chown (tcbdir, 0, 0) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change owners of %s: %s\n"),
Prog, tcbdir, strerror (errno));
goto out_free;
}
if (chmod (tcbdir, 0700) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, tcbdir, strerror (errno));
goto out_free;
}
if (lstat (shadow, &filemode) != 0) {
if (errno != ENOENT) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot lstat %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Warning, user %s has no tcb shadow file.\n"),
Prog, user_newname);
} else {
if (!S_ISREG (filemode.st_mode) ||
filemode.st_nlink != 1) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Emergency: %s's tcb shadow is not a "
"regular file with st_nlink=1.\n"
"The account is left locked.\n"),
@@ -502,13 +502,13 @@ shadowtcb_status shadowtcb_move (/*@NULL@*/const char *user_newname, uid_t user_
goto out_free;
}
if (chown (shadow, user_newid, filemode.st_gid) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
if (chmod (shadow, filemode.st_mode & 07777) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
@@ -518,7 +518,7 @@ shadowtcb_status shadowtcb_move (/*@NULL@*/const char *user_newname, uid_t user_
goto out_free;
}
if (chown (tcbdir, user_newid, dirmode.st_gid) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, tcbdir, strerror (errno));
goto out_free;
@@ -543,7 +543,7 @@ shadowtcb_status shadowtcb_create (const char *name, uid_t uid)
return SHADOWTCB_SUCCESS;
}
if (stat (TCB_DIR, &tcbdir_stat) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot stat %s: %s\n"),
Prog, TCB_DIR, strerror (errno));
return SHADOWTCB_FAILURE;
@@ -563,39 +563,39 @@ shadowtcb_status shadowtcb_create (const char *name, uid_t uid)
return SHADOWTCB_FAILURE;
}
if (mkdir (dir, 0700) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: mkdir: %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free;
}
fd = open (shadow, O_RDWR | O_CREAT | O_TRUNC, 0600);
if (fd < 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot open %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
close (fd);
if (chown (shadow, 0, authgid) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
if (chmod (shadow, (mode_t) ((authgid == shadowgid) ? 0600 : 0640)) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, shadow, strerror (errno));
goto out_free;
}
if (chown (dir, 0, authgid) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change owner of %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free;
}
if (chmod (dir, (mode_t) ((authgid == shadowgid) ? 02700 : 02710)) != 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Cannot change mode of %s: %s\n"),
Prog, dir, strerror (errno));
goto out_free;

View File

@@ -3,9 +3,9 @@ EXTRA_DIST = .indent.pro xgetXXbyYY.c
AM_CPPFLAGS = -I$(top_srcdir)/lib $(ECONF_CPPFLAGS)
noinst_LIBRARIES = libmisc.a
noinst_LTLIBRARIES = libmisc.la
libmisc_a_SOURCES = \
libmisc_la_SOURCES = \
addgrps.c \
age.c \
audit_help.c \
@@ -74,6 +74,6 @@ libmisc_a_SOURCES = \
yesno.c
if WITH_BTRFS
libmisc_a_SOURCES += btrfs.c
libmisc_la_SOURCES += btrfs.c
endif

View File

@@ -57,6 +57,7 @@ int add_groups (const char *list)
bool added;
char *token;
char buf[1024];
int ret;
if (strlen (list) >= sizeof (buf)) {
errno = EINVAL;
@@ -93,7 +94,7 @@ int add_groups (const char *list)
grp = getgrnam (token); /* local, no need for xgetgrnam */
if (NULL == grp) {
fprintf (stderr, _("Warning: unknown group %s\n"),
fprintf (shadow_logfd, _("Warning: unknown group %s\n"),
token);
continue;
}
@@ -105,7 +106,7 @@ int add_groups (const char *list)
}
if (ngroups >= sysconf (_SC_NGROUPS_MAX)) {
fputs (_("Warning: too many groups\n"), stderr);
fputs (_("Warning: too many groups\n"), shadow_logfd);
break;
}
tmp = (gid_t *) realloc (grouplist, (size_t)(ngroups + 1) * sizeof (GETGROUPS_T));
@@ -120,9 +121,12 @@ int add_groups (const char *list)
}
if (added) {
return setgroups ((size_t)ngroups, grouplist);
ret = setgroups ((size_t)ngroups, grouplist);
free (grouplist);
return ret;
}
free (grouplist);
return 0;
}
#else /* HAVE_SETGROUPS && !USE_PAM */

View File

@@ -59,7 +59,7 @@ void audit_help_open (void)
return;
}
(void) fputs (_("Cannot open audit interface - aborting.\n"),
stderr);
shadow_logfd);
exit (EXIT_FAILURE);
}
}

View File

@@ -62,6 +62,7 @@ void chown_tty (const struct passwd *info)
grent = getgr_nam_gid (getdef_str ("TTYGROUP"));
if (NULL != grent) {
gid = grent->gr_gid;
gr_free (grent);
} else {
gid = info->pw_gid;
}
@@ -75,7 +76,7 @@ void chown_tty (const struct passwd *info)
|| (fchmod (STDIN_FILENO, (mode_t)getdef_num ("TTYPERM", 0600)) != 0)) {
int err = errno;
fprintf (stderr,
fprintf (shadow_logfd,
_("Unable to change owner or mode of tty stdin: %s"),
strerror (err));
SYSLOG ((LOG_WARN,

View File

@@ -203,7 +203,7 @@ void cleanup_report_del_group_gshadow (void *group_name)
void cleanup_unlock_group (unused void *arg)
{
if (gr_unlock () == 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: failed to unlock %s\n"),
Prog, gr_dbname ());
SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
@@ -223,7 +223,7 @@ void cleanup_unlock_group (unused void *arg)
void cleanup_unlock_gshadow (unused void *arg)
{
if (sgr_unlock () == 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: failed to unlock %s\n"),
Prog, sgr_dbname ());
SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));

View File

@@ -120,7 +120,7 @@ void cleanup_report_add_user_shadow (void *user_name)
void cleanup_unlock_passwd (unused void *arg)
{
if (pw_unlock () == 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: failed to unlock %s\n"),
Prog, pw_dbname ());
SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
@@ -139,7 +139,7 @@ void cleanup_unlock_passwd (unused void *arg)
void cleanup_unlock_shadow (unused void *arg)
{
if (spw_unlock () == 0) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: failed to unlock %s\n"),
Prog, spw_dbname ());
SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));

View File

@@ -125,11 +125,11 @@ static void error_acl (struct error_context *ctx, const char *fmt, ...)
}
va_start (ap, fmt);
(void) fprintf (stderr, _("%s: "), Prog);
if (vfprintf (stderr, fmt, ap) != 0) {
(void) fputs (_(": "), stderr);
(void) fprintf (shadow_logfd, _("%s: "), Prog);
if (vfprintf (shadow_logfd, fmt, ap) != 0) {
(void) fputs (_(": "), shadow_logfd);
}
(void) fprintf (stderr, "%s\n", strerror (errno));
(void) fprintf (shadow_logfd, "%s\n", strerror (errno));
va_end (ap);
}
@@ -248,7 +248,7 @@ int copy_tree (const char *src_root, const char *dst_root,
}
if (!S_ISDIR (sb.st_mode)) {
fprintf (stderr,
fprintf (shadow_logfd,
"%s: %s is not a directory",
Prog, src_root);
return -1;
@@ -484,7 +484,7 @@ static int copy_dir (const char *src, const char *dst,
*/
#ifdef WITH_SELINUX
if (set_selinux_file_context (dst) != 0) {
if (set_selinux_file_context (dst, S_IFDIR) != 0) {
return -1;
}
#endif /* WITH_SELINUX */
@@ -605,7 +605,7 @@ static int copy_symlink (const char *src, const char *dst,
}
#ifdef WITH_SELINUX
if (set_selinux_file_context (dst) != 0) {
if (set_selinux_file_context (dst, S_IFLNK) != 0) {
free (oldlink);
return -1;
}
@@ -684,7 +684,7 @@ static int copy_special (const char *src, const char *dst,
int err = 0;
#ifdef WITH_SELINUX
if (set_selinux_file_context (dst) != 0) {
if (set_selinux_file_context (dst, statp->st_mode & S_IFMT) != 0) {
return -1;
}
#endif /* WITH_SELINUX */
@@ -744,7 +744,8 @@ static int copy_file (const char *src, const char *dst,
return -1;
}
#ifdef WITH_SELINUX
if (set_selinux_file_context (dst) != 0) {
if (set_selinux_file_context (dst, S_IFREG) != 0) {
(void) close (ifd);
return -1;
}
#endif /* WITH_SELINUX */
@@ -771,12 +772,16 @@ static int copy_file (const char *src, const char *dst,
&& (errno != 0))
#endif /* WITH_ATTR */
) {
if (ofd >= 0) {
(void) close (ofd);
}
(void) close (ifd);
return -1;
}
while ((cnt = read (ifd, buf, sizeof buf)) > 0) {
if (write (ofd, buf, (size_t)cnt) != cnt) {
(void) close (ofd);
(void) close (ifd);
return -1;
}
@@ -786,6 +791,7 @@ static int copy_file (const char *src, const char *dst,
#ifdef HAVE_FUTIMES
if (futimes (ofd, mt) != 0) {
(void) close (ofd);
return -1;
}
#endif /* HAVE_FUTIMES */

View File

@@ -171,7 +171,7 @@ void addenv (const char *string, /*@null@*/const char *value)
}
newenvp = __newenvp;
} else {
(void) fputs (_("Environment overflow\n"), stderr);
(void) fputs (_("Environment overflow\n"), shadow_logfd);
newenvc--;
free (newenvp[newenvc]);
}

View File

@@ -98,7 +98,7 @@ void failure (uid_t uid, const char *tty, struct faillog *fl)
fl->fail_cnt++;
}
strncpy (fl->fail_line, tty, sizeof fl->fail_line);
strncpy (fl->fail_line, tty, sizeof (fl->fail_line) - 1);
(void) time (&fl->fail_time);
/*

View File

@@ -74,7 +74,7 @@ static int get_ranges (bool sys_group, gid_t *min_id, gid_t *max_id,
/* Check that the ranges make sense */
if (*max_id < *min_id) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("%s: Invalid configuration: SYS_GID_MIN (%lu), "
"GID_MIN (%lu), SYS_GID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
@@ -97,7 +97,7 @@ static int get_ranges (bool sys_group, gid_t *min_id, gid_t *max_id,
/* Check that the ranges make sense */
if (*max_id < *min_id) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("%s: Invalid configuration: GID_MIN (%lu), "
"GID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
@@ -213,7 +213,7 @@ int find_new_gid (bool sys_group,
* more likely to want to stop and address the
* issue.
*/
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Encountered error attempting to use "
"preferred GID: %s\n"),
Prog, strerror (result));
@@ -243,7 +243,7 @@ int find_new_gid (bool sys_group,
/* Create an array to hold all of the discovered GIDs */
used_gids = malloc (sizeof (bool) * (gid_max +1));
if (NULL == used_gids) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
return -1;
@@ -323,7 +323,7 @@ int find_new_gid (bool sys_group,
*
*/
if (!nospam) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique system GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
@@ -366,7 +366,7 @@ int find_new_gid (bool sys_group,
*
*/
if (!nospam) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique system GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
@@ -426,7 +426,7 @@ int find_new_gid (bool sys_group,
*
*/
if (!nospam) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
@@ -469,7 +469,7 @@ int find_new_gid (bool sys_group,
*
*/
if (!nospam) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
@@ -488,7 +488,7 @@ int find_new_gid (bool sys_group,
}
/* The code reached here and found no available IDs in the range */
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique GID (no more available GIDs)\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available GIDs on the system"));

View File

@@ -46,8 +46,7 @@
*
* Return 0 on success, -1 if no unused GIDs are available.
*/
int find_new_sub_gids (const char *owner,
gid_t *range_start, unsigned long *range_count)
int find_new_sub_gids (gid_t *range_start, unsigned long *range_count)
{
unsigned long min, max;
unsigned long count;
@@ -61,7 +60,7 @@ int find_new_sub_gids (const char *owner,
count = getdef_ulong ("SUB_GID_COUNT", 65536);
if (min > max || count >= max || (min + count - 1) > max) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("%s: Invalid configuration: SUB_GID_MIN (%lu),"
" SUB_GID_MAX (%lu), SUB_GID_COUNT (%lu)\n"),
Prog, min, max, count);
@@ -70,7 +69,7 @@ int find_new_sub_gids (const char *owner,
start = sub_gid_find_free_range(min, max, count);
if (start == (gid_t)-1) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique subordinate GID range\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available subordinate GIDs on the system"));

View File

@@ -46,8 +46,7 @@
*
* Return 0 on success, -1 if no unused UIDs are available.
*/
int find_new_sub_uids (const char *owner,
uid_t *range_start, unsigned long *range_count)
int find_new_sub_uids (uid_t *range_start, unsigned long *range_count)
{
unsigned long min, max;
unsigned long count;
@@ -61,7 +60,7 @@ int find_new_sub_uids (const char *owner,
count = getdef_ulong ("SUB_UID_COUNT", 65536);
if (min > max || count >= max || (min + count - 1) > max) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("%s: Invalid configuration: SUB_UID_MIN (%lu),"
" SUB_UID_MAX (%lu), SUB_UID_COUNT (%lu)\n"),
Prog, min, max, count);
@@ -70,7 +69,7 @@ int find_new_sub_uids (const char *owner,
start = sub_uid_find_free_range(min, max, count);
if (start == (uid_t)-1) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique subordinate UID range\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available subordinate UIDs on the system"));

View File

@@ -74,7 +74,7 @@ static int get_ranges (bool sys_user, uid_t *min_id, uid_t *max_id,
/* Check that the ranges make sense */
if (*max_id < *min_id) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("%s: Invalid configuration: SYS_UID_MIN (%lu), "
"UID_MIN (%lu), SYS_UID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
@@ -97,7 +97,7 @@ static int get_ranges (bool sys_user, uid_t *min_id, uid_t *max_id,
/* Check that the ranges make sense */
if (*max_id < *min_id) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("%s: Invalid configuration: UID_MIN (%lu), "
"UID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
@@ -213,7 +213,7 @@ int find_new_uid(bool sys_user,
* more likely to want to stop and address the
* issue.
*/
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Encountered error attempting to use "
"preferred UID: %s\n"),
Prog, strerror (result));
@@ -243,7 +243,7 @@ int find_new_uid(bool sys_user,
/* Create an array to hold all of the discovered UIDs */
used_uids = malloc (sizeof (bool) * (uid_max +1));
if (NULL == used_uids) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
return -1;
@@ -323,7 +323,7 @@ int find_new_uid(bool sys_user,
*
*/
if (!nospam) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique system UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
@@ -366,7 +366,7 @@ int find_new_uid(bool sys_user,
*
*/
if (!nospam) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique system UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
@@ -426,7 +426,7 @@ int find_new_uid(bool sys_user,
*
*/
if (!nospam) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
@@ -469,7 +469,7 @@ int find_new_uid(bool sys_user,
*
*/
if (!nospam) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
@@ -488,7 +488,7 @@ int find_new_uid(bool sys_user,
}
/* The code reached here and found no available IDs in the range */
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: Can't get unique UID (no more available UIDs)\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available UIDs on the system"));

View File

@@ -61,23 +61,23 @@
epoch = strtoull (source_date_epoch, &endptr, 10);
if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0))
|| (errno != 0 && epoch == 0)) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n"),
strerror(errno));
} else if (endptr == source_date_epoch) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n"),
endptr);
} else if (*endptr != '\0') {
fprintf (stderr,
fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n"),
endptr);
} else if (epoch > ULONG_MAX) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to %lu but was found to be: %llu\n"),
ULONG_MAX, epoch);
} else if (epoch > fallback) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to the current time (%lu) but was found to be: %llu\n"),
fallback, epoch);
} else {

View File

@@ -36,8 +36,8 @@
#include <stdio.h>
#include "prototypes.h"
#include "idmapping.h"
#include <sys/prctl.h>
#if HAVE_SYS_CAPABILITY_H
#include <sys/prctl.h>
#include <sys/capability.h>
#endif
@@ -47,19 +47,19 @@ struct map_range *get_map_ranges(int ranges, int argc, char **argv)
int idx, argidx;
if (ranges < 0 || argc < 0) {
fprintf(stderr, "%s: error calculating number of arguments\n", Prog);
fprintf(shadow_logfd, "%s: error calculating number of arguments\n", Prog);
return NULL;
}
if (ranges != ((argc + 2) / 3)) {
fprintf(stderr, "%s: ranges: %u is wrong for argc: %d\n", Prog, ranges, argc);
fprintf(shadow_logfd, "%s: ranges: %u is wrong for argc: %d\n", Prog, ranges, argc);
return NULL;
}
if ((ranges * 3) > argc) {
fprintf(stderr, "ranges: %u argc: %d\n",
fprintf(shadow_logfd, "ranges: %u argc: %d\n",
ranges, argc);
fprintf(stderr,
fprintf(shadow_logfd,
_( "%s: Not enough arguments to form %u mappings\n"),
Prog, ranges);
return NULL;
@@ -67,7 +67,7 @@ struct map_range *get_map_ranges(int ranges, int argc, char **argv)
mappings = calloc(ranges, sizeof(*mappings));
if (!mappings) {
fprintf(stderr, _( "%s: Memory allocation failure\n"),
fprintf(shadow_logfd, _( "%s: Memory allocation failure\n"),
Prog);
exit(EXIT_FAILURE);
}
@@ -88,24 +88,24 @@ struct map_range *get_map_ranges(int ranges, int argc, char **argv)
return NULL;
}
if (ULONG_MAX - mapping->upper <= mapping->count || ULONG_MAX - mapping->lower <= mapping->count) {
fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
fprintf(shadow_logfd, _( "%s: subuid overflow detected.\n"), Prog);
exit(EXIT_FAILURE);
}
if (mapping->upper > UINT_MAX ||
mapping->lower > UINT_MAX ||
mapping->count > UINT_MAX) {
fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
fprintf(shadow_logfd, _( "%s: subuid overflow detected.\n"), Prog);
exit(EXIT_FAILURE);
}
if (mapping->lower + mapping->count > UINT_MAX ||
mapping->upper + mapping->count > UINT_MAX) {
fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
fprintf(shadow_logfd, _( "%s: subuid overflow detected.\n"), Prog);
exit(EXIT_FAILURE);
}
if (mapping->lower + mapping->count < mapping->lower ||
mapping->upper + mapping->count < mapping->upper) {
/* this one really shouldn't be possible given previous checks */
fprintf(stderr, _( "%s: subuid overflow detected.\n"), Prog);
fprintf(shadow_logfd, _( "%s: subuid overflow detected.\n"), Prog);
exit(EXIT_FAILURE);
}
}
@@ -123,6 +123,25 @@ struct map_range *get_map_ranges(int ranges, int argc, char **argv)
*/
#define ULONG_DIGITS ((((sizeof(unsigned long) * CHAR_BIT) + 9)/10)*3)
#if HAVE_SYS_CAPABILITY_H
static inline bool maps_lower_root(int cap, int ranges, struct map_range *mappings)
{
int idx;
struct map_range *mapping;
if (cap != CAP_SETUID)
return false;
mapping = mappings;
for (idx = 0; idx < ranges; idx++, mapping++) {
if (mapping->lower == 0)
return true;
}
return false;
}
#endif
/*
* The ruid refers to the caller's uid and is used to reset the effective uid
* back to the callers real uid.
@@ -157,19 +176,19 @@ void write_mapping(int proc_dir_fd, int ranges, struct map_range *mappings,
} else if (strcmp(map_file, "gid_map") == 0) {
cap = CAP_SETGID;
} else {
fprintf(stderr, _("%s: Invalid map file %s specified\n"), Prog, map_file);
fprintf(shadow_logfd, _("%s: Invalid map file %s specified\n"), Prog, map_file);
exit(EXIT_FAILURE);
}
/* Align setuid- and fscaps-based new{g,u}idmap behavior. */
if (geteuid() == 0 && geteuid() != ruid) {
if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) < 0) {
fprintf(stderr, _("%s: Could not prctl(PR_SET_KEEPCAPS)\n"), Prog);
fprintf(shadow_logfd, _("%s: Could not prctl(PR_SET_KEEPCAPS)\n"), Prog);
exit(EXIT_FAILURE);
}
if (seteuid(ruid) < 0) {
fprintf(stderr, _("%s: Could not seteuid to %d\n"), Prog, ruid);
fprintf(shadow_logfd, _("%s: Could not seteuid to %d\n"), Prog, ruid);
exit(EXIT_FAILURE);
}
}
@@ -177,9 +196,15 @@ void write_mapping(int proc_dir_fd, int ranges, struct map_range *mappings,
/* Lockdown new{g,u}idmap by dropping all unneeded capabilities. */
memset(data, 0, sizeof(data));
data[0].effective = CAP_TO_MASK(cap);
/*
* When uid 0 from the ancestor userns is supposed to be mapped into
* the child userns we need to retain CAP_SETFCAP.
*/
if (maps_lower_root(cap, ranges, mappings))
data[0].effective |= CAP_TO_MASK(CAP_SETFCAP);
data[0].permitted = data[0].effective;
if (capset(&hdr, data) < 0) {
fprintf(stderr, _("%s: Could not set caps\n"), Prog);
fprintf(shadow_logfd, _("%s: Could not set caps\n"), Prog);
exit(EXIT_FAILURE);
}
#endif
@@ -197,7 +222,7 @@ void write_mapping(int proc_dir_fd, int ranges, struct map_range *mappings,
mapping->lower,
mapping->count);
if ((written <= 0) || (written >= (bufsize - (pos - buf)))) {
fprintf(stderr, _("%s: snprintf failed!\n"), Prog);
fprintf(shadow_logfd, _("%s: snprintf failed!\n"), Prog);
exit(EXIT_FAILURE);
}
pos += written;
@@ -206,14 +231,15 @@ void write_mapping(int proc_dir_fd, int ranges, struct map_range *mappings,
/* Write the mapping to the mapping file */
fd = openat(proc_dir_fd, map_file, O_WRONLY);
if (fd < 0) {
fprintf(stderr, _("%s: open of %s failed: %s\n"),
fprintf(shadow_logfd, _("%s: open of %s failed: %s\n"),
Prog, map_file, strerror(errno));
exit(EXIT_FAILURE);
}
if (write(fd, buf, pos - buf) != (pos - buf)) {
fprintf(stderr, _("%s: write to %s failed: %s\n"),
fprintf(shadow_logfd, _("%s: write to %s failed: %s\n"),
Prog, map_file, strerror(errno));
exit(EXIT_FAILURE);
}
close(fd);
free(buf);
}

View File

@@ -40,5 +40,7 @@ extern struct map_range *get_map_ranges(int ranges, int argc, char **argv);
extern void write_mapping(int proc_dir_fd, int ranges,
struct map_range *mappings, const char *map_file, uid_t ruid);
extern void nss_init(char *nsswitch_path);
#endif /* _ID_MAPPING_H_ */

View File

@@ -548,7 +548,7 @@ void setup_limits (const struct passwd *info)
#ifdef LIMITS
if (info->pw_uid != 0) {
if ((setup_user_limits (info->pw_name) & LOGIN_ERROR_LOGIN) != 0) {
(void) fputs (_("Too many logins.\n"), stderr);
(void) fputs (_("Too many logins.\n"), shadow_logfd);
(void) sleep (2); /* XXX: Should be FAIL_DELAY */
exit (EXIT_FAILURE);
}

View File

@@ -241,6 +241,7 @@ bool is_on_list (char *const *list, const char *member)
if ('\0' == *members) {
*array = (char *) 0;
free (members);
return array;
}

View File

@@ -100,9 +100,9 @@ void dolastlog (
ll_time = newlog.ll_time;
(void) time (&ll_time);
newlog.ll_time = ll_time;
strncpy (newlog.ll_line, line, sizeof newlog.ll_line);
strncpy (newlog.ll_line, line, sizeof (newlog.ll_line) - 1);
#if HAVE_LL_HOST
strncpy (newlog.ll_host, host, sizeof newlog.ll_host);
strncpy (newlog.ll_host, host, sizeof (newlog.ll_host) - 1);
#endif
if ( (lseek (fd, offset, SEEK_SET) != offset)
|| (write (fd, (const void *) &newlog, sizeof newlog) != (ssize_t) sizeof newlog)

View File

@@ -62,6 +62,9 @@
if ((NULL != pw) && (pw->pw_uid == ruid)) {
return pw;
}
if (NULL != pw) {
pw_free (pw);
}
}
return xgetpwuid (ruid);

View File

@@ -271,6 +271,9 @@ static /*@observer@*//*@null@*/const char *obscure_msg (
#endif
#ifdef USE_BCRYPT
|| (strcmp (result, "BCRYPT") == 0)
#endif
#ifdef USE_YESCRYPT
|| (strcmp (result, "YESCRYPT") == 0)
#endif
) {
return NULL;

View File

@@ -59,20 +59,20 @@ void do_pam_passwd (const char *user, bool silent, bool change_expired)
ret = pam_start ("passwd", user, &conv, &pamh);
if (ret != PAM_SUCCESS) {
fprintf (stderr,
fprintf (shadow_logfd,
_("passwd: pam_start() failed, error %d\n"), ret);
exit (10); /* XXX */
}
ret = pam_chauthtok (pamh, flags);
if (ret != PAM_SUCCESS) {
fprintf (stderr, _("passwd: %s\n"), pam_strerror (pamh, ret));
fputs (_("passwd: password unchanged\n"), stderr);
fprintf (shadow_logfd, _("passwd: %s\n"), pam_strerror (pamh, ret));
fputs (_("passwd: password unchanged\n"), shadow_logfd);
pam_end (pamh, ret);
exit (10); /* XXX */
}
fputs (_("passwd: password updated successfully\n"), stderr);
fputs (_("passwd: password updated successfully\n"), shadow_logfd);
(void) pam_end (pamh, PAM_SUCCESS);
}
#else /* !USE_PAM */

View File

@@ -76,7 +76,7 @@ static int ni_conv (int num_msg,
switch (msg[count]->msg_style) {
case PAM_PROMPT_ECHO_ON:
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: PAM modules requesting echoing are not supported.\n"),
Prog);
goto failed_conversation;
@@ -88,7 +88,7 @@ static int ni_conv (int num_msg,
break;
case PAM_ERROR_MSG:
if ( (NULL == msg[count]->msg)
|| (fprintf (stderr, "%s\n", msg[count]->msg) <0)) {
|| (fprintf (shadow_logfd, "%s\n", msg[count]->msg) <0)) {
goto failed_conversation;
}
responses[count].resp = NULL;
@@ -101,7 +101,7 @@ static int ni_conv (int num_msg,
responses[count].resp = NULL;
break;
default:
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("%s: conversation type %d not supported.\n"),
Prog, msg[count]->msg_style);
goto failed_conversation;
@@ -143,7 +143,7 @@ int do_pam_passwd_non_interactive (const char *pam_service,
ret = pam_start (pam_service, username, &non_interactive_pam_conv, &pamh);
if (ret != PAM_SUCCESS) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: (user %s) pam_start failure %d\n"),
Prog, username, ret);
return 1;
@@ -152,7 +152,7 @@ int do_pam_passwd_non_interactive (const char *pam_service,
non_interactive_password = password;
ret = pam_chauthtok (pamh, 0);
if (ret != PAM_SUCCESS) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"),
Prog, username, pam_strerror (pamh, ret));

View File

@@ -74,25 +74,31 @@ extern const char* process_prefix_flag (const char* short_opt, int argc, char **
* Parse the command line options.
*/
int i;
const char *prefix = NULL;
const char *prefix = NULL, *val;
for (i = 0; i < argc; i++) {
val = NULL;
if ( (strcmp (argv[i], "--prefix") == 0)
|| ((strncmp (argv[i], "--prefix=", 9) == 0)
&& (val = argv[i] + 9))
|| (strcmp (argv[i], short_opt) == 0)) {
if (NULL != prefix) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: multiple --prefix options\n"),
Prog);
exit (E_BAD_ARG);
}
if (i + 1 == argc) {
fprintf (stderr,
if (val) {
prefix = val;
} else if (i + 1 == argc) {
fprintf (shadow_logfd,
_("%s: option '%s' requires an argument\n"),
Prog, argv[i]);
exit (E_BAD_ARG);
} else {
prefix = argv[++ i];
}
prefix = argv[i + 1];
}
}
@@ -103,6 +109,12 @@ extern const char* process_prefix_flag (const char* short_opt, int argc, char **
return ""; /* if prefix is "/" then we ignore the flag option */
/* should we prevent symbolic link from being used as a prefix? */
if ( prefix[0] != '/') {
fprintf (shadow_logfd,
_("%s: prefix must be an absolute path\n"),
Prog);
exit (E_BAD_ARG);
}
size_t len;
len = strlen(prefix) + strlen(PASSWD_FILE) + 2;
passwd_db_file = xmalloc(len);

View File

@@ -51,7 +51,7 @@ void passwd_check (const char *user, const char *passwd, unused const char *prog
if (pw_auth (passwd, user, PW_LOGIN, (char *) 0) != 0) {
SYSLOG ((LOG_WARN, "incorrect password for `%s'", user));
(void) sleep (1);
fprintf (stderr, _("Incorrect password for %s.\n"), user);
fprintf (shadow_logfd, _("Incorrect password for %s.\n"), user);
exit (EXIT_FAILURE);
}
}

View File

@@ -56,25 +56,31 @@ extern void process_root_flag (const char* short_opt, int argc, char **argv)
* Parse the command line options.
*/
int i;
const char *newroot = NULL;
const char *newroot = NULL, *val;
for (i = 0; i < argc; i++) {
val = NULL;
if ( (strcmp (argv[i], "--root") == 0)
|| ((strncmp (argv[i], "--root=", 7) == 0)
&& (val = argv[i] + 7))
|| (strcmp (argv[i], short_opt) == 0)) {
if (NULL != newroot) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: multiple --root options\n"),
Prog);
exit (E_BAD_ARG);
}
if (i + 1 == argc) {
fprintf (stderr,
if (val) {
newroot = val;
} else if (i + 1 == argc) {
fprintf (shadow_logfd,
_("%s: option '%s' requires an argument\n"),
Prog, argv[i]);
exit (E_BAD_ARG);
} else {
newroot = argv[++ i];
}
newroot = argv[i + 1];
}
}
@@ -88,34 +94,34 @@ static void change_root (const char* newroot)
/* Drop privileges */
if ( (setregid (getgid (), getgid ()) != 0)
|| (setreuid (getuid (), getuid ()) != 0)) {
fprintf (stderr, _("%s: failed to drop privileges (%s)\n"),
fprintf (shadow_logfd, _("%s: failed to drop privileges (%s)\n"),
Prog, strerror (errno));
exit (EXIT_FAILURE);
}
if ('/' != newroot[0]) {
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: invalid chroot path '%s'\n"),
Prog, newroot);
exit (E_BAD_ARG);
}
if (access (newroot, F_OK) != 0) {
fprintf(stderr,
fprintf(shadow_logfd,
_("%s: cannot access chroot directory %s: %s\n"),
Prog, newroot, strerror (errno));
exit (E_BAD_ARG);
}
if (chdir (newroot) != 0) {
fprintf(stderr,
fprintf(shadow_logfd,
_("%s: cannot chdir to chroot directory %s: %s\n"),
Prog, newroot, strerror (errno));
exit (E_BAD_ARG);
}
if (chroot (newroot) != 0) {
fprintf(stderr,
fprintf(shadow_logfd,
_("%s: unable to chroot to directory %s: %s\n"),
Prog, newroot, strerror (errno));
exit (E_BAD_ARG);

View File

@@ -11,30 +11,100 @@
#ident "$Id$"
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if HAVE_SYS_RANDOM_H
#include <sys/random.h>
#endif
#include "prototypes.h"
#include "defines.h"
#include "getdef.h"
#if (defined CRYPT_GENSALT_IMPLEMENTS_AUTO_ENTROPY && \
CRYPT_GENSALT_IMPLEMENTS_AUTO_ENTROPY)
#define USE_XCRYPT_GENSALT 1
#else
#define USE_XCRYPT_GENSALT 0
#endif
/* Add the salt prefix. */
#define MAGNUM(array,ch) (array)[0]=(array)[2]='$',(array)[1]=(ch),(array)[3]='\0'
#ifdef USE_BCRYPT
/* Use $2b$ as prefix for compatibility with OpenBSD's bcrypt. */
#define BCRYPTMAGNUM(array) (array)[0]=(array)[3]='$',(array)[1]='2',(array)[2]='b',(array)[4]='\0'
#define BCRYPT_SALT_SIZE 22
/* Default number of rounds if not explicitly specified. */
#define B_ROUNDS_DEFAULT 13
/* Minimum number of rounds. */
#define B_ROUNDS_MIN 4
/* Maximum number of rounds. */
#define B_ROUNDS_MAX 31
#endif /* USE_BCRYPT */
#ifdef USE_SHA_CRYPT
/* Fixed salt len for sha{256,512}crypt. */
#define SHA_CRYPT_SALT_SIZE 16
/* Default number of rounds if not explicitly specified. */
#define SHA_ROUNDS_DEFAULT 5000
/* Minimum number of rounds. */
#define SHA_ROUNDS_MIN 1000
/* Maximum number of rounds. */
#define SHA_ROUNDS_MAX 999999999
#endif
#ifdef USE_YESCRYPT
/*
* Default number of base64 characters used for the salt.
* 24 characters gives a 144 bits (18 bytes) salt. Unlike the more
* traditional 128 bits (16 bytes) salt, this 144 bits salt is always
* represented by the same number of base64 characters without padding
* issue, even with a non-standard base64 encoding scheme.
*/
#define YESCRYPT_SALT_SIZE 24
/* Default cost if not explicitly specified. */
#define Y_COST_DEFAULT 5
/* Minimum cost. */
#define Y_COST_MIN 1
/* Maximum cost. */
#define Y_COST_MAX 11
#endif
/* Fixed salt len for md5crypt. */
#define MD5_CRYPT_SALT_SIZE 8
/* Generate salt of size salt_size. */
#define MAX_SALT_SIZE 44
#define MIN_SALT_SIZE 8
/* Maximum size of the generated salt string. */
#define GENSALT_SETTING_SIZE 100
/* local function prototypes */
static void seedRNG (void);
static long read_random_bytes (void);
#if !USE_XCRYPT_GENSALT
static /*@observer@*/const char *gensalt (size_t salt_size);
#endif /* !USE_XCRYPT_GENSALT */
#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
static long shadow_random (long min, long max);
#endif /* USE_SHA_CRYPT || USE_BCRYPT */
#ifdef USE_SHA_CRYPT
static /*@observer@*/const char *SHA_salt_rounds (/*@null@*/int *prefered_rounds);
static /*@observer@*/const unsigned long SHA_get_salt_rounds (/*@null@*/int *prefered_rounds);
static /*@observer@*/void SHA_salt_rounds_to_buf (char *buf, unsigned long rounds);
#endif /* USE_SHA_CRYPT */
#ifdef USE_BCRYPT
static /*@observer@*/const char *gensalt_bcrypt (void);
static /*@observer@*/const char *BCRYPT_salt_rounds (/*@null@*/int *prefered_rounds);
static /*@observer@*/const unsigned long BCRYPT_get_salt_rounds (/*@null@*/int *prefered_rounds);
static /*@observer@*/void BCRYPT_salt_rounds_to_buf (char *buf, unsigned long rounds);
#endif /* USE_BCRYPT */
#ifdef USE_YESCRYPT
static /*@observer@*/const unsigned long YESCRYPT_get_salt_cost (/*@null@*/int *prefered_cost);
static /*@observer@*/void YESCRYPT_salt_cost_to_buf (char *buf, unsigned long cost);
#endif /* USE_YESCRYPT */
#ifndef HAVE_L64A
static /*@observer@*/char *l64a(long value)
#if !USE_XCRYPT_GENSALT && !defined(HAVE_L64A)
static /*@observer@*/char *l64a (long value)
{
static char buf[8];
char *s = buf;
@@ -65,40 +135,58 @@ static /*@observer@*/char *l64a(long value)
*s = '\0';
return(buf);
return buf;
}
#endif /* !HAVE_L64A */
#endif /* !USE_XCRYPT_GENSALT && !defined(HAVE_L64A) */
static void seedRNG (void)
/* Read sizeof (long) random bytes from /dev/urandom. */
static long read_random_bytes (void)
{
struct timeval tv;
static int seeded = 0;
long randval = 0;
if (0 == seeded) {
(void) gettimeofday (&tv, NULL);
srandom (tv.tv_sec ^ tv.tv_usec ^ getpid ());
seeded = 1;
#ifdef HAVE_ARC4RANDOM_BUF
/* arc4random_buf, if it exists, can never fail. */
arc4random_buf (&randval, sizeof (randval));
goto end;
#elif defined(HAVE_GETENTROPY)
/* getentropy may exist but lack kernel support. */
if (getentropy (&randval, sizeof (randval))) {
goto fail;
}
}
/*
* Add the salt prefix.
*/
#define MAGNUM(array,ch) (array)[0]=(array)[2]='$',(array)[1]=(ch),(array)[3]='\0'
#ifdef USE_BCRYPT
/*
* Using the Prefix $2a$ to enable an anti-collision safety measure in musl libc.
* Negatively affects a subset of passwords containing the '\xff' character,
* which is not valid UTF-8 (so "unlikely to cause much annoyance").
*/
#define BCRYPTMAGNUM(array) (array)[0]=(array)[3]='$',(array)[1]='2',(array)[2]='a',(array)[4]='\0'
#endif /* USE_BCRYPT */
goto end;
#elif defined(HAVE_GETRANDOM)
/* Likewise getrandom. */
if ((size_t) getrandom (&randval, sizeof (randval), 0) != sizeof (randval)) {
goto fail;
}
goto end;
#else
FILE *f = fopen ("/dev/urandom", "r");
if (fread (&randval, sizeof (randval), 1, f) != 1) {
fclose(f);
goto fail;
}
fclose(f);
goto end;
#endif
fail:
fprintf (shadow_logfd,
_("Unable to obtain random bytes.\n"));
exit (1);
end:
return randval;
}
#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
/* It is not clear what is the maximum value of random().
* We assume 2^31-1.*/
#define RANDOM_MAX 0x7FFFFFFF
/*
* Return a random number between min and max (both included).
*
@@ -108,8 +196,9 @@ static long shadow_random (long min, long max)
{
double drand;
long ret;
seedRNG ();
drand = (double) (max - min + 1) * random () / RANDOM_MAX;
drand = (double) (read_random_bytes () & RAND_MAX) / (double) RAND_MAX;
drand *= (double) (max - min + 1);
/* On systems were this is not random() range is lower, we favor
* higher numbers of salt. */
ret = (long) (max + 1 - drand);
@@ -122,26 +211,17 @@ static long shadow_random (long min, long max)
#endif /* USE_SHA_CRYPT || USE_BCRYPT */
#ifdef USE_SHA_CRYPT
/* Default number of rounds if not explicitly specified. */
#define ROUNDS_DEFAULT 5000
/* Minimum number of rounds. */
#define ROUNDS_MIN 1000
/* Maximum number of rounds. */
#define ROUNDS_MAX 999999999
/*
* Return a salt prefix specifying the rounds number for the SHA crypt methods.
*/
static /*@observer@*/const char *SHA_salt_rounds (/*@null@*/int *prefered_rounds)
/* Return the the rounds number for the SHA crypt methods. */
static /*@observer@*/const unsigned long SHA_get_salt_rounds (/*@null@*/int *prefered_rounds)
{
static char rounds_prefix[18]; /* Max size: rounds=999999999$ */
long rounds;
unsigned long rounds;
if (NULL == prefered_rounds) {
long min_rounds = getdef_long ("SHA_CRYPT_MIN_ROUNDS", -1);
long max_rounds = getdef_long ("SHA_CRYPT_MAX_ROUNDS", -1);
if ((-1 == min_rounds) && (-1 == max_rounds)) {
return "";
rounds = SHA_ROUNDS_DEFAULT;
}
if (-1 == min_rounds) {
@@ -156,137 +236,208 @@ static /*@observer@*/const char *SHA_salt_rounds (/*@null@*/int *prefered_rounds
max_rounds = min_rounds;
}
rounds = shadow_random (min_rounds, max_rounds);
rounds = (unsigned long) shadow_random (min_rounds, max_rounds);
} else if (0 == *prefered_rounds) {
return "";
rounds = SHA_ROUNDS_DEFAULT;
} else {
rounds = *prefered_rounds;
rounds = (unsigned long) *prefered_rounds;
}
/* Sanity checks. The libc should also check this, but this
* protects against a rounds_prefix overflow. */
if (rounds < ROUNDS_MIN) {
rounds = ROUNDS_MIN;
if (rounds < SHA_ROUNDS_MIN) {
rounds = SHA_ROUNDS_MIN;
}
if (rounds > ROUNDS_MAX) {
rounds = ROUNDS_MAX;
if (rounds > SHA_ROUNDS_MAX) {
rounds = SHA_ROUNDS_MAX;
}
(void) snprintf (rounds_prefix, sizeof rounds_prefix,
"rounds=%ld$", rounds);
return rounds;
}
return rounds_prefix;
/*
* Fill a salt prefix specifying the rounds number for the SHA crypt methods
* to a buffer.
*/
static /*@observer@*/void SHA_salt_rounds_to_buf (char *buf, unsigned long rounds)
{
const size_t buf_begin = strlen (buf);
/* Nothing to do here if SHA_ROUNDS_DEFAULT is used. */
if (rounds == SHA_ROUNDS_DEFAULT) {
return;
}
/*
* Check if the result buffer is long enough.
* We are going to write a maximum of 17 bytes,
* plus one byte for the terminator.
* rounds=XXXXXXXXX$
* 00000000011111111
* 12345678901234567
*/
assert (GENSALT_SETTING_SIZE > buf_begin + 17);
(void) snprintf (buf + buf_begin, 18, "rounds=%lu$", rounds);
}
#endif /* USE_SHA_CRYPT */
#ifdef USE_BCRYPT
/* Default number of rounds if not explicitly specified. */
#define B_ROUNDS_DEFAULT 13
/* Minimum number of rounds. */
#define B_ROUNDS_MIN 4
/* Maximum number of rounds. */
#define B_ROUNDS_MAX 31
/*
* Return a salt prefix specifying the rounds number for the BCRYPT method.
*/
static /*@observer@*/const char *BCRYPT_salt_rounds (/*@null@*/int *prefered_rounds)
/* Return the the rounds number for the BCRYPT method. */
static /*@observer@*/const unsigned long BCRYPT_get_salt_rounds (/*@null@*/int *prefered_rounds)
{
static char rounds_prefix[4]; /* Max size: 31$ */
long rounds;
unsigned long rounds;
if (NULL == prefered_rounds) {
long min_rounds = getdef_long ("BCRYPT_MIN_ROUNDS", -1);
long max_rounds = getdef_long ("BCRYPT_MAX_ROUNDS", -1);
if (((-1 == min_rounds) && (-1 == max_rounds)) || (0 == *prefered_rounds)) {
if ((-1 == min_rounds) && (-1 == max_rounds)) {
rounds = B_ROUNDS_DEFAULT;
}
else {
} else {
if (-1 == min_rounds) {
min_rounds = max_rounds;
}
if (-1 == max_rounds) {
max_rounds = min_rounds;
}
if (min_rounds > max_rounds) {
max_rounds = min_rounds;
}
rounds = shadow_random (min_rounds, max_rounds);
rounds = (unsigned long) shadow_random (min_rounds, max_rounds);
}
} else if (0 == *prefered_rounds) {
rounds = B_ROUNDS_DEFAULT;
} else {
rounds = *prefered_rounds;
rounds = (unsigned long) *prefered_rounds;
}
/*
* Sanity checks.
* Use 19 as an upper bound for now,
* because musl doesn't allow rounds >= 20.
*/
/* Sanity checks. */
if (rounds < B_ROUNDS_MIN) {
rounds = B_ROUNDS_MIN;
}
#if USE_XCRYPT_GENSALT
if (rounds > B_ROUNDS_MAX) {
rounds = B_ROUNDS_MAX;
}
#else /* USE_XCRYPT_GENSALT */
/*
* Use 19 as an upper bound for now,
* because musl doesn't allow rounds >= 20.
*/
if (rounds > 19) {
/* rounds = B_ROUNDS_MAX; */
rounds = 19;
}
#endif /* USE_XCRYPT_GENSALT */
(void) snprintf (rounds_prefix, sizeof rounds_prefix,
"%2.2ld$", rounds);
return rounds_prefix;
return rounds;
}
#define BCRYPT_SALT_SIZE 22
/*
* Generate a 22 character salt string for bcrypt.
* Fill a salt prefix specifying the rounds number for the BCRYPT method
* to a buffer.
*/
static /*@observer@*/const char *gensalt_bcrypt (void)
static /*@observer@*/void BCRYPT_salt_rounds_to_buf (char *buf, unsigned long rounds)
{
static char salt[32];
const size_t buf_begin = strlen (buf);
salt[0] = '\0';
/*
* Check if the result buffer is long enough.
* We are going to write three bytes,
* plus one byte for the terminator.
* XX$
* 000
* 123
*/
assert (GENSALT_SETTING_SIZE > buf_begin + 3);
seedRNG ();
strcat (salt, l64a (random()));
do {
strcat (salt, l64a (random()));
} while (strlen (salt) < BCRYPT_SALT_SIZE);
salt[BCRYPT_SALT_SIZE] = '\0';
return salt;
(void) snprintf (buf + buf_begin, 4, "%2.2lu$", rounds);
}
#endif /* USE_BCRYPT */
/*
* Generate salt of size salt_size.
*/
#define MAX_SALT_SIZE 16
#define MIN_SALT_SIZE 8
#ifdef USE_YESCRYPT
/* Return the the cost number for the YESCRYPT method. */
static /*@observer@*/const unsigned long YESCRYPT_get_salt_cost (/*@null@*/int *prefered_cost)
{
unsigned long cost;
if (NULL == prefered_cost) {
cost = getdef_num ("YESCRYPT_COST_FACTOR", Y_COST_DEFAULT);
} else if (0 == *prefered_cost) {
cost = Y_COST_DEFAULT;
} else {
cost = (unsigned long) *prefered_cost;
}
/* Sanity checks. */
if (cost < Y_COST_MIN) {
cost = Y_COST_MIN;
}
if (cost > Y_COST_MAX) {
cost = Y_COST_MAX;
}
return cost;
}
/*
* Fill a salt prefix specifying the cost for the YESCRYPT method
* to a buffer.
*/
static /*@observer@*/void YESCRYPT_salt_cost_to_buf (char *buf, unsigned long cost)
{
const size_t buf_begin = strlen (buf);
/*
* Check if the result buffer is long enough.
* We are going to write four bytes,
* plus one byte for the terminator.
* jXX$
* 0000
* 1234
*/
assert (GENSALT_SETTING_SIZE > buf_begin + 4);
buf[buf_begin + 0] = 'j';
if (cost < 3) {
buf[buf_begin + 1] = 0x36 + cost;
} else if (cost < 6) {
buf[buf_begin + 1] = 0x34 + cost;
} else {
buf[buf_begin + 1] = 0x3b + cost;
}
buf[buf_begin + 2] = cost >= 3 ? 'T' : '5';
buf[buf_begin + 3] = '$';
buf[buf_begin + 4] = '\0';
}
#endif /* USE_YESCRYPT */
#if !USE_XCRYPT_GENSALT
static /*@observer@*/const char *gensalt (size_t salt_size)
{
static char salt[32];
static char salt[MAX_SALT_SIZE + 6];
salt[0] = '\0';
memset (salt, '\0', MAX_SALT_SIZE + 6);
assert (salt_size >= MIN_SALT_SIZE &&
salt_size <= MAX_SALT_SIZE);
seedRNG ();
strcat (salt, l64a (random()));
strcat (salt, l64a (read_random_bytes ()));
do {
strcat (salt, l64a (random()));
strcat (salt, l64a (read_random_bytes ()));
} while (strlen (salt) < salt_size);
salt[salt_size] = '\0';
return salt;
}
#endif /* !USE_XCRYPT_GENSALT */
/*
* Generate 8 base64 ASCII characters of random salt. If MD5_CRYPT_ENAB
@@ -296,26 +447,23 @@ static /*@observer@*/const char *gensalt (size_t salt_size)
* Other methods can be set with ENCRYPT_METHOD
*
* The method can be forced with the meth parameter.
* If NULL, the method will be defined according to the MD5_CRYPT_ENAB and
* ENCRYPT_METHOD login.defs variables.
* If NULL, the method will be defined according to the ENCRYPT_METHOD
* variable, and if not set according to the MD5_CRYPT_ENAB variable,
* which can both be set inside the login.defs file.
*
* If meth is specified, an additional parameter can be provided.
* * For the SHA256 and SHA512 method, this specifies the number of rounds
* (if not NULL).
* * For the YESCRYPT method, this specifies the cost factor (if not NULL).
*/
/*@observer@*/const char *crypt_make_salt (/*@null@*//*@observer@*/const char *meth, /*@null@*/void *arg)
{
/* Max result size for the SHA methods:
* +3 $5$
* +17 rounds=999999999$
* +16 salt
* +1 \0
*/
static char result[40];
size_t salt_len = 8;
static char result[GENSALT_SETTING_SIZE];
size_t salt_len = MAX_SALT_SIZE;
const char *method;
unsigned long rounds = 0;
result[0] = '\0';
memset (result, '\0', GENSALT_SETTING_SIZE);
if (NULL != meth)
method = meth;
@@ -328,46 +476,80 @@ static /*@observer@*/const char *gensalt (size_t salt_size)
if (0 == strcmp (method, "MD5")) {
MAGNUM(result, '1');
salt_len = MD5_CRYPT_SALT_SIZE;
rounds = 0;
#ifdef USE_BCRYPT
} else if (0 == strcmp (method, "BCRYPT")) {
BCRYPTMAGNUM(result);
strcat(result, BCRYPT_salt_rounds((int *)arg));
salt_len = BCRYPT_SALT_SIZE;
rounds = BCRYPT_get_salt_rounds ((int *) arg);
BCRYPT_salt_rounds_to_buf (result, rounds);
#endif /* USE_BCRYPT */
#ifdef USE_YESCRYPT
} else if (0 == strcmp (method, "YESCRYPT")) {
MAGNUM(result, 'y');
salt_len = YESCRYPT_SALT_SIZE;
rounds = YESCRYPT_get_salt_cost ((int *) arg);
YESCRYPT_salt_cost_to_buf (result, rounds);
#endif /* USE_YESCRYPT */
#ifdef USE_SHA_CRYPT
} else if (0 == strcmp (method, "SHA256")) {
MAGNUM(result, '5');
strcat(result, SHA_salt_rounds((int *)arg));
salt_len = (size_t) shadow_random (8, 16);
salt_len = SHA_CRYPT_SALT_SIZE;
rounds = SHA_get_salt_rounds ((int *) arg);
SHA_salt_rounds_to_buf (result, rounds);
} else if (0 == strcmp (method, "SHA512")) {
MAGNUM(result, '6');
strcat(result, SHA_salt_rounds((int *)arg));
salt_len = (size_t) shadow_random (8, 16);
salt_len = SHA_CRYPT_SALT_SIZE;
rounds = SHA_get_salt_rounds ((int *) arg);
SHA_salt_rounds_to_buf (result, rounds);
#endif /* USE_SHA_CRYPT */
} else if (0 != strcmp (method, "DES")) {
fprintf (stderr,
fprintf (shadow_logfd,
_("Invalid ENCRYPT_METHOD value: '%s'.\n"
"Defaulting to DES.\n"),
method);
result[0] = '\0';
salt_len = MAX_SALT_SIZE;
rounds = 0;
memset (result, '\0', GENSALT_SETTING_SIZE);
}
#if USE_XCRYPT_GENSALT
/*
* Concatenate a pseudo random salt.
* Prepare DES setting for crypt_gensalt(), if result
* has not been filled with anything previously.
*/
assert (sizeof (result) > strlen (result) + salt_len);
#ifdef USE_BCRYPT
if (0 == strcmp (method, "BCRYPT")) {
strncat (result, gensalt_bcrypt (),
sizeof (result) - strlen (result) - 1);
return result;
} else {
#endif /* USE_BCRYPT */
strncat (result, gensalt (salt_len),
sizeof (result) - strlen (result) - 1);
#ifdef USE_BCRYPT
if ('\0' == result[0]) {
/* Avoid -Wunused-but-set-variable. */
salt_len = GENSALT_SETTING_SIZE - 1;
rounds = 0;
memset (result, '.', salt_len);
result[salt_len] = '\0';
}
#endif /* USE_BCRYPT */
char *retval = crypt_gensalt (result, rounds, NULL, 0);
/* Should not happen, but... */
if (NULL == retval) {
fprintf (shadow_logfd,
_("Unable to generate a salt from setting "
"\"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding "
"configuration for your selected hash "
"method.\n"), result);
exit (1);
}
return retval;
#else /* USE_XCRYPT_GENSALT */
/* Check if the result buffer is long enough. */
assert (GENSALT_SETTING_SIZE > strlen (result) + salt_len);
/* Concatenate a pseudo random salt. */
strncat (result, gensalt (salt_len),
GENSALT_SETTING_SIZE - strlen (result) - 1);
return result;
#endif /* USE_XCRYPT_GENSALT */
}

View File

@@ -219,7 +219,7 @@ void setup_env (struct passwd *info)
static char temp_pw_dir[] = "/";
if (!getdef_bool ("DEFAULT_HOME") || chdir ("/") == -1) {
fprintf (stderr, _("Unable to cd to '%s'\n"),
fprintf (shadow_logfd, _("Unable to cd to '%s'\n"),
info->pw_dir);
SYSLOG ((LOG_WARN,
"unable to cd to `%s' for user `%s'\n",

View File

@@ -96,7 +96,7 @@ static int user_busy_utmp (const char *name)
continue;
}
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: user %s is currently logged in\n"),
Prog, name);
return 1;
@@ -249,7 +249,7 @@ static int user_busy_processes (const char *name, uid_t uid)
#ifdef ENABLE_SUBIDS
sub_uid_close();
#endif
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: user %s is currently used by process %d\n"),
Prog, name, pid);
return 1;
@@ -269,10 +269,11 @@ static int user_busy_processes (const char *name, uid_t uid)
}
if (check_status (name, task_path+6, uid) != 0) {
(void) closedir (proc);
(void) closedir (task_dir);
#ifdef ENABLE_SUBIDS
sub_uid_close();
#endif
fprintf (stderr,
fprintf (shadow_logfd,
_("%s: user %s is currently used by process %d\n"),
Prog, name, pid);
return 1;

View File

@@ -257,25 +257,25 @@ static void updwtmpx (const char *filename, const struct utmpx *utx)
utent->ut_type = USER_PROCESS;
#endif /* HAVE_STRUCT_UTMP_UT_TYPE */
utent->ut_pid = getpid ();
strncpy (utent->ut_line, line, sizeof (utent->ut_line));
strncpy (utent->ut_line, line, sizeof (utent->ut_line) - 1);
#ifdef HAVE_STRUCT_UTMP_UT_ID
if (NULL != ut) {
strncpy (utent->ut_id, ut->ut_id, sizeof (utent->ut_id));
} else {
/* XXX - assumes /dev/tty?? */
strncpy (utent->ut_id, line + 3, sizeof (utent->ut_id));
strncpy (utent->ut_id, line + 3, sizeof (utent->ut_id) - 1);
}
#endif /* HAVE_STRUCT_UTMP_UT_ID */
#ifdef HAVE_STRUCT_UTMP_UT_NAME
strncpy (utent->ut_name, name, sizeof (utent->ut_name));
#endif /* HAVE_STRUCT_UTMP_UT_NAME */
#ifdef HAVE_STRUCT_UTMP_UT_USER
strncpy (utent->ut_user, name, sizeof (utent->ut_user));
strncpy (utent->ut_user, name, sizeof (utent->ut_user) - 1);
#endif /* HAVE_STRUCT_UTMP_UT_USER */
if (NULL != hostname) {
struct addrinfo *info = NULL;
#ifdef HAVE_STRUCT_UTMP_UT_HOST
strncpy (utent->ut_host, hostname, sizeof (utent->ut_host));
strncpy (utent->ut_host, hostname, sizeof (utent->ut_host) - 1);
#endif /* HAVE_STRUCT_UTMP_UT_HOST */
#ifdef HAVE_STRUCT_UTMP_UT_SYSLEN
utent->ut_syslen = MIN (strlen (hostname),

View File

@@ -74,7 +74,7 @@
result = malloc(sizeof(LOOKUP_TYPE));
if (NULL == result) {
fprintf (stderr, _("%s: out of memory\n"),
fprintf (shadow_logfd, _("%s: out of memory\n"),
"x" STRINGIZE(FUNCTION_NAME));
exit (13);
}
@@ -84,7 +84,7 @@
LOOKUP_TYPE *resbuf = NULL;
buffer = (char *)realloc (buffer, length);
if (NULL == buffer) {
fprintf (stderr, _("%s: out of memory\n"),
fprintf (shadow_logfd, _("%s: out of memory\n"),
"x" STRINGIZE(FUNCTION_NAME));
exit (13);
}
@@ -132,7 +132,7 @@
if (result) {
result = DUP_FUNCTION(result);
if (NULL == result) {
fprintf (stderr, _("%s: out of memory\n"),
fprintf (shadow_logfd, _("%s: out of memory\n"),
"x" STRINGIZE(FUNCTION_NAME));
exit (13);
}

View File

@@ -54,7 +54,7 @@
ptr = (char *) malloc (size);
if (NULL == ptr) {
(void) fprintf (stderr,
(void) fprintf (shadow_logfd,
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
exit (13);
@@ -66,3 +66,10 @@
{
return strcpy (xmalloc (strlen (str) + 1), str);
}
void xfree(void *ap)
{
if (ap) {
free(ap);
}
}

29
libsubid/Makefile.am Normal file
View File

@@ -0,0 +1,29 @@
lib_LTLIBRARIES = libsubid.la
libsubid_la_LDFLAGS = -Wl,-soname,libsubid.so.@LIBSUBID_ABI@ \
-shared -version-info @LIBSUBID_ABI_MAJOR@
libsubid_la_SOURCES = api.c
pkginclude_HEADERS = subid.h
MISCLIBS = \
$(LIBAUDIT) \
$(LIBSELINUX) \
$(LIBSEMANAGE) \
$(LIBCRYPT_NOPAM) \
$(LIBSKEY) \
$(LIBMD) \
$(LIBECONF) \
$(LIBCRYPT) \
$(LIBACL) \
$(LIBATTR) \
$(LIBTCB)
libsubid_la_LIBADD = \
$(top_srcdir)/lib/libshadow.la \
$(top_srcdir)/libmisc/libmisc.la \
$(MISCLIBS) -ldl
AM_CPPFLAGS = \
-I${top_srcdir}/lib \
-I${top_srcdir}/libmisc \
-DLOCALEDIR=\"$(datadir)/locale\"

130
libsubid/api.c Normal file
View File

@@ -0,0 +1,130 @@
/*
* Copyright (c) 2020 Serge Hallyn
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the copyright holders or contributors may not be used to
* endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <config.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <pwd.h>
#include <stdbool.h>
#include "subordinateio.h"
#include "idmapping.h"
#include "subid.h"
const char *Prog = "(libsubid)";
FILE *shadow_logfd;
bool libsubid_init(const char *progname, FILE * logfd)
{
if (progname) {
progname = strdup(progname);
if (progname)
Prog = progname;
else
return false;
}
if (logfd) {
shadow_logfd = logfd;
return true;
}
shadow_logfd = fopen("/dev/null", "w");
if (!shadow_logfd) {
shadow_logfd = stderr;
return false;
}
return true;
}
static
int get_subid_ranges(const char *owner, enum subid_type id_type, struct subid_range **ranges)
{
return list_owner_ranges(owner, id_type, ranges);
}
int get_subuid_ranges(const char *owner, struct subid_range **ranges)
{
return get_subid_ranges(owner, ID_TYPE_UID, ranges);
}
int get_subgid_ranges(const char *owner, struct subid_range **ranges)
{
return get_subid_ranges(owner, ID_TYPE_GID, ranges);
}
static
int get_subid_owner(unsigned long id, enum subid_type id_type, uid_t **owner)
{
return find_subid_owners(id, id_type, owner);
}
int get_subuid_owners(uid_t uid, uid_t **owner)
{
return get_subid_owner((unsigned long)uid, ID_TYPE_UID, owner);
}
int get_subgid_owners(gid_t gid, uid_t **owner)
{
return get_subid_owner((unsigned long)gid, ID_TYPE_GID, owner);
}
static
bool grant_subid_range(struct subordinate_range *range, bool reuse,
enum subid_type id_type)
{
return new_subid_range(range, id_type, reuse);
}
bool grant_subuid_range(struct subordinate_range *range, bool reuse)
{
return grant_subid_range(range, reuse, ID_TYPE_UID);
}
bool grant_subgid_range(struct subordinate_range *range, bool reuse)
{
return grant_subid_range(range, reuse, ID_TYPE_GID);
}
static
bool ungrant_subid_range(struct subordinate_range *range, enum subid_type id_type)
{
return release_subid_range(range, id_type);
}
bool ungrant_subuid_range(struct subordinate_range *range)
{
return ungrant_subid_range(range, ID_TYPE_UID);
}
bool ungrant_subgid_range(struct subordinate_range *range)
{
return ungrant_subid_range(range, ID_TYPE_GID);
}

151
libsubid/subid.h Normal file
View File

@@ -0,0 +1,151 @@
#include <sys/types.h>
#include <stdio.h>
#include <stdbool.h>
#ifndef SUBID_RANGE_DEFINED
#define SUBID_RANGE_DEFINED 1
/* subid_range is just a starting point and size of a range */
struct subid_range {
unsigned long start;
unsigned long count;
};
/* subordinage_range is a subid_range plus an owner, representing
* a range in /etc/subuid or /etc/subgid */
struct subordinate_range {
const char *owner;
unsigned long start;
unsigned long count;
};
enum subid_type {
ID_TYPE_UID = 1,
ID_TYPE_GID = 2
};
enum subid_status {
SUBID_STATUS_SUCCESS = 0,
SUBID_STATUS_UNKNOWN_USER = 1,
SUBID_STATUS_ERROR_CONN = 2,
SUBID_STATUS_ERROR = 3,
};
/*
* libsubid_init: initialize libsubid
*
* @progname: Name to display as program. If NULL, then "(libsubid)" will be
* shown in error messages.
* @logfd: Open file pointer to pass error messages to. If NULL, then
* /dev/null will be opened and messages will be sent there. The
* default if libsubid_init() is not called is stderr (2).
*
* This function does not need to be called. If not called, then the defaults
* will be used.
*
* Returns false if an error occurred.
*/
bool libsubid_init(const char *progname, FILE *logfd);
/*
* get_subuid_ranges: return a list of UID ranges for a user
*
* @owner: username being queried
* @ranges: a pointer to an array of subid_range structs in which the result
* will be returned.
*
* The caller must free(ranges) when done.
*
* returns: number of ranges found, ir < 0 on error.
*/
int get_subuid_ranges(const char *owner, struct subid_range **ranges);
/*
* get_subgid_ranges: return a list of GID ranges for a user
*
* @owner: username being queried
* @ranges: a pointer to an array of subid_range structs in which the result
* will be returned.
*
* The caller must free(ranges) when done.
*
* returns: number of ranges found, ir < 0 on error.
*/
int get_subgid_ranges(const char *owner, struct subid_range **ranges);
/*
* get_subuid_owners: return a list of uids to which the given uid has been
* delegated.
*
* @uid: The subuid being queried
* @owners: a pointer to an array of uids into which the results are placed.
* The returned array must be freed by the caller.
*
* Returns the number of uids returned, or < 0 on error.
*/
int get_subuid_owners(uid_t uid, uid_t **owner);
/*
* get_subgid_owners: return a list of uids to which the given gid has been
* delegated.
*
* @uid: The subgid being queried
* @owners: a pointer to an array of uids into which the results are placed.
* The returned array must be freed by the caller.
*
* Returns the number of uids returned, or < 0 on error.
*/
int get_subgid_owners(gid_t gid, uid_t **owner);
/*
* grant_subuid_range: assign a subuid range to a user
*
* @range: pointer to a struct subordinate_range detailing the UID range
* to allocate. ->owner must be the username, and ->count must be
* filled in. ->start is ignored, and will contain the start
* of the newly allocated range, upon success.
*
* Returns true if the delegation succeeded, false otherwise. If true,
* then the range from (range->start, range->start + range->count) will
* be delegated to range->owner.
*/
bool grant_subuid_range(struct subordinate_range *range, bool reuse);
/*
* grant_subsid_range: assign a subgid range to a user
*
* @range: pointer to a struct subordinate_range detailing the GID range
* to allocate. ->owner must be the username, and ->count must be
* filled in. ->start is ignored, and will contain the start
* of the newly allocated range, upon success.
*
* Returns true if the delegation succeeded, false otherwise. If true,
* then the range from (range->start, range->start + range->count) will
* be delegated to range->owner.
*/
bool grant_subgid_range(struct subordinate_range *range, bool reuse);
/*
* ungrant_subuid_range: remove a subuid allocation.
*
* @range: pointer to a struct subordinate_range detailing the UID allocation
* to remove.
*
* Returns true if successful, false if it failed, for instance if the
* delegation did not exist.
*/
bool ungrant_subuid_range(struct subordinate_range *range);
/*
* ungrant_subuid_range: remove a subgid allocation.
*
* @range: pointer to a struct subordinate_range detailing the GID allocation
* to remove.
*
* Returns true if successful, false if it failed, for instance if the
* delegation did not exist.
*/
bool ungrant_subgid_range(struct subordinate_range *range);
#define SUBID_NFIELDS 3
#endif

View File

@@ -136,6 +136,8 @@ login_defs_v = \
FAKE_SHELL.xml \
FTMP_FILE.xml \
GID_MAX.xml \
HMAC_CRYPTO_ALGO.xml \
HOME_MODE.xml \
HUSHLOGIN_FILE.xml \
ISSUE_FILE.xml \
KILLCHAR.xml \
@@ -152,6 +154,7 @@ login_defs_v = \
MD5_CRYPT_ENAB.xml \
MOTD_FILE.xml \
NOLOGINS_FILE.xml \
NONEXISTENT.xml \
OBSCURE_CHECKS_ENAB.xml \
PASS_ALWAYS_WARN.xml \
PASS_CHANGE_TRIES.xml \

View File

@@ -102,6 +102,9 @@
Set the number of days since January 1st, 1970 when the password
was last changed. The date may also be expressed in the format
YYYY-MM-DD (or the format more commonly used in your area).
If the <replaceable>LAST_DAY</replaceable> is set to
<emphasis>0</emphasis> the user is forced to change his password
on the next log on.
</para>
</listitem>
</varlistentry>
@@ -118,6 +121,13 @@
contact the system administrator before being able to use the
system again.
</para>
<para>
For example the following can be used to set an account to expire
in 180 days:
</para>
<programlisting>
chage -E $(date -d +180days +%Y-%m-%d)
</programlisting>
<para>
Passing the number <emphasis remap='I'>-1</emphasis> as the
<replaceable>EXPIRE_DATE</replaceable> will remove an account
@@ -239,6 +249,18 @@
The <command>chage</command> program requires a shadow password file to
be available.
</para>
<para>
The chage program will report only the information from the shadow
password file. This implies that configuration from other sources
(e.g. LDAP or empty password hash field from the passwd file) that
affect the user's login will not be shown in the chage output.
</para>
<para>
The <command>chage</command> program will also not report any
inconsistency between the shadow and passwd files (e.g. missing x in
the passwd file). The <command>pwck</command> can be used to check
for this kind of inconsistencies.
</para>
<para>The <command>chage</command> command is restricted to the root
user, except for the <option>-l</option> option, which may be used by
an unprivileged user to determine when their password or account is due

View File

@@ -229,6 +229,22 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-U</option>, <option>--users</option>
</term>
<listitem>
<para>
A list of usernames to add as members of the group.
</para>
<para>
The default behavior (if the <option>-g</option>,
<option>-N</option>, and <option>-U</option> options are not
specified) is defined by the <option>USERGROUPS_ENAB</option>
variable in <filename>/etc/login.defs</filename>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
@@ -318,13 +334,13 @@
<varlistentry>
<term><replaceable>4</replaceable></term>
<listitem>
<para>GID not unique (when <option>-o</option> not used)</para>
<para>GID is already used (when called without <option>-o</option>)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>9</replaceable></term>
<listitem>
<para>group name not unique</para>
<para>group name is already used</para>
</listitem>
</varlistentry>
<varlistentry>

View File

@@ -91,6 +91,17 @@
are:
</para>
<variablelist remap='IP'>
<varlistentry>
<term>
<option>-f</option>, <option>--force</option>
</term>
<listitem>
<para>
This option forces the removal of the group, even if there's some user
having the group as the primary one.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-h</option>, <option>--help</option></term>
<listitem>

View File

@@ -93,6 +93,15 @@
</para>
<variablelist remap='IP'>
<varlistentry>
<term>
<option>-a</option>, <option>--append</option>&nbsp;<replaceable>GID</replaceable>
</term>
<listitem>
<para>If group members are specified with -U, append them to the existing
member list, rather than replacing it.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-g</option>, <option>--gid</option>&nbsp;<replaceable>GID</replaceable>
</term>
@@ -203,6 +212,22 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-U</option>, <option>--users</option>
</term>
<listitem>
<para>
A list of usernames to add as members of the group.
</para>
<para>
The default behavior (if the <option>-g</option>,
<option>-N</option>, and <option>-U</option> options are not
specified) is defined by the <option>USERGROUPS_ENAB</option>
variable in <filename>/etc/login.defs</filename>.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
@@ -274,7 +299,7 @@
<varlistentry>
<term><replaceable>4</replaceable></term>
<listitem>
<para>E_GID_IN_USE: specified group doesn't exist</para>
<para>E_GID_IN_USE: group id already in use</para>
</listitem>
</varlistentry>
<varlistentry>

View File

@@ -34,7 +34,6 @@
<!-- SHADOW-CONFIG-HERE -->
]>
<refentry id='grpck.8'>
<!-- $Id$ -->
<refentryinfo>
<author>
<firstname>Julianne Frances</firstname>
@@ -192,6 +191,17 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-S</option>, <option>--silence-warnings</option></term>
<listitem>
<para>
Suppress more controversial warnings, in particular warnings about
inconsistency between group members listed in
<filename>/etc/group</filename> and
<filename>/etc/ghadow</filename>.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
By default, <command>grpck</command> operates on

View File

@@ -233,5 +233,12 @@
is no entries for users with UID between 170 and 800 lastlog will appear
to hang as it processes entries with UIDs 171-799).
</para>
<para>
Having high UIDs can create problems when handling the <term><filename>
/var/log/lastlog</filename></term> with external tools. Although the
actual file is sparse and does not use too much space, certain
applications are not designed to identify sparse files by default and may
require a specific option to handle them.
</para>
</refsect1>
</refentry>

View File

@@ -50,6 +50,7 @@
<!ENTITY FAKE_SHELL SYSTEM "login.defs.d/FAKE_SHELL.xml">
<!ENTITY FTMP_FILE SYSTEM "login.defs.d/FTMP_FILE.xml">
<!ENTITY GID_MAX SYSTEM "login.defs.d/GID_MAX.xml">
<!ENTITY HMAC_CRYPTO_ALGO SYSTEM "login.defs.d/HMAC_CRYPTO_ALGO.xml">
<!ENTITY HOME_MODE SYSTEM "login.defs.d/HOME_MODE.xml">
<!ENTITY HUSHLOGIN_FILE SYSTEM "login.defs.d/HUSHLOGIN_FILE.xml">
<!ENTITY ISSUE_FILE SYSTEM "login.defs.d/ISSUE_FILE.xml">
@@ -67,6 +68,7 @@
<!ENTITY MD5_CRYPT_ENAB SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
<!ENTITY MOTD_FILE SYSTEM "login.defs.d/MOTD_FILE.xml">
<!ENTITY NOLOGINS_FILE SYSTEM "login.defs.d/NOLOGINS_FILE.xml">
<!ENTITY NONEXISTENT SYSTEM "login.defs.d/NONEXISTENT.xml">
<!ENTITY OBSCURE_CHECKS_ENAB SYSTEM "login.defs.d/OBSCURE_CHECKS_ENAB.xml">
<!ENTITY PASS_ALWAYS_WARN SYSTEM "login.defs.d/PASS_ALWAYS_WARN.xml">
<!ENTITY PASS_CHANGE_TRIES SYSTEM "login.defs.d/PASS_CHANGE_TRIES.xml">
@@ -186,6 +188,7 @@
&FAKE_SHELL;
&FTMP_FILE;
&GID_MAX; <!-- documents also GID_MIN -->
&HMAC_CRYPTO_ALGO;
&HOME_MODE;
&HUSHLOGIN_FILE;
&ISSUE_FILE;
@@ -203,6 +206,7 @@
&MD5_CRYPT_ENAB;
&MOTD_FILE;
&NOLOGINS_FILE;
&NONEXISTENT;
&OBSCURE_CHECKS_ENAB;
&PASS_ALWAYS_WARN;
&PASS_CHANGE_TRIES;

View File

@@ -39,6 +39,9 @@
<replaceable>MD5</replaceable><phrase condition="sha_crypt">,
<replaceable>SHA256</replaceable>,
<replaceable>SHA512</replaceable></phrase>.
MD5 and DES should not be used for new hashes, see
<refentrytitle>crypt</refentrytitle><manvolnum>5</manvolnum>
for recommendations.
</para>
<para>
Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option>

View File

@@ -0,0 +1,44 @@
<!--
Copyright (c) 1991 - 1993, Julianne Frances Haugh
Copyright (c) 1991 - 1993, Chip Rosenthal
Copyright (c) 2007 - 2008, Nicolas François
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the copyright holders or contributors may not be used to
endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<varlistentry condition="no_pam">
<term><option>HMAC_CRYPTO_ALGO</option> (string)</term>
<listitem>
<para>
Used to select the HMAC cryptography algorithm that the pam_timestamp
module is going to use to calculate the keyed-hash message authentication
code.
</para>
<para>
Note: Check <refentrytitle>hmac</refentrytitle><manvolnum>3</manvolnum>
to see the possible algorithms that are available in your system.
</para>
</listitem>
</varlistentry>

View File

@@ -0,0 +1,41 @@
<!--
Copyright (c) 1991 - 1993, Julianne Frances Haugh
Copyright (c) 1991 - 1993, Chip Rosenthal
Copyright (c) 2007 - 2009, Nicolas François
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the copyright holders or contributors may not be used to
endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<varlistentry>
<term><option>NONEXISTENT</option> (string)</term>
<listitem>
<para>
If a system account intentionally does not have a home directory
that exists, this string can be provided in the /etc/passwd
entry for the account to indicate this. The result is that pwck
will not emit a spurious warning for this account.
</para>
</listitem>
</varlistentry>

View File

@@ -34,7 +34,7 @@
<para>
The minimum number of days allowed between password changes. Any
password changes attempted sooner than this will be rejected. If not
specified, -1 will be assumed (which disables the restriction).
specified, 0 will be assumed (which disables the restriction).
</para>
</listitem>
</varlistentry>

View File

@@ -44,7 +44,7 @@
</para>
<para>
If not specified, the libc will choose the default number of rounds
(5000).
(5000), which is orders of magnitude too low for modern hardware.
</para>
<para>
The values must be inside the 1000-999,999,999 range.

View File

@@ -87,9 +87,15 @@
<refsect1 id='description'>
<title>DESCRIPTION</title>
<para>
The <command>newgidmap</command> sets <filename>/proc/[pid]/gid_map</filename> based on its
command line arguments and the gids allowed in <filename>/etc/subgid</filename>.
Note that the root user is not exempted from the requirement for a valid
The <command>newgidmap</command> sets <filename>/proc/[pid]/gid_map</filename>
based on its command line arguments and the gids allowed. Subgid
delegation can either be managed via <filename>/etc/subgid</filename>
or through the configured NSS subid module. These options are mutually
exclusive.
</para>
<para>
Note that the root group is not exempted from the requirement for a valid
<filename>/etc/subgid</filename> entry.
</para>
@@ -127,7 +133,7 @@
<command>newgidmap</command> verifies that the caller is the owner
of the process indicated by <option>pid</option> and that for each
of the above sets, each of the GIDs in the range [lowergid,
lowergid+count] is allowed to the caller according to
lowergid+count) is allowed to the caller according to
<filename>/etc/subgid</filename> before setting
<filename>/proc/[pid]/gid_map</filename>.
</para>

View File

@@ -87,8 +87,14 @@
<refsect1 id='description'>
<title>DESCRIPTION</title>
<para>
The <command>newuidmap</command> sets <filename>/proc/[pid]/uid_map</filename> based on its
command line arguments and the uids allowed in <filename>/etc/subuid</filename>.
The <command>newuidmap</command> sets <filename>/proc/[pid]/uid_map</filename>
based on its command line arguments and the uids allowed. Subuid
delegation can either be managed via <filename>/etc/subuid</filename> or
through the configured NSS subid module. These options are mutually
exclusive.
</para>
<para>
Note that the root user is not exempted from the requirement for a valid
<filename>/etc/subuid</filename> entry.
</para>
@@ -127,7 +133,7 @@
<command>newuidmap</command> verifies that the caller is the owner
of the process indicated by <option>pid</option> and that for each
of the above sets, each of the UIDs in the range [loweruid,
loweruid+count] is allowed to the caller according to
loweruid+count) is allowed to the caller according to
<filename>/etc/subuid</filename> before setting
<filename>/proc/[pid]/uid_map</filename>.
</para>

View File

@@ -219,7 +219,15 @@
<para>
If this field does not specify an existing directory, the
specified directory is created, with ownership set to the
user being created or updated and its primary group.
user being created or updated and its primary group. Note
that <emphasis>newusers does not create parent directories
</emphasis> of the new user's home directory. The newusers
command will fail to create the home directory if the parent
directories do not exist, and will send a message to stderr
informing the user of the failure. The newusers command will
not halt or return a failure to the calling shell if it fails
to create the home directory, it will continue to process the
batch of new users specified.
</para>
<para>
If the home directory of an existing user is changed,

View File

@@ -136,9 +136,12 @@
(but the user may log in the system by other means).
</para>
<para>
The comment field is used by various system utilities, such as
The comment field, also known as the gecos field, is used by
various system utilities, such as
<citerefentry><refentrytitle>finger</refentrytitle>
<manvolnum>1</manvolnum></citerefentry>.
<manvolnum>1</manvolnum></citerefentry>. The use of an ampersand
here will be replaced by the capitalised login name when the field
is used or displayed by such system utilities.
</para>
<para>

View File

@@ -1005,10 +1005,10 @@ msgstr ""
#: usermod.8.xml:327(para) chsh.1.xml:123(para)
msgid ""
"The name of the user's new login shell. Setting this field to blank causes "
"The path of the user's new login shell. Setting this field to blank causes "
"the system to select the default login shell."
msgstr ""
"Der Name der neuen Anmelde-Shell des Benutzers. Falls dieses Feld leer "
"Der Pfad der neuen Anmelde-Shell des Benutzers. Falls dieses Feld leer "
"gelassen wird, verwendet das System die Standard-Anmelde-Shell."
#: usermod.8.xml:334(term) useradd.8.xml:471(term)

View File

@@ -334,7 +334,7 @@ msgstr "<option>-h</option>, <option>--help</option>"
#: expiry.1.xml:114(para) chsh.1.xml:103(para) chpasswd.8.xml:173(para)
#: chgpasswd.8.xml:133(para) chfn.1.xml:169(para) chage.1.xml:131(para)
msgid "Display help message and exit."
msgstr "现实帮助信息并退出。"
msgstr "显示帮助信息并退出。"
#: vipw.8.xml:126(term)
msgid "<option>-p</option>, <option>--passwd</option>"
@@ -1166,7 +1166,7 @@ msgstr ""
#: usermod.8.xml:464(para)
msgid "The new SELinux user for the user's login."
msgstr "用户登的 SELinux 用户。"
msgstr "用户登的 SELinux 用户。"
#: usermod.8.xml:467(para)
msgid ""
@@ -2040,9 +2040,9 @@ msgid ""
"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
"created if it is missing."
msgstr ""
"将创建新用户,并使用 <replaceable>HOME_DIR</replaceable> 作为用户登目录的"
"将创建新用户,并使用 <replaceable>HOME_DIR</replaceable> 作为用户登目录的"
"值。默认值是将 <replaceable>LOGIN</replaceable> 名附加到 "
"<replaceable>BASE_DIR</replaceable> 后面,并使用这作为登目录。目录不一定必"
"<replaceable>BASE_DIR</replaceable> 后面,并使用这作为登目录。目录不一定必"
"须已经存在 <replaceable>HOME_DIR</replaceable>,但是会在需要时创建。"
#: useradd.8.xml:178(term)
@@ -2086,7 +2086,7 @@ msgid ""
"The group name or number of the user's initial login group. The group name "
"must exist. A group number must refer to an already existing group."
msgstr ""
"用户初始登组的组名或号码。组名必须已经存在。组号码必须指代已经存在的组。"
"用户初始登组的组名或号码。组名必须已经存在。组号码必须指代已经存在的组。"
#: useradd.8.xml:233(para)
msgid ""
@@ -2385,7 +2385,7 @@ msgid ""
"The SELinux user for the user's login. The default is to leave this field "
"blank, which causes the system to select the default SELinux user."
msgstr ""
"用户登的 SELinux 用户。默认为留空,这会造成系统选择默认的 SELinux 用户。"
"用户登的 SELinux 用户。默认为留空,这会造成系统选择默认的 SELinux 用户。"
#: useradd.8.xml:520(title)
msgid "Changing the default values"
@@ -3616,7 +3616,7 @@ msgstr "<option>MAIL_CHECK_ENAB</option> (boolean)"
#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
msgid "Enable checking and display of mailbox status upon login."
msgstr "启用登录时检查和现实邮箱状态。"
msgstr "启用登录时检查和显示邮箱状态。"
#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
msgid ""
@@ -6254,7 +6254,7 @@ msgstr "<option>ISSUE_FILE</option> (string)"
#: login.defs.5.xml:34(para) login.1.xml:34(para)
msgid "If defined, this file will be displayed before each login prompt."
msgstr "如果定义了,此文件将在每次的登录提示之前现实。"
msgstr "如果定义了,此文件将在每次的登录提示之前显示。"
#: login.defs.5.xml:32(term) login.1.xml:32(term)
msgid "<option>KILLCHAR</option> (number)"
@@ -6980,7 +6980,7 @@ msgstr "$HOME/.hushlogin"
#: login.1.xml:385(para)
msgid "Suppress printing of system messages."
msgstr "阻止现实系统信息。"
msgstr "阻止显示系统信息。"
#: login.1.xml:399(para)
msgid ""
@@ -7313,7 +7313,7 @@ msgstr ""
msgid ""
"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
"emphasis>."
msgstr "只现实新于 <emphasis remap=\"I\">DAYS</emphasis> 的最近登录记录。"
msgstr "只显示新于 <emphasis remap=\"I\">DAYS</emphasis> 的最近登录记录。"
#: lastlog.8.xml:160(term) faillog.8.xml:202(term)
msgid ""
@@ -7325,7 +7325,7 @@ msgstr ""
#: lastlog.8.xml:164(para)
msgid "Print the lastlog record of the specified user(s)."
msgstr "现实指定用户的最近登录记录。"
msgstr "显示指定用户的最近登录记录。"
#: lastlog.8.xml:167(para) faillog.8.xml:211(para)
msgid ""
@@ -7650,7 +7650,7 @@ msgstr "groups"
#: groups.1.xml:65(refpurpose)
msgid "display current group names"
msgstr "现实当前组名"
msgstr "显示当前组名"
#: groups.1.xml:72(replaceable)
msgid "user"
@@ -9186,7 +9186,7 @@ msgstr ""
#: chage.1.xml:158(para)
msgid "Show account aging information."
msgstr "现实账户年龄信息。"
msgstr "显示账户年龄信息。"
#: chage.1.xml:164(term)
msgid ""

View File

@@ -30,6 +30,7 @@
-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY NONEXISTENT SYSTEM "login.defs.d/NONEXISTENT.xml">
<!ENTITY PASS_MAX_DAYS SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
<!ENTITY PASS_MIN_DAYS SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
<!ENTITY PASS_WARN_AGE SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
@@ -266,6 +267,7 @@
tool:
</para>
<variablelist>
&NONEXISTENT;
&PASS_MAX_DAYS;
&PASS_MIN_DAYS;
&PASS_WARN_AGE;

View File

@@ -129,7 +129,7 @@
<listitem>
<para>
The date of the last password change, expressed as the number
of days since Jan 1, 1970.
of days since Jan 1, 1970 00:00 UTC.
</para>
<para>
The value 0 has a special meaning, which is that the user
@@ -151,7 +151,7 @@
again.
</para>
<para>
An empty field and value 0 mean that there are no minimum
An empty field and value 0 mean that there is no minimum
password age.
</para>
</listitem>
@@ -208,8 +208,8 @@
</para>
<para>
After expiration of the password and this expiration period is
elapsed, no login is possible using the current user's
password. The user should contact her administrator.
elapsed, no login is possible for the user. The user should contact
her administrator.
</para>
<para>
An empty field means that there are no enforcement of an
@@ -224,7 +224,7 @@
<listitem>
<para>
The date of expiration of the account, expressed as the number
of days since Jan 1, 1970.
of days since Jan 1, 1970 00:00 UTC.
</para>
<para>
Note that an account expiration differs from a password

View File

@@ -38,6 +38,11 @@
<surname>Biederman</surname>
<contrib>Creation, 2013</contrib>
</author>
<author>
<firstname>Iker</firstname>
<surname>Pedrosa</surname>
<contrib>Developer, 2021</contrib>
</author>
</refentryinfo>
<refmeta>
<refentrytitle>subgid</refentrytitle>
@@ -48,11 +53,36 @@
</refmeta>
<refnamediv id='name'>
<refname>subgid</refname>
<refpurpose>the subordinate gid file</refpurpose>
<refpurpose>the configuration for subordinate group ids</refpurpose>
</refnamediv>
<refsect1 id='description'>
<title>DESCRIPTION</title>
<para>
Subgid authorizes a group id to map ranges of group ids from its namespace
into child namespaces.
</para>
<para>
The delegation of the subordinate gids can be configured via the
<replaceable>subid</replaceable> field in
<filename>/etc/nsswitch.conf</filename> file. Only one value can be set
as the delegation source. Setting this field to
<replaceable>files</replaceable> configures the delegation of gids to
<filename>/etc/subgid</filename>. Setting any other value treats
the delegation as a plugin following with a name of the form
<replaceable>libsubid_$value.so</replaceable>. If the value or plugin is
missing, then the subordinate gid delegation falls back to
<replaceable>files</replaceable>.
</para>
<para>
Note, that <command>groupadd</command> will only create entries in
<filename>/etc/subgid</filename> if subid delegation is managed via subid
files.
</para>
</refsect1>
<refsect1 id='local-subordinate-delegation'>
<title>LOCAL SUBORDINATE DELEGATION</title>
<para>
Each line in <filename>/etc/subgid</filename> contains
a user name and a range of subordinate group ids that user

View File

@@ -38,6 +38,11 @@
<surname>Biederman</surname>
<contrib>Creation, 2013</contrib>
</author>
<author>
<firstname>Iker</firstname>
<surname>Pedrosa</surname>
<contrib>Developer, 2021</contrib>
</author>
</refentryinfo>
<refmeta>
<refentrytitle>subuid</refentrytitle>
@@ -48,11 +53,36 @@
</refmeta>
<refnamediv id='name'>
<refname>subuid</refname>
<refpurpose>the subordinate uid file</refpurpose>
<refpurpose>the configuration for subordinate user ids</refpurpose>
</refnamediv>
<refsect1 id='description'>
<title>DESCRIPTION</title>
<para>
Subuid authorizes a user id to map ranges of user ids from its namespace
into child namespaces.
</para>
<para>
The delegation of the subordinate uids can be configured via the
<replaceable>subid</replaceable> field in
<filename>/etc/nsswitch.conf</filename> file. Only one value can be set
as the delegation source. Setting this field to
<replaceable>files</replaceable> configures the delegation of uids to
<filename>/etc/subuid</filename>. Setting any other value treats
the delegation as a plugin following with a name of the form
<replaceable>libsubid_$value.so</replaceable>. If the value or plugin is
missing, then the subordinate uid delegation falls back to
<replaceable>files</replaceable>.
</para>
<para>
Note, that <command>useradd</command> will only create entries in
<filename>/etc/subuid</filename> if subid delegation is managed via subid
files.
</para>
</refsect1>
<refsect1 id='local-subordinate-delegation'>
<title>LOCAL SUBORDINATE DELEGATION</title>
<para>
Each line in <filename>/etc/subuid</filename> contains
a user name and a range of subordinate user ids that user

View File

@@ -181,8 +181,10 @@
login directory. The default is to append the
<replaceable>LOGIN</replaceable> name to
<replaceable>BASE_DIR</replaceable> and use that as the login
directory name. The directory <replaceable>HOME_DIR</replaceable>
does not have to exist but will not be created if it is missing.
directory name. If the directory
<replaceable>HOME_DIR</replaceable> does not exist, then it
will be created unless the <option>-M</option> option is
specified.
</para>
</listitem>
</varlistentry>
@@ -359,6 +361,11 @@
<option>CREATE_HOME</option> is not enabled, no home
directories are created.
</para>
<para>
The directory where the user's home directory is created must
exist and have proper SELinux context and permissions. Otherwise
the user's home directory cannot be created or accessed.
</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -736,6 +743,12 @@
</listitem>
</varlistentry>
<varlistentry>
<term><filename>/etc/shadow-maint/useradd-pre.d/*</filename>, <filename>/etc/shadow-maint/useradd-post.d/*</filename></term>
<listitem>
<para>Run-part files to execute during user addition. The environment variable <command>ACTION</command> will be populated with useradd and <command>SUBJECT</command> with the <command>username</command>. <filename>useradd-pre.d</filename> will be executed prior to any user addition. <filename>useradd-post.d</filename> will execute after user addition. If a script exits non-zero then execution will terminate.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>/etc/skel/</filename></term>
<listitem>
<para>Directory containing default files.</para>

View File

@@ -228,6 +228,12 @@
<para>Secure user account information.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>/etc/shadow-maint/userdel-pre.d/*</filename>, <filename>/etc/shadow-maint/userdel-post.d/*</filename></term>
<listitem>
<para>Run-part files to execute during user deletion. The environment variable <command>ACTION</command> will be populated with <command>userdel</command> and <command>SUBJECT</command> with the username. <filename>userdel-pre.d</filename> will be executed prior to any user deletion. <filename>userdel-post.d</filename> will execute after user deletion. If a script exits non-zero then execution will terminate.</para>
</listitem>
</varlistentry>
<varlistentry condition="subids">
<term><filename>/etc/subgid</filename></term>
<listitem>

View File

@@ -143,7 +143,8 @@
If the <option>-m</option>
option is given, the contents of the current home directory will
be moved to the new home directory, which is created if it does
not already exist.
not already exist. If the current home directory does not exist
the new home directory will not be created.
</para>
</listitem>
</varlistentry>
@@ -205,6 +206,12 @@
The group ownership of files outside of the user's home directory
must be fixed manually.
</para>
<para>
The change of the group ownership of files inside of the user's
home directory is also not done if the home dir owner uid is
different from the current or new user id. This is a safety measure
for special home directories such as <filename>/</filename>.
</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -267,7 +274,8 @@
<listitem>
<para>
Move the content of the user's home directory to the new
location.
location. If the current home directory does not exist
the new home directory will not be created.
</para>
<para>
This option is only valid in combination with the
@@ -353,7 +361,7 @@
</term>
<listitem>
<para>
The name of the user's new login shell. Setting this field to
The path of the user's new login shell. Setting this field to
blank causes the system to select the default login shell.
</para>
</listitem>
@@ -380,6 +388,12 @@
The ownership of files outside of the user's home directory
must be fixed manually.
</para>
<para>
The change of the user ownership of files inside of the user's
home directory is also not done if the home dir owner uid is
different from the current or new user id. This is a safety measure
for special home directories such as <filename>/</filename>.
</para>
<para>
No checks will be performed with regard to the
<option>UID_MIN</option>, <option>UID_MAX</option>,

404
po/bs.po
View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shadow\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"POT-Creation-Date: 2021-07-04 12:20+0200\n"
"PO-Revision-Date: 2004-05-09 12:03+0100\n"
"Last-Translator: Safir Šećerović <sapphire@linux.org.ba>\n"
"Language-Team: Bosnian <lokal@lugbih.org>\n"
@@ -52,6 +52,13 @@ msgstr "Šifra:"
msgid "%s's Password: "
msgstr "%s's Šifra: "
msgid "Cannot open audit interface.\n"
msgstr ""
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr ""
#, c-format
msgid "[libsemanage]: %s\n"
msgstr ""
@@ -292,14 +299,18 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
msgstr ""
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr ""
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
msgid "%s: Encountered error attempting to use preferred GID: %s\n"
msgstr ""
#, fuzzy, c-format
@@ -307,7 +318,12 @@ msgid "%s: failed to allocate memory: %s\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgid ""
"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
msgstr ""
#, c-format
msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
msgstr ""
#, c-format
@@ -315,9 +331,25 @@ msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr ""
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
@@ -325,13 +357,67 @@ msgid ""
msgstr ""
#, c-format
msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr ""
#, c-format
msgid "%s: Encountered error attempting to use preferred UID: %s\n"
msgstr ""
#, c-format
msgid ""
"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
msgstr ""
#, c-format
msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
msgstr ""
#, c-format
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr ""
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Try again later\n"
msgid "%s: Memory allocation failure\n"
msgstr "%s: Pokušajte ponovo kasnije\n"
#, c-format
msgid "%s: subuid overflow detected.\n"
msgstr ""
#, c-format
msgid "%s: Invalid map file %s specified\n"
msgstr ""
#, c-format
msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
msgstr ""
#, c-format
msgid "%s: Could not seteuid to %d\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Could not set caps\n"
msgstr "%s: nepoznat član %s\n"
#, c-format
msgid "%s: snprintf failed!\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: open of %s failed: %s\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: write to %s failed: %s\n"
msgstr "nepoznata grupa: %s\n"
msgid "Too many logins.\n"
msgstr "Previše prijavljivanja.\n"
@@ -384,6 +470,24 @@ msgstr "Šifra:"
msgid "passwd: password updated successfully\n"
msgstr ""
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
#, c-format
msgid "%s: conversation type %d not supported.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: grupa %s postoji\n"
#, c-format
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr ""
#, fuzzy, c-format
msgid "Incorrect password for %s.\n"
msgstr "Mijenjam šifru za grupu %s\n"
@@ -416,12 +520,23 @@ msgstr "nepoznata grupa: %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr ""
#, c-format
msgid ""
"Invalid ENCRYPT_METHOD value: '%s'.\n"
"Defaulting to DES.\n"
msgstr ""
#, c-format
msgid ""
"Unable to generate a salt from setting \"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding configuration for your selected hash "
"method.\n"
msgstr ""
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr ""
@@ -441,6 +556,14 @@ msgstr ""
msgid "Can't change root directory to '%s'\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: user %s is currently logged in\n"
msgstr "%s: grupa %s postoji\n"
#, fuzzy, c-format
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: grupa %s postoji\n"
msgid "Unable to determine your tty name."
msgstr ""
@@ -466,6 +589,9 @@ msgstr ""
msgid " -h, --help display this help message and exit\n"
msgstr ""
msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
msgstr ""
msgid ""
" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"
@@ -645,6 +771,10 @@ msgstr "Kućni telefon"
msgid "Other"
msgstr "Ostalo"
#, c-format
msgid "%s: fields too long\n"
msgstr ""
msgid "Cannot change ID to root.\n"
msgstr ""
@@ -696,10 +826,6 @@ msgstr ""
msgid "Changing the user information for %s\n"
msgstr ""
#, c-format
msgid "%s: fields too long\n"
msgstr ""
#, c-format
msgid ""
"Usage: %s [options]\n"
@@ -720,8 +846,8 @@ msgid ""
msgstr ""
msgid ""
" -s, --sha-rounds number of SHA rounds for the SHA*\n"
" crypt algorithms\n"
" -s, --sha-rounds number of rounds for the SHA, BCRYPT\n"
" or YESCRYPT crypt algorithms\n"
msgstr ""
#, c-format
@@ -994,6 +1120,16 @@ msgstr ""
msgid " -r, --system create a system account\n"
msgstr ""
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr ""
msgid " -U, --users USERS list of user members of this group\n"
msgstr ""
#, c-format
msgid "Invalid member username %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: grupa %s postoji\n"
@@ -1018,6 +1154,11 @@ msgstr ""
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: nepoznat član %s\n"
msgid ""
" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
"* files\n"
msgstr ""
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
@@ -1093,6 +1234,12 @@ msgstr ""
msgid "%s: only root can use the -g/--group option\n"
msgstr ""
msgid ""
" -a, --append append the users mentioned by -U option to "
"the group \n"
" without removing existing user members\n"
msgstr ""
msgid " -g, --gid GID change the group ID to GID\n"
msgstr ""
@@ -1142,6 +1289,10 @@ msgstr ""
msgid " -s, --sort sort entries by UID\n"
msgstr ""
msgid ""
" -S, --silence-warnings silence controversial/paranoid warnings\n"
msgstr ""
#, c-format
msgid "%s: -s and -r are incompatible\n"
msgstr ""
@@ -1248,7 +1399,8 @@ msgid ""
" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
msgstr ""
msgid "Username Port From Latest"
#, c-format
msgid "Username Port From%*sLatest\n"
msgstr ""
msgid "Username Port Latest"
@@ -1257,10 +1409,22 @@ msgstr ""
msgid "**Never logged in**"
msgstr ""
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthe output might be incorrect.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthey will not be updated.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "nepoznata grupa: %s\n"
@@ -1377,6 +1541,49 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr ""
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
msgstr ""
#, c-format
msgid "%s: couldn't open process setgroups: %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: failed to read setgroups: %s\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: failed to seek setgroups: %s\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: Could not open proc directory for target %u\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: Could not stat directory for target %u\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid "Usage: newgrp [-] [group]\n"
msgstr ""
@@ -1402,6 +1609,24 @@ msgstr "%s: grupa %s postoji\n"
msgid "too many groups\n"
msgstr ""
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid " -b, --badnames allow bad names\n"
msgstr ""
msgid " -r, --system create system accounts\n"
msgstr ""
@@ -1441,6 +1666,10 @@ msgstr "%s: grupa %s postoji\n"
msgid "%s: line %d: can't update password\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: line %d: homedir must be an absolute path\n"
msgstr "%s: grupa %s postoji\n"
#, fuzzy, c-format
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: grupa %s postoji\n"
@@ -1570,7 +1799,7 @@ msgid "%s: repository %s not supported\n"
msgstr ""
#, c-format
msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr ""
#, fuzzy, c-format
@@ -1716,9 +1945,11 @@ msgstr ""
msgid "Session terminated, terminating shell..."
msgstr ""
#, c-format
msgid " ...killed.\n"
msgstr ""
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr ""
@@ -1730,7 +1961,7 @@ msgid "%s: %s\n"
msgstr ""
msgid ""
"Usage: su [options] [LOGIN]\n"
"Usage: su [options] [-] [username [args]]\n"
"\n"
"Options:\n"
" -c, --command COMMAND pass COMMAND to the invoked shell\n"
@@ -1741,6 +1972,7 @@ msgid ""
" keep the same shell\n"
" -s, --shell SHELL use SHELL instead of the default in passwd\n"
"\n"
"If no username is given, assume root.\n"
msgstr ""
#, c-format
@@ -1749,6 +1981,14 @@ msgid ""
"(Ignored)\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for all accounts.\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for super-user.\n"
msgstr ""
#, c-format
msgid "You are not authorized to su %s\n"
msgstr ""
@@ -1812,6 +2052,10 @@ msgstr ""
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: cannot create new defaults file: %s\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: cannot create new defaults file\n"
msgstr ""
@@ -1840,6 +2084,10 @@ msgstr "%s: grupa %s postoji\n"
msgid "%s: too many groups specified (max %d).\n"
msgstr ""
#, c-format
msgid "%s: Out of memory. Cannot find group '%s'.\n"
msgstr ""
#, c-format
msgid ""
"Usage: %s [options] LOGIN\n"
@@ -1849,12 +2097,19 @@ msgid ""
"Options:\n"
msgstr ""
msgid " --badnames do not check for bad names\n"
msgstr ""
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
"the\n"
" new account\n"
msgstr ""
msgid ""
" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
msgstr ""
msgid " -c, --comment COMMENT GECOS field of the new account\n"
msgstr ""
@@ -1957,26 +2212,98 @@ msgstr ""
msgid "%s: invalid shell '%s'\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Warning: missing or non-executable shell '%s'\n"
msgstr "%s: grupa %s postoji\n"
#, c-format
msgid "%s: -Z cannot be used with --prefix\n"
msgstr ""
#, c-format
msgid "%s: -Z requires SELinux enabled kernel\n"
msgstr ""
#, c-format
msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: failed to open the faillog file for UID %lu: %s\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: failed to close the faillog file for UID %lu: %s\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: failed to open the lastlog file for UID %lu: %s\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: failed to close the lastlog file for UID %lu: %s\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: failed to prepare the new %s entry\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: error while duplicating string %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: cannot set SELinux context for home directory %s\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: error while duplicating string in BTRFS check %s\n"
msgstr ""
#, c-format
msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: failed to create BTRFS subvolume: %s\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: warning: chown on `%s' failed: %m\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: warning: chmod on `%s' failed: %m\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: warning: chown on '%s' failed: %m\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: cannot reset SELinux file creation context\n"
msgstr ""
#, c-format
msgid "%s: cannot set SELinux context for mailbox file %s\n"
msgstr ""
msgid "Creating mailbox file"
msgstr ""
@@ -1987,6 +2314,17 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d "
"range.\n"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: user '%s' already exists\n"
msgstr "%s: grupa %s postoji\n"
@@ -2022,8 +2360,8 @@ msgstr "nepoznata grupa: %s\n"
#, c-format
msgid ""
"%s: warning: the home directory already exists.\n"
"Not copying any file from skel directory into it.\n"
"%s: warning: the home directory %s already exists.\n"
"%s: Not copying any file from skel directory into it.\n"
msgstr ""
#, c-format
@@ -2031,8 +2369,10 @@ msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
msgstr ""
msgid ""
" -f, --force force removal of files,\n"
" even if not owned by user\n"
" -f, --force force some actions that would fail "
"otherwise\n"
" e.g. removal of user still logged in\n"
" or files, even if not owned by the user\n"
msgstr ""
msgid " -r, --remove remove home directory and mail spool\n"
@@ -2100,6 +2440,10 @@ msgstr ""
msgid "%s: not removing directory %s (would remove home of user %s)\n"
msgstr ""
#, c-format
msgid "%s: error removing subvolume %s\n"
msgstr ""
#, c-format
msgid "%s: error removing directory %s\n"
msgstr ""
@@ -2188,6 +2532,10 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: grupa %s postoji\n"
#, c-format
msgid "%s: homedir must be an absolute path\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "nepoznata grupa: %s\n"
@@ -2230,6 +2578,10 @@ msgstr ""
msgid "%s: Failed to change ownership of the home directory"
msgstr ""
#, c-format
msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
msgstr ""
#, c-format
msgid "%s: warning: failed to completely remove old home directory %s"
msgstr ""
@@ -2260,17 +2612,17 @@ msgstr ""
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
msgstr "nepoznata grupa: %s\n"
#, c-format
msgid ""

542
po/ca.po
View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shadow 4.0.18\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"POT-Creation-Date: 2021-07-04 12:20+0200\n"
"PO-Revision-Date: 2012-01-22 18:25+0100\n"
"Last-Translator: Innocent De Marchi <tangram.peces@gmail.com>\n"
"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
@@ -56,6 +56,15 @@ msgstr "Contrasenya: "
msgid "%s's Password: "
msgstr "Contrasenya de l'usuari %s: "
#, fuzzy
#| msgid "Cannot open audit interface - aborting.\n"
msgid "Cannot open audit interface.\n"
msgstr "No es pot obrir la interfície d'auditoria - cancel·lant.\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr ""
#, c-format
msgid "[libsemanage]: %s\n"
msgstr "[libsemanage]: %s\n"
@@ -308,10 +317,6 @@ msgstr[1] ""
"S'han produït %d fallades des de l'últim accés.\n"
"L'últim va ser %s en %s.\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Configuració incorrecta: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
@@ -320,22 +325,63 @@ msgstr ""
"%s: Configuració incorrecta: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Configuració incorrecta: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred GID: %s\n"
msgstr ""
#, c-format
msgid "%s: failed to allocate memory: %s\n"
msgstr "%s: no es pot assignar memòria: %s\n"
#, c-format
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgid ""
"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
msgstr ""
"%s: no es pot obtenir un GID de sistema únic (no hi ha més GID disponibles)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
msgstr "%s: no es pot obtenir un GID únic (no hi ha més GID disponibles)\n"
#, c-format
msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr "%s: no es pot obtenir un GID únic (no hi ha més GID disponibles)\n"
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Configuració incorrecta: UID_MIN (%lu), UID_MAX (%lu)\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
"%s: Configuració incorrecta: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "%s: no es pot generar l'usuari\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
"%s: Configuració incorrecta: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
"(%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "%s: no es pot generar l'usuari\n"
#, c-format
msgid ""
@@ -346,13 +392,77 @@ msgstr ""
"(%lu)\n"
#, c-format
msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Configuració incorrecta: UID_MIN (%lu), UID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred UID: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid ""
"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
msgstr "%s: no es pot obtenir un UID únic (no hi ha més UID disponibles)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
msgstr "%s: no es pot obtenir un GID únic (no hi ha més GID disponibles)\n"
#, c-format
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: no es pot obtenir un GID únic (no hi ha més GID disponibles)\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Authentication failure\n"
msgid "%s: Memory allocation failure\n"
msgstr "%s: l'autenticació ha fallat\n"
#, c-format
msgid "%s: subuid overflow detected.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: invalid field '%s'\n"
msgid "%s: Invalid map file %s specified\n"
msgstr "%s: el camp «%s» no és vàlid\n"
#, c-format
msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not seteuid to %d\n"
msgstr "No s'ha pogut establir el nom per a %s\n"
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not set caps\n"
msgstr "No s'ha pogut establir el nom per a %s\n"
#, fuzzy, c-format
#| msgid "%s: can't open file\n"
msgid "%s: snprintf failed!\n"
msgstr "%s: no es pot obrir el fitxer\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: open of %s failed: %s\n"
msgstr ""
"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: write to %s failed: %s\n"
msgstr ""
"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
msgid "Too many logins.\n"
msgstr "Massa entrades.\n"
@@ -404,6 +514,27 @@ msgstr "passwd: contrasenya sense canvis\n"
msgid "passwd: password updated successfully\n"
msgstr "passwd: s'ha actualitzat la contrasenya satisfactòriament\n"
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: repository %s not supported\n"
msgid "%s: conversation type %d not supported.\n"
msgstr "%s: el dipòsit %s no és admès\n"
#, fuzzy, c-format
#| msgid "%s: pam_start: error %d\n"
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: pam_start: error %d\n"
#, fuzzy, c-format
#| msgid "passwd: pam_start() failed, error %d\n"
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr "passwd: pam_start() ha fallat, error %d\n"
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "La contrasenya és incorrecta per a «%s».\n"
@@ -436,6 +567,10 @@ msgstr "%s: no es pot accedir al directori «chroot» %s: %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: no es pot executar «chroot» en el directori %s: %s\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr ""
#, c-format
msgid ""
"Invalid ENCRYPT_METHOD value: '%s'.\n"
@@ -444,6 +579,13 @@ msgstr ""
"Valor incorrecta d'ENCRYPT_METHOD: «%s».\n"
"Valor per defecte a DES.\n"
#, c-format
msgid ""
"Unable to generate a salt from setting \"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding configuration for your selected hash "
"method.\n"
msgstr ""
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr "No es pot canviar al directori «%s»\n"
@@ -463,6 +605,15 @@ msgstr "El directori arrel «%s» no és vàlid\n"
msgid "Can't change root directory to '%s'\n"
msgstr "No es pot canviar el directori arrel a «%s»\n"
#, c-format
msgid "%s: user %s is currently logged in\n"
msgstr "%s: l'usuari %s està actualment dins el sistema\n"
#, fuzzy, c-format
#| msgid "%s: user %s is currently logged in\n"
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: l'usuari %s està actualment dins el sistema\n"
msgid "Unable to determine your tty name."
msgstr "No s'ha pogut determinar el nom del vostre tty."
@@ -497,6 +648,11 @@ msgstr ""
msgid " -h, --help display this help message and exit\n"
msgstr " -h, --help mostra aquesta ajuda i acaba\n"
#, fuzzy
#| msgid " -g, --group edit group database\n"
msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
msgstr " -g, --group edita la base de dades del grup\n"
msgid ""
" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"
@@ -696,6 +852,10 @@ msgstr "Telèfon de casa"
msgid "Other"
msgstr "Altre"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: els camps són massa llargs\n"
msgid "Cannot change ID to root.\n"
msgstr "No es pot canviar l'ID al de root.\n"
@@ -748,10 +908,6 @@ msgstr "%s: «%s» és el mestre NIS per a aquest client.\n"
msgid "Changing the user information for %s\n"
msgstr "S'està canviant la informació d'usuari per a %s\n"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: els camps són massa llargs\n"
#, c-format
msgid ""
"Usage: %s [options]\n"
@@ -779,9 +935,13 @@ msgstr ""
" l'algorisme MD5\n"
# traducció dubtosa
#, fuzzy
#| msgid ""
#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
#| " crypt algorithms\n"
msgid ""
" -s, --sha-rounds number of SHA rounds for the SHA*\n"
" crypt algorithms\n"
" -s, --sha-rounds number of rounds for the SHA, BCRYPT\n"
" or YESCRYPT crypt algorithms\n"
msgstr ""
" -s, --sha-rounds nombre de passos SHA pel\n"
" algorisme de xifratge SHA*\n"
@@ -1104,6 +1264,22 @@ msgstr ""
msgid " -r, --system create a system account\n"
msgstr " -r, --system genera un compte del sistema\n"
#, fuzzy
#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr ""
" -R, --root CHROOT_DIR fes «chroot» en el directori CHROOT_DIR \n"
#, fuzzy
#| msgid " -l, --list list the members of the group\n"
msgid " -U, --users USERS list of user members of this group\n"
msgstr " -l, --list llista els membres del grup\n"
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "Invalid member username %s\n"
msgstr "el nom d'usuari «%s» no és vàlid\n"
#, c-format
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: «%s» no és un nom de grup vàlid\n"
@@ -1128,6 +1304,11 @@ msgstr "%s: el GID '%lu ja existeix\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: no es pot configurar el servei de neteja.\n"
msgid ""
" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
"* files\n"
msgstr ""
#, fuzzy
msgid ""
" -f, --force delete group even if it is the primary group "
@@ -1216,6 +1397,22 @@ msgstr "%s: el seu nom de grup no concorda amb el seu nom d'usuari\n"
msgid "%s: only root can use the -g/--group option\n"
msgstr "%s:només l'usuari «root» pot fer servir l'opció -g/--group\n"
#, fuzzy
#| msgid ""
#| " -a, --append append the user to the supplemental "
#| "GROUPS\n"
#| " mentioned by the -G option without "
#| "removing\n"
#| " the user from other groups\n"
msgid ""
" -a, --append append the users mentioned by -U option to "
"the group \n"
" without removing existing user members\n"
msgstr ""
" -a, --append afegeix l'usuari als GRUPS addicionals\n"
" llistats amb la opció -G sense eliminar-los\n"
" d'altres grups\n"
msgid " -g, --gid GID change the group ID to GID\n"
msgstr " -g, --gid GID canvia l'ID del grup per GID\n"
@@ -1276,6 +1473,10 @@ msgstr ""
msgid " -s, --sort sort entries by UID\n"
msgstr " -s, --sort ordena les entrades per UID\n"
msgid ""
" -S, --silence-warnings silence controversial/paranoid warnings\n"
msgstr ""
#, c-format
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: «-s» i «-r» són incompatibles\n"
@@ -1394,8 +1595,10 @@ msgid ""
msgstr ""
" -u, --user USUARI mostra el registre de lastlog de l'USUARI\n"
msgid "Username Port From Latest"
msgstr "Usuari Port Des de Últim"
#, fuzzy, c-format
#| msgid "Username Port Latest"
msgid "Username Port From%*sLatest\n"
msgstr "Usuari Port Últim"
msgid "Username Port Latest"
msgstr "Usuari Port Últim"
@@ -1403,10 +1606,22 @@ msgstr "Usuari Port Últim"
msgid "**Never logged in**"
msgstr "**No ha entrat mai**"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthe output might be incorrect.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: No s'ha pogut obtenir l'entrada de la UID %lu\n"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthey will not be updated.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: no es pot actualitzar el fitxer de contrasenyes\n"
@@ -1534,6 +1749,55 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr "Forma d'ús: logoutd\n"
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: can't open group file\n"
msgid "%s: couldn't open process setgroups: %s\n"
msgstr "%s: no es pot obrir el fitxer de grups\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to read setgroups: %s\n"
msgstr "%s: fallida en eliminar %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to seek setgroups: %s\n"
msgstr "%s: fallida en eliminar %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to unlock %s\n"
msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "%s: ha fallat el desbloqueig de %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to find tcb directory for %s\n"
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
#, fuzzy, c-format
#| msgid "%s: Failed to create tcb directory for %s\n"
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: no es pot generar el directori «tcb» per a %s\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid "Usage: newgrp [-] [group]\n"
msgstr "Forma d'ús: newgrp [-] [grup]\n"
@@ -1558,6 +1822,26 @@ msgstr "%s: el GID »%lu« no existeix\n"
msgid "too many groups\n"
msgstr "hi ha massa grups\n"
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
#, fuzzy
#| msgid " -q, --quiet quiet mode\n"
msgid " -b, --badnames allow bad names\n"
msgstr " -q, --quiet mode silenciós\n"
msgid " -r, --system create system accounts\n"
msgstr " -r, --system genera els comptes del sistema\n"
@@ -1599,6 +1883,12 @@ msgstr "%s: line %d: l'usuari «%s» no existeix a %s\n"
msgid "%s: line %d: can't update password\n"
msgstr "%s: línia %d: no es pot actualitzar la contrasenya\n"
#, fuzzy, c-format
#| msgid "%s: line %d: mkdir %s failed: %s\n"
msgid "%s: line %d: homedir must be an absolute path\n"
msgstr ""
"%s: línia %d: no s'ha pogut generar el directori «%s» (ordre mkdir): %s\n"
#, c-format
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr ""
@@ -1754,8 +2044,9 @@ msgstr ""
msgid "%s: repository %s not supported\n"
msgstr "%s: el dipòsit %s no és admès\n"
#, c-format
msgid "%s: %s is not authorized to change the password of %s\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr "%s: %s no està autoritzat per canviar la contrasenya de %s\n"
#, c-format
@@ -1912,9 +2203,11 @@ msgstr "%s: el senyal emmascara un error\n"
msgid "Session terminated, terminating shell..."
msgstr "Sessió acabada, finalitzant el «shell»..."
#, c-format
msgid " ...killed.\n"
msgstr "...mort.\n"
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr "...esperant al fill per acabar.\n"
@@ -1925,8 +2218,22 @@ msgstr "...acabat.\n"
msgid "%s: %s\n"
msgstr "%s: %s\n"
#, fuzzy
#| msgid ""
#| "Usage: su [options] [LOGIN]\n"
#| "\n"
#| "Options:\n"
#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
#| " -h, --help display this help message and exit\n"
#| " -, -l, --login make the shell a login shell\n"
#| " -m, -p,\n"
#| " --preserve-environment do not reset environment variables, and\n"
#| " keep the same shell\n"
#| " -s, --shell SHELL use SHELL instead of the default in "
#| "passwd\n"
#| "\n"
msgid ""
"Usage: su [options] [LOGIN]\n"
"Usage: su [options] [-] [username [args]]\n"
"\n"
"Options:\n"
" -c, --command COMMAND pass COMMAND to the invoked shell\n"
@@ -1937,6 +2244,7 @@ msgid ""
" keep the same shell\n"
" -s, --shell SHELL use SHELL instead of the default in passwd\n"
"\n"
"If no username is given, assume root.\n"
msgstr ""
"Forma d'ús: su [opcions] [USUARI]\n"
"\n"
@@ -1960,6 +2268,14 @@ msgstr ""
"%s: %s\n"
"(Ignorat)\n"
#, c-format
msgid "Password field is empty, this is forbidden for all accounts.\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for super-user.\n"
msgstr ""
#, c-format
msgid "You are not authorized to su %s\n"
msgstr "No esteu autoritzats a usar «su %s»\n"
@@ -2024,6 +2340,11 @@ msgstr "%s: %s va ser generat, però no és possible eliminar-ho\n"
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr "%s: la configuració %s a %s serà ignorada\n"
#, fuzzy, c-format
#| msgid "%s: cannot create new defaults file\n"
msgid "%s: cannot create new defaults file: %s\n"
msgstr "%s: no es pot crear un fitxer nou de preferències predeterminades\n"
#, c-format
msgid "%s: cannot create new defaults file\n"
msgstr "%s: no es pot crear un fitxer nou de preferències predeterminades\n"
@@ -2052,6 +2373,11 @@ msgstr "%s: el grup «%s» és un grup NIS.\n"
msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: s'han especificat massa grups (màx de %d).\n"
#, fuzzy, c-format
#| msgid "%s: Out of memory. Cannot update %s.\n"
msgid "%s: Out of memory. Cannot find group '%s'.\n"
msgstr "%s: s'ha exhaurit la memòria. No es pot actualitzar %s.\n"
#, c-format
msgid ""
"Usage: %s [options] LOGIN\n"
@@ -2066,6 +2392,12 @@ msgstr ""
"\n"
"Opcions:\n"
#, fuzzy
#| msgid " -s, --shadow edit shadow or gshadow database\n"
msgid " --badnames do not check for bad names\n"
msgstr ""
" -s, --shadow edita la base de dades «shadow» o «gshadow»\n"
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
"the\n"
@@ -2074,6 +2406,10 @@ msgstr ""
" -b, --base-dir BASE_DIR directori base per al directori arrel del\n"
" compte nou\n"
msgid ""
" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
msgstr ""
msgid " -c, --comment COMMENT GECOS field of the new account\n"
msgstr " -c, --comment COMMENT camp GECOS del nou compte\n"
@@ -2196,28 +2532,125 @@ msgstr "%s: el camp «%s» no és vàlid\n"
msgid "%s: invalid shell '%s'\n"
msgstr "%s: l'intèrpret «%s» no és vàlid\n"
#, fuzzy, c-format
#| msgid "%s: Warning: %s is not executable\n"
msgid "%s: Warning: missing or non-executable shell '%s'\n"
msgstr "%s: Advertència: %s no és executable\n"
#, fuzzy, c-format
#| msgid "%s: cannot rewrite password file\n"
msgid "%s: -Z cannot be used with --prefix\n"
msgstr "%s: no es pot reescriure el fitxer de contrasenyes\n"
#, c-format
msgid "%s: -Z requires SELinux enabled kernel\n"
msgstr "%s: -Z requereix nucli «SELinux» habilitat\n"
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr "%s: el nom d'usuari «%s» no és vàlid\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to open the faillog file for UID %lu: %s\n"
msgstr ""
"%s: ha fallat el restabliment de l'entrada del registre d'errors de UID %lu: "
"%s\n"
#, c-format
msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgstr ""
"%s: ha fallat el restabliment de l'entrada del registre d'errors de UID %lu: "
"%s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to close the faillog file for UID %lu: %s\n"
msgstr ""
"%s: ha fallat el restabliment de l'entrada del registre d'errors de UID %lu: "
"%s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to open the lastlog file for UID %lu: %s\n"
msgstr "%s: ha fallat el restabliment del darrer registre de UID %lu: %s\n"
#, c-format
msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: ha fallat el restabliment del darrer registre de UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to close the lastlog file for UID %lu: %s\n"
msgstr "%s: ha fallat el restabliment del darrer registre de UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
msgstr ""
"%s: ha fallat el restabliment de l'entrada del registre d'errors de UID %lu: "
"%s\n"
#, fuzzy, c-format
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
#, fuzzy, c-format
#| msgid "%s: error updating files\n"
msgid "%s: error while duplicating string %s\n"
msgstr "%s: s'ha produït un error en actualitzar el fitxer\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot set SELinux context for home directory %s\n"
msgstr "%s: no es pot crear el directori %s\n"
#, c-format
msgid "%s: error while duplicating string in BTRFS check %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
msgstr "%s: no s'ha trobat el directori personal (%s) de %s \n"
#, fuzzy, c-format
#| msgid "%s: failed to allocate memory: %s\n"
msgid "%s: failed to create BTRFS subvolume: %s\n"
msgstr "%s: no es pot assignar memòria: %s\n"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr "%s: no es pot crear el directori %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on `%s' failed: %m\n"
msgstr ""
"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chmod on `%s' failed: %m\n"
msgstr ""
"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on '%s' failed: %m\n"
msgstr ""
"%s: línia %d: no s'ha pogut canviar el propietari (ordre «chown») %s: %s\n"
#, c-format
msgid "%s: cannot reset SELinux file creation context\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Cannot create SELinux login mapping for %s\n"
msgid "%s: cannot set SELinux context for mailbox file %s\n"
msgstr "No es pot generar el mapatge d'inici de sessió SELinux per a %s\n"
msgid "Creating mailbox file"
msgstr "S'està creant la bústia de correu"
@@ -2230,6 +2663,17 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr "S'estan establint els permisos de la bústia de correu"
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d "
"range.\n"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"
msgstr ""
#, c-format
msgid "%s: user '%s' already exists\n"
msgstr "%s: l'usuari «%s» existeix\n"
@@ -2265,10 +2709,13 @@ msgstr "%s: no es pot generar l'usuari\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: no es pot generar el grup\n"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%s: warning: the home directory already exists.\n"
#| "Not copying any file from skel directory into it.\n"
msgid ""
"%s: warning: the home directory already exists.\n"
"Not copying any file from skel directory into it.\n"
"%s: warning: the home directory %s already exists.\n"
"%s: Not copying any file from skel directory into it.\n"
msgstr ""
"%s: avís: el directori personal ja existeix.\n"
"No s'hi copiarà cap fitxer del directori skel.\n"
@@ -2278,9 +2725,15 @@ msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
msgstr ""
"%s: avís: falla el nom d'usuari %s a %s a l'assignació d'usuaris «SELinux».\n"
#, fuzzy
#| msgid ""
#| " -f, --force force removal of files,\n"
#| " even if not owned by user\n"
msgid ""
" -f, --force force removal of files,\n"
" even if not owned by user\n"
" -f, --force force some actions that would fail "
"otherwise\n"
" e.g. removal of user still logged in\n"
" or files, even if not owned by the user\n"
msgstr ""
" -f, --force força l'eliminació de fitxers, encara que\n"
" no siguin propietat de l'usuari\n"
@@ -2361,6 +2814,11 @@ msgstr ""
"%s: no s'elimina el directori %s (eliminaria el directori personal de "
"l'usuari %s)\n"
#, fuzzy, c-format
#| msgid "%s: error removing directory %s\n"
msgid "%s: error removing subvolume %s\n"
msgstr "%s: s'ha produït un error en eliminar el directori %s\n"
#, c-format
msgid "%s: error removing directory %s\n"
msgstr "%s: s'ha produït un error en eliminar el directori %s\n"
@@ -2472,6 +2930,10 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: l'usuari «%s» ja existeix a %s\n"
#, c-format
msgid "%s: homedir must be an absolute path\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: la data «%s» no és vàlida\n"
@@ -2516,6 +2978,10 @@ msgstr ""
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: No s'ha pogut canviar la propietat del directori d'inici"
#, c-format
msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
msgstr ""
#, c-format
msgid "%s: warning: failed to completely remove old home directory %s"
msgstr ""
@@ -2552,7 +3018,7 @@ msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
#, fuzzy, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
#, fuzzy, c-format
@@ -2560,7 +3026,7 @@ msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
#, fuzzy, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
#, c-format
@@ -2653,6 +3119,9 @@ msgstr "%s: no es pot restaurar %s: %s (els seus canvis estan a %s)\n"
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
#~ msgid "Username Port From Latest"
#~ msgstr "Usuari Port Des de Últim"
#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
#~ msgstr " -c, --crypt-method el mètode d'encriptat (un de %s)\n"
@@ -2921,9 +3390,6 @@ msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
#~ " de correu\n"
#~ "\n"
#~ msgid "%s: user %s is currently logged in\n"
#~ msgstr "%s: l'usuari %s està actualment dins el sistema\n"
#~ msgid ""
#~ "Usage: usermod [options] LOGIN\n"
#~ "\n"
@@ -3300,9 +3766,6 @@ msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
#~ msgid "%s: can't lock group file\n"
#~ msgstr "%s: no es pot blocar el fitxer de grups\n"
#~ msgid "%s: can't open group file\n"
#~ msgstr "%s: no es pot obrir el fitxer de grups\n"
#~ msgid "%s: can't lock gshadow file\n"
#~ msgstr "%s: no s'ha pogut blocar el fitxer de contrasenyes ombra\n"
@@ -3371,9 +3834,6 @@ msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
#~ msgstr ""
#~ "%s: no es pot obtenir el bloqueig del fitxer de contrasenyes ombra\n"
#~ msgid "%s: can't open file\n"
#~ msgstr "%s: no es pot obrir el fitxer\n"
#~ msgid "%s: can't re-write shadow file\n"
#~ msgstr "%s: no es pot reescriure el fitxer ombra\n"
@@ -3538,9 +3998,6 @@ msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
#~ msgid "%s: can't open files\n"
#~ msgstr "%s: no es poden obrir els fitxers\n"
#~ msgid "%s: error updating files\n"
#~ msgstr "%s: s'ha produït un error en actualitzar el fitxer\n"
#~ msgid "%s: can't update passwd entry for %s\n"
#~ msgstr "%s: no es pot actualitzar l'entrada de la contrasenya per a %s\n"
@@ -3572,9 +4029,6 @@ msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
#~ msgstr "%s: sense memòria a update_gshadow\n"
#~ msgid "%s: cannot rewrite password file\n"
#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes\n"
#~ msgid "%s: cannot rewrite shadow password file\n"
#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes ombra\n"

595
po/cs.po
View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shadow 4.2\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"POT-Creation-Date: 2021-07-04 12:20+0200\n"
"PO-Revision-Date: 2014-08-24 15:07+0200\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -55,6 +55,15 @@ msgstr "Heslo: "
msgid "%s's Password: "
msgstr "Heslo uživatele %s: "
#, fuzzy
#| msgid "Cannot open audit interface - aborting.\n"
msgid "Cannot open audit interface.\n"
msgstr "Nelze otevřít auditní rozhraní - končím.\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr ""
#, c-format
msgid "[libsemanage]: %s\n"
msgstr "[libsemanage]: %s\n"
@@ -307,10 +316,6 @@ msgstr[2] ""
"%d selhání od posledního přihlášení.\n"
"Poslední: %s na %s.\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Neplatné nastavení: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
@@ -318,21 +323,56 @@ msgid ""
msgstr ""
"%s: Neplatné nastavení: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Neplatné nastavení: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred GID: %s\n"
msgstr ""
#, c-format
msgid "%s: failed to allocate memory: %s\n"
msgstr "%s: selhala alokace paměti: %s\n"
#, c-format
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgid ""
"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
msgstr "%s: Nelze získat jedinečné systémové GID (volná GID neexistují)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
msgstr "%s: Nelze získat jedinečné GID (volná GID neexistují)\n"
#, c-format
msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr "%s: Nelze získat jedinečné GID (volná GID neexistují)\n"
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Neplatné nastavení: UID_MIN (%lu), UID_MAX (%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
"%s: Neplatné nastavení: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), SUB_GID_COUNT "
"(%lu)\n"
#, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "%s: Nelze získat jedinečný rozsah podřízených GID\n"
#, c-format
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
"%s: Neplatné nastavení: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), SUB_UID_COUNT "
"(%lu)\n"
#, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "%s: Nelze získat jedinečný rozsah podřízených UID\n"
#, c-format
msgid ""
@@ -342,13 +382,71 @@ msgstr ""
"%s: Neplatné nastavení: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
#, c-format
msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Neplatné nastavení: UID_MIN (%lu), UID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred UID: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid ""
"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
msgstr "%s: Nelze získat jedinečné systémové UID (volná UID neexistují)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
msgstr "%s: Nelze získat jedinečné UID (volná UID neexistují)\n"
#, c-format
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: Nelze získat jedinečné UID (volná UID neexistují)\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr "%s: Nedostatek argumentů pro vytvoření %u mapování\n"
#, c-format
msgid "%s: Memory allocation failure\n"
msgstr "%s: Chyba alokace paměti\n"
#, c-format
msgid "%s: subuid overflow detected.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: invalid field '%s'\n"
msgid "%s: Invalid map file %s specified\n"
msgstr "%s: chybná položka „%s“\n"
#, c-format
msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not seteuid to %d\n"
msgstr "Nelze nastavit jméno uživatele %s\n"
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not set caps\n"
msgstr "Nelze nastavit jméno uživatele %s\n"
#, c-format
msgid "%s: snprintf failed!\n"
msgstr "%s: snprintf selhalo!\n"
#, c-format
msgid "%s: open of %s failed: %s\n"
msgstr "%s: otevření %s selhalo: %s\n"
#, c-format
msgid "%s: write to %s failed: %s\n"
msgstr "%s: zápis do %s selhal: %s\n"
msgid "Too many logins.\n"
msgstr "Příliš mnoho přihlášení.\n"
@@ -400,6 +498,27 @@ msgstr "passwd: heslo nebylo změněno\n"
msgid "passwd: password updated successfully\n"
msgstr "passwd: heslo bylo úspěšně změněno\n"
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
"%s: PAM moduly vyžadující zobrazování zpětné vazby nejsou podporovány.\n"
#, c-format
msgid "%s: conversation type %d not supported.\n"
msgstr "%s: typ konverzace %d není podporován.\n"
#, c-format
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: (uživatel %s) chyba pam_start %d\n"
#, c-format
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr ""
"%s: (uživatel %s) volání pam_chauthtok() selhalo, chyba:\n"
"%s\n"
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "Chybné heslo pro %s.\n"
@@ -432,6 +551,10 @@ msgstr "%s: nelze přejít (chdir) do chroot adresáře %s: %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: nelze změnit kořen (chroot) na adresář %s: %s\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr ""
#, c-format
msgid ""
"Invalid ENCRYPT_METHOD value: '%s'.\n"
@@ -440,6 +563,13 @@ msgstr ""
"Neplatná hodnota ENCRYPT_METHOD: „%s“.\n"
"Používám DES.\n"
#, c-format
msgid ""
"Unable to generate a salt from setting \"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding configuration for your selected hash "
"method.\n"
msgstr ""
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr "Nelze přejít do „%s“\n"
@@ -459,6 +589,14 @@ msgstr "Chybný kořenový adresář „%s“\n"
msgid "Can't change root directory to '%s'\n"
msgstr "Nelze změnit kořenový adresář na „%s“\n"
#, c-format
msgid "%s: user %s is currently logged in\n"
msgstr "%s: uživatel %s je právě přihlášen\n"
#, c-format
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: uživatel %s je momentálně používán procesem %d\n"
msgid "Unable to determine your tty name."
msgstr "Nelze zjistit vaše uživatelské jméno."
@@ -490,6 +628,11 @@ msgstr ""
msgid " -h, --help display this help message and exit\n"
msgstr " -h, --help zobrazí tuto nápovědu a skončí\n"
#, fuzzy
#| msgid " -g, --group edit group database\n"
msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
msgstr " -g, --group upraví databázi skupin\n"
msgid ""
" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"
@@ -679,6 +822,10 @@ msgstr "Telefon domů"
msgid "Other"
msgstr "Ostatní"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: položka je příliš dlouhá\n"
msgid "Cannot change ID to root.\n"
msgstr "Nelze změnit ID na root.\n"
@@ -730,10 +877,6 @@ msgstr "%s: „%s“ je hlavním NIS serverem pro tohoto klienta.\n"
msgid "Changing the user information for %s\n"
msgstr "Měním informace o uživateli %s\n"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: položka je příliš dlouhá\n"
#, c-format
msgid ""
"Usage: %s [options]\n"
@@ -758,9 +901,13 @@ msgstr ""
" -m, --md5 zašifruje nešifrované heslo\n"
" algoritmem MD5\n"
#, fuzzy
#| msgid ""
#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
#| " crypt algorithms\n"
msgid ""
" -s, --sha-rounds number of SHA rounds for the SHA*\n"
" crypt algorithms\n"
" -s, --sha-rounds number of rounds for the SHA, BCRYPT\n"
" or YESCRYPT crypt algorithms\n"
msgstr " -s, --sha-rounds počet SHA iterací algoritmu SHA*\n"
#, c-format
@@ -1062,6 +1209,21 @@ msgstr ""
msgid " -r, --system create a system account\n"
msgstr " -r, --system vytvoří systémový účet\n"
#, fuzzy
#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr " -R, --root CHROOT_ADRESÁŘ adresář, do kterého přejít\n"
#, fuzzy
#| msgid " -l, --list list the members of the group\n"
msgid " -U, --users USERS list of user members of this group\n"
msgstr " -l, --list vypíše členy skupiny\n"
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "Invalid member username %s\n"
msgstr "chybné uživatelské jméno „%s“\n"
#, c-format
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: „%s“ není platným jménem skupiny\n"
@@ -1086,6 +1248,11 @@ msgstr "%s: GID „%lu“ již existuje\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: nelze nastavit úklidovou službu.\n"
msgid ""
" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
"* files\n"
msgstr ""
#, fuzzy
msgid ""
" -f, --force delete group even if it is the primary group "
@@ -1170,6 +1337,21 @@ msgstr "%s: vaše skupina neodpovídá vašemu uživatelskému jménu\n"
msgid "%s: only root can use the -g/--group option\n"
msgstr "%s: volbu -g/--group může používat pouze root\n"
#, fuzzy
#| msgid ""
#| " -a, --append append the user to the supplemental "
#| "GROUPS\n"
#| " mentioned by the -G option without "
#| "removing\n"
#| " the user from other groups\n"
msgid ""
" -a, --append append the users mentioned by -U option to "
"the group \n"
" without removing existing user members\n"
msgstr ""
" -a, --append přidá uživatele do dalších SKUPIN zadaných\n"
" volbou -G; neruší členství v ostatních sk.\n"
msgid " -g, --gid GID change the group ID to GID\n"
msgstr " -g, --gid GID změní ID skupiny na GID\n"
@@ -1229,6 +1411,10 @@ msgstr ""
msgid " -s, --sort sort entries by UID\n"
msgstr " -s, --sort řadí záznamy podle UID\n"
msgid ""
" -S, --silence-warnings silence controversial/paranoid warnings\n"
msgstr ""
#, c-format
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: -s a -r nejsou slučitelné\n"
@@ -1345,8 +1531,10 @@ msgid ""
msgstr ""
" -u, --user ÚČET zobrazí záznamy lastlogu pro uživatele ÚČET\n"
msgid "Username Port From Latest"
msgstr "Uživatel Port Z Naposledy"
#, fuzzy, c-format
#| msgid "Username Port Latest"
msgid "Username Port From%*sLatest\n"
msgstr "Uživatel Port Naposledy"
msgid "Username Port Latest"
msgstr "Uživatel Port Naposledy"
@@ -1354,10 +1542,22 @@ msgstr "Uživatel Port Naposledy"
msgid "**Never logged in**"
msgstr "**Nikdy nebyl přihlášen**"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthe output might be incorrect.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: nepodařilo se získat záznam pro UID %lu\n"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthey will not be updated.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: soubor s hesly nelze aktualizovat\n"
@@ -1484,6 +1684,55 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr "Použití: logoutd\n"
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr "%s: rozsah gid [%lu-%lu) -> [%lu-%lu) není povolen\n"
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
"použití: %s <pid> <gid> <spodnígid> <počet> [ <gid> <spodnígid> "
"<počet> ] ...\n"
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Could not open proc directory for target %u\n"
msgid "%s: couldn't open process setgroups: %s\n"
msgstr "%s: Nelze otevřít proc adresář cílového procesu %u\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to read setgroups: %s\n"
msgstr "%s: selhalo odstranění %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to seek setgroups: %s\n"
msgstr "%s: selhalo odstranění %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to unlock %s\n"
msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "%s: nepodařilo se odemknout %s\n"
#, c-format
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: Nelze otevřít proc adresář cílového procesu %u\n"
#, c-format
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: Nelze zavolat stat na adresář cílového procesu %u\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid "Usage: newgrp [-] [group]\n"
msgstr "Použití: newgrp [-] [skupina]\n"
@@ -1508,6 +1757,28 @@ msgstr "%s: GID „%lu“ neexistuje\n"
msgid "too many groups\n"
msgstr "příliš mnoho skupin\n"
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr "%s: rozsah uid [%lu-%lu) -> [%lu-%lu) není povolen\n"
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
"použití: %s <pid> <uid> <spodníuid> <počet> [ <uid> <spodníuid> "
"<počet> ] ...\n"
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
#, fuzzy
#| msgid " -q, --quiet quiet mode\n"
msgid " -b, --badnames allow bad names\n"
msgstr " -q, --quiet tichý režim\n"
msgid " -r, --system create system accounts\n"
msgstr " -r, --system vytvoří systémový účet\n"
@@ -1548,6 +1819,11 @@ msgstr "%s: řádek %d: uživatel „%s“ v %s neexistuje\n"
msgid "%s: line %d: can't update password\n"
msgstr "%s: řádek %d: heslo nelze aktualizovat\n"
#, fuzzy, c-format
#| msgid "%s: line %d: mkdir %s failed: %s\n"
msgid "%s: line %d: homedir must be an absolute path\n"
msgstr "%s: řádek %d: volání mkdir %s selhalo: %s\n"
#, c-format
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: řádek %d: volání mkdir %s selhalo: %s\n"
@@ -1693,8 +1969,9 @@ msgstr ""
msgid "%s: repository %s not supported\n"
msgstr "%s: úložna %s není podporována\n"
#, c-format
msgid "%s: %s is not authorized to change the password of %s\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr "%s: %s není oprávněn změnit heslo %s\n"
#, c-format
@@ -1848,9 +2125,11 @@ msgstr "%s: chyba maskování signálu\n"
msgid "Session terminated, terminating shell..."
msgstr "Sezení skončeno, ukončuji shell..."
#, c-format
msgid " ...killed.\n"
msgstr " ...zabit.\n"
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr " ...čeká na ukončení potomka.\n"
@@ -1861,8 +2140,22 @@ msgstr " ...ukončen.\n"
msgid "%s: %s\n"
msgstr "%s: %s\n"
#, fuzzy
#| msgid ""
#| "Usage: su [options] [LOGIN]\n"
#| "\n"
#| "Options:\n"
#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
#| " -h, --help display this help message and exit\n"
#| " -, -l, --login make the shell a login shell\n"
#| " -m, -p,\n"
#| " --preserve-environment do not reset environment variables, and\n"
#| " keep the same shell\n"
#| " -s, --shell SHELL use SHELL instead of the default in "
#| "passwd\n"
#| "\n"
msgid ""
"Usage: su [options] [LOGIN]\n"
"Usage: su [options] [-] [username [args]]\n"
"\n"
"Options:\n"
" -c, --command COMMAND pass COMMAND to the invoked shell\n"
@@ -1873,6 +2166,7 @@ msgid ""
" keep the same shell\n"
" -s, --shell SHELL use SHELL instead of the default in passwd\n"
"\n"
"If no username is given, assume root.\n"
msgstr ""
"Použití: su [volby] [ÚČET]\n"
"\n"
@@ -1895,6 +2189,14 @@ msgstr ""
"%s: %s\n"
"(Ignoruji)\n"
#, c-format
msgid "Password field is empty, this is forbidden for all accounts.\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for super-user.\n"
msgstr ""
#, c-format
msgid "You are not authorized to su %s\n"
msgstr "Nejste oprávněn používat su %s\n"
@@ -1959,6 +2261,11 @@ msgstr "%s: %s byl vytvořen, ale nemůže být odstraněn\n"
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr "%s: nastavení %s v %s bude ignorováno\n"
#, fuzzy, c-format
#| msgid "%s: cannot create new defaults file\n"
msgid "%s: cannot create new defaults file: %s\n"
msgstr "%s: nelze vytvořit nový soubor s výchozími hodnotami\n"
#, c-format
msgid "%s: cannot create new defaults file\n"
msgstr "%s: nelze vytvořit nový soubor s výchozími hodnotami\n"
@@ -1987,6 +2294,11 @@ msgstr "%s: skupina „%s“ je NIS skupinou.\n"
msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: zadáno příliš mnoho skupin (max %d).\n"
#, fuzzy, c-format
#| msgid "%s: Out of memory. Cannot update %s.\n"
msgid "%s: Out of memory. Cannot find group '%s'.\n"
msgstr "%s: Nedostatek paměti. Nelze aktualizovat %s.\n"
#, c-format
msgid ""
"Usage: %s [options] LOGIN\n"
@@ -2001,6 +2313,11 @@ msgstr ""
"\n"
"Volby:\n"
#, fuzzy
#| msgid " -s, --shadow edit shadow or gshadow database\n"
msgid " --badnames do not check for bad names\n"
msgstr " -s, --shadow upraví databázi shadow nebo gshadow\n"
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
"the\n"
@@ -2010,6 +2327,10 @@ msgstr ""
"nového\n"
" uživatelského účtu\n"
msgid ""
" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
msgstr ""
msgid " -c, --comment COMMENT GECOS field of the new account\n"
msgstr " -c, --comment KOMENTÁŘ pole GECOS nového účtu\n"
@@ -2128,26 +2449,114 @@ msgstr "%s: chybná položka „%s“\n"
msgid "%s: invalid shell '%s'\n"
msgstr "%s: chybný shell „%s“\n"
#, fuzzy, c-format
#| msgid "%s: Warning: %s is not executable\n"
msgid "%s: Warning: missing or non-executable shell '%s'\n"
msgstr "%s: Varování: %s se nedá spustit\n"
#, fuzzy, c-format
#| msgid "%s: cannot rewrite password file\n"
msgid "%s: -Z cannot be used with --prefix\n"
msgstr "%s: soubor s hesly nelze přepsat\n"
#, c-format
msgid "%s: -Z requires SELinux enabled kernel\n"
msgstr "%s: -Z vyžaduje jádro s povoleným SELinuxem\n"
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr "%s: chybné uživatelské jméno „%s“\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to open the faillog file for UID %lu: %s\n"
msgstr "%s: nepodařilo se vynulovat faillog záznam UID %lu: %s\n"
#, c-format
msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgstr "%s: nepodařilo se vynulovat faillog záznam UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to close the faillog file for UID %lu: %s\n"
msgstr "%s: nepodařilo se vynulovat faillog záznam UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to open the lastlog file for UID %lu: %s\n"
msgstr "%s: nepodařilo se vynulovat lastlog záznam UID %lu: %s\n"
#, c-format
msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: nepodařilo se vynulovat lastlog záznam UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to close the lastlog file for UID %lu: %s\n"
msgstr "%s: nepodařilo se vynulovat lastlog záznam UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
msgstr "%s: nepodařilo se vynulovat faillog záznam UID %lu: %s\n"
#, c-format
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: selhala příprava nového záznamu %s\n"
#, fuzzy, c-format
#| msgid "%s: error updating files\n"
msgid "%s: error while duplicating string %s\n"
msgstr "%s: chyba při aktualizaci souborů\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot set SELinux context for home directory %s\n"
msgstr "%s: adresář %s nelze vytvořit\n"
#, c-format
msgid "%s: error while duplicating string in BTRFS check %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
msgstr "%s: domovský adresář uživatele %s (%s) nebyl nalezen\n"
#, fuzzy, c-format
#| msgid "%s: failed to allocate memory: %s\n"
msgid "%s: failed to create BTRFS subvolume: %s\n"
msgstr "%s: selhala alokace paměti: %s\n"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr "%s: adresář %s nelze vytvořit\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on `%s' failed: %m\n"
msgstr "%s: řádek %d: volání chown %s selhalo: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chmod on `%s' failed: %m\n"
msgstr "%s: řádek %d: volání chown %s selhalo: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on '%s' failed: %m\n"
msgstr "%s: řádek %d: volání chown %s selhalo: %s\n"
#, c-format
msgid "%s: cannot reset SELinux file creation context\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Cannot create SELinux login mapping for %s\n"
msgid "%s: cannot set SELinux context for mailbox file %s\n"
msgstr "Nelze vytvořit mapování uživatele %s na SEuživatele\n"
msgid "Creating mailbox file"
msgstr "Vytvářím poštovní schránku"
@@ -2160,6 +2569,17 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr "Nastavuji oprávnění k poštovní schránce"
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d "
"range.\n"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"
msgstr ""
#, c-format
msgid "%s: user '%s' already exists\n"
msgstr "%s: uživatel „%s“ již existuje\n"
@@ -2195,10 +2615,13 @@ msgstr "%s: nelze vytvořit podřízená uživatelská ID\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: nelze vytvořit podřízená skupinová ID\n"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%s: warning: the home directory already exists.\n"
#| "Not copying any file from skel directory into it.\n"
msgid ""
"%s: warning: the home directory already exists.\n"
"Not copying any file from skel directory into it.\n"
"%s: warning: the home directory %s already exists.\n"
"%s: Not copying any file from skel directory into it.\n"
msgstr ""
"%s: varování: domovský adresář již existuje.\n"
"Nekopíruji do něj žádné soubory z adresáře skel.\n"
@@ -2208,9 +2631,15 @@ msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
msgstr ""
"%s: varování: mapování uživatele %s na uživatele SELinuxu %s selhalo.\n"
#, fuzzy
#| msgid ""
#| " -f, --force force removal of files,\n"
#| " even if not owned by user\n"
msgid ""
" -f, --force force removal of files,\n"
" even if not owned by user\n"
" -f, --force force some actions that would fail "
"otherwise\n"
" e.g. removal of user still logged in\n"
" or files, even if not owned by the user\n"
msgstr ""
" -f, --force vynutí odstranění souborů,\n"
" i když je uživatel nevlastní\n"
@@ -2287,6 +2716,11 @@ msgstr "%s: domovský adresář uživatele %s (%s) nebyl nalezen\n"
msgid "%s: not removing directory %s (would remove home of user %s)\n"
msgstr "%s: adresář %s nebudu mazat (je to domácí adresář uživatele %s)\n"
#, fuzzy, c-format
#| msgid "%s: error removing directory %s\n"
msgid "%s: error removing subvolume %s\n"
msgstr "%s: chyba při mazání adresáře %s\n"
#, c-format
msgid "%s: error removing directory %s\n"
msgstr "%s: chyba při mazání adresáře %s\n"
@@ -2393,6 +2827,10 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: uživatel „%s“ již v %s existuje\n"
#, c-format
msgid "%s: homedir must be an absolute path\n"
msgstr ""
#, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: neplatný rozsah podřízených uid „%s“\n"
@@ -2437,6 +2875,10 @@ msgstr ""
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: Nepodařilo se změnit vlastníka domovského adresáře"
#, c-format
msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
msgstr ""
#, c-format
msgid "%s: warning: failed to completely remove old home directory %s"
msgstr "%s: varování: selhalo úplné odstranění domovského adresáře %s"
@@ -2471,16 +2913,18 @@ msgstr "chyba při přejmenovávání poštovní schránky"
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: odebrání rozsahu uid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
#, fuzzy, c-format
#| msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
msgstr "%s: přidání rozsahu uid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: odebrání rozsahu gid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
#, fuzzy, c-format
#| msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
msgstr "%s: přidání rozsahu gid %lu-%lu z „%s“ selhalo\n"
#, c-format
@@ -2569,93 +3013,12 @@ msgstr "%s: %s nelze obnovit: %s (změny jsou v %s)\n"
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: nepodařilo se nalézt tcb adresář uživatele %s\n"
#~ msgid ""
#~ "%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
#~ "SUB_GID_COUNT (%lu)\n"
#~ msgstr ""
#~ "%s: Neplatné nastavení: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
#~ "SUB_GID_COUNT (%lu)\n"
#~ msgid "%s: Can't get unique subordinate GID range\n"
#~ msgstr "%s: Nelze získat jedinečný rozsah podřízených GID\n"
#~ msgid ""
#~ "%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
#~ "SUB_UID_COUNT (%lu)\n"
#~ msgstr ""
#~ "%s: Neplatné nastavení: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
#~ "SUB_UID_COUNT (%lu)\n"
#~ msgid "%s: Can't get unique subordinate UID range\n"
#~ msgstr "%s: Nelze získat jedinečný rozsah podřízených UID\n"
#~ msgid "%s: Not enough arguments to form %u mappings\n"
#~ msgstr "%s: Nedostatek argumentů pro vytvoření %u mapování\n"
#~ msgid "%s: Memory allocation failure\n"
#~ msgstr "%s: Chyba alokace paměti\n"
#~ msgid "%s: snprintf failed!\n"
#~ msgstr "%s: snprintf selhalo!\n"
#~ msgid "%s: open of %s failed: %s\n"
#~ msgstr "%s: otevření %s selhalo: %s\n"
#~ msgid "%s: write to %s failed: %s\n"
#~ msgstr "%s: zápis do %s selhal: %s\n"
#~ msgid "%s: PAM modules requesting echoing are not supported.\n"
#~ msgstr ""
#~ "%s: PAM moduly vyžadující zobrazování zpětné vazby nejsou podporovány.\n"
#~ msgid "%s: conversation type %d not supported.\n"
#~ msgstr "%s: typ konverzace %d není podporován.\n"
#~ msgid "%s: (user %s) pam_start failure %d\n"
#~ msgstr "%s: (uživatel %s) chyba pam_start %d\n"
#~ msgid ""
#~ "%s: (user %s) pam_chauthtok() failed, error:\n"
#~ "%s\n"
#~ msgstr ""
#~ "%s: (uživatel %s) volání pam_chauthtok() selhalo, chyba:\n"
#~ "%s\n"
#~ msgid "%s: user %s is currently logged in\n"
#~ msgstr "%s: uživatel %s je právě přihlášen\n"
#~ msgid "%s: user %s is currently used by process %d\n"
#~ msgstr "%s: uživatel %s je momentálně používán procesem %d\n"
#~ msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
#~ msgstr "%s: rozsah gid [%lu-%lu) -> [%lu-%lu) není povolen\n"
#~ msgid ""
#~ "usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> "
#~ "<count> ] ... \n"
#~ msgstr ""
#~ "použití: %s <pid> <gid> <spodnígid> <počet> [ <gid> <spodnígid> "
#~ "<počet> ] ...\n"
#~ msgid "%s: Could not open proc directory for target %u\n"
#~ msgstr "%s: Nelze otevřít proc adresář cílového procesu %u\n"
#~ msgid "%s: Could not stat directory for target %u\n"
#~ msgstr "%s: Nelze zavolat stat na adresář cílového procesu %u\n"
#~ msgid "Username Port From Latest"
#~ msgstr "Uživatel Port Z Naposledy"
#~ msgid "%s: Target %u is owned by a different user\n"
#~ msgstr "%s: Cílový proces %u je vlastněn jiným uživatelem\n"
#~ msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
#~ msgstr "%s: rozsah uid [%lu-%lu) -> [%lu-%lu) není povolen\n"
#~ msgid ""
#~ "usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> "
#~ "<count> ] ... \n"
#~ msgstr ""
#~ "použití: %s <pid> <uid> <spodníuid> <počet> [ <uid> <spodníuid> "
#~ "<počet> ] ...\n"
#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
#~ msgstr " -c, --crypt-method typ šifry (jeden z %s)\n"
@@ -3561,9 +3924,6 @@ msgstr "%s: nepodařilo se nalézt tcb adresář uživatele %s\n"
#~ msgid "%s: can't open files\n"
#~ msgstr "%s: soubory nelze otevřít\n"
#~ msgid "%s: error updating files\n"
#~ msgstr "%s: chyba při aktualizaci souborů\n"
#~ msgid "%s: can't update passwd entry for %s\n"
#~ msgstr "%s: položku souboru s hesly pro uživatele %s nelze aktualizovat\n"
@@ -3595,9 +3955,6 @@ msgstr "%s: nepodařilo se nalézt tcb adresář uživatele %s\n"
#~ msgstr ""
#~ "%s: Nedostatek paměti. Nelze aktualizovat databázi stínových skupin.\n"
#~ msgid "%s: cannot rewrite password file\n"
#~ msgstr "%s: soubor s hesly nelze přepsat\n"
#~ msgid "%s: cannot rewrite shadow password file\n"
#~ msgstr "%s: soubor se stínovými hesly nelze přepsat\n"

512
po/da.po
View File

@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shadow\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"POT-Creation-Date: 2021-07-04 12:20+0200\n"
"PO-Revision-Date: 2012-01-26 23:57+0100\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n"
@@ -67,6 +67,15 @@ msgstr "Adgangskode: "
msgid "%s's Password: "
msgstr "%s's adgangskode: "
#, fuzzy
#| msgid "Cannot open audit interface - aborting.\n"
msgid "Cannot open audit interface.\n"
msgstr "Kan ikke åbne overvågningsbrugerflade (audit) - afbryder.\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr ""
#, c-format
msgid "[libsemanage]: %s\n"
msgstr "[libsemanage]: %s\n"
@@ -315,10 +324,6 @@ msgstr[1] ""
"%d fejl siden sidste logind.\n"
"Sidst var %s, %s.\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Ugyldig opsætning: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
@@ -326,22 +331,61 @@ msgid ""
msgstr ""
"%s: Ugyldig opsætning: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Ugyldig opsætning: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred GID: %s\n"
msgstr ""
#, c-format
msgid "%s: failed to allocate memory: %s\n"
msgstr "%s: kunne ikke tildele hukommelse: %s\n"
#, c-format
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgid ""
"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
msgstr ""
"%s: Kan ikke indhente unik system-GID (ikke flere tilgængelige GID'er)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
msgstr "%s: Kan ikke indhente unik GID (ikke flere tilgængelige GID'er)\n"
#, c-format
msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr "%s: Kan ikke indhente unik GID (ikke flere tilgængelige GID'er)\n"
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Ugyldig opsætning: UID_MIN (%lu), UID_MAX (%lu)\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
"%s: Ugyldig opsætning: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "%s: Kan ikke oprette bruger\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
"%s: Ugyldig opsætning: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "%s: Kan ikke oprette bruger\n"
#, c-format
msgid ""
@@ -351,14 +395,75 @@ msgstr ""
"%s: Ugyldig opsætning: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"
#, c-format
msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Ugyldig opsætning: UID_MIN (%lu), UID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred UID: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid ""
"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
msgstr ""
"%s: Kan ikke indhente unik system-UIK (ikke flere tilgængelige UID'er)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
msgstr "%s: Kan ikke indhente unik UID (ikke flere tilgængelige UID'er)\n"
#, c-format
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: Kan ikke indhente unik UID (ikke flere tilgængelige UID'er)\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Authentication failure\n"
msgid "%s: Memory allocation failure\n"
msgstr "%s: Godkendelse mislykkedes\n"
#, c-format
msgid "%s: subuid overflow detected.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: invalid field '%s'\n"
msgid "%s: Invalid map file %s specified\n"
msgstr "%s: Ugyldigt felt »%s«\n"
#, c-format
msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not seteuid to %d\n"
msgstr "Kunne ikke angive navn for %s\n"
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not set caps\n"
msgstr "Kunne ikke angive navn for %s\n"
#, c-format
msgid "%s: snprintf failed!\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: open of %s failed: %s\n"
msgstr "%s: Linje %d: chown %s fejlede: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: write to %s failed: %s\n"
msgstr "%s: Linje %d: chown %s fejlede: %s\n"
msgid "Too many logins.\n"
msgstr "Logget på for mange gange.\n"
@@ -410,6 +515,27 @@ msgstr "passwd: Adgangskode uændret\n"
msgid "passwd: password updated successfully\n"
msgstr "passwd: adgangskoden blev opdateret\n"
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: repository %s not supported\n"
msgid "%s: conversation type %d not supported.\n"
msgstr "%s: Arkiv %s understøttes ikke\n"
#, fuzzy, c-format
#| msgid "%s: pam_start: error %d\n"
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: pam_start: Fejl %d\n"
#, fuzzy, c-format
#| msgid "passwd: pam_start() failed, error %d\n"
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr "passwd: pam_start() mislykkedes, fejl %d\n"
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "Ugyldig adgangskode for %s.\n"
@@ -442,6 +568,10 @@ msgstr "%s: Kan ikke tilgå chroot-mappe %s: %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: Kan ikke chroot til mappe %s: %s\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr ""
#, c-format
msgid ""
"Invalid ENCRYPT_METHOD value: '%s'.\n"
@@ -450,6 +580,13 @@ msgstr ""
"Ugyldig ENCRYPT_METHOD-værdi: »%s«.\n"
"Vælger standard DES.\n"
#, c-format
msgid ""
"Unable to generate a salt from setting \"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding configuration for your selected hash "
"method.\n"
msgstr ""
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr "Kunne ikke skifte mappe til »%s«\n"
@@ -469,6 +606,16 @@ msgstr "Ugyldig rodmappe »%s«\n"
msgid "Can't change root directory to '%s'\n"
msgstr "Kan ikke ændre rodmappen til »%s«\n"
#, fuzzy, c-format
#| msgid "%s: user '%s' does not exist in %s\n"
msgid "%s: user %s is currently logged in\n"
msgstr "%s: Brugeren »%s« findes ikke i %s\n"
#, fuzzy, c-format
#| msgid "%s: user '%s' is not a member of '%s'\n"
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: Brugeren »%s« er ikke medlem af »%s«\n"
msgid "Unable to determine your tty name."
msgstr "Kan ikke afgøre dit tty-navn."
@@ -500,6 +647,11 @@ msgstr ""
msgid " -h, --help display this help message and exit\n"
msgstr " -h, --help vis denne hjælpetekst og afslut\n"
#, fuzzy
#| msgid " -g, --group edit group database\n"
msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
msgstr " -g, --group rediger gruppedatabase\n"
msgid ""
" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"
@@ -689,6 +841,10 @@ msgstr "Telefon"
msgid "Other"
msgstr "Andet"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: Felter for lange\n"
msgid "Cannot change ID to root.\n"
msgstr "Kan ikke ændre id til root.\n"
@@ -740,10 +896,6 @@ msgstr "%s: »%s« er NIS-masteren for denne klient.\n"
msgid "Changing the user information for %s\n"
msgstr "Ændrer brugeroplysninger for %s\n"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: Felter for lange\n"
#, c-format
msgid ""
"Usage: %s [options]\n"
@@ -769,9 +921,13 @@ msgstr ""
"af\n"
" MD5-algoritmen\n"
#, fuzzy
#| msgid ""
#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
#| " crypt algorithms\n"
msgid ""
" -s, --sha-rounds number of SHA rounds for the SHA*\n"
" crypt algorithms\n"
" -s, --sha-rounds number of rounds for the SHA, BCRYPT\n"
" or YESCRYPT crypt algorithms\n"
msgstr ""
" -s, --sha-rounds antal SHA-runder for SHA*\n"
" crypt-algoritmerne\n"
@@ -1077,6 +1233,21 @@ msgstr ""
msgid " -r, --system create a system account\n"
msgstr " -r, --system opret en systemkonto\n"
#, fuzzy
#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr " -R, --root CHROOT_MAPPE mappe at chroote ind i\n"
#, fuzzy
#| msgid " -l, --list list the members of the group\n"
msgid " -U, --users USERS list of user members of this group\n"
msgstr " -l, --list vis medlemmer af gruppen\n"
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "Invalid member username %s\n"
msgstr "ugyldigt brugernavn »%s«\n"
#, c-format
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: »%s« er ikke et gyldigt gruppenavn\n"
@@ -1101,6 +1272,11 @@ msgstr "%s: GID »%lu« findes allerede\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Kan ikke opsætte tjenesten cleanup.\n"
msgid ""
" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
"* files\n"
msgstr ""
#, fuzzy
msgid ""
" -f, --force delete group even if it is the primary group "
@@ -1187,6 +1363,24 @@ msgstr "%s: Dit gruppenavn svarer ikke overens med dit brugernavn\n"
msgid "%s: only root can use the -g/--group option\n"
msgstr "%s: Kun root kan bruge tilvalget -g/--group\n"
#, fuzzy
#| msgid ""
#| " -a, --append append the user to the supplemental "
#| "GROUPS\n"
#| " mentioned by the -G option without "
#| "removing\n"
#| " the user from other groups\n"
msgid ""
" -a, --append append the users mentioned by -U option to "
"the group \n"
" without removing existing user members\n"
msgstr ""
" -a, --append tilføj brugeren til de supplementære "
"GRUPPER\n"
" nævnt af tilvalget -G uden at fjerne "
"personen\n"
" fra andre grupper\n"
msgid " -g, --gid GID change the group ID to GID\n"
msgstr " -g, --gid GID ændr gruppe-id'et til GID\n"
@@ -1248,6 +1442,10 @@ msgstr ""
msgid " -s, --sort sort entries by UID\n"
msgstr " -s, --sort sorter punkter efter UID\n"
msgid ""
" -S, --silence-warnings silence controversial/paranoid warnings\n"
msgstr ""
#, c-format
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: -s og -r er ikke kompatible\n"
@@ -1363,8 +1561,10 @@ msgstr ""
" -u, --user LOGIND vis lastlog-poster for brugeren med\n"
" det angivne LOGIND\n"
msgid "Username Port From Latest"
msgstr "Brugernavn Port Fra Seneste"
#, fuzzy, c-format
#| msgid "Username Port Latest"
msgid "Username Port From%*sLatest\n"
msgstr "Brugernavn Port Seneste"
msgid "Username Port Latest"
msgstr "Brugernavn Port Seneste"
@@ -1372,10 +1572,22 @@ msgstr "Brugernavn Port Seneste"
msgid "**Never logged in**"
msgstr "**Har aldrig logget på**"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthe output might be incorrect.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Kunne ikke indhente punktet for UID %lu\n"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthey will not be updated.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: Kunne ikke nulstille lastlog-punktet for UID %lu: %s\n"
@@ -1502,6 +1714,54 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr "Brug: logoutd\n"
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
msgstr ""
#, c-format
msgid "%s: couldn't open process setgroups: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to read setgroups: %s\n"
msgstr "%s: Kunne ikke fjerne %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to seek setgroups: %s\n"
msgstr "%s: Kunne ikke fjerne %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to unlock %s\n"
msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "%s: Kunne ikke åbne %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to find tcb directory for %s\n"
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: Kunne ikke finde tcb-mappe for %s\n"
#, fuzzy, c-format
#| msgid "%s: Failed to create tcb directory for %s\n"
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: Kan ikke oprette tcv-mappe for %s\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid "Usage: newgrp [-] [group]\n"
msgstr "Brug: newgrp [-] [gruppe]\n"
@@ -1526,6 +1786,26 @@ msgstr "%s: GID »%lu« findes ikke\n"
msgid "too many groups\n"
msgstr "for mange grupper\n"
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
#, fuzzy
#| msgid " -q, --quiet quiet mode\n"
msgid " -b, --badnames allow bad names\n"
msgstr " -q, --quiet tavs tilstand\n"
msgid " -r, --system create system accounts\n"
msgstr " -r, --system opret systemkontoer\n"
@@ -1566,6 +1846,11 @@ msgstr "%s: Linje %d: Bruger »%s« findes ikke i %s\n"
msgid "%s: line %d: can't update password\n"
msgstr "%s: Linje %d: Kan ikke opdatere adgangskode\n"
#, fuzzy, c-format
#| msgid "%s: line %d: mkdir %s failed: %s\n"
msgid "%s: line %d: homedir must be an absolute path\n"
msgstr "%s: Linje %d: mkdir %s fejlede: %s\n"
#, c-format
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: Linje %d: mkdir %s fejlede: %s\n"
@@ -1715,8 +2000,9 @@ msgstr ""
msgid "%s: repository %s not supported\n"
msgstr "%s: Arkiv %s understøttes ikke\n"
#, c-format
msgid "%s: %s is not authorized to change the password of %s\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr "%s: %s er ikke godkendt til at ændre adgangskoden på %s\n"
#, c-format
@@ -1869,9 +2155,11 @@ msgstr "%s: Forkert signalmasking\n"
msgid "Session terminated, terminating shell..."
msgstr "Session termineret, terminerer skal..."
#, c-format
msgid " ...killed.\n"
msgstr " ...dræbt.\n"
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr " ...venter på at underproces termineres.\n"
@@ -1882,8 +2170,22 @@ msgstr " ...termineret.\n"
msgid "%s: %s\n"
msgstr "%s: %s\n"
#, fuzzy
#| msgid ""
#| "Usage: su [options] [LOGIN]\n"
#| "\n"
#| "Options:\n"
#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
#| " -h, --help display this help message and exit\n"
#| " -, -l, --login make the shell a login shell\n"
#| " -m, -p,\n"
#| " --preserve-environment do not reset environment variables, and\n"
#| " keep the same shell\n"
#| " -s, --shell SHELL use SHELL instead of the default in "
#| "passwd\n"
#| "\n"
msgid ""
"Usage: su [options] [LOGIN]\n"
"Usage: su [options] [-] [username [args]]\n"
"\n"
"Options:\n"
" -c, --command COMMAND pass COMMAND to the invoked shell\n"
@@ -1894,6 +2196,7 @@ msgid ""
" keep the same shell\n"
" -s, --shell SHELL use SHELL instead of the default in passwd\n"
"\n"
"If no username is given, assume root.\n"
msgstr ""
"Brug: su [tilvalg] [LOGIND]\n"
"\n"
@@ -1916,6 +2219,14 @@ msgstr ""
"%s: %s\n"
"(Ignoreret)\n"
#, c-format
msgid "Password field is empty, this is forbidden for all accounts.\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for super-user.\n"
msgstr ""
#, c-format
msgid "You are not authorized to su %s\n"
msgstr "Du er ikke autoriseret til at su %s\n"
@@ -1980,6 +2291,11 @@ msgstr "%s: %s blev oprettet, men kunne ikke fjernes\n"
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr "%s: Konfigurationen %s i %s vil blive ignoreret\n"
#, fuzzy, c-format
#| msgid "%s: cannot create new defaults file\n"
msgid "%s: cannot create new defaults file: %s\n"
msgstr "%s: Kan ikke oprette ny standardværdifil\n"
#, c-format
msgid "%s: cannot create new defaults file\n"
msgstr "%s: Kan ikke oprette ny standardværdifil\n"
@@ -2008,6 +2324,11 @@ msgstr "%s: Gruppen »%s« er en NIS-gruppe.\n"
msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: Der er angivet for mange grupper (højst %d).\n"
#, fuzzy, c-format
#| msgid "%s: Out of memory. Cannot update %s.\n"
msgid "%s: Out of memory. Cannot find group '%s'.\n"
msgstr "%s: Ikke nok hukommelse. Kan ikke opdatere %s.\n"
#, c-format
msgid ""
"Usage: %s [options] LOGIN\n"
@@ -2022,6 +2343,12 @@ msgstr ""
"\n"
"Tilvalg:\n"
#, fuzzy
#| msgid " -s, --shadow edit shadow or gshadow database\n"
msgid " --badnames do not check for bad names\n"
msgstr ""
" -s, --shadow rediger skygge- eller gskyggedatabase\n"
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
"the\n"
@@ -2030,6 +2357,10 @@ msgstr ""
" -b, --base-dir BASIS_MAP basismappe for hjemmemappen på den nye\n"
" konto\n"
msgid ""
" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
msgstr ""
msgid " -c, --comment COMMENT GECOS field of the new account\n"
msgstr " -c, --comment KOMMENTAR GECOS-felt på den nye konto\n"
@@ -2152,26 +2483,113 @@ msgstr "%s: Ugyldigt felt »%s«\n"
msgid "%s: invalid shell '%s'\n"
msgstr "%s: Ugyldig skal »%s«\n"
#, fuzzy, c-format
#| msgid "%s: Warning: %s is not executable\n"
msgid "%s: Warning: missing or non-executable shell '%s'\n"
msgstr "%s: Advarsel: %s er ikke kørbar\n"
#, c-format
msgid "%s: -Z cannot be used with --prefix\n"
msgstr ""
#, c-format
msgid "%s: -Z requires SELinux enabled kernel\n"
msgstr "%s: -Z kræver SELinux-aktiveret kerne\n"
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr "%s: Ugyldigt brugernavn »%s«\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to open the faillog file for UID %lu: %s\n"
msgstr "%s: Kunne ikke nulstille faillog-punktet for UID %lu: %s\n"
#, c-format
msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgstr "%s: Kunne ikke nulstille faillog-punktet for UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to close the faillog file for UID %lu: %s\n"
msgstr "%s: Kunne ikke nulstille faillog-punktet for UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to open the lastlog file for UID %lu: %s\n"
msgstr "%s: Kunne ikke nulstille lastlog-punktet for UID %lu: %s\n"
#, c-format
msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: Kunne ikke nulstille lastlog-punktet for UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to close the lastlog file for UID %lu: %s\n"
msgstr "%s: Kunne ikke nulstille lastlog-punktet for UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
msgstr "%s: Kunne ikke nulstille faillog-punktet for UID %lu: %s\n"
#, fuzzy, c-format
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
#, fuzzy, c-format
#| msgid "%s: error changing fields\n"
msgid "%s: error while duplicating string %s\n"
msgstr "%s: Fejl ved ændring af felter\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot set SELinux context for home directory %s\n"
msgstr "%s: Kan ikke oprette mappen %s\n"
#, c-format
msgid "%s: error while duplicating string in BTRFS check %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
msgstr "%s: %s hjemmemappe (%s) er ikke fundet\n"
#, fuzzy, c-format
#| msgid "%s: failed to allocate memory: %s\n"
msgid "%s: failed to create BTRFS subvolume: %s\n"
msgstr "%s: kunne ikke tildele hukommelse: %s\n"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr "%s: Kan ikke oprette mappen %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on `%s' failed: %m\n"
msgstr "%s: Linje %d: chown %s fejlede: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chmod on `%s' failed: %m\n"
msgstr "%s: Linje %d: chown %s fejlede: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on '%s' failed: %m\n"
msgstr "%s: Linje %d: chown %s fejlede: %s\n"
#, c-format
msgid "%s: cannot reset SELinux file creation context\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Cannot create SELinux login mapping for %s\n"
msgid "%s: cannot set SELinux context for mailbox file %s\n"
msgstr "Kan ikke oprette SELinux-logindkortlægning for %s\n"
msgid "Creating mailbox file"
msgstr "Opretter postboksfil"
@@ -2184,6 +2602,17 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr "Indstiller postboksfilens rettigheder"
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d "
"range.\n"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"
msgstr ""
#, c-format
msgid "%s: user '%s' already exists\n"
msgstr "%s: Brugeren »%s« findes allerede\n"
@@ -2219,10 +2648,13 @@ msgstr "%s: Kan ikke oprette bruger\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: Kan ikke oprette gruppe\n"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%s: warning: the home directory already exists.\n"
#| "Not copying any file from skel directory into it.\n"
msgid ""
"%s: warning: the home directory already exists.\n"
"Not copying any file from skel directory into it.\n"
"%s: warning: the home directory %s already exists.\n"
"%s: Not copying any file from skel directory into it.\n"
msgstr ""
"%s: Advarsel: Hjemmemappen findes allerede.\n"
"Kopierer ikke nogen filer til den fra skelet-mappen.\n"
@@ -2232,9 +2664,15 @@ msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
msgstr ""
"%s: Advarsel: Brugernavnet %s til %s SELinux-brugerkortlægning mislykkedes.\n"
#, fuzzy
#| msgid ""
#| " -f, --force force removal of files,\n"
#| " even if not owned by user\n"
msgid ""
" -f, --force force removal of files,\n"
" even if not owned by user\n"
" -f, --force force some actions that would fail "
"otherwise\n"
" e.g. removal of user still logged in\n"
" or files, even if not owned by the user\n"
msgstr ""
" -f, --force gennemtving fjernelse af filer,\n"
" selvom de ikke ejers af brugeren\n"
@@ -2311,6 +2749,11 @@ msgid "%s: not removing directory %s (would remove home of user %s)\n"
msgstr ""
"%s: Fjerner ikke mappen %s (det ville fjerne hjemmemappen for brugeren %s)\n"
#, fuzzy, c-format
#| msgid "%s: error removing directory %s\n"
msgid "%s: error removing subvolume %s\n"
msgstr "%s: Fejl under fjernelse af mappen %s\n"
#, c-format
msgid "%s: error removing directory %s\n"
msgstr "%s: Fejl under fjernelse af mappen %s\n"
@@ -2423,6 +2866,10 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: Brugeren »%s« findes allerede i %s\n"
#, c-format
msgid "%s: homedir must be an absolute path\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: Ugyldig dato »%s«\n"
@@ -2467,6 +2914,10 @@ msgstr ""
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: Kunne ikke ændre ejerskab af hjemmemappen"
#, c-format
msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
msgstr ""
#, c-format
msgid "%s: warning: failed to completely remove old home directory %s"
msgstr "%s: Advarsel: Kunne ikke fjerne den gamle hjemmemappe %s fuldstændigt"
@@ -2500,7 +2951,7 @@ msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
#, fuzzy, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
#, fuzzy, c-format
@@ -2508,7 +2959,7 @@ msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
#, fuzzy, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
#, c-format
@@ -2598,3 +3049,6 @@ msgstr "%s: Kan ikke gendanne %s: %s (dine ændringer er i %s)\n"
#, c-format
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: Kunne ikke finde tcb-mappe for %s\n"
#~ msgid "Username Port From Latest"
#~ msgstr "Brugernavn Port Fra Seneste"

528
po/de.po
View File

@@ -2,15 +2,16 @@
# Copyright (C) 1999 Free Software Foundation, Inc.
# Frank Schmid <frank@cs-schmid.de>, 2002
# Holger Wansing <linux@wansing-online.de>, 2006, 2008, 2009, 2011, 2012, 2014.
# Björn Esser <besser82@fedoraproject.org>, 2021.
# Patches, suggestions, etc welcome.
#
msgid ""
msgstr ""
"Project-Id-Version: shadow 4.2-2\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"PO-Revision-Date: 2014-07-27 23:06+0200\n"
"Last-Translator: Holger Wansing <hwansing@mailbox.org>\n"
"POT-Creation-Date: 2021-07-04 12:20+0200\n"
"PO-Revision-Date: 2020-09-22 15:10+0200\n"
"Last-Translator: Björn Esser <besser82@fedoraproject.org>\n"
"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@@ -58,6 +59,15 @@ msgstr "Passwort: "
msgid "%s's Password: "
msgstr "Passwort von %s: "
#, fuzzy
#| msgid "Cannot open audit interface - aborting.\n"
msgid "Cannot open audit interface.\n"
msgstr "Audit-Schnittstelle konnte nicht geöffnet werden - Abbruch.\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr ""
#, c-format
msgid "[libsemanage]: %s\n"
msgstr "[libsemanage]: %s\n"
@@ -309,10 +319,6 @@ msgstr[1] ""
"%d Fehlversuche seit letzter Anmeldung.\n"
"Der letzte war am %s auf %s.\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Ungültige Konfiguration: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
@@ -321,21 +327,62 @@ msgstr ""
"%s: Ungültige Konfiguration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Ungültige Konfiguration: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred GID: %s\n"
msgstr ""
#, c-format
msgid "%s: failed to allocate memory: %s\n"
msgstr "%s: Speicherreservierung fehlgeschlagen: %s\n"
#, c-format
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgid ""
"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
msgstr "%s: Keine einmalige System-GID bekommen (keine GIDs mehr verfügbar)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
msgstr "%s: Keine einmalige GID bekommen (keine GIDs mehr verfügbar)\n"
#, c-format
msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr "%s: Keine einmalige GID bekommen (keine GIDs mehr verfügbar)\n"
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Ungültige Konfiguration: UID_MIN (%lu), UID_MAX (%lu)\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
"%s: Ungültige Konfiguration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "%s: Benutzer kann nicht erstellt werden\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
"%s: Ungültige Konfiguration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
"(%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "%s: Benutzer kann nicht erstellt werden\n"
#, c-format
msgid ""
@@ -346,13 +393,74 @@ msgstr ""
"(%lu)\n"
#, c-format
msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Ungültige Konfiguration: UID_MIN (%lu), UID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred UID: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid ""
"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
msgstr "%s: Keine einmalige System-UID bekommen (keine UIDs mehr verfügbar)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
msgstr "%s: Keine einmalige UID bekommen (keine UIDs mehr verfügbar)\n"
#, c-format
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: Keine einmalige UID bekommen (keine UIDs mehr verfügbar)\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Authentication failure\n"
msgid "%s: Memory allocation failure\n"
msgstr "%s: Authentifizierung fehlgeschlagen\n"
#, c-format
msgid "%s: subuid overflow detected.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: invalid field '%s'\n"
msgid "%s: Invalid map file %s specified\n"
msgstr "%s: Ungültiges Feld »%s«\n"
#, c-format
msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not seteuid to %d\n"
msgstr "Name für %s konnte nicht gesetzt werden\n"
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not set caps\n"
msgstr "Name für %s konnte nicht gesetzt werden\n"
#, c-format
msgid "%s: snprintf failed!\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: open of %s failed: %s\n"
msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: write to %s failed: %s\n"
msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
msgid "Too many logins.\n"
msgstr "Zu viele Anmeldungen.\n"
@@ -404,6 +512,27 @@ msgstr "passwd: Passwort nicht geändert\n"
msgid "passwd: password updated successfully\n"
msgstr "passwd: Passwort erfolgreich geändert\n"
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: repository %s not supported\n"
msgid "%s: conversation type %d not supported.\n"
msgstr "%s: Repository %s nicht unterstützt\n"
#, fuzzy, c-format
#| msgid "%s: pam_start: error %d\n"
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: pam_start: Fehler %d\n"
#, fuzzy, c-format
#| msgid "passwd: pam_start() failed, error %d\n"
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr "passwd: pam_start() fehlgeschlagen, Fehler %d\n"
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "Falsches Passwort für %s.\n"
@@ -436,6 +565,10 @@ msgstr "%s: auf chroot-Verzeichnis %s kann nicht zugegriffen werden: %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: chroot-Wechsel in Verzeichnis %s nicht möglich: %s\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr "Kann keine zufälligen Bytes beziehen.\n"
#, c-format
msgid ""
"Invalid ENCRYPT_METHOD value: '%s'.\n"
@@ -444,6 +577,16 @@ msgstr ""
"Ungültiger Wert für ENCRYPT_METHOD: »%s«.\n"
"Standard DES wird gewählt.\n"
#, c-format
msgid ""
"Unable to generate a salt from setting \"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding configuration for your selected hash "
"method.\n"
msgstr ""
"Kann kein Salt für das Präfix \"%s\" generieren. Bitte die Einstellungen "
"für ENCRYPT_METHOD und den zugehörigen Konfigurationen der gewählten "
"Hash-Methode überprüfen.\n"
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr "Es konnte nicht in das Verzeichnis »%s« gewechselt werden.\n"
@@ -463,6 +606,16 @@ msgstr "Ungültiges root-Verzeichnis »%s«\n"
msgid "Can't change root directory to '%s'\n"
msgstr "root-Verzeichnis kann nicht auf »%s« geändert werden.\n"
#, fuzzy, c-format
#| msgid "%s: user '%s' does not exist in %s\n"
msgid "%s: user %s is currently logged in\n"
msgstr "%s: Benutzer »%s« ist in %s nicht vorhanden.\n"
#, fuzzy, c-format
#| msgid "%s: user '%s' is not a member of '%s'\n"
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: Benutzer »%s« ist kein Mitglied von »%s«.\n"
msgid "Unable to determine your tty name."
msgstr "Ihr tty-Name konnte nicht festgestellt werden."
@@ -495,6 +648,11 @@ msgstr ""
msgid " -h, --help display this help message and exit\n"
msgstr " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#, fuzzy
#| msgid " -g, --group edit group database\n"
msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
msgstr " -g, --group Gruppen-Datenbank editieren\n"
msgid ""
" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"
@@ -691,6 +849,10 @@ msgstr "Telefon privat"
msgid "Other"
msgstr "Sonstiges"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: Felder zu lang\n"
msgid "Cannot change ID to root.\n"
msgstr "ID konnte nicht auf root geändert werden.\n"
@@ -743,10 +905,6 @@ msgstr "%s: »%s« ist der NIS-Master für diesen Client.\n"
msgid "Changing the user information for %s\n"
msgstr "Benutzerinformationen für %s werden geändert.\n"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: Felder zu lang\n"
#, c-format
msgid ""
"Usage: %s [options]\n"
@@ -774,12 +932,16 @@ msgstr ""
" -m, --md5 Die Klartext-Passwörter mittels MD5-\n"
" Algorithmus verschlüsseln\n"
#, fuzzy
#| msgid ""
#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
#| " crypt algorithms\n"
msgid ""
" -s, --sha-rounds number of SHA rounds for the SHA*\n"
" crypt algorithms\n"
" -s, --sha-rounds number of rounds for the SHA, BCRYPT\n"
" or YESCRYPT crypt algorithms\n"
msgstr ""
" -s, --sha-rounds Anzahl der SHA-Runden für den SHA*-\n"
" Verschlüsselungs-Algorithmus\n"
" -s, --sha-rounds Anzahl der SHA-Runden für den SHA*-,\n"
" BCRYPT oder YESCRYPT Hash-Methode.\n"
#, c-format
msgid "%s: %s flag is only allowed with the %s flag\n"
@@ -1092,7 +1254,22 @@ msgstr ""
" neue Gruppe verwenden\n"
msgid " -r, --system create a system account\n"
msgstr " -r, --system Eine Systemgruppe erstellen\n"
msgstr " -r, --system Ein Systemkonto erstellen\n"
#, fuzzy
#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr " -R, --root CHROOT_VERZ Verzeichnis für chroot\n"
#, fuzzy
#| msgid " -l, --list list the members of the group\n"
msgid " -U, --users USERS list of user members of this group\n"
msgstr " -l, --list Die Mitglieder der Gruppe auflisten\n"
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "Invalid member username %s\n"
msgstr "Ungültiger Benutzername »%s«\n"
#, c-format
msgid "%s: '%s' is not a valid group name\n"
@@ -1118,6 +1295,11 @@ msgstr "%s: GID »%lu« existiert bereits.\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Ihr Benutzername konnte nicht bestimmt werden.\n"
msgid ""
" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
"* files\n"
msgstr ""
#, fuzzy
msgid ""
" -f, --force delete group even if it is the primary group "
@@ -1206,6 +1388,24 @@ msgstr "%s: Ihr Gruppenname passt nicht zu Ihrem Benutzername.\n"
msgid "%s: only root can use the -g/--group option\n"
msgstr "%s: Nur root kann die Option -g/--group nutzen.\n"
#, fuzzy
#| msgid ""
#| " -a, --append append the user to the supplemental "
#| "GROUPS\n"
#| " mentioned by the -G option without "
#| "removing\n"
#| " the user from other groups\n"
msgid ""
" -a, --append append the users mentioned by -U option to "
"the group \n"
" without removing existing user members\n"
msgstr ""
" -a, --append Benutzer zu zusätzlichen Gruppen "
"hinzufügen,\n"
" die mit der Option -G angegeben werden, "
"ohne\n"
" ihn dabei aus anderen Gruppen zu entfernen\n"
msgid " -g, --gid GID change the group ID to GID\n"
msgstr " -g, --gid GID Die Gruppen-ID auf GID ändern\n"
@@ -1271,6 +1471,10 @@ msgstr ""
msgid " -s, --sort sort entries by UID\n"
msgstr " -s, --sort Einträge nach UID sortieren\n"
msgid ""
" -S, --silence-warnings silence controversial/paranoid warnings\n"
msgstr ""
#, c-format
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: -s und -r sind nicht kompatibel.\n"
@@ -1391,8 +1595,10 @@ msgid ""
msgstr ""
" -u, --user BENUTZERZUGANG lastlog-Eintrag für BENUTZERZUGANG anzeigen\n"
msgid "Username Port From Latest"
msgstr "Benutzername Port Von Letzter"
#, fuzzy, c-format
#| msgid "Username Port Latest"
msgid "Username Port From%*sLatest\n"
msgstr "Benutzername Port Letzter"
msgid "Username Port Latest"
msgstr "Benutzername Port Letzter"
@@ -1400,10 +1606,22 @@ msgstr "Benutzername Port Letzter"
msgid "**Never logged in**"
msgstr "**Noch nie angemeldet**"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthe output might be incorrect.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Auslesen des Eintrags für UID %lu fehlgeschlagen\n"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthey will not be updated.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: Zurücksetzen des lastlog-Eintrags für UID %lu fehlgeschlagen: %s\n"
@@ -1532,6 +1750,54 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr "Aufruf: logoutd\n"
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
msgstr ""
#, c-format
msgid "%s: couldn't open process setgroups: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to read setgroups: %s\n"
msgstr "%s: Entfernen von %s fehlgeschlagen\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to seek setgroups: %s\n"
msgstr "%s: Entfernen von %s fehlgeschlagen\n"
#, fuzzy, c-format
#| msgid "%s: failed to unlock %s\n"
msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "%s: Entsperren von %s fehlgeschlagen\n"
#, fuzzy, c-format
#| msgid "%s: failed to find tcb directory for %s\n"
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: tcb-Verzeichnis für %s konnte nicht gefunden werden\n"
#, fuzzy, c-format
#| msgid "%s: Failed to create tcb directory for %s\n"
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: Erstellen des tcb-Verzeichnisses für %s fehlgeschlagen\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid "Usage: newgrp [-] [group]\n"
msgstr "Aufruf: newgrp [-] [Gruppe]\n"
@@ -1556,6 +1822,26 @@ msgstr "%s: GID »%lu« existiert nicht.\n"
msgid "too many groups\n"
msgstr "zu viele Gruppen\n"
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
#, fuzzy
#| msgid " -q, --quiet quiet mode\n"
msgid " -b, --badnames allow bad names\n"
msgstr " -q, --quiet Nicht so geschwätzig verhalten\n"
msgid " -r, --system create system accounts\n"
msgstr " -r, --system Systemzugänge erzeugen\n"
@@ -1598,6 +1884,11 @@ msgstr "%s: Zeile %d: Benutzer »%s« existiert nicht in %s.\n"
msgid "%s: line %d: can't update password\n"
msgstr "%s: Zeile %d: Passwort kann nicht aktualisiert werden.\n"
#, fuzzy, c-format
#| msgid "%s: line %d: mkdir %s failed: %s\n"
msgid "%s: line %d: homedir must be an absolute path\n"
msgstr "%s: Zeile %d: mkdir %s (Verzeichnis erstellen) fehlgeschlagen: %s\n"
#, c-format
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: Zeile %d: mkdir %s (Verzeichnis erstellen) fehlgeschlagen: %s\n"
@@ -1751,8 +2042,9 @@ msgstr ""
msgid "%s: repository %s not supported\n"
msgstr "%s: Repository %s nicht unterstützt\n"
#, c-format
msgid "%s: %s is not authorized to change the password of %s\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr "%s: %s ist nicht berechtigt, das Passwort von %s zu ändern.\n"
#, c-format
@@ -1907,9 +2199,11 @@ msgstr "%s: Signalmaskierungs-Fehlfunktion\n"
msgid "Session terminated, terminating shell..."
msgstr "Sitzung abgebrochen, Shell wird beendet ..."
#, c-format
msgid " ...killed.\n"
msgstr " ... abgeschossen.\n"
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr " ... Warten auf Beendigung des Kindprozesses.\n"
@@ -1920,8 +2214,22 @@ msgstr " ... abgebrochen.\n"
msgid "%s: %s\n"
msgstr "%s: %s\n"
#, fuzzy
#| msgid ""
#| "Usage: su [options] [LOGIN]\n"
#| "\n"
#| "Options:\n"
#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
#| " -h, --help display this help message and exit\n"
#| " -, -l, --login make the shell a login shell\n"
#| " -m, -p,\n"
#| " --preserve-environment do not reset environment variables, and\n"
#| " keep the same shell\n"
#| " -s, --shell SHELL use SHELL instead of the default in "
#| "passwd\n"
#| "\n"
msgid ""
"Usage: su [options] [LOGIN]\n"
"Usage: su [options] [-] [username [args]]\n"
"\n"
"Options:\n"
" -c, --command COMMAND pass COMMAND to the invoked shell\n"
@@ -1932,6 +2240,7 @@ msgid ""
" keep the same shell\n"
" -s, --shell SHELL use SHELL instead of the default in passwd\n"
"\n"
"If no username is given, assume root.\n"
msgstr ""
"Aufruf: su [Optionen] [BENUTZERZUGANG]\n"
"\n"
@@ -1954,6 +2263,14 @@ msgstr ""
"%s: %s\n"
"(Ignoriert)\n"
#, c-format
msgid "Password field is empty, this is forbidden for all accounts.\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for super-user.\n"
msgstr ""
#, c-format
msgid "You are not authorized to su %s\n"
msgstr "su %s ist Ihnen nicht erlaubt.\n"
@@ -2018,6 +2335,11 @@ msgstr "%s: %s wurde erstellt, konnte aber nicht entfernt werden\n"
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr "%s: die %s-Konfiguration in %s wird ignoriert.\n"
#, fuzzy, c-format
#| msgid "%s: cannot create new defaults file\n"
msgid "%s: cannot create new defaults file: %s\n"
msgstr "%s: Neue defaults-Datei kann nicht erzeugt werden.\n"
#, c-format
msgid "%s: cannot create new defaults file\n"
msgstr "%s: Neue defaults-Datei kann nicht erzeugt werden.\n"
@@ -2046,6 +2368,11 @@ msgstr "%s: Die Gruppe »%s« ist eine NIS-Gruppe.\n"
msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: Zu viele Gruppen angegeben (max. %d).\n"
#, fuzzy, c-format
#| msgid "%s: Out of memory. Cannot update %s.\n"
msgid "%s: Out of memory. Cannot find group '%s'.\n"
msgstr "%s: Zu wenig Speicher. %s kann nicht aktualisiert werden.\n"
#, c-format
msgid ""
"Usage: %s [options] LOGIN\n"
@@ -2060,6 +2387,12 @@ msgstr ""
"\n"
"Optionen:\n"
#, fuzzy
#| msgid " -s, --shadow edit shadow or gshadow database\n"
msgid " --badnames do not check for bad names\n"
msgstr ""
" -s, --shadow shadow- oder gshadow-Datenbank editieren\n"
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
"the\n"
@@ -2068,6 +2401,10 @@ msgstr ""
" -b, --base-dir BASIS_VERZ Basisverzeichnis für das\n"
" Home-Verzeichnis des neuen Benutzers\n"
msgid ""
" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
msgstr ""
msgid " -c, --comment COMMENT GECOS field of the new account\n"
msgstr ""
" -c, --comment KOMMENTAR KOMMENTAR für das GECOS-Feld des neuen\n"
@@ -2202,26 +2539,113 @@ msgstr "%s: Ungültiges Feld »%s«\n"
msgid "%s: invalid shell '%s'\n"
msgstr "%s: Ungültige Shell »%s«\n"
#, fuzzy, c-format
#| msgid "%s: Warning: %s is not executable\n"
msgid "%s: Warning: missing or non-executable shell '%s'\n"
msgstr "%s: Warnung: %s nicht ausführbar.\n"
#, c-format
msgid "%s: -Z cannot be used with --prefix\n"
msgstr ""
#, c-format
msgid "%s: -Z requires SELinux enabled kernel\n"
msgstr "%s: -Z erfordert einen Kernel, in dem SELinux aktiviert ist.\n"
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr "%s: Ungültiger Benutzername »%s«\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to open the faillog file for UID %lu: %s\n"
msgstr "%s: Zurücksetzen des faillog-Eintrags für UID %lu fehlgeschlagen: %s\n"
#, c-format
msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgstr "%s: Zurücksetzen des faillog-Eintrags für UID %lu fehlgeschlagen: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to close the faillog file for UID %lu: %s\n"
msgstr "%s: Zurücksetzen des faillog-Eintrags für UID %lu fehlgeschlagen: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to open the lastlog file for UID %lu: %s\n"
msgstr "%s: Zurücksetzen des lastlog-Eintrags für UID %lu fehlgeschlagen: %s\n"
#, c-format
msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: Zurücksetzen des lastlog-Eintrags für UID %lu fehlgeschlagen: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to close the lastlog file for UID %lu: %s\n"
msgstr "%s: Zurücksetzen des lastlog-Eintrags für UID %lu fehlgeschlagen: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
msgstr "%s: Zurücksetzen des faillog-Eintrags für UID %lu fehlgeschlagen: %s\n"
#, fuzzy, c-format
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, fuzzy, c-format
#| msgid "%s: error changing fields\n"
msgid "%s: error while duplicating string %s\n"
msgstr "%s: Fehler beim Ändern der Felder\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot set SELinux context for home directory %s\n"
msgstr "%s: Verzeichnis %s kann nicht erstellt werden.\n"
#, c-format
msgid "%s: error while duplicating string in BTRFS check %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
msgstr "%s: %s-Home-Verzeichnis (%s) nicht gefunden\n"
#, fuzzy, c-format
#| msgid "%s: failed to allocate memory: %s\n"
msgid "%s: failed to create BTRFS subvolume: %s\n"
msgstr "%s: Speicherreservierung fehlgeschlagen: %s\n"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr "%s: Verzeichnis %s kann nicht erstellt werden.\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on `%s' failed: %m\n"
msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chmod on `%s' failed: %m\n"
msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on '%s' failed: %m\n"
msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
#, c-format
msgid "%s: cannot reset SELinux file creation context\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Cannot create SELinux login mapping for %s\n"
msgid "%s: cannot set SELinux context for mailbox file %s\n"
msgstr "SELinux-Login-Zuordnung für %s kann nicht erstellt werden\n"
msgid "Creating mailbox file"
msgstr "Erzeugen der Mailbox-Datei"
@@ -2234,6 +2658,17 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr "Zugriffsrechte der Mailboxdatei werden gesetzt"
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d "
"range.\n"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"
msgstr ""
#, c-format
msgid "%s: user '%s' already exists\n"
msgstr "%s: Benutzer »%s« existiert bereits\n"
@@ -2269,10 +2704,13 @@ msgstr "%s: Benutzer kann nicht erstellt werden\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: Gruppe kann nicht erzeugt werden\n"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%s: warning: the home directory already exists.\n"
#| "Not copying any file from skel directory into it.\n"
msgid ""
"%s: warning: the home directory already exists.\n"
"Not copying any file from skel directory into it.\n"
"%s: warning: the home directory %s already exists.\n"
"%s: Not copying any file from skel directory into it.\n"
msgstr ""
"%s: Warnung: Das Home-Verzeichnis existiert bereits.\n"
"Es werden keine Dateien vom skel-Verzeichnis dorthin kopiert.\n"
@@ -2283,9 +2721,15 @@ msgstr ""
"%s: Warnung: Die SELinux-Benutzer-Zuordnung des Benutzernamens %s zu %s ist\n"
"fehlgeschlagen.\n"
#, fuzzy
#| msgid ""
#| " -f, --force force removal of files,\n"
#| " even if not owned by user\n"
msgid ""
" -f, --force force removal of files,\n"
" even if not owned by user\n"
" -f, --force force some actions that would fail "
"otherwise\n"
" e.g. removal of user still logged in\n"
" or files, even if not owned by the user\n"
msgstr ""
" -f, --force Entfernen von Dateien erzwingen, auch wenn\n"
" sie nicht Eigentum des zu löschenden\n"
@@ -2368,6 +2812,11 @@ msgstr ""
"%s: Verzeichnis %s wird nicht gelöscht (würde das Home-Verzeichnis des\n"
"Benutzers %s löschen).\n"
#, fuzzy, c-format
#| msgid "%s: error removing directory %s\n"
msgid "%s: error removing subvolume %s\n"
msgstr "%s: Fehler beim Löschen des Verzeichnisses %s\n"
#, c-format
msgid "%s: error removing directory %s\n"
msgstr "%s: Fehler beim Löschen des Verzeichnisses %s\n"
@@ -2482,6 +2931,10 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: Benutzer »%s« existiert bereits in %s.\n"
#, c-format
msgid "%s: homedir must be an absolute path\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: Ungültiges Datum »%s«\n"
@@ -2526,6 +2979,10 @@ msgstr ""
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: Ändern des Eigentümers vom Home-Verzeichnis fehlgeschlagen"
#, c-format
msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
msgstr ""
#, c-format
msgid "%s: warning: failed to completely remove old home directory %s"
msgstr ""
@@ -2562,7 +3019,7 @@ msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, fuzzy, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, fuzzy, c-format
@@ -2570,7 +3027,7 @@ msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, fuzzy, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, c-format
@@ -2663,3 +3120,6 @@ msgstr ""
#, c-format
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: tcb-Verzeichnis für %s konnte nicht gefunden werden\n"
#~ msgid "Username Port From Latest"
#~ msgstr "Benutzername Port Von Letzter"

440
po/dz.po
View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shadow 4.0.17\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"POT-Creation-Date: 2021-07-04 12:20+0200\n"
"PO-Revision-Date: 2006-06-01 15:28+0530\n"
"Last-Translator: Jurmey Rabgay <jur_gay@yahoo.com>\n"
"Language-Team: dzongkha <pgeyleg@dit.gov.bt>\n"
@@ -55,6 +55,15 @@ msgstr "ཆོག་ཡིག་:"
msgid "%s's Password: "
msgstr "%s's ཆོག་ཡིག་:"
#, fuzzy
#| msgid "Cannot open the password file.\n"
msgid "Cannot open audit interface.\n"
msgstr "ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr ""
#, c-format
msgid "[libsemanage]: %s\n"
msgstr ""
@@ -301,14 +310,18 @@ msgstr[1] ""
"མཇུག་མམ་གྱི་ནང་བསྐྱོད་འབད་ཞིནམ་ལས་ཚུར་ %dའཐུས་ཤོར་ཚུ།\n"
"མཇུག་མམ་ %s འདི་ %s གུ་ཨིན་པས།\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
msgstr ""
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr ""
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
msgid "%s: Encountered error attempting to use preferred GID: %s\n"
msgstr ""
#, fuzzy, c-format
@@ -316,31 +329,107 @@ msgid "%s: failed to allocate memory: %s\n"
msgstr "ཡིག་སྒྲོམ་བདག་པོ་སོར་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
#, fuzzy, c-format
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgid ""
"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
msgstr "%s: ཐུན་མོང་མ་ཡིན་པའི་ ཇི་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr "%s: ཐུན་མོང་མ་ཡིན་པའི་ ཇི་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
"(%lu)\n"
msgstr ""
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr ""
#, c-format
msgid "%s: Encountered error attempting to use preferred UID: %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid ""
"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Memory allocation failure\n"
msgstr "%s: པི་ཨེ་ཨེམ་ བདེན་བཤད་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, c-format
msgid "%s: subuid overflow detected.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: invalid field '%s'\n"
msgid "%s: Invalid map file %s specified\n"
msgstr "%s: ནུས་མེད་ཀྱི་ས་སྒོ་ '%s'།\n"
#, c-format
msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Could not seteuid to %d\n"
msgstr "རིམ་སྒྲིག་བརྡ་དོན་གྱི་དོན་ལུ་ བར་སྟོང་སྤྲོད་མ་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: Could not set caps\n"
msgstr "རིམ་སྒྲིག་བརྡ་དོན་གྱི་དོན་ལུ་ བར་སྟོང་སྤྲོད་མ་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: can't open file\n"
msgid "%s: snprintf failed!\n"
msgstr "%s: ཡིག་སྣོད་ཁ་ཕྱེ་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: open of %s failed: %s\n"
msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
msgid "%s: write to %s failed: %s\n"
msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
msgid "Too many logins.\n"
msgstr "ནང་བསྐྱོད་མང་དྲགས་པ།\n"
@@ -393,6 +482,27 @@ msgstr "ཆོག་ཡིག་སོར་ཡོདཔ།"
msgid "passwd: password updated successfully\n"
msgstr "ཆོག་ཡིག་:ཆོག་ཡིག་འདི་མཐར་འཁྱོལ་སྦེ་ དུས་མཐུན་བཟོ་ཡི།\n"
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: repository %s not supported\n"
msgid "%s: conversation type %d not supported.\n"
msgstr "%s: མཛོད་གནས་ %sའདི་ རྒྱབ་སྐྱོར་མ་འབད་བས།\n"
#, fuzzy, c-format
#| msgid "%s: pam_start: error %d\n"
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: pam_start:འཛོལ་བ་%d(_s)\n"
#, fuzzy, c-format
#| msgid "passwd: pam_start() failed, error %d\n"
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr "ཆོག་ཡིག་:པམ་སི་ཊཊི་()འཐུས་ཤོར་བྱུང་ཡོདཔ་(_s) འཛོལ་བ་ %d\n"
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "%s གི་དོན་ལུ་ བདེན་མེད་ཀྱི་ཆོག་ཡིག\n"
@@ -425,12 +535,23 @@ msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབ
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr ""
#, c-format
msgid ""
"Invalid ENCRYPT_METHOD value: '%s'.\n"
"Defaulting to DES.\n"
msgstr ""
#, c-format
msgid ""
"Unable to generate a salt from setting \"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding configuration for your selected hash "
"method.\n"
msgstr ""
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr "'%s'ལུ་ སི་ཌི་འབད་མ་ཚུགས་\n"
@@ -450,6 +571,15 @@ msgstr "ནུས་མེད་རྩ་བའི་སྣོད་ཐོ་ '%
msgid "Can't change root directory to '%s'\n"
msgstr " '%s'ལུ་ རྩ་བའི་སྣོད་ཐོ་བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
#, c-format
msgid "%s: user %s is currently logged in\n"
msgstr "%s: ལག་ལེན་པ་ %sའདི་ ད་ལྟོ་རང་ནང་བསྐྱོད་འབད་ཡི།\n"
#, fuzzy, c-format
#| msgid "%s: user %s is currently logged in\n"
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: ལག་ལེན་པ་ %sའདི་ ད་ལྟོ་རང་ནང་བསྐྱོད་འབད་ཡི།\n"
msgid "Unable to determine your tty name."
msgstr "ཁྱོད་ཀྱི་ཊི་ཊི་ཝའི་མིང་ གཏན་འབེབས་བཟོ་མ་ཚུགས།"
@@ -476,6 +606,9 @@ msgstr ""
msgid " -h, --help display this help message and exit\n"
msgstr ""
msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
msgstr ""
msgid ""
" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"
@@ -652,6 +785,10 @@ msgstr "ཁྱིམ་གྱི་བརྒྱུད་འཕྲིན།"
msgid "Other"
msgstr "གཞན།"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
msgid "Cannot change ID to root.\n"
msgstr "རྩ་བ་ལུ་ ཨའི་ཌི་ བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
@@ -703,10 +840,6 @@ msgstr "%s: '%s' འདི་ ཞབས་ཏོག་སྤྱོད་མི
msgid "Changing the user information for %s\n"
msgstr "%sགི་དོན་ལུ་ ལག་ལེན་པའི་བརྡ་དོན་ བསྒྱུར་བཅོས་འབད་དོ།\n"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
#, fuzzy, c-format
msgid ""
"Usage: %s [options]\n"
@@ -727,8 +860,8 @@ msgid ""
msgstr ""
msgid ""
" -s, --sha-rounds number of SHA rounds for the SHA*\n"
" crypt algorithms\n"
" -s, --sha-rounds number of rounds for the SHA, BCRYPT\n"
" or YESCRYPT crypt algorithms\n"
msgstr ""
#, fuzzy, c-format
@@ -1003,6 +1136,17 @@ msgstr ""
msgid " -r, --system create a system account\n"
msgstr ""
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr ""
msgid " -U, --users USERS list of user members of this group\n"
msgstr ""
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "Invalid member username %s\n"
msgstr "ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'\n"
#, fuzzy, c-format
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: %s འདི་ ནུས་ཅན་གྱི་སྡེ་ཚན་མིང་མེན་པས།\n"
@@ -1027,6 +1171,11 @@ msgstr ""
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: ཁྱོད་ཀྱི་ལག་ལེན་པའི་མིང་ གཏན་འབེབས་བཟོ་མི་ཚུགས།\n"
msgid ""
" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
"* files\n"
msgstr ""
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
@@ -1102,6 +1251,12 @@ msgstr ""
msgid "%s: only root can use the -g/--group option\n"
msgstr ""
msgid ""
" -a, --append append the users mentioned by -U option to "
"the group \n"
" without removing existing user members\n"
msgstr ""
msgid " -g, --gid GID change the group ID to GID\n"
msgstr ""
@@ -1151,6 +1306,10 @@ msgstr ""
msgid " -s, --sort sort entries by UID\n"
msgstr ""
msgid ""
" -S, --silence-warnings silence controversial/paranoid warnings\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: -s དང་ -r གཉིས་མཐུན་འགྱུར་ཅན་མེན།\n"
@@ -1256,8 +1415,10 @@ msgid ""
" -u, --user LOGIN print lastlog record of the specified LOGIN\n"
msgstr ""
msgid "Username Port From Latest"
msgstr "ལག་ལེན་པའི་མིང་ འདྲེན་ལམ་ ལས་ མཇུག་མཐའ།"
#, fuzzy, c-format
#| msgid "Username Port Latest"
msgid "Username Port From%*sLatest\n"
msgstr "ལག་ལེན་པའི་མིང་ འདྲེན་ལམ་ མཇུག་མཐའ།"
msgid "Username Port Latest"
msgstr "ལག་ལེན་པའི་མིང་ འདྲེན་ལམ་ མཇུག་མཐའ།"
@@ -1265,10 +1426,22 @@ msgstr "ལག་ལེན་པའི་མིང་ འདྲ
msgid "**Never logged in**"
msgstr "**ནམ་ཡང་ནང་བསྐྱོད་མ་འབད་**"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthe output might be incorrect.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthey will not be updated.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མ་ཚུགས།\n"
@@ -1397,6 +1570,50 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr "ལག་ལེན་པ་: id\n"
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: can't open group file\n"
msgid "%s: couldn't open process setgroups: %s\n"
msgstr "%s: སྡེ་ཚན་ལྡེ་མིག་ ཁ་ཕྱེ་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: failed to read setgroups: %s\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
msgid "%s: failed to seek setgroups: %s\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
#, fuzzy, c-format
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་ཐོ་'%s'།\n"
#, fuzzy, c-format
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid "Usage: newgrp [-] [group]\n"
msgstr "ལག་ལེན་: newgrp [-][ སྡེ་ཚན་]\n"
@@ -1422,6 +1639,24 @@ msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
msgid "too many groups\n"
msgstr "སྡེ་ཚན་མང་དྲགས་པ།\n"
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid " -b, --badnames allow bad names\n"
msgstr ""
msgid " -r, --system create system accounts\n"
msgstr ""
@@ -1461,6 +1696,10 @@ msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
msgid "%s: line %d: can't update password\n"
msgstr "%s: གྲལ་ཐིག་ %d: ཆོག་ཡིག་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: line %d: homedir must be an absolute path\n"
msgstr "%s: གྲལ་ཐིག་ %d: mkdir འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: གྲལ་ཐིག་ %d: mkdir འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
@@ -1591,7 +1830,7 @@ msgid "%s: repository %s not supported\n"
msgstr "%s: མཛོད་གནས་ %sའདི་ རྒྱབ་སྐྱོར་མ་འབད་བས།\n"
#, c-format
msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr ""
#, c-format
@@ -1736,9 +1975,11 @@ msgstr ""
msgid "Session terminated, terminating shell..."
msgstr ""
#, c-format
msgid " ...killed.\n"
msgstr ""
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr ""
@@ -1751,7 +1992,7 @@ msgstr "%s: %s\n"
#, fuzzy
msgid ""
"Usage: su [options] [LOGIN]\n"
"Usage: su [options] [-] [username [args]]\n"
"\n"
"Options:\n"
" -c, --command COMMAND pass COMMAND to the invoked shell\n"
@@ -1762,6 +2003,7 @@ msgid ""
" keep the same shell\n"
" -s, --shell SHELL use SHELL instead of the default in passwd\n"
"\n"
"If no username is given, assume root.\n"
msgstr ""
"ལག་ལེན་: ཟླ་ [གདམ་ཁ་ཚུ་] [ནང་བསྐྱོད་]\n"
"\n"
@@ -1783,6 +2025,14 @@ msgstr ""
"%s: %s\n"
"(སྣང་མེད་བཞག་ཡོདཔ་)\n"
#, c-format
msgid "Password field is empty, this is forbidden for all accounts.\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for super-user.\n"
msgstr ""
#, c-format
msgid "You are not authorized to su %s\n"
msgstr "ཁྱོད་ ཟླ་%sལུ་ དབང་སྤྲོད་མ་འབད།\n"
@@ -1847,6 +2097,11 @@ msgstr ""
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot create new defaults file\n"
msgid "%s: cannot create new defaults file: %s\n"
msgstr "%s: སྔོན་སྒྲིག་ཡིག་སྣོད་གསརཔ་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
msgid "%s: cannot create new defaults file\n"
msgstr "%s: སྔོན་སྒྲིག་ཡིག་སྣོད་གསརཔ་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
@@ -1875,6 +2130,10 @@ msgstr "%s: སྡེ་ཚན་ '%s' འདི་ ཨེན་ཨའི་ཨ
msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: སྡེ་ཚན་མང་རབས་ཅིག་གསལ་བཀོད་འབད་ཡོདཔ་(མང་མཐའ་ %d)།\n"
#, fuzzy, c-format
msgid "%s: Out of memory. Cannot find group '%s'.\n"
msgstr "%s: དུས་མཐུན་སྡེ་ཚན་ནང་ལུ་ དྲན་ཚད་ལས་བརྒལ་བ།\n"
#, fuzzy, c-format
msgid ""
"Usage: %s [options] LOGIN\n"
@@ -1884,12 +2143,19 @@ msgid ""
"Options:\n"
msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
msgid " --badnames do not check for bad names\n"
msgstr ""
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
"the\n"
" new account\n"
msgstr ""
msgid ""
" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
msgstr ""
msgid " -c, --comment COMMENT GECOS field of the new account\n"
msgstr ""
@@ -1992,26 +2258,102 @@ msgstr "%s: ནུས་མེད་ཀྱི་ས་སྒོ་ '%s'།\n"
msgid "%s: invalid shell '%s'\n"
msgstr "%s: ནུས་མེད་ཤལ་ '%s'།\n"
#, fuzzy, c-format
msgid "%s: Warning: missing or non-executable shell '%s'\n"
msgstr "%s: ཉེན་བརྡ་: %s འདི་ %s གིས་ བདག་དབང་བཟུངམ་མེན།\n"
#, fuzzy, c-format
#| msgid "%s: cannot rewrite password file\n"
msgid "%s: -Z cannot be used with --prefix\n"
msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལོག་འབྲི་མི་བཏུབ།\n"
#, c-format
msgid "%s: -Z requires SELinux enabled kernel\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr "%s: ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'།\n"
#, fuzzy, c-format
msgid "%s: failed to open the faillog file for UID %lu: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: failed to close the faillog file for UID %lu: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: failed to open the lastlog file for UID %lu: %s\n"
msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མ་ཚུགས།\n"
#, c-format
msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: failed to close the lastlog file for UID %lu: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: error updating files\n"
msgid "%s: error while duplicating string %s\n"
msgstr "%s: ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་སྐབས་ལུ་ འཛོལ་བ།\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot set SELinux context for home directory %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
msgid "%s: error while duplicating string in BTRFS check %s\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་ '%s'།\n"
#, fuzzy, c-format
msgid "%s: failed to create BTRFS subvolume: %s\n"
msgstr "ཡིག་སྒྲོམ་བདག་པོ་སོར་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
msgid "%s: warning: chown on `%s' failed: %m\n"
msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
msgid "%s: warning: chmod on `%s' failed: %m\n"
msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
msgid "%s: warning: chown on '%s' failed: %m\n"
msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, c-format
msgid "%s: cannot reset SELinux file creation context\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: cannot set SELinux context for mailbox file %s\n"
msgstr "%s གི་དོན་ལུ་ རྒས་པའི་བརྡ་དོན་བསྒྱུར་བཅོས་འབད་དོ།\n"
msgid "Creating mailbox file"
msgstr "ཡིག་སྒྲོམ་ཡིག་སྣོད་ གསར་བསྐྲུན་འབད་དོ།"
@@ -2023,6 +2365,17 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr "ཡིག་སྒྲོམ་ཡིག་སྣོད་གྱི་གནང་བ་ གཞི་སྒྲིག་འབད་དོ།"
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d "
"range.\n"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: user '%s' already exists\n"
msgstr "%s: ལག་ལེན་པ་ %sཡོདཔ་ཨིན།\n"
@@ -2058,10 +2411,13 @@ msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%s: warning: the home directory already exists.\n"
#| "Not copying any file from skel directory into it.\n"
msgid ""
"%s: warning: the home directory already exists.\n"
"Not copying any file from skel directory into it.\n"
"%s: warning: the home directory %s already exists.\n"
"%s: Not copying any file from skel directory into it.\n"
msgstr ""
"%s: ཉེན་བརྡ་:ཁྱིམ་གྱི་སྣོད་ཐོ་འདི་ཧེ་མ་ལས་རང་ཡོདཔ་ཨིན།\n"
"འདི་ནང་ལུ་ སི་ཀེལ་སྣོད་ཐོ་ནང་ལས་ ཡིག་སྣོད་ག་ཅི་ཡང་འདྲ་བཤུས་མ་བརྐྱབ་ནི།\n"
@@ -2071,8 +2427,10 @@ msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
msgstr ""
msgid ""
" -f, --force force removal of files,\n"
" even if not owned by user\n"
" -f, --force force some actions that would fail "
"otherwise\n"
" e.g. removal of user still logged in\n"
" or files, even if not owned by the user\n"
msgstr ""
msgid " -r, --remove remove home directory and mail spool\n"
@@ -2141,6 +2499,11 @@ msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་
msgid "%s: not removing directory %s (would remove home of user %s)\n"
msgstr "%s: སྣོད་ཐོ་ %sའདི་ རྩ་བསྐྲད་གཏང་ནི་མེད་(ལག་ལེན་པ་%sགི་ཁྱིམ་འདི་ རྩ་བསྐྲད་གཏང་འོང་)།\n"
#, fuzzy, c-format
#| msgid "%s: error removing directory %s\n"
msgid "%s: error removing subvolume %s\n"
msgstr "%s: སྣོད་ཐོ་%s རྩ་བསྐྲད་གཏང་པའི་སྐབས་ལུ་ འཛོལ་བ།\n"
#, c-format
msgid "%s: error removing directory %s\n"
msgstr "%s: སྣོད་ཐོ་%s རྩ་བསྐྲད་གཏང་པའི་སྐབས་ལུ་ འཛོལ་བ།\n"
@@ -2229,6 +2592,10 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: ལག་ལེན་པ་ %sཡོདཔ་ཨིན།\n"
#, c-format
msgid "%s: homedir must be an absolute path\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: ནུས་མེད་ཚེས་གྲངས་ '%s'།\n"
@@ -2271,6 +2638,10 @@ msgstr ""
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, c-format
msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
msgstr ""
#, c-format
msgid "%s: warning: failed to completely remove old home directory %s"
msgstr ""
@@ -2303,7 +2674,7 @@ msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
@@ -2311,7 +2682,7 @@ msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, c-format
@@ -2408,6 +2779,9 @@ msgstr "%s: %sསོར་ཆུད་འབད་མ་ཚུགས་: %s (ཁ
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་ཐོ་'%s'།\n"
#~ msgid "Username Port From Latest"
#~ msgstr "ལག་ལེན་པའི་མིང་ འདྲེན་ལམ་ ལས་ མཇུག་མཐའ།"
#, fuzzy
#~| msgid "Usage: %s [input]\n"
#~ msgid ""
@@ -2663,9 +3037,6 @@ msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་
#~ " -r, --remove\t\t\t ཁྱིམ་གྱི་སྣོད་ཐོ་དང་ཡིག་འཕྲིན་འཕྲལ་གསོག་རྩ་བསྐྲད་གཏང་།\n"
#~ "\n"
#~ msgid "%s: user %s is currently logged in\n"
#~ msgstr "%s: ལག་ལེན་པ་ %sའདི་ ད་ལྟོ་རང་ནང་བསྐྱོད་འབད་ཡི།\n"
#, fuzzy
#~ msgid ""
#~ "Usage: usermod [options] LOGIN\n"
@@ -2969,9 +3340,6 @@ msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་
#~ msgid "Cannot lock the password file; try again later.\n"
#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས་ ཤུལ་ལས་ལོག་སྟེ་འབད་རྩོལ་སྐྱེད།\n"
#~ msgid "Cannot open the password file.\n"
#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
#~ msgid "Error updating the password entry.\n"
#~ msgstr "ཆོག་ཡིག་ཐོ་བཀོད་དུས་མཐུན་འབདཝ་ད་ལུ་ འཛོལ་བ།\n"
@@ -2984,9 +3352,6 @@ msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་
#~ msgid "%s: can't lock group file\n"
#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
#~ msgid "%s: can't open group file\n"
#~ msgstr "%s: སྡེ་ཚན་ལྡེ་མིག་ ཁ་ཕྱེ་མི་ཚུགས།\n"
#~ msgid "%s: can't lock gshadow file\n"
#~ msgstr "%s: gshadowཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
@@ -3050,9 +3415,6 @@ msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་
#~ msgid "%s: can't get shadow lock\n"
#~ msgstr "%s: གྱིབ་མ་ལྡེ་མིག་ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
#~ msgid "%s: can't open file\n"
#~ msgstr "%s: ཡིག་སྣོད་ཁ་ཕྱེ་མི་ཚུགས།\n"
#~ msgid "%s: can't re-write shadow file\n"
#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ལོག་འབྲི་མི་ཚུགས།\n"
@@ -3203,9 +3565,6 @@ msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་
#~ msgid "%s: can't open files\n"
#~ msgstr "%s: ཡིག་སྣོད་ཚུ་ཁ་ཕྱེ་མི་ཚུགས།\n"
#~ msgid "%s: error updating files\n"
#~ msgstr "%s: ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་སྐབས་ལུ་ འཛོལ་བ།\n"
#~ msgid "%s: can't update passwd entry for %s\n"
#~ msgstr "%s: %sགི་དོན་ལུ་ ཆོག་ཡིག་ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
@@ -3237,9 +3596,6 @@ msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་
#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
#~ msgstr "%s: དུས་མཐུན་gshadowནང་ལུ་ དྲན་ཚད་ལས་བརྒལ་བ།\n"
#~ msgid "%s: cannot rewrite password file\n"
#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལོག་འབྲི་མི་བཏུབ།\n"
#~ msgid "%s: cannot rewrite shadow password file\n"
#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལོག་འབྲི་མི་བཏུབ།\n"

533
po/el.po
View File

@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shadow_po_el\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"POT-Creation-Date: 2021-07-04 12:20+0200\n"
"PO-Revision-Date: 2012-01-21 00:22+0200\n"
"Last-Translator: Thomas Vasileiou <thomas-v@wildmail.com>\n"
"Language-Team: Greek <debian-l10n-greek@lists.debian.org>\n"
@@ -57,6 +57,15 @@ msgstr "Συνθηματικό: "
msgid "%s's Password: "
msgstr "Του %s το Συνθηματικό: "
#, fuzzy
#| msgid "Cannot open audit interface - aborting.\n"
msgid "Cannot open audit interface.\n"
msgstr "Αδυναμία εγκαθίδρυσης διεπαφής ελέγχου - ματαίωσης.\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr ""
#, c-format
msgid "[libsemanage]: %s\n"
msgstr "[libsemanage]: %s\n"
@@ -310,10 +319,6 @@ msgstr[1] ""
"%d αποτυχίες από την τελευταία είσοδο.\n"
" Η τελευταία ήταν στις %s στο %s.\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Μη έγκυρη διαμόρφωση: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
@@ -322,22 +327,63 @@ msgstr ""
"%s: Μη έγκυρη διαμόρφωση: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: Μη έγκυρη διαμόρφωση: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred GID: %s\n"
msgstr ""
#, c-format
msgid "%s: failed to allocate memory: %s\n"
msgstr "%s: αποτυχία εκχώρησης μνήμης: %s\n"
#, c-format
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgid ""
"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
msgstr ""
"%s: αδυναμία λήψης μοναδικού GID συστήματος (δεν υπάρχουν διαθέσιμα GID)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
msgstr "%s: αδυναμία λήψης μοναδικού GID (δεν υπάρχουν διαθέσιμα GID)\n"
#, c-format
msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr "%s: αδυναμία λήψης μοναδικού GID (δεν υπάρχουν διαθέσιμα GID)\n"
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Μη έγκυρη διαμόρφωση: UID_MIN (%lu), UID_MAX (%lu)\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
"%s: Μη έγκυρη διαμόρφωση: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
"%s: Μη έγκυρη διαμόρφωση: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
"(%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
#, c-format
msgid ""
@@ -348,14 +394,76 @@ msgstr ""
"(%lu)\n"
#, c-format
msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Μη έγκυρη διαμόρφωση: UID_MIN (%lu), UID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred UID: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid ""
"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
msgstr ""
"%s: αδυναμία λήψης μοναδικού UID συστήματος (δεν υπάρχουν διαθέσιμα UID)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
msgstr "%s: αδυναμία λήψης μοναδικού UID (δεν υπάρχουν διαθέσιμα UID)\n"
#, c-format
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: αδυναμία λήψης μοναδικού UID (δεν υπάρχουν διαθέσιμα UID)\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Authentication failure\n"
msgid "%s: Memory allocation failure\n"
msgstr "%s: Αποτυχία εξακρίβωσης\n"
#, c-format
msgid "%s: subuid overflow detected.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: invalid field '%s'\n"
msgid "%s: Invalid map file %s specified\n"
msgstr "%s: Μη έγκυρο πεδίο '%s'\n"
#, c-format
msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not seteuid to %d\n"
msgstr "Αδυναμία ρύθμισης του ονόματος χρήστη %s\n"
#, fuzzy, c-format
#| msgid "Could not set name for %s\n"
msgid "%s: Could not set caps\n"
msgstr "Αδυναμία ρύθμισης του ονόματος χρήστη %s\n"
#, fuzzy, c-format
#| msgid "%s: can't open file\n"
msgid "%s: snprintf failed!\n"
msgstr "%s: αδυναμία ανοίγματος του αρχείου\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: open of %s failed: %s\n"
msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: write to %s failed: %s\n"
msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
msgid "Too many logins.\n"
msgstr "Πολλές είσοδοι στο σύστημα.\n"
@@ -407,6 +515,27 @@ msgstr "passwd: Το συνθηματικό παρέμεινε όπως είχε
msgid "passwd: password updated successfully\n"
msgstr "passwd: το συνθηματικό ενημερώθηκε επιτυχώς\n"
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: repository %s not supported\n"
msgid "%s: conversation type %d not supported.\n"
msgstr "%s: η αποθήκη %s δεν υποστηρίζεται\n"
#, fuzzy, c-format
#| msgid "%s: pam_start: error %d\n"
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: pam_start: σφάλμα %d\n"
#, fuzzy, c-format
#| msgid "passwd: pam_start() failed, error %d\n"
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr "συνθηματικό: pam_start() απέτυχε, σφάλμα %d\n"
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "Εσφαλμένο συνθηματικό για %s.\n"
@@ -440,6 +569,10 @@ msgid "%s: unable to chroot to directory %s: %s\n"
msgstr ""
"%s: αδυναμία αλλαγής του φαινομενικού γονικού καταλόγου (chroot) %s: %s\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr ""
#, c-format
msgid ""
"Invalid ENCRYPT_METHOD value: '%s'.\n"
@@ -448,6 +581,13 @@ msgstr ""
"Μη έγκυρη τιμή για το ENCRYPT_METHOD: '%s'.\n"
"Επιλέγεται η προκαθορισμένη DES.\n"
#, c-format
msgid ""
"Unable to generate a salt from setting \"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding configuration for your selected hash "
"method.\n"
msgstr ""
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr "Αδυναμία αλλαγής καταλόγου στον '%s'\n"
@@ -467,6 +607,15 @@ msgstr "Μη έγκυρος πρωταρχικός κατάλογος '%s'\n"
msgid "Can't change root directory to '%s'\n"
msgstr "Αδυναμία αλλαγής του πρωταρχικού καταλόγου σε '%s'\n"
#, c-format
msgid "%s: user %s is currently logged in\n"
msgstr "%s: Ο χρήστης %s βρίσκεται στο σύστημα\n"
#, fuzzy, c-format
#| msgid "%s: user %s is currently logged in\n"
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: Ο χρήστης %s βρίσκεται στο σύστημα\n"
msgid "Unable to determine your tty name."
msgstr "Δεν είναι δυνατόν να καθοριστεί το όνομα tty."
@@ -501,6 +650,11 @@ msgstr ""
" -h, --help προβολή αυτού του μηνύματος βοήθειας και "
"έξοδος\n"
#, fuzzy
#| msgid " -g, --group edit group database\n"
msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
msgstr " -g, --group επεξεργασία βάσης δεδομένων ομάδων\n"
msgid ""
" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"
@@ -702,6 +856,10 @@ msgstr "Τηλέφωνο Οικίας"
msgid "Other"
msgstr "Άλλο"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: Πολύ μακριά πεδία\n"
msgid "Cannot change ID to root.\n"
msgstr "Αδυναμία αλλαγής ταυτότητας χρήστη σε root.\n"
@@ -753,10 +911,6 @@ msgstr "%s: '%s' είναι ο κύριος διακομιστής NIS γι'αυ
msgid "Changing the user information for %s\n"
msgstr "Αλλαγή πληροφοριών χρήστη για τον %s\n"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: Πολύ μακριά πεδία\n"
#, c-format
msgid ""
"Usage: %s [options]\n"
@@ -783,9 +937,13 @@ msgstr ""
" -m, --md5 κρυπτογράφηση το κειμένου του συνθηματικού\n"
" με χρήση του αλγόριθμου MD5\n"
#, fuzzy
#| msgid ""
#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
#| " crypt algorithms\n"
msgid ""
" -s, --sha-rounds number of SHA rounds for the SHA*\n"
" crypt algorithms\n"
" -s, --sha-rounds number of rounds for the SHA, BCRYPT\n"
" or YESCRYPT crypt algorithms\n"
msgstr ""
" -s, --sha-rounds αριθμός κύκλων SHA για τους \n"
" αλγόριθμους κρυπτογράφησης SHA*\n"
@@ -1103,6 +1261,23 @@ msgstr ""
msgid " -r, --system create a system account\n"
msgstr " -r, --system δημιουργία λογαριασμού συστήματος\n"
#, fuzzy
#| msgid " -R, --root CHROOT_DIR directory to chroot into\n"
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr ""
" -R, --root ΚΑΤΑΛΟΓΟΣ_CHROOT κατάλογος στον οποίο να εφαρμοστεί "
"chroot\n"
#, fuzzy
#| msgid " -l, --list list the members of the group\n"
msgid " -U, --users USERS list of user members of this group\n"
msgstr " -l, --list λίστα όλων των μελών της ομάδας\n"
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "Invalid member username %s\n"
msgstr "Μη έγκυρο όνομα χρήστη '%s'\n"
#, c-format
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: Το '%s' δεν είναι έγκυρο όνομα ομάδας\n"
@@ -1127,6 +1302,11 @@ msgstr "%s: το GID '%lu' υπάρχει\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Δεν ήταν δυνατή η ρύθμιση της υπηρεσίας εκκαθάρισης.\n"
msgid ""
" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
"* files\n"
msgstr ""
#, fuzzy
msgid ""
" -f, --force delete group even if it is the primary group "
@@ -1214,6 +1394,23 @@ msgstr "%s: το όνομα της ομάδας σας δεν ταιριάζει
msgid "%s: only root can use the -g/--group option\n"
msgstr "%s: μόνο ο root μπορεί να χρησιμοποιήσει την επιλογή -g/--group\n"
#, fuzzy
#| msgid ""
#| " -a, --append append the user to the supplemental "
#| "GROUPS\n"
#| " mentioned by the -G option without "
#| "removing\n"
#| " the user from other groups\n"
msgid ""
" -a, --append append the users mentioned by -U option to "
"the group \n"
" without removing existing user members\n"
msgstr ""
" -a, --append προσθήκη του χρήστη στις συμπληρωματικές "
"ΟΜΑΔΕΣ\n"
" που προσδιορίζονται από την επιλογή -G, \n"
" χωρίς να διαγράφεται από τις άλλες ομάδες\n"
msgid " -g, --gid GID change the group ID to GID\n"
msgstr " -g, --gid GID αλλαγή του ID της ομάδας σε GID\n"
@@ -1274,6 +1471,10 @@ msgstr ""
msgid " -s, --sort sort entries by UID\n"
msgstr " -s, --sort ταξινόμηση εγγραφών κατά UID\n"
msgid ""
" -S, --silence-warnings silence controversial/paranoid warnings\n"
msgstr ""
#, c-format
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: -s και -r είναι ασύμβατα\n"
@@ -1393,8 +1594,10 @@ msgstr ""
" -u, --user ΟΝΟΜΑ προβολή των εγγραφών του lastlog για το "
"συγκεκριμένο ΟΝΟΜΑ\n"
msgid "Username Port From Latest"
msgstr "Όνομα_Χρήστη Θύρα Από Τελευταία"
#, fuzzy, c-format
#| msgid "Username Port Latest"
msgid "Username Port From%*sLatest\n"
msgstr "Όνομα_Χρήστη Θύρα Τελευταία"
msgid "Username Port Latest"
msgstr "Όνομα_Χρήστη Θύρα Τελευταία"
@@ -1402,10 +1605,22 @@ msgstr "Όνομα_Χρήστη Θύρα Τελευταία"
msgid "**Never logged in**"
msgstr "**Καμιά είσοδος στο σύστημα**"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthe output might be incorrect.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Aδυναμία ανάκτησης της εγγραφής UID %lu\n"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthey will not be updated.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: αδυναμία ανανέωσης αρχείου συνθηματικών\n"
@@ -1535,6 +1750,55 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr "Χρήση: logoutd\n"
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: can't open group file\n"
msgid "%s: couldn't open process setgroups: %s\n"
msgstr "%s: αδυναμία ανοίγματος του αρχείου ομάδων\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to read setgroups: %s\n"
msgstr "%s: αποτυχία απομάκρυνσης του %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to seek setgroups: %s\n"
msgstr "%s: αποτυχία απομάκρυνσης του %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to unlock %s\n"
msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "%s: Αποτυχία ξεκλειδώματος %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to find tcb directory for %s\n"
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
#, fuzzy, c-format
#| msgid "%s: Failed to create tcb directory for %s\n"
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: Αδυναμία δημιουργίας tcb καταλόγου για το χρήστη %s\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid "Usage: newgrp [-] [group]\n"
msgstr "Χρήση: newgrp [-] [ομάδα]\n"
@@ -1559,6 +1823,26 @@ msgstr "%s: Ο GID '%lu' δεν υπάρχει\n"
msgid "too many groups\n"
msgstr "πάρα πολλές ομάδες\n"
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
#, fuzzy
#| msgid " -q, --quiet quiet mode\n"
msgid " -b, --badnames allow bad names\n"
msgstr " -q, --quiet σιωπηλή λειτουργία\n"
msgid " -r, --system create system accounts\n"
msgstr " -r, --system δημιουργία λογαριασμών συστήματος\n"
@@ -1601,6 +1885,11 @@ msgstr "%s: γραμμή %d: Ο χρήστης '%s' δεν υπάρχει στο
msgid "%s: line %d: can't update password\n"
msgstr "%s: γραμμή %d: αδυναμία ανανέωση συνθηματικού\n"
#, fuzzy, c-format
#| msgid "%s: line %d: mkdir %s failed: %s\n"
msgid "%s: line %d: homedir must be an absolute path\n"
msgstr "%s: γραμμή %d: αποτυχία δημιουργίας καταλόγου %s (mkdir) : %s\n"
#, c-format
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: γραμμή %d: αποτυχία δημιουργίας καταλόγου %s (mkdir) : %s\n"
@@ -1766,8 +2055,9 @@ msgstr ""
msgid "%s: repository %s not supported\n"
msgstr "%s: η αποθήκη %s δεν υποστηρίζεται\n"
#, c-format
msgid "%s: %s is not authorized to change the password of %s\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr ""
"%s: ο χρήστης %s δεν είναι εξουσιοδοτημένος να αλλάξει το συνθηματικό του "
"%s\n"
@@ -1926,9 +2216,11 @@ msgstr "%s: δυσλειτουργία μασκαρίσμος του σήματ
msgid "Session terminated, terminating shell..."
msgstr "Συνεδρία τερματίστηκε, τερματισμός φλοιού..."
#, c-format
msgid " ...killed.\n"
msgstr " ...σκοτώθηκε.\n"
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr ""
@@ -1939,8 +2231,22 @@ msgstr " ...τερματίστηκε.\n"
msgid "%s: %s\n"
msgstr "%s: %s\n"
#, fuzzy
#| msgid ""
#| "Usage: su [options] [LOGIN]\n"
#| "\n"
#| "Options:\n"
#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
#| " -h, --help display this help message and exit\n"
#| " -, -l, --login make the shell a login shell\n"
#| " -m, -p,\n"
#| " --preserve-environment do not reset environment variables, and\n"
#| " keep the same shell\n"
#| " -s, --shell SHELL use SHELL instead of the default in "
#| "passwd\n"
#| "\n"
msgid ""
"Usage: su [options] [LOGIN]\n"
"Usage: su [options] [-] [username [args]]\n"
"\n"
"Options:\n"
" -c, --command COMMAND pass COMMAND to the invoked shell\n"
@@ -1951,6 +2257,7 @@ msgid ""
" keep the same shell\n"
" -s, --shell SHELL use SHELL instead of the default in passwd\n"
"\n"
"If no username is given, assume root.\n"
msgstr ""
"Χρήση: su [επιλογές] [ΟΝΟΜΑ]\n"
"\n"
@@ -1974,6 +2281,14 @@ msgstr ""
"%s: %s\n"
"(Αγνοήθηκε)\n"
#, c-format
msgid "Password field is empty, this is forbidden for all accounts.\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for super-user.\n"
msgstr ""
#, c-format
msgid "You are not authorized to su %s\n"
msgstr "Δεν έχετε άδεια για su %s\n"
@@ -2038,6 +2353,11 @@ msgstr "%s: το %s δημιουργήθηκε, αλλά δεν μπορεί ν
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr "%s: η %s διαμόρφωση στο %s θα αγνοηθεί\n"
#, fuzzy, c-format
#| msgid "%s: cannot create new defaults file\n"
msgid "%s: cannot create new defaults file: %s\n"
msgstr "%s: αδυναμία δημιουργίας νέου αρχείου προκαθορισμένων ρυθμίσεων\n"
#, c-format
msgid "%s: cannot create new defaults file\n"
msgstr "%s: αδυναμία δημιουργίας νέου αρχείου προκαθορισμένων ρυθμίσεων\n"
@@ -2066,6 +2386,11 @@ msgstr "%s: Η ομάδα '%s' είναι NIS ομάδα.\n"
msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: Προσδιορίστηκαν υπερβολικές ομάδες (μεγ. %d).\n"
#, fuzzy, c-format
#| msgid "%s: Out of memory. Cannot update %s.\n"
msgid "%s: Out of memory. Cannot find group '%s'.\n"
msgstr "%s: Δεν υπάρχει ελεύθερη μνήμη. Αδυναμία ενημέρωσης του %s.\n"
#, c-format
msgid ""
"Usage: %s [options] LOGIN\n"
@@ -2080,6 +2405,13 @@ msgstr ""
"\n"
"Επιλογές:\n"
#, fuzzy
#| msgid " -s, --shadow edit shadow or gshadow database\n"
msgid " --badnames do not check for bad names\n"
msgstr ""
" -s, --shadow επεξεργασία βάσης δεδομένων shadow ή "
"gshadow\n"
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
"the\n"
@@ -2089,6 +2421,10 @@ msgstr ""
"του χρήστη γιατον\n"
" καινούργιο λογαριασμό\n"
msgid ""
" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
msgstr ""
msgid " -c, --comment COMMENT GECOS field of the new account\n"
msgstr " -c, --comment ΣΧΟΛΙΟ πεδίο GECOS του νέου λογαριασμού\n"
@@ -2215,26 +2551,114 @@ msgstr "%s: Μη έγκυρο πεδίο '%s'\n"
msgid "%s: invalid shell '%s'\n"
msgstr "%s: Μη έγκυρος φλοιός '%s'\n"
#, fuzzy, c-format
#| msgid "%s: Warning: %s is not executable\n"
msgid "%s: Warning: missing or non-executable shell '%s'\n"
msgstr "%s: Προειδοποίηση: το %s δεν είναι εκτελέσιμο\n"
#, fuzzy, c-format
#| msgid "%s: cannot rewrite password file\n"
msgid "%s: -Z cannot be used with --prefix\n"
msgstr "%s: αδυναμία επανεγγραφής του αρχείου συνθηματικών\n"
#, c-format
msgid "%s: -Z requires SELinux enabled kernel\n"
msgstr "%s: -Z απαιτεί πυρήνα με ενεργοποιημένο το SELinux\n"
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr "%s: μη έγκυρο όνομα χρήστη '%s'\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to open the faillog file for UID %lu: %s\n"
msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο faillog του UID %lu: %s\n"
#, c-format
msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο faillog του UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to close the faillog file for UID %lu: %s\n"
msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο faillog του UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to open the lastlog file for UID %lu: %s\n"
msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο lastlog του UID %lu: %s\n"
#, c-format
msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο lastlog του UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to close the lastlog file for UID %lu: %s\n"
msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο lastlog του UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο faillog του UID %lu: %s\n"
#, fuzzy, c-format
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
#, fuzzy, c-format
#| msgid "%s: error updating files\n"
msgid "%s: error while duplicating string %s\n"
msgstr "%s: Σφάλμα κατά την ενημέρωση αρχείων\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot set SELinux context for home directory %s\n"
msgstr "%s: αδυναμία δημιουργίας καταλόγου %s\n"
#, c-format
msgid "%s: error while duplicating string in BTRFS check %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
msgstr "%s: %s ο αρχικός κατάλογος χρήστη (%s) δεν βρέθηκε\n"
#, fuzzy, c-format
#| msgid "%s: failed to allocate memory: %s\n"
msgid "%s: failed to create BTRFS subvolume: %s\n"
msgstr "%s: αποτυχία εκχώρησης μνήμης: %s\n"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr "%s: αδυναμία δημιουργίας καταλόγου %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on `%s' failed: %m\n"
msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chmod on `%s' failed: %m\n"
msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on '%s' failed: %m\n"
msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη %s (chown): %s\n"
#, c-format
msgid "%s: cannot reset SELinux file creation context\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Cannot create SELinux login mapping for %s\n"
msgid "%s: cannot set SELinux context for mailbox file %s\n"
msgstr "Αδυναμία δημιουργίας χαρτογράφησης σύνδεσης SELinux για το χρήστη %s\n"
msgid "Creating mailbox file"
msgstr "Δημιουργία αρχείου mailbox"
@@ -2246,6 +2670,17 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr "Ρύθμιση αδειών του αρχείου mailbox"
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d "
"range.\n"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"
msgstr ""
#, c-format
msgid "%s: user '%s' already exists\n"
msgstr "%s: Ο χρήστης '%s' υπάρχει ήδη\n"
@@ -2281,10 +2716,13 @@ msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: αδυναμία δημιουργίας ομάδας\n"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%s: warning: the home directory already exists.\n"
#| "Not copying any file from skel directory into it.\n"
msgid ""
"%s: warning: the home directory already exists.\n"
"Not copying any file from skel directory into it.\n"
"%s: warning: the home directory %s already exists.\n"
"%s: Not copying any file from skel directory into it.\n"
msgstr ""
"%s: προειδοποίηση: ο αρχικός κατάλογος χρήστη υπάρχει ήδη.\n"
"Δεν έγινε αντιγραφή σε αυτό οποιουδήποτε καταλόγου skel.\n"
@@ -2295,9 +2733,15 @@ msgstr ""
"%s: προειδοποίηση: απέτυχε η προσθήκη του χρήστη %s στην χαρτογράφηση "
"SELinux %s.\n"
#, fuzzy
#| msgid ""
#| " -f, --force force removal of files,\n"
#| " even if not owned by user\n"
msgid ""
" -f, --force force removal of files,\n"
" even if not owned by user\n"
" -f, --force force some actions that would fail "
"otherwise\n"
" e.g. removal of user still logged in\n"
" or files, even if not owned by the user\n"
msgstr ""
" -f, --force εξαναγκασμένη απομάκρυνση αρχείων,\n"
" ακόμα και εάν ο χρήστης δεν είναι ιδιοκτήτης "
@@ -2379,6 +2823,11 @@ msgstr ""
"%s: Δεν διαγράφεται ο κατάλογος %s (θα αφαιρούσε τον αρχικό κατάλογο του "
"χρήστη %s)\n"
#, fuzzy, c-format
#| msgid "%s: error removing directory %s\n"
msgid "%s: error removing subvolume %s\n"
msgstr "%s: Σφάλμα κατά την διαγραφή του καταλόγου %s\n"
#, c-format
msgid "%s: error removing directory %s\n"
msgstr "%s: Σφάλμα κατά την διαγραφή του καταλόγου %s\n"
@@ -2495,6 +2944,10 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: Ο χρήστης %s υπάρχει ήδη στο %s\n"
#, c-format
msgid "%s: homedir must be an absolute path\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: Μη έγκυρη ημερομηνία '%s'\n"
@@ -2541,6 +2994,10 @@ msgstr ""
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: Αδυναμία αλλαγής ιδιοκτήτη του αρχικού καταλόγου του χρήστη"
#, c-format
msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
msgstr ""
#, c-format
msgid "%s: warning: failed to completely remove old home directory %s"
msgstr ""
@@ -2578,7 +3035,7 @@ msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
#, fuzzy, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
#, fuzzy, c-format
@@ -2586,7 +3043,7 @@ msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
#, fuzzy, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
#, c-format
@@ -2679,6 +3136,9 @@ msgstr "%s: αδυναμία επαναφοράς %s: %s (οι αλλαγές ε
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
#~ msgid "Username Port From Latest"
#~ msgstr "Όνομα_Χρήστη Θύρα Από Τελευταία"
#~| msgid "Usage: %s [input]\n"
#~ msgid ""
#~ "Usage: vipw [options]\n"
@@ -2931,9 +3391,6 @@ msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
#~ msgid "No shell\n"
#~ msgstr "Δεν υπάρχει φλοιός\n"
#~ msgid "%s: user %s is currently logged in\n"
#~ msgstr "%s: Ο χρήστης %s βρίσκεται στο σύστημα\n"
#, fuzzy
#~ msgid ""
#~ "Usage: usermod [options] LOGIN\n"
@@ -3318,9 +3775,6 @@ msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
#~ msgid "%s: can't lock group file\n"
#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου ομάδων\n"
#~ msgid "%s: can't open group file\n"
#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου ομάδων\n"
#, fuzzy
#~ msgid "%s: can't lock gshadow file\n"
#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
@@ -3391,9 +3845,6 @@ msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
#~ msgstr ""
#~ "%s: Αδυναμία δημιουργίας κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
#~ msgid "%s: can't open file\n"
#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου\n"
#~ msgid "%s: can't re-write shadow file\n"
#~ msgstr "%s: αδυναμία επανεγγραφής αρχείου σκιωδών συνθηματικών\n"
@@ -3553,9 +4004,6 @@ msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
#~ msgid "%s: can't open files\n"
#~ msgstr "%s: αδυναμία ανοίγματος των αρχείων\n"
#~ msgid "%s: error updating files\n"
#~ msgstr "%s: Σφάλμα κατά την ενημέρωση αρχείων\n"
#~ msgid "%s: can't update passwd entry for %s\n"
#~ msgstr "%s: αδυναμία ανανέωσης καταχώρησης συνθηματικού για τον %s\n"
@@ -3588,9 +4036,6 @@ msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
#~ msgstr "%s: στο update_gshadow\n"
#~ msgid "%s: cannot rewrite password file\n"
#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου συνθηματικών\n"
#~ msgid "%s: cannot rewrite shadow password file\n"
#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου σκιωδών συνθηματικών\n"

526
po/es.po
View File

@@ -32,7 +32,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shadow 4.1.4.2\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"POT-Creation-Date: 2021-07-04 12:20+0200\n"
"PO-Revision-Date: 2011-11-23 23:56+0100\n"
"Last-Translator: Francisco Javier Cuadrado <fcocuadrado@gmail.com>\n"
"Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n"
@@ -81,6 +81,15 @@ msgstr "Contraseña: "
msgid "%s's Password: "
msgstr "Contraseña de %s: "
#, fuzzy
#| msgid "Cannot open audit interface - aborting.\n"
msgid "Cannot open audit interface.\n"
msgstr "No se pudo abrir la interfaz de auditoría, abortando.\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr ""
#, c-format
msgid "[libsemanage]: %s\n"
msgstr ""
@@ -329,10 +338,6 @@ msgstr[1] ""
"%d fallos desde el último acceso.\n"
"El último fue %s en %s.\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: configuración incorrecta: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
@@ -341,23 +346,64 @@ msgstr ""
"%s: configuración incorrecta: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr "%s: configuración incorrecta: GID_MIN (%lu), GID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred GID: %s\n"
msgstr ""
#, c-format
msgid "%s: failed to allocate memory: %s\n"
msgstr "%s: se produjo un fallo al reservar memoria: %s\n"
#, c-format
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgid ""
"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
msgstr ""
"%s: no se pudo obtener un GID único del sistema (no hay más GID "
"disponibles)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
msgstr "%s: no se pudo obtener un GID único (no hay más GID disponibles)\n"
#, c-format
msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr "%s: no se pudo obtener un GID único (no hay más GID disponibles)\n"
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: configuración incorrecta: UID_MIN (%lu), UID_MAX (%lu)\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
"%s: configuración incorrecta: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "%s: no se pudo crear el usuario\n"
#, fuzzy, c-format
#| msgid ""
#| "%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
#| "(%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
"%s: configuración incorrecta: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
"(%lu)\n"
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "%s: no se pudo crear el usuario\n"
#, c-format
msgid ""
@@ -368,15 +414,75 @@ msgstr ""
"(%lu)\n"
#, c-format
msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: configuración incorrecta: UID_MIN (%lu), UID_MAX (%lu)\n"
#, c-format
msgid "%s: Encountered error attempting to use preferred UID: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid ""
"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
msgstr ""
"%s: no se pudo obtener un UID único del sistema (no hay más UID "
"disponibles)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
msgstr "%s: no se pudo obtener un UID único (no hay más UID disponibles)\n"
#, c-format
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: no se pudo obtener un UID único (no hay más UID disponibles)\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Authentication failure\n"
msgid "%s: Memory allocation failure\n"
msgstr "%s: se produjo un fallo en la autenticación\n"
#, c-format
msgid "%s: subuid overflow detected.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: invalid field '%s'\n"
msgid "%s: Invalid map file %s specified\n"
msgstr "%s: campo «%s» incorrecto\n"
#, c-format
msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Could not seteuid to %d\n"
msgstr "No se pudo reservar espacio para la información de configuración.\n"
#, fuzzy, c-format
msgid "%s: Could not set caps\n"
msgstr "No se pudo reservar espacio para la información de configuración.\n"
#, fuzzy, c-format
#| msgid "%s: can't open file\n"
msgid "%s: snprintf failed!\n"
msgstr "%s: no se puede abrir el fichero\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: open of %s failed: %s\n"
msgstr "%s: línea %d: chown %s falló: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: write to %s failed: %s\n"
msgstr "%s: línea %d: chown %s falló: %s\n"
msgid "Too many logins.\n"
msgstr "Demasiados accesos.\n"
@@ -428,6 +534,27 @@ msgstr "passwd: no se ha cambiado la contraseña\n"
msgid "passwd: password updated successfully\n"
msgstr "passwd: contraseña actualizada correctamente\n"
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: repository %s not supported\n"
msgid "%s: conversation type %d not supported.\n"
msgstr "%s: repositorio %s no soportado\n"
#, fuzzy, c-format
#| msgid "%s: pam_start: error %d\n"
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: pam_start: error %d\n"
#, fuzzy, c-format
#| msgid "passwd: pam_start() failed, error %d\n"
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr "passwd: pam_start() falló, error %d\n"
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "Contraseña incorrecta para %s.\n"
@@ -460,6 +587,10 @@ msgstr "%s: no se pudo crear el directorio %s: %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: se produjo un fallo al crear el directorio tcb para %s\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr ""
#, c-format
msgid ""
"Invalid ENCRYPT_METHOD value: '%s'.\n"
@@ -468,6 +599,13 @@ msgstr ""
"El valor de ENCRYPT_METHOD no es válido: «%s».\n"
"Se usará DES, el valor predeterminado.\n"
#, c-format
msgid ""
"Unable to generate a salt from setting \"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding configuration for your selected hash "
"method.\n"
msgstr ""
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr "Incapaz de cambiar el directorio a «%s»\n"
@@ -487,6 +625,15 @@ msgstr "Directorio raíz «%s» incorrecto\n"
msgid "Can't change root directory to '%s'\n"
msgstr "No se pudo cambiar el directorio raíz a «%s»\n"
#, c-format
msgid "%s: user %s is currently logged in\n"
msgstr "%s: el usuario %s está actualmente identificado en el sistema\n"
#, fuzzy, c-format
#| msgid "%s: user %s is currently logged in\n"
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: el usuario %s está actualmente identificado en el sistema\n"
msgid "Unable to determine your tty name."
msgstr "No se pudo determinar el nombre de su tty."
@@ -519,6 +666,11 @@ msgid " -h, --help display this help message and exit\n"
msgstr ""
" -h, --help muestra este mensaje de ayuda y termina\n"
#, fuzzy
#| msgid " -g, --group edit group database\n"
msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
msgstr " -g, --group edita la base de datos del grupo\n"
msgid ""
" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"
@@ -711,6 +863,10 @@ msgstr "Teléfono de casa"
msgid "Other"
msgstr "Otro"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: campos demasiado largos\n"
msgid "Cannot change ID to root.\n"
msgstr ""
"No se puede cambiar el identificador al usuario del administrador («root»).\n"
@@ -763,10 +919,6 @@ msgstr "%s: «%s» es el NIS maestro para este cliente.\n"
msgid "Changing the user information for %s\n"
msgstr "Cambiando la información de usuario para %s\n"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: campos demasiado largos\n"
#, c-format
msgid ""
"Usage: %s [options]\n"
@@ -792,9 +944,13 @@ msgstr ""
" -m, --md5 cifra la contraseña en claro utilizando\n"
" el algoritmo MD5\n"
#, fuzzy
#| msgid ""
#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
#| " crypt algorithms\n"
msgid ""
" -s, --sha-rounds number of SHA rounds for the SHA*\n"
" crypt algorithms\n"
" -s, --sha-rounds number of rounds for the SHA, BCRYPT\n"
" or YESCRYPT crypt algorithms\n"
msgstr ""
" -s, --sha-rounds número de rondas SHA para los algoritmos\n"
" de cifrado SHA*\n"
@@ -1110,6 +1266,19 @@ msgstr ""
msgid " -r, --system create a system account\n"
msgstr " -r, --system crea una cuenta del sistema\n"
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr ""
#, fuzzy
#| msgid " -l, --list list the members of the group\n"
msgid " -U, --users USERS list of user members of this group\n"
msgstr " -l, --list lista los miembros del grupo\n"
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "Invalid member username %s\n"
msgstr "nombre de usuario «%s» incorrecto\n"
#, c-format
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: «%s» no es un nombre de grupo válido\n"
@@ -1134,6 +1303,11 @@ msgstr "%s: el GID «%lu» ya existe\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: no se pudo determinar su nombre de usuario.\n"
msgid ""
" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
"* files\n"
msgstr ""
#, fuzzy
msgid ""
" -f, --force delete group even if it is the primary group "
@@ -1221,6 +1395,18 @@ msgstr "%s: su nombre de grupo no coincide con su nombre de usuario\n"
msgid "%s: only root can use the -g/--group option\n"
msgstr "%s: sólo el administrador puede utilizar la opción -g/--group\n"
#, fuzzy
#| msgid ""
#| " -l, --no-log-init do not add the user to the lastlog and\n"
#| " faillog databases\n"
msgid ""
" -a, --append append the users mentioned by -U option to "
"the group \n"
" without removing existing user members\n"
msgstr ""
" -l, --no-log-init no añade el usuario a las bases de datos de\n"
" lastlog y faillog\n"
msgid " -g, --gid GID change the group ID to GID\n"
msgstr ""
" -g, --gid GID cambia el identificador del grupo a GID\n"
@@ -1280,6 +1466,10 @@ msgstr ""
msgid " -s, --sort sort entries by UID\n"
msgstr ""
msgid ""
" -S, --silence-warnings silence controversial/paranoid warnings\n"
msgstr ""
#, c-format
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: -s y -r son incompatibles\n"
@@ -1400,8 +1590,10 @@ msgstr ""
" -u, --user USUARIO muestra el registro de «lastlog» del "
"USUARIO\n"
msgid "Username Port From Latest"
msgstr "Nombre Puerto De Último"
#, fuzzy, c-format
#| msgid "Username Port Latest"
msgid "Username Port From%*sLatest\n"
msgstr "Nombre Puerto Último"
msgid "Username Port Latest"
msgstr "Nombre Puerto Último"
@@ -1409,10 +1601,22 @@ msgstr "Nombre Puerto Último"
msgid "**Never logged in**"
msgstr "**Nunca ha accedido**"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthe output might be incorrect.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Se produjo un fallo al conseguir la entrada para el UID %lu\n"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthey will not be updated.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: no puedo actualizar el fichero de contraseñas\n"
@@ -1539,6 +1743,55 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr "Modo de uso: logout\n"
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: can't open group file\n"
msgid "%s: couldn't open process setgroups: %s\n"
msgstr "%s: no se puede abrir el fichero de grupos\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to read setgroups: %s\n"
msgstr "%s: se produjo un fallo al eliminar %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to seek setgroups: %s\n"
msgstr "%s: se produjo un fallo al eliminar %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to unlock %s\n"
msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "%s: se produjo un fallo al desbloquear %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to find tcb directory for %s\n"
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
#, fuzzy, c-format
#| msgid "%s: Failed to create tcb directory for %s\n"
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: se produjo un fallo al crear el directorio tcb para %s\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid "Usage: newgrp [-] [group]\n"
msgstr "Modo de uso: newgrp [-] [grupo]\n"
@@ -1563,6 +1816,26 @@ msgstr "%s: el GID «%lu» no existe\n"
msgid "too many groups\n"
msgstr "demasiados grupos\n"
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
#, fuzzy
#| msgid " -q, --quiet quiet mode\n"
msgid " -b, --badnames allow bad names\n"
msgstr " -q, --quiet modo silencioso\n"
msgid " -r, --system create system accounts\n"
msgstr " -r, --system crea cuentas del sistema\n"
@@ -1604,6 +1877,11 @@ msgstr "%s: línea %d: el usuario «%s» no existe en %s\n"
msgid "%s: line %d: can't update password\n"
msgstr "%s: línea %d: no se puede actualizar la contraseña\n"
#, fuzzy, c-format
#| msgid "%s: line %d: mkdir %s failed: %s\n"
msgid "%s: line %d: homedir must be an absolute path\n"
msgstr "%s: línea %d: mkdir %s falló: %s\n"
#, c-format
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: línea %d: mkdir %s falló: %s\n"
@@ -1761,8 +2039,9 @@ msgstr ""
msgid "%s: repository %s not supported\n"
msgstr "%s: repositorio %s no soportado\n"
#, c-format
msgid "%s: %s is not authorized to change the password of %s\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr "%s: %s no está autorizado a cambiar la contraseña de %s\n"
#, c-format
@@ -1919,9 +2198,11 @@ msgstr "%s: funcionamiento incorrecto del enmascaramiento de la señal\n"
msgid "Session terminated, terminating shell..."
msgstr "Sesión finalizada, parando la consola ..."
#, c-format
msgid " ...killed.\n"
msgstr " ... finalizado.\n"
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr " ... esperando a que el hijo finalice.\n"
@@ -1932,8 +2213,22 @@ msgstr " ... parada.\n"
msgid "%s: %s\n"
msgstr "%s: %s\n"
#, fuzzy
#| msgid ""
#| "Usage: su [options] [LOGIN]\n"
#| "\n"
#| "Options:\n"
#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
#| " -h, --help display this help message and exit\n"
#| " -, -l, --login make the shell a login shell\n"
#| " -m, -p,\n"
#| " --preserve-environment do not reset environment variables, and\n"
#| " keep the same shell\n"
#| " -s, --shell SHELL use SHELL instead of the default in "
#| "passwd\n"
#| "\n"
msgid ""
"Usage: su [options] [LOGIN]\n"
"Usage: su [options] [-] [username [args]]\n"
"\n"
"Options:\n"
" -c, --command COMMAND pass COMMAND to the invoked shell\n"
@@ -1944,6 +2239,7 @@ msgid ""
" keep the same shell\n"
" -s, --shell SHELL use SHELL instead of the default in passwd\n"
"\n"
"If no username is given, assume root.\n"
msgstr ""
"Modo de uso: su [opciones] [USUARIO]\n"
"\n"
@@ -1967,6 +2263,14 @@ msgstr ""
"%s: %s\n"
"(Ignorado)\n"
#, c-format
msgid "Password field is empty, this is forbidden for all accounts.\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for super-user.\n"
msgstr ""
#, c-format
msgid "You are not authorized to su %s\n"
msgstr "No está autorizado a usar su %s\n"
@@ -2032,6 +2336,12 @@ msgstr "%s: se creó %s, pero no se pudo eliminar\n"
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr "%s: se ignorará la configuración %s en %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot create new defaults file\n"
msgid "%s: cannot create new defaults file: %s\n"
msgstr ""
"%s: no se puede crear un nuevo fichero de preferencias predeterminadas\n"
#, c-format
msgid "%s: cannot create new defaults file\n"
msgstr ""
@@ -2062,6 +2372,11 @@ msgstr "%s: el grupo «%s» es un grupo NIS.\n"
msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: demasiados grupos especificados (el máximo es %d).\n"
#, fuzzy, c-format
#| msgid "%s: Out of memory. Cannot update %s.\n"
msgid "%s: Out of memory. Cannot find group '%s'.\n"
msgstr "%s: sin memoria. No se pudo actualizar %s.\n"
#, c-format
msgid ""
"Usage: %s [options] LOGIN\n"
@@ -2076,6 +2391,12 @@ msgstr ""
"\n"
"Opciones:\n"
#, fuzzy
#| msgid " -s, --shadow edit shadow or gshadow database\n"
msgid " --badnames do not check for bad names\n"
msgstr ""
" -s, --shadow edita la base de datos shadow o gshadow\n"
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
"the\n"
@@ -2084,6 +2405,10 @@ msgstr ""
" -b, --base-dir DIR_BASE directorio base para el directorio personal\n"
" de la nueva cuenta\n"
msgid ""
" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
msgstr ""
msgid " -c, --comment COMMENT GECOS field of the new account\n"
msgstr " -c, --comment COMENTARIO campo GECOS de la nueva cuenta\n"
@@ -2215,28 +2540,120 @@ msgstr "%s: campo «%s» incorrecto\n"
msgid "%s: invalid shell '%s'\n"
msgstr "%s: consola «%s» incorrecta\n"
#, fuzzy, c-format
#| msgid "%s: Warning: %s is not executable\n"
msgid "%s: Warning: missing or non-executable shell '%s'\n"
msgstr "%s: aviso: %s no es un ejecutable\n"
#, fuzzy, c-format
#| msgid "%s: cannot rewrite password file\n"
msgid "%s: -Z cannot be used with --prefix\n"
msgstr "%s: no se puede reescribir el fichero de contraseñas\n"
#, c-format
msgid "%s: -Z requires SELinux enabled kernel\n"
msgstr "%s: -Z necesita que el núcleo tenga activado SELinux\n"
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr "%s: nombre de usuario «%s» incorrecto\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to open the faillog file for UID %lu: %s\n"
msgstr ""
"%s: se produjo un fallo al reiniciar la entrada de faillog del UID %lu: %s\n"
#, c-format
msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgstr ""
"%s: se produjo un fallo al reiniciar la entrada de faillog del UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to close the faillog file for UID %lu: %s\n"
msgstr ""
"%s: se produjo un fallo al reiniciar la entrada de faillog del UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to open the lastlog file for UID %lu: %s\n"
msgstr ""
"%s: se produjo un fallo al reiniciar la entrada de lastlog del UID %lu: %s\n"
#, c-format
msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr ""
"%s: se produjo un fallo al reiniciar la entrada de lastlog del UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to close the lastlog file for UID %lu: %s\n"
msgstr ""
"%s: se produjo un fallo al reiniciar la entrada de lastlog del UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
msgstr ""
"%s: se produjo un fallo al reiniciar la entrada de faillog del UID %lu: %s\n"
#, fuzzy, c-format
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
#, fuzzy, c-format
#| msgid "%s: error updating files\n"
msgid "%s: error while duplicating string %s\n"
msgstr "%s: error actualizando los ficheros\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot set SELinux context for home directory %s\n"
msgstr "%s: no se puede crear el directorio %s\n"
#, c-format
msgid "%s: error while duplicating string in BTRFS check %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
msgstr "%s: %s directorio personal (%s) no encontrado\n"
#, fuzzy, c-format
#| msgid "%s: failed to allocate memory: %s\n"
msgid "%s: failed to create BTRFS subvolume: %s\n"
msgstr "%s: se produjo un fallo al reservar memoria: %s\n"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr "%s: no se puede crear el directorio %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on `%s' failed: %m\n"
msgstr "%s: línea %d: chown %s falló: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chmod on `%s' failed: %m\n"
msgstr "%s: línea %d: chown %s falló: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on '%s' failed: %m\n"
msgstr "%s: línea %d: chown %s falló: %s\n"
#, c-format
msgid "%s: cannot reset SELinux file creation context\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: cannot set SELinux context for mailbox file %s\n"
msgstr "Cambiando la información de la edad para %s\n"
msgid "Creating mailbox file"
msgstr "Creando el fichero del buzón de correo"
@@ -2249,6 +2666,17 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr "Estableciendo los permisos del fichero del buzón de correo"
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d "
"range.\n"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"
msgstr ""
#, c-format
msgid "%s: user '%s' already exists\n"
msgstr "%s: el usuario «%s» ya existe\n"
@@ -2283,10 +2711,13 @@ msgstr "%s: no se pudo crear el usuario\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: no se puede crear el grupo\n"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%s: warning: the home directory already exists.\n"
#| "Not copying any file from skel directory into it.\n"
msgid ""
"%s: warning: the home directory already exists.\n"
"Not copying any file from skel directory into it.\n"
"%s: warning: the home directory %s already exists.\n"
"%s: Not copying any file from skel directory into it.\n"
msgstr ""
"%s: aviso: el directorio personal ya existe.\n"
"No se va a copiar ningún fichero del directorio «skel» en él.\n"
@@ -2297,9 +2728,15 @@ msgstr ""
"%s: aviso: no se pudo relacionar el nombre del usuario %s con el usuario %s "
"de SELinux.\n"
#, fuzzy
#| msgid ""
#| " -f, --force force removal of files,\n"
#| " even if not owned by user\n"
msgid ""
" -f, --force force removal of files,\n"
" even if not owned by user\n"
" -f, --force force some actions that would fail "
"otherwise\n"
" e.g. removal of user still logged in\n"
" or files, even if not owned by the user\n"
msgstr ""
" -f, --force forzar la eliminación de los ficheros,\n"
" incluso si no pertenecen al usuario\n"
@@ -2377,6 +2814,11 @@ msgstr ""
"%s: no se elimina el directorio %s (eliminaría el directorio personal del "
"usuario %s)\n"
#, fuzzy, c-format
#| msgid "%s: error removing directory %s\n"
msgid "%s: error removing subvolume %s\n"
msgstr "%s: error eliminando el directorio %s\n"
#, c-format
msgid "%s: error removing directory %s\n"
msgstr "%s: error eliminando el directorio %s\n"
@@ -2488,6 +2930,10 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: el usuario «%s» ya existe en %s\n"
#, c-format
msgid "%s: homedir must be an absolute path\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: fecha «%s» incorrecta\n"
@@ -2532,6 +2978,10 @@ msgstr ""
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: se produjo un fallo al cambiar el dueño del directorio personal"
#, c-format
msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
msgstr ""
#, c-format
msgid "%s: warning: failed to completely remove old home directory %s"
msgstr ""
@@ -2568,7 +3018,7 @@ msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
#, fuzzy, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
#, fuzzy, c-format
@@ -2576,7 +3026,7 @@ msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
#, fuzzy, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
#, c-format
@@ -2669,6 +3119,9 @@ msgstr "%s: no se puede restaurar %s: %s (sus cambios están en %s)\n"
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
#~ msgid "Username Port From Latest"
#~ msgstr "Nombre Puerto De Último"
#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
#~ msgstr " -c, --crypt-method el método de cifrado (uno de %s)\n"
@@ -2944,9 +3397,6 @@ msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
#~ " correo\n"
#~ "\n"
#~ msgid "%s: user %s is currently logged in\n"
#~ msgstr "%s: el usuario %s está actualmente identificado en el sistema\n"
#~ msgid ""
#~ "Usage: usermod [options] LOGIN\n"
#~ "\n"
@@ -3320,9 +3770,6 @@ msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
#~ msgid "%s: can't lock group file\n"
#~ msgstr "%s: no se puede bloquear el fichero de grupos\n"
#~ msgid "%s: can't open group file\n"
#~ msgstr "%s: no se puede abrir el fichero de grupos\n"
#~ msgid "%s: can't lock gshadow file\n"
#~ msgstr "%s: no se puede abrir el fichero de contraseñas ocultas (shadow)\n"
@@ -3387,9 +3834,6 @@ msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
#~ msgid "%s: can't get shadow lock\n"
#~ msgstr "%s: no se puede obtener el bloqueo de shadow\n"
#~ msgid "%s: can't open file\n"
#~ msgstr "%s: no se puede abrir el fichero\n"
#~ msgid "%s: can't re-write shadow file\n"
#~ msgstr "%s: no se puede reescribir el fichero oculto (shadow)\n"
@@ -3540,9 +3984,6 @@ msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
#~ msgid "%s: can't open files\n"
#~ msgstr "%s: no se pueden abrir los ficheros\n"
#~ msgid "%s: error updating files\n"
#~ msgstr "%s: error actualizando los ficheros\n"
#~ msgid "%s: can't update passwd entry for %s\n"
#~ msgstr "%s: no se puede actualizar la entrada de la contraseña para %s\n"
@@ -3575,9 +4016,6 @@ msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
#~ msgstr "%s: sin memoria en update_gshadow\n"
#~ msgid "%s: cannot rewrite password file\n"
#~ msgstr "%s: no se puede reescribir el fichero de contraseñas\n"
#~ msgid "%s: cannot rewrite shadow password file\n"
#~ msgstr ""
#~ "%s: no se puede reescribir el fichero de contraseñas ocultas (shadow)\n"

487
po/eu.po
View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: eu\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"POT-Creation-Date: 2021-07-04 12:20+0200\n"
"PO-Revision-Date: 2011-11-26 19:42+0100\n"
"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
"Language-Team: Euskara <debian-l10n-eu@lists.debian.org>\n"
@@ -57,6 +57,15 @@ msgstr "Pasahitza: "
msgid "%s's Password: "
msgstr "%s (r)en pasahitza: "
#, fuzzy
#| msgid "Cannot open audit interface - aborting.\n"
msgid "Cannot open audit interface.\n"
msgstr "Ezin da auditatzeko interfazea ireki - uzten.\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr ""
#, c-format
msgid "[libsemanage]: %s\n"
msgstr ""
@@ -301,14 +310,18 @@ msgstr[1] ""
"%d hutsegite azken saio hasieratik.\n"
"Azkena %s izan zen %s(e)n.\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
msgstr ""
#, c-format
msgid "%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"
msgstr ""
#, c-format
msgid ""
"%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX "
"(%lu)\n"
msgid "%s: Encountered error attempting to use preferred GID: %s\n"
msgstr ""
#, fuzzy, c-format
@@ -316,18 +329,40 @@ msgid "%s: failed to allocate memory: %s\n"
msgstr "huts egin du postontzia jabez aldatzean"
#, fuzzy, c-format
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgid ""
"%s: Can't get unique system GID (%s). Suppressing additional messages.\n"
msgstr ""
"%s: Ezin da sistema UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgid "%s: Can't get unique GID (%s). Suppressing additional messages.\n"
msgstr "%s: Ezin da GID bakarra lortu (ez dago GID erabilgarri gehiago)\n"
#, c-format
msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr "%s: Ezin da GID bakarra lortu (ez dago GID erabilgarri gehiago)\n"
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "%s: ezin da erabiltzailea sortu\n"
#, c-format
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "%s: ezin da erabiltzailea sortu\n"
#, c-format
msgid ""
"%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX "
@@ -335,14 +370,73 @@ msgid ""
msgstr ""
#, c-format
msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr ""
#, c-format
msgid "%s: Encountered error attempting to use preferred UID: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid ""
"%s: Can't get unique system UID (%s). Suppressing additional messages.\n"
msgstr ""
"%s: Ezin da sistema UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
#, fuzzy, c-format
#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgid "%s: Can't get unique UID (%s). Suppressing additional messages.\n"
msgstr "%s: ezin da UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
#, c-format
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: ezin da UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Authentication failure\n"
msgid "%s: Memory allocation failure\n"
msgstr "%s: ¡autentifikazio errorea\n"
#, c-format
msgid "%s: subuid overflow detected.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: invalid field '%s'\n"
msgid "%s: Invalid map file %s specified\n"
msgstr "%s: '%s' eremu baliogabea\n"
#, c-format
msgid "%s: Could not prctl(PR_SET_KEEPCAPS)\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Could not seteuid to %d\n"
msgstr "Ezin izan da lekua esleitu, konfigurazioaren informaziorako.\n"
#, fuzzy, c-format
msgid "%s: Could not set caps\n"
msgstr "Ezin izan da lekua esleitu, konfigurazioaren informaziorako.\n"
#, c-format
msgid "%s: snprintf failed!\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: open of %s failed: %s\n"
msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: write to %s failed: %s\n"
msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
msgid "Too many logins.\n"
msgstr "Gehiegizko saio hasierak.\n"
@@ -394,6 +488,27 @@ msgstr "passwd: pasahitza ez da aldatu\n"
msgid "passwd: password updated successfully\n"
msgstr "passwd: pasahitza ongi eguneratu da\n"
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: repository %s not supported\n"
msgid "%s: conversation type %d not supported.\n"
msgstr "%s: %s biltegia ez da onartzen\n"
#, fuzzy, c-format
#| msgid "%s: pam_start: error %d\n"
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: pam_start: %d errorea\n"
#, fuzzy, c-format
#| msgid "passwd: pam_start() failed, error %d\n"
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr "passwd: pam_start() huts egin du, errorea: %d\n"
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "%s(r)en pasahitz okerra.\n"
@@ -426,6 +541,10 @@ msgstr "%s: ezin da %s direktorioa sortu\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr ""
#, c-format
msgid ""
"Invalid ENCRYPT_METHOD value: '%s'.\n"
@@ -434,6 +553,13 @@ msgstr ""
"ENCRYPT_METHOD balio baliogabea: '%s'.\n"
"DES-era lehenesten.\n"
#, c-format
msgid ""
"Unable to generate a salt from setting \"%s\", check your settings in "
"ENCRYPT_METHOD and the corresponding configuration for your selected hash "
"method.\n"
msgstr ""
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr "Ezin da '%s'-ra direktorioa aldatu\n"
@@ -453,6 +579,15 @@ msgstr "Baliogabeko erro direktorioa '%s'\n"
msgid "Can't change root directory to '%s'\n"
msgstr "Ezin da erro direktorioa '%s'-ra aldatu\n"
#, c-format
msgid "%s: user %s is currently logged in\n"
msgstr "%s: une honetan %s erabiltzaileak saioan sartuta dago\n"
#, fuzzy, c-format
#| msgid "%s: user %s is currently logged in\n"
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: une honetan %s erabiltzaileak saioan sartuta dago\n"
msgid "Unable to determine your tty name."
msgstr "Ezin da zure tty izena zehaztu."
@@ -485,6 +620,11 @@ msgid " -h, --help display this help message and exit\n"
msgstr ""
" -h, --help laguntza mezu hau bistarazi eta irten\n"
#, fuzzy
#| msgid " -g, --group edit group database\n"
msgid " -i, --iso8601 use YYYY-MM-DD when printing dates\n"
msgstr " -g, --group talde datu-basea editatu\n"
msgid ""
" -I, --inactive INACTIVE set password inactive after expiration\n"
" to INACTIVE\n"
@@ -673,6 +813,10 @@ msgstr "Etxeko telefonoa"
msgid "Other"
msgstr "Bestelakoa"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: eremu luzegiak\n"
msgid "Cannot change ID to root.\n"
msgstr "Ezin izan da IDa root-era aldatu.\n"
@@ -724,10 +868,6 @@ msgstr "%s: '%s' da bezero honen NIS nagusia.\n"
msgid "Changing the user information for %s\n"
msgstr "%s(r)en erabiltzaile informazioa aldatzen\n"
#, c-format
msgid "%s: fields too long\n"
msgstr "%s: eremu luzegiak\n"
#, c-format
msgid ""
"Usage: %s [options]\n"
@@ -752,9 +892,13 @@ msgstr ""
" -m, --md5 zifratu testu laueko pasahitza MD5\n"
" algoritmoa erabiliaz\n"
#, fuzzy
#| msgid ""
#| " -s, --sha-rounds number of SHA rounds for the SHA*\n"
#| " crypt algorithms\n"
msgid ""
" -s, --sha-rounds number of SHA rounds for the SHA*\n"
" crypt algorithms\n"
" -s, --sha-rounds number of rounds for the SHA, BCRYPT\n"
" or YESCRYPT crypt algorithms\n"
msgstr ""
" -s, --sha-rounds SHA* kriptografia algoritmoentzako\n"
" SHA erronda kopurua\n"
@@ -1061,6 +1205,21 @@ msgstr ""
msgid " -r, --system create a system account\n"
msgstr " -r, --system sistema kontu bat sortu\n"
#, fuzzy
#| msgid " -Q, --root CHROOT_DIR directory to chroot into\n"
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr " -r, --remove-password TALDEaren pasahitaz kendu\n"
#, fuzzy
#| msgid " -l, --list list the members of the group\n"
msgid " -U, --users USERS list of user members of this group\n"
msgstr " -l, --list taldearen partaideak zerrendatu\n"
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "Invalid member username %s\n"
msgstr "%s erabiltzaile-izen baliogabea\n"
#, c-format
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: '%s' ez da baliozko talde-izena\n"
@@ -1085,6 +1244,11 @@ msgstr "%s: '%lu' GIDa badago dagoeneko\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
msgid ""
" -P, --prefix PREFIX_DIR prefix directory where are located the /etc/"
"* files\n"
msgstr ""
#, fuzzy
msgid ""
" -f, --force delete group even if it is the primary group "
@@ -1173,6 +1337,22 @@ msgstr "%s: zure talde-izena ez da erabiltzaile-izenaren berdina\n"
msgid "%s: only root can use the -g/--group option\n"
msgstr "%s: root-ek bakarrik erabili dezake -g/--group aukera\n"
#, fuzzy
#| msgid ""
#| " -a, --append append the user to the supplemental "
#| "GROUPS\n"
#| " mentioned by the -G option without "
#| "removing\n"
#| " the user from other groups\n"
msgid ""
" -a, --append append the users mentioned by -U option to "
"the group \n"
" without removing existing user members\n"
msgstr ""
" -a, --append gehitu erabiltzailea -G aukerak zehaztutako "
"talde\n"
" gehigarrietara beste taldeetatik kendu gabe\n"
#, fuzzy
msgid " -g, --gid GID change the group ID to GID\n"
msgstr " -r, --system sortu sistema kontuak\n"
@@ -1229,6 +1409,10 @@ msgstr ""
msgid " -s, --sort sort entries by UID\n"
msgstr ""
msgid ""
" -S, --silence-warnings silence controversial/paranoid warnings\n"
msgstr ""
#, c-format
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: -s eta -r ezin dira batera erabili\n"
@@ -1348,8 +1532,10 @@ msgstr ""
" -u, --user IZENA IZENA duen erabiltzailearen lastlog\n"
" erregistroa bistaratzen du\n"
msgid "Username Port From Latest"
msgstr "Erabiltzaile-izena Ataka Nondik Azkena"
#, fuzzy, c-format
#| msgid "Username Port Latest"
msgid "Username Port From%*sLatest\n"
msgstr "Erabiltzaile-izena Ataka Azkena"
msgid "Username Port Latest"
msgstr "Erabiltzaile-izena Ataka Azkena"
@@ -1357,10 +1543,22 @@ msgstr "Erabiltzaile-izena Ataka Azkena"
msgid "**Never logged in**"
msgstr "**Inoiz ez du saiorik hasi**"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthe output might be incorrect.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Huts %lu UIDaren sarrera eskuratzean\n"
#, c-format
msgid ""
"%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n"
"\tthey will not be updated.\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: huts %lu UIDaren lastlog sarrera berrezartzean: %s\n"
@@ -1490,6 +1688,52 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr "Erabilera: logoutd\n"
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
msgstr ""
#, c-format
msgid "%s: couldn't open process setgroups: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to read setgroups: %s\n"
msgstr "%s: huts %s kentzerakoan\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to seek setgroups: %s\n"
msgstr "%s: huts %s kentzerakoan\n"
#, fuzzy, c-format
#| msgid "%s: failed to unlock %s\n"
msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "%s: huts %s desblokeatzean\n"
#, fuzzy, c-format
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: oinarrizko '%s' direktorio baliogabea\n"
#, fuzzy, c-format
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
msgid "Usage: newgrp [-] [group]\n"
msgstr "Erabilera: newgrp [-] [taldea]\n"
@@ -1514,6 +1758,26 @@ msgstr "%s: `%lu' GIDa ez da existitzen\n"
msgid "too many groups\n"
msgstr "talde gehiegi\n"
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr ""
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
#, fuzzy
#| msgid " -q, --quiet quiet mode\n"
msgid " -b, --badnames allow bad names\n"
msgstr " -q, --quiet ixilik modua\n"
msgid " -r, --system create system accounts\n"
msgstr " -r, --system sortu sistema kontuak\n"
@@ -1555,6 +1819,11 @@ msgstr "%s: %d lerroa: `%s' erabiltzailea ez da existitzen %s-en\n"
msgid "%s: line %d: can't update password\n"
msgstr "%s: %d lerroa: ezin da pasahitza eguneratu\n"
#, fuzzy, c-format
#| msgid "%s: line %d: mkdir %s failed: %s\n"
msgid "%s: line %d: homedir must be an absolute path\n"
msgstr "%s: %d lerroa: mkdir %s-ek huts egin du: %s\n"
#, c-format
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: %d lerroa: mkdir %s-ek huts egin du: %s\n"
@@ -1707,8 +1976,9 @@ msgstr ""
msgid "%s: repository %s not supported\n"
msgstr "%s: %s biltegia ez da onartzen\n"
#, c-format
msgid "%s: %s is not authorized to change the password of %s\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr "%s: %s ez dago %s-ren pasahitza aldatzeko baimendurik\n"
#, c-format
@@ -1862,9 +2132,11 @@ msgstr ""
msgid "Session terminated, terminating shell..."
msgstr ""
#, c-format
msgid " ...killed.\n"
msgstr ""
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr ""
@@ -1875,8 +2147,22 @@ msgstr ""
msgid "%s: %s\n"
msgstr "%s: %s\n"
#, fuzzy
#| msgid ""
#| "Usage: su [options] [LOGIN]\n"
#| "\n"
#| "Options:\n"
#| " -c, --command COMMAND pass COMMAND to the invoked shell\n"
#| " -h, --help display this help message and exit\n"
#| " -, -l, --login make the shell a login shell\n"
#| " -m, -p,\n"
#| " --preserve-environment do not reset environment variables, and\n"
#| " keep the same shell\n"
#| " -s, --shell SHELL use SHELL instead of the default in "
#| "passwd\n"
#| "\n"
msgid ""
"Usage: su [options] [LOGIN]\n"
"Usage: su [options] [-] [username [args]]\n"
"\n"
"Options:\n"
" -c, --command COMMAND pass COMMAND to the invoked shell\n"
@@ -1887,6 +2173,7 @@ msgid ""
" keep the same shell\n"
" -s, --shell SHELL use SHELL instead of the default in passwd\n"
"\n"
"If no username is given, assume root.\n"
msgstr ""
"Erabilera: su [aukerak] [IZENA]\n"
"\n"
@@ -1909,6 +2196,14 @@ msgstr ""
"%s: %s\n"
"(Ez ikusi egin zaio)\n"
#, c-format
msgid "Password field is empty, this is forbidden for all accounts.\n"
msgstr ""
#, c-format
msgid "Password field is empty, this is forbidden for super-user.\n"
msgstr ""
#, c-format
msgid "You are not authorized to su %s\n"
msgstr "Ez duzu 'su %s' exekutatzeko baimenik\n"
@@ -1973,6 +2268,11 @@ msgstr ""
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr "%s: %s konfigurazioa %s-n dagoena alde batetara utziko da\n"
#, fuzzy, c-format
#| msgid "%s: cannot create new defaults file\n"
msgid "%s: cannot create new defaults file: %s\n"
msgstr "%s: ezin da lehenespen fitxategi berria sortu\n"
#, c-format
msgid "%s: cannot create new defaults file\n"
msgstr "%s: ezin da lehenespen fitxategi berria sortu\n"
@@ -2001,6 +2301,11 @@ msgstr "%s: taldea '%s' NIS talde bat da.\n"
msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: talde gehiegi zehaztu dira (geh. %d).\n"
#, fuzzy, c-format
#| msgid "%s: Out of memory. Cannot update %s.\n"
msgid "%s: Out of memory. Cannot find group '%s'.\n"
msgstr "%s: memoriarik ez. Ezin da %s eguneratu.\n"
#, c-format
msgid ""
"Usage: %s [options] LOGIN\n"
@@ -2015,6 +2320,11 @@ msgstr ""
"\n"
"Aukerak:\n"
#, fuzzy
#| msgid " -s, --shadow edit shadow or gshadow database\n"
msgid " --badnames do not check for bad names\n"
msgstr " -s, --shadow shadow edo gshadow datubasea editatu\n"
#, fuzzy
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
@@ -2024,6 +2334,10 @@ msgstr ""
" -b, --base-dir BASE_DIR Erabiltzaile kontu berriaren etxe\n"
" direktorioaren oinarri direktorioa\n"
msgid ""
" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"
msgstr ""
msgid " -c, --comment COMMENT GECOS field of the new account\n"
msgstr ""
@@ -2128,26 +2442,110 @@ msgstr "%s: '%s' eremu baliogabea\n"
msgid "%s: invalid shell '%s'\n"
msgstr "%s: '%s' shell baliogabea\n"
#, fuzzy, c-format
msgid "%s: Warning: missing or non-executable shell '%s'\n"
msgstr "%s: abisua: %s ez dago %s(r)en jabegoan\n"
#, c-format
msgid "%s: -Z cannot be used with --prefix\n"
msgstr ""
#, c-format
msgid "%s: -Z requires SELinux enabled kernel\n"
msgstr "%s: -Z-ek SELinux gaituriko kernel bat behar du\n"
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr "%s: '%s' erabiltzaile-izen baliogabea\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to open the faillog file for UID %lu: %s\n"
msgstr "%s: huts %lu UIDaren faillog erregistroa berrezartzean: %s\n"
#, c-format
msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgstr "%s: huts %lu UIDaren faillog erregistroa berrezartzean: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to close the faillog file for UID %lu: %s\n"
msgstr "%s: huts %lu UIDaren faillog erregistroa berrezartzean: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to open the lastlog file for UID %lu: %s\n"
msgstr "%s: huts %lu UIDaren lastlog sarrera berrezartzean: %s\n"
#, c-format
msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: huts %lu UIDaren lastlog sarrera berrezartzean: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: failed to close the lastlog file for UID %lu: %s\n"
msgstr "%s: huts %lu UIDaren lastlog sarrera berrezartzean: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
msgid "%s: failed to reset the tallylog entry of user \"%s\"\n"
msgstr "%s: huts %lu UIDaren faillog erregistroa berrezartzean: %s\n"
#, fuzzy, c-format
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
#, fuzzy, c-format
#| msgid "%s: error changing fields\n"
msgid "%s: error while duplicating string %s\n"
msgstr "%s: errorea eremuak aldatzean\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot set SELinux context for home directory %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, c-format
msgid "%s: error while duplicating string in BTRFS check %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: home directory \"%s\" must be mounted on BTRFS\n"
msgstr "%s: %s etxe-direktorioa (%s) ez dago\n"
#, fuzzy, c-format
msgid "%s: failed to create BTRFS subvolume: %s\n"
msgstr "huts egin du postontzia jabez aldatzean"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on `%s' failed: %m\n"
msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chmod on `%s' failed: %m\n"
msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown %s failed: %s\n"
msgid "%s: warning: chown on '%s' failed: %m\n"
msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
#, c-format
msgid "%s: cannot reset SELinux file creation context\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: cannot set SELinux context for mailbox file %s\n"
msgstr "%s(r)en data informazioa aldatzen\n"
msgid "Creating mailbox file"
msgstr "Postakutxa fitxategia sortzen"
@@ -2160,6 +2558,17 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr "Postakutxa fitxategi baimenak ezartzen"
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the SYS_UID_MIN %d and SYS_UID_MAX %d "
"range.\n"
msgstr ""
#, c-format
msgid ""
"%s warning: %s's uid %d outside of the UID_MIN %d and UID_MAX %d range.\n"
msgstr ""
#, c-format
msgid "%s: user '%s' already exists\n"
msgstr "%s: '%s' erabiltzailea badago dagoeneko\n"
@@ -2194,10 +2603,13 @@ msgstr "%s: ezin da erabiltzailea sortu\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: ezin da taldea sortu\n"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%s: warning: the home directory already exists.\n"
#| "Not copying any file from skel directory into it.\n"
msgid ""
"%s: warning: the home directory already exists.\n"
"Not copying any file from skel directory into it.\n"
"%s: warning: the home directory %s already exists.\n"
"%s: Not copying any file from skel directory into it.\n"
msgstr ""
"%s: abisua: etxe direktorioa badago dagoeneko.\n"
"Ez da bertara skel direktorioko fitxategirik kopiatuko.\n"
@@ -2208,9 +2620,15 @@ msgstr ""
"%s: abisua: %s erabiltzaile izena %s SELinux erabiltzailera mapatzean huts "
"egin du.\n"
#, fuzzy
#| msgid ""
#| " -f, --force force removal of files,\n"
#| " even if not owned by user\n"
msgid ""
" -f, --force force removal of files,\n"
" even if not owned by user\n"
" -f, --force force some actions that would fail "
"otherwise\n"
" e.g. removal of user still logged in\n"
" or files, even if not owned by the user\n"
msgstr ""
" -f, --force fitxategien ezabatzea indartu nahiz ez\n"
" erabiltzailearenak izan\n"
@@ -2286,6 +2704,11 @@ msgstr "%s: %s etxe-direktorioa (%s) ez dago\n"
msgid "%s: not removing directory %s (would remove home of user %s)\n"
msgstr "%s: ez da %s direktorioa ezabatuko (%s(r)en etxea ezabatuko luke)\n"
#, fuzzy, c-format
#| msgid "%s: error removing directory %s\n"
msgid "%s: error removing subvolume %s\n"
msgstr "%s: errorea %s direktorioa ezabatzean\n"
#, c-format
msgid "%s: error removing directory %s\n"
msgstr "%s: errorea %s direktorioa ezabatzean\n"
@@ -2400,6 +2823,10 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: '%s' erabiltzailea badago dagoeneko %s-n\n"
#, c-format
msgid "%s: homedir must be an absolute path\n"
msgstr ""
#, fuzzy, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: '%s' data baliogabea\n"
@@ -2442,6 +2869,10 @@ msgstr ""
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, c-format
msgid "%s: error: cannot move subvolume from %s to %s - different device\n"
msgstr ""
#, c-format
msgid "%s: warning: failed to completely remove old home directory %s"
msgstr "%s: abisua: huts %s etxe direktorio zaharra guztiz ezabatzerakoan"
@@ -2477,7 +2908,7 @@ msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
#, fuzzy, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgid "%s: failed to add uid range %lu-%lu to '%s'\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
#, fuzzy, c-format
@@ -2485,7 +2916,7 @@ msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
#, fuzzy, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgid "%s: failed to add gid range %lu-%lu to '%s'\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
#, c-format
@@ -2581,6 +3012,9 @@ msgstr "%s: ezin da %s leheneratu: %s (zure aldaketak %s(e)n daude)\n"
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: oinarrizko '%s' direktorio baliogabea\n"
#~ msgid "Username Port From Latest"
#~ msgstr "Erabiltzaile-izena Ataka Nondik Azkena"
#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
#~ msgstr " -c, --crypt-method zifratze metodoa (%s-etako bat)\n"
@@ -2843,9 +3277,6 @@ msgstr "%s: oinarrizko '%s' direktorio baliogabea\n"
#~ "ezabatu\n"
#~ "\n"
#~ msgid "%s: user %s is currently logged in\n"
#~ msgstr "%s: une honetan %s erabiltzaileak saioan sartuta dago\n"
#~ msgid ""
#~ "Usage: usermod [options] LOGIN\n"
#~ "\n"

Some files were not shown because too many files have changed in this diff Show More