| T.R | Title | User | Personal Name
 | Date | Lines | 
|---|
| 1957.1 | A script to notify users that they can share a drawer | COL01::KLOCKE |  | Fri Jan 15 1993 17:40 | 225 | 
|  | This Version will (hopefully) handle the special Groups *LOCAL and *WORLD
as well. In that case all ALL-IN-1 users will get an entry for the shared 
drawer.
If a user wants to share his default drawer the drawername will be converted
to [user]drawername to avoid duplicate key errors.
Here is the result:
!+
!       SFCP_TELL_EVERYONE.SCP
!+
.LABEL START
        GET OA$DISPLAY = OA$_GBL_WORKING \FORCE
        DELETE_FILE OA$TEMP:ACLS.TMP
        GET #ACL_FOUND = 0
        GET #ORIG_USER = OA$USER
        GET #FC_UNIQUE_NAME = FILECAB.UNIQUE_NAME[#FC_DRM_DRAWER]
        GET #FC_DRAWER_NAME = FILECAB.%KEY[#FC_DRM_DRAWER]
        GET #FC_DESCRIPTION = FILECAB.DESCRIPTION[#FC_DRM_DRAWER]
        GET #FC_OWNER = PARTITION.OWNER[FILECAB.UNIQUE_NAME[#FC_DRM_DRAWER]]
        GET #FC_ADR_PARTITION = "0::"
!
!+JKL 15.01.1993
!       If the DRAWER is the users DEFAULT-DRAWER the DRAWER-Name will be
!       converted to [user]drawername to avoid duplikate key errors
        .IF OA$CURDWR_DEFAULT = "1"
        .THEN
          GET #FC_DRAWER_NAME = "[" #FC_OWNER "]" #FC_DRAWER_NAME
        .END_IF
