127 lines
3.3 KiB
Plaintext
127 lines
3.3 KiB
Plaintext
/*
|
|
* File......: NWUID.PRG
|
|
* Author....: Glenn Scott
|
|
* CIS ID....: 71620,1521
|
|
*
|
|
* This is an original work by Glenn Scott and is placed in the
|
|
* public domain.
|
|
*
|
|
* Modification history:
|
|
* ---------------------
|
|
*
|
|
* Rev 1.4 15 Aug 1991 23:04:10 GLENN
|
|
* Forest Belt proofread/edited/cleaned up doc
|
|
*
|
|
* Rev 1.3 14 Jun 1991 19:52:34 GLENN
|
|
* Minor edit to file header
|
|
*
|
|
* Rev 1.2 14 Jun 1991 04:31:30 GLENN
|
|
* Return value still needs to have nulls (chr(0)) removed. Put that back
|
|
* in.
|
|
*
|
|
* Rev 1.1 12 Jun 1991 02:25:22 GLENN
|
|
* Documentation correction and revision of ft_int86() call to account
|
|
* for Ted's new string passing conventions.
|
|
*
|
|
* Rev 1.0 01 Apr 1991 01:01:56 GLENN
|
|
* Nanforum Toolkit
|
|
*
|
|
*/
|
|
|
|
|
|
/* $DOC$
|
|
* $FUNCNAME$
|
|
* FT_NWUID()
|
|
* $CATEGORY$
|
|
* NetWare
|
|
* $ONELINER$
|
|
* Return the current Novell NetWare User ID
|
|
* $SYNTAX$
|
|
* FT_NWUID( [ <nConnection> ] ) -> cUid
|
|
* $ARGUMENTS$
|
|
* <nConnection> is a connection number, or logical station number,
|
|
* to find a userid for. Under NetWare 286, this number can be from
|
|
* 1 to 100. Under NetWare 386, 1-250. If not supplied, FT_NWUID()
|
|
* defaults to the current connection (i.e., the connection running
|
|
* the application).
|
|
* $RETURNS$
|
|
* A string containing the userid, or "login name."
|
|
* The maximum length of this string, as defined by current
|
|
* versions of Novell NetWare, is 48 characters.
|
|
* $DESCRIPTION$
|
|
* FT_NWUID() returns the current NetWare userid, or "login
|
|
* name." This is useful for implementing security or audit
|
|
* trail procedures within your programs.
|
|
*
|
|
* There is no simple way a user can "fool" this function into
|
|
* retrieving an incorrect value, provided a NetWare shell is loaded.
|
|
*
|
|
* This function requires FT_INT86() and FT_NWLSTAT()
|
|
*
|
|
* This function does NOT test for the existence of the NetWare shell.
|
|
* The behavior is undefined if no shell is loaded. You'll usually get
|
|
* garbage. This function has not been tested on NetWare 386.
|
|
* $EXAMPLES$
|
|
* QOut( "I am: " + FT_NWUID() )
|
|
*
|
|
* FOR x := 1 TO 100
|
|
* cUid := FT_NWUID( x )
|
|
* IF .NOT Empty( cUid )
|
|
* QOut( Str( x, 3 ) + Space(3) + cUid )
|
|
* ENDIF
|
|
* NEXT
|
|
* $END$
|
|
*/
|
|
|
|
#include "ftint86.ch"
|
|
|
|
#define DOS 33
|
|
#define NW_LOG 227
|
|
|
|
#ifdef FT_TEST
|
|
FUNCTION MAIN()
|
|
local x, cUid
|
|
QOut( "I am: [" + FT_NWUID() + "]" )
|
|
QOut( "---------------------" )
|
|
|
|
for x:= 1 to 100
|
|
cUid := FT_NWUID( x )
|
|
if .not. empty( cUid )
|
|
QOut( str( x, 3 ) + space(3) + cUid )
|
|
endif
|
|
next
|
|
|
|
return ( nil )
|
|
#endif
|
|
|
|
FUNCTION FT_NWUID( nConn )
|
|
LOCAL aRegs[ INT86_MAX_REGS ], ;
|
|
cReqPkt, ;
|
|
cRepPkt
|
|
|
|
nConn := IIF( nConn == nil, FT_NWLSTAT(), nConn )
|
|
|
|
// Set up request packet
|
|
|
|
cReqPkt := chr( 22 ) // Function 22: Get Connection Information
|
|
cReqPkt += chr( nConn )
|
|
cReqPkt := i2bin( len( cReqPkt ) ) + cReqPkt
|
|
|
|
// Set up reply packet
|
|
|
|
cRepPkt := space(63)
|
|
|
|
// Assign registers
|
|
|
|
aRegs[ AX ] := MAKEHI( NW_LOG )
|
|
aRegs[ DS ] := cReqPkt
|
|
aRegs[ SI ] := REG_DS
|
|
aRegs[ ES ] := cRepPkt
|
|
aRegs[ DI ] := REG_ES
|
|
|
|
FT_INT86( DOS, aRegs )
|
|
RETURN alltrim( strtran( substr( aRegs[ ES ], 9, 48 ), chr(0) ) )
|
|
|
|
|
|
|