devhawala / dodo

Xerox Network Services (XNS) implemented in Java
Other
13 stars 1 forks source link

[BUG] Spaces in Fileservice under User entries (inside CHS) not being treated properly #10

Open iblowmymind opened 2 years ago

iblowmymind commented 2 years ago

Hello, I've attempted to create a network with Dodo and I've noticed a peculiar bug where a file service defined in a user in clearinghouse with spaces in its name will not be able to be found.

The entry in my u~blw.properties is: fileservice = User Volume:Athena North:Chaos and I have set up my filing volume name in all the configuration files on this way, however Dodo will refuse to launch with:

The following machine names or IDs are undefined or invalid:
 -> name: undefined file service => user volume:athena north:chaos
Aborting Dodo startup ...
... please correct the configuration or define the above names in the machine ids file (null)

Renaming "User Volume" to "UserVolume" will fix the issue, so there isn't a problem with resolving domain/organisation entries with spaces in its filename.

Thanks!

iblowmymind commented 2 years ago

Also, I can't seem to get access to the file drawer in a networked Star OS 5.2 system. I can see and connect to other devices on the network, including Time and Authentication, but attempting to access a file drawer gives "serviceUnavailable". (Service down)

COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0007# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 10 version 4
COURIER CrProgram[ 10 , 4 ].dispatch() -- invoking proc Logon[ #0 ]
#proc Logon[ #0 ]# call
#proc Logon[ #0 ]# encodeAbort
#proc Logon[ #0 ]#   abortData: RECORD [
      problem: serviceUnavailable
      ]
COURIER CrProgram[ 10 , 4 ].dispatch() -- finished proc Logon[ #0 ]
#CR0007# CourierConnection - done call with transaction 0
iblowmymind commented 2 years ago

Creating a new volume from scratch did not help, so I'm assuming there's an issue with the unstable re-construction of Filing4.cr. However, according to your tests it did work before. Did the GVWIN mailing update somehow break it? Testing now.

devhawala commented 2 years ago

Hello,

well... blanks are unsupported in the filename of chs object names: works as implemented :-)

When building the name of an object from the filename in the chs database directory, all blanks are removed and the "domain:organization" part is added to form the full qualified name of the object (resp. the first alias for an user, as the full username parts are given properties inside the file itself). The dodo clearinghouse configuration files documentation says that the name part of the filename "should be a single word" without telling the consequences of embedding blanks in the name... it would have better be spelled must . ok, my fault.

So as the resulting object name is without blanks, all references to the name with the blanks will be invalid, as this name does effectively not exist.

The following additions worked for my own setup for using them with StarOS 5.0 and the current Dodo version (including logoff with desktop to fileservice, login again with retrieving the desktop, copying a document to the file service and back):

File: u~blw.properties:

# name components
lastname = mind
firstname = i blow my

# (plain!) password
password = secret

# file service for the desktop
fileservice = user-data

# mailbox service for this user
mailservice = postman

# additional aliases
aliases = iblowmymind

File: f~user-data.properties

# description of the service
description = User Data storage

# network address of the service
machineId = dodo-central

# authentication level, one of: 
# none   => credentials will be ignored (resp. credentials not used in the protocol)
# simple => simple credentials accepted only (default)
# strong => strong credentials accepted only
# both   => simple and strong credentials supported
authLevel = both

Addition to dodo.properties:

fileService.4.name = user-data:dev:hawala
fileService.4.volumePath = ./vol-user-data

Hope that helps, greetings Hans

iblowmymind commented 2 years ago

Oh, I probably missed that! The interesting thing is, though, is that I remember seeing blanks in file volume names in real scenarios, so I assumed it would probably work here as well.

However, the second comment I made in this post is not related to that, as I believe that that is an actual bug, not just me misunderstanding how clearinghouse services work :-) As I've tried with the default scenario given in dist.zip and I still could not access the filing volume from Star OS, as well as the fact that the "serviceUnavailable" bug occured even when there were no spaces in the clearinghouse filenames.

devhawala commented 2 years ago

Hello, i don't think it is a StarOS specific problem, as there is only one internal implementation of logon for all filing versions. So please try the same login scenario with a VP 2.0 Draco machine. My setup works with both client machines (StarOS/Darkstar and VP2.0/Draco), even allowing to use the same desktop stored on the new file service "user-data:dev:hawala" (retested a few minutes ago).

