!***********************************************************************
!*
!* Program to check for users with default passwords
!*
!* Copyright (C) R.D. Eager University of Kent MCMLXXXV
!*
!***********************************************************************
!
!
!***********************************************************************
!*
!* Constants
!*
!***********************************************************************
!
constantinteger liststream = 42; ! Stream for output
constantinteger maxhelp = 8
constantstring (68)array help(1:maxhelp) = c
"",
"Parameters are:-",
" File system - a number between 0 and 99",
" if omitted, users on all file systems are listed",
"",
" Output - destination for listing",
" the default is .OUT",
""
!
!
!***********************************************************************
!*
!* Record formats
!*
!***********************************************************************
!
recordformat fdf(integer link,dsnum,byteinteger status,accessroute,
valid action,cur state,mode of use,mode,file org,
dev code,rec type,flags,lm,rm,integer asvar,arec,
recsize,minrec,maxrec,maxsize,lastrec,conad,currec,
cur,end,transfers,darecnum,cursize,datastart,
string (31) iden,integer keydesc0,keydesc1,
recsizedesc0,recsizedesc1,byteinteger f77flag,
f77form,f77access,f77status,integer f77recl,f77nrec,
idaddr,byteinteger f77blank,f77ufd,spare1,spare2)
!
!
!***********************************************************************
!*
!* Director references
!*
!***********************************************************************
!
externalintegerfunctionspec dsfi(string (6) user,integer fsys,type,
set,adr)
externalroutinespec get av fsys(integername n,integerarrayname a)
externalintegerfunctionspec get usnames(integername n,integer adr,
fsys)
!
!
!***********************************************************************
!*
!* Subsystem references
!*
!***********************************************************************
!
externalroutinespec define alias "S#DEFINE"(integer chan,string (31) iden,
integername afd,flag)
externalstringfunctionspec failuremessage alias "S#FAILUREMESSAGE"(integer mess)
externalintegerfunctionspec instream
externalintegerfunctionspec iocp alias "S#IOCP"(integer ep,parm)
externalintegermapspec mapssfd alias "S#MAPSSFD"(integer dsnum)
externalintegerfunctionspec outstream
externalintegerfunctionspec parmap alias "S#PARMAP"
externalintegerfunctionspec pstoi alias "S#PSTOI"(string (63) s)
externalroutinespec setfname alias "S#SETFNAME"(string (63) s)
externalroutinespec setpar alias "S#SETPAR"(string (255) s)
externalroutinespec set return code(integer i)
externalstringfunctionspec spar alias "S#SPAR"(integer n)
!
!
!***********************************************************************
!*
!* Service routines
!*
!***********************************************************************
!
routine clearstream(integer chan)
! Clears out a channel definition, but does not give an error if the
! channel was not defined.
record (fdf)name f
!
if mapssfd(chan) # 0 then start
f == record(mapssfd(chan))
if f_status = 0 then start
mapssfd(chan) = 0
f_dsnum = 0; ! Mark descriptor as free
finish
finish
end ; ! of clearstream
!
!-----------------------------------------------------------------------
!
routine closestream(integer chan)
! Private version of 'closestream'. Does not give an error if the
! operation fails.
integer flag
!
return unless instream # chan # outstream
flag = iocp(16,chan)
end ; ! of closestream
!
!-----------------------------------------------------------------------
!
routine printhelp
! Prints help information.
integer i
!
for i = 1,1,maxhelp cycle
printstring(help(i))
newline
repeat
end ; ! of printhelp
!
!-----------------------------------------------------------------------
!
routine treat user(stringname user,integer fsys)
integer flag
integerarray p(0:1)
!
flag = dsfi(user,fsys,5,0,addr(p(0)))
if flag = 0 and p(0) = m'....' then start
printstring(user)
printstring(" on fsys")
write(fsys,1)
newline
finish
end ; ! of treat user
!
!
!***********************************************************************
!*
!* C H E C K P A S S
!*
!***********************************************************************
!
externalroutine checkpass(string (255) parms)
integer nu,nusers,n,fx,fsys,flag,afd
string (6)array u(0:1364)
string (6) user
string (255) s,out
integerarray a(0:99)
!
setpar(parms)
!
s = spar(1)
if parmap = 1 and s = "?" then start
printhelp
set return code(0)
return
finish
!
if s # "" then start
fsys = pstoi(s)
unless 0 <= fsys <= 99 then start
setfname(s)
flag = 202; ! Invalid parameter
-> err
finish
finish else fsys = -1
!
out = spar(2)
out = ".OUT" if out = ""
define(liststream,out,afd,flag)
-> err if flag # 0
selectoutput(liststream)
!
if fsys < 0 then get av fsys(n,a) else a(0) = fsys and n = 1
!
fx = 0
while fx < n cycle
fsys = a(fx)
flag = get usnames(nusers,addr(u(0)),fsys)
-> err if flag # 0
nu = 0
while nu < nusers cycle
user = u(nu)
if user # "SPOOLR" and c
user # "VOLUMS" and c
user # "MAILER" and c
user # "FTRANS" and c
user # "FTPMAN" then start
treat user(u(nu),fsys)
finish
nu = nu + 1
repeat
fx = fx + 1
repeat
!
selectoutput(0)
closestream(liststream)
clearstream(liststream)
set return code(0)
return
!
err:
!
selectoutput(0)
closestream(liststream)
clearstream(liststream)
newline
printstring("CHECKPASS fails -".failuremessage(flag))
set return code(flag)
stop
end ; ! of checkpass
endoffile