s4
changeset 81:ddc8a4c0b8d9
All macro-expanding by m4 bypassed via syscmd or spaste
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Mon, 03 Aug 2015 09:34:43 +0900 |
parents | 39e69daa2071 |
children | db489961e461 |
files | s4-blog.sh s4-funcs.sh s4.cgi |
diffstat | 3 files changed, 106 insertions(+), 69 deletions(-) [+] |
line diff
1.1 --- a/s4-blog.sh Sun Aug 02 17:05:08 2015 +0900 1.2 +++ b/s4-blog.sh Mon Aug 03 09:34:43 2015 +0900 1.3 @@ -452,13 +452,16 @@ 1.4 return 1.5 fi 1.6 fi 1.7 - m4 -D_TITLE_="${guide}新規話題作成" \ 1.8 - -D_FORMHEAD_="序文は簡単に詳しくはコメントに" \ 1.9 - -D_DUMPHEAD_="これまでの蓄積" \ 1.10 - -D_FORM_="`genform $formdir/blog.def`" \ 1.11 - -D_DUMPTABLE_="`listblog $listing`" \ 1.12 - $layout/html.m4.html \ 1.13 - $layout/form+dump-whead.m4.html 1.14 + echo "${guide}新規話題作成" > $tmpd/title.$$ 1.15 + listblog $listing > $tmpd/listblog.$$ 1.16 + genform $formdir/blog.def \ 1.17 + | m4 -D_TITLE_="spaste(\`$tmpd/title.$$')" \ 1.18 + -D_FORMHEAD_="序文は簡単に詳しくはコメントに" \ 1.19 + -D_DUMPHEAD_="これまでの蓄積" \ 1.20 + -D_FORM_="syscmd(\`cat')" \ 1.21 + -D_DUMPTABLE_="spaste(\`$tmpd/listblog.$$')" \ 1.22 + $layout/html.m4.html \ 1.23 + $layout/form+dump-whead.m4.html 1.24 } 1.25 1.26 blog_reply() { 1.27 @@ -497,9 +500,11 @@ 1.28 fi 1.29 fi 1.30 def=$formdir/article.def 1.31 + echo "$title" > $tmpd/title.$$ 1.32 + echo "$subtitle" > $tmpd/subtitle.$$ 1.33 blog_showentry blog $rowid \ 1.34 - | m4 -D_TITLE_="$title" -D_BODYCLASS_=general \ 1.35 - -D_FORMHEAD_="$subtitle" -D_FORM_="" \ 1.36 + | m4 -D_TITLE_="spaste(\`$tmpd/title.$$')" -D_BODYCLASS_=general \ 1.37 + -D_FORMHEAD_="spaste(\`$tmpd/subtitle.$$')" -D_FORM_="" \ 1.38 -D_DUMPTABLE_="syscmd(cat)" -D_DUMPHEAD_="" \ 1.39 $layout/html.m4.html $layout/form+dump-whead.m4.html 1.40 }
2.1 --- a/s4-funcs.sh Sun Aug 02 17:05:08 2015 +0900 2.2 +++ b/s4-funcs.sh Mon Aug 03 09:34:43 2015 +0900 2.3 @@ -44,7 +44,7 @@ 2.4 8/2 s4.cgi生成系 2.5 Web 2.6 締切設定 2.7 - 自分の提出物リスト 2.8 + ○自分の提出物リスト 2.9 2.10 7/19 ○設置 2.11 ○一斉送信 2.12 @@ -514,8 +514,8 @@ 2.13 # If two or more values found, save them to $tmpd/${column}.$N and 2.14 # store the number of files into $tmpd/${column}.count and 2.15 # their each rowid stored into $tmpd/${column}.$N.rowid. 2.16 - ### err gtb-$1=`gettblcols $1`, tbl=$1, col=$2, '$3'=$3 2.17 - # Non-null for $GVAL_KEEP_ORIG_BIN keep original binary instead of icon 2.18 + ## err gtb-$1=`gettblcols $1`, tbl=$1, col=$2, '$3'=$3 2.19 + 2.20 (for c in `gettblcols $1`; do 2.21 if [ x"$2" = x"$c" ]; then 2.22 err "select $2 from $1 where rowid=$3" 2.23 @@ -572,7 +572,7 @@ 2.24 EOF 2.25 # err gvbid-get2: "`ls -lF $file`" 2.26 ## err i=$i - file=$file rowid=`cat $td/$fn.rowid` 2.27 - ln $td/$fn.rowid $file.rowid 2>&3 # for convenience 2.28 + cp $td/$fn.rowid $file.rowid 2>&3 # for convenience 2.29 cp $file $file.orig 2>&3 2.30 ls -lh $file | awk '{print $5"B"}' > $file.size 2.31 case $type in 2.32 @@ -888,7 +888,7 @@ 2.33 rcpt=`echo $1` # strip newlines 2.34 subj="`echo $2|nkf -jM`" 2.35 # echo rcpt=$rcpt 2.36 - (m4 -D_RCPT_="$rcpt" -D_SUBJ_="$subj" -D_FROM_=$admin $msg/mail-header.m4 2.37 + (m4 -D_RCPT_="$rcpt" -D_SUBJ_="\`$subj'" -D_FROM_=$admin $msg/mail-header.m4 2.38 cat $3 | nkf -jd ) | sendmail -f $admin $rcpt 2.39 } 2.40 setviastring() { 2.41 @@ -1155,7 +1155,7 @@ 2.42 if [ -n "$addr" ]; then 2.43 susp="<h2>招待済みで加入待ちのアドレス</h2><pre>$addr</pre>" 2.44 fi 2.45 - m4 -D_TITLE_="招待" -D_REPORT_="$repo" -D_ACTION_="?invite" \ 2.46 + m4 -D_TITLE_="招待" -D_REPORT_="\`$repo'" -D_ACTION_="?invite" \ 2.47 -D_BODYCLASS_="default" -D_SUSPENDED_="$susp" \ 2.48 $layout/html.m4.html $layout/invite.m4.html 2.49 } 2.50 @@ -1191,12 +1191,13 @@ 2.51 groupman() { 2.52 gname=`getpar gname` 2.53 if [ -n "$gname" ]; then 2.54 - newgname=`echo "$gname"|tr -d '\"'` 2.55 - newgname=$gname 2.56 + # See ALSO same job in showgroup() 2.57 + newgname=`echo "$gname"|tr -d '\"'"'"` 2.58 + ###newgname=$gname 2.59 if [ x"$newgname" != x"$gname" ]; then 2.60 err NewGNAME: gname=$newgname 2.61 + gname=$newgname 2.62 echo "使用禁止文字を除去し $gname としました。" | html p 2.63 - gname=$newgname 2.64 replpar gname string "$gname" 2.65 fi 2.66 par2table $formdir/grp.def 2.67 @@ -1204,9 +1205,11 @@ 2.68 fi 2.69 GF_STAGE=groupman 2.70 note="<p>グループ名に使用できない文字は自動的に削除されます。</p>" 2.71 - m4 -D_TITLE_="グループ作成" \ 2.72 + 2.73 + DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc' \ 2.74 + |m4 -D_TITLE_="グループ作成" \ 2.75 -D_FORM_="$note`genform $formdir/grp.def`" \ 2.76 - -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \ 2.77 + -D_DUMPTABLE_="syscmd(cat)" \ 2.78 $layout/html.m4.html $layout/form+dump.m4.html 2.79 } 2.80 userconf() { 2.81 @@ -1249,19 +1252,19 @@ 2.82 [ -n "$jg" -a -n "$grp" ] && 2.83 joingrp "$grp" "$user" "$jg" "`getpar email`" 2.84 fi 2.85 - m4 -D_TITLE_="グループ $grp" $layout/html.m4.html 2.86 + echo "グループ $grp"|m4 -D_TITLE_="syscmd(\`cat')" $layout/html.m4.html 2.87 showgroup "$grid" 2.88 } 2.89 showhome() { 2.90 # $1=userRowIdToShow 2.91 -err showhome \$1=$1 2.92 + err showhome \$1=$1 2.93 case "$1" in 2.94 *@*) uname=`getvalbypkey user name "$1"` ;; 2.95 *) uname=`getvalbyid user name $1` ;; 2.96 esac 2.97 -err ShowHome: uname=$uname 2.98 + err ShowHome: uname=$uname 2.99 gecos=`gecos "$uname"` 2.100 -err SH:gecos=$gecos 2.101 + err SH:gecos=$gecos 2.102 GF_VIEWONLY=1 2.103 cond="gname in (select gname from grp_mem where user='$uname')" 2.104 if [ x"$user" = x"$uname" ]; then 2.105 @@ -1281,26 +1284,31 @@ 2.106 fi 2.107 . ./s4-blog.sh 2.108 2.109 - m4 -D_BODYCLASS_=home -D_TITLE_="$gecos さん" \ 2.110 - -D_PROFILE_="`viewtable $formdir/user.def user $1`$conflink" \ 2.111 - -D_BLOGS_="`listblog $uname`" \ 2.112 - -D_GROUPS_="`listgroupbytable $formdir/grp.def $cond`" \ 2.113 - $layout/html.m4.html $layout/home.m4.html 2.114 - 2.115 - if [ x"$user" = x"$uname" ]; then 2.116 - # Display NEWS 2.117 - cond="where 新着 > 0 order by 新着 desc,ctime desc limit 10" 2.118 - new10=`DT_CHLD=article:blogid \ 2.119 + tf=$tmpd/title.$$ pf=$tmpd/profile.$$ bf=$tmpd/blogs.$$ 2.120 + echo "$gecos さん" > $tf 2.121 + viewtable $formdir/user.def user $1 > $pf 2.122 + listblog $uname > $bf 2.123 + listgroupbytable $formdir/grp.def $cond \ 2.124 + | m4 -D_BODYCLASS_=home -D_TITLE_="spaste(\`$tf')" \ 2.125 + -D_PROFILE_="spaste(\`$pf')$conflink" \ 2.126 + -D_BLOGS_="spaste(\`$bf')" \ 2.127 + -D_GROUPS_="syscmd(\`cat')" \ 2.128 + $layout/html.m4.html $layout/home.m4.html 2.129 + 2.130 + if [ x"$user" = x"$uname" ]; then 2.131 + # Display NEWS 2.132 + cond="where 新着 > 0 order by 新着 desc,ctime desc limit 10" 2.133 + new10=`DT_CHLD=article:blogid \ 2.134 DT_VIEW=replyblog dumptable html blog "ctime title gecos" "$cond"` 2.135 - cont=`echo "$new10"|grep "^<TR>"|wc -l` 2.136 - cont=$((cont-1)) 2.137 -err newcount=$cont 2.138 - if [ $cont -gt 0 ]; then 2.139 - echo "全体の新着記事${cont}傑" | html h2 2.140 - echo "$new10" 2.141 - fi 2.142 - fi 2.143 - # 2.144 + cont=`echo "$new10"|grep "^<TR>"|wc -l` 2.145 + cont=$((cont-1)) 2.146 + err newcount=$cont 2.147 + if [ $cont -gt 0 ]; then 2.148 + echo "全体の新着記事${cont}傑" | html h2 2.149 + echo "$new10" 2.150 + fi 2.151 + fi 2.152 + # 2.153 # Record access log 2.154 [ -n "$1" ] && [ x"$1" != x"$user" ] && acclog user $1 2.155 } 2.156 @@ -1308,7 +1316,8 @@ 2.157 contenttype; echo 2.158 err commission: "$@" 2.159 gname=`getgroupbyid $1` 2.160 - m4 -D_TITLE_="グループ $gname 管理者委任" $layout/html.m4.html 2.161 + echo "グループ $gname 管理者委任" \ 2.162 + | m4 -D_TITLE_="syscmd(\`cat')" $layout/html.m4.html 2.163 if [ -n "$2" ]; then 2.164 grp_reg_adm "$@" 2.165 else 2.166 @@ -1471,20 +1480,31 @@ 2.167 listentry group "$@" 2.168 } 2.169 showgroup() { # $1=group-rowid 2.170 - 2.171 gname=`getpar gname` 2.172 if [ -n "$gname" ]; then 2.173 err UPdating/Removing of group::::::: 2.174 + # See ALSO same job in groupman() 2.175 + newgname=`echo "$gname"|tr -d '\"'"'"` 2.176 + ###newgname=$gname 2.177 +err gname=$gname newgname=$newgname 2.178 + if [ x"$newgname" != x"$gname" ]; then 2.179 + err NewGNAME: gname=$newgname 2.180 + gname=$newgname 2.181 + echo "使用禁止文字を除去し $gname としました。" | html p 2.182 + replpar gname string "$gname" 2.183 + fi 2.184 par2table $formdir/grp.def 2.185 fi 2.186 grp=`getgroupbyid $1` 2.187 err showgroup2: grp=$grp qgrp="[$(sqlquote $grp)]" 2.188 if isgroup "$grp"; then 2.189 - showgroupsub $formdir/grp.def "$1" | \ 2.190 - m4 -D_TITLE_="グループ $grp" \ 2.191 - -D_FORM_="syscmd(cat)" \ 2.192 - -D_DUMPTABLE_="" \ 2.193 - $layout/form+dump.m4.html 2.194 + tf=$tmpd/title.$$ 2.195 + echo "グループ $grp" > $tf 2.196 + showgroupsub $formdir/grp.def "$1" | \ 2.197 + m4 -D_TITLE_="spaste(\`$tf')" \ 2.198 + -D_FORM_="syscmd(\`cat')" \ 2.199 + -D_DUMPTABLE_="" \ 2.200 + $layout/form+dump.m4.html 2.201 else # if $grp is removed at par2table 2.202 listgroup 2.203 fi 2.204 @@ -1578,7 +1598,8 @@ 2.205 echo "無効な指定です。" | html p 2.206 return 2.207 fi 2.208 - m4 -D_TITLE_="グループ $grp 個別選択操作" $layout/html.m4.html 2.209 + echo "グループ $grp 個別選択操作" \ 2.210 + | m4 -D_TITLE_="syscmd(\`cat')" $layout/html.m4.html 2.211 2.212 usel=`getpar usel` 2.213 if [ -n "$usel" ]; then 2.214 @@ -1660,9 +1681,11 @@ 2.215 err grpaction: `echo $sql` 2.216 b1='<label> <input type="checkbox" name="usel" value="' 2.217 b2='"> ' b3='</label>' 2.218 + tf=$tmpd/title.$$ 2.219 + echo "グループ[$grp]参加メンバーに対する操作" > $tf 2.220 cgi_form grpaction<<EOF \ 2.221 | sed -e "s|^\(<TR><TD>\)\([0-9]*\),\([^<]*\)|\1$b1\2$b2\3$b3|" \ 2.222 - | m4 -D_TITLE_="グループ[$grp]参加メンバーに対する操作" \ 2.223 + | m4 -D_TITLE_="spaste(\`$tf')" \ 2.224 -D_SUBTITLE_="チェック後操作ボタン" \ 2.225 -D_FORM_="syscmd(cat)" -D_DUMPTABLE_="" \ 2.226 $layout/form+dump.m4.html 2.227 @@ -1696,11 +1719,12 @@ 2.228 fi 2.229 owner=`getvalbyid blog owner $rowid` 2.230 title=`getvalbyid blog title $rowid` 2.231 - m4 -D_TITLE_="修正" \ 2.232 - -D_SUBTITLE_="[$title]@$owner" -D_DIARY_="" \ 2.233 - -D_BLOGS_="" -D_DUMPTABLE_="" \ 2.234 - -D_FORM_="`GF_ACTION=\"?blog\" edittable $formdir/blog.def blog $rowid`" \ 2.235 - $layout/html.m4.html $layout/form+dump.m4.html 2.236 + GF_ACTION=\"?blog\" edittable $formdir/blog.def blog $rowid \ 2.237 + | m4 -D_TITLE_="修正" \ 2.238 + -D_SUBTITLE_="[$title]@$owner" -D_DIARY_="" \ 2.239 + -D_BLOGS_="" -D_DUMPTABLE_="" \ 2.240 + -D_FORM_="syscmd(\`cat')" \ 2.241 + $layout/html.m4.html $layout/form+dump.m4.html 2.242 } 2.243 editart() { # $1=article-rowid $2=blogrowid 2.244 rowid=${1%%[!A-Z0-9a-z_]*} 2.245 @@ -1720,11 +1744,17 @@ 2.246 return 2.247 fi 2.248 aid=`query "select id from article where rowid=$rowid;"` 2.249 + tmpout=$tmpd/editart.$$.out 2.250 + GF_ACTION="?replyblog+$blogrowid#$aid" \ 2.251 + edittable $formdir/article.def article $rowid \ 2.252 + > $tmpout 2.253 + rm -f /tmp/editart.out 2.254 + # Cannot use pipelining to m4 with genform() because of stdin stack 2.255 m4 -D_TITLE_="コメントの修正" -D_DIARY_="" \ 2.256 - -D_FORM_="`GF_ACTION=\"?replyblog+$blogrowid#$aid\" edittable $formdir/article.def article $rowid`" \ 2.257 - -D_SUBTITLE_="`gecos $owner`の「$title」" \ 2.258 - -D_BLOGS_= -D_DUMPTABLE_= \ 2.259 - $layout/html.m4.html $layout/form+dump.m4.html 2.260 + -D_FORM_="syscmd(cat $tmpout)" \ 2.261 + -D_SUBTITLE_="`gecos $owner`の「$title」" \ 2.262 + -D_BLOGS_= -D_DUMPTABLE_= \ 2.263 + $layout/html.m4.html $layout/form+dump.m4.html 2.264 } 2.265 send2mem() { 2.266 rowid=`getpar grp`
3.1 --- a/s4.cgi Sun Aug 02 17:05:08 2015 +0900 3.2 +++ b/s4.cgi Mon Aug 03 09:34:43 2015 +0900 3.3 @@ -4,15 +4,17 @@ 3.4 . $mydir/s4-funcs.sh 3.5 3.6 cgiinit 3.7 -if [ x"$1" = x"reg" ]; then 3.8 - contenttype; echo 3.9 - regist $2 3.10 - putfooter 3.11 - exit 3.12 +if [ -z "$guestonlymode" ]; then 3.13 + if [ x"$1" = x"reg" ]; then 3.14 + contenttype; echo 3.15 + regist $2 3.16 + putfooter 3.17 + exit 3.18 + fi 3.19 + 3.20 + dologin 3.21 fi 3.22 3.23 -dologin 3.24 - 3.25 case ${SERVER_SOFTWARE} in 3.26 bozohttp*) # Ugly workaround for bozohttpd, which can't send 3.27 # two or more arguments. 3.28 @@ -20,7 +22,7 @@ 3.29 ;; 3.30 esac 3.31 3.32 -err 1=$1 2=$2 3=$3 4=$4 3.33 +# err 1=$1 2=$2 3=$3 4=$4 3.34 stage=`getpar stage` 3.35 stage=${stage:-$1} 3.36 case ${stage} in