Having done a quick source code check, getting an "serviceUnavailable" at file service logon means what it tells: the file service to be logged on is either not opened or already closed (which can currently not happen). So it seems that StarOS tries to open a file service listed in the clearinghouse but not registered with the file services runtime.

Could you please start Dodo with the -dumpchs command line option and post the console log up to the point where "serviceUnavailable" error appears?

And yes: blanks are allowed in object names with real Xerox Network Servers/Services, but Dodo does currently not...

Greetings, Hans

iblowmymind commented 2 years ago

Here you go, as requested..


==
== machine-id pre-definitions:
==

Machines:
-- name: 'primary server' -> 0x1000BB101101
-- name: 'odyssey1' -> 0x0000AA012345
   - 'spp.resendDelay' => 75
   - 'authSkipTimestampChecks' => 1
   - 'spp.sendingTimeGap' => 75
Defaults:
- 'bootService.sppDataSendInterval' => 20
- 'spp.resendDelay' => 20
- 'authSkipTimestampChecks' => 1
- 'bootService.simpleDataSendInterval' => 40
- 'spp.resendPacketCount' => 2
- 'spp.handshakeResendCountdown' => 50
- 'spp.sendingTimeGap' => 5
- 'spp.handshakeMaxResends' => 5
- 'spp.handshakeSendackCountdown' => 4

==
== clearinghouse database dump:
==

## fqn -> entry map:
               Postman:Athena North:Chaos => ChsMailSvc[ pn='Postman' , description='Mail service' ]
               Neptune:Athena North:Chaos => ChsPrintSvc[ pn='Neptune' , description='Neptune printer' ]
               NetFile:Athena North:Chaos => ChsFileSvc[ pn='NetFile' , description='Network file system' ]
                 Guest:Athena North:Chaos => ChsUser[ pn='Guest' , description='Guest' ]
                   fs1:Athena North:Chaos => ChsFileSvc[ pn='fs1' , description='fs1' ]
              Odyssey1:Athena North:Chaos => ChsWorkstation[ pn='Odyssey1' , description='Darkstar Star OS 5.2' ]
         Clearinghouse:Athena North:Chaos => ChsClearinghouseSvc[ pn='Clearinghouse' , description='Clearinghouse' ]
                 staff:Athena North:Chaos => ChsUserGroup[ pn='staff' , description='Staff users' ]
      blw:Athena North:Chaos => ChsUser[ pn='blw' , description='blw' ]

## any -> fqn map
                 guest:athena north:chaos => Guest:Athena North:Chaos
                   blw:athena north:chaos => blw:Athena North:Chaos
                 staff:athena north:chaos => staff:Athena North:Chaos
               netfile:athena north:chaos => NetFile:Athena North:Chaos
               postman:athena north:chaos => Postman:Athena North:Chaos
              odyssey1:athena north:chaos => Odyssey1:Athena North:Chaos
               neptune:athena north:chaos => Neptune:Athena North:Chaos
                   fs1:athena north:chaos => fs1:Athena North:Chaos
      blw:athena north:chaos => blw:Athena North:Chaos
         clearinghouse:athena north:chaos => Clearinghouse:Athena North:Chaos

## entries:

ChsMailSvc
  name         : Postman:Athena North:Chaos
  cfgFilename  : m~Postman.properties
  objNameCfg   : Postman
  entryType    : 10004
  simplePwHash : 36746
  strongPwHash : 0x 57 BA 83 01 FE 61 EC 68
  description  : Mail service
  authLvlSimple: true
  authLvlStrong: true
  machineId    : 1000BB101101
  item properties:
      10004 : 0x 000C 4D61 696C 2073 6572 7669 6365
          4 : 0x 0001 0000 041A 1000 BB10 1101 0000
          8 : 0x 0001 0001

ChsPrintSvc
  name         : Neptune:Athena North:Chaos
  cfgFilename  : p~Neptune.properties
  objNameCfg   : Neptune
  entryType    : 10001
  simplePwHash : 61322
  strongPwHash : 0x 76 C2 5D C2 BC DA C4 6E
  description  : Neptune printer
  authLvlSimple: false
  authLvlStrong: false
  machineId    : 1000BB101101
  item properties:
      10001 : 0x 000F 4E65 7074 756E 6520 7072 696E 7465 7200
          4 : 0x 0001 0000 041A 1000 BB10 1101 0000
          8 : 0x 0000 0000

