Annotation of doc/loncapafiles/sanitycheck.piml, revision 1.51
1.4 harris41 1: <!DOCTYPE piml PUBLIC "-//TUX/DTD piml 1.0 Final//EN"
2: "http://lpml.sourceforge.net/DTD/piml.dtd">
1.1 harris41 3: <!-- sanitycheck.piml -->
4:
1.51 ! raeburn 5: <!-- $Id: sanitycheck.piml,v 1.50 2024/06/13 12:57:13 raeburn Exp $ -->
1.1 harris41 6:
7: <!--
8:
9: This file is part of the LearningOnline Network with CAPA (LON-CAPA).
10:
11: LON-CAPA is free software; you can redistribute it and/or modify
12: it under the terms of the GNU General Public License as published by
13: the Free Software Foundation; either version 2 of the License, or
14: (at your option) any later version.
15:
16: LON-CAPA is distributed in the hope that it will be useful,
17: but WITHOUT ANY WARRANTY; without even the implied warranty of
18: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19: GNU General Public License for more details.
20:
21: You should have received a copy of the GNU General Public License
22: along with LON-CAPA; if not, write to the Free Software
23: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24:
25: /home/httpd/html/adm/gpl.txt
26:
27: http://www.lon-capa.org/
28:
29: -->
30:
31: <piml>
32: <targetroot>/</targetroot>
33: <files>
1.12 harris41 34: <file>
35: <target dist='default'>/etc/hosts</target>
36: <perlscript mode='fg'>
37: unless
38: (-e '<TARGET />') # Does file exist?
39: {
40: print("**** ERROR **** Missing <TARGET />\n");
41: }
42: else
43: {
44: my $numentries = `grep -v '^#' <TARGET /> | grep -c '[[:alpha:]]'`;
45: if ($numentries == 1)
46: {
47: print("**** ERROR **** Malformatted <TARGET />\n");
48: print("<TARGET /> typically should have at least two entries, ".
49: "e.g.:\n");
50: print("127.0.0.1 localhost.localdomain localhost\n");
51: print("35.8.63.26 s16.lite.msu.edu s16\n");
52: print("The <TARGET /> file on your machine looks like it was \n".
53: "messed up due to a common bug with RedHat installations.\n".
54: "(This weird bug is RedHat's fault, not LON-CAPA's.)\n");
55: print("Please read the man pages about \"hosts\" and fix your\n".
56: "<TARGET /> file.\n");
57: }
58: }
59: </perlscript>
60: </file>
1.6 harris41 61: <file>
62: <target dist='default'>/var/lib/mysql/mysql.sock</target>
1.46 raeburn 63: <target dist='suse11.2 suse11.3 suse11.4 suse12.1 suse12.2 suse12.3 suse13.1 suse13.2 sles12 sles15'>/var/run/mysql/mysql.sock</target>
1.51 ! raeburn 64: <target dist='debian5 debian6 debian10 debian11 debian12 ubuntu6 ubuntu8 ubuntu10 ubuntu12 ubuntu14 ubuntu16 ubuntu18 ubuntu20 ubuntu22 ubuntu24'>/var/run/mysqld/mysqld.sock</target>
1.6 harris41 65: <perlscript mode='fg'>
66: unless
67: (-e '<TARGET />') # Does file exist?
68: {
69: print("**** ERROR **** Missing <TARGET />\n");
70: }
1.15 matthew 71: <!-- Commented out by Matthew since MySQL insists on doing things its own way
1.6 harris41 72: else # It exists, so look at the file metadata more closely.
73: {
74: my @s = stat('<TARGET />');
75: my $uid = $s[4];
76: my $mode = $s[2];
77: my $web_uid = getpwnam('www');
78: my $smode = sprintf("%04o",$mode & 07777);
79:
80: if ($uid ne $web_uid) # If file owned by someone else other than www.
81: {
1.14 matthew 82: print('**** WARNING **** <TARGET /> should be owned by'.
1.6 harris41 83: ' www.'."\n".'Try these commands to make things right:'."\n".
1.8 matthew 84: 'chown www:www <TARGET />'."\n".
85: 'chmod a-rwx,u+rwx <TARGET />'."\n");
1.6 harris41 86: }
1.7 harris41 87: else # Check permissions on the file to make sure it is private to www.
1.6 harris41 88: {
89: $smode =~ /^.(.)..$/;
90: my $wflag = $1;
1.7 harris41 91: if ($wflag != 7) # Can www use this socket? (Hope so!)
1.6 harris41 92: {
1.14 matthew 93: print('**** WARNING **** '.
1.6 harris41 94: '<TARGET /> should be user "rwx" (by'.
95: ' www).'."\n".'Try these commands to make things right:'."\n".
1.8 matthew 96: 'chown www:www <TARGET />'."\n".
97: 'chmod a-rwx,u+rwx <TARGET />'."\n");
1.6 harris41 98: }
99: $smode=~/^..(..)$/;
100: $wflag=$1;
1.7 harris41 101: if ($wflag ne "00") # Can others use this socket? (Hope not!)
1.6 harris41 102: {
1.14 matthew 103: print('**** WARNING **** '.
1.6 harris41 104: '<TARGET /> should not be group or everybody accessible'.
105: '.'."\n".'Try these commands to make things right:'."\n".
1.8 matthew 106: 'chown www:www <TARGET />'."\n".
107: 'chmod a-rwx,u+rwx <TARGET />'."\n");
1.6 harris41 108: }
109: }
110: }
1.15 matthew 111: -->
1.6 harris41 112: </perlscript>
113: </file>
1.1 harris41 114: <file>
115: <target dist='default'>/etc/httpd/conf/loncapa.conf</target>
1.51 ! raeburn 116: <target dist='sles10 sles11 sles12 sles15 suse10.1 suse10.2 suse10.3 suse11.1 suse11.2 suse11.3 suse11.4 suse12.1 suse12.2 suse12.3 suse13.1 suse13.2 debian5 debian6 debian10 debian11 debian12 ubuntu6 ubuntu8 ubuntu10 ubuntu12 ubuntu14 ubuntu16 ubuntu18 ubuntu20 ubuntu22 ubuntu24'>/etc/apache2/loncapa.conf</target>
1.1 harris41 117: <perlscript mode='fg'>
118: open IN, "<<TARGET />";
119: my $hbug=-1;
120: my $dbug=-1;
121: while (<IN>) {
122: if (/PerlSetVar\s+lonHostID\s+(\S+)/) {
123: my $v=$1;
124: $hbug=0;
1.23 albertel 125: $hbug=1 if $v=~/[^\w.\-]/;
126: $hbug=1 if $v=~/_/;
1.1 harris41 127: }
128: if (/PerlSetVar\s+lonDefDomain\s+(\S+)/) {
129: my $v=$1;
130: $dbug=0;
1.23 albertel 131: $dbug=1 if $v=~/[^\w.\-]/;
132: $dbug=1 if $v=~/_/;
1.5 harris41 133: # Avoid namespace conflicts under the web server's DocumentRoot.
134: my @badnames=('raw','userfiles','priv','adm','uploaded');
135: foreach my $bad (@badnames) {
136: $dbug=1 if $v eq $bad;
137: }
1.1 harris41 138: }
139: }
140: if ($hbug) {
141: print "**** ERROR **** <TARGET /> has invalid lonHostID\n";
142: }
143: if ($dbug) {
144: print "**** ERROR **** <TARGET /> has invalid lonDefDomain\n";
145: }
146: </perlscript>
147: </file>
148: <file>
149: <target dist='default'>/home/httpd/lonTabs/hosts.tab</target>
150: open IN, "<<TARGET />";
151: my $rbug=0;
152: my $dbug=0;
153: my $sbug=0;
154: my $fbug=0;
1.22 albertel 155: my %line;
156: my $line=0;
1.23 albertel 157: while (my $l = <IN>) {
1.22 albertel 158: $line++;
1.23 albertel 159: next if ($l=~/^(\#|\s*$)/);
160: if ($l=~/^\^/) {
161: if ($l !~ /^\^[\w.\-]/) {
162: $dns_bug = 1;
163: push(@{$line{'dns'}},$line);
164: }
165: } elsif ($l=~/\S/) {
166: if ($l=~/\r/) { $rbug=1; push(@{$line{'r'}},$line); }
167: my @a=split(/:/,$l);
1.22 albertel 168: if ($a[0]=~/[^\w\-.]/ ||
169: $a[1]=~/[^\w\-.]/ ||
170: $a[0]=~/\_/ ||
171: $a[1]=~/\_/ ) { $dbug=1; push(@{$line{'d'}},$line); }
1.33 raeburn 172: if (@a<6 || @a>6) { $fbug=1; push(@{$line{'f'}},$line); }
1.3 albertel 173: my $expr='\s.+$';
1.22 albertel 174: if ($a[0] =~ /$expr/ ||
175: $a[1] =~ /$expr/ ||
176: $a[2] =~ /$expr/ ||
177: $a[3] =~ /$expr/ ) { $sbug=1; push(@{$line{'s'}},$line); }
1.3 albertel 178: ;
1.1 harris41 179: }
180: }
181: close IN;
182: if ($rbug) {
1.22 albertel 183: print "**** ERROR **** <TARGET /> is DOS-formatted (lines ".join(', ',@{$line{'r'}}).")\n";
1.1 harris41 184: }
185: if ($dbug) {
1.22 albertel 186: print "**** ERROR **** <TARGET /> has invalid host id or domain id (lines ".join(', ',@{$line{'d'}}).")\n";
1.1 harris41 187: }
188: if ($fbug) {
1.33 raeburn 189: print "**** ERROR **** <TARGET /> is lacking 6 columns for every row (lines ".join(', ',@{$line{'f'}}).")\n";
1.1 harris41 190: }
191: if ($sbug) {
1.22 albertel 192: print "**** ERROR **** <TARGET /> has illegal whitespace character (lines ".join(', ',@{$line{'s'}}).")\n";
1.1 harris41 193: }
1.23 albertel 194: if ($dns_bug) {
195: print "**** ERROR **** <TARGET /> host.tab server entry has characters (lines ".join(', ',@{$line{'dns'}}).")\n";
196: }
1.1 harris41 197: </file>
198: <file>
199: <target dist='default'>/home/httpd/lonTabs/spare.tab</target>
200: open IN, "<<TARGET />";
201: my $rbug=0;
202: my $dbug=0;
203: my $sbug=0;
1.18 albertel 204: while (my $line = <IN>) {
205: if ($line =~ /\S/) {
206: $rbug=1 if $line=~/\r/;
1.19 albertel 207: if ($line =~ /\W.*\n/) {
1.18 albertel 208: $dbug=$line if ($line !~/\w:(?:primary|default)$/);
209: }
210: $dbug=$line if $line=~/\_/;
211: $sbug=1 if $line=~/\s.+$/;
1.1 harris41 212: }
213: }
214: close IN;
215: if ($rbug) {
216: print "**** ERROR **** <TARGET /> is DOS-formatted\n";
217: }
218: if ($dbug) {
1.18 albertel 219: print "**** ERROR **** <TARGET /> has invalid host id ($dbug)\n";
1.1 harris41 220: }
221: if ($sbug) {
222: print "**** ERROR **** <TARGET /> has illegal whitespace character\n";
223: }
224: </file>
225: </files>
226: </piml>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>