-- Copyright (C) 1984, 1985 by Xerox Corporation. All rights reserved.
-- ProfileNoDisk.mesa, HGM, 26-Jul-85 2:01:22
DIRECTORY
Auth USING [Flavor, IdentityHandle, MakeIdentity],
Heap USING [systemZone],
NSName USING [NameRecord],
NSString USING [String, StringFromMesaString],
Profile USING [Qualification],
String USING [AppendChar, AppendString, AppendSubString, Length, SubStringDescriptor];
ProfileNoDisk: PROGRAM
IMPORTS Auth, Heap, NSString, String
EXPORTS Profile =
BEGIN
userName: STRING = "Foo";
userPassword: STRING = NIL;
defaultDomain: STRING = "PARC";
defaultOrganization: STRING = "Xerox";
defaultRegistry: STRING = "PA";
simple: Auth.IdentityHandle ← NIL;
strong: Auth.IdentityHandle ← NIL;
z: UNCOUNTED ZONE = Heap.systemZone;
S: PROC [s: LONG STRING] RETURNS [NSString.String] = INLINE {
RETURN[NSString.StringFromMesaString[s]]};
GetID: PUBLIC PROC [flavor: Auth.Flavor, proc: PROC [id: Auth.IdentityHandle]] =
BEGIN
SELECT flavor FROM
simple => proc[simple];
strong => proc[strong];
ENDCASE => ERROR;
END;
GetUser: PUBLIC PROC [
proc: PROC [name, password: LONG STRING], qualification: Profile.Qualification ← none] =
BEGIN
proc[userName, userPassword];
END;
GetDefaultDomain: PUBLIC PROC [proc: PROC [LONG STRING]] = {proc[defaultDomain]};
GetDefaultOrganization: PUBLIC PROC [proc: PROC [LONG STRING]] = {proc[defaultOrganization]};
Qualify: PUBLIC PROC [
token, newToken: LONG STRING, qualification: Profile.Qualification] = {
namePart: CARDINAL ← String.Length[token];
currentQual: Profile.Qualification ← none;
octalAddress: BOOLEAN ← TRUE; -- only '0..'7 and '# allowed
ss: String.SubStringDescriptor;
chChar: CHARACTER = ':;
regChar: CHARACTER = '.;
IF String.Length[token] = 0 THEN RETURN;
FOR i: CARDINAL IN [0..token.length) DO
SELECT token[i] FROM
regChar => {namePart ← i; currentQual ← registry}; -- look for last dot
chChar => {namePart ← i; currentQual ← clearinghouse; EXIT}; -- first :
IN['0..'7], '# => NULL;
ENDCASE => octalAddress ← FALSE;
ENDLOOP;
IF currentQual = qualification OR octalAddress THEN {
String.AppendString[newToken, token]; RETURN};
ss ← [base: token, offset: 0, length: namePart];
String.AppendSubString[newToken, @ss];
SELECT qualification FROM
none => NULL;
registry => {
String.AppendChar[newToken, regChar];
String.AppendString[newToken, defaultRegistry]; };
clearinghouse => {
String.AppendChar[newToken, chChar];
String.AppendString[newToken, defaultOrganization];
String.AppendChar[newToken, chChar];
String.AppendString[newToken, defaultDomain]; };
ENDCASE};
Init: PROC = {
myName: NSName.NameRecord ← [
org: S[defaultOrganization],
domain: S[defaultDomain],
local: S[userName]];
strong ← Auth.MakeIdentity[
myName: @myName, password: S[userPassword],
z: z, style: strong, dontCheck: TRUE];
simple ← Auth.MakeIdentity[
myName: @myName, password: S[userPassword],
z: z, style: simple, dontCheck: TRUE];
};
Init[];
END.