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