# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-SCSI_ID_VERSION=0.7
+SCSI_ID_VERSION=0.8
prefix =
etcdir = ${prefix}/etc
if [ $first_line = "yes" ]
then
first_line=no
- echo "BUS=\"scsi\", PROGRAM=\"${scsi_id}\", RESULT=\"${id}\", NAME=\"${prefix}${name}%n\""
+ echo "BUS=\"scsi\", PROGRAM=\"${scsi_id} -d %N -s %p\", RESULT=\"${id}\", NAME=\"${prefix}${name}%n\""
echo
echo "# Further RESULT keys use the result of the last PROGRAM rule."
echo "# Be careful not to add any rules containing PROGRAM key between here"
.SH OPTIONS
.TP
.BI subsystem
-When called with only a single argument without a leading \-, runs in a hotplug
-mode, and expects the environment variable DEVPATH to specify the
-corresponding sysfs device. See section below on usage with \fBudev\fP.
+Deprecated method: when called with only a single argument without a
+leading \-, runs in a hotplug mode, and expects the environment variable
+DEVPATH to specify the corresponding sysfs device. See section below on
+usage with \fBudev\fP.
.TP
.BI \-b
The default behaviour \- treat the device as black listed, and do nothing
of determining and creating a device node based on a sysfs dev
entry as done for the \fB\-s\fP, send SG_IO commands to
\fBdevice\fP, such as \fB/dev/sdc\fP.
+This argument should also be used when invoked via udev to avoid problems
+with creation of temporary files on not-yet writable directories.
.TP
.BI \-f "\| config\-file"
Read configuration and black/white list entries from
.RE
.SH USAGE WITH UDEV
+
If \fBscsi_id\fP is invoked with one argument without a leading \-, it
assumes it is called for a hotplug event, and looks for the sysfs device
-in the DEVPATH environment variable.
-
-This mode is used when run via the \fBudev\fP PROGRAM key. Passing any
-arguments or options as part of the PROGRAM rule breaks this assumption,
-and the results will likely not be as expected.
+in the DEVPATH environment variable. This mode is deprecated, but
+available for backwards compatibility.
-When in this mode, all errors and warnings are sent via syslog.
+If the DEVPATH environment variable is set, scsi_id assumes it has been
+invoked via udev (or some other hotplug program), and all errors or
+warnings are sent using syslog.
To determine the specific value needed in a RESULT key, use the \-s option,
for example:
.sp
.nf
-BUS="scsi", PROGRAM="/sbin/scsi_id", RESULT="312345", NAME="disk%n"
+BUS="scsi", PROGRAM="/sbin/scsi_id -d %N -s %p", RESULT="312345", NAME="disk%n"
.fi
.P
/*
* temporary names for mknod.
*/
-#define TMP_DIR "/dev"
-#define TMP_PREFIX "tmp-scsi"
+#define TMP_DIR "/tmp"
+#define TMP_PREFIX "scsi"
/*
* XXX Note the 'e' (send output to stderr in all cases), and 'c' (callout)
format_serial(serial);
if (display_bus_id)
printf("%s: ", scsi_dev->name);
- printf("%s", serial);
- if (!hotplug_mode)
- printf("\n");
+ printf("%s\n", serial);
dprintf("%s\n", serial);
retval = 0;
}
if (getenv("DEBUG"))
debug++;
- if ((argc == 2) && (argv[1][0] != '-')) {
- hotplug_mode = 1;
- dprintf("hotplug assumed\n");
- }
-
dprintf("argc is %d\n", argc);
if (sysfs_get_mnt_path(sysfs_mnt_path, MAX_NAME_LEN)) {
log_message(LOG_WARNING, "sysfs_get_mnt_path failed: %s\n",
exit(1);
}
- if (hotplug_mode) {
+ devpath = getenv("DEVPATH");
+ if (devpath) {
/*
- * There is a kernel race creating attributes, if called
- * directly, uncomment the sleep.
+ * This implies that we were invoked via udev or hotplug.
*/
- /* sleep(1); */
-
- devpath = getenv("DEVPATH");
- if (!devpath) {
- log_message(LOG_WARNING, "DEVPATH is not set\n");
- exit(1);
- }
+ hotplug_mode = 1;
sys_specified = 1;
-
strncpy(target_path, sysfs_mnt_path, MAX_NAME_LEN);
strncat(target_path, devpath, MAX_NAME_LEN);
}
/*
- * Override any command line options set via the config file. This
- * is the only way to set options when in hotplug mode.
+ * Get config file options.
*/
newargv = NULL;
retval = get_file_options(NULL, NULL, &newargc, &newargv);
exit(1);
free(newargv);
}
- if (!hotplug_mode) {
- if (set_options(argc, argv, short_options, target_path,
- maj_min_dev) < 0)
+ /*
+ * Get command line options (overriding any config file or DEVPATH
+ * settings).
+ */
+ if (set_options(argc, argv, short_options, target_path,
+ maj_min_dev) < 0)
exit(1);
- }
if (!sys_specified) {
log_message(LOG_WARNING, "-s must be specified\n");