s4
changeset 734:ebc1c0b19bf7 feature-annex master
Base of annex feature added
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Wed, 03 Jun 2020 21:32:10 +0900 |
parents | 4f1e3622d9d6 |
children | 23f17b1aebc3 |
files | s4-annex.sh s4-funcs.sh |
diffstat | 2 files changed, 97 insertions(+), 13 deletions(-) [+] |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/s4-annex.sh Wed Jun 03 21:32:10 2020 +0900 1.3 @@ -0,0 +1,71 @@ 1.4 +#!/bin/sh 1.5 + 1.6 +if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then 1.7 + return 1.8 +fi 1.9 +if [ "$db" -ef "$S4MASTERDB" ]; then 1.10 + return # Points to the same file 1.11 +fi 1.12 + 1.13 +skey="skey-`basename $mydir`" 1.14 +syncflag=$dbdir/usersynced 1.15 +userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag` 1.16 +test ! -e "$userupdateflag" && return 1.17 +test "$syncflag" -nt "$userupdateflag" && return 1.18 + 1.19 +# for sub.sq3 1.20 +# 1.21 +# main: user: 'taro', 'hanako', 'shige' 1.22 +# sub: user: 'taro', 'hanako', 'shige' 1.23 +# sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's') 1.24 +# then update 1.25 +# 1.26 + 1.27 +judgeequal() { 1.28 + read num 1.29 + test $num -eq 0 && touch $syncflag 1.30 + return $num 1.31 +} 1.32 + 1.33 +## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF 1.34 +err "Starting account synchronization" 1.35 +err "db=$db mas=$S4MASTERDB sess=$sessdb" 1.36 +sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF | judgeequal 1.37 +ATTACH DATABASE "$S4MASTERDB" AS m; 1.38 +CREATE TABLE IF NOT EXISTS user(name, primary key(name)); 1.39 +BEGIN; 1.40 +DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user); 1.41 +INSERT INTO main.user(rowid, name) 1.42 + SELECT rowid, name FROM m.user 1.43 + WHERE m.user.rowid NOT IN (SELECT rowid FROM user); 1.44 +UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid); 1.45 +DELETE FROM main.user_s; 1.46 +INSERT INTO main.user_s(rowid, name, key, type, val, bin) 1.47 + SELECT rowid,* FROM m.user_s; 1.48 +DELETE FROM main.user_m; 1.49 +INSERT INTO main.user_m(rowid, name, key, type, val, bin) 1.50 + SELECT rowid,* FROM m.user_m 1.51 + WHERE key NOT LIKE '%cache%'; 1.52 +END; 1.53 + 1.54 +/* Compare user tables */ 1.55 +WITH master AS ( 1.56 + SELECT p.rowid,* FROM m.user p 1.57 + NATURAL LEFT JOIN m.user_s 1.58 + NATURAL LEFT JOIN m.user_m 1.59 +), annex AS ( 1.60 + SELECT p.rowid,* FROM user p 1.61 + NATURAL LEFT JOIN user_s 1.62 + NATURAL LEFT JOIN user_m 1.63 +), m_a AS ( 1.64 + SELECT * FROM master EXCEPT SELECT * FROM annex 1.65 +), a_m AS ( 1.66 + SELECT * FROM annex EXCEPT SELECT * FROM master 1.67 +) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m); 1.68 + 1.69 +-- SELECT * FROM annex; 1.70 +-- SELECT rowid,* FROM m.user LIMIT 10; 1.71 +-- SELECT rowid,* FROM user WHERE rowid NOT IN (SELECT rowid FROM m.user); 1.72 +DETACH DATABASE m; 1.73 +EOF 1.74 +err Done
2.1 --- a/s4-funcs.sh Tue Jun 02 08:35:16 2020 +0900 2.2 +++ b/s4-funcs.sh Wed Jun 03 21:32:10 2020 +0900 2.3 @@ -12,12 +12,14 @@ 2.4 tmpdir=${TMPDIR:-tmp} 2.5 dbdir=${DBDIR:-db} 2.6 tmpfiles="" 2.7 -db=${DB:-$dbdir/cgi.sq3} 2.8 querylog=${QUERYLOG:-$tmpdir/query.log} 2.9 searchlog=${SEARCHLOG:-$tmpdir/search.log} 2.10 +db=${DB:-$dbdir/cgi.sq3} 2.11 +sessdb=$dbdir/sess.sq3 2.12 +skey='skey' # Changed in s4-annex, if ANNEX mode 2.13 +userupdateflag=$dbdir/userupdate 2.14 +sesstb=tmp.sess 2.15 workdb=$dbdir/tmpdata.sq3 2.16 -sessdb=$dbdir/sess.sq3 2.17 -sesstb=tmp.sess 2.18 listentlimit=${LISTENTLIMIT:-30} 2.19 admin=${ADMIN:-hostmaster@example.org} 2.20 noreply=${NOREPLY:-noreply@example.org} 2.21 @@ -62,6 +64,18 @@ 2.22 " 2.23 likeesc=`printf '\037'` # ESCAPE char of LIKE operator 2.24 iconcachekey="profimgcache_S" 2.25 + 2.26 +# Start debug logging 2.27 +exec 3>> $tmpdir/debug.out 2.28 +err() { 2.29 + echo "[`date +%F-%T%z`] $@" 1>&3 2.30 +} 2.31 +# If S4MASTERDB is set, behave as ANNEX s4 2.32 +if [ -n "$S4MASTERDB" -a -s "$S4MASTERDB" ]; then 2.33 + . ./s4-annex.sh 2>> tmp/debug.out 2.34 +fi 2.35 + 2.36 + 2.37 case "$HTTP_USER_AGENT" in 2.38 *i[Pp]hone*|*[Aa]ndroid*) touchpanel=1 ;; 2.39 *) touchpanel="" ;; 2.40 @@ -372,7 +386,6 @@ 2.41 if [ -n "$isCGI" ]; then 2.42 exec 2>> $tmpdir/error.out 2.43 fi 2.44 - exec 3>> $tmpdir/debug.out 2.45 exec 5> $sqi # Turning $sqi access through fd5 for continuous open state 2.46 chmod o-r $tmpdir/error.out $tmpdir/debug.out 2.47 rm $sqi 2.48 @@ -1197,7 +1210,7 @@ 2.49 v="`echo ${kv#*=}|nkf -Ww -mQ|sed -e 's/\"/\"\"/g'`" 2.50 case "$k" in 2.51 user) _user="$v" ;; 2.52 - skey) _skey="$v" ;; 2.53 + $skey) _skey="$v" ;; 2.54 esac 2.55 query "replace into cookie values('$session', '$k', 'string', \"$v\");" 2.56 done 2.57 @@ -1214,7 +1227,7 @@ 2.58 # smail rcpts subj (file) 2.59 # $SMAIL_TO <- Recipient value of To: header 2.60 # $MAIL_FROM <- From: header value 2.61 - from=`echo "${MAIL_FROM:-$admin}"|nkf -jM|tr -d '\n'` 2.62 + from=`echo "${MAIL_FROM:-$admin}"|nkf -jM|tr : /|tr -d '\n'` 2.63 rcpt=`echo $1|tr ' ' '\n'|sort -u|tr '\n' ' '` # uniq and strip newlines 2.64 rcptheader=`echo $1|tr ' ' '\n'|sort -u|sed '2,$s/^/To: /g'` 2.65 subj=`echo $2|nkf -jM|tr -d '\n'` 2.66 @@ -1304,7 +1317,7 @@ 2.67 # $1=passwd 2.68 dbpswd=`getpwfield $user pswd` 2.69 encpswd=`mycrypt "$1" "$dbpswd"` 2.70 - ## err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd 2.71 + # err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd 2.72 [ x"$dbpswd" = x"$encpswd" ] 2.73 } 2.74 mypwhash() { 2.75 @@ -1357,7 +1370,8 @@ 2.76 newsession=`genrandom 34` 2.77 if setskey "$user" "$newsession" && 2.78 dbsetbyid user "$user" login "`date '+%F %T'`"; then 2.79 - gencookie "user=$user" "skey=$newsession" 2.80 + err gencookie "user=$user" "$skey=$newsession" 2.81 + gencookie "user=$user" "$skey=$newsession" 2.82 return 0 2.83 else 2.84 return 4 # Heavy load?? 2.85 @@ -1397,9 +1411,6 @@ 2.86 trap cleanup INT HUP EXIT TERM PIPE 2.87 # trap cleanup INT HUP 2.88 2.89 -err() { 2.90 - echo "[`date +%F-%T%z`] $@" 1>&3 2.91 -} 2.92 2.93 cgiinit() { 2.94 session=`date +%F-$$` 2.95 @@ -3936,8 +3947,10 @@ 2.96 .read $transaction 2.97 RELEASE SAVEPOINT pa2table_insert; 2.98 EOF 2.99 - return $? 2.100 - ##err donee 2.101 + rc=$? 2.102 + [ $rc -eq 0 -a x"$tbl" = x"user" ] && touch $userupdateflag 2.103 + ## err "Table:$tbl update done " 2.104 + return $rc 2.105 ) 2.106 genform() { 2.107 # $1 = form definition file