1*2fb4f839SGregory Neil Shapiro#!/bin/sh 2*2fb4f839SGregory Neil Shapiro# Copyright (c) 2021 Proofpoint, Inc. and its suppliers. 3*2fb4f839SGregory Neil Shapiro# All rights reserved. 4*2fb4f839SGregory Neil Shapiro# 5*2fb4f839SGregory Neil Shapiro# By using this file, you agree to the terms and conditions set 6*2fb4f839SGregory Neil Shapiro# forth in the LICENSE file which can be found at the top level of 7*2fb4f839SGregory Neil Shapiro# the sendmail distribution. 8*2fb4f839SGregory Neil Shapiro# 9*2fb4f839SGregory Neil Shapiro# ---------------------------------------- 10*2fb4f839SGregory Neil Shapiro# test map locking. 11*2fb4f839SGregory Neil Shapiro# Note: this is mostly for systems which use fcntl(). 12*2fb4f839SGregory Neil Shapiro# just invoke it from the obj.*/libsmutil/ directory; 13*2fb4f839SGregory Neil Shapiro# otherwise use the -l and -m options to specify the paths. 14*2fb4f839SGregory Neil Shapiro# ---------------------------------------- 15*2fb4f839SGregory Neil Shapiro 16*2fb4f839SGregory Neil Shapirofail() 17*2fb4f839SGregory Neil Shapiro{ 18*2fb4f839SGregory Neil Shapiro echo "$0: $@" 19*2fb4f839SGregory Neil Shapiro exit 1 20*2fb4f839SGregory Neil Shapiro} 21*2fb4f839SGregory Neil Shapiro 22*2fb4f839SGregory Neil Shapiroerr() 23*2fb4f839SGregory Neil Shapiro{ 24*2fb4f839SGregory Neil Shapiro echo "$0: $@" 25*2fb4f839SGregory Neil Shapiro rc=1 26*2fb4f839SGregory Neil Shapiro} 27*2fb4f839SGregory Neil Shapiro 28*2fb4f839SGregory Neil ShapiroO=`basename $0`.0 29*2fb4f839SGregory Neil ShapiroV=vt 30*2fb4f839SGregory Neil ShapiroM=../makemap/makemap 31*2fb4f839SGregory Neil ShapiroCHKL=./t-lockfile 32*2fb4f839SGregory Neil Shapiro 33*2fb4f839SGregory Neil Shapirousage() 34*2fb4f839SGregory Neil Shapiro{ 35*2fb4f839SGregory Neil Shapiro cat <<EOF 36*2fb4f839SGregory Neil Shapiro$0: test basic makemap locking; 37*2fb4f839SGregory Neil Shapirorequires `basename ${CHKL}` and `basename ${M}`. 38*2fb4f839SGregory Neil Shapirousage: 39*2fb4f839SGregory Neil Shapiro$0 [options] 40*2fb4f839SGregory Neil Shapirooptions: 41*2fb4f839SGregory Neil Shapiro-l locktest path to `basename ${CHKL}` [default: ${CHKL}] 42*2fb4f839SGregory Neil Shapiro-m makemap path to `basename ${M}` [default: $M] 43*2fb4f839SGregory Neil ShapiroEOF 44*2fb4f839SGregory Neil Shapiro} 45*2fb4f839SGregory Neil Shapiro 46*2fb4f839SGregory Neil Shapirotries=0 47*2fb4f839SGregory Neil Shapirorc=0 48*2fb4f839SGregory Neil Shapirowhile getopts l:m:t: FLAG 49*2fb4f839SGregory Neil Shapirodo 50*2fb4f839SGregory Neil Shapiro case "${FLAG}" in 51*2fb4f839SGregory Neil Shapiro l) CHKL="${OPTARG}";; 52*2fb4f839SGregory Neil Shapiro m) M="${OPTARG}";; 53*2fb4f839SGregory Neil Shapiro t) tries="${OPTARG}";; 54*2fb4f839SGregory Neil Shapiro *) usage 55*2fb4f839SGregory Neil Shapiro exit 69 56*2fb4f839SGregory Neil Shapiro ;; 57*2fb4f839SGregory Neil Shapiro esac 58*2fb4f839SGregory Neil Shapirodone 59*2fb4f839SGregory Neil Shapiroshift `expr ${OPTIND} - 1` 60*2fb4f839SGregory Neil Shapiro 61*2fb4f839SGregory Neil Shapiro[ -x $M ] || fail "missing $M" 62*2fb4f839SGregory Neil Shapiro[ -x ${CHKL} ] || fail "missing ${CHKL}" 63*2fb4f839SGregory Neil Shapiro 64*2fb4f839SGregory Neil ShapiroMAPTX=`$M -x | egrep 'hash|cdb'` 65*2fb4f839SGregory Neil Shapiro 66*2fb4f839SGregory Neil Shapiromm() 67*2fb4f839SGregory Neil Shapiro{ 68*2fb4f839SGregory Neil Shapiro (echo "l1 l2"; sleep 5; echo "e1 e2") | 69*2fb4f839SGregory Neil Shapiro $M -v $MT $F >> $O 2>&1 70*2fb4f839SGregory Neil Shapiro} 71*2fb4f839SGregory Neil Shapiro 72*2fb4f839SGregory Neil Shapirochkl() 73*2fb4f839SGregory Neil Shapiro{ 74*2fb4f839SGregory Neil Shapiro ${CHKL} -Rrc -f $F >> $O 2>&1 75*2fb4f839SGregory Neil Shapiro} 76*2fb4f839SGregory Neil Shapiro 77*2fb4f839SGregory Neil Shapirofor XT in ${MAPTX} 78*2fb4f839SGregory Neil Shapirodo 79*2fb4f839SGregory Neil Shapiro 80*2fb4f839SGregory Neil ShapiroMT=`echo $XT | cut -d: -f1` 81*2fb4f839SGregory Neil ShapiroEXT=`echo $XT | cut -d: -f2` 82*2fb4f839SGregory Neil Shapiro 83*2fb4f839SGregory Neil ShapiroF=$V.${EXT} 84*2fb4f839SGregory Neil Shapiro 85*2fb4f839SGregory Neil Shapirorm -f $O 86*2fb4f839SGregory Neil Shapiromm & 87*2fb4f839SGregory Neil Shapirowpid=$! 88*2fb4f839SGregory Neil Shapirosleep 1 89*2fb4f839SGregory Neil Shapirochkl& 90*2fb4f839SGregory Neil Shapirorpid=$! 91*2fb4f839SGregory Neil Shapiro 92*2fb4f839SGregory Neil Shapirowhile [ $tries -gt 0 ] 93*2fb4f839SGregory Neil Shapirodo 94*2fb4f839SGregory Neil Shapiro sleep 1; chkl 95*2fb4f839SGregory Neil Shapiro tries=`expr $tries - 1 ` 96*2fb4f839SGregory Neil Shapirodone 97*2fb4f839SGregory Neil Shapiro 98*2fb4f839SGregory Neil Shapirowait $wpid 99*2fb4f839SGregory Neil Shapirowait $rpid 100*2fb4f839SGregory Neil Shapiro 101*2fb4f839SGregory Neil Shapiroif grep "status=unknown" $O >/dev/null 102*2fb4f839SGregory Neil Shapirothen 103*2fb4f839SGregory Neil Shapiro : 104*2fb4f839SGregory Neil Shapiroelse 105*2fb4f839SGregory Neil Shapiro # get the makemap pid, not the "mm" pid, for checks? 106*2fb4f839SGregory Neil Shapiro grep "status=locked pid=" $O || err "$MT map not locked" 107*2fb4f839SGregory Neil Shapirofi 108*2fb4f839SGregory Neil Shapiro 109*2fb4f839SGregory Neil Shapirodone 110*2fb4f839SGregory Neil Shapiro 111*2fb4f839SGregory Neil Shapiroexit $rc 112