!-JKL 15.01.1993
!
!       Find out where ACCESS.DAT is located for the drawer
        GET #FC_DRM_FILE = -
           PARTITION.DIRECTORY[FILECAB.UNIQUE_NAME[#FC_DRM_DRAWER]] -
           "ACCESS.DAT"
!       Check that there is an ACL on ACCESS.DAT
        FOR FIRST ACL$:#FC_DRM_FILE DO GET #ACL_FOUND = 1
        .IF #ACL_FOUND EQ 0 THEN .GOTO NO_ACL_FOUND
!       Walk down through the identifiers on ACCESS.DAT and create a file
!       that we can use to drive NEWDIR with...
        TEXT_FILE OPEN/WRITE ACL_FILE "OA$TEMP:ACLS.TMP"
        FOR ACL$:#FC_DRM_FILE DO -
           TEXT_FILE WRITE ACL_FILE .IDENTIFIER
        TEXT_FILE CLOSE ACL_FILE
        DUMP_CACHE
        DISPLAY Beginning to process FILECAB pointers . . . \FORCE
        TEXT_FILE OPEN/READ ACL_FILE "OA$TEMP:ACLS.TMP"
.LABEL LOOP_USERS
        TEXT_FILE READ ACL_FILE #NEXT_USER
        .IF OA$STATUS EQ 0 THEN .GOTO ALL_DONE
!       We have an identifier - start to determine whether or not we should
!       do any processing with it
        GET #ACL_USER = #NEXT_USER:30
        GET #THIS_USER_VMS = PROFIL.VMSUSR[#ACL_USER]
!       Don't process the user who owns the drawer
        .IF #THIS_USER_VMS EQS #FC_OWNER THEN .GOTO LOOP_USERS
!       Process groups in a special manner ('cos we have to expand them)
        .IF #ACL_USER:1 EQS "*" THEN .GOTO PROCESS_GROUP
!       And don't try and process someone that can't be found in the profile
        .IF PROFIL.USER[#ACL_USER] EQS "" THEN .GOTO LOOP_USERS
!       Go and NEWDIR to the user account
        GET #THIS_USER = OA$USER
        GET OA$FUNCTION = "NEWDIR " #ACL_USER
!       Did we manage to NEWDIR?
        .IF #THIS_USER = OA$USER THEN .GOTO CANT_NEWDIR
!       Check that the drawer exists...
        GET #FC_DRAWER_PRESENT = 0
        FOR FIRST FILECAB WITH (.UNIQUE_NAME:30 == #FC_UNIQUE_NAME:30) -
                AND (.PARTITION EQS #FC_ADR_PARTITION) -
           DO GET #FC_DRAWER_PRESENT = 1
!       Add the drawer - but only if it doesn't already exist in FILECAB
        GET #FC_WRITE_STATUS = 1
        .IF #FC_DRAWER_PRESENT EQ 0
        .THEN
          WRITE ADD FILECAB NAME = #FC_DRAWER_NAME, -
                     UNIQUE_NAME = #FC_UNIQUE_NAME, -
                       PARTITION = #FC_ADR_PARTITION, -
                         LASTDOC = "", -
                       INDICATOR = "0", -
                     DESCRIPTION = #FC_DESCRIPTION
          GET #FC_WRITE_STATUS = OA$STATUS
        .END_IF
        .IF #FC_WRITE_STATUS EQ 0
        .THEN
            GET OA$DISPLAY = "Error writing drawer into " OA$USER "'s FILECAB"
            FORCE
        .END_IF
        .GOTO LOOP_USERS
.LABEL PROCESS_GROUP
!       Process a group here...
        GET #ACL_GROUP_NAME = #ACL_USER:30:1
!
!+JKL 14.01.1993
!       If special Group-id as "LOCAL" (*LOCAL) or "*" (*WORLD)
!       then notify all ALL-IN-1 Users
!
        .IF #ACL_GROUP_NAME = "LOCAL" THEN .GOTO PROCESS_PROFILE
        .IF #ACL_GROUP_NAME = "" THEN .GOTO PROCESS_PROFILE
!
!-JKL 14.01.1993
!
        FOR GROUP$:#ACL_GROUP_NAME DO -
           GET #ACL_GRP_USER = .%KEY \\-
           GET #GRP_USER_THERE = PROFIL.USER[#ACL_GRP_USER] \\-
           .IF #GRP_USER_THERE NES "" -
            THEN -
             GET OA$FUNCTION = "NEWDIR " #ACL_GRP_USER \\\\-
             GET #FC_DRAWER_PRESENT = 0 \\\\-
             FOR FIRST FILECAB WITH (.UNIQUE_NAME:30 == #FC_UNIQUE_NAME:30)  -
               AND (.PARTITION EQS #FC_ADR_PARTITION) -
                  DO GET #FC_DRAWER_PRESENT = 1 \\\\-
             .IF #FC_DRAWER_PRESENT EQ 0 -
              THEN -
               WRITE ADD FILECAB NAME = #FC_DRAWER_NAME,-
                 UNIQUE_NAME = #FC_UNIQUE_NAME, -
                 INDICATOR = "0", -
                 DESCRIPTION = #FC_DESCRIPTION, -
                 PARTITION = #FC_ADR_PARTITION, -
                 LASTDOC = "" -
              ELSE  -
                OA$NULL
        .GOTO LOOP_USERS
!
!+JKL 14.01.1993
!       If special Group-id as "LOCAL" (*LOCAL) or "*" (*WORLD)
!       then notify all ALL-IN-1 Users
!
.LABEL PROCESS_PROFILE
!
!       Do not proceed for accounts without VMSUSER ("X400" etc.)
!       and some special users like "POSTMASTER,IVP,A1$SCRIPT"!
!
        FOR PROFIL WITH .VMSUSR NES "" -
          AND .USER NES "IVP" -
          AND .USER NES "A1$SCRIPT" -
          AND .USER NES "POSTMASTER" DO -
            GET #ACL_GRP_USER = .USER \\ -
            GET OA$FUNCTION = "NEWDIR " #ACL_GRP_USER \\-
            GET #FC_DRAWER_PRESENT = 0 \\-
            FOR FIRST FILECAB WITH (.UNIQUE_NAME:30 == #FC_UNIQUE_NAME:30)  -
              AND (.PARTITION EQS #FC_ADR_PARTITION) -
                DO GET #FC_DRAWER_PRESENT = 1 \\-
            .IF #FC_DRAWER_PRESENT EQ 0 -
              THEN -
                WRITE ADD FILECAB NAME = #FC_DRAWER_NAME,-
                  UNIQUE_NAME = #FC_UNIQUE_NAME, -
                  INDICATOR = "0", -
                  DESCRIPTION = #FC_DESCRIPTION, -
                  PARTITION = #FC_ADR_PARTITION, -
                  LASTDOC = "" -
               ELSE  -
                 OA$NULL
        .GOTO LOOP_USERS
!
!-JKL 14.01.1993
!
.LABEL ALL_DONE
        GET OA$FUNCTION = "NEWDIR " #ORIG_USER
        TEXT_FILE CLOSE ACL_FILE
!       DELETE_FILE OA$TEMP:ACLS.TMP
        DISPLAY Details written into user FILECAB.DATs
        .EXIT
.LABEL CANT_NEWDIR
        GET OA$DISPLAY = "Unable to NEWDIR to " #ACL_USER
        FORCE
        .GOTO LOOP_USER
.LABEL NO_ACL_FOUND
        GET OA$DISPLAY = "No Access Control List on " #FC_DRM_FILE
        .EXIT
! Author: Tony Redmond
!
! Modified by:           | Date:                | Reason:
!-----------------------------------------------------------------------------
! Tony Redmond           | 08-Dec-1992 07:12pm  | Element created, please state
!                        |                      | modifications down here
!                        |                      |
! J�rg Klocke            | 14-Jan-1993 16:45    | Prozesses Profile if Group =
!                        |                      | "LOCAL" or "WORLD"
!                        |                      |
! J�rg Klocke            | 15-Jan-1993 17:30    | If the default DRAWER is
!                        |                      | to be populated, the DRAWER
!                        |                      | name (KEY) will be changed to
!                        |                      | "[owningusername]drawername"
!                        |                      | ([REDMOND]MAIN)
!                        |                      |
!                        |                      |
!-----------------------------------------------------------------------------
!
!       A script to insert pointers to a drawer in everyone's FILECAB.DAT
!
 | 
| 1957.2 | *LOCAL isn't all local users | IOSG::TALLETT | Gimmee an Alpha colour notebook... | Mon Jan 18 1993 09:46 | 18 | 
|  |     
    	I like your modification to add [username] onto the drawername
    	but I'm not sure your processing of *LOCAL is right.
    
    	Contrary to popular belief, *LOCAL does NOT mean all users local
    	to this system. It actually means all processes with the LOCAL
    	identifier which means only processes created for a terminal
    	directly connected to this machine. So, for example, if you log in
    	via LAT you CAN access the drawer, but if you SET HOST you CAN'T
    	access the drawer.
    
    	Also the File Cab Server doesn't have the LOCAL identifier so you
    	can't do cross-drawer refiles etc with *LOCAL.
    
    	I don't think it makes sense to process *LOCAL as you have done.
    
    Regards,
    Paul
 | 
| 1957.3 | Also not via modems | IOSG::SHOVE | Dave Shove -- REO2-G/M6 | Mon Jan 18 1993 10:19 | 11 | 
|  |     Correction to Paul's last:
    
So, for example, if you log in
    	via LAT you CAN access the drawer, but if you SET HOST you CAN'T
    	access the drawer.
    
    Actually, only for a direct connection to the LAT. A connection via
    modem gets the DIALUP identifier instead (I just looked at mine).
    
    Dave.
 | 
| 1957.4 | Change request | IOSG::MAURICE | Because of the architect the building fell down | Mon Jan 18 1993 11:45 | 7 | 
|  |     I'd recommend that you don't use the [user]drawername syntax within
    FILECAB. If you look in the Create Drawer script you will notice that
    this syntax is invalid. 
    
    Cheers
    
    Stuart
 | 
| 1957.5 | FCS does not need LOCAL | CHRLIE::HUSTON |  | Mon Jan 18 1993 13:39 | 15 | 
|  |     
    re .2
    
    >	Also the File Cab Server doesn't have the LOCAL identifier so you
    >	can't do cross-drawer refiles etc with *LOCAL.
    
    True, the FCS does not run with LOCAL, but it does run with sysprv, and
    the drawer should be setup with system access, else anything you try 
    that uses the FCS will fail.
    
    The FCS also has a bug in it that it does not understand *LOCAL, this
    is already logged.
    
    --Bob
    
 | 
| 1957.6 | Thanks for your thoughts | COL01::KLOCKE |  | Wed Jan 27 1993 16:36 | 19 | 
|  | I agree, that there is no sense in processing the PROFILE for the group
*LOCAL. The group was misunderstood by me. On the other hand it does not harm,
exept of understandingproblems on userside, why he once can and once cannot 
access the specific drawer.
to  reply .4
During creation of a drawer the brackets [] are not allowed, because the 
drawer name is used to build the unique drawer id, which uses brackest as well.
But there is no problem renaming your drawer using brackets after it is created
once. The script does not create any new drawer but enters entries to the 
filecab's using an existing "unique drawer id" and gives just a modified name 
to the drawername.
Cheers
J�rg Klocke
 | 
| 1957.7 | LITTLE BUG IN SCRIPT | COLA1::KLOCKE | J�rg Klocke | Wed Feb 03 1993 17:16 | 11 | 
|  |     I FOUND A LITTLE BUG IN MY SCRIPT ...
    
    
    IN ALL .IF STATEMENTS THE "=" SHOULD BE REPLACED BY "EQS"!
    
    OTHERWISE IF ANY GROUP IS FOUND THE PROCESS FOR THE WORLDGROUP
    WILL BE EXECUTED.
    
    SORRY 
    
    J�RG
 |