xref: /freebsd-src/contrib/sendmail/libsmutil/t-maplock-0.sh (revision 2fb4f839f3fc72ce2bab12f9ba4760f97f73e97f)
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