LSTSRV-L Archives

LISTSERV Site Administrators' Forum

LSTSRV-L

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Topic: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
David Nessl <[log in to unmask]>
Wed, 4 Dec 1991 14:50:38 EST
text/plain (100 lines)
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

ATOM RSS1 RSS2