DEVEL153X-butc-xbsa-update-20080711

LICENSE IPL10

update xbsa support for current tsm


(cherry picked from commit 5baf817a31)
This commit is contained in:
Todd DeSantis 2008-07-15 11:33:03 +00:00 committed by Derrick Brashear
parent 5130683a40
commit f162e9d259
7 changed files with 3845 additions and 7 deletions

View File

@ -1236,20 +1236,33 @@ XBSA_CFLAGS=""
if test "$enable_tivoli_tsm" = "yes"; then
XBSADIR1=/usr/tivoli/tsm/client/api/bin/xopen
XBSADIR2=/opt/tivoli/tsm/client/api/bin/xopen
XBSADIR3=/usr/tivoli/tsm/client/api/bin/sample
XBSADIR4=/opt/tivoli/tsm/client/api/bin/sample
if test -r "$XBSADIR1/xbsa.h"; then
XBSA_CFLAGS="-Dxbsa -I$XBSADIR1"
XBSA_XLIBS=""
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
elif test -r "$XBSADIR2/xbsa.h"; then
XBSA_CFLAGS="-Dxbsa -I$XBSADIR2"
XBSA_XLIBS=""
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
elif test -r "$XBSADIR3/dsmapifp.h"; then
XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR3"
XBSA_XLIBS="-ldl"
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
elif test -r "$XBSADIR4/dsmapifp.h"; then
XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR4"
XBSA_XLIBS="-ldl"
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
else
AC_MSG_RESULT([no, missing xbsa.h header file])
AC_MSG_RESULT([no, missing xbsa.h and dsmapifp.h header files])
fi
else
AC_MSG_RESULT([no])
fi
AC_SUBST(XBSA_CFLAGS)
AC_SUBST(XBSA_XLIBS)
dnl checks for header files.
AC_HEADER_STDC

2903
src/butc/afsxbsa.c Normal file

File diff suppressed because it is too large Load Diff

866
src/butc/afsxbsa.h Normal file
View File

