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