[Back to NETWORK SWAG index] [Back to Main SWAG index] [Original]

    {
    >I need a way to get the current user name from the netware shell.
    >For instance, if I'm logged into server MYSERVER as user SUPERVISOR,
    >I need some way to get 'supervisor' as the user name.  (Kind of like
    >WHOAMI would return: You are user SUPERVISOR on server MYSERVER)

    In our library of routines we've developed (and continue to do so) lots of
    routines for Novell Netware.  The following routines (developed by Peter Ogden
    is to and myself) are to get the current user and I hope I've removed all our
    inter-library references so that it's of use to you:
    }

    type
      String48 = string [48];

    const
      NetError : Integer = 0;

    function GetConnNo : Byte; assembler;

    asm
            MOV  AX, $DC00
            INT  $21
    end;

    procedure GetConnInfo (ConnectionNum : Byte; var ObjType : Word;
                                var ObjName : String48);

    var
      ReqBuf :     record
                          Size       : Word;
                          FixedValue : Byte;
                          ConnNumber : Byte;
                     end;

      ReplyBuf :     record
                          Size       : Word;
                          ID         : LongInt;
                          ObType     : Word;
                          Name       : array [1..48] of Byte;
                          Reserved   : Byte;
                          LoginTime  : array [1..7] of Byte;
                     end;

      Regs        : Registers;
      Counter     : Integer;
      NameString  : String;

    begin
      with ReqBuf do
      begin
           Size := SizeOf (ReqBuf) - 2;
           FixedValue := $16;
           ConnNumber := ConnectionNum;
      end;

      ReplyBuf.Size := SizeOf (ReplyBuf) - 2;
      with Regs do
      begin
           AH := $E3;
           DS := Seg (ReqBuf);
           SI := Ofs (ReqBuf);
           ES := Seg (ReplyBuf);
           DI := Ofs (ReplyBuf);
           MsDos (Regs);

           NetError := AL;
           if NetError <> 0 then
           begin
                ObjType := 0;
                ObjName := '';
           end
           else
                with ReplyBuf do
                if ID <> 0 then
                begin
                     Counter := 1;
                     NameString := '';
                     while (Name[Counter] <> 0) do
                     begin
                          NameString := NameString + Chr (Name [Counter]);
                          Inc (Counter);
                     end;
                     ObjName := NameString;
                     ObjType := Swap (ObType);
                end
                else
                begin
                     ObType := 0;
                     ObjName := '';
                end;
      end;
    end;

    function GetUserID : String48;

    var
      CN : Byte;
      UserName : String48;
      ObjType : Word;

    begin
      CN := GetConnNo;
      GetConnInfo (CN, ObjType, UserName);
      GetUserID := UserName;
    end;

    I use this with Novell Netware 386 v3.11, as that is the Network that most of
    our Commercial Applications have been developed for.  I know speed ups are
    possible especially in processing the ASCIIZ, but hey we only call this routine
    once in an application so it's not high on our priorities for optimisation.

[Back to NETWORK SWAG index] [Back to Main SWAG index] [Original]