#!/bin/sh
#
# groups2html.sh
# Create an HTML page containing group information for all users.
MY_H=htm
MY_GROUPS2HTML=groups2html
MY_GROUPS2HTML=http://www.lafn.org/~cymbala/bin/${MY_GROUPS2HTML}.html
MY_TITLE="Group Membership [@ www.marxists.org]"
MY_TITLE_SETPERMS="File and Directory Permissions (WWW.MARXISTS.ORG)"
MY_TMPFILE=`mktemp`
MY_TMPFILE_TMP=${MY_TMPFILE}.intermediate
MY_TMPFILE_USERS=${MY_TMPFILE}.users
MY_TMPFILE_GROUPS=${MY_TMPFILE}.groups
MY_TMPFILE_JOIN=${MY_TMPFILE}.join
MY_USERS=/etc/passwd
MY_GROUPS=/etc/group
MY_NOW="`822-date`"
MY_CWD=/www/public_html/admin/volunteers/biographies
MY_TEMPLATE=/www/public_html/admin/janitor/template.${MY_H}
MY_SETPERMS=set-permissions
MY_SET_PERMISSIONS=/www/scripts/${MY_SETPERMS}.sh
MY_OUTPUT_SETPERMS=${MY_SETPERMS}.${MY_H}
MY_OUTPUT=${MY_CWD}/groups.${MY_H}
MY_OUTPUT2=${MY_CWD}/group.${MY_H}
MY_ZAPTO='~~~'
cd $MY_CWD
echo -n "Working directory: "
pwd
# Output start of HTML page.
awk '{ print; if (/<[hH][112233445566]/) {exit;} }' $MY_TEMPLATE \
| sed "s/__TITLE__/${MY_TITLE}/" \
> $MY_OUTPUT
awk '{ print; if (/<[hH][112233445566]/) {exit;} }' $MY_TEMPLATE \
| sed "s/__TITLE__/${MY_TITLE_SETPERMS}/" \
> $MY_OUTPUT_SETPERMS
# See also...
awk '{ if (/<[hH][112233445566]/) { print; exit;} }' $MY_TEMPLATE \
| awk '{sub(/MIA.*__TITLE__/, \
"See also: <a href=\x22" MY_OUTPUT_SETPERMS "\x22><code>" MY_SETPERMS "</code></a>"); print; }' \
MY_SETPERMS="$MY_SETPERMS" MY_OUTPUT_SETPERMS="$MY_OUTPUT_SETPERMS" \
>> $MY_OUTPUT
# Output time-stamp.
awk '/<[uU][lL]/ { \
sub(/<.*/, "<code>" MY_NOW "</code>"); print; exit; \
}' MY_NOW="$MY_NOW" $MY_TEMPLATE \
>> $MY_OUTPUT
awk '/<[uU][lL]/ { \
sub(/<.*/, "<code>" MY_NOW "</code>"); print; exit; \
}' MY_NOW="$MY_NOW" $MY_TEMPLATE \
>> $MY_OUTPUT_SETPERMS
# Output start of PRE element.
awk '/<[uU][lL]/ { sub(/ul/, "pre"); print; exit; }' $MY_TEMPLATE \
>> $MY_OUTPUT
awk '/<[uU][lL]/ { sub(/ul/, "pre"); print; exit; }' $MY_TEMPLATE \
>> $MY_OUTPUT_SETPERMS
# Convert set-permissions script to SGML
awk '{ gsub(/&/, "&"); gsub(/</, "<"); gsub(/>/, ">"); print; }' $MY_SET_PERMISSIONS \
>> $MY_OUTPUT_SETPERMS
# List of users
# abc 1000
# def 1001
# ghi 1002
#
awk -F':' '$3 > 999 { print $1 "\t" $3; }' $MY_USERS \
| sort -k 1,1 - \
> $MY_TMPFILE_USERS
##########less $MY_TMPFILE_USERS
# List of groups
# abc francais
# abc marxists
# abc meia
# abc reference
#
awk -F':' '{ \
if ($4 == "") { $4 = $1; } \
n = split($4, parts, /,/); \
for (i=1; i<=n; i++) { print parts[i] "\t" $1; } \
}' $MY_GROUPS \
| sort -k 1,1 - \
> $MY_TMPFILE_GROUPS
##########less $MY_TMPFILE_GROUPS
# Join.
join -t' ' -j 1 $MY_TMPFILE_USERS $MY_TMPFILE_GROUPS \
| sort -n -k 2,2 \
> $MY_TMPFILE_JOIN
##########less $MY_TMPFILE_JOIN
# Combine groups together.
#
cat $MY_TMPFILE_JOIN \
| awk -F'\t' ' \
BEGIN { OFS="\t"; } \
FNR == 1 { \
uid = $2; list = $3; previous = $1; } \
FNR >= 2 { \
if (previous != $1) {
list = MY_ZAPTO list; \
print previous, uid, list; \
uid = $2; list = $3; previous = $1; } \
else { \
list = list "," $3; } \
} \
END { list = MY_ZAPTO list; \
print previous, uid, list; \
}' MY_ZAPTO=$MY_ZAPTO \
> $MY_TMPFILE
# Add header-row and footer-row.
cat $MY_TMPFILE \
| awk 'BEGIN { OFS="\t"; } \
NR == 1 { \
print "USERNAME\tUID\t"MY_ZAPTO"GROUP(S)"; \
print "--------\t----\t"MY_ZAPTO"--------"; } \
{ print; } \
END { print "ZZZZZZZZ\tZZZZZZZZ\t"MY_ZAPTO"ZZZZZZZZ"; \
}' MY_ZAPTO=$MY_ZAPTO \
> $MY_TMPFILE_TMP
# Convert tabs to spaces (preparation for <PRE> tag).
cat $MY_TMPFILE_TMP \
| column -t \
> $MY_TMPFILE
# Add hyperlink to usernames with matching username.htm file.
cat $MY_TMPFILE \
| awk '{ \
if ($2 ~ /^[0-9]+$/) { \
rc = system("ls " MY_CWD "/" $1"."MY_H ">/dev/null 2>&1"); \
if (rc == 0) { \
sub($1, "<a href=\x22"$1"."MY_H"\x22>" $1 "</a>"); } } \
print; \
}' MY_CWD=$MY_CWD MY_H=$MY_H \
> $MY_TMPFILE_TMP
# Delete UID column
cat $MY_TMPFILE_TMP \
| awk '{ MY_RE = "[^ ]+[ ]+" MY_ZAPTO; \
sub(MY_RE, ""); print; \
}' MY_ZAPTO=$MY_ZAPTO \
> $MY_TMPFILE
# Tweak some spaces.
cat $MY_TMPFILE \
| awk '{ gsub(/,/, ", "); print; }' \
| awk '{ sub(/^/, " "); print; }' \
> $MY_TMPFILE_TMP
# Append to output
cat $MY_TMPFILE_TMP \
>> $MY_OUTPUT
# Output end of PRE element.
awk '/\/[uU][lL]/ { sub(/ul/, "pre"); print; ; exit; }' $MY_TEMPLATE \
>> $MY_OUTPUT
awk '/\/[uU][lL]/ { sub(/ul/, "pre"); print; ; exit; }' $MY_TEMPLATE \
>> $MY_OUTPUT_SETPERMS
# See also...
awk '{ if (/<[hH][112233445566]/) { print; exit;} }' $MY_TEMPLATE \
| awk '{sub(/MIA.*__TITLE__/, \
"See also: <a href=\x22" MY_GROUPS2HTML "\x22><code>" MY_GROUPS2HTML "</code></a>"); print; }' \
MY_GROUPS2HTML="$MY_GROUPS2HTML" \
>> $MY_OUTPUT
# Output end of HTML page.
awk '{ if (/[Cc][oO][mM][mM][eE][nN][tT][sS]/) {p=1;} if (p==1) {print;} }' $MY_TEMPLATE \
>> $MY_OUTPUT
awk '{ if (/[Cc][oO][mM][mM][eE][nN][tT][sS]/) {p=1;} if (p==1) {print;} }' $MY_TEMPLATE \
>> $MY_OUTPUT_SETPERMS
cp $MY_OUTPUT $MY_OUTPUT2
rm -f $MY_TMPFILE
rm -f $MY_TMPFILE_USERS
rm -f $MY_TMPFILE_GROUPS
rm -f $MY_TMPFILE_JOIN
echo "Done."
###
#