More patches
This commit is contained in:
parent
f1004dc2ae
commit
db38be6409
38
0578-bus-proxyd-fix-compatibility-with-old-dbus-1.patch
Normal file
38
0578-bus-proxyd-fix-compatibility-with-old-dbus-1.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From 547e849b722e597d70ba069e2cb8931317d66e00 Mon Sep 17 00:00:00 2001
|
||||
From: Lukasz Skalski <l.skalski@samsung.com>
|
||||
Date: Fri, 10 Oct 2014 16:42:19 +0200
|
||||
Subject: [PATCH] bus-proxyd: fix compatibility with old dbus-1
|
||||
|
||||
'ListQueuedOwners' method should return 'NameHasNoOwner' error
|
||||
if chosen name is not available on bus.
|
||||
---
|
||||
src/bus-proxyd/bus-proxyd.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c
|
||||
index 4f44825679..52498f33d2 100644
|
||||
--- a/src/bus-proxyd/bus-proxyd.c
|
||||
+++ b/src/bus-proxyd/bus-proxyd.c
|
||||
@@ -733,6 +733,7 @@ static int process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m) {
|
||||
struct kdbus_cmd_free cmd_free;
|
||||
struct kdbus_cmd_name *name;
|
||||
_cleanup_strv_free_ char **owners = NULL;
|
||||
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
char *arg0;
|
||||
int err = 0;
|
||||
|
||||
@@ -743,6 +744,14 @@ static int process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m) {
|
||||
if (!service_name_is_valid(arg0))
|
||||
return synthetic_reply_method_errno(m, -EINVAL, NULL);
|
||||
|
||||
+ r = sd_bus_get_owner(a, arg0, 0, NULL);
|
||||
+ if (r == -ESRCH || r == -ENXIO) {
|
||||
+ sd_bus_error_setf(&error, SD_BUS_ERROR_NAME_HAS_NO_OWNER, "Could not get owners of name '%s': no such name.", arg0);
|
||||
+ return synthetic_reply_method_errno(m, r, &error);
|
||||
+ }
|
||||
+ if (r < 0)
|
||||
+ return synthetic_reply_method_errno(m, r, NULL);
|
||||
+
|
||||
cmd.flags = KDBUS_NAME_LIST_QUEUED;
|
||||
r = ioctl(a->input_fd, KDBUS_CMD_NAME_LIST, &cmd);
|
||||
if (r < 0)
|
26
0579-Report-aa_change_onexec-error-code.patch
Normal file
26
0579-Report-aa_change_onexec-error-code.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From 5482192e5774f52f2af0665a3b58539295e9c0a4 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Scherer <misc@zarb.org>
|
||||
Date: Sat, 11 Oct 2014 04:13:43 -0400
|
||||
Subject: [PATCH] Report aa_change_onexec error code
|
||||
|
||||
Since aa_change_onexec return the error code in errno, and return
|
||||
-1, the current code do not give any useful information when
|
||||
something fail. This make apparmor easier to debug, as seen on
|
||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=760526
|
||||
---
|
||||
src/core/execute.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/execute.c b/src/core/execute.c
|
||||
index 8b9bb27137..b165b33af0 100644
|
||||
--- a/src/core/execute.c
|
||||
+++ b/src/core/execute.c
|
||||
@@ -1698,7 +1698,7 @@ static int exec_child(ExecCommand *command,
|
||||
err = aa_change_onexec(context->apparmor_profile);
|
||||
if (err < 0 && !context->apparmor_profile_ignore) {
|
||||
*error = EXIT_APPARMOR_PROFILE;
|
||||
- return err;
|
||||
+ return -errno;
|
||||
}
|
||||
}
|
||||
#endif
|
636
0580-sd-dhcp-client-support-non-Ethernet-hardware-address.patch
Normal file
636
0580-sd-dhcp-client-support-non-Ethernet-hardware-address.patch
Normal file
@ -0,0 +1,636 @@
|
||||
From 76253e73f9c9c24fec755e485516f3b55d0707b4 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Williams <dcbw@redhat.com>
|
||||
Date: Wed, 8 Oct 2014 14:15:45 -0500
|
||||
Subject: [PATCH] sd-dhcp-client: support non-Ethernet hardware addresses
|
||||
|
||||
Like Infiniband. See RFC 4390 section 2.1 for details on DHCP
|
||||
and Infiniband; chaddr is zeroed, hlen is set to 0, and htype
|
||||
is set to ARPHRD_INFINIBAND because IB hardware addresses
|
||||
are 20 bytes in length.
|
||||
---
|
||||
src/libsystemd-network/dhcp-internal.h | 10 ++--
|
||||
src/libsystemd-network/dhcp-network.c | 54 ++++++++++++++++++----
|
||||
src/libsystemd-network/dhcp-packet.c | 8 ++--
|
||||
src/libsystemd-network/sd-dhcp-client.c | 74 +++++++++++++++++++++++-------
|
||||
src/libsystemd-network/sd-dhcp-server.c | 8 ++--
|
||||
src/libsystemd-network/sd-dhcp6-client.c | 36 +++++++++++----
|
||||
src/libsystemd-network/test-dhcp-client.c | 14 ++++--
|
||||
src/libsystemd-network/test-dhcp-option.c | 2 +-
|
||||
src/libsystemd-network/test-dhcp6-client.c | 8 +++-
|
||||
src/network/networkd-dhcp4.c | 4 +-
|
||||
src/network/networkd-link.c | 12 +++--
|
||||
src/systemd/sd-dhcp-client.h | 4 +-
|
||||
src/systemd/sd-dhcp6-client.h | 4 +-
|
||||
13 files changed, 179 insertions(+), 59 deletions(-)
|
||||
|
||||
diff --git a/src/libsystemd-network/dhcp-internal.h b/src/libsystemd-network/dhcp-internal.h
|
||||
index 1069c8a03b..d358a49307 100644
|
||||
--- a/src/libsystemd-network/dhcp-internal.h
|
||||
+++ b/src/libsystemd-network/dhcp-internal.h
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <linux/if_packet.h>
|
||||
+#include <net/if_arp.h>
|
||||
#include <net/ethernet.h>
|
||||
|
||||
#include "socket-util.h"
|
||||
@@ -31,7 +32,9 @@
|
||||
#include "sd-dhcp-client.h"
|
||||
#include "dhcp-protocol.h"
|
||||
|
||||
-int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link, uint32_t xid, struct ether_addr mac_addr);
|
||||
+int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link,
|
||||
+ uint32_t xid, const uint8_t *mac_addr,
|
||||
+ size_t mac_addr_len, uint16_t arp_type);
|
||||
int dhcp_network_bind_udp_socket(be32_t address, uint16_t port);
|
||||
int dhcp_network_send_raw_socket(int s, const union sockaddr_union *link,
|
||||
const void *packet, size_t len);
|
||||
@@ -47,8 +50,9 @@ typedef int (*dhcp_option_cb_t)(uint8_t code, uint8_t len,
|
||||
int dhcp_option_parse(DHCPMessage *message, size_t len,
|
||||
dhcp_option_cb_t cb, void *user_data);
|
||||
|
||||
-int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid, uint8_t type,
|
||||
- size_t optlen, size_t *optoffset);
|
||||
+int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid,
|
||||
+ uint8_t type, uint16_t arp_type, size_t optlen,
|
||||
+ size_t *optoffset);
|
||||
|
||||
uint16_t dhcp_packet_checksum(uint8_t *buf, size_t len);
|
||||
|
||||
diff --git a/src/libsystemd-network/dhcp-network.c b/src/libsystemd-network/dhcp-network.c
|
||||
index 1ced5cf292..29e9993f66 100644
|
||||
--- a/src/libsystemd-network/dhcp-network.c
|
||||
+++ b/src/libsystemd-network/dhcp-network.c
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <sys/socket.h>
|
||||
#include <string.h>
|
||||
#include <linux/if_packet.h>
|
||||
+#include <linux/if_infiniband.h>
|
||||
#include <net/ethernet.h>
|
||||
#include <net/if_arp.h>
|
||||
#include <stdio.h>
|
||||
@@ -32,9 +33,12 @@
|
||||
|
||||
#include "dhcp-internal.h"
|
||||
|
||||
-int dhcp_network_bind_raw_socket(int ifindex, union sockaddr_union *link,
|
||||
- uint32_t xid, struct ether_addr mac_addr) {
|
||||
-
|
||||
+static int _bind_raw_socket(int ifindex, union sockaddr_union *link,
|
||||
+ uint32_t xid, const uint8_t *mac_addr,
|
||||
+ size_t mac_addr_len,
|
||||
+ const uint8_t *bcast_addr,
|
||||
+ const struct ether_addr *eth_mac,
|
||||
+ uint16_t arp_type, uint8_t dhcp_hlen) {
|
||||
struct sock_filter filter[] = {
|
||||
BPF_STMT(BPF_LD + BPF_W + BPF_LEN, 0), /* A <- packet length */
|
||||
BPF_JUMP(BPF_JMP + BPF_JGE + BPF_K, sizeof(DHCPPacket), 1, 0), /* packet >= DHCPPacket ? */
|
||||
@@ -57,21 +61,21 @@ int dhcp_network_bind_raw_socket(int ifindex, union sockaddr_union *link,
|
||||
BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, BOOTREPLY, 1, 0), /* op == BOOTREPLY ? */
|
||||
BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
|
||||
BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, dhcp.htype)), /* A <- DHCP header type */
|
||||
- BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ARPHRD_ETHER, 1, 0), /* header type == ARPHRD_ETHER ? */
|
||||
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, arp_type, 1, 0), /* header type == arp_type ? */
|
||||
BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
|
||||
BPF_STMT(BPF_LD + BPF_B + BPF_ABS, offsetof(DHCPPacket, dhcp.hlen)), /* A <- mac address length */
|
||||
- BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ETHER_ADDR_LEN, 1, 0), /* address length == ETHER_ADDR_LEN ? */
|
||||
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, dhcp_hlen, 1, 0), /* address length == dhcp_hlen ? */
|
||||
BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
|
||||
BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(DHCPPacket, dhcp.xid)), /* A <- client identifier */
|
||||
BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, xid, 1, 0), /* client identifier == xid ? */
|
||||
BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
|
||||
- BPF_STMT(BPF_LD + BPF_IMM, htobe32(*((unsigned int *) &mac_addr))), /* A <- 4 bytes of client's MAC */
|
||||
+ BPF_STMT(BPF_LD + BPF_IMM, htobe32(*((unsigned int *) eth_mac))), /* A <- 4 bytes of client's MAC */
|
||||
BPF_STMT(BPF_MISC + BPF_TAX, 0), /* X <- A */
|
||||
BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(DHCPPacket, dhcp.chaddr)), /* A <- 4 bytes of MAC from dhcp.chaddr */
|
||||
BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0), /* A xor X */
|
||||
BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 1, 0), /* A == 0 ? */
|
||||
BPF_STMT(BPF_RET + BPF_K, 0), /* ignore */
|
||||
- BPF_STMT(BPF_LD + BPF_IMM, htobe16(*((unsigned short *) (((char *) &mac_addr) + 4)))), /* A <- remainder of client's MAC */
|
||||
+ BPF_STMT(BPF_LD + BPF_IMM, htobe16(*((unsigned short *) (((char *) eth_mac) + 4)))), /* A <- remainder of client's MAC */
|
||||
BPF_STMT(BPF_MISC + BPF_TAX, 0), /* X <- A */
|
||||
BPF_STMT(BPF_LD + BPF_H + BPF_ABS, offsetof(DHCPPacket, dhcp.chaddr) + 4), /* A <- remainder of MAC from dhcp.chaddr */
|
||||
BPF_STMT(BPF_ALU + BPF_XOR + BPF_X, 0), /* A xor X */
|
||||
@@ -107,8 +111,9 @@ int dhcp_network_bind_raw_socket(int ifindex, union sockaddr_union *link,
|
||||
link->ll.sll_family = AF_PACKET;
|
||||
link->ll.sll_protocol = htons(ETH_P_IP);
|
||||
link->ll.sll_ifindex = ifindex;
|
||||
- link->ll.sll_halen = ETH_ALEN;
|
||||
- memset(link->ll.sll_addr, 0xff, ETH_ALEN);
|
||||
+ link->ll.sll_hatype = htons(arp_type);
|
||||
+ link->ll.sll_halen = mac_addr_len;
|
||||
+ memcpy(link->ll.sll_addr, bcast_addr, mac_addr_len);
|
||||
|
||||
r = bind(s, &link->sa, sizeof(link->ll));
|
||||
if (r < 0)
|
||||
@@ -120,6 +125,37 @@ int dhcp_network_bind_raw_socket(int ifindex, union sockaddr_union *link,
|
||||
return r;
|
||||
}
|
||||
|
||||
+int dhcp_network_bind_raw_socket(int ifindex, union sockaddr_union *link,
|
||||
+ uint32_t xid, const uint8_t *mac_addr,
|
||||
+ size_t mac_addr_len, uint16_t arp_type) {
|
||||
+ static const uint8_t eth_bcast[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
|
||||
+ /* Default broadcast address for IPoIB */
|
||||
+ static const uint8_t ib_bcast[] = {
|
||||
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x12, 0x40, 0x1b,
|
||||
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
+ 0xff, 0xff, 0xff, 0xff
|
||||
+ };
|
||||
+ struct ether_addr eth_mac = { { 0, 0, 0, 0, 0, 0 } };
|
||||
+ const uint8_t *bcast_addr = NULL;
|
||||
+ uint8_t dhcp_hlen = 0;
|
||||
+
|
||||
+ assert_return(mac_addr_len > 0, -EINVAL);
|
||||
+
|
||||
+ if (arp_type == ARPHRD_ETHER) {
|
||||
+ assert_return(mac_addr_len == ETH_ALEN, -EINVAL);
|
||||
+ memcpy(ð_mac, mac_addr, ETH_ALEN);
|
||||
+ bcast_addr = eth_bcast;
|
||||
+ dhcp_hlen = ETH_ALEN;
|
||||
+ } else if (arp_type == ARPHRD_INFINIBAND) {
|
||||
+ assert_return(mac_addr_len == INFINIBAND_ALEN, -EINVAL);
|
||||
+ bcast_addr = ib_bcast;
|
||||
+ } else
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ return _bind_raw_socket(ifindex, link, xid, mac_addr, mac_addr_len,
|
||||
+ bcast_addr, ð_mac, arp_type, dhcp_hlen);
|
||||
+}
|
||||
+
|
||||
int dhcp_network_bind_udp_socket(be32_t address, uint16_t port) {
|
||||
union sockaddr_union src = {
|
||||
.in.sin_family = AF_INET,
|
||||
diff --git a/src/libsystemd-network/dhcp-packet.c b/src/libsystemd-network/dhcp-packet.c
|
||||
index 9f850fdebb..7581daeeeb 100644
|
||||
--- a/src/libsystemd-network/dhcp-packet.c
|
||||
+++ b/src/libsystemd-network/dhcp-packet.c
|
||||
@@ -38,15 +38,17 @@
|
||||
#define DHCP_CLIENT_MIN_OPTIONS_SIZE 312
|
||||
|
||||
int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid,
|
||||
- uint8_t type, size_t optlen, size_t *optoffset) {
|
||||
+ uint8_t type, uint16_t arp_type, size_t optlen,
|
||||
+ size_t *optoffset) {
|
||||
size_t offset = 0;
|
||||
int r;
|
||||
|
||||
assert(op == BOOTREQUEST || op == BOOTREPLY);
|
||||
+ assert(arp_type == ARPHRD_ETHER || arp_type == ARPHRD_INFINIBAND);
|
||||
|
||||
message->op = op;
|
||||
- message->htype = ARPHRD_ETHER;
|
||||
- message->hlen = ETHER_ADDR_LEN;
|
||||
+ message->htype = arp_type;
|
||||
+ message->hlen = (arp_type == ARPHRD_ETHER) ? ETHER_ADDR_LEN : 0;
|
||||
message->xid = htobe32(xid);
|
||||
message->magic = htobe32(DHCP_MAGIC_COOKIE);
|
||||
|
||||
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
|
||||
index 2f94c16078..0eba4c379d 100644
|
||||
--- a/src/libsystemd-network/sd-dhcp-client.c
|
||||
+++ b/src/libsystemd-network/sd-dhcp-client.c
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <stdio.h>
|
||||
#include <net/ethernet.h>
|
||||
#include <net/if_arp.h>
|
||||
+#include <linux/if_infiniband.h>
|
||||
#include <netinet/ether.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/ioctl.h>
|
||||
@@ -37,6 +38,8 @@
|
||||
#include "dhcp-lease-internal.h"
|
||||
#include "sd-dhcp-client.h"
|
||||
|
||||
+#define MAX_MAC_ADDR_LEN INFINIBAND_ALEN
|
||||
+
|
||||
struct sd_dhcp_client {
|
||||
RefCount n_ref;
|
||||
|
||||
@@ -57,6 +60,9 @@ struct sd_dhcp_client {
|
||||
uint8_t type;
|
||||
struct ether_addr mac_addr;
|
||||
} _packed_ client_id;
|
||||
+ uint8_t mac_addr[MAX_MAC_ADDR_LEN];
|
||||
+ size_t mac_addr_len;
|
||||
+ uint16_t arp_type;
|
||||
char *hostname;
|
||||
char *vendor_class_identifier;
|
||||
uint32_t mtu;
|
||||
@@ -163,15 +169,25 @@ int sd_dhcp_client_set_index(sd_dhcp_client *client, int interface_index) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int sd_dhcp_client_set_mac(sd_dhcp_client *client,
|
||||
- const struct ether_addr *addr) {
|
||||
+int sd_dhcp_client_set_mac(sd_dhcp_client *client, const uint8_t *addr,
|
||||
+ size_t addr_len, uint16_t arp_type) {
|
||||
DHCP_CLIENT_DONT_DESTROY(client);
|
||||
bool need_restart = false;
|
||||
|
||||
assert_return(client, -EINVAL);
|
||||
assert_return(addr, -EINVAL);
|
||||
+ assert_return(addr_len > 0 && addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
|
||||
+ assert_return(arp_type > 0, -EINVAL);
|
||||
+
|
||||
+ if (arp_type == ARPHRD_ETHER)
|
||||
+ assert_return(addr_len == ETH_ALEN, -EINVAL);
|
||||
+ else if (arp_type == ARPHRD_INFINIBAND)
|
||||
+ assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
|
||||
+ else
|
||||
+ return -EINVAL;
|
||||
|
||||
- if (memcmp(&client->client_id.mac_addr, addr, ETH_ALEN) == 0)
|
||||
+ if (client->mac_addr_len == addr_len &&
|
||||
+ memcmp(&client->mac_addr, addr, addr_len) == 0)
|
||||
return 0;
|
||||
|
||||
if (!IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_STOPPED)) {
|
||||
@@ -181,6 +197,10 @@ int sd_dhcp_client_set_mac(sd_dhcp_client *client,
|
||||
client_stop(client, DHCP_EVENT_STOP);
|
||||
}
|
||||
|
||||
+ memcpy(&client->mac_addr, addr, addr_len);
|
||||
+ client->mac_addr_len = addr_len;
|
||||
+ client->arp_type = arp_type;
|
||||
+
|
||||
memcpy(&client->client_id.mac_addr, addr, ETH_ALEN);
|
||||
client->client_id.type = 0x01;
|
||||
|
||||
@@ -318,7 +338,7 @@ static int client_message_init(sd_dhcp_client *client, DHCPPacket **ret,
|
||||
return -ENOMEM;
|
||||
|
||||
r = dhcp_message_init(&packet->dhcp, BOOTREQUEST, client->xid, type,
|
||||
- optlen, &optoffset);
|
||||
+ client->arp_type, optlen, &optoffset);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@@ -337,14 +357,17 @@ static int client_message_init(sd_dhcp_client *client, DHCPPacket **ret,
|
||||
Note: some interfaces needs this to be enabled, but some networks
|
||||
needs this to be disabled as broadcasts are filteretd, so this
|
||||
needs to be configurable */
|
||||
- if (client->request_broadcast)
|
||||
+ if (client->request_broadcast || client->arp_type != ARPHRD_ETHER)
|
||||
packet->dhcp.flags = htobe16(0x8000);
|
||||
|
||||
/* RFC2132 section 4.1.1:
|
||||
The client MUST include its hardware address in the ’chaddr’ field, if
|
||||
- necessary for delivery of DHCP reply messages.
|
||||
+ necessary for delivery of DHCP reply messages. Non-Ethernet
|
||||
+ interfaces will leave 'chaddr' empty and use the client identifier
|
||||
+ instead (eg, RFC 4390 section 2.1).
|
||||
*/
|
||||
- memcpy(&packet->dhcp.chaddr, &client->client_id.mac_addr, ETH_ALEN);
|
||||
+ if (client->arp_type == ARPHRD_ETHER)
|
||||
+ memcpy(&packet->dhcp.chaddr, &client->mac_addr, ETH_ALEN);
|
||||
|
||||
/* Some DHCP servers will refuse to issue an DHCP lease if the Client
|
||||
Identifier option is not set */
|
||||
@@ -843,7 +866,9 @@ static int client_start(sd_dhcp_client *client) {
|
||||
|
||||
client->xid = random_u32();
|
||||
|
||||
- r = dhcp_network_bind_raw_socket(client->index, &client->link, client->xid, client->client_id.mac_addr);
|
||||
+ r = dhcp_network_bind_raw_socket(client->index, &client->link,
|
||||
+ client->xid, client->mac_addr,
|
||||
+ client->mac_addr_len, client->arp_type);
|
||||
if (r < 0) {
|
||||
client_stop(client, r);
|
||||
return r;
|
||||
@@ -887,7 +912,9 @@ static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata)
|
||||
client->state = DHCP_STATE_REBINDING;
|
||||
client->attempt = 1;
|
||||
|
||||
- r = dhcp_network_bind_raw_socket(client->index, &client->link, client->xid, client->client_id.mac_addr);
|
||||
+ r = dhcp_network_bind_raw_socket(client->index, &client->link,
|
||||
+ client->xid, client->mac_addr,
|
||||
+ client->mac_addr_len, client->arp_type);
|
||||
if (r < 0) {
|
||||
client_stop(client, r);
|
||||
return 0;
|
||||
@@ -1331,6 +1358,9 @@ static int client_receive_message_udp(sd_event_source *s, int fd,
|
||||
sd_dhcp_client *client = userdata;
|
||||
_cleanup_free_ DHCPMessage *message = NULL;
|
||||
int buflen = 0, len, r;
|
||||
+ const struct ether_addr zero_mac = { { 0, 0, 0, 0, 0, 0 } };
|
||||
+ const struct ether_addr *expected_chaddr = NULL;
|
||||
+ uint8_t expected_hlen = 0;
|
||||
|
||||
assert(s);
|
||||
assert(client);
|
||||
@@ -1367,13 +1397,26 @@ static int client_receive_message_udp(sd_event_source *s, int fd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
- if (message->htype != ARPHRD_ETHER || message->hlen != ETHER_ADDR_LEN) {
|
||||
- log_dhcp_client(client, "not an ethernet packet");
|
||||
+ if (message->htype != client->arp_type) {
|
||||
+ log_dhcp_client(client, "packet type does not match client type");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (client->arp_type == ARPHRD_ETHER) {
|
||||
+ expected_hlen = ETH_ALEN;
|
||||
+ expected_chaddr = (const struct ether_addr *) &client->mac_addr;
|
||||
+ } else {
|
||||
+ /* Non-ethernet links expect zero chaddr */
|
||||
+ expected_hlen = 0;
|
||||
+ expected_chaddr = &zero_mac;
|
||||
+ }
|
||||
+
|
||||
+ if (message->hlen != expected_hlen) {
|
||||
+ log_dhcp_client(client, "unexpected packet hlen %d", message->hlen);
|
||||
return 0;
|
||||
}
|
||||
|
||||
- if (memcmp(&message->chaddr[0], &client->client_id.mac_addr,
|
||||
- ETH_ALEN)) {
|
||||
+ if (memcmp(&message->chaddr[0], expected_chaddr, ETH_ALEN)) {
|
||||
log_dhcp_client(client, "received chaddr does not match "
|
||||
"expected: ignoring");
|
||||
return 0;
|
||||
@@ -1455,7 +1498,6 @@ static int client_receive_message_raw(sd_event_source *s, int fd,
|
||||
}
|
||||
|
||||
int sd_dhcp_client_start(sd_dhcp_client *client) {
|
||||
- char buffer[ETHER_ADDR_TO_STRING_MAX];
|
||||
int r;
|
||||
|
||||
assert_return(client, -EINVAL);
|
||||
@@ -1469,9 +1511,7 @@ int sd_dhcp_client_start(sd_dhcp_client *client) {
|
||||
|
||||
r = client_start(client);
|
||||
if (r >= 0)
|
||||
- log_dhcp_client(client, "STARTED on ifindex %u with address %s",
|
||||
- client->index,
|
||||
- ether_addr_to_string(&client->client_id.mac_addr, buffer));
|
||||
+ log_dhcp_client(client, "STARTED on ifindex %u", client->index);
|
||||
|
||||
return r;
|
||||
}
|
||||
diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c
|
||||
index a6d6178e72..24fedd2375 100644
|
||||
--- a/src/libsystemd-network/sd-dhcp-server.c
|
||||
+++ b/src/libsystemd-network/sd-dhcp-server.c
|
||||
@@ -392,8 +392,8 @@ static int server_message_init(sd_dhcp_server *server, DHCPPacket **ret,
|
||||
return -ENOMEM;
|
||||
|
||||
r = dhcp_message_init(&packet->dhcp, BOOTREPLY,
|
||||
- be32toh(req->message->xid), type, req->max_optlen,
|
||||
- &optoffset);
|
||||
+ be32toh(req->message->xid), type, ARPHRD_ETHER,
|
||||
+ req->max_optlen, &optoffset);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@@ -513,8 +513,8 @@ static int server_send_forcerenew(sd_dhcp_server *server, be32_t address,
|
||||
return -ENOMEM;
|
||||
|
||||
r = dhcp_message_init(&packet->dhcp, BOOTREPLY, 0,
|
||||
- DHCP_FORCERENEW, DHCP_MIN_OPTIONS_SIZE,
|
||||
- &optoffset);
|
||||
+ DHCP_FORCERENEW, ARPHRD_ETHER,
|
||||
+ DHCP_MIN_OPTIONS_SIZE, &optoffset);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
|
||||
index 6ea68c915f..fa4f9b5dc2 100644
|
||||
--- a/src/libsystemd-network/sd-dhcp6-client.c
|
||||
+++ b/src/libsystemd-network/sd-dhcp6-client.c
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <sys/ioctl.h>
|
||||
+#include <linux/if_infiniband.h>
|
||||
|
||||
#include "udev.h"
|
||||
#include "udev-util.h"
|
||||
@@ -44,6 +45,8 @@
|
||||
*/
|
||||
#define MAX_DUID_LEN 128
|
||||
|
||||
+#define MAX_MAC_ADDR_LEN INFINIBAND_ALEN
|
||||
+
|
||||
struct sd_dhcp6_client {
|
||||
RefCount n_ref;
|
||||
|
||||
@@ -51,7 +54,9 @@ struct sd_dhcp6_client {
|
||||
sd_event *event;
|
||||
int event_priority;
|
||||
int index;
|
||||
- struct ether_addr mac_addr;
|
||||
+ uint8_t mac_addr[MAX_MAC_ADDR_LEN];
|
||||
+ size_t mac_addr_len;
|
||||
+ uint16_t arp_type;
|
||||
DHCP6IA ia_na;
|
||||
be32_t transaction_id;
|
||||
usec_t transaction_start;
|
||||
@@ -160,15 +165,28 @@ int sd_dhcp6_client_set_index(sd_dhcp6_client *client, int interface_index)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int sd_dhcp6_client_set_mac(sd_dhcp6_client *client,
|
||||
- const struct ether_addr *mac_addr)
|
||||
+int sd_dhcp6_client_set_mac(sd_dhcp6_client *client, const uint8_t *addr,
|
||||
+ size_t addr_len, uint16_t arp_type)
|
||||
{
|
||||
assert_return(client, -EINVAL);
|
||||
-
|
||||
- if (mac_addr)
|
||||
- memcpy(&client->mac_addr, mac_addr, sizeof(client->mac_addr));
|
||||
+ assert_return(addr, -EINVAL);
|
||||
+ assert_return(addr_len > 0 && addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
|
||||
+ assert_return(arp_type > 0, -EINVAL);
|
||||
+
|
||||
+ if (arp_type == ARPHRD_ETHER)
|
||||
+ assert_return(addr_len == ETH_ALEN, -EINVAL);
|
||||
+ else if (arp_type == ARPHRD_INFINIBAND)
|
||||
+ assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
|
||||
else
|
||||
- memset(&client->mac_addr, 0x00, sizeof(client->mac_addr));
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (client->mac_addr_len == addr_len &&
|
||||
+ memcmp(&client->mac_addr, addr, addr_len) == 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ memcpy(&client->mac_addr, addr, addr_len);
|
||||
+ client->mac_addr_len = addr_len;
|
||||
+ client->arp_type = arp_type;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -646,8 +664,8 @@ static int client_ensure_iaid(sd_dhcp6_client *client) {
|
||||
siphash24((uint8_t*)&id, name, strlen(name), HASH_KEY.bytes);
|
||||
else
|
||||
/* fall back to mac address if no predictable name available */
|
||||
- siphash24((uint8_t*)&id, &client->mac_addr, ETH_ALEN,
|
||||
- HASH_KEY.bytes);
|
||||
+ siphash24((uint8_t*)&id, &client->mac_addr,
|
||||
+ client->mac_addr_len, HASH_KEY.bytes);
|
||||
|
||||
/* fold into 32 bits */
|
||||
client->ia_na.id = (id & 0xffffffff) ^ (id >> 32);
|
||||
diff --git a/src/libsystemd-network/test-dhcp-client.c b/src/libsystemd-network/test-dhcp-client.c
|
||||
index c48aa04b8d..7dab97de2f 100644
|
||||
--- a/src/libsystemd-network/test-dhcp-client.c
|
||||
+++ b/src/libsystemd-network/test-dhcp-client.c
|
||||
@@ -196,7 +196,9 @@ int dhcp_network_send_raw_socket(int s, const union sockaddr_union *link,
|
||||
return 575;
|
||||
}
|
||||
|
||||
-int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link, uint32_t id, struct ether_addr mac)
|
||||
+int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link,
|
||||
+ uint32_t id, const uint8_t *addr,
|
||||
+ size_t addr_len, uint16_t arp_type)
|
||||
{
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, test_fd) < 0)
|
||||
return -errno;
|
||||
@@ -244,7 +246,10 @@ static void test_discover_message(sd_event *e)
|
||||
assert_se(r >= 0);
|
||||
|
||||
assert_se(sd_dhcp_client_set_index(client, 42) >= 0);
|
||||
- assert_se(sd_dhcp_client_set_mac(client, &mac_addr) >= 0);
|
||||
+ assert_se(sd_dhcp_client_set_mac(client,
|
||||
+ (const uint8_t *) &mac_addr,
|
||||
+ sizeof (mac_addr),
|
||||
+ ARPHRD_ETHER) >= 0);
|
||||
|
||||
assert_se(sd_dhcp_client_set_request_option(client, 248) >= 0);
|
||||
|
||||
@@ -462,7 +467,10 @@ static void test_addr_acq(sd_event *e) {
|
||||
assert_se(r >= 0);
|
||||
|
||||
assert_se(sd_dhcp_client_set_index(client, 42) >= 0);
|
||||
- assert_se(sd_dhcp_client_set_mac(client, &mac_addr) >= 0);
|
||||
+ assert_se(sd_dhcp_client_set_mac(client,
|
||||
+ (const uint8_t *) &mac_addr,
|
||||
+ sizeof (mac_addr),
|
||||
+ ARPHRD_ETHER) >= 0);
|
||||
|
||||
assert_se(sd_dhcp_client_set_callback(client, test_addr_acq_acquired, e)
|
||||
>= 0);
|
||||
diff --git a/src/libsystemd-network/test-dhcp-option.c b/src/libsystemd-network/test-dhcp-option.c
|
||||
index 63cdc7aa06..eac3844f96 100644
|
||||
--- a/src/libsystemd-network/test-dhcp-option.c
|
||||
+++ b/src/libsystemd-network/test-dhcp-option.c
|
||||
@@ -92,7 +92,7 @@ static void test_message_init(void)
|
||||
message = malloc0(len);
|
||||
|
||||
assert_se(dhcp_message_init(message, BOOTREQUEST, 0x12345678,
|
||||
- DHCP_DISCOVER, optlen, &optoffset) >= 0);
|
||||
+ DHCP_DISCOVER, ARPHRD_ETHER, optlen, &optoffset) >= 0);
|
||||
|
||||
assert_se(message->xid == htobe32(0x12345678));
|
||||
assert_se(message->op == BOOTREQUEST);
|
||||
diff --git a/src/libsystemd-network/test-dhcp6-client.c b/src/libsystemd-network/test-dhcp6-client.c
|
||||
index 37ddfc2cfa..26b28a20e8 100644
|
||||
--- a/src/libsystemd-network/test-dhcp6-client.c
|
||||
+++ b/src/libsystemd-network/test-dhcp6-client.c
|
||||
@@ -66,7 +66,9 @@ static int test_client_basic(sd_event *e) {
|
||||
assert_se(sd_dhcp6_client_set_index(client, -1) == 0);
|
||||
assert_se(sd_dhcp6_client_set_index(client, 42) >= 0);
|
||||
|
||||
- assert_se(sd_dhcp6_client_set_mac(client, &mac_addr) >= 0);
|
||||
+ assert_se(sd_dhcp6_client_set_mac(client, (const uint8_t *) &mac_addr,
|
||||
+ sizeof (mac_addr),
|
||||
+ ARPHRD_ETHER) >= 0);
|
||||
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, DHCP6_OPTION_CLIENTID) == -EINVAL);
|
||||
assert_se(sd_dhcp6_client_set_request_option(client, DHCP6_OPTION_DNS_SERVERS) == -EEXIST);
|
||||
@@ -572,7 +574,9 @@ static int test_client_solicit(sd_event *e) {
|
||||
assert_se(sd_dhcp6_client_attach_event(client, e, 0) >= 0);
|
||||
|
||||
assert_se(sd_dhcp6_client_set_index(client, test_index) == 0);
|
||||
- assert_se(sd_dhcp6_client_set_mac(client, &mac_addr) >= 0);
|
||||
+ assert_se(sd_dhcp6_client_set_mac(client, (const uint8_t *) &mac_addr,
|
||||
+ sizeof (mac_addr),
|
||||
+ ARPHRD_ETHER) >= 0);
|
||||
|
||||
assert_se(sd_dhcp6_client_set_callback(client,
|
||||
test_client_solicit_cb, e) >= 0);
|
||||
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
|
||||
index e451af8643..63bfa86f99 100644
|
||||
--- a/src/network/networkd-dhcp4.c
|
||||
+++ b/src/network/networkd-dhcp4.c
|
||||
@@ -599,7 +599,9 @@ int dhcp4_configure(Link *link) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- r = sd_dhcp_client_set_mac(link->dhcp_client, &link->mac);
|
||||
+ r = sd_dhcp_client_set_mac(link->dhcp_client,
|
||||
+ (const uint8_t *) &link->mac,
|
||||
+ sizeof (link->mac), ARPHRD_ETHER);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
|
||||
index dcbe38a90a..c6e173fbc6 100644
|
||||
--- a/src/network/networkd-link.c
|
||||
+++ b/src/network/networkd-link.c
|
||||
@@ -909,7 +909,9 @@ static void icmp6_router_handler(sd_icmp6_nd *nd, int event, void *userdata) {
|
||||
return;
|
||||
}
|
||||
|
||||
- r = sd_dhcp6_client_set_mac(link->dhcp6_client, &link->mac);
|
||||
+ r = sd_dhcp6_client_set_mac(link->dhcp6_client,
|
||||
+ (const uint8_t *) &link->mac,
|
||||
+ sizeof (link->mac), ARPHRD_ETHER);
|
||||
if (r < 0) {
|
||||
link->dhcp6_client = sd_dhcp6_client_unref(link->dhcp6_client);
|
||||
return;
|
||||
@@ -1647,7 +1649,9 @@ int link_update(Link *link, sd_rtnl_message *m) {
|
||||
|
||||
if (link->dhcp_client) {
|
||||
r = sd_dhcp_client_set_mac(link->dhcp_client,
|
||||
- &link->mac);
|
||||
+ (const uint8_t *) &link->mac,
|
||||
+ sizeof (link->mac),
|
||||
+ ARPHRD_ETHER);
|
||||
if (r < 0) {
|
||||
log_warning_link(link,
|
||||
"Could not update MAC address in DHCP client: %s",
|
||||
@@ -1658,7 +1662,9 @@ int link_update(Link *link, sd_rtnl_message *m) {
|
||||
|
||||
if (link->dhcp6_client) {
|
||||
r = sd_dhcp6_client_set_mac(link->dhcp6_client,
|
||||
- &link->mac);
|
||||
+ (const uint8_t *) &link->mac,
|
||||
+ sizeof (link->mac),
|
||||
+ ARPHRD_ETHER);
|
||||
if (r < 0) {
|
||||
log_warning_link(link,
|
||||
"Could not update MAC address in DHCPv6 client: %s",
|
||||
diff --git a/src/systemd/sd-dhcp-client.h b/src/systemd/sd-dhcp-client.h
|
||||
index 98c67829b7..7416f82193 100644
|
||||
--- a/src/systemd/sd-dhcp-client.h
|
||||
+++ b/src/systemd/sd-dhcp-client.h
|
||||
@@ -49,8 +49,8 @@ int sd_dhcp_client_set_request_address(sd_dhcp_client *client,
|
||||
const struct in_addr *last_address);
|
||||
int sd_dhcp_client_set_request_broadcast(sd_dhcp_client *client, int broadcast);
|
||||
int sd_dhcp_client_set_index(sd_dhcp_client *client, int interface_index);
|
||||
-int sd_dhcp_client_set_mac(sd_dhcp_client *client,
|
||||
- const struct ether_addr *addr);
|
||||
+int sd_dhcp_client_set_mac(sd_dhcp_client *client, const uint8_t *addr,
|
||||
+ size_t addr_len, uint16_t arp_type);
|
||||
int sd_dhcp_client_set_mtu(sd_dhcp_client *client, uint32_t mtu);
|
||||
int sd_dhcp_client_set_hostname(sd_dhcp_client *client, const char *hostname);
|
||||
int sd_dhcp_client_set_vendor_class_identifier(sd_dhcp_client *client, const char *vci);
|
||||
diff --git a/src/systemd/sd-dhcp6-client.h b/src/systemd/sd-dhcp6-client.h
|
||||
index a4409e8d4e..c7f168fe21 100644
|
||||
--- a/src/systemd/sd-dhcp6-client.h
|
||||
+++ b/src/systemd/sd-dhcp6-client.h
|
||||
@@ -43,8 +43,8 @@ int sd_dhcp6_client_set_callback(sd_dhcp6_client *client,
|
||||
sd_dhcp6_client_cb_t cb, void *userdata);
|
||||
|
||||
int sd_dhcp6_client_set_index(sd_dhcp6_client *client, int interface_index);
|
||||
-int sd_dhcp6_client_set_mac(sd_dhcp6_client *client,
|
||||
- const struct ether_addr *mac_addr);
|
||||
+int sd_dhcp6_client_set_mac(sd_dhcp6_client *client, const uint8_t *addr,
|
||||
+ size_t addr_len, uint16_t arp_type);
|
||||
int sd_dhcp6_client_set_duid(sd_dhcp6_client *client, uint16_t type, uint8_t *duid,
|
||||
size_t duid_len);
|
||||
int sd_dhcp6_client_set_request_option(sd_dhcp6_client *client,
|
46
0581-terminal-grdrm-force-deep-modeset-on-enter.patch
Normal file
46
0581-terminal-grdrm-force-deep-modeset-on-enter.patch
Normal file
@ -0,0 +1,46 @@
|
||||
From f08f302732c0597c83ec6b8022aa82faffb116f9 Mon Sep 17 00:00:00 2001
|
||||
From: David Herrmann <dh.herrmann@gmail.com>
|
||||
Date: Sat, 11 Oct 2014 18:49:20 +0200
|
||||
Subject: [PATCH] terminal/grdrm: force deep modeset on enter
|
||||
|
||||
Usually, when our session is activated (or re-configurated) we should be
|
||||
able to try a page-flip to our buffer. The kernel driver should reject it
|
||||
if it is incompatible. As it turns out, drivers don't do this. Therefore,
|
||||
we now force a deep modeset if we're not sure what mode is set.
|
||||
|
||||
This has the side-effect that we might get glitches on session-switches
|
||||
(depending on driver behavior). However, there's no way around this and it
|
||||
is what everyone does so far. Most drivers still detect if we keep the
|
||||
mode and so don't touch the clocks. Therefore, we just get a regular async
|
||||
flip.
|
||||
---
|
||||
src/libsystemd-terminal/grdev-drm.c | 15 ++++++++++++++-
|
||||
1 file changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/libsystemd-terminal/grdev-drm.c b/src/libsystemd-terminal/grdev-drm.c
|
||||
index 232321c0e2..dba6db2691 100644
|
||||
--- a/src/libsystemd-terminal/grdev-drm.c
|
||||
+++ b/src/libsystemd-terminal/grdev-drm.c
|
||||
@@ -1158,8 +1158,21 @@ static int grdrm_crtc_commit_flip(grdrm_crtc *crtc, grdev_fb *basefb) {
|
||||
assert(basefb);
|
||||
assert(pipe);
|
||||
|
||||
- if (!crtc->applied && !grdrm_modes_compatible(&crtc->kern.mode, &crtc->set.mode))
|
||||
+ if (!crtc->applied) {
|
||||
+ if (!grdrm_modes_compatible(&crtc->kern.mode, &crtc->set.mode))
|
||||
+ return 0;
|
||||
+
|
||||
+ /* TODO: Theoretically, we should be able to page-flip to our
|
||||
+ * framebuffer here. We didn't perform any deep modeset, but the
|
||||
+ * DRM driver is really supposed to reject our page-flip in case
|
||||
+ * the FB is not compatible. We then properly fall back to a
|
||||
+ * deep modeset.
|
||||
+ * As it turns out, drivers don't to this. Therefore, we need to
|
||||
+ * perform a full modeset on enter now. We might avoid this in
|
||||
+ * the future with fixed drivers.. */
|
||||
+
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
fb = fb_from_base(basefb);
|
||||
|
31
0582-NEWS-don-t-mention-noinst_-debug-programs.patch
Normal file
31
0582-NEWS-don-t-mention-noinst_-debug-programs.patch
Normal file
@ -0,0 +1,31 @@
|
||||
From 4623e36006c1428e876c9a326b43f713cfec658e Mon Sep 17 00:00:00 2001
|
||||
From: David Herrmann <dh.herrmann@gmail.com>
|
||||
Date: Sat, 11 Oct 2014 18:53:26 +0200
|
||||
Subject: [PATCH] NEWS: don't mention noinst_* debug programs
|
||||
|
||||
systemd-evcat and systemd-modeset are not installed systemd wide and
|
||||
should really just be used by developers to test the libsystemd-terminal
|
||||
features. No reason to mention it in NEWS.. despite the undulating
|
||||
rainbows..
|
||||
---
|
||||
NEWS | 7 -------
|
||||
1 file changed, 7 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index 6d93787bf8..c18ceaac5e 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -37,13 +37,6 @@ CHANGES WITH 217:
|
||||
generator will parse the resume= option on the kernel
|
||||
command-line to trigger resume.
|
||||
|
||||
- * systemd-evcat input debugging tool has been added. It will
|
||||
- print keys read for the input system and show modifier
|
||||
- status.
|
||||
-
|
||||
- * systemd-modeset graphics debugging tool will show undulating
|
||||
- rainbows on all connected displays.
|
||||
-
|
||||
* A user console daemon systemd-consoled has been added. It is
|
||||
a preview, and will so far open a single terminal on each
|
||||
session of the user marked as Desktop=SYSTEMD-CONSOLE.
|
90
0583-Modernization.patch
Normal file
90
0583-Modernization.patch
Normal file
@ -0,0 +1,90 @@
|
||||
From b1389b0d0805392570085acc7cb10eafcf885405 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Sat, 11 Oct 2014 11:37:37 -0400
|
||||
Subject: [PATCH] Modernization
|
||||
|
||||
---
|
||||
src/core/load-fragment.c | 14 ++++++--------
|
||||
src/journal/journald-server.c | 5 ++---
|
||||
2 files changed, 8 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
|
||||
index 0620882b4e..6b6f9908b5 100644
|
||||
--- a/src/core/load-fragment.c
|
||||
+++ b/src/core/load-fragment.c
|
||||
@@ -288,7 +288,8 @@ int config_parse_socket_listen(const char *unit,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
- SocketPort *p, *tail;
|
||||
+ _cleanup_free_ SocketPort *p = NULL;
|
||||
+ SocketPort *tail;
|
||||
Socket *s;
|
||||
int r;
|
||||
|
||||
@@ -315,10 +316,9 @@ int config_parse_socket_listen(const char *unit,
|
||||
r = unit_full_printf(UNIT(s), rvalue, &p->path);
|
||||
if (r < 0) {
|
||||
p->path = strdup(rvalue);
|
||||
- if (!p->path) {
|
||||
- free(p);
|
||||
+ if (!p->path)
|
||||
return log_oom();
|
||||
- } else
|
||||
+ else
|
||||
log_syntax(unit, LOG_ERR, filename, line, -r,
|
||||
"Failed to resolve unit specifiers on %s, ignoring: %s", rvalue, strerror(-r));
|
||||
}
|
||||
@@ -334,11 +334,10 @@ int config_parse_socket_listen(const char *unit,
|
||||
log_syntax(unit, LOG_ERR, filename, line, -r,
|
||||
"Failed to resolve unit specifiers on %s, ignoring: %s", rvalue, strerror(-r));
|
||||
|
||||
- r = socket_address_parse_netlink(&p->address, k ? k : rvalue);
|
||||
+ r = socket_address_parse_netlink(&p->address, k ?: rvalue);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, -r,
|
||||
"Failed to parse address value, ignoring: %s", rvalue);
|
||||
- free(p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -355,7 +354,6 @@ int config_parse_socket_listen(const char *unit,
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, -r,
|
||||
"Failed to parse address value, ignoring: %s", rvalue);
|
||||
- free(p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -371,7 +369,6 @@ int config_parse_socket_listen(const char *unit,
|
||||
if (socket_address_family(&p->address) != AF_LOCAL && p->address.type == SOCK_SEQPACKET) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, ENOTSUP,
|
||||
"Address family not supported, ignoring: %s", rvalue);
|
||||
- free(p);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -384,6 +381,7 @@ int config_parse_socket_listen(const char *unit,
|
||||
LIST_INSERT_AFTER(port, s->ports, tail, p);
|
||||
} else
|
||||
LIST_PREPEND(port, s->ports, p);
|
||||
+ p = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
|
||||
index 3df7416397..52111f75a0 100644
|
||||
--- a/src/journal/journald-server.c
|
||||
+++ b/src/journal/journald-server.c
|
||||
@@ -1475,9 +1475,8 @@ int server_init(Server *s) {
|
||||
server_parse_config_file(s);
|
||||
server_parse_proc_cmdline(s);
|
||||
if (!!s->rate_limit_interval ^ !!s->rate_limit_burst) {
|
||||
- log_debug("Setting both rate limit interval and burst from %llu,%u to 0,0",
|
||||
- (long long unsigned) s->rate_limit_interval,
|
||||
- s->rate_limit_burst);
|
||||
+ log_debug("Setting both rate limit interval and burst from "USEC_FMT",%u to 0,0",
|
||||
+ s->rate_limit_interval, s->rate_limit_burst);
|
||||
s->rate_limit_interval = s->rate_limit_burst = 0;
|
||||
}
|
||||
|
108
0584-Set-NOTIFY_SOCKET-for-control-procs-if-NotifyAccess-.patch
Normal file
108
0584-Set-NOTIFY_SOCKET-for-control-procs-if-NotifyAccess-.patch
Normal file
@ -0,0 +1,108 @@
|
||||
From a158dbf156acc8899806fe07daa295464e82b52b Mon Sep 17 00:00:00 2001
|
||||
From: Brandon L Black <blblack@gmail.com>
|
||||
Date: Sat, 11 Oct 2014 23:36:06 +0000
|
||||
Subject: [PATCH] Set $NOTIFY_SOCKET for control procs if NotifyAccess=all
|
||||
|
||||
---
|
||||
TODO | 2 --
|
||||
src/core/service.c | 11 +----------
|
||||
2 files changed, 1 insertion(+), 12 deletions(-)
|
||||
|
||||
diff --git a/TODO b/TODO
|
||||
index 69ed60eaff..05a61a3953 100644
|
||||
--- a/TODO
|
||||
+++ b/TODO
|
||||
@@ -167,8 +167,6 @@ Features:
|
||||
|
||||
* journalctl: add the ability to look for the most recent process of a binary. journalctl /usr/bin/X11 --pid=-1 or so...
|
||||
|
||||
-* set NOTIFY_SOCKET also for control processes
|
||||
-
|
||||
* mount_cgroup_controllers(): symlinks need to get the label applied
|
||||
|
||||
* For timer units: add some mechanisms so that timer units that trigger immediately on boot do not have the services
|
||||
diff --git a/src/core/service.c b/src/core/service.c
|
||||
index f551061366..76763441b0 100644
|
||||
--- a/src/core/service.c
|
||||
+++ b/src/core/service.c
|
||||
@@ -883,7 +883,6 @@ static int service_spawn(
|
||||
bool apply_permissions,
|
||||
bool apply_chroot,
|
||||
bool apply_tty_stdin,
|
||||
- bool set_notify_socket,
|
||||
bool is_control,
|
||||
pid_t *_pid) {
|
||||
|
||||
@@ -948,7 +947,7 @@ static int service_spawn(
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- if (set_notify_socket)
|
||||
+ if (is_control ? s->notify_access == NOTIFY_ALL : s->notify_access != NOTIFY_NONE)
|
||||
if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
|
||||
r = -ENOMEM;
|
||||
goto fail;
|
||||
@@ -1153,7 +1152,6 @@ static void service_enter_stop_post(Service *s, ServiceResult f) {
|
||||
!s->permissions_start_only,
|
||||
!s->root_directory_start_only,
|
||||
true,
|
||||
- false,
|
||||
true,
|
||||
&s->control_pid);
|
||||
if (r < 0)
|
||||
@@ -1253,7 +1251,6 @@ static void service_enter_stop(Service *s, ServiceResult f) {
|
||||
!s->permissions_start_only,
|
||||
!s->root_directory_start_only,
|
||||
false,
|
||||
- false,
|
||||
true,
|
||||
&s->control_pid);
|
||||
if (r < 0)
|
||||
@@ -1316,7 +1313,6 @@ static void service_enter_start_post(Service *s) {
|
||||
!s->permissions_start_only,
|
||||
!s->root_directory_start_only,
|
||||
false,
|
||||
- false,
|
||||
true,
|
||||
&s->control_pid);
|
||||
if (r < 0)
|
||||
@@ -1383,7 +1379,6 @@ static void service_enter_start(Service *s) {
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
- s->notify_access != NOTIFY_NONE,
|
||||
false,
|
||||
&pid);
|
||||
if (r < 0)
|
||||
@@ -1449,7 +1444,6 @@ static void service_enter_start_pre(Service *s) {
|
||||
!s->permissions_start_only,
|
||||
!s->root_directory_start_only,
|
||||
true,
|
||||
- false,
|
||||
true,
|
||||
&s->control_pid);
|
||||
if (r < 0)
|
||||
@@ -1530,7 +1524,6 @@ static void service_enter_reload(Service *s) {
|
||||
!s->permissions_start_only,
|
||||
!s->root_directory_start_only,
|
||||
false,
|
||||
- false,
|
||||
true,
|
||||
&s->control_pid);
|
||||
if (r < 0)
|
||||
@@ -1568,7 +1561,6 @@ static void service_run_next_control(Service *s) {
|
||||
!s->root_directory_start_only,
|
||||
s->control_command_id == SERVICE_EXEC_START_PRE ||
|
||||
s->control_command_id == SERVICE_EXEC_STOP_POST,
|
||||
- false,
|
||||
true,
|
||||
&s->control_pid);
|
||||
if (r < 0)
|
||||
@@ -1611,7 +1603,6 @@ static void service_run_next_main(Service *s) {
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
- s->notify_access != NOTIFY_NONE,
|
||||
false,
|
||||
&pid);
|
||||
if (r < 0)
|
98
0585-tests-fix-some-tests-to-pass-in-koji.patch
Normal file
98
0585-tests-fix-some-tests-to-pass-in-koji.patch
Normal file
@ -0,0 +1,98 @@
|
||||
From 8d1d1bf20a1a6175decff979f6b95d831e0b3fc8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Sun, 12 Oct 2014 16:05:49 -0400
|
||||
Subject: [PATCH] tests: fix some tests to pass in koji
|
||||
|
||||
FAIL: test-engine
|
||||
=================
|
||||
Cannot find cgroup mount point: No such file or directory
|
||||
Assertion 'r >= 0' failed at ../src/test/test-engine.c:46, function main(). Aborting.
|
||||
|
||||
FAIL: test-sched-prio
|
||||
=====================
|
||||
Cannot find cgroup mount point: No such file or directory
|
||||
Assertion 'r >= 0' failed at ../src/test/test-sched-prio.c:42, function main(). Aborting.
|
||||
|
||||
FAIL: test-bus-cleanup
|
||||
======================
|
||||
Assertion 'sd_bus_open_system(&bus) >= 0' failed at ../src/libsystemd/sd-bus/test-bus-cleanup.c:40, function test_bus_open(). Aborting.
|
||||
after new: refcount 1
|
||||
---
|
||||
src/libsystemd/sd-bus/test-bus-cleanup.c | 22 +++++++++++++++++++---
|
||||
src/test/test-engine.c | 2 +-
|
||||
src/test/test-sched-prio.c | 2 +-
|
||||
3 files changed, 21 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/libsystemd/sd-bus/test-bus-cleanup.c b/src/libsystemd/sd-bus/test-bus-cleanup.c
|
||||
index e36a69f0d1..f586880593 100644
|
||||
--- a/src/libsystemd/sd-bus/test-bus-cleanup.c
|
||||
+++ b/src/libsystemd/sd-bus/test-bus-cleanup.c
|
||||
@@ -34,11 +34,18 @@ static void test_bus_new(void) {
|
||||
printf("after new: refcount %u\n", REFCNT_GET(bus->n_ref));
|
||||
}
|
||||
|
||||
-static void test_bus_open(void) {
|
||||
+static int test_bus_open(void) {
|
||||
_cleanup_bus_unref_ sd_bus *bus = NULL;
|
||||
+ int r;
|
||||
|
||||
- assert_se(sd_bus_open_system(&bus) >= 0);
|
||||
+ r = sd_bus_open_system(&bus);
|
||||
+ if (r == -ECONNREFUSED || r == -ENOENT)
|
||||
+ return r;
|
||||
+
|
||||
+ assert_se(r >= 0);
|
||||
printf("after open: refcount %u\n", REFCNT_GET(bus->n_ref));
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static void test_bus_new_method_call(void) {
|
||||
@@ -70,11 +77,20 @@ static void test_bus_new_signal(void) {
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
+ int r;
|
||||
+
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
test_bus_new();
|
||||
- test_bus_open();
|
||||
+ r = test_bus_open();
|
||||
+ if (r < 0) {
|
||||
+ log_info("Failed to connect to bus, skipping tests.");
|
||||
+ return EXIT_TEST_SKIP;
|
||||
+ }
|
||||
+
|
||||
test_bus_new_method_call();
|
||||
test_bus_new_signal();
|
||||
+
|
||||
+ return EXIT_SUCCESS;
|
||||
}
|
||||
diff --git a/src/test/test-engine.c b/src/test/test-engine.c
|
||||
index 1b71416a04..6acd394c67 100644
|
||||
--- a/src/test/test-engine.c
|
||||
+++ b/src/test/test-engine.c
|
||||
@@ -39,7 +39,7 @@ int main(int argc, char *argv[]) {
|
||||
/* prepare the test */
|
||||
assert_se(set_unit_path(TEST_DIR) >= 0);
|
||||
r = manager_new(SYSTEMD_USER, true, &m);
|
||||
- if (r == -EPERM || r == -EACCES || r == -EADDRINUSE || r == -EHOSTDOWN) {
|
||||
+ if (IN_SET(r, -EPERM, -EACCES, -EADDRINUSE, -EHOSTDOWN, -ENOENT)) {
|
||||
printf("Skipping test: manager_new: %s", strerror(-r));
|
||||
return EXIT_TEST_SKIP;
|
||||
}
|
||||
diff --git a/src/test/test-sched-prio.c b/src/test/test-sched-prio.c
|
||||
index 2f559b0413..6b3128d3b7 100644
|
||||
--- a/src/test/test-sched-prio.c
|
||||
+++ b/src/test/test-sched-prio.c
|
||||
@@ -35,7 +35,7 @@ int main(int argc, char *argv[]) {
|
||||
/* prepare the test */
|
||||
assert_se(set_unit_path(TEST_DIR) >= 0);
|
||||
r = manager_new(SYSTEMD_USER, true, &m);
|
||||
- if (r == -EPERM || r == -EACCES || r == -EADDRINUSE || r == -EHOSTDOWN) {
|
||||
+ if (IN_SET(r, -EPERM, -EACCES, -EADDRINUSE, -EHOSTDOWN, -ENOENT)) {
|
||||
printf("Skipping test: manager_new: %s", strerror(-r));
|
||||
return EXIT_TEST_SKIP;
|
||||
}
|
87
0586-man-join-tables-in-systemd-detect-virt-1.patch
Normal file
87
0586-man-join-tables-in-systemd-detect-virt-1.patch
Normal file
@ -0,0 +1,87 @@
|
||||
From 654c2d478f50ffbb367dbdc3745f795fcc34574b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||
Date: Sun, 12 Oct 2014 17:27:53 -0500
|
||||
Subject: [PATCH] man: join tables in systemd-detect-virt(1)
|
||||
|
||||
I think it is more readable and nicer if everything is in
|
||||
one table.
|
||||
|
||||
Also, describe what the return value, since it seems awkward to
|
||||
describe the change in behaviour with --quiet before describing
|
||||
what the default is.
|
||||
---
|
||||
man/systemd-detect-virt.xml | 37 +++++++++++++++++--------------------
|
||||
1 file changed, 17 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/man/systemd-detect-virt.xml b/man/systemd-detect-virt.xml
|
||||
index eed0fe0ce9..d8e881cf2e 100644
|
||||
--- a/man/systemd-detect-virt.xml
|
||||
+++ b/man/systemd-detect-virt.xml
|
||||
@@ -61,7 +61,14 @@
|
||||
execution in a virtualized environment. It identifies
|
||||
the virtualization technology and can distinguish full
|
||||
VM virtualization from container
|
||||
- virtualization.</para>
|
||||
+ virtualization. <filename>systemd-detect-virt</filename>
|
||||
+ exits with a return value of 0 (success) if a
|
||||
+ virtualization technology is detected, and non-zero
|
||||
+ (error) otherwise. By default any type of
|
||||
+ virtualization is detected, and the options
|
||||
+ <option>--container</option> and <option>--vm</option>
|
||||
+ can be used to limit what types of virtualization are
|
||||
+ detected.</para>
|
||||
|
||||
<para>When executed without <option>--quiet</option>
|
||||
will print a short identifier for the detected
|
||||
@@ -69,18 +76,23 @@
|
||||
are currently identified:</para>
|
||||
|
||||
<table>
|
||||
- <title>Known VM virtualization technologies (i.e. full hardware virtualization)</title>
|
||||
- <tgroup cols='2' align='left' colsep='1' rowsep='1'>
|
||||
+ <title>Known virtualization technologies (both
|
||||
+ VM, i.e. full hardware virtualization,
|
||||
+ and container, i.e. shared kernel virtualization)</title>
|
||||
+ <tgroup cols='3' align='left' colsep='1' rowsep='1'>
|
||||
+ <colspec colname="type" />
|
||||
<colspec colname="id" />
|
||||
<colspec colname="product" />
|
||||
<thead>
|
||||
<row>
|
||||
+ <entry>Type</entry>
|
||||
<entry>ID</entry>
|
||||
- <entry>VM Product</entry>
|
||||
+ <entry>Product</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
+ <entry morerows="8">VM</entry>
|
||||
<entry><varname>qemu</varname></entry>
|
||||
<entry>QEMU software virtualization</entry>
|
||||
</row>
|
||||
@@ -125,23 +137,8 @@
|
||||
<entry>User-mode Linux</entry>
|
||||
</row>
|
||||
|
||||
- </tbody>
|
||||
- </tgroup>
|
||||
- </table>
|
||||
-
|
||||
- <table>
|
||||
- <title>Known container virtualization technologies (i.e. shared kernel virtualization)</title>
|
||||
- <tgroup cols='2' align='left' colsep='1' rowsep='1'>
|
||||
- <colspec colname="id" />
|
||||
- <colspec colname="product" />
|
||||
- <thead>
|
||||
- <row>
|
||||
- <entry>ID</entry>
|
||||
- <entry>Container Product</entry>
|
||||
- </row>
|
||||
- </thead>
|
||||
- <tbody>
|
||||
<row>
|
||||
+ <entry morerows="5">container</entry>
|
||||
<entry><varname>openvz</varname></entry>
|
||||
<entry>OpenVZ/Virtuozzo</entry>
|
||||
</row>
|
23
0587-tmpfiles-compare-return-against-correct-errno.patch
Normal file
23
0587-tmpfiles-compare-return-against-correct-errno.patch
Normal file
@ -0,0 +1,23 @@
|
||||
From e7aab5412829ed6b50d109f670bd0b1b365838a7 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Reisner <dreisner@archlinux.org>
|
||||
Date: Sat, 11 Oct 2014 20:35:06 -0400
|
||||
Subject: [PATCH] tmpfiles: compare return against correct errno
|
||||
|
||||
name_to_handle_at returns -EOPNOTSUPP, not -ENOTSUP.
|
||||
---
|
||||
src/tmpfiles/tmpfiles.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
|
||||
index dafb9aee2f..8108b43042 100644
|
||||
--- a/src/tmpfiles/tmpfiles.c
|
||||
+++ b/src/tmpfiles/tmpfiles.c
|
||||
@@ -259,7 +259,7 @@ static int dir_is_mount_point(DIR *d, const char *subdir) {
|
||||
|
||||
/* got only one handle; assume different mount points if one
|
||||
* of both queries was not supported by the filesystem */
|
||||
- if (r_p == -ENOSYS || r_p == -ENOTSUP || r == -ENOSYS || r == -ENOTSUP)
|
||||
+ if (r_p == -ENOSYS || r_p == -EOPNOTSUPP || r == -ENOSYS || r == -EOPNOTSUPP)
|
||||
return true;
|
||||
|
||||
/* return error */
|
29
0588-test-dhcp-client-add-more-asserts.patch
Normal file
29
0588-test-dhcp-client-add-more-asserts.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From fc292b5f5854f83379301affe97d909c7c18d702 Mon Sep 17 00:00:00 2001
|
||||
From: Tom Gundersen <teg@jklm.no>
|
||||
Date: Mon, 13 Oct 2014 10:07:05 +0200
|
||||
Subject: [PATCH] test-dhcp-client: add more asserts
|
||||
|
||||
---
|
||||
src/libsystemd-network/test-dhcp-client.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/libsystemd-network/test-dhcp-client.c b/src/libsystemd-network/test-dhcp-client.c
|
||||
index 7dab97de2f..0515440e4e 100644
|
||||
--- a/src/libsystemd-network/test-dhcp-client.c
|
||||
+++ b/src/libsystemd-network/test-dhcp-client.c
|
||||
@@ -485,12 +485,12 @@ static void test_addr_acq(sd_event *e) {
|
||||
res = sd_dhcp_client_start(client);
|
||||
assert_se(res == 0 || res == -EINPROGRESS);
|
||||
|
||||
- sd_event_loop(e);
|
||||
+ assert_se(sd_event_loop(e) >= 0);
|
||||
|
||||
test_hangcheck = sd_event_source_unref(test_hangcheck);
|
||||
|
||||
- sd_dhcp_client_set_callback(client, NULL, NULL);
|
||||
- sd_dhcp_client_stop(client);
|
||||
+ assert_se(sd_dhcp_client_set_callback(client, NULL, NULL) >= 0);
|
||||
+ assert_se(sd_dhcp_client_stop(client) >= 0);
|
||||
sd_dhcp_client_unref(client);
|
||||
|
||||
test_fd[1] = safe_close(test_fd[1]);
|
22
0589-fi-latin1-console-keymap-is-no-more.patch
Normal file
22
0589-fi-latin1-console-keymap-is-no-more.patch
Normal file
@ -0,0 +1,22 @@
|
||||
From 70ae006b4380ed6a72211ff8aa70aac2ff381a42 Mon Sep 17 00:00:00 2001
|
||||
From: Marko Myllynen <myllynen@redhat.com>
|
||||
Date: Mon, 13 Oct 2014 10:45:00 +0300
|
||||
Subject: [PATCH] fi-latin1 console keymap is no more
|
||||
|
||||
http://git.altlinux.org/people/legion/packages/kbd.git?p=kbd.git;a=commitdiff;h=a88711232f3216debbb02d0171187442863ccedb
|
||||
---
|
||||
src/locale/kbd-model-map | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
|
||||
index 322c0a9bc2..f39d991179 100644
|
||||
--- a/src/locale/kbd-model-map
|
||||
+++ b/src/locale/kbd-model-map
|
||||
@@ -16,7 +16,6 @@ slovene si pc105 - terminate:ctrl_alt_bksp
|
||||
hu101 hu pc105 qwerty terminate:ctrl_alt_bksp
|
||||
jp106 jp jp106 - terminate:ctrl_alt_bksp
|
||||
croat hr pc105 - terminate:ctrl_alt_bksp
|
||||
-fi-latin1 fi pc105 - terminate:ctrl_alt_bksp
|
||||
it2 it pc105 - terminate:ctrl_alt_bksp
|
||||
hu hu pc105 - terminate:ctrl_alt_bksp
|
||||
sr-latin rs pc105 latin terminate:ctrl_alt_bksp
|
13
systemd.spec
13
systemd.spec
@ -616,6 +616,19 @@ Patch0574: 0574-man-reference-table-in-systemd-detect-virt-1-from-Co.patch
|
||||
Patch0575: 0575-kdbus-fix-buffer-overflow-in-bus_get_owner_kdbus-fun.patch
|
||||
Patch0576: 0576-fstab-generator-Honor-mount.usr-on-kernel-command-li.patch
|
||||
Patch0577: 0577-mount-setup-skip-relabelling-when-SELinux-and-SMACK-.patch
|
||||
Patch0578: 0578-bus-proxyd-fix-compatibility-with-old-dbus-1.patch
|
||||
Patch0579: 0579-Report-aa_change_onexec-error-code.patch
|
||||
Patch0580: 0580-sd-dhcp-client-support-non-Ethernet-hardware-address.patch
|
||||
Patch0581: 0581-terminal-grdrm-force-deep-modeset-on-enter.patch
|
||||
Patch0582: 0582-NEWS-don-t-mention-noinst_-debug-programs.patch
|
||||
Patch0583: 0583-Modernization.patch
|
||||
Patch0584: 0584-Set-NOTIFY_SOCKET-for-control-procs-if-NotifyAccess-.patch
|
||||
Patch0585: 0585-tests-fix-some-tests-to-pass-in-koji.patch
|
||||
Patch0586: 0586-man-join-tables-in-systemd-detect-virt-1.patch
|
||||
Patch0587: 0587-tmpfiles-compare-return-against-correct-errno.patch
|
||||
Patch0588: 0588-test-dhcp-client-add-more-asserts.patch
|
||||
Patch0589: 0589-fi-latin1-console-keymap-is-no-more.patch
|
||||
|
||||
|
||||
Patch0998: fedora-disable-resolv.conf-symlink.patch
|
||||
Patch0999: fedora-add-bridge-sysctl-configuration.patch
|
||||
|
Loading…
Reference in New Issue
Block a user