On Wed, 4 Dec 1991 07:39:33 +0100 Eric Thomas said:
>Then there is the privacy issue. A user might be in the SIGNUP FILE
>because he subscribed to a mailing list with the CONCEAL option. If
>you were to install /WHOIS in (say) Germany, you would be breaking a
>couple laws and could end up being sued.
>Eric
Here's the EXEC I wrote to do /WHOIS on existing lists and respects
the review & confidential headers for each list. It will also search
nested sublists on the same listserv. Unfortunately I've not gotten
around to figuring out where each user's SET CONCEAL info is kept.
The syntax is "/WHOIS listname <string>". Regards, -david
David Nessl -- Coordinator, Computer Systems Control (systems programmer)
BITNET: david@nervm |Northeast Regional Data Center
Internet: [log in to unmask] |233 SSRB, University of Florida
Telephone: 904-392-2061 |Gainesville, FL 32611 USA
/*
Name: NER$CMDS EXEC
Purpose: NERDC locally-written commands for LISTSERV 1.6-17.b.
Author: David Nessl <[log in to unmask]>
Fix Log:
<date> <level> <who> <description>
09-Nov-1990 1.1.0 DRN First try. Implement /WHOIS command.
20-Feb-1991 1.2.0 DRN Handle long or missing listname in /WHOIS.
Ignore control info in LIST files for /WHOIS.
18-Mar-1991 1.3.0 DRN Trim trailing blanks from /WHOIS reply.
*/
trace off
address command
parse arg requestor cmd parms
upper cmd
if cmd = '/WHOIS' then
call whois
else do
call LSVTELL requestor, "Unimplemented local command:" cmd
exit 1
end
exit 0
whois:
parse upper var parms listname pattern
'ESTATE' listname 'LIST A'
if rc /= 0 | length(listname) > 8 | listname = '' then do
call LSVTELL requestor, "List unknown:" listname
exit 0
end
reviewers = LSVKEYWD(listname, 'REVIEW', 'PUBLIC')
conf = LSVKEYWD(listname,'CONFIDENTIAL','NO')
if ^LSVALLOW(listname, requestor, reviewers) then do
if conf = 'YES' then
call LSVTELL requestor, "List unknown:" listname
else
call LSVTELL requestor, "Accessed denied to list" listname"."
exit 0
end
'MAKEBUF'
'IDENTIFY ( STACK'
parse pull . . ournode .
'DROPBUF'
seenlists = ''
todolists = listname
found = 0
do while todolists /= ''
parse var todolists list todolists /* get next reviewer */
if find(seenlists, list) /= 0 then iterate /* skip if done the list */
seenlists = list seenlists /* mark that we've now seen this list */
'EXECIO * DISKR' list 'LIST A ( FINIS STEM X.'
if rc /= 0 then iterate
do i = 1 to x.0
if x.i = '' then iterate /* skip blank lines */
if left(x.i,1) = '*' then iterate /* skip comments */
x.i = strip(left(x.i, 80), 'Both') /* strip off control info */
subject = translate(x.i) /* upcase */
parse value word(x.i,1) with destuser '@' destnode
/* if destination is one of our own lists, search it too */
if destnode = ournode then do /* is it on our node ? */
'ESTATE' destuser 'LIST A'
if rc = 0 then do /* is it one of our lists ? */
if 0 = find(seenlists, destuser) then do
todolists = todolists destuser
iterate
end /* destuser not in seenlists */
end /* if ESTATE rc=0 */
end /* if destnode = ournode */
if pattern = '' | index(subject, pattern) /= 0 then do
call LSVTELL requestor, list':' x.i, 'NOECHO'
found = found + 1
end
end
end
call LSVTELL requestor, ,
'*** Found' found 'matches for "/WHOIS' parms'" ***', ,
'NOECHO'
exit 0
|