################
# ezmlm-manage #
################

  prompt "ezmlm-manage (1/2):   "

  LOCAL="$LOC-unsubscribe"
  DEFAULT='unsubscribe'
  SENDER="${SND}@$HOST"

  ${EZBIN}/ezmlm-sub "$DIR" "$SENDER"
  ${EZBIN}/ezmlm-manage -U "$DIR" </dev/null >"$ERR" 2>&1 || \
	fatal "failed with -U"
  checkenv unsubscribe-U "$LOC-return-@$HOST" "$SENDER"
  ${EZBIN}/ezmlm-issubn "$DIR" && \
	fatal "unsubscribe with -U failed"

  ${EZBIN}/ezmlm-sub "$DIR" "$SENDER"
  touch "$DIR"/nounsubconfirm
  ${EZBIN}/ezmlm-manage "$DIR" </dev/null >"$ERR" 2>&1 || \
	fatal "failed with nounsubconfirm"
  checkenv unsubscribe-nounsubconfirm "$LOC-return-@$HOST" "$SENDER"
  ${EZBIN}/ezmlm-issubn "$DIR" && \
	fatal "unsubscribe with nounsubconfirm failed"
  ${RM} "$DIR"/nounsubconfirm

  LOCAL="$LOC-digest-subscribe"
  DEFAULT='digest-subscribe'
  ${EZBIN}/ezmlm-unsub "$DIR" digest "$SENDER"

# test that access to the deny db is restricted to remote admins
  LOCAL="$LOC-deny-subscribe"
  DEFAULT='deny-subscribe'
  ${EZBIN}/ezmlm-manage "$DIR" </dev/null >/dev/null 2>&1 && \
	{
	 ${ECHO} "Deny open to regular subscribers: 0.31 bug, OK in 0.321."
	 prompt "ezmlm-manage ...      "
	 BUG="${BUG} deny"
	}
  checkenv deny "$LOC-return-@$HOST" "$SENDER"
  SENDER="${MOD}@$HOST"
  ${EZBIN}/ezmlm-sub "$DIR" mod "$SENDER" || exit 100
  ${EZBIN}/ezmlm-manage "$DIR" </dev/null > "$ERR" 2>&1 || \
	fatal "Deny access denied to remote admin!"
  checkenv admin-deny "$LOC-deny-return-@$HOST" "$SENDER"

# make non-moderated
  ${RM} -f "${DIR}/modsub" || \
	{ ${ECHO} "Failed to remove DIR/modsub"; exit 99; }

# make non-remote
  ${RM} -f "${DIR}/remote" || \
	{ ${ECHO} "Failed to remove DIR/remote"; exit 99; }
  ${EZBIN}/ezmlm-manage "$DIR" </dev/null > "$ERR" 2>&1 && \
	{
	 ${ECHO} "Deny even without remote/modsub: 0.31 bug, OK in 0.321."
	 prompt "ezmlm-manage ...      "
	 BUG="${BUG} deny"
	}
  checkenv noremote-deny "$LOC-deny-return-@$HOST" "$SENDER"