ChsFileSvc
  name         : NetFile:Athena North:Chaos
  cfgFilename  : f~NetFile.properties
  objNameCfg   : NetFile
  entryType    : 10000
  simplePwHash : 51384
  strongPwHash : 0x 91 4C AE 38 2C 73 7C 3B
  description  : Network file system
  authLvlSimple: true
  authLvlStrong: true
  machineId    : 1000BB101101
  item properties:
      10000 : 0x 0013 4E65 7477 6F72 6B20 6669 6C65 2073 7973 7465 6D00
          4 : 0x 0001 0000 041A 1000 BB10 1101 0000
          8 : 0x 0001 0001

ChsUser
  name         : Guest:Athena North:Chaos
  cfgFilename  : u~Guest.properties
  objNameCfg   : Guest
  entryType    : 10003
  simplePwHash : 51039
  strongPwHash : 0x BA 29 C7 AE D9 62 FB 38
  username     : Guest
  lastnameIndex: 0
  mailservice  : Postman:Athena North:Chaos
  fileservice  : netfile:athena north:chaos
  item properties:
      20000 : 0x 0000 0005 4368 616F 7300 000C 4174 6865 6E61 204E 6F72 7468 0007 4E65 7446 696C 6500
      10003 : 0x 0005 4775 6573 7400
         31 : 0x E43F C652 0001 0005 4368 616F 7300 000C 4174 6865 6E61 204E 6F72 7468 0007 506F 7374 6D61 6E00

ChsFileSvc
  name         : fs1:Athena North:Chaos
  cfgFilename  : f~fs1.properties
  objNameCfg   : fs1
  entryType    : 10000
  simplePwHash : 26892
  strongPwHash : 0x 7C C2 BF 6E 15 16 64 1F
  description  : fs1
  authLvlSimple: true
  authLvlStrong: true
  machineId    : 1000BB101101
  item properties:
      10000 : 0x 0003 6673 3100
          4 : 0x 0001 0000 041A 1000 BB10 1101 0000
          8 : 0x 0001 0001

ChsWorkstation
  name         : Odyssey1:Athena North:Chaos
  cfgFilename  : ws~Odyssey1.properties
  objNameCfg   : Odyssey1
  entryType    : 10005
  description  : Darkstar Star OS 5.2
  machineId    : 0000AA012345
  item properties:
          4 : 0x 0001 0000 041A 0000 AA01 2345 0000
      10005 : 0x 0014 4461 726B 7374 6172 2053 7461 7220 4F53 2035 2E32

ChsClearinghouseSvc
  name         : Clearinghouse:Athena North:Chaos
  cfgFilename  : c~Clearinghouse.properties
  objNameCfg   : Clearinghouse
  entryType    : 10021
  simplePwHash : 45171
  strongPwHash : 0x F7 83 80 DC 02 2A F2 20
  description  : Clearinghouse
  authLvlSimple: true
  authLvlStrong: true
  machineId    : 1000BB101101
  mailservice  : postman:athena north:chaos
  item properties:
          4 : 0x 0001 0000 041A 1000 BB10 1101 0000
      10021 : 0x 000D 436C 6561 7269 6E67 686F 7573 6500
          8 : 0x 0001 0001
         31 : 0x E43F A9F5 0001 0005 4368 616F 7300 000C 4174 6865 6E61 204E 6F72 7468 0007 506F 7374 6D61 6E00

ChsUserGroup
  name         : staff:Athena North:Chaos
  cfgFilename  : ug~staff.properties
  objNameCfg   : staff
  entryType    : 10022
  description  : Staff users
  members      :
      blw:Athena North:Chaos
  ---------------------------------- end members
  item properties:
      10022 : 0x 000B 5374 6166 6620 7573 6572 7300
  group properties:
          3 : blw:Athena North:Chaos

ChsUser
  name         : blw:Athena North:Chaos
  cfgFilename  : u~blw.properties
  objNameCfg   : blw
  entryType    : 10003
  simplePwHash : 20435
  strongPwHash : 0x C8 F4 01 76 19 10 C8 67
  username     : blw
  lastnameIndex: 7
  mailservice  : Postman:Athena North:Chaos
  fileservice  : netfile:athena north:chaos
  aliases      :
      blw:athena north:chaos
  ---------------------------------- end aliases
  item properties:
      20000 : 0x 0007 0005 4368 616F 7300 000C 4174 6865 6E61 204E 6F72 7468 0007 4E65 7446 696C 6500
      10003 : 0x 0010 4461 6768 616E 2054 696E 617A 7465 7065
         31 : 0x E43F C64E 0001 0005 4368 616F 7300 000C 4174 6865 6E61 204E 6F72 7468 0007 506F 7374 6D61 6E00

