// IfsTelnetPassword.bcpl -- Change Password command // Copyright Xerox Corporation 1979, 1981 // Last modified November 25, 1981 3:26 PM by Taft get "Ifs.decl" get "IfsRs.decl" get "IfsFiles.decl" external [ // outgoing procedures ExecChangePassword // incoming procedures EnableCatch; EndCatch; GetString; DefaultPhrase GetDIF; UpdateCachedDIF; Password FreePointer; Wss; Ws; Errors; IFSPrintError; FalsePredicate // incoming statics dsp; CtxRunning; enableGrapevineAuth ] //--------------------------------------------------------------------------- let ExecChangePassword(cs) be //--------------------------------------------------------------------------- // Change Password <directory> <old-password> <new-password> [ Wss(cs, " (of directory) ") let name, password, dif = 0, 0, 0 if EnableCatch(cs) then [ FreePointer(lv name, lv password, lv dif); EndCatch(cs) ] DefaultPhrase(cs, CtxRunning>>RSCtx.userInfo>>UserInfo.connName) name = GetString(cs, 0, Wss, "directory name") dif = GetDIF(name, true) // succeeds only for real local DIF if dif eq 0 then Errors(cs, 0) Wss(cs, " (old password) ") password = GetString(cs, 0, Wss, "password", FalsePredicate) unless Password(password, lv dif>>DIF.password, false) % CtxRunning>>RSCtx.userInfo>>UserInfo.capabilities.wheel do Errors(cs, 0) FreePointer(lv password) Wss(cs, " (new password) ") password = GetString(cs, 0, Wss, "password") if password>>String.length eq 0 then Errors(cs, 0) // disallow null string Password(password, lv dif>>DIF.password, true) UpdateCachedDIF(name, dif) if enableGrapevineAuth & dif>>DIF.validGrapevineRName then [ Ws("*n[Caution: Grapevine authentication is enabled. This change") Ws("*n may not be permanent until you change your Grapevine password") Ws("*n using the Maintain program.]") ] FreePointer(lv name, lv password, lv dif) ]