-- KillProp Version 1.00
-- 16 November 1993

KillProp is an application that allows supervisors to
remove spurious properties from objects in the NetWare 
bindery.

-- The NetWare bindery

The NetWare bindery is a database that contains information
about all kinds of resources available to network users.
Each NetWare 3.x and 2.x server maintains its own bindery.
The bindery contains information about all users, print 
queues, and user groups on a specific server. These types
of bindery objects are known as static bindery objects,
because they are created and maintained by a supervisor
using a tool like SYSCON and are specific to that individual
file server.

The bindery also contains information about
every advertising service on the network, such as other
file servers and services such as database NLMs, print
server VAPs and NLMs, and the like. These types of object
are known as dynamic objects and are analogous to the 
things that are displayed when you issue the DISPLAY
SERVERS command at the server console.

Bindery objects may have properties associated with them. 
User objects have properties like IDENTIFICATION, which is
the user's full name; ACCOUNT_BALANCE, which lists the user's
NetWare accounting balance, GROUP'S_I'M_IN, which contains
a list of the bindery object numbers of all the user group
objects the user is a member of. The object properties
associated with user objects contain the user's group
affiliations, security equivalances, password, old
passwords, and trustee files and directories.

A bindery object itself has a server-unique identifier,
an object type, and a name. It may or may not possess
properties. 

-- Bindery Object Properties

Many applications create bindery objects and/or add properties 
to bindery objects to to provide some kind of value added 
service or to keep track of some kind of information. For 
example, Novell's NetWare Name Services (NNS) creates and 
maintains a host of bindery objects and properties that allow
it to group a set of NetWare 2.x and 3.x servers into a domain
and provide for domain synchronization, domain profile scripts,
user profiles, and such. Some applications add objects or
properties to existing objects to enforce copy protection 
or enforce a trial usage period for the software.

In many cases these applications do not remove these properties 
when they are deinstalled. For example NNS has been known to 
leave some properties attached to users when a server is 
removed from an NNS domain. This is where KillProp enters the
picture.

KillProp allows supervisors to scan the bindery and list all
properties associated with all objects, and to optionally
remove properties from objects. Before program usage is
described, however, here are a few words of caution.

The NetWare bindery controls how all users access the server.
It is extremely important that certain bindery objects and
properties not be modified or removed, or else you may find
yourself in a situation where you and all other users cannot
log in, log out, or do anything else. If the wrong bindery
object properties are removed or modified the server may have
to be reinstalled! Be very careful. 

To minimize the chance that your server's bindery will be 
corrupted or damaged, it is highly recommended that you run
BINDFIX twice to create a backup of the bindery that can be
restored with BINDREST in case unintended properties are 
deleted. Please be aware that this method does not guarantee 
that the bindery can be restored if improper object properties
are deleted. KillProp will ask you to verify every bindery 
object property it has targeted for deletion. Still, if you
have any doubt at all about a property, do not delete it.

-- Program Usage

That having been stated, we can discuss how to use KillProp.
The application has two modes of operation: a bindery object
property scanner, and a bindery object property remover. Wild
card object names, object types, and property names can be used.
To simply scan a server's bindery and list all objects and 
all properties associated with them, enter

killprop v

The v argument enables the 'view' option, and since no
other arguments are specified the default scan (all objects 
and their properties) will be listed. If your server is attached
to a WAN or there are a lot of users installed this list will 
be very long, so it's suggested that you pipe output through 
the DOS command MORE, e.g.

killprop v | more

or better yet, redirect output to a file for later inspection:

killprop v > bind.txt

The scan may be restricted to a particular object, object 
type, or property, by using the command line arguments. Exact 
usage is

killprop options ObjectName ObjectType PropertyName

Options are

v - view objects and properties
k - kill object properties

ObjectName is a bindery object name, such as SUPERVISOR, and 
can include wildcards. ObjectType is the desired bindery object
type, or -1 to match all object types. Please see SAPTYPES.TXT
for a large list of object types. PropertyName can be explicitly
identified or can contain wildcards.

For example, to view all properties associated with the bindery 
object SUPERVISOR, which is a user (type 1), enter