##########

==
== end of machine-id and clearinghouse database dumps
==

#----#     clientBindToSocket( sockNo = 16383, listener = dev.hawala.xns.network.NetMachine$PexRequestHandler@2b80d80f ): socket bound
#----#     clientBindToSocket( sockNo = 16383, listener = dev.hawala.xns.network.NetMachine$PexRequestHandler@2b80d80f ): listener started
#----# opening connection to hub
#----#     clientBindToSocket( sockNo = 2, listener = dev.hawala.xns.level4.echo.EchoResponder@35851384 ): socket bound
#----#     clientBindToSocket( sockNo = 2, listener = dev.hawala.xns.level4.echo.EchoResponder@35851384 ): listener started
#----#     clientBindToSocket( sockNo = 8, listener = dev.hawala.xns.network.NetMachine$PexServer@16c0663d ): socket bound
#----#     PexServer.start( localEndpoint = [1050-10.00.BB.10.11.01:8] , sender = ... )
#----#     clientBindToSocket( sockNo = 8, listener = dev.hawala.xns.network.NetMachine$PexServer@16c0663d ): listener started
#----#     clientBindToSocket( sockNo = 1, listener = dev.hawala.xns.level4.rip.RipResponder@66d33a ): socket bound
#----#     clientBindToSocket( sockNo = 1, listener = dev.hawala.xns.level4.rip.RipResponder@66d33a ): listener started
#----#     clientBindToSocket( sockNo = 20, listener = dev.hawala.xns.network.NetMachine$PexServer@51efea79 ): socket bound
#----#     PexServer.start( localEndpoint = [1050-10.00.BB.10.11.01:20] , sender = ... )
#----#     clientBindToSocket( sockNo = 20, listener = dev.hawala.xns.network.NetMachine$PexServer@51efea79 ): listener started
#----#     clientBindToSocket( sockNo = 21, listener = dev.hawala.xns.network.NetMachine$PexServer@4667ae56 ): socket bound
#----#     PexServer.start( localEndpoint = [1050-10.00.BB.10.11.01:21] , sender = ... )
#----#     clientBindToSocket( sockNo = 21, listener = dev.hawala.xns.network.NetMachine$PexServer@4667ae56 ): listener started
Starting mail service 'Postman:Athena North:Chaos' (mailboxes volume directory: ./vol-mailservice)
Opening volume 'vol-mailservice' from directory: D:\Emulators\Mesa\dodo-8010-star52\.\vol-mailservice
loading metadata from: 000001809F069272.full-meta
Volume 'vol-mailservice' opened
+++ ChsDatabase.findObjectNames( pattern = '.*' , reqProperty = 10003 )
+++ ChsDatabase.findObjectNames() -> found 'Guest'
+++ ChsDatabase.findObjectNames() -> found 'blw'
Mail: user 'blw:Athena North:Chaos' : currently 0 mail(s) in mailbox
Mail: user 'Guest:Athena North:Chaos' : currently 0 mail(s) in mailbox
Mail service 'Postman:Athena North:Chaos' started
#----#     clientBindToSocket( sockNo = 26, listener = dev.hawala.xns.network.NetMachine$PexServer@11758f2a ): socket bound
#----#     PexServer.start( localEndpoint = [1050-10.00.BB.10.11.01:26] , sender = ... )
#----#     clientBindToSocket( sockNo = 26, listener = dev.hawala.xns.network.NetMachine$PexServer@11758f2a ): listener started
####### Printing3, supported paperSizes: a4, usLetter
####### Printing3, using ip-to-ps proc: ./prt-neptune/res/IPPROC.PS
####### Printing3, patched ip-to-ps proc for Xerox PS font usage
####### Printing3, using ps post-processor: ./prt-neptune/res/postprocess-ps.cmd
Starting file service 'netfile:athena north:chaos' (volume directory: ./vol-netfile)
Opening volume 'vol-netfile' from directory: D:\Emulators\Mesa\dodo-8010-star52\.\vol-netfile
loading metadata from: 000001809F0692FD.full-meta
Volume 'vol-netfile' opened
File service 'netfile:athena north:chaos' started
Starting file service 'fs1:athena north:chaos' (volume directory: ./vol-fs1)
Opening volume 'vol-fs1' from directory: D:\Emulators\Mesa\dodo-8010-star52\.\vol-fs1
loading metadata from: 000001809F06931C.full-meta
Volume 'vol-fs1' opened
File service 'fs1:athena north:chaos' started
#----#     clientBindToSocket( sockNo = 5, listener = dev.hawala.xns.network.SppServerListener@1ddf84b8 ): socket bound
#----#     clientBindToSocket( sockNo = 5, listener = dev.hawala.xns.network.SppServerListener@1ddf84b8 ): listener started
#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=0
#proc #0# call
#proc #0# encodeReturn
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=0
#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=0
#proc #0# call
#proc #0# encodeReturn
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=0
COURIER CourierServer - new connection opened, starting new CourierServerConnection
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
#CR0000# CourierConnection - needVersions: low = 2 , high = 3
#CR0000# CourierConnection - sendVersions: low = high = 3
COURIER CourierConnection.processSingleCall() - begin
#CR0000# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #1
#proc #1# call
#CHS3# Clearinghouse3.listDomainServed() :: start
#CHS3# Clearinghouse3.listDomainsServed() :: sending data via bulk data transfer
#CHS3# Clearinghouse3.listDomainServed() :: end
#proc #1# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #1
#CR0000# CourierConnection - done call with transaction 0

