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