http://mtools.linux.lu/mtools.html »)
pour rendre
facilement accessible depuis une session UNIX le contenu d'une clef
USB formatée en FAT32.
Le snapin est téléchargeable à l'adresse suivante :
http://www.math.jussieu.fr/~besancon/system/eon/howto/files/snapins/dok-1.1.1-1.zip
Les opérations à faire sont donc :
Le principe est d'utiliser un drive virtuel
« X: » (X comme session X) dont l'utilisation
se traduira par une connexion réseau sur le NEOWARE pour lire la clef
USB : la commande de MTOOLS lancée sur le serveur UNIX contacte le
binaire « floppyd » qui tourne sur le NEOWARE
suite à l'installation du snapin (ports TCP 5703 à 5711, en fait 5703
+ numéro du DISPLAY X et donc en général pour un seul DISPLAY 5703 + 0
== 5703). La connexion réseau utilisée est protégée par le
MAGIC-COOKIE de la session X-WINDOW de l'utilisateur.
Il faut bien sûr indiquer sur le serveur UNIX que l'on peut utiliser
le drive « X: ». cela peut se faire
globalement pour tous les utilisateurs via le fichier
« /etc/mtools.conf » en y ajoutant en fin de
fichier les lignes suivantes :
drive x:
file="$DISPLAY"
mtools_skip_check=1
remote
Autre solution : fichier personnel
« $HOME/.mtoolsrc » avec la même syntaxe.
http://www.core-coutainville.org/MToolsFM/ »)
qu'il faudra configurer pour que le drive
« X: » soit celui utilisé. Pour cela, il suffit
de faire :
floppy:/X »
A noter qu'en ouvrant dans KONQUEROR une autre fenêtre pour « explorer » ses fichiers, on est capable entre les fenêtres KONQUEROR de faire du « drag and drop » d'icones des fichiers (le drag and drop est symbolisé par la flêche rouge dans le screendump ci-dessous) :
A priori en mode RDP 5 de base, pas d'accès possible à la clef USB.
floppyd.c » et
« Makefile » et le tout a été compilé sur une
machine Red Hat 9 :
*** floppyd.c.orig Sat Nov 2 11:55:24 2002
--- floppyd.c Wed Oct 6 16:06:31 2004
***************
*** 99,104 ****
--- 99,195 ----
void serve_client(int sock, char* device_name);
+ int eon_open(char *base, int flag)
+ {
+ #ifdef EON
+
+ #ifndef NEEDLE
+ #define NEEDLE "dev/scsi/host"
+ #endif /* NEEDLE */
+
+ #ifndef USBFILE
+ #define USBFILE "/tmp/config/sys/auto.usb"
+ #endif /* USBFILE */
+
+ /*
+ * Le device de la clef USB est l'un des suivants :
+ * /dev/scsi/host0/bus0/target0/lun0/disc
+ * /dev/scsi/host0/bus0/target0/lun0/part1
+ * /dev/scsi/host0/bus0/target0/lun0/part2
+ * /dev/scsi/host0/bus0/target0/lun0/part3
+ * /dev/scsi/host0/bus0/target0/lun0/part4
+ *
+ * /dev/scsi/host1/bus0/target0/lun0/disc
+ * /dev/scsi/host1/bus0/target0/lun0/part1
+ * /dev/scsi/host1/bus0/target0/lun0/part2
+ * /dev/scsi/host1/bus0/target0/lun0/part3
+ * /dev/scsi/host1/bus0/target0/lun0/part4
+ *
+ * Il est mentionne dans le fichier /tmp/config/sys/auto.usb.
+ *
+ *************************************************************
+ *
+ * Le 6 octobre 2004 :
+ *
+ * [pulita@galois1]% echo $DISPLAY
+ * tcpanoramix.institut.math.jussieu.fr:1.0
+ *
+ * [pulita@galois1]% mdir x:
+ * Permission denied, authentication failed!
+ * Auth failed: Device locked!
+ * Drive 'X:' not supported
+ * Cannot initialize 'X:'
+ *
+ * [root@tcpanoramix sys]# df -k
+ * Filesystem 1k-blocks Used Available Use% Mounted on
+ * /dev/root 29573 18902 10671 64% /
+ * /dev/root 29573 18902 10671 64% /
+ * tmpfs 27284 456 26828 2% /var
+ * /dev/system_writable 1003 455 497 48% /writable
+ * dev/scsi/host1/bus0/target0/lun0/disc
+ * 255920 174896 81024 68% /var/tmp/config/user_mount/usb/.autofs/usb-drive1.auto
+ *
+ *
+ * cat /var/tmp/config/sys/auto.usb
+ * # This is an automatically generated file. Do not edit.
+ * usb-drive1.auto -user,uid=501,gid=100,fstype=auto,iocharset=iso8859-1,sync,noatime :dev/scsi/host1/bus0/target0/lun0/disc
+ *
+ */
+
+ char buf[255];
+ char *p = NULL ;
+ FILE *fp ;
+
+ int fd ;
+ char device[256];
+
+ if ( (fp = fopen(USBFILE, "r")) != NULL )
+ {
+ while( fgets(buf, sizeof(buf), fp) != NULL )
+ {
+ if ( (p = strstr(buf, NEEDLE)) != NULL )
+ {
+ /* On supprime le retour chariot laisse par fgets() */
+ *(p + strlen(p) - 1) = '\0';
+ break ;
+ }
+ }
+ fclose(fp);
+ if ( p != NULL )
+ {
+ /* On ajoute le / initial non present dans USBFILE */
+ sprintf(device, "/%s", p);
+ if ( (fd = open(device, flag)) != -1 )
+ return(fd);
+ }
+ }
+
+ return(-1);
+ #else
+ return(open(base, flag));
+ #endif
+ }
+
#define New(type) ((type*)(malloc(sizeof(type))))
***************
*** 1066,1076 ****
if(version == FLOPPYD_PROTOCOL_VERSION_OLD) {
/* old protocol */
readOnly = 0;
! devFd = open(device_name, O_RDWR);
if (devFd < 0) {
readOnly = 1;
! devFd = open(device_name,
O_RDONLY);
}
if(devFd < 0) {
--- 1157,1167 ----
if(version == FLOPPYD_PROTOCOL_VERSION_OLD) {
/* old protocol */
readOnly = 0;
! devFd = eon_open(device_name, O_RDWR);
if (devFd < 0) {
readOnly = 1;
! devFd = eon_open(device_name,
O_RDONLY);
}
if(devFd < 0) {
***************
*** 1096,1102 ****
switch(opcode->data[0]) {
case OP_OPRO:
! devFd = open(device_name, O_RDONLY);
#if DEBUG
fprintf(stderr, "Device opened\n");
#endif
--- 1187,1193 ----
switch(opcode->data[0]) {
case OP_OPRO:
! devFd = eon_open(device_name, O_RDONLY);
#if DEBUG
fprintf(stderr, "Device opened\n");
#endif
***************
*** 1104,1110 ****
readOnly = 1;
break;
case OP_OPRW:
! devFd = open(device_name, O_RDWR);
send_reply(0, sock, devFd);
readOnly = 0;
break;
--- 1195,1201 ----
readOnly = 1;
break;
case OP_OPRW:
! devFd = eon_open(device_name, O_RDWR);
send_reply(0, sock, devFd);
readOnly = 0;
break;
*** Makefile.orig Mon Nov 8 12:11:15 2004
--- Makefile Mon Nov 8 12:14:22 2004
***************
*** 7,13 ****
# string in the CFLAGS line below.
# User specified flags
! USERCFLAGS =
USERLDFLAGS =
USERLDLIBS =
--- 7,13 ----
# string in the CFLAGS line below.
# User specified flags
! USERCFLAGS = -DEON
USERLDFLAGS =
USERLDLIBS =
***************
*** 35,47 ****
CC = gcc
CXX = @CXX@
! MYCFLAGS = -g -O2 -Wall
MYCXXFLAGS = @CXXFLAGS@
CPPFLAGS =
HOST_ID = -DCPU_i686 -DVENDOR_pc -DOS_linux_gnu
DEFS = -DHAVE_CONFIG_H -DSYSCONFDIR=\"$(sysconfdir)\" $(HOST_ID)
! LDFLAGS =
LIBS = -lbsd -lnsl
SHLIB =
MACHDEPLIBS =
--- 35,47 ----
CC = gcc
CXX = @CXX@
! MYCFLAGS = -O2 -Wall
MYCXXFLAGS = @CXXFLAGS@
CPPFLAGS =
HOST_ID = -DCPU_i686 -DVENDOR_pc -DOS_linux_gnu
DEFS = -DHAVE_CONFIG_H -DSYSCONFDIR=\"$(sysconfdir)\" $(HOST_ID)
! LDFLAGS = -static -s
LIBS = -lbsd -lnsl
SHLIB =
MACHDEPLIBS =
***************
*** 123,129 ****
X_CFLAGS = -I/usr/X11R6/include
X_LIBS = -L/usr/X11R6/lib
! X_EXTRA_LIBS =
X_PRE_LIBS = -lSM -lICE
CFLAGS = $(CPPFLAGS) $(DEFS) $(MYCFLAGS) -I. -I. $(USERCFLAGS)
CXXFLAGS = $(CPPFLAGS) $(DEFS) $(MYCXXFLAGS) -I. -I. $(USERCFLAGS)
--- 123,129 ----
X_CFLAGS = -I/usr/X11R6/include
X_LIBS = -L/usr/X11R6/lib
! X_EXTRA_LIBS = -lpthread
X_PRE_LIBS = -lSM -lICE
CFLAGS = $(CPPFLAGS) $(DEFS) $(MYCFLAGS) -I. -I. $(USERCFLAGS)
CXXFLAGS = $(CPPFLAGS) $(DEFS) $(MYCXXFLAGS) -I. -I. $(USERCFLAGS)
| Page maintenue par <Thierry.Besancon@math.jussieu.fr> |
| $Date: 2005-06-28 14:00:49+02 $ |
| $Revision: 1.3 $ |