Magellan Linux

Annotation of /trunk/module-init-tools/patches/module-init-tools-3.2.2-handle-dupliate-aliases.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (hide annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years ago) by niro
File size: 2345 byte(s)
-import

1 niro 153 http://bugs.gentoo.org/149426
2    
3     keep from blowing up when people have duplicate aliases ... the grep
4     ends up including new lines and with certain formed comments, hits an
5     infinite loop ...
6    
7     for example, the following inputs illustrates the problem:
8     ----------------------------------------------
9     # Old nvidia support ...
10     alias char-major-195 NVdriver
11     alias /dev/nvidiactl char-major-195
12     alias char-major-195 nvidia
13     alias /dev/nvidiactl char-major-195
14     # To enable Side Band Adressing: NVreg_EnableAGPSBA=1
15     #options nvidia NVreg_EnableAGPSBA=1 NVreg_EnableAGPFW=1
16     #options nvidia NVreg_SoftEDIDs=0 NVreg_Mobile=3
17     ----------------------------------------------
18     alias a b
19     alias b a
20     ----------------------------------------------
21    
22     fixes from Martin Väth
23    
24     --- generate-modprobe.conf
25     +++ generate-modprobe.conf
26     @@ -65,19 +65,29 @@
27     # Resolve (possibly recursive) alias: args filename alias
28     resolve_alias()
29     {
30     - RA_RESOLVE=`grep "^alias[ ][ ]*$2[ ]" -- $1 | awk '{ print $3 }'`
31     + if [ 0$3 -gt 99 ]; then
32     + echo "Infinite recursion detected; aborting after $3 tries (alias '$2')" 1>&2
33     + return 1
34     + fi
35     +
36     + _RA_RESOLVE=`grep "^alias[ ][ ]*$2[ ]" -- $1 | awk '{ print $3 }'`
37     + RA_RESOLVE=`echo "$_RA_RESOLVE" | head -n 1`
38     + if [ x"$_RA_RESOLVE" != x"$RA_RESOLVE" ]; then
39     + echo "Invalid dupliate alias found for '$2' (results: `echo $_RA_RESOLVE`)" 1>&2
40     + return 1
41     + fi
42     if [ x"$RA_RESOLVE" = x ]; then
43     echo $2
44     return
45     fi
46     # Recurse.
47     - (resolve_alias $1 "$RA_RESOLVE")
48     + (resolve_alias $1 "$RA_RESOLVE" $(($3 + 1)))
49     }
50    
51     # Parse alias: args filename modulename aliasto.
52     parse_alias()
53     {
54     - PA_ALIAS=`resolve_alias $1 $3`
55     + PA_ALIAS=`resolve_alias $1 $3` || exit 1
56     NAME=`echo $2|sed -e 's/\(block\|char\)-major-\([0-9]\+\)$/\1-major-\2-*/'`
57    
58     echo "alias $NAME $PA_ALIAS"
59     @@ -180,7 +190,8 @@
60     parse_options $MODULE `grab_noninstall_options $REST`
61     INSTALL_OPTIONS=`grab_install_options $REST`
62     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
63     - eval install_$MODNAME=\"/sbin/modprobe $INSTALL_OPTIONS --ignore-install `resolve_alias $MODPROBECONF $MODULE`\"
64     + INSTALL_ALIAS=`resolve_alias $MODPROBECONF "$MODULE"` || exit 1
65     + eval install_$MODNAME=\"/sbin/modprobe $INSTALL_OPTIONS --ignore-install $INSTALL_ALIAS\"
66     ;;
67     *)
68     parse_options $MODULE "$REST"