!------------------------------------------------------------------------------- ! Dept. of Genetics / Howard Hughes Medical Institute ! University of Pennsylvania School of Medicine Rm. 430 Clinical Research Bldg. ! 422 Curie Blvd. Philadelphia, PA 19104 USA Tel. (215) 898-1699 ! Internet: bailey@genetics.upenn.edu (IN 128.91.200.37) !------------------------------------------------------------------------------- $! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.1 $! On 22-DEC-1992 08:40:26.92 By user BAILEY $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- September 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. [.POPPASSWD]00README.TXT;4 $! 2. [.POPPASSWD]MAKE_POPPASSWD.COM;20 $! 3. [.POPPASSWD]POPPASSWD.C;99 $! 4. [.POPPASSWD]POPPASSWD.COM;3 $! 5. [.POPPASSWD]POPPASSWD.H;36 $! 6. [.POPPASSWD]POPPASSWD_MULTINET.OPT;2 $! 7. [.POPPASSWD]POPPASSWD_UCX.OPT;2 $! 8. [.POPPASSWD]POPPASSWD_WINTCP.OPT;2 $! 9. [.POPPASSWD]START_POPPASSWD.COM;5 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes $ if f$search(P1) .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped." $ delete 'f'* $ exit $file_absent: $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped." $ delete 'f'* $ exit $dirok: $ w "-I-UNPACK, Unpacking file ''P1'" $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n' PROCEDURE GetHex LOCAL x1,x2;x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t, ERASE_CHARACTER(1))-1;RETURN 16*x1+x2;ENDPROCEDURE; PROCEDURE SkipPartsep LOOP EXITIF INDEX(ERASE_LINE,"-+-+-+-+-+-+-+-+")=1; ENDLOOP;ENDPROCEDURE; PROCEDURE ExpandChar CASE CURRENT_CHARACTER FROM ' ' TO 'z' ["`"] :ERASE_CHARACTER(1);COPY_TEXT(ASCII(GetHex));[" "]:ERASE_CHARACTER(1);[ OUTRANGE,INRANGE]:MOVE_HORIZONTAL(1);ENDCASE;ENDPROCEDURE; PROCEDURE ProcessLine s:=ERASE_CHARACTER(1);LOOP EXITIF CURRENT_OFFSET>=LENGTH( CURRENT_LINE);ExpandChar;ENDLOOP;IF s="V" THEN APPEND_LINE;ENDIF;ENDPROCEDURE; PROCEDURE AdvanceLine MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1); ENDPROCEDURE;PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)= END_OF(b);IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep; ELSE ProcessLine;AdvanceLine;ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME, "UNPACK");SET(SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:= GET_INFO(COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b, GET_INFO(COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ if P2 .eqs. "" then $ goto ckskip $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ckskip: e "-W-CHKSUMSKIP, checksum validation unavailable for ''P1'" $ endsubroutine $start: $! $ create 'f' X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20POPPasswd X XVersion:`201.0`20`2022-Dec-1992 XAuthor:`20Charles`20Bailey`20`20bailey@genetics.upenn.edu X X XPOPPasswd`20is`20a`20simple,`20single-threaded`20server`20designed`20to`20be V`20used`20in Xconjunction`20with`20the`20IUPOP3`20POP`20server`20for`20VMS,`20in`20order`20t Vo`20allow`20users`20to Xchange`20their`20passwords`20from`20within`20a`20POP`20clients.`20`20It`20shou Vld`20run`20under`20VMS`205.4 Xor`20later`20(as`20well`20as`20earlier`20versions,`20with`20the`20modification V`20described`20below), Xand`20under`20Wollonging's`20WIN/TCP,`20TGV's`20Multinet,`20or`20Digital's`20U VCX`20TCP/IP Xpackages.`20`20However,`20I`20have`20only`20tested`20it`20using`20VMS`205.4 V`20and`20WIN/TCP,`20since Xthat's`20all`20I`20have`20available. X XThis`20implementation`20follows`20the`20emerging`20standard`20for`20such`20ser Vvers`20as`20follows: X`20-`20listens`20on`20TCP`20port`20106`20(by`20default)`20for`20incoming`20con Vnections X`20-`20once`20a`20connection`20is`20established,`20accepts`20the`20following V`20commands: X`20`20`20`20user`20`7Busername`7D`20-`20accepted`20at`20any`20time,`20identifi Ves`20a`20user X`20`20`20`20pass`20`7Bpassword`7D`20-`20accepted`20after`20'user'`20to`20authe Vnticate`20the`20user X`20`20`20`20newpass`20`7Bpassword`7D`20-`20accepted`20after`20'pass'`20to`20ch Vange`20user's`20password X`20`20`20`20quit`20-`20accepted`20at`20any`20time;`20terminates`20a`20connecti Von X`20-`20responds`20to`20commands`20from`20the`20client`20with`20text`20prefixed V`20by`20codes`20similar`20to X`20`20`20those`20used`20by`20ftp`20servers: X`20`20`20`201xx`20-`20action`20in`20progress`20(not`20used`20in`20this`20imple Vmentation) X`20`20`20`202xx`20-`20action`20successful X`20`20`20`203xx`20-`20more`20information`20required X`20`20`20`204xx`20-`20nonfatal`20failure,`20connection`20maintained X`20`20`20`205xx`20-`20fatal`20failure,`20connection`20closed XSince`20the`20average`20connection`20from`20a`20client`20lasts`20less`20than V`205`20seconds,`20and`20since Xusers`20change`20passwords`20relatively`20infrequently,`20a`20single-threaded V`20server`20should Xbe`20adequate`20in`20nearly`20any`20environment.`20`20The`20server`20logs`20al Vl`20transmitted`20and Xreceived`20messages,`20as`20well`20as`20additional`20relevant`20information, V`20for`20each Xsession.`20`20The`20parameters`20supplied`20with`20the`20'pass'`20and`20'newpa Vss'`20commands`20are Xnot`20logged`20for`20security`20reasons. X XThere`20are`20some`20traits`20which`20are`20specific`20to`20this`20implementat Vion`20and`20which Xshould`20be`20mentioned: X`20-`20the`20server`20respects`20the`20SYSUAF`20LockPwd,`20PwdExpired,`20and V`20GenPwd`20flags,`20and X`20`20`20will`20not`20allow`20a`20user`20to`20change`20his`20or`20her`20passwo Vrd`20if`20any`20of`20these`20flags`20are X`20`20`20set.`20`20It`20does`20not,`20however,`20pay`20attention`20to`20passwo Vrds`20which`20have`20expired X`20`20`20due`20to`20age,`20since`20the`20whole`20point`20here`20is`20to`20chan Vge`20the`20password. X`20-`20password`20hashing`20is`20done`20via`20sys$hash_password(),`20which`20f Virst`20appears`20in`20VMS X`20`20`205.4.`20`20If`20you're`20using`20an`20older`20version`20of`20VMS,`20yo Vu`20can`20replace`20this`20call X`20`20`20with`20a`20call`20to`20the`20PWDEncrypt()`20routine`20provided`20with V`20IUPOP3. X`20-`20new`20passwords`20are`20hashed`20and`20written`20directly`20to`20SYSUAF V.`20`20There`20is`20no X`20`20`20support`20at`20present`20for`20password`20history`20lists`20or`20dict Vionaries. X`20-`20the`20'pass'`20command`20checks`20only`20the`20primary`20password;`20no V`20provision`20is`20made X`20`20`20for`20obtaining`20or`20checking`20a`20secondary`20password. X`20-`20if`20the`20server`20is`20run`20as`20a`20standalone`20process,`20one`20a Vdditional`20command`20is X`20`20`20available:`20'shutdown'.`20`20This`20can`20be`20invoked`20only`20afte Vr`20a`20user`20is`20properly X`20`20`20authenticated,`20and`20only`20if`20that`20user`20has`20WORLD`20privil Vege`20authorized`20in X`20`20`20SYSUAF`20(i.e.`20if`20he`20or`20she`20could`20kill`20the`20process V`20when`20logged`20in`20to`20the`20VMS X`20`20`20host).`20`20It`20performs`20an`20orderly`20shutdown`20of`20the`20serv Ver,`20and`20is`20mostly`20a X`20`20`20convenience;`20I've`20never`20run`20into`20any`20problems`20when`20th Ve`20server`20process`20has X`20`20`20died`20an`20untimely`20death. X XThe`20following`20compilation`20options`20are`20provided: X`20NODE`20-`20node`20name`20which`20appears`20in`20the`20welcome`20message. V`20`20Not`20used`20otherwise. X`20`20(default`20=`20host's`20DNS`20name) X`20POPPASSWD_PORT`20-`20TCP`20port`20for`20server`20(default=106) X`20DETACHED`20-`20activity`20is`20logged`20to`20Sys$Output,`20rather`20than V`20explicitly`20to`20a`20file. X`20`20This`20is`20designed`20to`20allow`20the`20server`20to`20be`20run`20as V`20a`20detached`20process`20with`20its X`20`20output`20directed`20to`20a`20file.`20`20The`20Start_POPPasswd.Com`20and V`20POPPasswd.Com`20DCL X`20`20procedures`20provide`20an`20example`20of`20this.`20`20`5BThey're`20taken V`20almost`20verbatim`20from X`20`20the`20analogous`20IUPOP3`20procedures,`20in`20case`20that`20wasn't`20obv Vious.`5D`20(default=ON) X`20INETSERV`20-`20communication`20with`20the`20client`20is`20done`20via`20read Vs`20from`20Sys$Input`20and X`20`20writes`20to`20Sys$Output,`20rather`20than`20explicitly`20to`20a`20socket V.`20`20This`20is`20designed X`20`20to`20allow`20the`20server`20to`20be`20spawned`20by`20a`20TCP`20master V`20server`20process,`20which X`20`20manages`20the`20socket`20for`20each`20instance`20of`20the`20server.`20 V`20This`20is`20the`20quick`20and X`20`20dirty`20way`20to`20a`20multithreaded`20server,`20but`20buys`20you`20a V`20lot`20of`20overhead,`20since X`20`20a`20new`20POPPasswd`20server`20process`20must`20be`20started`20for`20ech V`20connection.`20`20If`20you X`20`20choose`20this`20option,`20be`20sure`20not`20to`20select`20the`20DETACHED V`20option`20as`20well,`20or`20log X`20`20messages`20will`20be`20sent`20to`20the`20client.`20`20You`20may`20also V`20want`20to`20comment`20out`20some X`20`20of`20the`20startup`20log`20messages,`20in`20order`20to`20reduce`20startu Vp`20overhead`20and X`20`20redundant`20messages`20somewhat.`20`20(default`20=`20OFF) X`20LOGFNAME`20-`20the`20name`20of`20the`20file`20to`20which`20log`20messages V`20are`20sent,`20if`20the X`20`20DETACHED`20option`20is`20not`20defined.`20`20(default`20=`20POP_Root: V`5BLog`5DPOPPasswd.Log) XThese`20options`20may`20be`20configured`20by`20changing`20the`20appropriate V`20#defines`20in XPOPPasswd.h`20or`20on`20the`20CC`20command`20line,`20or`20via`20the`20DCL`20pr Vocedure`20Make_POPPasswd, Xwhich`20will`20prompt`20for`20the`20necessary`20values.`20`20By`20default,`20i Vt`20will`20build`20a Xversion`20which`20uses`20the`20first`20TCP/IP`20package`20it`20finds,`20and V`20uses`20default`20settings Xas`20noted`20above. X XIf`20you`20have`20any`20questions`20or`20suggestions,`20or`20trip`20over`20any V`20bugs,`20please`20let`20me Xknow.`20`20I`20can't`20guarantee`20any`20fixes,`20but`20I'll`20try`20to`20help V`20out.`20`20I`20hope`20you`20find Xthis`20useful. X X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20Legal`20Stuff: X XSome`20portions`20of`20this`20software`20are`20derived`20from`20similar`20code V`20included`20in`20the XIUPOP3`20server,`20copyright`20Indiana`20University.`20`20Original`20portions V`20of`20this Xsoftware`20are`20copyright`201992`20by`20Charles`20Bailey.`20`20Permission`20i Vs`20granted`20for Xreproduction`20and`20distribution`20of`20this`20software,`20as`20long`20as`20n Vo`20fees`20are`20charged Xabove`20that`20necessary`20to`20store`20and/or`20transmit`20the`20code,`20ans V`20as`20long`20as`20this Xnotice`20is`20included.`20`20Permission`20is`20granted`20to`20modify`20this V`20software,`20as`20long`20as Xany`20modifications`20are`20clearly`20marked`20in`20the`20source`20code. X XThis`20software`20is`20provided`20as`20is,`20without`20any`20warranty`20of`20a Vny`20kind.`20`20The`20author, Xthe`20Unversity`20of`20Pennsylvania,`20and`20the`20Howard`20Hughes`20Medical V`20Institute`20will`20not Xbe`20responsible`20for`20any`20damages`20arising`20in`20connection`20with`20th Ve`20use,`20actions,`20or Xfailure`20of`20this`20software.`20YMMV. $ call unpack [.POPPASSWD]00README.TXT;4 1383746167 "" $! $ create 'f' X$!`20`20`20Simple`20Build`20script`20for`20POPPasswd.C X$!`20`20`20Version`201.0`2022-DEC-1992`20Charles`20Bailey X$`20`20`20`20say`20=`20"Write`20Sys$Output" X$`20`20`20`20ask`20=`20"Read`20Sys$Command/Prompt=" X$`20`20`20`20ccdefs`20=`20p1 X$`20`20`20`20ccflags`20=`20p2 X$`20`20`20`20linkflags`20=`20p3 X$! X$`20`20`20`20TCPType`20=`20p4 X$`20`20`20`20If`20TCPType.nes.""`20Then`20Goto`20set_tcpdef X$`20`20`20`20If`20F$TrnLNM("TWG$TCP").nes.""`20Then`20TCPType`20=`20"WINTCP" X$`20`20`20`20If`20F$TrnLNM("MULTINET").nes.`20""`20Then`20TCPType`20=`20"MULTI VNET" X$`20`20`20`20If`20F$TrnLNM("UCX$DEVICE").nes.""`20Then`20TCPType`20=`20"UCX" X$`20`20`20`20If`20TCPType.eqs."" X$`20`20`20`20Then X$`20`20`20`20`20`20say`20"No`20known`20TCP`20package`20found`20-`20aborting." X$`20`20`20`20`20`20Exit`2044`20`20!`20SS$_Abort X$`20`20`20`20EndIf X$ X$`20`20`20`20set_tcpdef: X$`20`20`20`20ccdefs`20=`20ccdefs`20+`20","`20+`20TCPType X$`20`20`20`20say`20"Building`20POPPasswd`20using`20''TCPType'" X$`20`20`20`20If`20F$TrnLNM("Sys").eqs.""`20 X$`20`20`20`20Then X$`20`20`20`20`20`20If`20TCPType.eqs."WINTCP"`20Then`20- X`20`20`20`20`20`20`20`20`20`20Define/Process/NoLog`20Sys`20"TWG$TCP:`5BNetdist V.Include.Sys`5D" X$`20`20`20`20`20`20If`20TCPType.eqs."UCX"`20Then`20- X`20`20`20`20`20`20`20`20`20`20Define/Process/NoLog`20Sys`20"Sys$Library:" X$`20`20`20`20`20`20If`20TCPType.eqs."MULTINET"`20Then`20- X`20`20`20`20`20`20`20`20`20`20Define/Process/NoLog`20Sys`20- X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20"Multinet_Root::`5BMultinet.In Vclude.Sys`5D,`20Sys$Library:" X$`20`20`20`20`20`20defined_sys`20=`201 X$`20`20`20`20Else X$`20`20`20`20`20`20defined_sys`20=`200 X$`20`20`20`20EndIf X$`20`20`20`20If`20F$TrnLNM("NetInet").eqs.""`20 X$`20`20`20`20Then X$`20`20`20`20`20`20If`20TCPType.eqs."WINTCP"`20Then`20- X`20`20`20`20`20`20`20`20`20`20Define/Process/NoLog`20NetInet`20"TWG$TCP:`5BNet Vdist.Include.NetInet`5D" X$`20`20`20`20`20`20If`20TCPType.eqs."UCX"`20Then`20- X`20`20`20`20`20`20`20`20`20`20Define/Process/NoLog`20NetInet`20"Sys$Library:" X$`20`20`20`20`20`20If`20TCPType.eqs."MULTINET"`20Then`20- X`20`20`20`20`20`20`20`20`20`20Define/Process/NoLog`20NetInet`20- X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20"Multinet_Root::`5BMultinet.In Vclude.NetInet`5D,`20Sys$Library:" X$`20`20`20`20`20`20defined_netinet`20=`201 X$`20`20`20`20Else X$`20`20`20`20`20`20defined_netinet`20=`200 X$`20`20`20`20EndIf X$! X$`20`20`20`20If`20p5`20 X$`20`20`20`20Then`20 X$`20`20`20`20`20`20choice`20=`20"Y" X$`20`20`20`20Else X$`20`20`20`20`20`20ask`20"Build`20using`20default`20configuration?`20`5BY`5D V`20"`20choice X$`20`20`20`20`20`20If`20choice.eqs.""`20Then`20choice`20=`20"Y" X$`20`20`20`20EndIf X$`20`20`20`20If`20choice X$`20`20`20`20Then X$`20`20`20`20`20`20ccdefs`20=`20ccdefs`20+`20",DETACHED" X$`20`20`20`20Else X$`20`20`20`20`20`20ask`20"Host`20name`20for`20welcome`20message?`20`5B`5D`20" V`20choice X$`20`20`20`20`20`20`20`20If`20choice.nes.""`20Then`20ccdefs`20=`20ccdefs`20+ V`20- X`20`20`20`20`20`20`20`20`20`20`20`20",""NODE=""""''choice'""""""" X$`20`20`20`20`20`20ask`20"Compile`20as`20a`20debug`20version?`20`5BN`5D`20" V`20choice X$`20`20`20`20`20`20If`20choice.eqs.""`20Then`20choice`20=`20"N" X$`20`20`20`20`20`20If`20choice X$`20`20`20`20`20`20Then X$`20`20`20`20`20`20`20`20ccflags`20=`20ccflags`20+`20"/Debug/NoOptimize" X$`20`20`20`20`20`20`20`20linkflags`20=`20linkflags`20+`20"/Debug" X$`20`20`20`20`20`20EndIf X$`20`20`20`20`20`20ask`20"Run`20as`20part`20of`20an`20Internet`20master`20serv Ver?`20`5BN`5D`20"`20choice X$`20`20`20`20`20`20If`20choice.eqs.""`20Then`20choice`20=`20"N" X$`20`20`20`20`20`20If`20choice X$`20`20`20`20`20`20Then X$`20`20`20`20`20`20`20`20ccdefs`20=`20ccdefs`20+`20",INETSERV" X$`20`20`20`20`20`20Else X$`20`20`20`20`20`20`20`20ask`20"Run`20as`20a`20detached`20process?`20`5BY`5D V`20"`20detach X$`20`20`20`20`20`20`20`20If`20detach.eqs.""`20Then`20detach`20=`20"Y" X$`20`20`20`20`20`20`20`20If`20detach`20Then`20ccdefs`20=`20ccdefs`20+`20",DETA VCHED" X$`20`20`20`20`20`20`20`20ask`20"TCP`20port`20for`20server?`20`5B106`5D`20"`20c Vhoice X$`20`20`20`20`20`20`20`20If`20choice.nes.""`20Then`20ccdefs`20=`20ccdefs`20+ V`20- X`20`20`20`20`20`20`20`20`20`20`20`20",""POPPASSWD_PORT=''choice'""" X$`20`20`20`20`20`20`20`20If`20.not.detach X$`20`20`20`20`20`20`20`20Then X$`20`20`20`20`20`20`20`20`20`20ask`20"Name`20for`20server`20log`20file?`20`5BP VOPPasswd.Log`5D`20"`20choice X$`20`20`20`20`20`20`20`20`20`20if`20choice.nes.""`20Then`20ccdefs`20=`20ccdefs V`20+`20",""LOGFNAME=''choice'""" X$`20`20`20`20`20`20`20`20EndIf X$`20`20`20`20`20`20EndIf X$`20`20`20`20EndIf X$ X$`20`20`20`20If`20F$Locate(",",ccdefs).eq.0`20Then`20ccdefs=F$Extract(1,255,cc Vdefs) X$`20`20`20`20If`20ccdefs.nes.""`20Then`20ccflags`20=`20ccflags`20+`20"/Define= V("+ccdefs+")" X$`20`20`20`20say`20"CC"+ccflags+"`20POPPasswd" X$`20`20`20`20CC'ccflags'`20POPPasswd X$`20`20`20`20say`20"Link"+linkflags+"`20POPPasswd,`20POPPasswd_"+TCPType+"/Opt V" X$`20`20`20`20Link'linkflags'`20POPPasswd,`20POPPasswd_'TCPType'/Opt X$`20`20`20`20If`20defined_sys`20Then`20DeAssign/Process`20Sys X$`20`20`20`20If`20defined_netinet`20Then`20DeAssign/Process`20NetInet X$`20`20`20`20Exit $ call unpack [.POPPASSWD]MAKE_POPPASSWD.COM;20 1984908337 "" $! $ create 'f' X/*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20PopPasswd.C X`20`20`20A`20simple`20single-threaded`20POP`20password`20server. X`20`20`20Version`201.0`2022-DEC-1992`20Charles`20Bailey X*/ X X#include`20ctype X#include`20descrip X#include`20signal X#include`20stdio X#include`20string X X#ifdef`20INETSERV X#include`20unixio X#include`20file X#endif X X#include`20libdef X#include`20prvdef X#include`20uaidef X X#include`20 X#include`20 X#include`20 X#include`20 X X#include`20"poppasswd.h" X X X/**************************************************************************** X*`20command`20definitions X****************************************************************************/ X#ifdef`20INETSERV X#define`20CMDNUM`204`20`20`20`20`20`20/*`20number`20of`20commands`20*/ X#else X#define`20CMDNUM`205 X#endif X/*`20prototypes`20for`20handlers`20*/ Xint`20handle_newpass(char`20*param); Xint`20handle_pass(char`20*param); Xint`20handle_quit(char`20*param); X#ifndef`20INETSERV Xint`20handle_shutdown(char`20*param); X#endif Xint`20handle_user(char`20*param); Xstatic`20const`20struct`20cmddata`20cmd`5BCMDNUM`5D`20= X`7B`20"user",`20NAMELVL,`20handle_user, X`20`20"pass",`20PASSLVL,`20handle_pass, X`20`20"newpass",`20NEWPASSLVL,`20handle_newpass, X#ifndef`20INETSERV X`20`20"shutdown",`20NEWPASSLVL,`20handle_shutdown, X#endif X`20`20"quit",`20NAMELVL,`20handle_quit X`7D; X X X/**************************************************************************** X*`20serverwide`20globals X****************************************************************************/ Xstatic`20int`20wait`20=`201;`20`20/*`20server`20should`20wait`20for`20new`20co Vnnects`20*/ X#ifndef`20DETACHED XFILE`20*logfil;`20`20`20`20`20`20`20`20`20`20`20`20/*`20server`20log`20file V`20*/ X#endif X X X/**************************************************************************** X*`20sessionwide`20globals X*`20(these`20will`20need`20to`20be`20incorporated`20into`20a`20thread-specific V`20struct`20for X*`20`20multithreaded`20server) X****************************************************************************/ Xstatic`20int`20clientchan;`20`20`20`20`20`20`20/*`20socket`20channel`20for`20c Vurrent`20connection`20*/ Xstatic`20int`20acclvl`20=`20NAMELVL;`20`20/*`20current`20authorization`20level V`20*/ Xstatic`20char`20user`5B13`5D,`20`20`20`20`20`20`20`20/*`20username`20-`20VMS V`20max=12`20chars`20*/ X`20`20`20`20`20`20`20`20`20`20`20`20errbuf`5BBUFLEN`5D;`20`20/*`20temporary V`20buffer`20for`20error`20messages`20-`20just`20so X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20we're`20not`20reallocating`20it`20on`20the`20stack`20with V X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20every`20procedure`20call`20*/ Xstatic`20struct`20dsc$descriptor_s`20namdsc;`20`20`20/*`20points`20to`20userna Vme`20*/ Xstatic`20short`20salt;`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20/*`20salt`20for`20password`20hashing`20*/ Xstatic`20unsigned`20char`20algorithm;`20`20`20`20`20`20`20`20`20`20/*`20algori Vthm`20for`20password`20hashing`20*/ Xstatic`20long`20int`20uafhash`5B2`5D;`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20/*`20hashed`20password`20*/ Xstatic`20unsigned`20char`20minlen;`20`20`20`20`20`20`20`20`20`20`20`20`20/* V`20minimum`20password`20length`20*/ Xstatic`20int`20flags;`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20/*`20UAF`20flags`20*/ Xstatic`20int`20privileged;`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20/*`20does`20user`20have`20world`20priv?`20*/ Xstatic`20int`20failures;`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20/*`20login`20failures`20this`20session`20*/ X X X/**************************************************************************** X*`20utility`20routines X****************************************************************************/ Xint`20ppsstrncasecmp(register`20char`20*str1,`20register`20char`20*str2,`20reg Vister`20int`20len)`20`7B X/*** X`20`20case-insensitive`20string`20comparison`20 X`20`20(this`20particular`20implementation`20cribbed`20from`20IUPOP3`20code) X***/ X X`20`20`20`20register`20int`20i; X`20`20`20`20char`20a,`20b; X X`20`20`20`20for`20(i=len-1;i>=0;i--) X`20`20`20`20`7B X`20`20`20`20`20`20`20`20a`20=`20str1`5Bi`5D; X`20`20`20`20`20`20`20`20b`20=`20str2`5Bi`5D; X`20`20`20`20`20`20`20`20if`20(isupper(a))`20a`20=`20tolower(str1`5Bi`5D); X`20`20`20`20`20`20`20`20if`20(isupper(b))`20b`20=`20tolower(str2`5Bi`5D); X`20`20`20`20`20`20`20`20if`20(a`20>`20b)`20return`20(1); X`20`20`20`20`20`20`20`20if`20(a`20<`20b)`20return(-1); X`20`20`20`20`7D X`20`20`20`20return(0); X`7D`20`20/*`20end`20of`20ppsstrncasecmp`20*/ X X Xvoid`20ppslog(char`20*buf,`20int`20func)`20`7B X/*** X`20`20write`20a`20string`20to`20the`20log`20file,`20after`20adding`20a`20times Vtamp`20and`20prefix X***/ X X`20`20`20`20char`20prefix`5B40`5D; X`20`20`20`20$DESCRIPTOR(timdsc,prefix); X X`20`20`20`20lib$date_time(`26timdsc); X`20`20`20`20prefix`5B20`5D`20=`20'\0'; X`20`20`20`20switch(func)`20`7B X`20`20`20`20`20`20case`20(SYST):`20strcat(prefix,"`20local:"); X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20break; X`20`20`20`20`20`20case`20(SEND):`20strcat(prefix,"`20server:"); X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20break; X`20`20`20`20`20`20case`20(RECV):`20strcat(prefix,"`20client:"); X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20break; X`20`20`20`20`20`20default:`20`20`20`20`20strcat(prefix,"unknown`20origin:"); V`20`20`20`20`20`20 X`20`20`20`20`7D X#ifndef`20DETACHED X`20`20`20`20fprintf(logfil,"%s`20%s\n",prefix,buf); X#else X`20`20`20`20printf("%s`20%s\n",prefix,buf); X#endif X X`7D`20`20/*`20end`20of`20ppslog`20*/ X X Xint`20netgets(char`20*buf)`20`7B X/*** X`20`20`20read`20a`20string`20from`20client`20(terminated`20by`20\n) X`20`20`20returns`20length`20of`20string,`20or`20-1`20if`20100`20NULs`20are`20r Vead X`20`20`20(if`20the`20connection`20is`20dropped,`20netread()`20reads`20endless V`20NULs) X**`20*/ X X`20`20`20`20register`20int`20i,`20len`20=`20-1,`20nulls`20=`200; X X`20`20`20`20/*`20some`20clients`20send`20stuff`201`20byte`20at`20a`20time,`20s Vo`20we`20have`20to`20read`20each X`20`20`20`20`20`20`20byte`20individually`20*/ X`20`20`20`20do`20`7B X`20`20`20`20`20`20len++; X#ifdef`20INETSERV X`20`20`20`20`20`20buf`5Blen`5D`20=`20getchar(); X#else X`20`20`20`20`20`20recv(clientchan,buf+len,1,0); X#endif X`20`20`20`20`20`20if`20(buf`5Blen`5D==0)`20`7B X`20`20`20`20`20`20`20`20if`20((++nulls)==100)`20return(-1); X`20`20`20`20`20`20`20`20len--; X`20`20`20`20`20`20`7D X`20`20`20`20`20`20if`20(buf`5Blen`5D=='\127')`20len--; X`20`20`20`20`7D`20while`20(buf`5Blen`5D!='\n'); X`20`20`20`20/*`20clip`20off`20whitespace`20at`20end`20because`20different`20cl Vients`20use`20different X`20`20`20`20`20`20`20line`20terminators`20*/ X`20`20`20`20while`20(isspace(buf`5Blen`5D))`20buf`5Blen--`5D`20=`20'\0'; X X`20`20`20`20for`20(i=0;i<=len;i++)`20if`20(!isspace(buf`5Bi`5D))`20break; X`20`20`20`20if`20(i=cmd`5Bi`5D.minacclvl)`20`7B X`20`20`20`20`20`20`20`20`20`20`20`20`20return((*cmd`5Bi`5D.handler)(rest)); X`20`20`20`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`20`20`20`20`20else`20`7B X`20`20`20`20`20`20`20`20`20`20`20`20`20netputs("401`20We`20haven't`20gone`20th Vat`20far`20yet;`20please`20log`20in`20first"); X`20`20`20`20`20`20`20`20`20`20`20`20`20return(1); X`20`20`20`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`7D X`20`20`20`20`20`20netputs("400`20That`20does`20not`20compute"); X#ifdef`20INETSERV X`20`20`20`20`20`20netputs("400`20Valid`20commands`20are:`20user,`20pass,`20new Vpass,`20quit"); X#else X`20`20`20`20`20`20netputs("400`20Valid`20commands`20are:`20user,`20pass,`20new Vpass,`20shutdown,`20quit"); X#endif X`20`20`20`20`7D X`20`20`20`20return(1); X X`7D`20`20/*`20end`20of`20process_command`20*/ X X X/**************************************************************************** X*`20main`20loop X****************************************************************************/ Xint`20main()`20`7B X X`20`20`20`20char`20buf`5BBUFLEN`5D,`20bannerhost`5BBUFLEN`5D,`20*token,`20*res Vt; X`20`20`20`20int`20i,`20chan,`20namelen; X`20`20`20`20struct`20sockaddr_in`20sin; X`20`20`20`20struct`20hostent`20*client; X X`20`20`20`20if`20(!set_privs(DISABLE))`20`7B X`20`20`20`20`20`20printf("poppasswd`20server`20died:`20sys$setprv`20failed`20d Vuring`20startup\n"); X`20`20`20`20`20`20exit(0); X`20`20`20`20`7D X X#ifndef`20DETACHED X#ifdef`20INETSERV X`20`20`20`20if`20((logfil=fopen(LOGFNAME,"a"))==NULL)`20`7B X#else X`20`20`20`20if`20((logfil=fopen(LOGFNAME,"w"))==NULL)`20`7B X#endif X`20`20`20`20`20`20printf("poppasswd`20server`20died:`20fopen()`20failed\n"); X`20`20`20`20`20`20exit(0); X`20`20`20`20`7D X#endif X X`20`20`20`20sprintf(buf,"poppasswd`20server`20version`20%s`20starting",VERSION V); X`20`20`20`20ppslog(buf,SYST); X`20`20`20`20gethostname(bannerhost,sizeof(bannerhost)); X`20`20`20`20i`20=`20sprintf(buf,`20"on`20port`20%d`20at`20%s",POPPASSWD_PORT,b Vannerhost); X`20`20`20`20ppslog(buf,SYST); X#if`20defined(WINTCP) X`20`20`20`20ppslog("using`20WIN/TCP`20sockets",SYST); X#elif`20defined(MULTINET) X`20`20`20`20ppslog("using`20MULTINET`20sockets",SYST); X#elif`20defined(UCX) X`20`20`20`20ppslog("using`20UCX`20sockets",SYST); X#endif X`20`20`20`20if`20(strlen(NODE)!=0)`20`7B X`20`20`20`20`20`20strcpy(bannerhost,NODE); X`20`20`20`20`20`20sprintf(buf,"advertised`20host`20name`20is`20%s",bannerhost) V; X`20`20`20`20`20`20ppslog(buf,SYST); X`20`20`20`20`7D X#ifdef`20DETACHED X`20`20`20`20ppslog("DETACHED`20option`20selected`20-`20logging`20to`20stdout", VSYST); X#endif X#ifdef`20INETSERV X`20`20`20`20ppslog("INETSERV`20option`20selected`20-`20read/write`20to`20stdin V/out",SYST); X#endif X X#ifndef`20INETSERV X`20`20`20`20sin.sin_port`20=`20htons(POPPASSWD_PORT); X`20`20`20`20sin.sin_addr.s_addr`20=`20INADDR_ANY; X`20`20`20`20sin.sin_family`20=`20AF_INET; X`20`20`20`20if`20((chan=socket(AF_INET,SOCK_STREAM,0))==-1)`20`7B X`20`20`20`20`20`20ppslog("poppasswd`20server`20died:`20socket()`20failed",SYST V); X`20`20`20`20`20`20exit(0); X`20`20`20`20`7D X`20`20`20`20if`20(bind(chan,`26sin,sizeof(sin))==-1)`20`7B X`20`20`20`20`20`20ppslog("poppasswd`20server`20died:`20bind()`20failed",SYST); V X`20`20`20`20`20`20exit(0); X`20`20`20`20`7D X`20`20`20`20if`20(listen(chan,3)==-1)`20`7B X`20`20`20`20`20`20ppslog("poppasswd`20server`20died:`20listen()`20failed",SYST V); X`20`20`20`20`20`20exit(0); X`20`20`20`20`7D X X`20`20`20`20ppslog("server`20startup`20completed;`20waiting`20for`20connection Vs",SYST); X X`20`20`20`20while(wait)`20`7B`20`20/*`20server`20loop`20*/ X#endif X X`20`20`20`20`20`20namelen`20=`20sizeof(sin); X#ifdef`20INETSERV X`20`20`20`20`20`20stdout`20=`20fdopen(open("SYS$OUTPUT:",O_WRONLY,0,"ctx=bin") V,"w"); X`20`20`20`20`20`20getpeername(stdout,`26sin,`26namelen); X#else X`20`20`20`20`20`20if`20((clientchan=accept(chan,`26sin,`26namelen))==-1)`20 V`7B X`20`20`20`20`20`20`20`20ppslog("poppasswd`20server`20died:`20accept()`20failed V",SYST); X`20`20`20`20`20`20`20`20exit(0); X`20`20`20`20`20`20`7D X#endif X X`20`20`20`20`20`20if`20((client=gethostbyaddr(`26(sin.sin_addr.s_addr), X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20sizeof(sin.sin_addr.s_addr),AF_IN VET))!=NULL) X`20`20`20`20`20`20`20`20sprintf(buf,"connection`20established`20from`20%s",cli Vent->h_name); X`20`20`20`20`20`20else X`20`20`20`20`20`20`20`20sprintf(buf,"connection`20accepted`20from`20%s", X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20inet_ntoa(sin.sin_addr.s_addr) V); X`20`20`20`20`20`20ppslog(buf,SYST); X`20`20`20`20`20`20/*`20Say`20hello`20to`20the`20nice`20people`20*/ X`20`20`20`20`20`20sprintf(buf,"200`20Welcome`20to`20%s`20POP`20password`20serv Ver,`20version`20%s", X`20`20`20`20`20`20`20`20`20`20`20`20`20`20bannerhost,VERSION); X`20`20`20`20`20`20netputs(buf); X`20`20`20`20 X`20`20`20`20`20`20while`20(1)`20`7B`20`20/*`20session`20loop`20*/ X`20`20`20`20`20`20`20`20/*`20clear`20the`20buffer`20so`20that`20strtok`20doesn V't`20get`20confused`20*/ X`20`20`20`20`20`20`20`20memset(buf,'\0',sizeof(buf)); X`20`20`20`20`20`20`20`20if`20(netgets(buf)<0)`20`7B X`20`20`20`20`20`20`20`20`20`20ppslog("connection`20to`20client`20lost`20-`20se Vssion`20aborted",SYST); X`20`20`20`20`20`20`20`20`20`20break; X`20`20`20`20`20`20`20`20`7D X`20`20`20`20`20`20`20`20if`20(!process_command(buf))`20`7B X X#ifndef`20INETSERV X`20`20`20`20`20`20`20`20`20`20netclose(clientchan); X`20`20`20`20`20`20`20`20`20`20clientchan`20=`200; X#endif X X`20`20`20`20`20`20`20`20`20`20break; X`20`20`20`20`20`20`20`20`7D`20 X`20`20`20`20`20`20`7D X#ifndef`20INETSERV X`20`20`20`20`7D X#endif X X#ifndef`20DETACHED X`20`20`20`20`20`20`20fclose(logfil); X#endif X`20`20`20`20`20`20`20exit(0); X X`7D`20`20/*`20end`20of`20main`20*/ $ call unpack [.POPPASSWD]POPPASSWD.C;99 107239074 "" $! $ create 'f' X$`20on`20warning`20`20`20then`20goto`20error_trap X$`20on`20control_y`20then`20goto`20final_exit X$! X$!************************ X$!`20Initialize X$!************************ X$`20set`20process/privilege=(noall,tmpmbx,netmbx,sysprv,bypass,altpri) X$`20set`20process/priority=4 X$`20set`20process/name="POPPassword" X$`20set`20output=00:00:30 X$! X$`20node`20`20`20`20`20`20`20`20=`20f$getsyi("NODENAME") X$`20programmers`20=`20"SYSTEM" X$! X$! X$!************************ X$!`20Start`20the`20Server X$!************************ X$`20Run`20User1:`5BPOP_Server`5DPOPPasswd X$`20goto`20final_exit X$! X$!************************ X$!`20Error`20Trap X$!************************ X$`20error_trap: X$`20ss_status`20=`20$status X$`20on`20warning`20then`20continue X$`20error_message`20=`20f$message(ss_status) X$! X$`20mail`20SYS$INPUT`20"''programmers'"/subject="''node'`20-`20''error_message V'" XThe`20POPPASSWD`20server`20has`20experienced`20a`20runtime`20error.`20`20The V`20reason Xfor`20the`20error`20should`20appear`20on`20the`20subject`20line`20of`20this V`20message. X XPlease`20investigate`20this`20problem`20as`20quickly`20as`20possible.`20`20 XThank`20you. X$! X$!************************ X$!`20Final`20Exit X$!************************ X$`20final_exit: X$`20exit $ call unpack [.POPPASSWD]POPPASSWD.COM;3 1912669098 "" $! $ create 'f' X/*`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20PopPasswd.h X`20`20`20For`20use`20with`20PopPasswd.C X X`20`20`20Version`201.0`20`2022-DEC-1992`20`20Charles`20Bailey X*/ X X/**************************************************************************** X*`20site-specific`20options X****************************************************************************/ X/*`20Each`20of`20these`20can`20be`20configured`20via`20alterations`20to`20this V`20file,`20inclusion`20of X`20`20`20/Define`20qualifers`20on`20the`20CC`20command`20line,`20or`20use`20of V`20the`20command`20procedure X`20`20`20Make_POPPasswd.Com.`20`20*/ X#if`20!defined(WINTCP)`20`26`26`20!defined(MULTINET)`20`26`26`20!defined(UCX) X#define`20WINTCP X#endif X#ifndef`20NODE X#define`20NODE`20""`20`20/*`20host`20name`20for`20use`20in`20welcome`20message V`20*/ X#endif X#ifndef`20POPPASSWD_PORT X#define`20POPPASSWD_PORT`20106`20`20`20`20`20`20`20`20`20/*`20TCP`20port`20to V`20listen`20on`20*/ X#endif X/*`20DETACHED`20causes`20log`20messages`20to`20be`20written`20to`20sys$output V`20*/ X#define`20DETACHED X/*`20INETSERV`20causes`20net`20reads`20and`20writes`20to`20be`20done`20via`20g Vetchar()`20and`20printf(), X`20`20`20so`20that`20this`20server`20can`20be`20run`20as`20part`20of`20a`20mas Vter`20Internet`20server`20process, X`20`20`20which`20will`20handle`20the`20details`20of`20a`20connection X`20`20`20Note:`20If`20this`20option`20is`20chosen,`20the`20'shutdown'`20comman Vd`20is`20not`20available, X`20`20`20since`20we`20can't`20kill`20the`20master`20server`20`20*/ X/*`20#define`20INETSERV`20*/ X#if`20!defined(DETACHED)`20`26`26`20!defined(LOGFNAME) X#define`20LOGFNAME`20"POP_Root:`5BLog`5DPOPPasswd.Log"`20`20/*`20log`20file V`20spec`20*/ X#endif X X/**************************************************************************** X*`20misc`20constants X****************************************************************************/ X#define`20VERSION`20"1.0`20(22-Dec-1992)" X#define`20BUFLEN`20256`20`20`20`20`20/*`20length`20of`20input`20line`20buffer V`20*/ X#define`20UPCASE`201`20`20`20`20`20`20`20/*`20function`20codes`20for`20chcase( V)`20*/ X#define`20DOWNCASE`202 X#define`20ENABLE`201`20`20`20`20`20`20`20/*`20function`20codes`20for`20set_pri Vvs()`20*/ X#define`20DISABLE`200 X#define`20SYST`200`20`20`20`20`20`20`20`20`20/*`20function`20codes`20for`20pps Vlog()`20*/ X#define`20SEND`201 X#define`20RECV`202 X#define`20NAMELVL`201`20`20`20`20`20`20/*`20access`20levels`20*/ X#define`20PASSLVL`202 X#define`20NEWPASSLVL`203 X#define`20MAXFAIL`203`20`20`20`20`20`20/*`20max`20login`20failures`20before V`20disconnect`20*/ X X X/**************************************************************************** X*`20structure`20definitions X****************************************************************************/ Xstruct`20itmlst`20`7B`20`20`20`20`20`20`20`20`20`20`20`20`20/*`20itemlist`20fo Vr`20use`20with`20VMS`20system`20services`20*/ X`20`20`20`20unsigned`20short`20buflen; X`20`20`20`20unsigned`20short`20itmcod; X`20`20`20`20unsigned`20int`20bufadr; X`20`20`20`20unsigned`20int`20retlen; X`7D; Xstruct`20cmddata`20`7B`20`20`20`20`20`20`20`20`20`20`20`20/*`20description`20o Vf`20command`20for`20dispatcher`20*/ X`20`20`20`20`20`20`20char`20name`5B9`5D;`20`20`20`20`20`20`20`20/*`20command V`20string`20*/ X`20`20`20`20`20`20`20int`20minacclvl;`20`20`20`20`20`20`20/*`20minimum`20acces Vs`20level`20required`20to`20use`20command`20*/ X`20`20`20`20`20`20`20int`20(*handler)();`20`20`20`20/*`20routine`20to`20proces Vs`20command`20-`20return`200`20if X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20connection`20should`20be`20closed,`201`20if`20not`20*/ X`7D; X X/**************************************************************************** X*`20macros X****************************************************************************/ X/*`20set`20up`20a`20VAX`20string`20descriptor`20for`20a`20C`20string`20*/ X#define`20_strtodsc(dsc,string)`20\ X`20`20dsc.dsc$w_length`20=`20strlen(string);\ X`20`20dsc.dsc$b_dtype`20=`20DSC$K_DTYPE_T;\ X`20`20dsc.dsc$b_class`20=`20DSC$K_CLASS_S;\ X`20`20dsc.dsc$a_pointer`20=`20string; X/*`20map`20the`20various`20socket`20close`20functions`20for`20different`20TCP V`20packages`20*/ X#if`20defined(MULTINET) X#define`20netclose(a)`20socket_close(a) X#elif`20defined(UCX) X#define`20netclose`20close X#endif $ call unpack [.POPPASSWD]POPPASSWD.H;36 2131095639 "" $! $ create 'f' XIdentification="PPS10-MNET" XMultinet_Socket_Library/Share XSys$Share:VAXCRTL/Share $ call unpack [.POPPASSWD]POPPASSWD_MULTINET.OPT;2 192518894 "" $! $ create 'f' XIdentification="PPS10-UCX" XSys$Library:UCX$IPC.Olb/Lib XSys$Share:VAXCRTL/Share $ call unpack [.POPPASSWD]POPPASSWD_UCX.OPT;2 1545086404 "" $! $ create 'f' XIdentification="PPS10-WIN" XSys$Share:VAXCRTL/Share X!`20Note:`20This`20is`20an`20*unsupported*`20move`20at`20this`20time.`20`20TWG V`20supports`20only`20static X!`20linking`20to`20their`20OLB,`20and`20reserves`20the`20shareable`20RTL`20for V`20use`20by`20their`20code. X!`20This`20may`20change`20in`20the`20future. XSys$Share:TWG_RTL/Share $ call unpack [.POPPASSWD]POPPASSWD_WINTCP.OPT;2 1080172240 "" $! $ create 'f' X$! X$`20On`20Warning`20`20`20Then`20Exit X$`20On`20Control_Y`20Then`20Exit X$! X$`20uic`20`20`20`20`20=`20"SYSTEM" X$`20node`20`20`20`20=`20f$getsyi("Nodename") X$`20infile`20`20=`20"POP_Root:`5BServer`5DPOPPasswd.Com" X$`20outfile`20=`20"POP_Root:`5BLog`5D''node'_POPPasswd.Log" X$! X$`20Set`20Process/Privilege=(SysPrv) X$`20Run/Detached`20`20`20`20`20`20`20`20`20- X`20`20`20`20`20/UIC=`5B'uic'`5D`20`20`20`20`20- X`20`20`20`20`20/Privilege=(SysPrv)`20- X`20`20`20`20`20/Input='infile'`20`20`20- X`20`20`20`20`20/Output='outfile'`20- X`20`20`20`20`20/Error='outfile'`20`20- X`20`20`20`20`20/AST_Limit=60`20`20`20`20`20- X`20`20`20`20`20/IO_Buffered=65`20`20`20- X`20`20`20`20`20/IO_Direct=60`20`20`20`20`20- X`20`20`20`20`20/Time=0`20`20`20`20`20`20`20`20`20`20`20- X`20`20`20`20`20/File=10`20`20`20`20`20`20`20`20`20`20- X`20`20`20`20`20/Buffer=10000`20`20`20`20`20- X`20`20`20`20`20Sys$System:Loginout.Exe X$! X$`20Exit $ call unpack [.POPPASSWD]START_POPPASSWD.COM;5 289146837 "" $ v=f$verify(v) $ exit