WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Novell Netware
plus
plus
plus
plus
plus
plus
plus
plus
plus
plus

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

NetWareX_UDF_Library

Keywords: 	 NetWareX_UDF_Library

; NetWareX_UDF_Library.wbt
; 32-bit
;
; This is a WinBatch script file intended to be included via "#include" in another
; script.  This file contains UDFs defined to provide additional functionality for
; the NetWareX extender.
;
; The account under which this is run must have appropriate rights in NDS to read
; the "App:FS Rights Path" and "App:FS Rights Volume" attributes on the specified
; application object.
;
;
; This UDF library requires that the NetWareX extender "WWNWX34I.DLL" and the WILX
; extender "WILX34I.DLL" be loaded in the script that includes this library.  The
; script must have loaded these extenders prior to the "#include" command that 
; includes this library or else an error will occur.
;
;
; UDFs defined in this library:
;
; nwGetAppFileRightsUDF(AppObjSpec,Flags)
;
;   Parameters:
;
;     AppObjSpec = specification of an application object in NDS
;     Flags = bit mask of flags that control how this function operates
;
;       If bit #0 [value = 1 when enabled] is enabled then directory trustee
;       assignments will be returned.
;
;       If bit #1 [value = 2 when enabled] is enabled then file trustee
;       assignments will be returned.
;
;       If neither bit #0 not bit #1 are enabled, or if both of those bits
;       are enabled, then both directory and file trustee assignments will
;       be returned.
;
;   Returns:
;
;     A value delimited list of field delimited records will be returned.  The
;     value delimiter will default to @TAB, unless the NetWareX extender's
;     value delimiter has been changed to some other value.  Likewise, the field
;     delimiter used within a record will default to the pipe "|" character unless
;     the NetWareX extender's field delimiter has been changed to some other value.
;
;     The following record layout will exist:
;
;     |||
;
;     Where the following conditions apply:
;
;        is the complete volume spec & path information in UNC format.
;
;        will be either "D" [for directories] or "F" [for files].
;
;        will be the actual integer value [decimal] for the
;       trustee rights that have been assigned.
;
;        will be a character string containing one letter
;       [in upper case] for each particular trustee right that is enabled.
;
;       Refer to the help text in the NetWareX extender's help file for the functions
;       nwGetDirInfo() and nwGetFileInfo() for a full description of the trustee
;       rights bit mask values and their corresponding mnemonic codes.
;
;
;
; Minor Error codes used by this UDF library:
;
; 7000 = 'AppObjSpec is not an application object'
; 7001 = 'Unable to get object class of AppObjSpec'
; 7002 = 'Cannot get "App:FS Rights Path" value for AppObjSpec'
; 7003 = 'Cannot get "App:FS Rights Volume" value for AppObjSpec'
; 7004 = 'Cannot get tree name for AppObjSpec'
; 7005 = 'A required extender is not loaded'
;
;


; Get the list of loaded extenders...

TempUDF_LoadedExtenders = IntControl(77,42,0,0,0)

for TempUDF_I = 1 to ItemCount(TempUDF_LoadedExtenders,@TAB)
  TempUDF_Item = ItemExtract(TempUDF_I,TempUDF_LoadedExtenders,@TAB)
  TempUDF_Item = StrUpper(StrCat(FileRoot(TempUDF_Item),'.',FileExtension(TempUDF_Item)))
  TempUDF_LoadedExtenders = ItemReplace(TempUDF_Item,TempUDF_I,TempUDF_LoadedExtenders,@TAB)
next


; Add in a required extender [if it is not already loaded]

if (ItemLocate('WWNWX34I.DLL',TempUDF_LoadedExtenders,@TAB) == 0)
  IntControl(79,-1,7005,'A required extender is not loaded',0)
endif


; Add in a required extender [if it is not already loaded]

if (ItemLocate('WILX34I.DLL',TempUDF_LoadedExtenders,@TAB) == 0)
  IntControl(79,-1,7005,'A required extender is not loaded',0)
endif


; Done with some temporary variables that we don't want to leave hanging around in the main script...

DropWild('TempUDF_*')


#DefineFunction nwVersionUDF(Flags)

return 1

#EndFunction



#DefineFunction nwGetAppFileRightsUDF(AppObjSpec,Flags)


; Parse the flags...

if (Flags & 1)
  bGetDirs = @TRUE
else
  bGetDirs = @FALSE
endif

if (Flags & 2)
  bGetFiles = @TRUE
else
  bGetFiles = @FALSE
endif

if (!(bGetDirs || bGetFiles))
  bGetDirs = @TRUE
  bGetFiles = @TRUE
endif


; Determine if the object is an application object...

ErrorMode(@OFF)
ObjectClass = nwGetObjInfo(AppObjSpec,1)
RC = LastError()
ErrorMode(@CANCEL)

if (RC)
  IntControl(79,-1,7001,'Unable to get object class of AppObjSpec',0)
endif

if (ObjectClass != 'App:Application')
  IntControl(79,-1,7000,'AppObjSpec is not an application object',0)
endif


; Get the NDS tree name associated with AppObjSpec...

ErrorMode(@OFF)
TreeName = nwNameConvert(AppObjSpec,8)
RC = LastError()
ErrorMode(@CANCEL)

