summaryrefslogtreecommitdiff
path: root/source/installer/sources/initrd/usr/lib/setup/SeTDOS
blob: 0a7098200cacc0be5fbc861d52a8a735ea2946cf (plain)
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#!/bin/sh
# SeTpartition user-friendly rewrite Fri Dec 15 13:17:40 CST 1995 pjv
# More updates for Slackware 3.5: Wed Apr 29 22:43:28 CDT 1998
# Updated for Slackware 7.x (new fdisk tags) Fri Sep 10 13:17:18 CDT 1999
TMP=/var/log/setup/tmp
T_PX="$(cat $TMP/SeTT_PX)"
if [ ! -d $TMP ]; then
  mkdir -p $TMP
fi
REDIR=/dev/tty4
NDIR=/dev/null
rm -f $TMP/SeTDOS
touch $TMP/SeTDOS

crunch () { # remove extra whitespace
 read STRING;
 echo $STRING
}

# get_part_size( dev ) - Return the size in K, M, G, T, or P of the named partition.
get_part_size() {
  numfmt --to=iec $(blockdev --getsize64 $1)
}

ntfs_security() {
  rm -f $TMP/ntfs_security
  dialog --backtitle "Setting permissions on NTFS partition $DOS_PART" \
  --title "SET SECURITY FOR NTFS PARTITION $DOS_PART" \
  --default-item "fmask=177,dmask=077" \
  --menu "Because users could go snooping through (or destroy, depending on \
the settings) your Windows partition, you should choose how much access would you \
like your non-root users to have to partition $DOS_PART. The access level can \
range from no access at all, to read-only for everyone, to read-write access \
for every user on the machine. A reasonable default (read-write for root only) \
is chosen, but you may set this any way that you like." \
17 77 4 \
"fmask=177,dmask=077" "Root has read/write access, users have no access" \
"fmask=333,dmask=222" "Everyone has read only access" \
"fmask=133,dmask=022" "Everyone has read access, but only root can write" \
"fmask=111,dmask=000" "All users can read/write to any file" \
2> $TMP/ntfs_security
  if [ ! $? = 0 ]; then
    rm -f $TMP/ntfs_security $TMP/mount-point $TMP/SeTDOS
    echo 1
  fi
}

fat_security() {
  rm -f $TMP/fat_security
  dialog --backtitle "Setting permissions on FAT partition $DOS_PART" \
  --title "SET SECURITY FOR FAT PARTITION $DOS_PART" \
  --default-item "fmask=177,dmask=077" \
  --menu "Because users could go snooping through (or destroy, depending on \
the settings) your Windows partition, you should choose how much access would you \
like your non-root users to have to partition $DOS_PART. The access level can \
range from no access at all, to read-only for everyone, to read-write access \
for every user on the machine. A reasonable default (read-write for root only) \
is chosen, but you may set this any way that you like." \
17 77 4 \
"fmask=177,dmask=077" "Root has read/write access, users have no access" \
"fmask=333,dmask=222" "Everyone has read only access" \
"fmask=133,dmask=022" "Everyone has read access, but only root can write" \
"fmask=111,dmask=000" "All users can read/write to any file" \
2> $TMP/fat_security
  if [ ! $? = 0 ]; then
    rm -f $TMP/fat_security $TMP/mount-point $TMP/SeTDOS
    echo 1
  fi
}

# Since the USB installers (both usbboot.img and the ones created using
# usbimg2disk.sh) present bogus FAT/NTFS partitions, we need a way to
# filter these from the partition scan. To do this, we'll set a variable
# $BANHAMMER that contains the name of the device the stick was found on.
# First, we'll set that to contain some random nonsense that will never
# be an actual device since reverse grepping for "" won't work.
BANHAMMER="0xFE11C1A"
# Look for the usbboot.img stick:
if [ -L /dev/disk/by-label/USBSLACK ]; then
  BANHAMMER="$(readlink -f /dev/disk/by-label/USBSLACK)"
fi
# Look for the usbimg2disk.sh stick:
if [ -L /dev/disk/by-label/USBSLACKINS ]; then
  BANHAMMER="$(readlink -f /dev/disk/by-label/USBSLACKINS | cut -b 1-8)"
