summaryrefslogtreecommitdiffstats
path: root/disk/FUNCTIONS
blob: 696eca9232c55197defe80359d11d6f61c6b72dc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
. /etc/sysconfig/devices

#---------------------------------------------------------------------
##
## @param module filename
## Add a file in /etc/modules.d to get some modules autoloaded
##
#---------------------------------------------------------------------
function add_module_autoload()
{
  local MODULE_FILENAME=${1##*/}
  
  if  [  ! -f  $INSTALL_ROOT/etc/modules.d/$MODULE_FILENAME  ];  then
    mkdir  -p  $INSTALL_ROOT/etc/modules.d  &&
    cp     $1  $INSTALL_ROOT/etc/modules.d
  fi  &&

  local MOD="$INSTALL_ROOT/etc/modules.conf"
  local INC="include  /etc/modules.d/$MODULE_FILENAME"

  grep    -q  "$INC"      $MOD  ||
  echo        "$INC"  >>  $MOD

  # Avoid that -b option of depmod takes the kernel version as the path for /lib/modules
  if [ -z $INSTALL_ROOT ]; then
    depmod  -a  -C $MOD $(get_kernel_version)
  else
    depmod  -a  -C $MOD -b $INSTALL_ROOT $(get_kernel_version)
  fi
}

#---------------------------------------------------------------------
##
## @param module filename
## Add a file in /etc/modules.d to get some modules autoloaded
##
#---------------------------------------------------------------------
function remove_module_autoload()
{
  local MODULE_FILENAME=${1##*/}

  local MOD="$INSTALL_ROOT/etc/modules.conf"
  local TMP="$INSTALL_ROOT/tmp/modules.conf"
  local INC="include  /etc/modules.d/$MODULE_FILENAME"

  cp           $MOD   $TMP  &&
  grep    -v  "$INC"  $TMP  >  $MOD  &&
  rm                  $TMP  &&
  rm                  $INSTALL_ROOT/etc/modules.d/$MODULE_FILENAME
  
  # Avoid that -b option of depmod takes the kernel version as the path for /lib/modules
  if [ -z $INSTALL_ROOT ]; then
    depmod  -a  -C $MOD $(get_kernel_version)
  else
    depmod  -a  -C $MOD -b $INSTALL_ROOT $(get_kernel_version)
  fi
}

#---------------------------------------------------------------------
##
## Detects cd recorders and list them on standard output
##
#---------------------------------------------------------------------
function cdr_detect()
{
  local CDROM_INFO_FILE=/proc/sys/dev/cdrom/info
  local CDR_MATCH_STRING="Can write CD-R:"
  local CDROM_DEVICES_MATCH_STRING="drive name:"

  local CDROM_DEVICES_STRING=$(grep "${CDROM_DEVICES_MATCH_STRING}" ${CDROM_INFO_FILE} | tr -d ' ' | tr -s '\t')
  local CDR_STRING=$(grep "${CDR_MATCH_STRING}" ${CDROM_INFO_FILE} | tr -d ' ' | tr -s '\t')
  local CD_RECORDER
  
  if  [ -n "${CDR_STRING}" ]; then
    local NUM_CDROM_DEVICES=$(echo "${CDR_STRING}" | wc -w )

    for i in $(seq 2 $NUM_CDROM_DEVICES); do
      if [ $(echo "${CDR_STRING}" | cut -f$i) = 1 ]; then
        CD_RECORDER=$(echo "${CDROM_DEVICES_STRING}" | cut -f$i)
        echo "$CD_RECORDER"
      fi
    done
  else
    echo "Unable to detect CD-R recorder"
    return 1
  fi
  return 0
}

#---------------------------------------------------------------------
## @param group name allowed to burn
##
## Check permission for cdrom recorders
##
#---------------------------------------------------------------------
function check_cdr_perms()
{
  local CDR_DEVICES=$("cdr_detect")

  if [ $? == 0 ]; then
    case ${DEVICES} in
      static) for DEV in $CDR_DEVICES; do
                message "Changing permissions for cdrom recorder device /dev/${DEV}"
                if [ $1 == "burning" ]; then
                  chmod 0660 "/dev/${DEV}"
                  chown root:burning "/dev/${DEV}"
                else
                  chmod 0600 "/dev/${DEV}"
                  chown root:root "/dev/${DEV}"
                fi
              done
              ;;
      udev)   ;; # Udev default rules handle this now
      esac
  else
    message "No CD recorder device found, please adjust its permissions manually"
  fi
}

#---------------------------------------------------------------------
## @param permissions type, must be {burning_group_users_with_suid_bit,burning_group_users,root_only}
## @param program name
## Check permission for cdrom recorders
##
#---------------------------------------------------------------------
function apply_cdr_perms()
{
  case $1 in
    burning_group_users_with_suid_bit)  create_group burning
                                        chown  root:burning $2
                                        chmod  4710 $2
                                        check_cdr_perms burning
                                        message "\nDon't forget to add the users allowed to burn in the burning group\n";;
    burning_group_users)                create_group burning
                                        chown  root:burning $2
                                        chmod  0750 $2
                                        check_cdr_perms burning
                                        message "\nDon't forget to add the users allowed to burn in the burning group\n";;
    root_only)                          chown  root:root $2
                                        chmod  0700 $2
                                        check_cdr_perms root;;
  esac
}