killprop v supervisor 1 *

Typical output will be:

KillProp V1.00 Nov 16 1993 11:40:41
Copyright (c) 1993 Willowind, Inc. All rights reserved.
 Searching for object name [SUPERVISOR]
 objectType 0001, property name [*]
SUPERVISOR
  id: 00000001
  ty: 0001 User
  fl: static
  pr: yes
  pn: GROUPS_I'M_IN
  pn: IDENTIFICATION
  pn: USER_DEFAULTS

The id: shows SUPERVISOR's bindery object ID in hex, which is unique 
to the server. ty: shows the object type in hex. fl: indicates the 
bindery object flag's value, which can either be static or 
dynamic. pr: indicates if bindery object properties exist
for this object. Each pn: line reports the name of every 
property associated with that object that matches the input 
property name and that you have rights to view (certain 
bindery object properties may be inaccessible to users based
on access rights and security; for eaxmple, the PASSWORD
property is only accessible by the operating system and not
even SUPERVISOR can scan or view it!).

To show all file server objects in the bindery, enter

killprop v * 4 *

Note that file servers and other 'advertised' services are 
dynamic bindery objects. Do not attempt to delete properties
from dynamic objects. You will almost certainly get an error
stating that the property doesn't exist; but there is no reason
to tempt fate and corrupt your bindery.

-- Removing Bindery Object Properties

To remove a bindery object property, use the 'k' (for Kill) 
option in conjunction with a search object name, type, and
property type. To remove an object property all four command
line arguments are required.

Here's a real world example. In out network environment, we 
have a file server that was once in a NetWare Name Services
domain, but was removed from the domain because of one of 
those constant business reorganizations and mission changes.
However several user objects inexplicably retained properties
that were added by NNS, as this example illustrates:

<- Si1 -> I:\CODE\NETWARE\KILLPROP> killprop v 

KillProp V1.00 Nov 16 1993 11:40:41
Copyright (c) 1993 Willowind, Inc. All rights reserved.
 Searching for object name [NAGLES]
 objectType 0001, property name [*]
NAGLES
  id: b1000001
  ty: 0001 User
  fl: static
  pr: yes
  pn: GROUPS_I'M_IN
  pn: PROFILES_I'M_IN
  pn: DEFAULT_PROFILE
  pn: IDENTIFICATION

The properties PROFILE'S_I'M_IN and DEFAULT_PROFILE are
leftovers from NNS. To remove them we used KillProp in the 
following way:

<- Si1 -> I:\CODE\NETWARE\KILLPROP> killprop k nagles 1 *pro*

KillProp V1.00 Nov 16 1993 11:40:41
Copyright (c) 1993 Willowind, Inc. All rights reserved.
 Searching for object name [NAGLES]
 objectType 0001, property name [*PRO*]
  Object NAGLES Type 0001 Property PROFILES_I'M_IN
  Are you sure you want to delete this property? y
  Property deleted.
  Object NAGLES Type 0001 Property DEFAULT_PROFILE
  Are you sure you want to delete this property? y
  Property deleted.

Note the use of the wild card for the property name in the
example above. We used *pro* to specify that we wanted to
remove all properties containing the string 'pro'. Alternatively
you could remove the profile properties from all matching users
by entering

killprop k * 1 *pro*

Also note that you will be asked to verify the removal of
all targeted bindery object properties.

-- Disclaimer & Legal Stuff

This application is provided 'as is' and contains no 
warranties or guarantees of any kind. Willowind claims no 
responsibility whatsoever for any damage that might occur 
from improper use of this application. 

While we have made every effort to ensure proper operation 
of KillProp, we still strongly suggest that a server backup 
be performed and BINDFIX be run twice before any bindery 
objects are targeted for removal. 

This application is hereby released into the public domain.
It may be freely distributed as long as no part of this archive
is modified.

If you find this application useful, please consider donating
a few dollars to your favorite charity. 

Larry Will
Willowind, Inc.
5305 Griffith Road
Laytonsville, MD 20882-2020
Voice: 301.231.2013
BBS: 301.587.4155
Internet: will@vitro.com