@ -0,0 +1,866 @@
/*
* Copyright 2000, International Business Machines Corporation and others.
* All Rights Reserved.
*
* This software has been released under the terms of the IBM Public
* License. For details, see the LICENSE file in the top-level source
* directory or online at http://www.openafs.org/dl/license10.html
*/
#ifndef _BSA_XBSA_H_
#define _BSA_XBSA_H_
#ifdef __cplusplus
extern "C" {
#endif
#if (SYS_V > 3) || defined(BERK4_2) || defined(SUN4)
#include <sys/time.h>
#else
#include <time.h>
#endif
#ifdef bool_t
#undef bool_t
#endif
/* include TSM Header Files. */
#include <dsmapitd.h>
#include <dsmapifp.h>
#include <dsmrc.h>
/* BSA_Boolean */
typedef char BSA_Boolean;
/* BSA_Int16 */
typedef short BSA_Int16;
/* BSA_Int32 */
typedef long BSA_Int32;
/* BSA_Int64 */
typedef struct { /* defined as two 32-bit integers */
BSA_Int32 left;
BSA_Int32 right;
} BSA_Int64;
/* BSA_UInt16 */
typedef unsigned short BSA_UInt16;
/* BSA_UInt32 */
typedef unsigned long BSA_UInt32;
/* BSA_UInt64 */
typedef struct { /* defined as two unsigned 32-bit integers*/
BSA_UInt32 left;
BSA_UInt32 right;
} BSA_UInt64;
/*-------------------------------------------------------------------------+
| ADSM specific constants and return codes |
+-------------------------------------------------------------------------*/
/* TSM library version, release, level
*/
#define BSA_API_VERSION 5
#define BSA_API_RELEASE 2
#define BSA_API_LEVEL 0
/* Constants used */
#define ADSM_MAX_DESC 100 /* ADSM max Desc size */
#define ADSM_MAX_OBJINFO 100 /* ADSM max object info size */
#define ADSM_LOWEST_BOUND 0x0000 /* value for LowerBound min */
#define ADSM_HIGHEST_BOUND 0xFFFF /* value for UpperBound max */
#define ADSM_ENV_STRS 3 /* number of env strings */
#define ObjectDescriptorVersion 1 /* ver for ObjectDescriptor */
#define UserDescriptorVersion 1 /* ver for UserDescriptor */
#define BSAObjectType_DATABASE 4 /* ObjectType for Databases */
/* Return Codes Used
*/
#define BSA_RC_OK 0x00
#define BSA_RC_SUCCESS 0x00
#define ADSM_RC_ERROR 0x60 /* see ADSM error log */
#define ADSM_RC_INVALID_NODE 0x61 /* BSAObjOwner not match Init*/
#define ADSM_RC_INVALID_COPYTYPE 0x62 /* invalid copyType */
#define ADSM_RC_INVALID_OBJTYPE 0x63 /* invalid objectType */
#define ADSM_RC_INVALID_STATUS 0x64 /* invalid object status */
#define ADSM_RC_INVALID_ST_VER 0x65 /* invalid structure version */
#define ADSM_RC_OWNER_TOO_LONG 0x66 /* owner too long */
#define ADSM_RC_PSWD_TOO_LONG 0x67 /* pswd too long */
#define ADSM_RC_PSWD_GEN 0x68 /* pswd access = generate */
/* Constants used
*
* Maximum string lengths (lower bound), including trailing null
*/
#define BSA_LIST_ELEMENT_DELIMITER null /* Element delimiter in list */
#define BSA_MAX_ADMIN_NAME 64 /* Administrator name */
#define BSA_MAX_APPOBJECT_OWNER 64 /* Max end-object owner length */
#define BSA_MAX_BSAOBJECT_OWNER 64 /* Max BSA object owner length */
#define BSA_MAX_CG_DEST 31 /* Copy group destination */
#define BSA_MAX_CG_NAME 31 /* Max copy group name length */
#define BSA_MAX_COPYGROUPS 16 /* Max number of copy groups */
/* which can be specified in a */
/* lifecycle group */
#define BSA_MAX_DESC 256 /* Description field */
#define BSA_MAX_ENCODINGMETHOD 31 /* Max encoding method length */
#define BSA_MAX_EVENTINFO 256 /* Max event info size */
#define BSA_MAX_FILTERRULESET 8192 /* Max filter rule set size */
#define BSA_MAX_OSNAME 1024 /* Max Objectspace name length */
#define BSA_MAX_LG_NAME 31 /* Life cycle group name */
#define BSA_MAX_LIFECYCLEGROUPS 64 /* Max number of life cycle */
/* groups in a policy set */
#define BSA_MAX_OBJINFO 512 /* Max object info size */
#define BSA_MAX_PATHNAME 1024 /* Max path name length */
#define BSA_MAX_POLICYDOMAINS 256 /* Max number of specific policy */
/* domains an administrator may */
/* be responsible for */
#define BSA_MAX_POLICYDOMAIN_NAME 31 /* Policy domain name */
#define BSA_MAX_POLICYSETS 16 /* Max number of policy sets */
/* in a domain */
#define BSA_MAX_POLICYSET_NAME 31 /* Policy set name */
#define BSA_MAX_RESOURCETYPE 31 /* Max resource mgr name length */
#define BSA_MAX_TOKEN_SIZE 64 /* Max size of a security token */
#define BSA_PUBLIC "BSA_ANY" /* Default string */
/* Return Codes Used
*
* Return Code descriptions are given in Section 4.3.
*/
#define BSA_RC_ABORT_ACTIVE_NOT_FOUND 0x02
#define BSA_RC_ABORT_SYSTEM_ERROR 0x03
#define BSA_RC_AUTHENTICATION_FAILURE 0x04
#define BSA_RC_BAD_CALL_SEQUENCE 0x05
#define BSA_RC_BAD_HANDLE 0x06
#define BSA_RC_BUFFER_TOO_SMALL 0x07
#define BSA_RC_DESC_TOO_LONG 0x08
#define BSA_RC_OBJECTSPACE_TOO_LONG 0x09
#define BSA_RC_INVALID_TOKEN 0x0a
#define BSA_RC_INVALID_VOTE 0x0b
#define BSA_RC_INVALID_KEYWORD 0x0c
#define BSA_RC_MATCH_EXISTS 0x0d
#define BSA_RC_MORE_DATA 0x0e
#define BSA_RC_MORE_RULES 0x0f
#define BSA_RC_NEWTOKEN_REQD 0x10
#define BSA_RC_NO_MATCH 0x11
#define BSA_RC_NO_MORE_DATA 0x12
#define BSA_RC_NO_RESOURCES 0x13
#define BSA_RC_NULL_DATABLKPTR 0x14
#define BSA_RC_NULL_OBJNAME 0x15
#define BSA_RC_NULL_POINTER 0x16
#define BSA_RC_NULL_RULEID 0x17
#define BSA_RC_OBJECT_NAME_TOO_LONG 0x18
#define BSA_RC_OBJECT_NOT_EMPTY 0x19
#define BSA_RC_OBJECT_NOT_FOUND 0x1a
#define BSA_RC_OBJINFO_TOO_LONG 0x1b
#define BSA_RC_OBJNAME_TOO_LONG 0x1c
#define BSA_RC_OPERATION_NOT_AUTHORIZED 0x1d
#define BSA_RC_OLDTOKEN_REQD 0x1e
#define BSA_RC_TOKEN_EXPIRED 0x1f
#define BSA_RC_TXN_ABORTED 0x20
#define BSA_RC_UNMATCHED_QUOTE 0x21
#define BSA_RC_USER_OWNS_OBJECTS 0x22
/* AppObjectOwner
*/
typedef char AppObjectOwner[BSA_MAX_APPOBJECT_OWNER];
/* BSAObjectOwner
*/
typedef char BSAObjectOwner[BSA_MAX_BSAOBJECT_OWNER];
/* CopyGpDest
*/
typedef char CopyGpDest[BSA_MAX_CG_DEST];
/* CopyGpName
*/
typedef char CopyGpName[BSA_MAX_CG_NAME];
/* CopyMode
*
* Constant Value Explanation
* -------- ----- -----------
* INCREMENTAL 1 Specifies that the Backup Services should make a
* copy only if the application object has been
* modified since the last time this copy group was
* used to create the object's copy.
* ABSOLUTE 2 Specifies that the Backup Services should make a
* copy even if the application object has not been
* modified since the last time this copy group was
* used to create the object's copy.
*/
typedef enum {
BSACopyMode_INCREMENTAL = 1,
BSACopyMode_ABSOLUTE = 2
} CopyMode;
/* CopySerialization
*
* Constant Value Explanation
* -------- ----- -----------
* STATIC 1 Specifies that the Backup Services must create a
* consistent (unmodified during the operation) copy of
* the object. If the application is unable to create a
* consistent copy then it should skip the operation
* (creating backup or archive copy) for the object.
* SHAREDSTATIC 2 Specifies that the Backup Services must create a
* consistent copy of the object. It can retry the
* operation a number of times (application dependent).
* If the Backup Services is unable to create a
* consistent copy even after retries, then it should
* skip creating a backup or archive copy of the
* object.
* SHAREDDYNAMIC 3 Specifies that the Backup Services must create a
* copy of the object. It can retry the operation a
* number of times in an attempt to create a consistent
* copy; however, if it fails to make a consistent
* copy, a copy must still be made, ignoring the fact
* that the copy may have been modified during the
* operation. Such copies are useful for log file
* objects which are being continuously modified.
* DYNAMIC 4 Specifies that the Backup Services must create a
* copy of the obbject even if the source object is
* modified during the operation. No retries should be
* attempted to create a consistent copy.
*/
typedef enum {
BSACopySerialization_STATIC = 1,
BSACopySerialization_SHAREDSTATIC = 2,
BSACopySerialization_SHAREDDYNAMIC = 3,
BSACopySerialization_DYNAMIC = 4
} CopySerialization;
/* CopyType
*
* Constant Value Explanation
* -------- ----- -----------
* ANY 1 Used for matching any copy type (e.g. "backup" or
* "archive" in the copy type field of structures for
* selecting query results).
* ARCHIVE 2 Specifies that the copy type should be "archive".
* When used in the copy type field of the CopyGroup,
* it identifies the copy data as of type
* ArchiveCopyData, which is used to create archive
* copies.
* BACKUP 3 Specifies that the copy type should be "backup".
* When used in the copy type field of the CopyGroup,
* it identifies the copy data as of type
* BackupCopyData, which is used to create backup
* copies.
*/
typedef enum {
BSACopyType_ANY = 1,
BSACopyType_ARCHIVE = 2,
BSACopyType_BACKUP = 3
} CopyType;
/* Description
*/
typedef char Description[BSA_MAX_DESC];
/* DomainName
*/
typedef char * DomainName[BSA_MAX_POLICYDOMAIN_NAME];
/* EventInfo
*/
typedef char EventInfo[BSA_MAX_EVENTINFO];
/* LGName
*/
typedef char LGName[BSA_MAX_LG_NAME];
/* ObjectInfo
*/
typedef char ObjectInfo[BSA_MAX_OBJINFO];
/* ObjectName
*/
typedef struct {
char objectSpaceName[BSA_MAX_OSNAME]; /* Highest-level name qualifier */
char pathName[BSA_MAX_PATHNAME]; /* Object name within */
/* objectspace */
} ObjectName;
/* ObjectOwner
*/
typedef struct {
BSAObjectOwner bsaObjectOwner; /* BSA Owner name - this is the name */
/* that Backup Services authenticates */
AppObjectOwner appObjectOwner; /* End-owner name, this is the name */
/* defined by the application */
} ObjectOwner;
/* ObjectSize
*/
typedef BSA_UInt64 ObjectSize; /* Unsigned 64-bit integer */
/* ObjectStatus
*
* Constant Value Explanation
* -------- ----- -----------
* ANY 1 Provides a wild card function. Can only be used in
* queries.
* ACTIVE 2 Indicates that this is the most recent backup copy
* of an object.
* INACTIVE 3 Indicates that this is not the most recent backup
* copy, or that the object itself no longer exists.
*/
typedef enum {
BSAObjectStatus_ANY = 1,
BSAObjectStatus_ACTIVE = 2,
BSAObjectStatus_INACTIVE = 3
} ObjectStatus;
/* ObjectType
*
* Constant Value Explanation
* -------- ----- -----------
* any 1 Used for matching any object type (e.g. "file" or
* "directory") value in the object type field of
* structures for selecting query results.
* file 2 Used by the application to indicate that the type of
* application object is a "file" or single object.
* directory 3 Used by the application to indicate that the type of
* application object is a "directory" or container of
* objects.
*/
typedef enum {
BSAObjectType_ANY = 1,
BSAObjectType_FILE = 2,
BSAObjectType_DIRECTORY = 3
} ObjectType;
/* Operation
*
* Constant Value Explanation
* -------- ----- -----------
* archive 1 Used to indicate that a scheduled operation is of
* type "archive".
* backup 2 Used to indicate that a scheduled operation is of
* type "backup".
*/
typedef enum {
BSAOperation_ARCHIVE = 1,
BSAOperation_BACKUP = 2
} Operation;
/* Period
*
* Use of the Period structure in a Schedule for an event:
* 1. The Schedule structure specifies 3 timing elements:
* a. "firstStartTime" - a timestamp showing the "earliest"
* possible time the event could take place
* b. "day" - the day of the week the event should occur
* c. "frequency" - the period between successive events
* 2. To determine the day the event should occur (this does
* not change the time of the event in the day):
* a. Determine the requested day from "firstStartTime".
* b. If "day" does not equal XBSA_DAYOFWEEK_ANY
* i. Compare "day" to the day of the week corresponding
* to "firstStartTime" determined in 2a above.
* ii.If the days match, then use "firstStartTime" else
* use the first "day" *following* the day shown
* in "firstStartTime" as the day of the event.
* 3. If the PeriodWhich field in the Period structure is other
* than XBSA_PERIOD_UNDEFINED, then successive events are
* determined using the value of "periodData".
* a. For seconds and days, the appropriate seconds or days
* are added to the "firstStartTime" and step 2 to correct
* for the day of the week (if needed) is applied again.
* b. If a monthly period is specified, then the appropriate
* number of months are added by incrementing the month index is
* made (for example, a one month increment from February to
* March). If the monthly date is not valid (for example, January
* 30 --> February 30) then the last day of the desired month is
* used (example January 30 --> February 28). Then step 2 is
* followed to adjust for the requested day (which might move the
* event time into the following month).
*/
typedef enum {
BSAPeriod_SECONDS = 1,
BSAPeriod_DAYS = 2,
BSAPeriod_MONTHS = 3,
BSAPeriod_UNDEFINED = -9,
BSAPeriod_DAILY = 4, BSAPeriod_WEEKLY = 5, BSAPeriod_MONTHLY = 6,
BSAPeriod_QUARTERLY = 7, BSAPeriod_ANNUALLY = 8
} PeriodWhich;
typedef struct {
PeriodWhich which;
union {
time_t nSeconds;
BSA_Int16 nDays;
BSA_Int16 nMonths;
} periodData;
} Period;
/* ResourceType
*/
typedef char ResourceType[BSA_MAX_RESOURCETYPE];
/* RuleId
*/
typedef BSA_UInt64 RuleId;
/* Scheduleid
*/
typedef BSA_UInt64 ScheduleId;
/* AccessRight
*
* Constant Value Explanation
* -------- ----- -----------
* GET 1 Access right for getting an object from Backup
* Services, also includes access right for querying
* (getting attributes) an object from Backup Services.
* QUERY 2 Access right for querying (getting attributes) an
* object from Backup Services.
*/
typedef enum {
BSAAccessRight_GET = 1,
BSAAcessRight_QUERY = 2
} AccessRight;
/* AccessRule
*/
typedef struct {
RuleId ruleId; /* Provided by Backup Services */
ObjectName objName; /* Object name to be given access */
ObjectOwner objectOwner; /* BSA object owner and Applicaton object */
/* owner to be given access */
AccessRight rights; /* The access rights to be given */
} AccessRule;
/* ApiVersion
*/
typedef struct {
BSA_UInt16 version; /* Version of this API */
BSA_UInt16 release; /* Release of this API */
BSA_UInt16 level; /* Level of this API */
} ApiVersion;
/* ArchiveCopyData
*/
typedef struct {
CopyGpName cGName; /* Copy group name */
BSA_UInt16 freq; /* Archive frequency */
CopySerialization copySer; /* Copy serialization code */
CopyMode copyMode; /* Copy mode */
CopyGpDest destName; /* Copy destination name */
BSA_UInt16 retVersion; /* Retention time for the version */
} ArchiveCopyData;
/* BackupCopyData
*/
typedef struct {
CopyGpName cGName; /* Copy group name */
BSA_UInt16 freq; /* Backup frequency */
CopySerialization copySer; /* Copy serialization code */
CopyMode copyMode; /* Copy mode: 1=modified, 2=absolute */
CopyGpDest destName; /* Copy destination name */
BSA_UInt16 verDataEx; /* Versions (number of versions */
/* retained) */
BSA_UInt16 verDataDel; /* Versions (data deleted) */
Period retXtraVer; /* Retain extra versions */
Period retOnlyVer; /* Retain only versions */
} BackupCopyData;
/* CopyGroup
*/
typedef struct {
CopyType copyType; /* Type of copy group: archive, backup, etc */
union {
ArchiveCopyData archive;
BackupCopyData backup;
} copyData;
} CopyGroup;
/* CopyId
*/
typedef BSA_UInt64 CopyId;
/* DataBlock
*/
typedef struct {
BSA_UInt16 bufferLen;
BSA_UInt16 numBytes; /* Actual number of bytes read from */
/* or written to the buffer, or the */
/* minimum number of bytes needed */
char * bufferPtr;
} DataBlock;
/* DayOfWeek
*/
typedef enum {
BSADayOfWeek_Monday = 1, BSADayOfWeek_Tuesday = 2,
BSADayOfWeek_Wednesday = 3, BSADayOfWeek_Thursday = 4,
BSADayOfWeek_Friday = 5, BSADayOfWeek_Saturday = 6,
BSADayOfWeek_Sunday = 7
} DayOfWeek;
/* Environment
*/
typedef struct {
char * envVariables; /* Identifies the Backup Services instance and other */
/* implementation-dependent variables such as */
/* communication ports, etc. Each variable is a */
/* (keyword, value) pair separated by a space. */
/* If a value contains spaces, it must be */
/* enclosed in single or double quotes. */
} BSAEnvironment;
/* Event
*/
typedef struct {
BSA_UInt32 eventId; /* This is an internal (to Backup Services) id*/
ObjectOwner objectOwner;/* Identifies the owner of the event */
struct tm time; /* Identifies the time the action is to start */
Operation action; /* Identifies the action (backup, archive) */
ObjectName objName; /* Identifies objects to be acted on */
ResourceType resourceType;/* Identifies the resource manager for the */
/* event */
EventInfo eventInfo; /* User- and resource-manager-specific info */
} BSAEvent;
/* MethodName
*/
typedef char EncodingMethod[BSA_MAX_ENCODINGMETHOD];
/* ObjectDescriptor
*/
typedef struct {
BSA_UInt32 version; /* Version number for this structure */
ObjectOwner Owner; /* Owner of the object */
ObjectName objName; /* Object name */
struct tm createTime; /* Supplied by Backup Services */
CopyType copyType; /* Copy type: archive or backup */
CopyId copyId; /* Supplied by Backup Services */
BSA_UInt64 restoreOrder; /* Supplied by Backup Services */
LGName lGName; /* Associated Lifecycle Group name */
CopyGpName cGName; /* Copy group within the lifecycle group */
ObjectSize size; /* Object size may be up to 63 bits */
ResourceType resourceType; /* e.g. UNIX file system */
ObjectType objectType; /* e.g. file, directory, etc. */
ObjectStatus status; /* Active/inactive, supplied by */
/* Backup Services */
EncodingMethod * encodingList; /* List of encoding Methods used, in */
/* application-defined order, */
/* terminated with a null entry */
Description desc; /* Descriptive label for the object */
ObjectInfo objectInfo; /* Application information */
} ObjectDescriptor;
/* QueryDescriptor
*/
typedef struct {
ObjectOwner owner; /* Owner of the object */
ObjectName objName; /* Object name */
struct tm createTimeLB; /* Lower bound on create time */
struct tm createTimeUB; /* Upper bound on create time */
struct tm expireTimeLB; /* Lower bound on expiration time */
struct tm expireTimeUB; /* Upper bound on expiration time */
CopyType copyType; /* Copy type: archive or backup */
LGName lGName; /* Associated Lifecycle Group name */
CopyGpName cGName; /* Copy group within the lifecycle group */
ResourceType resourceType; /* e.g. UNIX file system */
ObjectType objectType; /* e.g. file, directory, etc. */
ObjectStatus status; /* Active/inactive, supplied by Backup */
/* Services */
Description desc; /* Descriptive label for the object */
} QueryDescriptor; /* "*" is interpreted as a meta character */
/* wild card. */
/* Any undefined value is interpreted as */
/* an error. */
/* Schedule
*/
typedef struct {
ScheduleId schedId; /* Provided by Backup Services */
ObjectOwner objectOwner; /* Specifies the owner of the schedule */
Operation operation; /* Specifies the action to be taken */
struct tm firstStartTime; /* Specifies the first time the action */
/* is to take place */
DayOfWeek day; /* Specifies the day of week for the event*/
Period frequency; /* Specifies the frequency, e.g. daily */
ObjectName objectName; /* Identifies objects to be acted on */
ResourceType resourceType; /* Identifies the resource manager for the*/
/* schedule */
EventInfo scheduleInfo; /* Resource manager specific information */
} Schedule;
/* Security Token
*/
typedef char SecurityToken[BSA_MAX_TOKEN_SIZE];
/* StreamHandle
*/
typedef int StreamHandle;
/* UserDescriptor
*/
typedef struct t_UserDescriptor {
BSA_UInt16 version; /* Version num of this structure */
BSAObjectOwner bsaObjectOwner; /* BSA Object owner name */
DomainName domainName; /* Policy domain for the user */
Description desc; /* User information */
} UserDescriptor;
/* Vote
*/
typedef enum {
BSAVote_COMMIT = 1,
BSAVote_ABORT = 2
} Vote;
/* Function Prototypes for Data Movement API Subset
* Note that int and long have been replaced with typedefs
* from custom.h.
*/
extern BSA_Int16
BSABeginTxn
( long bsaHandle
);
extern BSA_Int16
BSAChangeToken
( long bsaHandle,
SecurityToken *oldTokenPtr,
SecurityToken *newTokenPtr
);
extern BSA_Int16
BSACreateObject
( long bsaHandle,
ObjectDescriptor *objectDescriptorPtr,
DataBlock *dataBlockPtr
);
extern BSA_Int16
BSACreateObjectF
( long bsaHandle,
ObjectDescriptor *objectDescriptorPtr,
StreamHandle *streamPtr
);
extern BSA_Int16
BSADeleteObject
( long bsaHandle,
CopyType copyType,
ObjectName *objectName,
CopyId *copyId
);
extern BSA_Int16
BSAEndData
( long bsaHandle
);
extern BSA_Int16
BSAEndTxn
( long bsaHandle,
Vote vote
);
extern BSA_Int16
BSAGetData
( long bsaHandle,
DataBlock *dataBlockPtr
);
extern BSA_Int16
BSAGetEnvironment
( long bsaHandle,
ObjectOwner *objectOwnerPtr,
char **environmentPtr
);
extern BSA_Int16
BSAGetNextQueryObject
( long bsaHandle,
ObjectDescriptor *objectDescriptorPtr
);
extern BSA_Int16
BSAGetObject
( long bsaHandle,
ObjectDescriptor *objectDescriptorPtr,
DataBlock *dataBlockPtr
);
extern BSA_Int16
BSAGetObjectF
( long bsaHandle,
ObjectDescriptor *objectDescriptorPtr,
StreamHandle *streamPtr
);
extern BSA_Int16
BSAInit
( long *bsaHandleP,
SecurityToken *tokenPtr,
ObjectOwner *objectOwnerPtr,
char **environmentPtr
);
extern BSA_Int16
BSAMarkObjectInactive
( long bsaHandle,
ObjectName *objectNamePtr
);
extern void
BSAQueryApiVersion
( ApiVersion *apiVersionPtr
);
extern BSA_Int16
BSAQueryObject
( long bsaHandle,
QueryDescriptor *queryDescriptorPtr,
ObjectDescriptor *objectDescriptorPtr
);
extern BSA_Int16
BSASendData
( long bsaHandle,
DataBlock *dataBlockPtr
);
extern BSA_Int16
BSASetEnvironment
( long bsaHandle,
char **environmentPtr
);
extern BSA_Int16
BSATerminate
( long bsaHandle
);
extern BSA_Int16
BSAResolveLifecycleGroup(
long BSAHandle,
ObjectDescriptor *BSAobjDescP
);
#ifdef __cplusplus
}
#endif
typedef struct
{
ApiSessInfo dsmSessInfo;
BSAObjectOwner bsaObjectOwner; /* node value on BSAInit */
dsUint16_t sessFlags; /* misc flags */
dsUint8_t oper; /* send or recv operation */
CopyType copyType; /* Backup or Archive type */
char *nextQryP; /* ptr to respArchive or respBackup */
} xGlobal;
/* flag masks for sessFlags */
/* to set on use sessFlags = (sessFlags | FL_IN_BSA_TXN) */
/* to set off use sessFlags = (sessFlags ^ FL_IN_BSA_TXN) */
/* to test on use if (sessFlags & FL_IN_BSA_TXN) */
#define FL_IN_BSA_TXN 0x0001 /* within a BSA type txn */
#define FL_IN_DSM_TXN 0x0002 /* within a actual ADSM txn */
#define FL_IN_BSA_QRY 0x0004 /* within a query txn */
#define FL_PSWD_EXPIRE 0x0008 /* pswd has expired */
#define FL_RC_WILL_ABORT 0x0010 /* recvd 157 on SendObj or SendData */
#define FL_END_DATA_DONE 0x0020 /* Get error already did EndData */
#define OPER_NONE 0 /* values for oper field */
#define OPER_SEND_START 1
#define OPER_SEND_ISSUED 2
#define OPER_RECV_START 3
#define OPER_RECV_ISSUED 4
/* structure def for objInfo - max len = 255 */
typedef struct
{
ResourceType resourceType; /* 31 bytes */
ObjectSize size; /* 8 bytes */
char partDesc[ADSM_MAX_DESC]; /* 100 bytes */
char partObjInfo[ADSM_MAX_OBJINFO]; /* 100 bytes */
} XAPIObjInfo;
/* ******* G l o b a l s ******** */
/* xGlobal xopenGbl; */
extern BSA_Int16 xlateRC(
long BSAHandle,
BSA_Int16 dsmRC,
BSA_Int16 *bsaRCP);
extern BSA_Int16 xparsePath(
long BSAHandle,
char *pathname,
char *hl,
char *ll);
extern xGlobal xopenGbl;
extern char traceStr[];
extern char traceStr1[];
extern char traceStr2[];
#define dsMalloc(a) malloc(a)
#define dsFree(a) free(a)
extern void StrUpper(char *s);
/* Min() and Max() macros */
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
/* Combined file name w/ line number */
#define TrFL __FILE__, __LINE__
/*=== MACRO for exit tracing ===*/
#define XOPENRETURN(BSAHandle,functionName,bsaRC,fileName,lineNumber) {sprintf(traceStr2,"%s EXIT: rc = >%d<.",functionName, bsaRC); ourTrace(BSAHandle,fileName,lineNumber,traceStr2); return(bsaRC);}
/* Define license error log file name */
#define TSMLicLog "tsmlic.log"
#define custMin_retcode 96
#define custMax_retcode 104
/*=======================================================
Function to places a trace message in the API tracefile,
the message includes the xopen file name and line number.
======================================================*/
void ourTrace(long BSAHandle,
char *fileName,
int lineNumber,
char *traceStr2);
/*================================================
Function to log events with call to dsmLogEventEx
===============================================*/
void ourLogEvent_Ex(dsUint32_t handle, dsmLogType type, char* msg,
char *appMsg, dsmLogSeverity severity);
/*=================================================================
Function to retrieve a message by routing to dsmRCMsg or stdXOpenMsgMap.
===============================================================*/
char* ourRCMsg(dsInt16_t dsmRC, char *msg);
/*====================================================
Function to build fully qualified license file name.
void build_lfname(char *lfname
========================================================*/
extern void build_lfname(char *lfname);
/*=== Function to deliver standard XOpen API message above API range. */
void stdXOpenMsgMap(dsInt16_t, char*);
#endif /* xbsa */

