Introduction to Library Functions puidnetdz_asmch(3)
NAME
puidnetdz_asmch() - assemble PUIDNETD protocol authorization
characteristics structures
SYNOPSIS
#include "puidnetd.h"
int puidnetdz_asmch(
char *str, size_t len, puidnetdz_chasm_t **ch, int nch
);
DESCRIPTION
The puidnetdz_asmch() function assembles authorization
characteristics structures from an external protocol string.
(The 'z' in its name stands for authoriZation.)
Authorization characteristics are the mechanism for indicat-
ing relationships associated with PUIDs (Purdue University
IDentification numbers). PUID authorization characteristics
are stored in an authorization data base, controlled by an
authorization DBM (Data Base Manager) of the Purdue I2A2
(Infrastructure for Identification, Authentication, and
Authorization) system, and may be accessed via network dae-
mons. See puidnetd(4) for more information on the network
daemons and a discussion of their external protocol.
The puidnetdz_asmch() function has these arguments:
* str
addresses the input string. See the CHARACTERISTICS
STRINGS section of this document for their descrip-
tion.
len supplies the length of *str.
**ch
addresses a variable where puidnetdz_asmch() will
return the address of a statically allocated array
of puidnetd_chasm_t structures.
*n addresses an integer variable where
puidnetdz_asmch() will return a count of the number
of puidnetd_chasm_t structures in **ch.
The puidnetd_chasm_t structure is defined in puidnetd.h.
CHARACTERISTICS STRINGS
Authorization characteristics strings consist of one or more
clauses, separated by commas, that define authorization
characteristics values. There are three types of fields
whose defining type codes may be found as PUIDNETDZ_CHTY_*
symbols in puidnetd.h. A null clause - e.g., one with
SunOS 5.8 Last change: 1
Introduction to Library Functions puidnetdz_asmch(3)
nothing in it, like ",," - is ignored.
PUIDNETDZ_CHTY_BWD ('w')
defines "Basic WorD" characteristics. These are charac-
teristics represented by single bits in an internal word
array, since their definitions are common and general.
Values following this type code are in hexadecimal; when
there are multiple basic characteristic words, they are
separated with the vertical bar ('|') character. (See
the PUIDNETDZ_CHTY_BCWORDS definition in puidnetd.h to
determine how many words there are; currently there is
one.)
In a hexadecimal value, the power of given bit defines a
characteristic whose value is the power of two for the
bit - e.g., characteristic three occupies the 2**3 posi-
tion; fifteen, 2**15. Here's an example of a basic word
characteristics definition for characteristics two,
three, and four:
w1c
PUIDNETDZ_CHTY_CONT ('+')
is an internal type code that never appears in external
protocol strings.
PUIDNETDZ_CHTY_GLOB ('g')
defines "global" characteristics. Global characteris-
tics are defined by official data sources and are
updated daily. A characteristic clause that begins with
a decimal digit is assumed to be global. Here's the
basic word definition of the previous example, coupled
with a clause for global characteristic 1234:
w1c,g1234
That could be represented more tersely without the 'g'
as:
w1c,1234
PUIDNETD_CHTY_PRIV ('p')
defines "private" characteristics. Private characteris-
tics are usually temporary ones, assigned immediately
after an authorization record has been created for a
PUID, and before the characteristic can be generated by
official records. For example, a new employee might be
given a private characteristic noting employment, but
official records won't show employment for some inter-
val.
When a global characteristic, matching a private one,
SunOS 5.8 Last change: 2
Introduction to Library Functions puidnetdz_asmch(3)
appears during a daily update, the private one is
erased. Private characteristics may occasionally be
expired at the discretion of the I2A2 administrator.
Here's an example that: sets basic word bits two, three,
and four; has a null characteristic clause that
puidnetdz_asmch() ignores; sets global characteristic
1234; and sets private characteristic 5678.
w1c,,g1234,p5678
Additional information on definitions for and descriptions
of authorization characteristics strings may be found in
puidnetd.h.
RETURN VALUES
The puidnetdz_asmch() function returns 0 if characteristics
were assembled without error. Otherwise it returns a
non-zero PUIDNETD error code that may also be found in the
puidnetd_errno external variable. These errors may be
returned:
PUIDNETD_ECHCRIT
indicates that an illegal or ill-formed creator PUID or
creation time is associated with a characteristic in
the input string.
PUIDNETD_ECHFMT
indicates a general format error in the input string.
PUIDNETD_ECHTY
indicates there is an illegal characteristics type in
the input string. Legal characteristics types are
defined by the PUIDNETDZ_CHTY_* symbol definitions in
puidnetd.h.
PUIDNETD_ECHVAL
indicates a characteristics value that is too large or
too small. An illegal value specified after a
PUIDNETDZ_CHTY_BWD type is either unspecified or too
large for the word arrays.
An illegal value of any other type must be greater than
or equal to zero and less than or equal to
PUIDNETDZ_MAXCH. PUIDNETDZ_MAXCH is defined in
puidnetd.h.
PUIDNETD_ENOMEM
indicates that the puidnetdz_asmch() function could not
allocate memory with calloc(3) or malloc(3).
SunOS 5.8 Last change: 3
Introduction to Library Functions puidnetdz_asmch(3)
The puidnetd_errno external variable is defined in the
puidnetd.h header file.
EXAMPLES
The following example unpacks the string "w1f,p21,g32,44" to
four puidnetdz_chasm_t structures.
#include "puidnetd.h"
puidnetdz_chasm_t *c;
int n;
char *str = "w1f,p21,g32,44";
if (puidnetdz_asmch(str, strlen(str), &c, &n)) {
/* Process puidnetd_errno. */
}
/* Process the n (4) puidnetdz_chasm_t structures
* in c[]. */
AUTHOR
The puidnetdz_asmch() function was written by Victor A.
Abell <abe@purdue.edu>.
SEE ALSO
puidnetd_strerror(3), puidnetd(4).
SunOS 5.8 Last change: 4