mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Add basic checking when reading udev rules and print a warning when an
invalid udev rule file is found. This addresses the current inconsistent
behavior:
- CCW devices: invalid udev rules are considered valid
- CCW group devices: invalid udev rules are silently ignored
- zFCP LUNs: invalid rules cause chzdev/lszdev to silently terminate
with non-zero exit code
Checks include a test for empty or truncated rule files that might be
the result of an interrupted chzdev operation, or a file system or I/O
error.
Note: The recommended way to correct invalid udev rules is to either
remove the offending rules file, or to repeat the associated persistent
configuration step.
Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
Reported-by: Steffen Maier <maier@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
/*
|
|
* zdev - Modify and display the persistent configuration of devices
|
|
*
|
|
* Copyright IBM Corp. 2016, 2017
|
|
*
|
|
* s390-tools is free software; you can redistribute it and/or modify
|
|
* it under the terms of the MIT license. See LICENSE for details.
|
|
*/
|
|
|
|
#ifndef UDEV_H
|
|
#define UDEV_H
|
|
|
|
#include "lib/util_list.h"
|
|
#include "exit_code.h"
|
|
|
|
struct attrib;
|
|
struct setting_list;
|
|
|
|
extern int udev_need_settle;
|
|
extern int udev_no_settle;
|
|
|
|
/* Single key-operator-value entry in a udev rule line.*/
|
|
struct udev_entry_node {
|
|
struct util_list_node node;
|
|
char *key;
|
|
char *op;
|
|
char *value;
|
|
};
|
|
|
|
/* Single udev line in a udev rule file. */
|
|
struct udev_line_node {
|
|
struct util_list_node node;
|
|
struct util_list entries;
|
|
char *line;
|
|
};
|
|
|
|
/* Udev rule file. */
|
|
struct udev_file {
|
|
struct util_list lines;
|
|
};
|
|
|
|
exit_code_t udev_read_file(const char *, struct udev_file **);
|
|
bool udev_file_is_empty(struct udev_file *file);
|
|
void udev_free_file(struct udev_file *);
|
|
void udev_file_print(struct udev_file *);
|
|
|
|
void udev_get_device_ids(const char *type, struct util_list *list,
|
|
bool autoconf);
|
|
exit_code_t udev_remove_rule(const char *type, const char *id, bool autoconf);
|
|
|
|
void udev_settle(void);
|
|
|
|
void udev_add_internal_from_entry(struct setting_list *list,
|
|
struct udev_entry_node *entry,
|
|
struct attrib **attribs);
|
|
|
|
#endif /* UDEV_H */
|