Mercurial > hgrepos > hgweb.cgi > 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, 96 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/s4-annex.sh Wed Jun 03 21:32:10 2020 +0900 @@ -0,0 +1,71 @@ +#!/bin/sh + +if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then + return +fi +if [ "$db" -ef "$S4MASTERDB" ]; then + return # Points to the same file +fi + +skey="skey-`basename $mydir`" +syncflag=$dbdir/usersynced +userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag` +test ! -e "$userupdateflag" && return +test "$syncflag" -nt "$userupdateflag" && return + +# for sub.sq3 +# +# main: user: 'taro', 'hanako', 'shige' +# sub: user: 'taro', 'hanako', 'shige' +# sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's') +# then update +# + +judgeequal() { + read num + test $num -eq 0 && touch $syncflag + return $num +} + +## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF +err "Starting account synchronization" +err "db=$db mas=$S4MASTERDB sess=$sessdb" +sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF | judgeequal +ATTACH DATABASE "$S4MASTERDB" AS m; +CREATE TABLE IF NOT EXISTS user(name, primary key(name)); +BEGIN; +DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user); +INSERT INTO main.user(rowid, name) + SELECT rowid, name FROM m.user + WHERE m.user.rowid NOT IN (SELECT rowid FROM user); +UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid); +DELETE FROM main.user_s; +INSERT INTO main.user_s(rowid, name, key, type, val, bin) + SELECT rowid,* FROM m.user_s; +DELETE FROM main.user_m; +INSERT INTO main.user_m(rowid, name, key, type, val, bin) + SELECT rowid,* FROM m.user_m + WHERE key NOT LIKE '%cache%'; +END; + +/* Compare user tables */ +WITH master AS ( + SELECT p.rowid,* FROM m.user p + NATURAL LEFT JOIN m.user_s + NATURAL LEFT JOIN m.user_m +), annex AS ( + SELECT p.rowid,* FROM user p + NATURAL LEFT JOIN user_s + NATURAL LEFT JOIN user_m +), m_a AS ( + SELECT * FROM master EXCEPT SELECT * FROM annex +), a_m AS ( + SELECT * FROM annex EXCEPT SELECT * FROM master +) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m); + +-- SELECT * FROM annex; +-- SELECT rowid,* FROM m.user LIMIT 10; +-- SELECT rowid,* FROM user WHERE rowid NOT IN (SELECT rowid FROM m.user); +DETACH DATABASE m; +EOF +err Done
--- a/s4-funcs.sh Tue Jun 02 08:35:16 2020 +0900 +++ b/s4-funcs.sh Wed Jun 03 21:32:10 2020 +0900 @@ -12,12 +12,14 @@ tmpdir=${TMPDIR:-tmp} dbdir=${DBDIR:-db} tmpfiles="" -db=${DB:-$dbdir/cgi.sq3} querylog=${QUERYLOG:-$tmpdir/query.log} searchlog=${SEARCHLOG:-$tmpdir/search.log} -workdb=$dbdir/tmpdata.sq3 +db=${DB:-$dbdir/cgi.sq3} sessdb=$dbdir/sess.sq3 +skey='skey' # Changed in s4-annex, if ANNEX mode +userupdateflag=$dbdir/userupdate sesstb=tmp.sess +workdb=$dbdir/tmpdata.sq3 listentlimit=${LISTENTLIMIT:-30} admin=${ADMIN:-hostmaster@example.org} noreply=${NOREPLY:-noreply@example.org} @@ -62,6 +64,18 @@ " likeesc=`printf '\037'` # ESCAPE char of LIKE operator iconcachekey="profimgcache_S" + +# Start debug logging +exec 3>> $tmpdir/debug.out +err() { + echo "[`date +%F-%T%z`] $@" 1>&3 +} +# If S4MASTERDB is set, behave as ANNEX s4 +if [ -n "$S4MASTERDB" -a -s "$S4MASTERDB" ]; then + . ./s4-annex.sh 2>> tmp/debug.out +fi + + case "$HTTP_USER_AGENT" in *i[Pp]hone*|*[Aa]ndroid*) touchpanel=1 ;; *) touchpanel="" ;; @@ -372,7 +386,6 @@ if [ -n "$isCGI" ]; then exec 2>> $tmpdir/error.out fi - exec 3>> $tmpdir/debug.out exec 5> $sqi # Turning $sqi access through fd5 for continuous open state chmod o-r $tmpdir/error.out $tmpdir/debug.out rm $sqi @@ -1197,7 +1210,7 @@ v="`echo ${kv#*=}|nkf -Ww -mQ|sed -e 's/\"/\"\"/g'`" case "$k" in user) _user="$v" ;; - skey) _skey="$v" ;; + $skey) _skey="$v" ;; esac query "replace into cookie values('$session', '$k', 'string', \"$v\");" done @@ -1214,7 +1227,7 @@ # smail rcpts subj (file) # $SMAIL_TO <- Recipient value of To: header # $MAIL_FROM <- From: header value - from=`echo "${MAIL_FROM:-$admin}"|nkf -jM|tr -d '\n'` + from=`echo "${MAIL_FROM:-$admin}"|nkf -jM|tr : /|tr -d '\n'` rcpt=`echo $1|tr ' ' '\n'|sort -u|tr '\n' ' '` # uniq and strip newlines rcptheader=`echo $1|tr ' ' '\n'|sort -u|sed '2,$s/^/To: /g'` subj=`echo $2|nkf -jM|tr -d '\n'` @@ -1304,7 +1317,7 @@ # $1=passwd dbpswd=`getpwfield $user pswd` encpswd=`mycrypt "$1" "$dbpswd"` - ## err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd + # err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd [ x"$dbpswd" = x"$encpswd" ] } mypwhash() { @@ -1357,7 +1370,8 @@ newsession=`genrandom 34` if setskey "$user" "$newsession" && dbsetbyid user "$user" login "`date '+%F %T'`"; then - gencookie "user=$user" "skey=$newsession" + err gencookie "user=$user" "$skey=$newsession" + gencookie "user=$user" "$skey=$newsession" return 0 else return 4 # Heavy load?? @@ -1397,9 +1411,6 @@ trap cleanup INT HUP EXIT TERM PIPE # trap cleanup INT HUP -err() { - echo "[`date +%F-%T%z`] $@" 1>&3 -} cgiinit() { session=`date +%F-$$` @@ -3936,8 +3947,10 @@ .read $transaction RELEASE SAVEPOINT pa2table_insert; EOF - return $? - ##err donee + rc=$? + [ $rc -eq 0 -a x"$tbl" = x"user" ] && touch $userupdateflag + ## err "Table:$tbl update done " + return $rc ) genform() { # $1 = form definition file