// IfsTelnetSysParam1.bcpl -- Commands to change system parameters
// Copyright Xerox Corporation 1979, 1980, 1981, 1982
// Last modified July 24, 1982 5:26 PM by Taft
get ecBadRName from "Grapevine.decl"
get opReadRemark from "GrapevineProtocol.decl"
get "Ifs.decl"
get "IfsSystemInfo.decl"
get "IfsFiles.decl"
get "IfsRs.decl"
get "IfsTelnet.decl"
external
[
// outgoing procedures
SysParamSubcommand
// incoming procedures
InstallSysParams; SelectKeyword; TelnetCommandQuit
GetNumber; GetString; GetGroupName; SetGroupName; ReadRString
DefaultPhrase; DefaultTemplate; Confirm; AbortCmd
EnableCatch; EndCatch; DisableCatch; CopyString; ExtractSubstring
ResetTimeServ; EnableTimeServ; EnableNameServ; InitCachedDIF
EnableBootServ; EnablePress; EnableLeaf; EnableCopyDisk; EnableLookupFileServ
VFileReadPage; VFileWritePage; LockCell; UnlockCell; Password
Puts; PutTemplate; Ws; Wss; Errors; MoveBlock
FalsePredicate; SysFree; FreePointer; IFSPrintError
// incoming statics
CtxRunning; dsp
maxJobs; lenJobT; infoVMD; entFlag; ClockSecond; leafPresent
enablePasswordLog; enableGrapevineAuth; enableGrapevineGroup; defaultRegistry
]
//---------------------------------------------------------------------------
let SysParamSubcommand(cs, entry, sp) be
//---------------------------------------------------------------------------
[
Puts(cs, $*s)
switchon entry!0 into
[
case 1: // Quit
TelnetCommandQuit(cs)
case 2: // Server-Limit
[
DefaultTemplate(cs, "$D", maxJobs)
let n = GetNumber(cs)
if n-1 uge lenJobT then Errors(cs, 0)
sp>>SysParams.maxJobs = n
endcase
]
case 3: // Clock-correction
[
let corr = sp>>SysParams.clockCorrection
Wss(cs, "(seconds per day) ")
DefaultTemplate(cs, "$S$D", (corr ge 0? "+", ""), corr)
sp>>SysParams.clockCorrection = GetNumber(cs)
endcase
]
case 4: // Reset-Time
if Confirm(cs) then ResetTimeServ()
endcase
// SysParamSubcommand (cont'd)
case 5: // Group-Name
case 6: // World
[
let group = nil
test entry!0 eq 5
ifso
[
Wss(cs, "(of group) ")
group = GetNumber(cs)
if group uge nGroups then Errors(cs, 0)
Wss(cs, " (is) ")
]
ifnot
[ Wss(cs, "(group name is) "); group = size Protection ]
let name = 0
if EnableCatch(cs) then [ FreePointer(lv name); EndCatch(cs) ]
name = GetGroupName(group)
if name ne 0 then [ DefaultPhrase(cs, name); FreePointer(lv name) ]
name = GetString(cs, 0, Wss, "Grapevine R-Name for group")
if enableGrapevineGroup & name>>String.length ne 0 then
[
// Read the Remark from Grapevine -- only groups have Remarks
let ec = nil
let remark = ReadRString(name, opReadRemark, lv ec)
test remark eq 0
ifnot SysFree(remark)
ifso if ec eq ecBadRName then
Wss(cs, "*n[Caution: no such name exists in Grapevine]")
]
if Confirm(cs) then
[
let ec = SetGroupName(group, name)
if ec ne 0 then IFSPrintError(dsp, ec)
]
SysFree(name)
endcase
]
case 7: // Default-Registry
[
let name = 0
if EnableCatch(cs) then [ FreePointer(lv name); EndCatch(cs) ]
DefaultPhrase(cs, lv sp>>SysParams.defaultRegistry)
name = GetString(cs, 0, Wss, "registry name")
if name>>String.length ge size SysParams.defaultRegistry/8 then
Errors(cs, 0)
if Confirm(cs) then
[
CopyString(lv sp>>SysParams.defaultRegistry, name)
InitCachedDIF()
]
SysFree(name)
endcase
]
// SysParamSubcommand (cont'd)
case 8: // Enable
case 9: // Disable
[
let enable = entry!0 eq 8
let which = SelectKeyword(cs, "Logins", "Time-server", "Name-server",
"Boot-server", "Press-printing", "Leaf-server", "CopyDisk-server",
"New-boot-files", "Password-logging", "Grapevine", "LookupFile-server")
if (000140B lshift which) ls 0 % Confirm(cs) then
[
switchon which into
[
case 1:
entFlag = enable; endcase
case 2:
sp>>SysParams.enableTimeServ = enable
EnableTimeServ(enable)
endcase
case 3:
sp>>SysParams.enableNameServ = enable
EnableNameServ(enable)
endcase
case 4:
sp>>SysParams.enableBootServ = enable
EnableBootServ(enable)
endcase
case 5:
sp>>SysParams.enablePress = enable
EnablePress(enable)
endcase
case 6:
sp>>SysParams.enableLeaf = enable
unless EnableLeaf(enable) do
Ws("*n[Done, but IFS must be restarted before this will take effect.")
endcase
case 7:
sp>>SysParams.enableCopyDisk = enable
EnableCopyDisk(enable)
endcase
case 8:
sp>>SysParams.noNewBootFiles = not enable
EnableBootServ(sp>>SysParams.enableBootServ, not enable)
endcase
case 9:
if enable then
[
Wss(cs, " (password) ")
let password = GetString(cs, 0, 0, 0, FalsePredicate)
let ok = Password(password, table
[
-1; 164633B; 6516B; 52503B; 27231B
160471B; 140737B; 123164B; 112341B
], false)
SysFree(password)
unless ok do Errors(cs, 0)
]
if Confirm(cs) then sp>>SysParams.enablePasswordLog = enable
endcase
// SysParamSubcommand (cont'd)
// Enable/Disable case
case 10:
[
let what = SelectKeyword(cs, "Authentication", "Groups")
if enable & defaultRegistry eq 0 then
AbortCmd(cs, "Please set a Default-Registry first")
if Confirm(cs) then
[
test what eq 1
ifso sp>>SysParams.enableGrapevineAuth = enable
ifnot sp>>SysParams.enableGrapevineGroup = enable
InitCachedDIF()
]
endcase
]
case 11:
sp>>SysParams.enableLookupFileServ = enable
EnableLookupFileServ(enable)
endcase
]
]
endcase
]
]
InstallSysParams(false)
]