COURIER CourierConnection.processSingleCall() - waiting for ingoing call
#CR0000# CourierServerConnection: processSingleCall() failed, closing CourierConnection (null)
#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=4
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=4
COURIER CourierServer - new connection opened, starting new CourierServerConnection
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
#CR0001# CourierConnection - needVersions: low = 2 , high = 3
#CR0001# CourierConnection - sendVersions: low = high = 3
COURIER CourierConnection.processSingleCall() - begin
#CR0001# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #4
#proc #4# call
#CHS3# Clearinghouse3Impl.LookupObject() for name: blw:Athena North:Chaos
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.LookupObject(), results.distinguishedObject: blw:Athena North:Chaos
#proc #4# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #4
#CR0001# CourierConnection - done call with transaction 0

COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0001# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 14 version 2
COURIER CrProgram[ 14 , 2 ].dispatch() -- invoking proc #2
#proc #2# call
#Auth2# Authentication2Impl.checkSimpleCredentials() -- invoking AuthChsCommon.simpleCheckPasswordForSimpleCredentials()
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#Auth2# Authentication2Impl.checkSimpleCredentials() -- result.ok = true
#proc #2# encodeReturn
COURIER CrProgram[ 14 , 2 ].dispatch() -- finished proc #2
#CR0001# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=4
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=4
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0001# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #4
#proc #4# call
#CHS3# Clearinghouse3Impl.LookupObject() for name: blw:Athena North:Chaos
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.LookupObject(), results.distinguishedObject: blw:Athena North:Chaos
#proc #4# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #4
#CR0001# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=16
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=16
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0001# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #16
#proc #16# call
#CHS3# Clearinghouse3Impl.retrieveItem( pattern = 'blw:Athena North:Chaos' , property = 20000 )
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.retrieveItem(): entry and property found
#proc #16# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #16
#CR0001# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=16
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=16
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0001# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #16
#proc #16# call
#CHS3# Clearinghouse3Impl.retrieveItem( pattern = 'blw:Athena North:Chaos' , property = 10003 )
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.retrieveItem(): entry and property found
#proc #16# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #16
#CR0001# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=14 , version=2 , procedure=0
#BfsAth# BfsAuthenticationResponder.processRequest() - begin
#proc #0# call
#proc #0# encodeReturn
#BfsAth# BfsAuthenticationResponder.processRequest() - done
#BfsX# Bfs call done for transaction=0 , program=14 , version=2 , procedure=0
#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=14 , version=2 , procedure=0
#BfsAth# BfsAuthenticationResponder.processRequest() - begin
#proc #0# call
#proc #0# encodeReturn
#BfsAth# BfsAuthenticationResponder.processRequest() - done
#BfsX# Bfs call done for transaction=0 , program=14 , version=2 , procedure=0
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
#CR0001# CourierServerConnection: processSingleCall() failed, closing CourierConnection (null)
#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=16
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=16
COURIER CourierServer - new connection opened, starting new CourierServerConnection
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
#CR0002# CourierConnection - needVersions: low = 2 , high = 3
#CR0002# CourierConnection - sendVersions: low = high = 3
COURIER CourierConnection.processSingleCall() - begin
#CR0002# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #16
#proc #16# call
#CHS3# Clearinghouse3Impl.retrieveItem( pattern = 'blw:Athena North:Chaos' , property = 31 )
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.retrieveItem(): entry and property found
#proc #16# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #16
#CR0002# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=16
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=16
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0002# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #16
#proc #16# call
#CHS3# Clearinghouse3Impl.retrieveItem( pattern = 'Postman:Athena North:Chaos' , property = 4 )
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.retrieveItem(): entry and property found
#proc #16# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #16
#CR0002# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=18 , version=1 , procedure=7
#BfsX# Bfs call done for transaction=0 , program=18 , version=1 , procedure=7
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0002# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 18 version 1
COURIER CrProgram[ 18 , 1 ].dispatch() -- invoking proc InbasketPoll[ #7 ]
#proc InbasketPoll[ #7 ]# call
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
## Inbasket.poll for mailbox: blw:Athena North:Chaos

#proc InbasketPoll[ #7 ]# encodeReturn
COURIER CrProgram[ 18 , 1 ].dispatch() -- finished proc InbasketPoll[ #7 ]
#CR0002# CourierConnection - done call with transaction 0

COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0002# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #7
#proc #7# call
#CHS3# Clearinghouse3.listObjects( pattern = '*:Athena North:Chaos' , property = 10000)
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
+++ ChsDatabase.findObjectNames( pattern = '.*' , reqProperty = 10000 )
+++ ChsDatabase.findObjectNames() -> found 'NetFile'
+++ ChsDatabase.findObjectNames() -> found 'fs1'
#CHS3# Clearinghouse3.listObjects() :: sending data via bulk data transfer
#CHS3# Clearinghouse3.listObjects() :: end
#proc #7# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #7
#CR0002# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=16
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=16
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0002# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #16
#proc #16# call
#CHS3# Clearinghouse3Impl.retrieveItem( pattern = 'NetFile:Athena North:Chaos' , property = 4 )
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.retrieveItem(): entry and property found
#proc #16# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #16
#CR0002# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=16
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=16
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0002# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #16
#proc #16# call
#CHS3# Clearinghouse3Impl.retrieveItem( pattern = 'NetFile:Athena North:Chaos' , property = 10000 )
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.retrieveItem(): entry and property found
#proc #16# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #16
#CR0002# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=16
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=16
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0002# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #16
#proc #16# call
#CHS3# Clearinghouse3Impl.retrieveItem( pattern = 'fs1:Athena North:Chaos' , property = 4 )
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.retrieveItem(): entry and property found
#proc #16# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #16
#CR0002# CourierConnection - done call with transaction 0

#BfsX# Bfs with courier protocol-version[3,3] , transaction=0 , program=2 , version=3 , procedure=16
#BfsChs# processRequest() -> rejecting with CallError[useCourier]
#BfsX# Bfs call done for transaction=0 , program=2 , version=3 , procedure=16
COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0002# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 2 version 3
COURIER CrProgram[ 2 , 3 ].dispatch() -- invoking proc #16
#proc #16# call
#CHS3# Clearinghouse3Impl.retrieveItem( pattern = 'fs1:Athena North:Chaos' , property = 10000 )
#AuthChs# AuthChsCommon.simpleCheckPasswordForSimpleCredentials(), credentials.value: RECORD [
    organization: "Chaos"
    domain: "Athena North"
    object: "blw"
    ]
*** simpleCheckPasswordForSimpleCredentials() for 'blw:Athena North:Chaos' :: verifierHash = 20435 , userHash = 20435
#CHS3# Clearinghouse3Impl.retrieveItem(): entry and property found
#proc #16# encodeReturn
COURIER CrProgram[ 2 , 3 ].dispatch() -- finished proc #16
#CR0002# CourierConnection - done call with transaction 0

COURIER CourierConnection.processSingleCall() - waiting for ingoing call
COURIER CourierConnection.processSingleCall() - begin
#CR0002# CourierConnection - dispatching call with transaction 0
COURIER CourierRegistry: dispatching to program 10 version 4
COURIER CrProgram[ 10 , 4 ].dispatch() -- invoking proc Logon[ #0 ]
#proc Logon[ #0 ]# call
#proc Logon[ #0 ]# encodeAbort
#proc Logon[ #0 ]#   abortData: RECORD [
      problem: serviceUnavailable
      ]
COURIER CrProgram[ 10 , 4 ].dispatch() -- finished proc Logon[ #0 ]
#CR0002# CourierConnection - done call with transaction 0

If it matters at all, I used the 0-74 & ba found in XCU disk headers for factoring.

The idea of using files in a filesystem to store clearinghouse data seems counter-intuitive to me, wouldn't it be easier to use a local database file (like SQLite3) and include a GUI+CLI tool for editing CHS entries? (Dodo would not start in the absence of the database file and print an error message instructing how to make one, etc) This way, we could even implement stuff like changing parameters on-the-fly, which would even allow us to make Remote System Administration Services (with a same or similar command-line syntax) inside Star/VP/GV work.

I've tested VP 2.0.5 in Draco and filing does not work there either, same error.

devhawala commented 2 years ago

ok, i think i found the bug: the file service lookup is made with a casesensitive match against the file services registered with lowercased names, so the upper case letters in the full qualified name (fs1:Athena North:Chaos) prevent the correct lookup of the file service at logon.
Congratulations, you seem to be the first to use mixed-case in the Domain/Organization names, maybe the first at all to have modified the dev:hawala defaults).

I am preparing a new version of Dodo having some minor additions beyond the fix to the bug you found (minor bugfix to the new mail service, pre-configured boot service allowing to start an installation from floppy), i must still document all that and retest before uploading it to github.

In the meantime, you should be able to use your setup by using the lower-case domain/organization name variants (athena north:chaos). Not sure however if the network-related desktop items will still work after switching back to mixed case names when using the bugfixed version...

Greetings, Hans

iblowmymind commented 2 years ago

Hello, thanks for the bugfix! I just wanted to have a more real-like XNS experience I suppose, as Xerox internally used names like "OSBU North" and "NetKSPA" for their domains, and I wanted to conform with that standard. (It's a bit like using camelCase, really!)

masinter commented 2 years ago

Did XNS support 16-bit (XCCS) characters? In the Medley Interlisp project, there was some effort to develop more complete XCCS <==> Unicode. Would that be helpful?

devhawala commented 2 years ago

i'm not sure is 16-bit characters were supported everywhere: the courier protocols filing, printing and mailing surely do, i suppose the clearinghouse did it also for object names like service names and domain / organization names (less sure).

Dodo has a symmetric mapping from Xerox to "escaped" unicode texts (escaping anything not ascii if i remember well my own implementation), allowing to send back to clients e.g. japanese filenames for files stored on a fileserver.

Seeing that Medley/Maiko has a directory with mapping files for almost all Xerox characters to unicode, i am thinking about switching my implementation in Dodo to a complete symmetric mapping through (generated) 16x16-bit tables, allowing to store arbitrary (e.g.) filenames on the Dodo server side. This would however be rather useless, as these texts are seldom seen outside the server, so it's not sure if it's worth the effort...

Greetings, Hans

iblowmymind commented 2 years ago

Hello, I’m assuming that although supported and used in filenames etc., these were probably seldom used (or not used at all) in CHS objects, as the keyboard for Logon will be automatically set to ASCII in StarOS/VP/GV, even if the workstation is a JStar or a Fuji Xerox version of GVWin (FXIS GVWin 2.3 even has this behaviour, although the UI is in Japanese, usernames, passwords, domain names etc. are in ASCII and the Logon keyboard is auto-set to English on a Japanese keyboard.

devhawala commented 2 years ago

Hi,

the new version is uploaded, allowing to use mixed-case object, domain and organization names, as well as optionally blanks in object names created from the clearinghouse r/o database files.

There is also a sample boot service configuration allowing to net-boot a Draco machine and then install from floppy.

Greetings, Hans

iblowmymind commented 2 years ago

Thank you! Have you checked the comments under the issue i created on https://github.com/devhawala/dwarf?

iblowmymind commented 2 years ago

Filing works!