if (RC)
  IntControl(79,-1,7004,'Cannot get tree name for AppObjSpec',0)
endif


; Get the delimiters that are in use...

ValueDelim = nwGetOptions(8)
FieldDelim = nwGetOptions(9)


; Temporarily modify some NetWareX extender options to meet our needs...

bSaveBinStringCvt = nwGetOptions(11)

nwSetOptions(11,@FALSE)


; Get the app object's "App:FS Rights Path" attribute value...

ErrorMode(@OFF)
AppFSRightsPath = nwGetObjValue(AppObjSpec,'App:FS Rights Path',0,0,1)
RC = LastError()
ErrorMode(@CANCEL)

if (RC)
  nwSetOptions(11,bSaveBinStringCvt)
  if ((RC == 274) || (RC == 275))
    ; The attribute does not exist on the specified object.
    return ''
  else
    IntControl(79,-1,7002,'Cannot get "App:FS Rights Path" value for AppObjSpec',0)
  endif
endif


; Get the app object's "App:FS Rights Volume" attribute value...

ErrorMode(@OFF)
AppFSRightsVolume = nwGetObjValue(AppObjSpec,'App:FS Rights Volume',0,0,1)
RC = LastError()
ErrorMode(@CANCEL)

if (RC)
  nwSetOptions(11,bSaveBinStringCvt)
  if ((RC == 274) || (RC == 275))
    ; The attribute does not exist on the specified object.
    return ''
  else
    IntControl(79,-1,7003,'Cannot get "App:FS Rights Volume" value for AppObjSpec',0)
  endif
endif


; Restore this setting as we are done with it...

nwSetOptions(11,bSaveBinStringCvt)


; Parse the volume list and remove unneeded field values from it...

for i = 1 to ItemCount(AppFSRightsVolume,ValueDelim)
  Volume = ItemExtract(i,AppFSRightsVolume,ValueDelim)
  Volume = ItemExtract(1,Volume,FieldDelim)
  AppFSRightsVolume = ItemReplace(Volume,i,AppFSRightsvolume,ValueDelim)
next


; Initialize the return string...

RightsList = ''


; Now we do some serious work tearing apart the AppFSRightsPath hex strings...

for i = 1 to ItemCount(AppFSRightsPath,FieldDelim)
  PathHEX = ItemExtract(i,AppFSRightsPath,FieldDelim)

  FileFlagHEX = StrSub(PathHEX,25,2)
  bFileFlag = xBaseConvert(FileFlagHEX,16,10)

  ; Only return the types of paths that were requested...

  if (!((bGetFiles && bFileFlag) || (bGetDirs && !bFileFlag))) then next

  if (bFileFlag)
    DirFileFlag = 'F'
  else
    DirFileFlag = 'D'
  endif

  VolNumHEX = StrCat(StrSub(PathHEX,7,2),StrSub(PathHEX,5,2),StrSub(PathHEX,3,2),StrSub(PathHEX,1,2))
  VolNum = xBaseConvert(VolNumHEX,16,10) + 1  ; Add one so that we can use it in ItemExtract()...

  Field2HEX = StrCat(StrSub(PathHEX,15,2),StrSub(PathHEX,13,2),StrSub(PathHEX,11,2),StrSub(PathHEX,9,2))
  Field2 = xBaseConvert(Field2HEX,16,10)

  RightsHEX = StrCat(StrSub(PathHEX,23,2),StrSub(PathHEX,21,2),StrSub(PathHEX,19,2),StrSub(PathHEX,17,2))
  Rights = xBaseConvert(RightsHEX,16,10)

  VolName = ItemExtract(VolNum,AppFSRightsVolume,ValueDelim)

  RightsCodes = ''

  ; Put the rights codes in the order that RIGHTS.EXE and NWADMN32.EXE put them in...

  if (Rights & 256) then RightsCodes = StrCat(RightsCodes,'S')
  if (Rights & 1) then RightsCodes = StrCat(RightsCodes,'R')
  if (Rights & 2) then RightsCodes = StrCat(RightsCodes,'W')
  if (Rights & 8) then RightsCodes = StrCat(RightsCodes,'C')
  if (Rights & 16) then RightsCodes = StrCat(RightsCodes,'E')
  if (Rights & 128) then RightsCodes = StrCat(RightsCodes,'M')
  if (Rights & 64) then RightsCodes = StrCat(RightsCodes,'F')
  if (Rights & 32) then RightsCodes = StrCat(RightsCodes,'A')

  ; Build the path specification...

  PathSpec = ''

  for j = 27 to (StrLen(PathHEX) / 2) by 2
    CharVal = xBaseConvert(StrSub(PathHEX,j,2),16,10)
    if (CharVal != 0)
      PathSpec = StrCat(PathSpec,Num2Char(CharVal))
    else
      break
    endif
  next

  RightsRec = StrCat(TreeName,'\',VolName,PathSpec,FieldDelim,DirFileFlag,FieldDelim,Rights,FieldDelim,RightsCodes)

  RightsList = ItemInsert(RightsRec,-1,RightsList,ValueDelim)
next


return RightsList

#EndFunction

Article ID:   W15571
File Created: 2003:05:13:11:29:00
Last Updated: 2003:05:13:11:29:00