View File

@ -34,6 +34,22 @@ extern int debugLevel;
char resourceType[20] = "LFS FILE SYSTEM";
#define GOODSTR(s) ((s)?(s):"<NULL>")
#ifdef NEW_XBSA
BSA_Int16 (*XBSAInit)(long *, SecurityToken *, ObjectOwner *, char **);
BSA_Int16 (*XBSABeginTxn)(long);
BSA_Int16 (*XBSAEndTxn)(long, Vote);
BSA_Int16 (*XBSATerminate)(long);
BSA_Int16 (*XBSAQueryObject)(long, QueryDescriptor *, ObjectDescriptor *);
BSA_Int16 (*XBSAGetObject)(long, ObjectDescriptor *, DataBlock *);
BSA_Int16 (*XBSAEndData)(long);
BSA_Int16 (*XBSACreateObject)(long, ObjectDescriptor *, DataBlock *);
BSA_Int16 (*XBSADeleteObject)(long, CopyType, ObjectName *, CopyId *);
BSA_Int16 (*XBSAMarkObjectInactive)(long, ObjectName *);
BSA_Int16 (*XBSASendData)(long, DataBlock *);
BSA_Int16 (*XBSAGetData)(long, DataBlock *);
void (*XBSAQueryApiVersion)(ApiVersion *);
BSA_Int16 (*XBSAGetEnvironment)(long, ObjectOwner *, char **);
#else
BSA_Int16(*XBSAInit) (BSA_UInt32 *, SecurityToken *, ObjectOwner *, char **);
BSA_Int16(*XBSABeginTxn) (BSA_UInt32);
BSA_Int16(*XBSAEndTxn) (BSA_UInt32, Vote);
@ -49,7 +65,7 @@ BSA_Int16(*XBSASendData) (BSA_UInt32, DataBlock *);
BSA_Int16(*XBSAGetData) (BSA_UInt32, DataBlock *);
BSA_Int16(*XBSAQueryApiVersion) (ApiVersion *);
BSA_Int16(*XBSAGetEnvironment) (BSA_UInt32, ObjectOwner *, char **);
#endif
xbsa_error(int rc, struct butx_transactionInfo *info)
{
@ -122,6 +138,7 @@ xbsa_MountLibrary(struct butx_transactionInfo *info, afs_int32 serverType)
switch (serverType) {
case XBSA_SERVER_TYPE_ADSM:
#ifndef NEW_XBSA
#if defined(AFS_AIX_ENV)
dynlib =
dlopen("/usr/lib/libXApi.a(bsashr10.o)",
@ -136,6 +153,7 @@ xbsa_MountLibrary(struct butx_transactionInfo *info, afs_int32 serverType)
dynlib = dlopen("/usr/lib/libXApi.so", RTLD_NOW | RTLD_GLOBAL);
#else
dynlib = NULL;
#endif
#endif
break;
default:
@ -145,15 +163,18 @@ xbsa_MountLibrary(struct butx_transactionInfo *info, afs_int32 serverType)
break;
}
#ifndef NEW_XBSA
if (dynlib == NULL) {
ELog(0,
"xbsa_MountLibrary: The dlopen call to load the XBSA shared library failed\n");
return (BUTX_NOLIBRARY);
}
#endif
memset(info, 0, sizeof(struct butx_transactionInfo));
XBSA_SET_SERVER_TYPE(info->serverType, serverType);
#ifndef NEW_XBSA
#if defined(AFS_AIX_ENV) || defined(AFS_SUN5_ENV)
XBSAInit = (BSA_Int16(*)
(BSA_UInt32 *, SecurityToken *, ObjectOwner *,
@ -204,10 +225,40 @@ xbsa_MountLibrary(struct butx_transactionInfo *info, afs_int32 serverType)
"xbsa_MountLibrary: The dlopen call to load the XBSA shared library failed\n");
return (BUTX_NOLIBRARY);
}
XBSAQueryApiVersion(&(info->apiVersion));
#endif
#else
#if defined(AFS_AIX_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_LINUX26_ENV)
XBSAInit = BSAInit;
XBSABeginTxn = BSABeginTxn;
XBSAEndTxn = BSAEndTxn;
XBSATerminate = BSATerminate;
XBSAQueryObject = BSAQueryObject;
XBSAGetObject = BSAGetObject;
XBSAEndData = BSAEndData;
XBSACreateObject = BSACreateObject;
XBSAMarkObjectInactive = BSAMarkObjectInactive;
XBSADeleteObject = BSADeleteObject;
XBSASendData = BSASendData;
XBSAGetData = BSAGetData;
XBSAQueryApiVersion = BSAQueryApiVersion;
XBSAGetEnvironment = BSAGetEnvironment;
if (!XBSAInit || !XBSABeginTxn || !XBSAEndTxn || !XBSATerminate ||
!XBSAQueryObject || !XBSAGetObject || !XBSAEndData ||
!XBSACreateObject || !XBSADeleteObject || !XBSAMarkObjectInactive ||
!XBSASendData || !XBSAGetData || !XBSAQueryApiVersion ||
!XBSAGetEnvironment) {
ELog(0,"xbsa_MountLibrary: The dlopen call to load the XBSA shared library failed\n");
return(BUTX_NOLIBRARY);
}
XBSAQueryApiVersion(&(info->apiVersion));
#endif
#endif
#ifdef DEBUG_BUTC
printf("xbsa_MountLibrary : XBSA function Pointers initialised. \n");
#endif
/*
* Verify the API version
*/

View File

@ -38,7 +38,11 @@
#define XBSADFLTBUFFER 16384 /* default size is 16KB */
#define XBSAMAXBUFFER 65535 /* maximum size in 64KB-1; has to fit in 16bit integer */
#ifdef NEW_XBSA
#include "afsxbsa.h"
#else
#include <xbsa.h>
#endif
#define XBSA_NUM_ENV_STRS ADSM_ENV_STRS
#define XBSA_MAX_OSNAME BSA_MAX_OSNAME

View File

@ -8,7 +8,7 @@ SHLIB_SUFFIX="so"
CC="cc"
CCOBJ="cc"
MT_CC="cc"
XLIBS="${LIB_AFSDB}"
XLIBS="${LIB_AFSDB} ${XBSA_XLIBS}"
dnl debugging and optimization flag defaults
dnl Note, these are all the defaults for if debug/optimize turned on, and
@ -205,7 +205,6 @@ case $AFS_SYSNAME in
XCFLAGS="${XCFLAGS0} +DA1.0"
XLIBELFA="-lelf"
#XLIBS="${LIB_AFSDB} -lnsl"
XLIBS="${LIB_AFSDB}"
YACC="/opt/langtools/bin/yacc"
SHLIB_LINKER="ld -b"
;;
@ -237,7 +236,6 @@ case $AFS_SYSNAME in
XCFLAGS="${XCFLAGS0}"
XLIBELFA="-lelf"
#XLIBS="${LIB_AFSDB} -lnsl"
XLIBS="${LIB_AFSDB}"
YACC="/opt/langtools/bin/yacc"
SHLIB_LINKER="ld -b"
;;

View File

@ -30,7 +30,7 @@ VOLSERLIBS=${TOP_LIBDIR}/libvosadmin.a ${TOP_LIBDIR}/libafsadminutil.a
LWPOBJS =lock.o
BUTCOBJS =dbentries.o tcprocs.o lwps.o tcmain.o list.o recoverDb.o \
tcudbprocs.o dump.o tcstatus.o butc_xbsa.o \
tcudbprocs.o dump.o tcstatus.o butc_xbsa.o afsxbsa.o \
${LWPOBJS} ${BUCOORDOBJS} ${VOLSEROBJS}
BUTCINCLS=${TOP_INCDIR}/afs/partition.h \
@ -73,6 +73,9 @@ libbutm.a: ${BUTMOBJS} AFS_component_version_number.o
$(AR) crv libbutm.a $(BUTMOBJS) AFS_component_version_number.o
${RANLIB} libbutm.a
afsxbsa.o: ${BUTC}/afsxbsa.c ${BUTC}/afsxbsa.h ${BUTCINCLS}
${CC} ${CFLAGS} -c ${BUTC}/afsxbsa.c
dbentries.o: ${BUTC}/dbentries.c ${BUTCINCLS}
${CC} ${CFLAGS} -c ${BUTC}/dbentries.c