diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | configure.ac | 21 | ||||
-rw-r--r-- | hwdb/20-bluetooth-vendor-product.hwdb | 53 | ||||
-rw-r--r-- | man/systemd.slice.xml | 5 | ||||
-rw-r--r-- | po/LINGUAS | 1 | ||||
-rw-r--r-- | po/ko.po | 544 | ||||
-rw-r--r-- | shell-completion/bash/journalctl | 11 | ||||
-rw-r--r-- | shell-completion/bash/systemd-nspawn | 2 | ||||
-rw-r--r-- | src/basic/util.c | 83 | ||||
-rw-r--r-- | src/basic/util.h | 1 | ||||
-rw-r--r-- | src/core/load-fragment.c | 48 | ||||
-rw-r--r-- | src/core/main.c | 44 | ||||
-rw-r--r-- | src/hostname/hostnamed.c | 6 | ||||
-rw-r--r-- | src/network/networkd-link.c | 10 | ||||
-rw-r--r-- | src/test/test-execute.c | 8 | ||||
-rw-r--r-- | src/test/test-util.c | 59 | ||||
-rw-r--r-- | test/exec-personality-s390.service | 7 |
18 files changed, 808 insertions, 98 deletions
diff --git a/Makefile.am b/Makefile.am index 41bfdfbeac..e9ad72333b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1502,6 +1502,7 @@ EXTRA_DIST += \ test/exec-ignoresigpipe-yes.service \ test/exec-personality-x86-64.service \ test/exec-personality-x86.service \ + test/exec-personality-s390.service \ test/exec-privatedevices-no.service \ test/exec-privatedevices-yes.service \ test/exec-privatetmp-no.service \ @@ -35,7 +35,7 @@ CHANGES WITH 227: NoNewPrivileges, TTYPath, WorkingDirectory and RootDirectory properties can now be set for transient units. - * Galician and Turkish translations were added. + * Galician, Turkish and Korean translations were added. Contributions from: diff --git a/configure.ac b/configure.ac index ef03fb082c..d75a02623b 100644 --- a/configure.ac +++ b/configure.ac @@ -701,12 +701,21 @@ AC_ARG_ENABLE([gcrypt], [have_gcrypt=auto]) if test "x${have_gcrypt}" != xno ; then - AM_PATH_LIBGCRYPT( - [1.4.5], - [have_gcrypt=yes], - [if test "x$have_gcrypt" = xyes ; then - AC_MSG_ERROR([*** GCRYPT headers not found.]) - fi]) + m4_define([AM_PATH_LIBGCRYPT_FAIL], + [{ test "x$have_gcrypt" != xyes || AC_MSG_ERROR([*** GCRYPT headers not found.]); }] + ) + m4_ifdef([AM_PATH_LIBGCRYPT], [AM_PATH_LIBGCRYPT( + [1.4.5], + [have_gcrypt=yes], + dnl If we have the gcrypt m4 macros, but don't have + dnl gcrypt, throw an error if gcrypt is explicitly + dnl requested. + [AM_PATH_LIBGCRYPT_FAIL] + )], + dnl If we don't have the gcrypt m4 macros, but build with + dnl gcrypt explicitly requested, throw an error. + [AM_PATH_LIBGCRYPT_FAIL] + ) if test "x$have_gcrypt" = xyes ; then GCRYPT_LIBS="$LIBGCRYPT_LIBS" diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb index 5a7f28729d..1dd642678d 100644 --- a/hwdb/20-bluetooth-vendor-product.hwdb +++ b/hwdb/20-bluetooth-vendor-product.hwdb @@ -829,7 +829,7 @@ bluetooth:v0111* ID_VENDOR_FROM_DATABASE=Steelseries ApS bluetooth:v0112* - ID_VENDOR_FROM_DATABASE=vyzybl Inc. + ID_VENDOR_FROM_DATABASE=Visybl Inc. bluetooth:v0113* ID_VENDOR_FROM_DATABASE=Openbrain Technologies, Co., Ltd. @@ -1931,3 +1931,54 @@ bluetooth:v0280* bluetooth:v0281* ID_VENDOR_FROM_DATABASE=StoneL + +bluetooth:v0282* + ID_VENDOR_FROM_DATABASE=Sonova AG + +bluetooth:v0283* + ID_VENDOR_FROM_DATABASE=Maven Machines, Inc. + +bluetooth:v0284* + ID_VENDOR_FROM_DATABASE=Synapse Electronics + +bluetooth:v0285* + ID_VENDOR_FROM_DATABASE=Standard Innovation Inc. + +bluetooth:v0286* + ID_VENDOR_FROM_DATABASE=RF Code, Inc. + +bluetooth:v0287* + ID_VENDOR_FROM_DATABASE=Wally Ventures S.L. + +bluetooth:v0288* + ID_VENDOR_FROM_DATABASE=Willowbank Electronics Ltd + +bluetooth:v0289* + ID_VENDOR_FROM_DATABASE=SK Telecom + +bluetooth:v028A* + ID_VENDOR_FROM_DATABASE=Jetro AS + +bluetooth:v028B* + ID_VENDOR_FROM_DATABASE=Code Gears LTD + +bluetooth:v028C* + ID_VENDOR_FROM_DATABASE=NANOLINK APS + +bluetooth:v028D* + ID_VENDOR_FROM_DATABASE=IF, LLC + +bluetooth:v028E* + ID_VENDOR_FROM_DATABASE=RF Digital Corp + +bluetooth:v028F* + ID_VENDOR_FROM_DATABASE=Church & Dwight Co., Inc + +bluetooth:v0290* + ID_VENDOR_FROM_DATABASE=Multibit Oy + +bluetooth:v0291* + ID_VENDOR_FROM_DATABASE=CliniCloud Inc + +bluetooth:v0292* + ID_VENDOR_FROM_DATABASE=SwiftSensors diff --git a/man/systemd.slice.xml b/man/systemd.slice.xml index a501327335..87c2a3bce3 100644 --- a/man/systemd.slice.xml +++ b/man/systemd.slice.xml @@ -93,6 +93,11 @@ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry> are allowed. </para> + <para>See the <ulink + url="http://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/">New + Control Group Interfaces</ulink> for an introduction on how to make + use of slice units from programs.</para> + <para>Unless <varname>DefaultDependencies=false</varname> is used, slice units will implicitly have dependencies of type <varname>Conflicts=</varname> and diff --git a/po/LINGUAS b/po/LINGUAS index 6c6f3934b3..3d6a03e421 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -4,6 +4,7 @@ fr gl hu it +ko pl pt_BR ru diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000000..382c011cd0 --- /dev/null +++ b/po/ko.po @@ -0,0 +1,544 @@ +# Korean translation for the systemd. +# Copyright (C) 2015 systemd author and translators. +# This file is distributed under the same license as the systemd package. +# Seong-ho Cho <shcho@gnome.org>, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: systemd\n" +"Report-Msgid-Bugs-To: https://github.com/systemd/systemd/issues\n" +"POT-Creation-Date: 2015-09-25 22:52+0900\n" +"PO-Revision-Date: 2015-09-25 23:50+0900\n" +"Last-Translator: Seong-ho Cho <shcho@gnome.org>\n" +"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.5\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ko\n" +"X-Poedit-SourceCharset: UTF-8\n" + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:1 +msgid "Send passphrase back to system" +msgstr "시스템에 암호문 보내기" + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:2 +msgid "" +"Authentication is required to send the entered passphrase back to the system." +msgstr "시스템에 입력한 암호를 보내려면 인증이 필요합니다." + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:3 +msgid "Manage system services or other units" +msgstr "시스템 서비스 또는 기타 유닛 관리" + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:4 +msgid "Authentication is required to manage system services or other units." +msgstr "시스템 서비스 또는 기타 유닛을 관리하려면 인증이 필요합니다." + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:5 +msgid "Manage system service or unit files" +msgstr "시스템 서비스 또는 유닛 파일 관리" + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:6 +msgid "Authentication is required to manage system service or unit files." +msgstr "시스템 서비스 또는 유닛 파일을 관리하려면 인증이 필요합니다." + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:7 +msgid "Set or unset system and service manager environment variables" +msgstr "시스템 및 서비스 관리자 환경 변수 설정 또는 설정 해제" + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:8 +msgid "" +"Authentication is required to set or unset system and service manager " +"environment variables." +msgstr "" +"시스템 및 서비스 관리자 환경 변수를 설정하거나 설정 해제하려면 인증이 필요합" +"니다." + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:9 +msgid "Reload the systemd state" +msgstr "systemd 상태 다시 불러오기" + +#: ../src/core/org.freedesktop.systemd1.policy.in.in.h:10 +msgid "Authentication is required to reload the systemd state." +msgstr "systemd 상태를 다시 불러오려면 인증이 필요합니다." + +#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:1 +msgid "Set host name" +msgstr "호스트 이름 설정" + +#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:2 +msgid "Authentication is required to set the local host name." +msgstr "로컬 호스트 이름을 설정하려면 인증이 필요합니다." + +#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:3 +msgid "Set static host name" +msgstr "정적 호스트 이름 설정" + +#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:4 +msgid "" +"Authentication is required to set the statically configured local host name, " +"as well as the pretty host name." +msgstr "" +"로컬 호스트 이름을 모양새를 갖춘 호스트 이름 처럼 정적으로 설정하려면 인증" +"이 필요합니다." + +#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:5 +msgid "Set machine information" +msgstr "머신 정보 설정" + +#: ../src/hostname/org.freedesktop.hostname1.policy.in.h:6 +msgid "Authentication is required to set local machine information." +msgstr "로컬 머신 정보를 설정하려면 인증이 필요합니다." + +#: ../src/import/org.freedesktop.import1.policy.in.h:1 +msgid "Import a VM or container image" +msgstr "VM 또는 컨테이너의 이미지 가져오기" + +#: ../src/import/org.freedesktop.import1.policy.in.h:2 +msgid "Authentication is required to import a VM or container image" +msgstr "VM 또는 컨테이너의 이미지를 가져오려면 인증이 필요합니다" + +#: ../src/import/org.freedesktop.import1.policy.in.h:3 +msgid "Export a VM or container image" +msgstr "가상 머신 또는 컨테이너의 이미지 내보내기" + +#: ../src/import/org.freedesktop.import1.policy.in.h:4 +msgid "Authentication is required to export a VM or container image" +msgstr "가상 머신 또는 컨테이너의 이미지를 내보내려면 인증이 필요합니다" + +#: ../src/import/org.freedesktop.import1.policy.in.h:5 +msgid "Download a VM or container image" +msgstr "가상머신 또는 컨테이너 이미지 다운로드" + +#: ../src/import/org.freedesktop.import1.policy.in.h:6 +msgid "Authentication is required to download a VM or container image" +msgstr "가상머신 또는 컨테이너 이미지를 다운로드하려면 인증이 필요합니다" + +#: ../src/locale/org.freedesktop.locale1.policy.in.h:1 +msgid "Set system locale" +msgstr "시스템 로캘 설정" + +#: ../src/locale/org.freedesktop.locale1.policy.in.h:2 +msgid "Authentication is required to set the system locale." +msgstr "시스템 로캘을 설정하려면 인증이 필요합니다." + +#: ../src/locale/org.freedesktop.locale1.policy.in.h:3 +msgid "Set system keyboard settings" +msgstr "시스템 키보드 설정" + +#: ../src/locale/org.freedesktop.locale1.policy.in.h:4 +msgid "Authentication is required to set the system keyboard settings." +msgstr "시스템 키보드를 설정하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:1 +msgid "Allow applications to inhibit system shutdown" +msgstr "프로그램의 시스템 전원 끄기 방지 요청 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:2 +msgid "" +"Authentication is required for an application to inhibit system shutdown." +msgstr "프로그램의 시스템 전원 끄기 방지 요청을 허용하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:3 +msgid "Allow applications to delay system shutdown" +msgstr "프로그램의 시스템 전원 끄기 지연 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:4 +msgid "Authentication is required for an application to delay system shutdown." +msgstr "프로그램의 시스템 전원 끄기 지연 동작을 허용하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:5 +msgid "Allow applications to inhibit system sleep" +msgstr "프로그램의 시스템 대기 상태 진입 방지 요청 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:6 +msgid "Authentication is required for an application to inhibit system sleep." +msgstr "" +"프로그램의 시스템 대기 상태 진입 방지 요청을 허용하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:7 +msgid "Allow applications to delay system sleep" +msgstr "프로그램의 시스템 대기 상태 진입 지연 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:8 +msgid "Authentication is required for an application to delay system sleep." +msgstr "" +"프로그램의 시스템 대기 상태 진입 지연 동작을 허용하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:9 +msgid "Allow applications to inhibit automatic system suspend" +msgstr "프로그램의 시스템 자동 절전 상태 진입 방지 요청 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:10 +msgid "" +"Authentication is required for an application to inhibit automatic system " +"suspend." +msgstr "" +"프로그램의 시스템 자동 절전 상태 진입 방지 요청을 허용하려면 인증이 필요합니" +"다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:11 +msgid "Allow applications to inhibit system handling of the power key" +msgstr "프로그램의 시스템 전원 키 처리 방지 요청 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:12 +msgid "" +"Authentication is required for an application to inhibit system handling of " +"the power key." +msgstr "" +"프로그램의 시스템 전원 키 처리 방지 요청을 허용하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:13 +msgid "Allow applications to inhibit system handling of the suspend key" +msgstr "프로그램의 시스템 절전 키 처리 방지 요청 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:14 +msgid "" +"Authentication is required for an application to inhibit system handling of " +"the suspend key." +msgstr "" +"프로그램의 시스템 절전 키 처리 방지 요청을 허용하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:15 +msgid "Allow applications to inhibit system handling of the hibernate key" +msgstr "프로그램의 시스템 최대 절전 키 처리 방지 요청 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:16 +msgid "" +"Authentication is required for an application to inhibit system handling of " +"the hibernate key." +msgstr "" +"프로그램의 시스템 최대 절전 키 처리 방지 요청을 허용하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:17 +msgid "Allow applications to inhibit system handling of the lid switch" +msgstr "프로그램의 시스템 랩톱 덮개 스위치 처리 방지 요청 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:18 +msgid "" +"Authentication is required for an application to inhibit system handling of " +"the lid switch." +msgstr "" +"프로그램의 시스템 랩톱 덮개 스위치 처리 방지 요청을 허용하려면 인증이 필요합" +"니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:19 +msgid "Allow non-logged-in users to run programs" +msgstr "비 로그인 사용자 프로그램 실행 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:20 +msgid "Authentication is required to run programs as a non-logged-in user." +msgstr "비 로그인 사용자에게 프로그램 실행을 허용하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:21 +msgid "Allow attaching devices to seats" +msgstr "시트에 장치 부착 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:22 +msgid "Authentication is required for attaching a device to a seat." +msgstr "시트에 장치 부착을 허용하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:23 +msgid "Flush device to seat attachments" +msgstr "시트로부터 장치 탈거 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:24 +msgid "" +"Authentication is required for resetting how devices are attached to seats." +msgstr "시트에 붙인 장치 상태를 초기화하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:25 +msgid "Power off the system" +msgstr "시스템 끄기" + +#: ../src/login/org.freedesktop.login1.policy.in.h:26 +msgid "Authentication is required for powering off the system." +msgstr "시스템을 끄려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:27 +msgid "Power off the system while other users are logged in" +msgstr "다른 사용자가 로그인 했을 때 시스템 끄기" + +#: ../src/login/org.freedesktop.login1.policy.in.h:28 +msgid "" +"Authentication is required for powering off the system while other users are " +"logged in." +msgstr "다른 사용자가 로그인 했을 때 시스템 전원을 끄려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:29 +msgid "Power off the system while an application asked to inhibit it" +msgstr "프로그램이 시스템을 끄지 못하게 요청할 때 시스템 전원 끄기" + +#: ../src/login/org.freedesktop.login1.policy.in.h:30 +msgid "" +"Authentication is required for powering off the system while an application " +"asked to inhibit it." +msgstr "" +"프로그램이 시스템을 끄지 못하게 요청할 때 시스템 전원을 끄려면 인증이 필요합" +"니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:31 +msgid "Reboot the system" +msgstr "시스템 다시 시작" + +#: ../src/login/org.freedesktop.login1.policy.in.h:32 +msgid "Authentication is required for rebooting the system." +msgstr "시스템을 다시 시작하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:33 +msgid "Reboot the system while other users are logged in" +msgstr "다른 사용자가 로그인 했을 때 시스템 다시 시작" + +#: ../src/login/org.freedesktop.login1.policy.in.h:34 +msgid "" +"Authentication is required for rebooting the system while other users are " +"logged in." +msgstr "" +"다른 사용자가 로그인 했을 때 시스템을 다시 시작하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:35 +msgid "Reboot the system while an application asked to inhibit it" +msgstr "프로그램이 시스템을 다시 시작하지 못하게 요청할 때 시스템 다시 시작" + +#: ../src/login/org.freedesktop.login1.policy.in.h:36 +msgid "" +"Authentication is required for rebooting the system while an application " +"asked to inhibit it." +msgstr "" +"프로그램이 시스템을 다시 시작하지 못하게 요청할 때 시스템을 다시 시작하려면 " +"인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:37 +msgid "Suspend the system" +msgstr "시스템 절전 상태 진입" + +#: ../src/login/org.freedesktop.login1.policy.in.h:38 +msgid "Authentication is required for suspending the system." +msgstr "시스템을 절전 상태로 놓으려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:39 +msgid "Suspend the system while other users are logged in" +msgstr "다른 사용자가 로그인 했을 때 시스템 절전 상태 진입" + +#: ../src/login/org.freedesktop.login1.policy.in.h:40 +msgid "" +"Authentication is required for suspending the system while other users are " +"logged in." +msgstr "" +"다른 사용자가 로그인 했을 때 시스템을 절전 상태로 놓으려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:41 +msgid "Suspend the system while an application asked to inhibit it" +msgstr "프로그램이 절전 상태 진입을 못하게 요청할 때 시스템 절전 상태 진입" + +#: ../src/login/org.freedesktop.login1.policy.in.h:42 +msgid "" +"Authentication is required for suspending the system while an application " +"asked to inhibit it." +msgstr "" +"프로그램이 절전 상태 진입을 못하게 요청할 때 시스템을 절전 상태로 놓으려면 인" +"증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:43 +msgid "Hibernate the system" +msgstr "시스템 최대 절전 상태 진입" + +#: ../src/login/org.freedesktop.login1.policy.in.h:44 +msgid "Authentication is required for hibernating the system." +msgstr "시스템을 최대 절전 상태로 놓으려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:45 +msgid "Hibernate the system while other users are logged in" +msgstr "다른 사용자가 로그인 했을 때 시스템 최대 절전 상태 진입" + +#: ../src/login/org.freedesktop.login1.policy.in.h:46 +msgid "" +"Authentication is required for hibernating the system while other users are " +"logged in." +msgstr "" +"다른 사용자가 로그인 했을 때 시스템을 최대 절전 상태로 놓으려면 인증이 필요합" +"니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:47 +msgid "Hibernate the system while an application asked to inhibit it" +msgstr "" +"프로그램이 최대 절전 상태 진입을 못하게 요청할 때 시스템 최대 절전 상태 진입" + +#: ../src/login/org.freedesktop.login1.policy.in.h:48 +msgid "" +"Authentication is required for hibernating the system while an application " +"asked to inhibit it." +msgstr "" +"프로그램이 최대 절전 상태 진입을 못하게 요청할 때 시스템을 최대 절전 상태로 " +"놓으려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:49 +msgid "Manage active sessions, users and seats" +msgstr "활성 세션, 사용자, 시트 관리" + +#: ../src/login/org.freedesktop.login1.policy.in.h:50 +msgid "" +"Authentication is required for managing active sessions, users and seats." +msgstr "활성 세션, 사용자 시트를 관리하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:51 +msgid "Lock or unlock active sessions" +msgstr "활성 세션 잠금 또는 잠금 해제" + +#: ../src/login/org.freedesktop.login1.policy.in.h:52 +msgid "Authentication is required to lock or unlock active sessions." +msgstr "활성화 세션을 잠금 또는 잠금 해제하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:53 +msgid "Allow indication to the firmware to boot to setup interface" +msgstr "인터페이스를 설정하도록 펌웨어 부팅 지시 허용" + +#: ../src/login/org.freedesktop.login1.policy.in.h:54 +msgid "" +"Authentication is required to indicate to the firmware to boot to setup " +"interface." +msgstr "인터페이스를 설정하도록 펌웨어 부팅을 지시하려면 인증이 필요합니다." + +#: ../src/login/org.freedesktop.login1.policy.in.h:55 +msgid "Set a wall message" +msgstr "wall 메시지 설정" + +#: ../src/login/org.freedesktop.login1.policy.in.h:56 +msgid "Authentication is required to set a wall message" +msgstr "wall 메시지를 설정하려면 인증이 필요합니다" + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:1 +msgid "Log into a local container" +msgstr "로컬 컨테이너 로그인" + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:2 +msgid "Authentication is required to log into a local container." +msgstr "로컬 컨테이너로 로그인하려면 인증이 필요합니다." + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:3 +msgid "Log into the local host" +msgstr "로컬 호스트 로그인" + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:4 +msgid "Authentication is required to log into the local host." +msgstr "로컬 호스트로 로그인하려면 인증이 필요합니다." + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:5 +msgid "Acquire a shell in a local container" +msgstr "로컬 컨테이너의 쉘 획득" + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:6 +msgid "Authentication is required to acquire a shell in a local container." +msgstr "로컬 컨테이너에서 쉘을 획득하려면 인증이 필요합니다." + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:7 +msgid "Acquire a shell on the local host" +msgstr "로컬 호스트 쉘 획득" + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:8 +msgid "Authentication is required to acquire a shell on the local host." +msgstr "로컬 호스트의 쉘을 획득하려면 인증이 필요합니다." + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:9 +msgid "Acquire a pseudo TTY in a local container" +msgstr "로컬 컨테이너에서 의사 TTY 획득" + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:10 +msgid "" +"Authentication is required to acquire a pseudo TTY in a local container." +msgstr "로컬 컨테이너에서 의사 TTY를 획득하려면 인증이 필요합니다." + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:11 +msgid "Acquire a pseudo TTY on the local host" +msgstr "로컬 호스트에서 의사 TTY 획득" + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:12 +msgid "Authentication is required to acquire a pseudo TTY on the local host." +msgstr "로컬 호스트에서 의사 TTY를 획득하려면 인증이 필요합니다." + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:13 +msgid "Manage local virtual machines and containers" +msgstr "로컬 가상 머신 및 컨테이너 관리" + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:14 +msgid "" +"Authentication is required to manage local virtual machines and containers." +msgstr "로컬 가상 머신 및 컨테이너를 관리하려면 인증이 필요합니다." + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:15 +msgid "Manage local virtual machine and container images" +msgstr "로컬 가상 머신 및 컨테이너 이미지 관리" + +#: ../src/machine/org.freedesktop.machine1.policy.in.h:16 +msgid "" +"Authentication is required to manage local virtual machine and container " +"images." +msgstr "로컬 가상 머신 및 컨테이너 이미지를 관리하려면 인증이 필요합니다." + +#: ../src/timedate/org.freedesktop.timedate1.policy.in.h:1 +msgid "Set system time" +msgstr "시스템 시간 설정" + +#: ../src/timedate/org.freedesktop.timedate1.policy.in.h:2 +msgid "Authentication is required to set the system time." +msgstr "시스템 시간을 설정하려면 인증이 필요합니다." + +#: ../src/timedate/org.freedesktop.timedate1.policy.in.h:3 +msgid "Set system timezone" +msgstr "시스템 시간대 설정" + +#: ../src/timedate/org.freedesktop.timedate1.policy.in.h:4 +msgid "Authentication is required to set the system timezone." +msgstr "시스템 시간대를 설정하려면 인증이 필요합니다." + +#: ../src/timedate/org.freedesktop.timedate1.policy.in.h:5 +msgid "Set RTC to local timezone or UTC" +msgstr "RTC를 로컬 시간대 또는 UTC로 설정" + +#: ../src/timedate/org.freedesktop.timedate1.policy.in.h:6 +msgid "" +"Authentication is required to control whether the RTC stores the local or " +"UTC time." +msgstr "" +"RTC를 로컬 시간 또는 UTC 시간으로 저장할 지 여부를 제어하려면 인증이 필요합니" +"다." + +#: ../src/timedate/org.freedesktop.timedate1.policy.in.h:7 +msgid "Turn network time synchronization on or off" +msgstr "네트워크 시간 동기화 켜거나 끄기" + +#: ../src/timedate/org.freedesktop.timedate1.policy.in.h:8 +msgid "" +"Authentication is required to control whether network time synchronization " +"shall be enabled." +msgstr "네트워크 시간 동기화의 활성화 여부를 제어하려면 인증이 필요합니다." + +#: ../src/core/dbus-unit.c:428 +msgid "Authentication is required to start '$(unit)'." +msgstr "'$(unit)' 서비스 유닛을 시작하려면 인증이 필요합니다." + +#: ../src/core/dbus-unit.c:429 +msgid "Authentication is required to stop '$(unit)'." +msgstr "'$(unit)' 서비스 유닛을 멈추려면 인증이 필요합니다." + +#: ../src/core/dbus-unit.c:430 +msgid "Authentication is required to reload '$(unit)'." +msgstr "'$(unit)' 서비스 유닛을 다시 불러오려면 인증이 필요합니다." + +#: ../src/core/dbus-unit.c:431 ../src/core/dbus-unit.c:432 +msgid "Authentication is required to restart '$(unit)'." +msgstr "'$(unit)' 서비스 유닛을 다시 시작하려면 인증이 필요합니다." + +#: ../src/core/dbus-unit.c:535 +msgid "Authentication is required to kill '$(unit)'." +msgstr "'$(unit)' 서비스 유닛을 강제로 끝내려면 인증이 필요합니다." + +#: ../src/core/dbus-unit.c:565 +msgid "Authentication is required to reset the \"failed\" state of '$(unit)'." +msgstr "'$(unit)' 서비스 유닛의 \"실패\" 상태를 되돌리려면 인증이 필요합니다." + +#: ../src/core/dbus-unit.c:597 +msgid "Authentication is required to set properties on '$(unit)'." +msgstr "'$(unit)' 서비스 유닛 속성을 설정하려면 인증이 필요합니다." diff --git a/shell-completion/bash/journalctl b/shell-completion/bash/journalctl index 1387524a85..bb2bb25deb 100644 --- a/shell-completion/bash/journalctl +++ b/shell-completion/bash/journalctl @@ -27,8 +27,8 @@ __contains_word () { __journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC} ERRNO SYSLOG_{FACILITY,IDENTIFIER,PID} COREDUMP_EXE _{P,U,G}ID _COMM _EXE _CMDLINE - _AUDIT_{SESSION,LOGINUID} - _SYSTEMD_{CGROUP,SESSION,UNIT,OWNER_UID} + _CAP_EFFECTIVE _AUDIT_{SESSION,LOGINUID} + _SYSTEMD_{CGROUP,SESSION,{,USER_}UNIT,OWNER_UID,SLICE} _SELINUX_CONTEXT _SOURCE_REALTIME_TIMESTAMP _{BOOT,MACHINE}_ID _HOSTNAME _TRANSPORT _KERNEL_{DEVICE,SUBSYSTEM} @@ -49,10 +49,11 @@ _journalctl() { --utc -x --catalog --no-full --force --dump-catalog --flush' [ARG]='-b --boot --this-boot -D --directory --file -F --field - -o --output -u --unit --user-unit -p --priority' + -o --output -u --unit --user-unit -p --priority + --vacuum-size --vacuum-time' [ARGUNKNOWN]='-c --cursor --interval -n --lines --since --until - --after-cursor --verify-key --identifier - --root --machine' + --after-cursor --verify-key -t --identifier + --root -M --machine' ) if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then diff --git a/shell-completion/bash/systemd-nspawn b/shell-completion/bash/systemd-nspawn index 83e34ef02e..f9b740380c 100644 --- a/shell-completion/bash/systemd-nspawn +++ b/shell-completion/bash/systemd-nspawn @@ -85,7 +85,7 @@ _systemd_nspawn() { CAP_SYS_CHROOT CAP_SYS_NICE CAP_SYS_PTRACE CAP_SYS_RESOURCE CAP_SYS_TTY_CONFIG' ;; --link-journal) - comps='no auto guest host' + comps='no auto guest try-guest host try-host' ;; --bind|--bind-ro) compopt -o nospace diff --git a/src/basic/util.c b/src/basic/util.c index 18be0bfd5a..bc61ec0115 100644 --- a/src/basic/util.c +++ b/src/basic/util.c @@ -2578,6 +2578,62 @@ cpu_set_t* cpu_set_malloc(unsigned *ncpus) { } } +int parse_cpu_set( + const char *rvalue, + cpu_set_t **cpu_set, + const char *unit, + const char *filename, + unsigned line, + const char *lvalue) { + + const char *whole_rvalue = rvalue; + _cleanup_cpu_free_ cpu_set_t *c = NULL; + unsigned ncpus = 0; + + assert(filename); + assert(lvalue); + assert(rvalue); + + for (;;) { + _cleanup_free_ char *word = NULL; + unsigned cpu; + int r; + + r = extract_first_word(&rvalue, &word, WHITESPACE, EXTRACT_QUOTES); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, + "Invalid value for %s: %s", lvalue, whole_rvalue); + return r; + } + if (r == 0) + break; + + r = safe_atou(word, &cpu); + + if (!c) + if (!(c = cpu_set_malloc(&ncpus))) + return log_oom(); + + if (r < 0 || cpu >= ncpus) { + log_syntax(unit, LOG_ERR, filename, line, -r, + "Failed to parse CPU affinity '%s'", rvalue); + return -EBADMSG; + } + + CPU_SET_S(cpu, CPU_ALLOC_SIZE(ncpus), c); + } + if (!isempty(rvalue)) + log_syntax(unit, LOG_ERR, filename, line, EINVAL, + "Trailing garbage, ignoring."); + + /* On success, sets *cpu_set and returns ncpus for the system. */ + if (c) { + *cpu_set = c; + c = NULL; + } + return (int) ncpus; +} + int files_same(const char *filea, const char *fileb) { struct stat a, b; @@ -5261,6 +5317,19 @@ unsigned long personality_from_string(const char *p) { if (streq(p, "x86")) return PER_LINUX; + +#elif defined(__s390x__) + + if (streq(p, "s390")) + return PER_LINUX32; + + if (streq(p, "s390x")) + return PER_LINUX; + +#elif defined(__s390__) + + if (streq(p, "s390")) + return PER_LINUX; #endif return PERSONALITY_INVALID; @@ -5280,6 +5349,20 @@ const char* personality_to_string(unsigned long p) { if (p == PER_LINUX) return "x86"; + +#elif defined(__s390x__) + + if (p == PER_LINUX) + return "s390x"; + + if (p == PER_LINUX32) + return "s390"; + +#elif defined(__s390__) + + if (p == PER_LINUX) + return "s390"; + #endif return NULL; diff --git a/src/basic/util.h b/src/basic/util.h index d53e15e6e6..56d9f037bf 100644 --- a/src/basic/util.h +++ b/src/basic/util.h @@ -375,6 +375,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(cpu_set_t*, CPU_FREE); #define _cleanup_cpu_free_ _cleanup_(CPU_FREEp) cpu_set_t* cpu_set_malloc(unsigned *ncpus); +int parse_cpu_set(const char *rvalue, cpu_set_t **cpu_set, const char *unit, const char *filename, unsigned line, const char *lvalue); #define xsprintf(buf, fmt, ...) \ assert_message_se((size_t) snprintf(buf, ELEMENTSOF(buf), fmt, __VA_ARGS__) < ELEMENTSOF(buf), \ diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index f42bee4fa9..a13f42b5e0 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -875,50 +875,30 @@ int config_parse_exec_cpu_affinity(const char *unit, void *userdata) { ExecContext *c = data; - const char *word, *state; - size_t l; + _cleanup_cpu_free_ cpu_set_t *cpuset = NULL; + int ncpus; assert(filename); assert(lvalue); assert(rvalue); assert(data); - if (isempty(rvalue)) { - /* An empty assignment resets the CPU list */ - if (c->cpuset) - CPU_FREE(c->cpuset); - c->cpuset = NULL; - return 0; - } + ncpus = parse_cpu_set(rvalue, &cpuset, unit, filename, line, lvalue); - FOREACH_WORD_QUOTED(word, l, rvalue, state) { - _cleanup_free_ char *t = NULL; - int r; - unsigned cpu; + if (ncpus < 0) + return ncpus; - t = strndup(word, l); - if (!t) - return log_oom(); + if (c->cpuset) + CPU_FREE(c->cpuset); - r = safe_atou(t, &cpu); - - if (!c->cpuset) { - c->cpuset = cpu_set_malloc(&c->cpuset_ncpus); - if (!c->cpuset) - return log_oom(); - } - - if (r < 0 || cpu >= c->cpuset_ncpus) { - log_syntax(unit, LOG_ERR, filename, line, ERANGE, - "Failed to parse CPU affinity '%s', ignoring: %s", t, rvalue); - return 0; - } - - CPU_SET_S(cpu, CPU_ALLOC_SIZE(c->cpuset_ncpus), c->cpuset); + if (ncpus == 0) + /* An empty assignment resets the CPU list */ + c->cpuset = NULL; + else { + c->cpuset = cpuset; + cpuset = NULL; } - if (!isempty(state)) - log_syntax(unit, LOG_WARNING, filename, line, EINVAL, - "Trailing garbage, ignoring."); + c->cpuset_ncpus = ncpus; return 0; } diff --git a/src/core/main.c b/src/core/main.c index b57f4c1b7a..bc72a2b00b 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -434,48 +434,16 @@ static int config_parse_cpu_affinity2( void *data, void *userdata) { - const char *whole_rvalue = rvalue; _cleanup_cpu_free_ cpu_set_t *c = NULL; - unsigned ncpus = 0; + int ncpus; - assert(filename); - assert(lvalue); - assert(rvalue); + ncpus = parse_cpu_set(rvalue, &c, unit, filename, line, lvalue); - for (;;) { - _cleanup_free_ char *word = NULL; - unsigned cpu; - int r; - - r = extract_first_word(&rvalue, &word, WHITESPACE, EXTRACT_QUOTES); - if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, r, "Invalid value for %s: %s", lvalue, whole_rvalue); - return r; - } - if (r == 0) - break; - - r = safe_atou(word, &cpu); - - if (!c) - if (!(c = cpu_set_malloc(&ncpus))) - return log_oom(); - - if (r < 0 || cpu >= ncpus) { - log_syntax(unit, LOG_ERR, filename, line, -r, - "Failed to parse CPU affinity '%s'", rvalue); - return -EBADMSG; - } - - CPU_SET_S(cpu, CPU_ALLOC_SIZE(ncpus), c); - } - if (!isempty(rvalue)) - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "Trailing garbage, ignoring."); + if (ncpus < 0) + return ncpus; - if (c) - if (sched_setaffinity(0, CPU_ALLOC_SIZE(ncpus), c) < 0) - log_warning("Failed to set CPU affinity: %m"); + if (sched_setaffinity(0, CPU_ALLOC_SIZE(ncpus), c) < 0) + log_warning("Failed to set CPU affinity: %m"); return 0; } diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index 96cc8951e6..dd508aefb5 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -709,12 +709,6 @@ int main(int argc, char *argv[]) { goto finish; } - if (argc != 1) { - log_error("This program takes no arguments."); - r = -EINVAL; - goto finish; - } - r = sd_event_default(&event); if (r < 0) { log_error_errno(r, "Failed to allocate event loop: %m"); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 5dd14b1104..db3975f466 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -501,10 +501,12 @@ void link_client_handler(Link *link) { !link->ipv4ll_route) return; - if (link_dhcp4_enabled(link) && !link->dhcp4_configured) - return; - - if (link_dhcp6_enabled(link) && !link->dhcp6_configured) + if ((link_dhcp4_enabled(link) && !link_dhcp6_enabled(link) && + !link->dhcp4_configured) || + (link_dhcp6_enabled(link) && !link_dhcp4_enabled(link) && + !link->dhcp6_configured) || + (link_dhcp4_enabled(link) && link_dhcp6_enabled(link) && + !link->dhcp4_configured && !link->dhcp6_configured)) return; if (link->state != LINK_STATE_CONFIGURED) diff --git a/src/test/test-execute.c b/src/test/test-execute.c index dd8ab7dcb8..fa6336f1fb 100644 --- a/src/test/test-execute.c +++ b/src/test/test-execute.c @@ -77,10 +77,14 @@ static void test_exec_workingdirectory(Manager *m) { } static void test_exec_personality(Manager *m) { - test(m, "exec-personality-x86.service", 0, CLD_EXITED); - #if defined(__x86_64__) test(m, "exec-personality-x86-64.service", 0, CLD_EXITED); + +#elif defined(__s390__) + test(m, "exec-personality-s390.service", 0, CLD_EXITED); + +#else + test(m, "exec-personality-x86.service", 0, CLD_EXITED); #endif } diff --git a/src/test/test-util.c b/src/test/test-util.c index 7935442dbb..f434c5ceba 100644 --- a/src/test/test-util.c +++ b/src/test/test-util.c @@ -960,6 +960,64 @@ static void test_parse_size(void) { assert_se(parse_size("-10B 20K", 1024, &bytes) == -ERANGE); } +static void test_parse_cpu_set(void) { + cpu_set_t *c = NULL; + int ncpus; + int cpu; + + /* Simple range (from CPUAffinity example) */ + ncpus = parse_cpu_set("1 2", &c, NULL, "fake", 1, "CPUAffinity"); + assert_se(ncpus >= 1024); + assert_se(CPU_ISSET_S(1, CPU_ALLOC_SIZE(ncpus), c)); + assert_se(CPU_ISSET_S(2, CPU_ALLOC_SIZE(ncpus), c)); + assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 2); + c = mfree(c); + + /* A more interesting range */ + ncpus = parse_cpu_set("0 1 2 3 8 9 10 11", &c, NULL, "fake", 1, "CPUAffinity"); + assert_se(ncpus >= 1024); + assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 8); + for (cpu = 0; cpu < 4; cpu++) + assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c)); + for (cpu = 8; cpu < 12; cpu++) + assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c)); + c = mfree(c); + + /* Quoted strings */ + ncpus = parse_cpu_set("8 '9' 10 \"11\"", &c, NULL, "fake", 1, "CPUAffinity"); + assert_se(ncpus >= 1024); + assert_se(CPU_COUNT_S(CPU_ALLOC_SIZE(ncpus), c) == 4); + for (cpu = 8; cpu < 12; cpu++) + assert_se(CPU_ISSET_S(cpu, CPU_ALLOC_SIZE(ncpus), c)); + c = mfree(c); + + /* Use commas as separators */ + ncpus = parse_cpu_set("0,1,2,3 8,9,10,11", &c, NULL, "fake", 1, "CPUAffinity"); + assert_se(ncpus < 0); + assert_se(!c); + + /* Ranges */ + ncpus = parse_cpu_set("0-3,8-11", &c, NULL, "fake", 1, "CPUAffinity"); + assert_se(ncpus < 0); + assert_se(!c); + + /* Garbage */ + ncpus = parse_cpu_set("0 1 2 3 garbage", &c, NULL, "fake", 1, "CPUAffinity"); + assert_se(ncpus < 0); + assert_se(!c); + + /* Empty string */ + c = NULL; + ncpus = parse_cpu_set("", &c, NULL, "fake", 1, "CPUAffinity"); + assert_se(ncpus == 0); /* empty string returns 0 */ + assert_se(!c); + + /* Runnaway quoted string */ + ncpus = parse_cpu_set("0 1 2 3 \"4 5 6 7 ", &c, NULL, "fake", 1, "CPUAffinity"); + assert_se(ncpus < 0); + assert_se(!c); +} + static void test_config_parse_iec_uint64(void) { uint64_t offset = 0; assert_se(config_parse_iec_uint64(NULL, "/this/file", 11, "Section", 22, "Size", 0, "4M", &offset, NULL) == 0); @@ -2250,6 +2308,7 @@ int main(int argc, char *argv[]) { test_u64log2(); test_protect_errno(); test_parse_size(); + test_parse_cpu_set(); test_config_parse_iec_uint64(); test_strextend(); test_strrep(); diff --git a/test/exec-personality-s390.service b/test/exec-personality-s390.service new file mode 100644 index 0000000000..f3c3b03e3d --- /dev/null +++ b/test/exec-personality-s390.service @@ -0,0 +1,7 @@ +[Unit] +Description=Test for Personality=s390 + +[Service] +ExecStart=/bin/sh -c 'echo $(uname -m); exit $(test $(uname -m) = "s390")' +Type=oneshot +Personality=s390 |