4a0581937c3119340f517d93b382d2206ef02b08
[openafs.git] / src / butc / afsxbsa.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  *
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #ifndef _BSA_XBSA_H_
11 #define _BSA_XBSA_H_
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16
17 #if (SYS_V > 3) || defined(BERK4_2) || defined(SUN4)
18 #include <sys/time.h>
19 #else
20 #include <time.h>
21 #endif
22
23 #ifdef bool_t
24 #undef bool_t
25 #endif
26
27 /* include TSM Header Files. */
28 #include <dsmapitd.h>
29 #include <dsmapifp.h>
30 #include <dsmrc.h>
31
32 /* BSA_Boolean  */
33 typedef char BSA_Boolean;
34
35 /* BSA_Int16 */
36 typedef short BSA_Int16;
37
38 /* BSA_Int32 */
39 typedef long BSA_Int32;
40
41 /* BSA_Int64  */
42 typedef struct {    /* defined as two 32-bit integers */
43     BSA_Int32   left;
44     BSA_Int32   right;
45 } BSA_Int64;
46
47 /* BSA_UInt16  */
48 typedef unsigned short BSA_UInt16;
49
50 /* BSA_UInt32 */
51 typedef unsigned long BSA_UInt32;
52
53 /* BSA_UInt64  */
54 typedef struct {        /* defined as two unsigned 32-bit integers*/
55     BSA_UInt32  left;
56     BSA_UInt32  right;
57 } BSA_UInt64;
58
59 /*-------------------------------------------------------------------------+
60 |  ADSM specific constants and return codes                                |
61 +-------------------------------------------------------------------------*/
62 /* TSM library version, release, level
63  */
64 #define BSA_API_VERSION     5
65 #define BSA_API_RELEASE     2
66 #define BSA_API_LEVEL       0
67
68 /* Constants used  */
69 #define ADSM_MAX_DESC               100     /* ADSM max Desc size             */
70 #define ADSM_MAX_OBJINFO            100     /* ADSM max object info size      */
71 #define ADSM_LOWEST_BOUND           0x0000  /* value for LowerBound min       */
72 #define ADSM_HIGHEST_BOUND          0xFFFF  /* value for UpperBound max       */
73 #define ADSM_ENV_STRS               3       /* number of env strings          */
74 #define ObjectDescriptorVersion     1       /* ver for ObjectDescriptor       */
75 #define UserDescriptorVersion       1       /* ver for UserDescriptor         */
76 #define BSAObjectType_DATABASE      4       /*  ObjectType for Databases      */
77
78 /* Return Codes Used
79  */
80 #define BSA_RC_OK                           0x00
81 #define BSA_RC_SUCCESS                      0x00
82
83 #define ADSM_RC_ERROR                       0x60 /* see ADSM error log        */
84 #define ADSM_RC_INVALID_NODE                0x61 /* BSAObjOwner not match Init*/
85 #define ADSM_RC_INVALID_COPYTYPE            0x62 /* invalid copyType          */
86 #define ADSM_RC_INVALID_OBJTYPE             0x63 /* invalid objectType        */
87 #define ADSM_RC_INVALID_STATUS              0x64 /* invalid object status     */
88 #define ADSM_RC_INVALID_ST_VER              0x65 /* invalid structure version */
89 #define ADSM_RC_OWNER_TOO_LONG              0x66 /* owner too long            */
90 #define ADSM_RC_PSWD_TOO_LONG               0x67 /* pswd  too long            */
91 #define ADSM_RC_PSWD_GEN                    0x68 /* pswd access = generate    */
92
93 /* Constants used
94  *
95  * Maximum string lengths (lower bound), including trailing null
96  */
97 #define BSA_LIST_ELEMENT_DELIMITER  null    /* Element delimiter in list      */
98 #define BSA_MAX_ADMIN_NAME          64      /* Administrator name             */
99 #define BSA_MAX_APPOBJECT_OWNER     64      /* Max end-object owner length    */
100 #define BSA_MAX_BSAOBJECT_OWNER     64      /* Max BSA object owner length    */
101 #define BSA_MAX_CG_DEST             31      /* Copy group destination         */
102 #define BSA_MAX_CG_NAME             31      /* Max copy group name length     */
103 #define BSA_MAX_COPYGROUPS          16      /* Max number of copy groups      */
104                                             /* which can be specified in a    */
105                                             /* lifecycle group                */
106 #define BSA_MAX_DESC                256     /* Description field              */
107 #define BSA_MAX_ENCODINGMETHOD      31      /* Max encoding method length     */
108 #define BSA_MAX_EVENTINFO           256     /* Max event info size            */
109 #define BSA_MAX_FILTERRULESET       8192    /* Max filter rule set size       */
110 #define BSA_MAX_OSNAME              1024    /* Max Objectspace name length    */
111 #define BSA_MAX_LG_NAME             31      /* Life cycle group name          */
112 #define BSA_MAX_LIFECYCLEGROUPS     64      /* Max number of life cycle       */
113                                             /* groups in a policy set         */
114 #define BSA_MAX_OBJINFO             512     /* Max object info size           */
115 #define BSA_MAX_PATHNAME            1024    /* Max path name length           */
116 #define BSA_MAX_POLICYDOMAINS       256     /* Max number of specific policy  */
117                                             /* domains an administrator may   */
118                                             /* be responsible for             */
119 #define BSA_MAX_POLICYDOMAIN_NAME   31      /* Policy domain name             */
120 #define BSA_MAX_POLICYSETS          16      /* Max number of policy sets      */
121                                             /* in a domain                    */
122 #define BSA_MAX_POLICYSET_NAME      31      /* Policy set name                */
123 #define BSA_MAX_RESOURCETYPE        31      /* Max resource mgr name length   */
124 #define BSA_MAX_TOKEN_SIZE          64      /* Max size of a security token   */
125 #define BSA_PUBLIC              "BSA_ANY"   /* Default string                 */
126
127 /* Return Codes Used
128  *
129  * Return Code descriptions are given in Section 4.3.
130  */
131 #define BSA_RC_ABORT_ACTIVE_NOT_FOUND       0x02
132 #define BSA_RC_ABORT_SYSTEM_ERROR           0x03
133 #define BSA_RC_AUTHENTICATION_FAILURE       0x04
134 #define BSA_RC_BAD_CALL_SEQUENCE            0x05
135 #define BSA_RC_BAD_HANDLE                   0x06
136 #define BSA_RC_BUFFER_TOO_SMALL             0x07
137 #define BSA_RC_DESC_TOO_LONG                0x08
138 #define BSA_RC_OBJECTSPACE_TOO_LONG         0x09
139 #define BSA_RC_INVALID_TOKEN                0x0a
140 #define BSA_RC_INVALID_VOTE                 0x0b
141 #define BSA_RC_INVALID_KEYWORD              0x0c
142 #define BSA_RC_MATCH_EXISTS                 0x0d
143 #define BSA_RC_MORE_DATA                    0x0e
144 #define BSA_RC_MORE_RULES                   0x0f
145 #define BSA_RC_NEWTOKEN_REQD                0x10
146 #define BSA_RC_NO_MATCH                     0x11
147 #define BSA_RC_NO_MORE_DATA                 0x12
148 #define BSA_RC_NO_RESOURCES                 0x13
149 #define BSA_RC_NULL_DATABLKPTR              0x14
150 #define BSA_RC_NULL_OBJNAME                 0x15
151 #define BSA_RC_NULL_POINTER                 0x16
152 #define BSA_RC_NULL_RULEID                  0x17
153 #define BSA_RC_OBJECT_NAME_TOO_LONG         0x18
154 #define BSA_RC_OBJECT_NOT_EMPTY             0x19
155 #define BSA_RC_OBJECT_NOT_FOUND             0x1a
156 #define BSA_RC_OBJINFO_TOO_LONG             0x1b
157 #define BSA_RC_OBJNAME_TOO_LONG             0x1c
158 #define BSA_RC_OPERATION_NOT_AUTHORIZED     0x1d
159 #define BSA_RC_OLDTOKEN_REQD                0x1e
160 #define BSA_RC_TOKEN_EXPIRED                0x1f
161 #define BSA_RC_TXN_ABORTED                  0x20
162 #define BSA_RC_UNMATCHED_QUOTE              0x21
163 #define BSA_RC_USER_OWNS_OBJECTS            0x22
164
165 /* AppObjectOwner
166  */
167 typedef char AppObjectOwner[BSA_MAX_APPOBJECT_OWNER];
168
169 /* BSAObjectOwner
170  */
171 typedef char BSAObjectOwner[BSA_MAX_BSAOBJECT_OWNER];
172
173 /* CopyGpDest
174  */
175 typedef char CopyGpDest[BSA_MAX_CG_DEST];
176
177 /* CopyGpName
178  */
179 typedef char CopyGpName[BSA_MAX_CG_NAME];
180
181 /* CopyMode
182  *
183  * Constant     Value     Explanation
184  * --------     -----     -----------
185  * INCREMENTAL  1         Specifies that the Backup Services should make a
186  *                        copy only if the application object has been
187  *                        modified since the last time this copy group was
188  *                        used to create the object's copy.
189  * ABSOLUTE     2         Specifies that the Backup Services should make a
190  *                        copy even if the application object has not been
191  *                        modified since the last time this copy group was
192  *                        used to create the object's copy.
193  */
194 typedef enum {
195     BSACopyMode_INCREMENTAL = 1,
196     BSACopyMode_ABSOLUTE = 2
197 } CopyMode;
198
199 /* CopySerialization
200  *
201  * Constant     Value     Explanation
202  * --------     -----     -----------
203  * STATIC       1         Specifies that the Backup Services must create a
204  *                        consistent (unmodified during the operation) copy of
205  *                        the object.  If the application is unable to create a
206  *                        consistent copy then it should skip the operation
207  *                        (creating backup or archive copy) for the object.
208  * SHAREDSTATIC 2         Specifies that the Backup Services must create a
209  *                        consistent copy of the object.  It can retry the
210  *                        operation a number of times (application dependent).
211  *                        If the Backup Services is unable to create a
212  *                        consistent copy even after retries, then it should
213  *                        skip creating a backup or archive copy of the
214  *                        object.
215  * SHAREDDYNAMIC 3        Specifies that the Backup Services must create a
216  *                        copy of the object.  It can retry the operation a
217  *                        number of times in an attempt to create a consistent
218  *                        copy; however, if it fails to make a consistent
219  *                        copy, a copy must still be made, ignoring the fact
220  *                        that the copy may have been modified during the
221  *                        operation.  Such copies are useful for log file
222  *                        objects which are being continuously modified.
223  * DYNAMIC      4         Specifies that the Backup Services must create a
224  *                        copy of the obbject even if the source object is
225  *                        modified during the operation.  No retries should be
226  *                        attempted to create a consistent copy.
227  */
228 typedef enum {
229     BSACopySerialization_STATIC = 1,
230     BSACopySerialization_SHAREDSTATIC = 2,
231     BSACopySerialization_SHAREDDYNAMIC = 3,
232     BSACopySerialization_DYNAMIC = 4
233 } CopySerialization;
234
235 /* CopyType
236  *
237  * Constant     Value     Explanation
238  * --------     -----     -----------
239  * ANY          1         Used for matching any copy type (e.g. "backup" or
240  *                        "archive" in the copy type field of structures for
241  *                        selecting query results).
242  * ARCHIVE      2         Specifies that the copy type should be "archive".
243  *                        When used in the copy type field of the CopyGroup,
244  *                        it identifies the copy data as of type
245  *                        ArchiveCopyData, which is used to create archive
246  *                        copies.
247  * BACKUP       3         Specifies that the copy type should be "backup".
248  *                        When used in the copy type field of the CopyGroup,
249  *                        it identifies the copy data as of type
250  *                        BackupCopyData, which is used to create backup
251  *                        copies.
252  */
253 typedef enum {
254     BSACopyType_ANY = 1,
255     BSACopyType_ARCHIVE = 2,
256     BSACopyType_BACKUP = 3
257 } CopyType;
258
259 /* Description
260  */
261 typedef char Description[BSA_MAX_DESC];
262
263 /* DomainName
264  */
265 typedef char * DomainName[BSA_MAX_POLICYDOMAIN_NAME];
266
267 /* EventInfo
268  */
269 typedef char EventInfo[BSA_MAX_EVENTINFO];
270
271 /* LGName
272  */
273 typedef char LGName[BSA_MAX_LG_NAME];
274
275 /* ObjectInfo
276  */
277 typedef char ObjectInfo[BSA_MAX_OBJINFO];
278
279 /* ObjectName
280  */
281 typedef struct {
282     char    objectSpaceName[BSA_MAX_OSNAME]; /* Highest-level name qualifier */
283     char    pathName[BSA_MAX_PATHNAME];      /* Object name within           */
284                                              /* objectspace                  */
285 } ObjectName;
286
287 /* ObjectOwner
288  */
289 typedef struct {
290     BSAObjectOwner  bsaObjectOwner;    /* BSA Owner name - this is the name  */
291                                        /* that Backup Services authenticates */
292     AppObjectOwner  appObjectOwner;    /* End-owner name, this is the name   */
293                                        /* defined by the application         */
294 } ObjectOwner;
295
296 /* ObjectSize
297  */
298 typedef BSA_UInt64 ObjectSize;         /* Unsigned 64-bit integer */
299
300 /* ObjectStatus
301  *
302  * Constant     Value     Explanation
303  * --------     -----     -----------
304  * ANY          1         Provides a wild card function.  Can only be used in
305  *                        queries.
306  * ACTIVE       2         Indicates that this is the most recent backup copy
307  *                        of an object.
308  * INACTIVE     3         Indicates that this is not the most recent backup
309  *                        copy, or that the object itself no longer exists.
310  */
311 typedef enum {
312     BSAObjectStatus_ANY = 1,
313     BSAObjectStatus_ACTIVE = 2,
314     BSAObjectStatus_INACTIVE = 3
315 } ObjectStatus;
316
317 /* ObjectType
318  *
319  * Constant     Value     Explanation
320  * --------     -----     -----------
321  * any          1         Used for matching any object type (e.g. "file" or
322  *                        "directory") value in the object type field of
323  *                        structures for selecting query results.
324  * file         2         Used by the application to indicate that the type of
325  *                        application object is a "file" or single object.
326  * directory    3         Used by the application to indicate that the type of
327  *                        application object is a "directory" or container of
328  *                        objects.
329  */
330
331 typedef enum {
332     BSAObjectType_ANY  = 1,
333     BSAObjectType_FILE    = 2,
334     BSAObjectType_DIRECTORY = 3
335  } ObjectType;
336
337 /* Operation
338  *
339  * Constant     Value     Explanation
340  * --------     -----     -----------
341  * archive      1         Used to indicate that a scheduled operation is of
342  *                        type "archive".
343  * backup       2         Used to indicate that a scheduled operation is of
344  *                        type "backup".
345  */
346 typedef enum {
347     BSAOperation_ARCHIVE = 1,
348     BSAOperation_BACKUP  = 2
349 } Operation;
350
351 /* Period
352  *
353  * Use of the Period structure in a Schedule for an event:
354  * 1. The Schedule structure specifies 3 timing elements:
355  *    a. "firstStartTime" - a timestamp showing the "earliest"
356  *        possible time the event could take place
357  *    b. "day" - the day of the week the event should occur
358  *    c. "frequency" - the period between successive events
359  * 2. To determine the day the event should occur (this does
360  *    not change the time of the event in the day):
361  *    a. Determine the requested day from "firstStartTime".
362  *    b. If "day" does not equal XBSA_DAYOFWEEK_ANY
363  *       i. Compare "day" to the day of the week corresponding
364  *          to "firstStartTime" determined in 2a above.
365  *       ii.If the days match, then use "firstStartTime" else
366  *          use the first "day" *following* the day shown
367  *          in "firstStartTime" as the day of the event.
368  * 3. If the PeriodWhich field in the Period structure is other
369  *    than XBSA_PERIOD_UNDEFINED, then successive events are
370  *    determined using the value of "periodData".
371  *    a. For seconds and days, the appropriate seconds or days
372  *       are added to the "firstStartTime" and step 2 to correct
373  *       for the day of the week (if needed) is applied again.
374  *    b. If a monthly period is specified, then the appropriate
375  *       number of months are added by incrementing the month index is
376  *       made (for example, a one month increment from February to
377  *       March).  If the monthly date is not valid (for example, January
378  *       30 --> February 30) then the last day of the desired month is
379  *       used (example January 30 --> February 28).  Then step 2 is
380  *       followed to adjust for the requested day (which might move the
381  *       event time into the following month).
382  */
383 typedef enum {
384     BSAPeriod_SECONDS = 1,
385     BSAPeriod_DAYS = 2,
386     BSAPeriod_MONTHS = 3,
387     BSAPeriod_UNDEFINED = -9,
388     BSAPeriod_DAILY = 4, BSAPeriod_WEEKLY = 5, BSAPeriod_MONTHLY = 6,
389     BSAPeriod_QUARTERLY = 7, BSAPeriod_ANNUALLY = 8
390 } PeriodWhich;
391
392 typedef struct {
393     PeriodWhich     which;
394     union {
395         time_t      nSeconds;
396         BSA_Int16   nDays;
397         BSA_Int16   nMonths;
398     } periodData;
399 } Period;
400
401 /* ResourceType
402  */
403 typedef char ResourceType[BSA_MAX_RESOURCETYPE];
404
405 /* RuleId
406  */
407 typedef BSA_UInt64 RuleId;
408
409 /* Scheduleid
410  */
411 typedef BSA_UInt64 ScheduleId;
412
413 /* AccessRight
414  *
415  * Constant     Value     Explanation
416  * --------     -----     -----------
417  * GET          1         Access right for getting an object from Backup
418  *                        Services, also includes access right for querying
419  *                        (getting attributes) an object from Backup Services.
420  * QUERY        2         Access right for querying (getting attributes) an
421  *                        object from Backup Services.
422  */
423 typedef enum {
424     BSAAccessRight_GET  = 1,
425     BSAAcessRight_QUERY = 2
426 } AccessRight;
427
428 /* AccessRule
429  */
430 typedef struct {
431     RuleId          ruleId;         /* Provided by Backup Services            */
432     ObjectName      objName;        /* Object name to be given access         */
433     ObjectOwner     objectOwner;    /* BSA object owner and Applicaton object */
434                                     /* owner to be given access               */
435     AccessRight     rights;         /* The access rights to be given          */
436 } AccessRule;
437
438 /* ApiVersion
439  */
440 typedef struct {
441     BSA_UInt16      version;        /* Version of this API                    */
442     BSA_UInt16      release;        /* Release of this API                    */
443     BSA_UInt16      level;          /* Level of this API                      */
444 } ApiVersion;
445
446 /* ArchiveCopyData
447  */
448 typedef struct {
449     CopyGpName          cGName;     /* Copy group name                        */
450     BSA_UInt16          freq;       /* Archive frequency                      */
451     CopySerialization   copySer;    /* Copy serialization code                */
452     CopyMode            copyMode;   /* Copy mode                              */
453     CopyGpDest          destName;   /* Copy destination name                  */
454     BSA_UInt16          retVersion; /* Retention time for the version         */
455 } ArchiveCopyData;
456
457 /* BackupCopyData
458  */
459 typedef struct {
460     CopyGpName          cGName;     /* Copy group name                        */
461     BSA_UInt16          freq;       /* Backup frequency                       */
462     CopySerialization   copySer;    /* Copy serialization code                */
463     CopyMode            copyMode;   /* Copy mode: 1=modified, 2=absolute      */
464     CopyGpDest          destName;   /* Copy destination name                  */
465     BSA_UInt16          verDataEx;  /* Versions (number of versions           */
466                                     /* retained)                              */
467     BSA_UInt16          verDataDel; /* Versions (data deleted)                */
468     Period              retXtraVer; /* Retain extra versions                  */
469     Period              retOnlyVer; /* Retain only versions                   */
470 } BackupCopyData;
471
472 /* CopyGroup
473  */
474 typedef struct {
475     CopyType    copyType;       /* Type of copy group: archive, backup, etc   */
476     union {
477         ArchiveCopyData archive;
478         BackupCopyData  backup;
479     } copyData;
480 } CopyGroup;
481
482 /* CopyId
483  */
484 typedef BSA_UInt64      CopyId;
485
486 /* DataBlock
487  */
488 typedef struct {
489     BSA_UInt16  bufferLen;
490     BSA_UInt16  numBytes;       /* Actual number of bytes read from */
491                                 /* or written to the buffer, or the */
492                                 /* minimum number of bytes needed   */
493     char *      bufferPtr;
494 } DataBlock;
495
496 /* DayOfWeek
497  */
498 typedef enum {
499     BSADayOfWeek_Monday = 1,    BSADayOfWeek_Tuesday = 2,
500     BSADayOfWeek_Wednesday = 3, BSADayOfWeek_Thursday = 4,
501     BSADayOfWeek_Friday = 5,    BSADayOfWeek_Saturday = 6,
502     BSADayOfWeek_Sunday = 7
503 } DayOfWeek;
504
505 /* Environment
506  */
507 typedef struct {
508     char * envVariables; /* Identifies the Backup Services instance and other */
509                          /* implementation-dependent variables such as        */
510                          /* communication ports, etc.  Each variable is a     */
511                          /* (keyword, value) pair separated by a space.       */
512                          /* If a value contains spaces, it must be            */
513                          /* enclosed in single or double quotes.              */
514 } BSAEnvironment;
515
516 /* Event
517  */
518 typedef struct {
519     BSA_UInt32      eventId;    /* This is an internal (to Backup Services) id*/
520     ObjectOwner     objectOwner;/* Identifies the owner of the event          */
521     struct tm       time;       /* Identifies the time the action is to start */
522     Operation       action;     /* Identifies the action (backup, archive)    */
523     ObjectName      objName;    /* Identifies objects to be acted on          */
524     ResourceType    resourceType;/* Identifies the resource manager for the   */
525                                  /* event                                     */
526     EventInfo       eventInfo;  /* User- and resource-manager-specific info   */
527 } BSAEvent;
528
529 /* MethodName
530  */
531 typedef char EncodingMethod[BSA_MAX_ENCODINGMETHOD];
532
533 /* ObjectDescriptor
534  */
535 typedef struct {
536     BSA_UInt32      version;        /* Version number for this structure      */
537     ObjectOwner     Owner;          /* Owner of the object                    */
538     ObjectName      objName;        /* Object name                            */
539     struct tm       createTime;     /* Supplied by Backup Services            */
540     CopyType        copyType;       /* Copy type: archive or backup           */
541     CopyId          copyId;         /* Supplied by Backup Services            */
542     BSA_UInt64      restoreOrder;   /* Supplied by Backup Services            */
543     LGName          lGName;         /* Associated Lifecycle Group name        */
544     CopyGpName      cGName;         /* Copy group within the lifecycle group  */
545     ObjectSize      size;           /* Object size may be up to 63 bits       */
546     ResourceType    resourceType;   /* e.g. UNIX file system                  */
547     ObjectType      objectType;     /* e.g. file, directory, etc.             */
548     ObjectStatus    status;         /* Active/inactive, supplied by           */
549                                     /* Backup Services                        */
550     EncodingMethod * encodingList;  /* List of encoding Methods used, in      */
551                                     /* application-defined order,             */
552                                     /* terminated with a null entry           */
553     Description     desc;           /* Descriptive label for the object       */
554     ObjectInfo      objectInfo;     /* Application information                */
555 } ObjectDescriptor;
556
557 /* QueryDescriptor
558  */
559 typedef struct {
560     ObjectOwner     owner;          /* Owner of the object                    */
561     ObjectName      objName;        /* Object name                            */
562     struct tm       createTimeLB;   /* Lower bound on create time             */
563     struct tm       createTimeUB;   /* Upper bound on create time             */
564     struct tm       expireTimeLB;   /* Lower bound on expiration time         */
565     struct tm       expireTimeUB;   /* Upper bound on expiration time         */
566     CopyType        copyType;       /* Copy type: archive or backup           */
567     LGName          lGName;         /* Associated Lifecycle Group name        */
568     CopyGpName      cGName;         /* Copy group within the lifecycle group  */
569     ResourceType    resourceType;   /* e.g. UNIX file system                  */
570     ObjectType      objectType;     /* e.g. file, directory, etc.             */
571     ObjectStatus    status;         /* Active/inactive, supplied by Backup    */
572                                     /* Services                               */
573     Description     desc;           /* Descriptive label for the object       */
574 } QueryDescriptor;                  /* "*" is interpreted as a meta character */
575                                     /* wild card.                             */
576                                     /* Any undefined value is interpreted as  */
577                                     /* an error.                              */
578
579 /* Schedule
580  */
581 typedef struct {
582     ScheduleId      schedId;        /* Provided by Backup Services            */
583     ObjectOwner     objectOwner;    /* Specifies the owner of the schedule    */
584     Operation       operation;      /* Specifies the action to be taken       */
585     struct tm       firstStartTime; /* Specifies the first time the action    */
586                                     /* is to take place                       */
587     DayOfWeek       day;            /* Specifies the day of week for the event*/
588     Period          frequency;      /* Specifies the frequency, e.g. daily    */
589     ObjectName      objectName;     /* Identifies objects to be acted on      */
590     ResourceType    resourceType;   /* Identifies the resource manager for the*/
591                                     /* schedule                               */
592     EventInfo       scheduleInfo;   /* Resource manager specific information  */
593 } Schedule;
594
595 /* Security Token
596  */
597 typedef char SecurityToken[BSA_MAX_TOKEN_SIZE];
598
599 /* StreamHandle
600  */
601 typedef int StreamHandle;
602
603 /* UserDescriptor
604  */
605 typedef struct t_UserDescriptor {
606     BSA_UInt16      version;        /* Version num of this structure          */
607     BSAObjectOwner  bsaObjectOwner; /* BSA Object owner name              */
608     DomainName      domainName;     /* Policy domain for the user         */
609     Description     desc;           /* User information                   */
610 } UserDescriptor;
611
612 /* Vote
613  */
614 typedef enum {
615     BSAVote_COMMIT = 1,
616     BSAVote_ABORT  = 2
617 } Vote;
618
619 /* Function Prototypes for Data Movement API Subset
620  * Note that int and long have been replaced with typedefs
621  * from custom.h.
622  */
623
624 extern BSA_Int16
625 BSABeginTxn
626 (      long              bsaHandle
627 );
628
629 extern BSA_Int16
630 BSAChangeToken
631 (      long              bsaHandle,
632        SecurityToken    *oldTokenPtr,
633        SecurityToken    *newTokenPtr
634 );
635
636 extern BSA_Int16
637 BSACreateObject
638 (      long              bsaHandle,
639        ObjectDescriptor *objectDescriptorPtr,
640        DataBlock        *dataBlockPtr
641 );
642
643 extern BSA_Int16
644 BSACreateObjectF
645 (      long              bsaHandle,
646        ObjectDescriptor *objectDescriptorPtr,
647        StreamHandle     *streamPtr
648 );
649
650 extern BSA_Int16
651 BSADeleteObject
652 (      long              bsaHandle,
653        CopyType          copyType,
654        ObjectName       *objectName,
655        CopyId           *copyId
656 );
657
658 extern BSA_Int16
659 BSAEndData
660 (      long              bsaHandle
661 );
662
663 extern BSA_Int16
664 BSAEndTxn
665 (      long              bsaHandle,
666        Vote              vote
667 );
668
669 extern BSA_Int16
670 BSAGetData
671 (      long              bsaHandle,
672        DataBlock        *dataBlockPtr
673 );
674
675 extern BSA_Int16
676 BSAGetEnvironment
677 (      long              bsaHandle,
678        ObjectOwner      *objectOwnerPtr,
679        char            **environmentPtr
680 );
681
682 extern BSA_Int16
683 BSAGetNextQueryObject
684 (      long              bsaHandle,
685        ObjectDescriptor *objectDescriptorPtr
686 );
687
688 extern BSA_Int16
689 BSAGetObject
690 (      long              bsaHandle,
691        ObjectDescriptor *objectDescriptorPtr,
692        DataBlock        *dataBlockPtr
693 );
694
695 extern BSA_Int16
696 BSAGetObjectF
697 (      long              bsaHandle,
698        ObjectDescriptor *objectDescriptorPtr,
699        StreamHandle     *streamPtr
700 );
701
702 extern BSA_Int16
703 BSAInit
704 (      long             *bsaHandleP,
705        SecurityToken    *tokenPtr,
706        ObjectOwner      *objectOwnerPtr,
707        char            **environmentPtr
708 );
709
710 extern BSA_Int16
711 BSAMarkObjectInactive
712 (      long              bsaHandle,
713        ObjectName       *objectNamePtr
714 );
715
716 extern void
717 BSAQueryApiVersion
718 (      ApiVersion       *apiVersionPtr
719 );
720
721 extern BSA_Int16
722 BSAQueryObject
723 (      long              bsaHandle,
724        QueryDescriptor  *queryDescriptorPtr,
725        ObjectDescriptor *objectDescriptorPtr
726 );
727
728 extern BSA_Int16
729 BSASendData
730 (      long              bsaHandle,
731        DataBlock        *dataBlockPtr
732 );
733
734 extern BSA_Int16
735 BSASetEnvironment
736 (      long              bsaHandle,
737        char            **environmentPtr
738 );
739
740 extern BSA_Int16
741 BSATerminate
742 (      long              bsaHandle
743 );
744
745 extern BSA_Int16
746 BSAResolveLifecycleGroup(
747     long              BSAHandle,
748     ObjectDescriptor *BSAobjDescP
749 );
750
751 #ifdef __cplusplus
752 }
753 #endif
754
755 typedef struct
756 {
757   ApiSessInfo      dsmSessInfo;
758   BSAObjectOwner   bsaObjectOwner; /* node value on BSAInit */
759   dsUint16_t       sessFlags;      /* misc flags            */
760   dsUint8_t        oper;        /* send or recv operation */
761   CopyType         copyType;    /* Backup or Archive type */
762   char             *nextQryP;    /* ptr to respArchive or respBackup */
763 } xGlobal;
764
765 /*  flag masks for sessFlags    */
766 /*  to set on use   sessFlags = (sessFlags | FL_IN_BSA_TXN) */
767 /*  to set off use  sessFlags = (sessFlags ^ FL_IN_BSA_TXN) */
768 /*  to test on use  if (sessFlags & FL_IN_BSA_TXN) */
769 #define  FL_IN_BSA_TXN     0x0001  /* within a BSA type txn            */
770 #define  FL_IN_DSM_TXN     0x0002  /* within a actual ADSM txn         */
771 #define  FL_IN_BSA_QRY     0x0004  /* within a query txn               */
772 #define  FL_PSWD_EXPIRE    0x0008  /* pswd has expired                 */
773 #define  FL_RC_WILL_ABORT  0x0010  /* recvd 157 on SendObj or SendData */
774 #define  FL_END_DATA_DONE  0x0020  /* Get error already did EndData    */
775
776 #define OPER_NONE            0    /* values for oper field  */
777 #define OPER_SEND_START      1
778 #define OPER_SEND_ISSUED     2
779 #define OPER_RECV_START      3
780 #define OPER_RECV_ISSUED     4
781
782 /*  structure def for objInfo  - max len = 255 */
783 typedef struct
784 {
785   ResourceType     resourceType;                       /*  31 bytes */
786   ObjectSize       size;                               /*   8 bytes */
787   char             partDesc[ADSM_MAX_DESC];            /* 100 bytes */
788   char             partObjInfo[ADSM_MAX_OBJINFO];      /* 100 bytes */
789 } XAPIObjInfo;
790
791 /* ******* G l o b a l s  ********  */
792
793 /* xGlobal xopenGbl; */
794
795 extern BSA_Int16 xlateRC(
796     long      BSAHandle,
797     BSA_Int16 dsmRC,
798     BSA_Int16 *bsaRCP);
799
800 extern BSA_Int16 xparsePath(
801     long     BSAHandle,
802     char          *pathname,
803     char          *hl,
804     char          *ll);
805
806 extern xGlobal        xopenGbl;
807 extern char           traceStr[];
808 extern char           traceStr1[];
809 extern char           traceStr2[];
810
811 #define dsMalloc(a)   malloc(a)
812 #define dsFree(a)     free(a)
813
814 extern void StrUpper(char *s);
815 /* Min() and Max() macros */
816 #ifndef min
817 #define min(a,b)  (((a) < (b)) ? (a) : (b))
818 #endif
819
820 #ifndef max
821 #define max(a,b)  (((a) > (b)) ? (a) : (b))
822 #endif
823
824 /* Combined file name w/ line number */
825 #define TrFL __FILE__, __LINE__
826
827 /*=== MACRO for exit tracing ===*/
828 #define XOPENRETURN(BSAHandle,functionName,bsaRC,fileName,lineNumber) {sprintf(traceStr2,"%s EXIT: rc = >%d<.",functionName, bsaRC); ourTrace(BSAHandle,fileName,lineNumber,traceStr2); return(bsaRC);}
829
830 /* Define license error log file name */
831 #define TSMLicLog "tsmlic.log"
832
833 #define custMin_retcode  96
834 #define custMax_retcode  104
835
836 /*=======================================================
837  Function to places a trace message in the API tracefile,
838  the message includes the xopen file name and line number.
839  ======================================================*/
840 void ourTrace(long           BSAHandle,
841               char          *fileName,
842               int            lineNumber,
843               char          *traceStr2);
844
845 /*================================================
846  Function to log events with call to dsmLogEventEx
847  ===============================================*/
848 void ourLogEvent_Ex(dsUint32_t handle, dsmLogType type, char* msg,
849                  char *appMsg, dsmLogSeverity severity);
850
851 /*=================================================================
852  Function to retrieve a message by routing to dsmRCMsg or stdXOpenMsgMap.
853  ===============================================================*/
854 char* ourRCMsg(dsInt16_t dsmRC, char *msg);
855
856 /*====================================================
857  Function to build fully qualified license file name.
858  void build_lfname(char *lfname
859  ========================================================*/
860 extern void build_lfname(char *lfname);
861
862 /*=== Function to deliver standard XOpen API message above API range. */
863 void stdXOpenMsgMap(dsInt16_t, char*);
864
865
866 #endif /* xbsa */