# restore remote/SENDER/mod/LOCAL/DEFAULT
  ${EZBIN}/ezmlm-unsub "$DIR" mod "$SENDER" || exit 100
  SENDER="${SND}@$HOST"		# restore order
  touch "${DIR}/remote" || \
	{ ${ECHO} "Failed to remove DIR/remote"; exit 99; }
  LOCAL="$LOC-digest-subscribe"
	DEFAULT='digest-subscribe'

  ${EZBIN}/ezmlm-manage -S "$DIR" </dev/null >"$ERR" 2>&1 || \
	fatal "failed with -S"
  checkenv digest-subscribe-S "$LOC-digest-return-@$HOST" "$SENDER"
  ${EZBIN}/ezmlm-issubn "$DIR" digest || \
	fatal "digest-subscribe with -S failed"

  ${EZBIN}/ezmlm-unsub "$DIR" digest "$SENDER"
  touch "$DIR"/nosubconfirm
  ${EZBIN}/ezmlm-manage "$DIR" </dev/null >"$ERR" 2>&1 || \
	fatal "failed with nosubconfirm"
  checkenv digest-subscribe-nosubconfirm "$LOC-digest-return-@$HOST" "$SENDER"
  ${EZBIN}/ezmlm-issubn "$DIR" digest || \
	fatal "digest-subscribe with nosubconfirm failed"
  ${RM} "$DIR"/nosubconfirm

  ${EZBIN}/ezmlm-unsub "$DIR" digest "$SENDER"
  touch "${DIR}/modsub" || \
	{ ${ECHO} "Failed to restore DIR/modsub"; exit 99; }

  SENDER="${MAN}@$HOST"

  ${ECHO} "X-num: sub1" > "$TMP"
  ${ECHO} "From: Mr. User requests <${MAN}@$HOST>" >> "$TMP"
  ${ECHO} >> "$TMP"
  ${EZBIN}/ezmlm-manage "$DIR" < "$TMP" \
		>"$ERR" 2>&1 || \
	fatal "digest-subscribe with request failed"
  checkenv sub1 "$LOC-digest-return-@$HOST" "$SENDER"

  ${GREP} T"${MAN}@$HOST" "$QQENV" >/dev/null 2>&1 || \
	fatal "failed getting digest-subscribe confirm request"

  # Add moderator
  ${EZBIN}/ezmlm-sub "$DIR" mod "${MOD}@$HOST"

  LOCAL=`${GREP} "Reply-To:" "$QQMSG" | cut -d' ' -f2 | cut -d'@' -f1` || \
	fatal "failed to find confirm address in -subscribe reply"
  qqclean
  DEFAULT=`${ECHO} "$LOCAL" | cut -c"$LOCLEN"-`
  ${ECHO} "X-num: sub3" > "$TMP"
  ${ECHO} "From: Mr. User confirms <$SENDER>" >> "$TMP"
  ${ECHO} >> "$TMP"
  ${EZBIN}/ezmlm-manage "$DIR" < "$TMP" \
		>"$ERR" 2>&1 || \
	fatal "failed to send user conf for sub1"
  checkenv sub3 "$LOC-digest-return-@$HOST" "$MOD@$HOST"
  msgexists || \
	fatal "failed to receive user conf for sub1"
  SENDER="${MOD}@$HOST"
  ${EZBIN}/ezmlm-issubn "$DIR" && \
	fatal "unsub without mod for moderated list failed"
  ${GREP} 'sub3' "$QQMSG" >/dev/null 2>&1 || \
	fatal "failed getting subscribe moderation confirm request"

  # confirm subscription request
  LOCAL=`${GREP} "Reply-To:" "$QQMSG" | cut -d' ' -f2 | cut -d'@' -f1` || \
	fatal "no confirm address in sub3 mod confirm request"
  DEFAULT=`${ECHO} "$LOCAL" | cut -c"$LOCLEN"-`
  ${ECHO} "X-num: modR1" > "$TMP"
  ${ECHO} "FROM: moderator agrees <$SENDER>" >> "$TMP"
  ${ECHO} >> "$TMP"
  ${EZBIN}/ezmlm-manage ${SW_FROM} "$DIR" < "$TMP"\
		>/dev/null 2>&1 || \
	fatal "failed to send digest sub mod accept for sub3"
  checkenv modR1 "$LOC-digest-return-@$HOST" "$MAN@$HOST"

  SENDER="${MAN}@$HOST"
  ${EZBIN}/ezmlm-sub "$DIR" "$SENDER"
  LOCAL="$LOC-unsubscribe"
  DEFAULT='unsubscribe'
  ${ECHO} "X-num: sub2" > "$TMP"
  ${EZBIN}/ezmlm-manage "$DIR" < "$TMP" >"$ERR" 2>&1 || \
	fatal "unsubscribe request failed"
  checkenv sub2 "$LOC-return-@$HOST" "$SENDER"

  LOCAL=`${GREP} "Reply-To:" "$QQMSG" | cut -d' ' -f2 | cut -d'@' -f1` || \
	fatal "failed to find confirm address in -unsubscribe reply"
  DEFAULT=`${ECHO} "$LOCAL" | cut -c"$LOCLEN"-`
  ${ECHO} "X-num: sub4" > "$TMP"
  ${EZBIN}/ezmlm-manage "$DIR" < "$TMP" >/dev/null 2>&1 || \
	fatal "failed to send conf for sub2"
  checkenv sub4 "$LOC-return-@$HOST" "$SENDER"

# -get function for backwards compatibility
  LOCAL="$LOC-get.1"
  DEFAULT='get.1'
  ${ECHO} "X-num: manget1" > "$TMP"
  ${EZBIN}/ezmlm-manage "$DIR" < "$TMP" >"$ERR" 2>&1 || \
	fatal "get failed"
  checkenv get.1 "$LOC-return-@$HOST" "$SENDER"

  # Check -get.1 reply
  ${GREP} 'msg1' "$QQMSG" >/dev/null || \
	fatal "get.1 failed to return archived message"

# -C should disable it
  ${EZBIN}/ezmlm-manage -C "$DIR" < "$TMP" >"$ERR" 2>&1 && \
	fatal "-C failed to disable -get"

  ${ECHO} "OK"