fi
# Suggested new GPT partition type:  Microsoft basic data
# More research needed...  could be FAT32, NTFS, or EXFAT
DOSLIST="$(probe -l 2> /dev/null | grep -E "DOS|Win(95 F|98 F)|HPFS|W95 F|FAT(12|16)|Microsoft basic data" | grep -Ev "Ext('d|end)" | grep -v "$BANHAMMER" | sort)"
if [ "$DOSLIST" = "" ]; then # no FAT or NTFS partitions
 exit
fi
dialog --backtitle "Setting up non-Linux partitions." \
--title "FAT or NTFS PARTITIONS DETECTED" \
--yesno "Partitions of type FAT or NTFS (commonly used by DOS and \
Windows) have been found on your \
system.  Would you like to add these partitions to your /etc/fstab \
so that these partitions are visible from Linux?" \
8 70
if [ ! $? = 0 ]; then
 exit
fi
while [ 0 ]; do # main partition selection loop
 rm -f $TMP/SeTSKIP
 echo "true" > $TMP/SeTSKIP
 cat << EOF > $TMP/tempscript
dialog --backtitle "Selecting non-Linux partitions." \\
--title "SELECT PARTITION TO ADD TO /etc/fstab" \\
--ok-label Select --cancel-label Continue \\
--menu "In order to make these partitions visible from Linux, we \\
need to add them to your /etc/fstab. Please pick a partition to \\
add to /etc/fstab, or select '---' to continue with the installation \\
process." \\
15 70 5 \\
EOF
 echo "$DOSLIST" | while read PARTITION ; do
  NAME=$(echo $PARTITION | crunch | cut -f 1 -d ' ')
  SIZE=$(get_part_size $NAME)
  TYPE="$(blkid $NAME | tr ' ' '\n' | grep "^TYPE=" | cut -f 2- -d = | tr -d \")"
  if cat $TMP/SeTDOS | grep $NAME 1> $NDIR 2> $NDIR ; then
   ON=$(cat $TMP/SeTDOS | grep $NAME | crunch | cut -f 2 -d ' ')
   echo "\"(IN USE)\" \"$NAME on $ON $TYPE ${SIZE}\" \\" >> $TMP/tempscript
  else
   echo "\"$NAME\" \"$TYPE ${SIZE}\" \\" >> $TMP/tempscript
   echo "false" > $TMP/SeTSKIP
  fi
 done
 echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
 echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
 echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
 echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
 echo "\"---\" \"(done, continue with setup)\" \\" >> $TMP/tempscript
 echo "2> $TMP/return" >> $TMP/tempscript
 if [ "$(cat $TMP/SeTSKIP)" = "true" ]; then
  break
 fi
 . $TMP/tempscript
 if [ ! $? = 0 ]; then
  rm $TMP/tempscript
  exit 255 # user abort
 fi
 DOS_PART="$(cat $TMP/return)"
 rm -f $TMP/tempscript
 if [ "$DOS_PART" = "---" ]; then
  break
 elif [ "$DOS_PART" = "(IN USE)" ]; then
  continue
 fi
 TYPE="$(blkid $DOS_PART | tr ' ' '\n' | grep "^TYPE=" | cut -f 2- -d = | tr -d \")"
 if [ "$TYPE" = "ntfs" ]; then
   ntfs_security
   FS_UMASK="$(cat $TMP/ntfs_security)"
   if [ "$FS_UMASK" = "1" ]; then
     exit 1
   else
     FS_TYPE="$TYPE"
   fi
 else # Must be fat or exfat:
   fat_security
   FS_UMASK="$(cat $TMP/fat_security)"
   if [ "$FS_UMASK" = "1" ]; then
     exit 1
   else
     FS_TYPE="$TYPE"
   fi
 fi
 dialog --backtitle "Selecting a location to mount $DOS_PART." \
 --title "PICK MOUNT POINT FOR $DOS_PART" \
 --inputbox "Now this partition must be mounted somewhere in your \
 directory tree. Please enter the directory under which \
 you would like to put it. For instance, you might want to \
 enter /ntfs-c or /ntfs-d or something similar. \
 NOTE: This \
 partition won't actually be mounted until you reboot. \
 Where would you like to mount $DOS_PART?" \
 13 65 2> $TMP/mount-point
 if [ ! $? = 0 ]; then
  rm -f $TMP/tempmsg $TMP/mount-point $TMP/SeTDOS
  exit
 fi
 NEW_DIR="$(cat $TMP/mount-point)"
 rm -f $TMP/mount-point
 # If this was left blank or is '/', drop back to the first menu and start over.
 if [ "$NEW_DIR" = "" -o "$NEW_DIR" = "/" ]; then
   continue
 fi
 if [ ! "$(echo $NEW_DIR | cut -b1)" = "/" ]; then
  NEW_DIR="/$NEW_DIR"
 fi
 mkdir -p ${T_PX}$NEW_DIR
 chmod 755 ${T_PX}$NEW_DIR
 if echo "$DOSLIST" | grep $DOS_PART | grep NTFS 1> $NDIR 2> $NDIR ; then
  printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$DOS_PART" "$NEW_DIR" "$FS_TYPE" "$FS_UMASK" "1" "0" >> $TMP/SeTDOS
 else
  printf "%-16s %-16s %-11s %-16s %-3s %s\n" "$DOS_PART" "$NEW_DIR" "$FS_TYPE" "$FS_UMASK" "1" "0" >> $TMP/SeTDOS
 fi
done # partition adding loop
rm -f $TMP/SeTSKIP
cat << EOF > $TMP/tempmsg

Adding this information to your /etc/fstab:

EOF
cat $TMP/SeTDOS >> $TMP/tempmsg
dialog --backtitle "Finished setting up non-Linux partitions." \
--title "DONE ADDING FAT or NTFS PARTITIONS" \
--exit-label OK \
--textbox $TMP/tempmsg 15 72