130 lines
3.6 KiB
C
130 lines
3.6 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001, 2011 Fidelity Information Services, Inc *
|
|
* *
|
|
* This source code contains the intellectual property *
|
|
* of its copyright holder(s), and is made available *
|
|
* under a license. If you do not know the terms of *
|
|
* the license, please stop and do not read further. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
#ifndef _GTMSECSHR
|
|
#define _GTMSECSHR
|
|
|
|
#define GTMSECSHR_MESG_TIMEOUT 30
|
|
#define GTMSECSHR_PERMS 0666
|
|
|
|
/* Exit codes from gtmsecshr */
|
|
#define NORMALEXIT 0
|
|
#define SETUIDROOT 1
|
|
#define SETGIDROOT 2
|
|
#define UNABLETOOPNLOGFILE 3
|
|
#define UNABLETODUPLOG 4
|
|
#define INVTRANSGTMSECSHR 5
|
|
#define UNABLETOEXECGTMSECSHR 6
|
|
#define GNDCHLDFORKFLD 7
|
|
#define UNABLETOOPNLOGFILEFTL 8
|
|
#define SEMGETERROR 9
|
|
#define SEMAPHORETAKEN 10
|
|
#define SYSLOGHASERRORDETAIL 11
|
|
#define UNABLETOCHDIR 12
|
|
|
|
/* return codes with gtmsecshr*/
|
|
#define INVLOGNAME 20
|
|
#define BINDERR 21
|
|
#define SOCKETERR 22
|
|
#define UNLINKERR 23
|
|
#define FTOKERR 24
|
|
|
|
/* special flag from gtmsecshr_sock_init for client if could not get normal socket name */
|
|
#define ONETIMESOCKET -1
|
|
|
|
/* arguments for gtmsecshr_sock_init */
|
|
#define SERVER 0
|
|
#define CLIENT 1
|
|
|
|
#define GTMSECSHR_LOG_DIR GTM_LOG_ENV
|
|
#define DEFAULT_GTMSECSHR_LOG_DIR DEFAULT_GTM_TMP
|
|
#define GTMSECSHR_LOG_PREFIX "gtm_secshr_log"
|
|
#define GTMSECSHR_SOCK_DIR GTM_TMP_ENV
|
|
#define DEFAULT_GTMSECSHR_SOCK_DIR DEFAULT_GTM_TMP
|
|
#define GTMSECSHR_SOCK_PREFIX "gtm_secshr"
|
|
#define GTMSECSHR_PATH GTM_DIST_LOG "/gtmsecshr"
|
|
|
|
#define ROOTUID 0
|
|
#define ROOTGID 0
|
|
|
|
#define ABSOLUTE_PATH(X) (X[0] == '/')
|
|
|
|
#ifdef SHORT_GTMSECSHR_TIMEOUT
|
|
#define MAX_TIMEOUT_VALUE 30
|
|
#else
|
|
#define MAX_TIMEOUT_VALUE 6000
|
|
#endif
|
|
|
|
#define MAX_ID_LEN 8
|
|
#define MAX_MESG 2048
|
|
#define MAX_GTMSECSHR_FAIL_MESG_LEN 70
|
|
#define MAX_SOCKFILE_NAME_LEN 25
|
|
|
|
typedef struct ipcs_mesg_struct {
|
|
int semid;
|
|
int shmid;
|
|
time_t gt_sem_ctime;
|
|
time_t gt_shm_ctime;
|
|
unsigned int fn_len;
|
|
char fn[MAX_TRANS_NAME_LEN];
|
|
} ipcs_mesg;
|
|
|
|
typedef struct gtmsecshr_mesg_struct {
|
|
int len; /* this is the whole hdr (4 ints) plus the mesg data */
|
|
int code;
|
|
int ack;
|
|
int pid;
|
|
unsigned long seqno;
|
|
union
|
|
{
|
|
long id;
|
|
char path[MAX_TRANS_NAME_LEN];
|
|
ipcs_mesg db_ipcs;
|
|
}mesg;
|
|
}gtmsecshr_mesg;
|
|
|
|
/* include <stddef.h> for offsetof() */
|
|
#define GTM_MESG_HDR_SIZE offsetof(gtmsecshr_mesg, mesg.id)
|
|
|
|
/* There should be NO deletions of messages types. Only replacements with the UNUSED_ prefix to signal disuse.
|
|
* This is because we want to maintain a static mapping between a given command and its corresponding message
|
|
* type number across all versions of GT.M (old and new). This way there is no chance of misinterpreting a command
|
|
* in case there is a version mismatch between the GT.M client and GTMSECSHR server processes.
|
|
*/
|
|
enum gtmsecshr_mesg_type{
|
|
WAKE_MESSAGE = 1,
|
|
UNUSED_CHECK_PROCESS_ALIVE,
|
|
REMOVE_SEM,
|
|
REMOVE_SHMMEM,
|
|
UNUSED_PING_MESSAGE,
|
|
REMOVE_FILE,
|
|
CONTINUE_PROCESS,
|
|
UNUSED_PING_MESG_RECVD,
|
|
FLUSH_DB_IPCS_INFO,
|
|
GTMSECSHR_MESG_COUNT
|
|
};
|
|
|
|
enum gtmsecshr_ack_type{
|
|
ACK_NOT_REQUIRED,
|
|
ACK_REQUIRED
|
|
};
|
|
|
|
void gtmsecshr_log(char *, int), gtmsecshr_exit(int, boolean_t), gtmsecshr_init(void), gtmsecshr_sig_init(void);
|
|
void gtmsecshr_switch_log_file(int);
|
|
int gtmsecshr_open_log_file(void), gtmsecshr_getenv(char *, char **);
|
|
int service_request(gtmsecshr_mesg *);
|
|
int4 gtmsecshr_sock_init(int caller);
|
|
void gtmsecshr_sock_cleanup(int);
|
|
int4 gtmsecshr_pathname_init(int caller);
|
|
int continue_proc(pid_t pid);
|
|
|
|
#endif
|