[0001] [0002] [0003] [0004] [0005] [0006] [0007] [0008] [0009] [0010] [0011] [0012] [0013] [0014] [0015] [0016] [0017] [0018] [0019] [0020] [0021] [0022] [0023] [0024] [0025] [0026] [0027] [0028] [0029] [0030] [0031] [0032] [0033] [0034] [0035] [0036] [0037] [0038] [0039] [0040] [0041] [0042] [0043] [0044] [0045] [0046] [0047] [0048] [0049] [0050] [0051] [0052] [0053] [0054] [0055] [0056] [0057] [0058] [0059] [0060] [0061] [0062] [0063] [0064] [0065] [0066] [0067] [0068] [0069] [0070] [0071] [0072] [0073] [0074] [0075] [0076] [0077] [0078] [0079] [0080] [0081] [0082] [0083] [0084] [0085] [0086] [0087] [0088] [0089] [0090] [0091] [0092] [0093] [0094] [0095] [0096] [0097] [0098] [0099] [0100] [0101] [0102] [0103] [0104] [0105] [0106] [0107] [0108] [0109] [0110] [0111] [0112] [0113] [0114] [0115] [0116] [0117] [0118] [0119] [0120] [0121] [0122] [0123] [0124] [0125] [0126] [0127] [0128] [0129] [0130] [0131] [0132] [0133] [0134] [0135] [0136] [0137] [0138] [0139] [0140] [0141] [0142] [0143] [0144] [0145] [0146] [0147] [0148] [0149] [0150] [0151] [0152] [0153] [0154] [0155] [0156] [0157] [0158] [0159] [0160] [0161] [0162] [0163] [0164] [0165] [0166] [0167] [0168] [0169] [0170] [0171] [0172] [0173] [0174] [0175] [0176] [0177] [0178] [0179] [0180] [0181] [0182] [0183] [0184] [0185] [0186] [0187] [0188] [0189]
$!----------------------------------------------------------------------------- $! AUTHACE.COM $! $! WASD (HFRD) VMS Hypertext Services, Copyright (c) 1996-1998 Mark G.Daniel. $! This package (all associated programs), comes with ABSOLUTELY NO WARRANTY. $! This is free software, and you are welcome to redistribute it $! under the conditions of the GNU GENERAL PUBLIC LICENSE, version 2. $! $! An example procedure for applying an ACE to one or more directories to allow $! the server to create, update or delete files within it (in conjunction with $! the appropriate server authorization configuration of course!) $! See the WASD Technical Overview for details on authorization. $! $! 27-JUN-98 MGD initial, v5.1 (q&d) $!----------------------------------------------------------------------------- $! $ HTTPD_ACCOUNT_NAME = "HTTP$SERVER" $! $ say = "write sys$output" $! $ if P1 .eqs. "" $ then $ type sys$input PRECIS: This command procedure adds/deletes ACEs to directories to permit the WASD HTTP server write access to the contents. Use with discretion! USAGE: P1 must be the directory to be modified Pn can be "PROFILE" for WASD /PROFILE access ACE "PROPAGATE" to generate default ACEs "DELETE" to delete matching ACEs (removing access) Delete must be done with same parameters as the original add! EXAMPLES: @AUTHACE WEB:[TEST] !applies ACE to WEB:[000000]TEST.DIR @AUTHACE WEB:[TEST.*] !applies ACE to WEB:[000000]TEST.DIR and !to all first level subdirectories @AUTHACE WEB:[TEST...] !applies ACE to WEB:[000000]TEST.DIR and !to all subdirectories in tree $ exit $ endif $! $!----------------------------------------------------------------------------- $! $!(Ahhh, for a Unix-like file system syntax!!) $! $ p1Elipsis = 0 $ if P1 - "..." .nes. P1 then p1Elipsis = 1 $! $ p1WildDir = 0 $ if P1 - ".*]" .nes. P1 then p1WildDir = 1 $ if p1WildDir then P1 = P1 - ".*]" + "]" $! $ p1Device = f$parse(P1,,,"DEVICE","NO_CONCEAL") $ p1Directory = f$parse(P1,,,"DIRECTORY","NO_CONCEAL") - "..." $ p1TopLevel = p1Device + p1Directory - "][" - "..." $ if f$element(1,".",p1TopLevel) .eqs. "." $ then $! (no subdirectories) $ p1DirFile = p1Device + "[000000]" +- (f$element(1,"[",p1TopLevel) - "]") + ".DIR" $ else $ if p1TopLevel - ".000000]" .nes. p1TopLevel $ then $! (concealed logical device, top-level directory) $ p1DirFile = p1Device + "[000000]" +- (f$element(0,".",p1Directory) - "[") + ".DIR" $ else $! (device plus multiple directories) $ p1DirFile = "" $ p1NextDir = "" $ count = 0 $ subDirLoop: $ if f$element(count,".",p1TopLevel) .eqs. "." then goto endSubDirLoop $ if p1DirFile .nes. "" then p1DirFile = p1DirFile + "." $ p1DirFile = p1DirFile + p1NextDir $ p1NextDir = f$element(count,".",p1TopLevel) $ count = count + 1 $ goto subDirLoop $ endSubDirLoop: $ p1DirFile = p1DirFile + "]" + (p1NextDir - "]") + ".DIR" $ endif $ endif $! $ if f$search(p1DirFile) .eqs. "" $ then $ asterLength = f$length(P1) + 27 $ asters = f$fao("!''asterLength'**") $ say "" $ say " ''asters'" $ say " * Directory ''P1' not found! *" $ say " ''asters'" $ say "" $ exit $ endif $! $!----------------------------------------------------------------------------- $! $ propagateAce = 0 $ if P2 .eqs. "PROPAGATE" .or. - P3 .eqs. "PROPAGATE" .or. - P4 .eqs. "PROPAGATE" .or. - P5 .eqs. "PROPAGATE" - then propagateAce = 1 $! $ profileAce = 0 $ if P2 .eqs. "PROFILE" .or. - P3 .eqs. "PROFILE" .or. - P4 .eqs. "PROFILE" .or. - P5 .eqs. "PROFILE" - then profileAce = 1 $! $ deleteAce = "" $ if P2 .eqs. "DELETE" .or. - P3 .eqs. "DELETE" .or. - P4 .eqs. "DELETE" .or. - P5 .eqs. "DELETE" - then deleteAce = " /DELETE" $! $ noConfirm = 0 $ if P2 .eqs. "NOCONFIRM" .or. - P3 .eqs. "NOCONFIRM" .or. - P4 .eqs. "NOCONFIRM" .or. - P5 .eqs. "NOCONFIRM" - then noConfirm = 1 $! $ if profileAce $ then $ if propagateAce $ then $ ace = "((IDENT=''HTTPD_ACCOUNT_NAME',OPTIONS=DEFAULT," +- "ACCESS=READ+WRITE+EXECUTE+DELETE+CONTROL)," +- "(IDENT=''HTTPD_ACCOUNT_NAME'," +- "ACCESS=READ+WRITE+EXECUTE+DELETE+CONTROL))" $ else $ ace = "(IDENT=''HTTPD_ACCOUNT_NAME'," +- "ACCESS=READ+WRITE+EXECUTE+DELETE+CONTROL)" $ endif $ else $ if propagateAce $ then $ ace = "((IDENT=''HTTPD_ACCOUNT_NAME',OPTIONS=DEFAULT," +- "ACCESS=READ+WRITE+EXECUTE+DELETE)," +- "(IDENT=''HTTPD_ACCOUNT_NAME',ACCESS=READ+WRITE+EXECUTE+DELETE))" $ else $ ace = "(IDENT=''HTTPD_ACCOUNT_NAME',ACCESS=READ+WRITE+EXECUTE+DELETE)" $ endif $ endif $! $ setAcl1 = "SET ACL /LOG ''p1DirFile' /ACL=''ace'''deleteAce'" $ setAcl2 = "SET ACL /LOG ''P1'*.DIR /ACL=''ace'''deleteAce'" $ say "" $ say "The following command(s) will be issued:" $ say "" $ say setAcl1 $ if p1Elipsis .or. p1WildDir $ then $ say "" $ say setAcl2 $ endif $! $ if noConfirm $ then $ set noon $ say "" $ 'setAcl1' $ if p1Elipsis .or. p1WildDir then 'setAcl2' $ set on $ say "" $ exit $ endif $! $ say "" $ say "Continue?" $ say "" $ read sys$command response /prompt="[No]: " $ if response $ then $ set noon $ say "" $ 'setAcl1' $ if p1Elipsis .or. p1WildDir then 'setAcl2' $ set on $ endif $ say "" $! $!-----------------------------------------------------------------------------