subroutine modify(*) c c NU PRIME TIME FACILITY V 2.0 c Northeastern University Academic Computer Services c 360 Huntington Avenue c Boston, Mass 02115 c c David Bernardo, Author c c This routine modifies the permanent user, terminal or cluster data base c files, or creates a new default values data base file. c common /valid/valid_commands,group,level_line character level_line*80,levels*4,location*20,controller*1,time*23, 1 terminal*4,char_unit*1,username*12,ans*1,check*1,new_loc*20, 2 pad*2 integer*2 cluster_num,cluster_status,pt_slice,unit,terminal_status, 1 login_status,wait_time,level,new_value,pt_wait,pt_threshold, 2 sysgrp,time_len,sys_priv_grp,lim_priv_grp,num_logins, 3 cluster_logins integer*4 time_buff(2),ret_code,sys$asctim,group real*8 logout_time byte level_line_len,user_key(14),valid_commands(14) equivalence (user_key(1),username) equivalence (user_key(13),cluster_num) data levels/'CDTU'/ data pad/' '/ c level_line_len=0 do while (level_line_len.eq.0) c c Find out which data base to modify c if(level_line.eq.' ')then print 5 5 format(1x,'Cluster,Defaults,Terminal,User: ',$) read(5,10,end=999)level_line_len,level_line 10 format(q,a) else level_line_len=80 endif call upcase(level_line) call squash(level_line,level_line_len) if(level_line_len.ne.0)then level=index(levels,level_line(1:1)) if(level.gt.0)then goto (13,240,105,180)level c c Change a Cluster. c 13 call open_file_write(3,*999) 15 print 20 20 format(1x,'Cluster Number: ',$) read (5,65,err=15,end=97)check,cluster_num if(check.eq.' ')goto 15 25 format(i3) read (3,key=cluster_num,err=100) 1 cluster_num,cluster_status,pt_slice,location 30 print 35,cluster_status,pt_slice,location 35 format(1x,'Cluster status (0=immune, 1=monitored): ',i3,/, 1 1x,'Prime time slice in minutes (0=default): ',i3,/, 2 1x,'Location: ',a20,/) 40 print 45 45 format(1x,'Is this the cluster to be modified? ',$) read(5,145,end=97,err=40)ans if(ans.eq.'Y'.or.ans.eq.'y')then print 50 50 format(1x, 1 'Enter new value, hit CR to leave unchanged.',/) 55 print 60,cluster_status 60 format(1x,'Cluster status (0=immune, 1=monitored): ', 1 i3,' :',$) read(5,65,err=55,end=97)check,new_value 65 format(a,t1,i3) if(check.ne.' ')cluster_status=new_value 70 print 75,pt_slice 75 format(1x,'Prime time slice in minutes (0=default): ', 1 i3,' :',$) read(5,65,err=70,end=97)check,new_value if(check.ne.' ')pt_slice=new_value 80 print 85,location 85 format(1x,'Location: ',a20,' :',$) read(5,90,err=80,end=97)new_loc 90 format(a20) if(new_loc.ne.' ')location=new_loc rewrite(3)cluster_num,cluster_status, 1 pt_slice,location,pad endif 97 close(unit=3) return 1 100 print*,'PTC-MODIFY No such cluster.' close(unit=3) return 1 c c Change a Terminal c 105 call open_file_write(2,*999) 110 print 115 115 format(1x,'Terminal to be modified: '$) read (5,120,err=110,end=172)terminal 120 format(a4) if(terminal.eq.' ')goto 110 call upcase(terminal) read(2,key=terminal,keyid=0,err=175)terminal, 1 cluster_num,terminal_status,pt_slice print 130,cluster_num,terminal_status,pt_slice 130 format(1x,'Cluster number :',i3,/, 1 1x,'Terminal status (0=immune, 1=monitored): ',i3,/, 2 1x,'Prime time slice in minutes (0=default): ',i3,/) 135 print 140 140 format(1x,'Is this the terminal to be modified: ',$) read(5,145,err=135,end=172)ans 145 format(a1) if(ans.eq.'Y'.or.ans.eq.'y')then print 50 150 print 155,cluster_num 155 format(1x,'Cluster Number: ',i3,' :',$) read(5,65,err=150,end=172)check,new_value if(check.ne.' ')cluster_num=new_value 160 print 165,terminal_status 165 format(1x,'Terminal status (0=immune, 1=monitored): ', 1 i3,' :',$) read(5,65,err=160,end=172)check,new_value if(check.ne.' ')terminal_status=new_value 170 print 75,pt_slice read(5,65,err=170,end=172)check,new_value if(check.ne.' ')pt_slice=new_value rewrite(2)terminal,cluster_num,terminal_status, 1 pt_slice,pad endif 172 close(unit=2) return 1 175 close(unit=2) print*,'PTC-MODIFY No such terminal.' return 1 c c Change a User. c 180 call open_file_write(1,*999) 185 print 190 190 format(1x,'Username: ',$) read(5,195,err=185,end=227)username if(username.eq.' ')goto 185 195 format(a12) 196 print 197 197 format(1x,'Cluster number for user data modification: ',$) read (5,65,err=196,end=227)check,cluster_num if(check.eq.' ')goto 196 call upcase(username) read(1,key=user_key,keyid=0,err=230)username, 1 cluster_num,login_status, 2 logout_time,wait_time,pt_slice call single(time_buff,logout_time) ret_code=sys$asctim(time_len,time,time_buff,) 201 print 202,time,login_status,wait_time,pt_slice 202 format(1x,'Last logout time/time stamp: ',a23,/,1x, 1 'Login status (-1=no login,0=immune,1=login,2=wait): ', 1 i3,/,1x,'Wait time in minutes (0=default): ',i3,/, 2 1x,'Prime time slice in minutes (0=default): ',i3,/) print 203 203 format(1x,'Is this the username to be modified? ',$) read(5,145,err=201,end=227)ans if(ans.eq.'Y'.or.ans.eq.'y')then print 50 205 print 210,login_status 210 format(1x, 1 'Login status (-1=no login,0=immune,1=login,2=wait): ', 2 i3,' :',$) read(5,65,err=205,end=227)check,new_value if(check.ne.' ')then if(new_value.ge.-1.and.new_value.le.3)then login_status=new_value else print*, 1 'PTC-MODIFY Login status not between -1 and 2.' goto 205 endif endif 215 print 220,wait_time 220 format(1x,'Wait time in minutes (0=default): ', 1 i3,' :',$) read(5,65,err=215,end=227)check,new_value if(check.ne.' ')wait_time=new_value 225 print 75,pt_slice read(5,65,err=225,end=227)check,new_value if(check.ne.' ')pt_slice=new_value rewrite(1)username,cluster_num,login_status, 1 logout_time,wait_time,pt_slice endif 227 close(unit=1) return 1 230 print*, 'PTC-MODIFY No such username.' close(unit=1) return 1 c c Change the Default values. c 240 call open_file_write(4,*999) 241 pt_slice=0 pt_wait=0 pt_threshold=0 sysgrp=1 sys_priv_grp=1 lim_priv_grp=1 num_logins=0 read(4,err=310,end=247)pt_slice,pt_wait, 1 pt_threshold,sysgrp, 1 sys_priv_grp,lim_priv_grp,num_logins,cluster_logins rewind(unit=4) 247 print 250,pt_slice,pt_wait,pt_threshold,sysgrp, 1 sys_priv_grp,lim_priv_grp,num_logins,cluster_logins 250 format(1x,'Defaults:',/,1x,'Prime time slice: ',i5,/, 1 1x,'Wait time: ',i5,/,1x,'Threshold: ',i5,/, 2 1x,'System group (octal): ',o3.3,/, 3 1x,'System Privilege group (octal): ',o3.3,/, 4 1x,'Limited Privilege group (octal): ',o3.3,/, 5 1x,'Permitted logins per username (0 = unlimited): ',i3,/, 6 1x,'Permitted logins per cluster (0 = unlimited): ',i3) 251 print 252 252 format(/,1x,'Do you want to make any changes? ',$) read(5,145,err=251,end=305)ans if(ans.eq.'Y'.or.ans.eq.'y')then 255 print 260,pt_slice 260 format(1x,'Prime time slice: ',i3,' :',$) read(5,65,err=255,end=305)check,new_value if(check.ne.' ')then if(new_value.le.0)then print*,'PTC-MODIFY Prime time slice less than or equal to zero.' goto 255 endif pt_slice=new_value endif 270 print 275,pt_wait 275 format(1x,'Wait time: 'i3,' :',$) read(5,65,err=270,end=305)check,new_value if(check.ne.' ')then if(new_value.le.0)then print*,'PTC-MODIFY Wait time less than or equal to zero.' goto 270 endif pt_wait=new_value endif 280 print 285,pt_threshold 285 format(1x,'Threshold: ',i3,' :',$) read(5,65,err=280,end=305)check,new_value if(check.ne.' ')then if(new_value.le.0)then print*,'PTC-MODIFY Threshold less than or equal to zero.' goto 280 endif pt_threshold=new_value endif 290 print 295,sysgrp 295 format(1x,'System group (octal): ',o3.3,' :',$) read(5,300,err=290,end=305)check,new_value 300 format(a1,t1,o3) if(check.ne.' ')then if(new_value.le.0)then print*,'PTC-MODIFY System group less than or equal to zero.' goto 290 endif sysgrp=new_value endif 325 print 330,sys_priv_grp 330 format(1x,'System Privilege group (octal): ',o3.3,' :',$) read(5,300,err=325,end=305)check,new_value if(check.ne.' ')then if(new_value.le.0)then print*, 1'PTC-MODIFY System Privilege group less than or equal to zero.' goto 325 endif sys_priv_grp=new_value endif 335 print 340,lim_priv_grp 340 format(1x,'Limited Privilege group (octal): ',o3.3,' :',$) read(5,300,err=335,end=305)check,new_value if(check.ne.' ')then if(new_value.le.0)then print*, 1'PTC-MODIFY Limited Privilege group less than or equal to zero.' goto 335 endif lim_priv_grp=new_value endif 355 print 360,num_logins 360 format(1x,'Number of logins per username (0 = unlimited): ', 1 i3,' :',$) read(5,65,err=355,end=305)check,new_value if(check.ne.' ')then if(new_value.lt.0)then print*,'PTC-MODIFY Number of logins less than zero.' goto 355 endif num_logins=new_value endif 375 print 380,cluster_logins 380 format(1x,'Number of logins per cluster (0 = unlimited): ', 1 i3,' :',$) read(5,65,err=375,end=305)check,new_value if(check.ne.' ')then if(new_value.lt.0)then print*,'PTC-MODIFY Number of logins less than zero.' goto 375 endif cluster_logins=new_value endif write(4)pt_slice,pt_wait,pt_threshold,sysgrp,sys_priv_grp, 1 lim_priv_grp,num_logins,cluster_logins endif 305 close(unit=4) return 1 310 print*,'PTC-MODIFY Error reading PTDEFAULTS file.' close(unit=4) return 1 else print*,'PTC-MODIFY Invalid entry.' level_line_len=0 level_line=' ' endif endif enddo 999 return 1 end