Пример #1
0
/*----------------------------------------------
 * d_c_cli_negated
 * disallow_check_cli_negated
 *
 * This is a wrapper for cli_negated to be used
 * from disallow functions (i.e. check_disallow
 * and those it calls).
 *
 * Mimicks NEG operator of VMS CLI.
 *
 * Do not use other than in *_disallow functions.
 *
 * Arguments:
 *	qualifier string
 *
 * Return:
 *	TRUE if negated,
 * 	FALSE otherwise
 *----------------------------------------------
 */
boolean_t d_c_cli_negated(char *str)
{
	boolean_t val;
	char *str_ptr;

	val = cli_negated(str);
	str_ptr = strchr(str,DOT);
	if (str_ptr)
		str_ptr++; /* skip the dot */
	else
		str_ptr = str;
	cli_err_strcat(str_ptr);
	return(val);
}
Пример #2
0
void	mupip_freeze(void)
{
	int4			status;
	bool			record;
	tp_region		*rptr, *rptr1;
	boolean_t		freeze, override;
	uint4			online;
	freeze_status		freeze_ret;
	int			dummy_errno;
	const char 		*msg1[] = { "unfreeze", "freeze" } ;
	const char 		*msg2[] = { "UNFROZEN", "FROZEN" } ;
	const char 		*msg3[] = { "unfrozen", "frozen" } ;

	status = SS_NORMAL;
	in_mupip_freeze = TRUE;
	UNIX_ONLY(jnlpool_init_needed = TRUE);
	mu_outofband_setup();
	gvinit();
	freeze = (CLI_PRESENT == cli_present("ON"));
	online = (CLI_PRESENT == cli_present("ONLINE"));
	if (online)
		online |= ((!cli_negated("AUTORELEASE")) ? CHILLED_AUTORELEASE_MASK : 0);
	if (CLI_PRESENT == cli_present("OFF"))
	{
		if (TRUE == freeze)
		{
			util_out_print("The /ON qualifier is invalid with the /OFF qualifier", TRUE);
			mupip_exit(ERR_MUPCLIERR);
		}
	}
	if (CLI_PRESENT == cli_present("RECORD"))
	{
		record = TRUE;
		if (FALSE == freeze)
		{
			util_out_print("The /RECORD qualifier is invalid with the /OFF qualifier", TRUE);
			mupip_exit(ERR_MUPCLIERR);
		}
	} else
		record = FALSE;
	if (CLI_PRESENT == cli_present("OVERRIDE"))
	{
		override = TRUE;
		if (freeze)
		{
			util_out_print("The /OVERRIDE qualifier is invalid with the /ON qualifier", TRUE);
			mupip_exit(ERR_MUPCLIERR);
		}
	} else
Пример #3
0
void get_cmd_qlf(command_qualifier *qualif)
{
	static readonly char upper[] = "UPPER";
	static readonly char lower[] = "LOWER";
	mstr *s;
	int temp_int;
	unsigned short len;
	unsigned char inbuf[255];

	qualif->qlf = glb_cmd_qlf.qlf;
	qualif->object_file.mvtype = qualif->list_file.mvtype = qualif->ceprep_file.mvtype = 0;
	if (cli_present("OBJECT") == CLI_PRESENT)
	{
		qualif->qlf |= CQ_OBJECT;
		qualif->object_file.mvtype = MV_STR;
		s = &qualif->object_file.str;
		len = s->len;
		if (cli_get_str("OBJECT", s->addr, &len) == FALSE)
		{
			s->len = 0;
			if (glb_cmd_qlf.object_file.mvtype == MV_STR  &&  glb_cmd_qlf.object_file.str.len > 0)
			{
				s->len = glb_cmd_qlf.object_file.str.len;
				memcpy(s->addr, glb_cmd_qlf.object_file.str.addr,
					s->len);
			}
		} else
			s->len = len;
	}
	else if (cli_negated("OBJECT") == TRUE)
		qualif->qlf &= ~CQ_OBJECT;


	if (cli_present("CROSS_REFERENCE") == CLI_PRESENT)
		qualif->qlf |= CQ_CROSS_REFERENCE;
	else if (cli_negated("CROSS_REFERENCE") == TRUE)
		qualif->qlf &= ~CQ_CROSS_REFERENCE;

	if (cli_negated("IGNORE") == TRUE)
		qualif->qlf &= ~CQ_IGNORE;
	else
		qualif->qlf |= CQ_IGNORE;

	if (cli_present("DEBUG") == CLI_PRESENT)
		qualif->qlf |= CQ_DEBUG;
	else if (cli_negated("DEBUG") == TRUE)
		qualif->qlf &= ~CQ_DEBUG;

	if (cli_negated("LINE_ENTRY") == TRUE)
		qualif->qlf &= ~CQ_LINE_ENTRY;

	if (cli_negated("INLINE_LITERALS") == TRUE)
		qualif->qlf &= ~CQ_INLINE_LITERALS;

#ifdef DEBUG
	if (cli_present("MACHINE_CODE") == CLI_PRESENT)
		qualif->qlf |= CQ_MACHINE_CODE;
	else if (cli_negated("MACHINE_CODE") == TRUE)
		qualif->qlf &= ~CQ_MACHINE_CODE;
#else
	qualif->qlf &= ~CQ_MACHINE_CODE;
#endif

	if (cli_negated("WARNINGS") == TRUE)
		qualif->qlf &= ~CQ_WARNINGS;
	else
		qualif->qlf |= CQ_WARNINGS;


	if (cli_negated("LIST") == TRUE)
		qualif->qlf &= (~CQ_LIST & ~CQ_MACHINE_CODE);
	else if (cli_present("LIST") == CLI_PRESENT)
	{	qualif->qlf |= CQ_LIST;
		qualif->list_file.mvtype = MV_STR;
		s = &qualif->list_file.str;
		len = s->len;
		if (cli_get_str("LIST", s->addr, &len) == FALSE)
		{
			s->len = 0;
			if (glb_cmd_qlf.list_file.mvtype == MV_STR  &&  glb_cmd_qlf.list_file.str.len > 0)
			{	s->len = glb_cmd_qlf.list_file.str.len;
				memcpy(s->addr, glb_cmd_qlf.list_file.str.addr,
					s->len);
			}
		} else
			s->len = len;
	}
	else if (!(qualif->qlf & CQ_LIST))
	{	qualif->qlf &= ~CQ_MACHINE_CODE;
	}
	if (cli_get_int("LENGTH",&temp_int) == FALSE)
		temp_int = 66;
	lst_param.lines_per_page = temp_int;
	if (cli_get_int("SPACE",&temp_int) == FALSE || temp_int <= 0 || temp_int >= lst_param.lines_per_page)
		temp_int = 1;
	lst_param.space = temp_int;

	if (cli_present("LABELS") == CLI_PRESENT)
	{
		len = sizeof(inbuf);
		if (cli_get_str("LABELS", (char *)&inbuf[0], &len))
		{
			if (len == sizeof(upper) - 1)
			{
				if (!memcmp(upper, &inbuf[0], len))
					qualif->qlf &= ~CQ_LOWER_LABELS;
				else if (!memcmp(lower, &inbuf[0], len))
					qualif->qlf |= CQ_LOWER_LABELS;
			}
		}
	}

	if (cli_present("CE_PREPROCESS") == CLI_PRESENT)
        {
		qualif->qlf |= CQ_CE_PREPROCESS;
		qualif->ceprep_file.mvtype = MV_STR;
		s = &qualif->ceprep_file.str;
		len = s->len;
		if (cli_get_str("CE_PREPROCESS", s->addr, &len) == FALSE)
		{
			s->len = 0;
			if (glb_cmd_qlf.ceprep_file.mvtype == MV_STR  &&  glb_cmd_qlf.ceprep_file.str.len > 0)
			{
				s->len = glb_cmd_qlf.ceprep_file.str.len;
				memcpy(s->addr, glb_cmd_qlf.ceprep_file.str.addr, s->len);
			}
		} else
			s->len = len;
	}
	else if (cli_negated("CE_PREPROCESS") == TRUE)
		qualif->qlf &= ~CQ_CE_PREPROCESS;
}
Пример #4
0
void mupip_backup(void)
{
	bool		journal;
	char		*tempdirname, *tempfilename, *ptr;
	uint4		level, blk, status, ret;
	unsigned short	s_len, length, ntries;
	int4		size, gds_ratio, buff_size, i, crit_counter;
	uint4		ustatus;
	size_t		backup_buf_size;
	trans_num	tn;
	backup_buff_ptr_t	bptr;
	static boolean_t	once = TRUE;
	backup_reg_list	*rptr, *clnup_ptr;
	boolean_t	inc_since_inc , inc_since_rec, result, newjnlfiles, gotit,
			newjnlfiles_specified, keep_prev_link, bkdbjnl_disable_specified, bkdbjnl_off_specified;
	unsigned char	since_buff[50];
	jnl_create_info jnl_info;
	file_control	*fc;
	char            tempdir_trans_buffer[MAX_TRANS_NAME_LEN],
			tempnam_prefix[MAX_FN_LEN], tempdir_full_buffer[MAX_FN_LEN + 1], jnl_file_name[JNL_NAME_SIZE];
	char		*jnl_str_ptr, rep_str[256], jnl_str[256], entry[256],
			full_jnl_fn[JNL_NAME_SIZE], prev_jnl_fn[JNL_NAME_SIZE];
	int		ccnt, index, comparison, num, jnl_fstat;
	mstr            tempdir_log, tempdir_trans, *file, tempdir_full, filestr;
	uint4		jnl_status, temp_file_name_len, tempdir_trans_len, trans_log_name_status;

#if defined(VMS)
	struct FAB	temp_fab;
	struct NAM	temp_nam;
	struct XABPRO	temp_xabpro;
	short		iosb[4];
	char		def_jnl_fn[MAX_FN_LEN];
	GDS_INFO	*gds_info;
	char		exp_file_name[MAX_FN_LEN];
	uint4		exp_file_name_len;
#elif defined(UNIX)
	struct stat     stat_buf;
	int		fstat_res;
	int		sync_io_status;
	boolean_t	sync_io, sync_io_specified;
#else
# error UNSUPPORTED PLATFORM
#endif
	boolean_t	jnl_options[jnl_end_of_list] = {FALSE, FALSE, FALSE}, save_no_prev_link;


	error_def(ERR_BACKUPCTRL);
	error_def(ERR_MUPCLIERR);
	error_def(ERR_FREEZECTRL);
	error_def(ERR_DBRDONLY);
	error_def(ERR_DBFILERR);
	error_def(ERR_MUNOACTION);
	error_def(ERR_MUNOFINISH);
	error_def(ERR_BACKUP2MANYKILL);
        error_def(ERR_MUSELFBKUP);
        error_def(ERR_JNLNOCREATE);
        error_def(ERR_JNLCREATE);
	error_def(ERR_PREVJNLLINKCUT);
	error_def(ERR_JNLSTATE);
	error_def(ERR_FILEEXISTS);
	error_def(ERR_JNLDISABLE);
	error_def(ERR_FILEPARSE);
	error_def(ERR_JNLFNF);
	error_def(ERR_NOTRNDMACC);

	/* ==================================== STEP 1. Initialization ======================================= */

	ret = SS_NORMAL;
	jnl_str_ptr = &jnl_str[0];
	halt_ptr = grlist = NULL;
	in_backup = TRUE;
	inc_since_inc = inc_since_rec = file_backed_up = error_mupip = FALSE;
	debug_mupip = (CLI_PRESENT == cli_present("DBG"));

	mu_outofband_setup();
	jnl_status = 0;
	if (once)
	{
		gvinit();
		once = FALSE;
	}

	/* ============================ STEP 2. Parse and construct grlist ================================== */

	if (incremental = (CLI_PRESENT == cli_present("INCREMENTAL") || CLI_PRESENT == cli_present("BYTESTREAM")))
	{
		int4 temp_tn;

		if (0 == cli_get_hex("TRANSACTION", &temp_tn))
		{
			temp_tn = 0;
			s_len = sizeof(since_buff);
			if (cli_get_str("SINCE", (char *)since_buff, &s_len))
			{
				lower_to_upper(since_buff, since_buff, s_len);
				if ((0 == memcmp(since_buff, "INCREMENTAL", s_len))
					|| (0 == memcmp(since_buff, "BYTESTREAM", s_len)))
					inc_since_inc = TRUE;
				else if (0 == memcmp(since_buff, "RECORD", s_len))
					inc_since_rec = TRUE;
			}
		} else if (temp_tn < 1)
		{
			util_out_print("The minimum allowable transaction number is one.", TRUE);
			mupip_exit(ERR_MUNOACTION);
		}
		tn = (trans_num)temp_tn;
	}
	online = (TRUE != cli_negated("ONLINE"));
	record = (CLI_PRESENT == cli_present("RECORD"));
	newjnlfiles_specified = FALSE;
	newjnlfiles = TRUE;	/* by default */
	keep_prev_link = TRUE;
	if (CLI_PRESENT == cli_present("NEWJNLFILES"))
	{
		newjnlfiles_specified = newjnlfiles = TRUE;
		if (CLI_NEGATED == cli_present("NEWJNLFILES.PREVLINK"))
			keep_prev_link = FALSE;
		UNIX_ONLY(
			sync_io_status = cli_present("NEWJNLFILES.SYNC_IO");
			sync_io_specified = TRUE;
			if (CLI_PRESENT == sync_io_status)
				sync_io = TRUE;
			else if (CLI_NEGATED == sync_io_status)
				sync_io = FALSE;
			else
				sync_io_specified = FALSE;
		)
	} else if (CLI_NEGATED == cli_present("NEWJNLFILES"))
Пример #5
0
void get_cmd_qlf(command_qualifier *qualif)
{
	static readonly char upper[] = "UPPER";
	static readonly char lower[] = "LOWER";
	mstr		*s;
	int4		temp_int;
	unsigned short	len;
	unsigned char	inbuf[255];

	qualif->qlf = glb_cmd_qlf.qlf;
	qualif->object_file.mvtype = qualif->list_file.mvtype = qualif->ceprep_file.mvtype = 0;
	INIT_QUALIF_STR(qualif, CQ_OBJECT, object_file);
	INIT_QUALIF_STR(qualif, CQ_LIST, list_file);
	INIT_QUALIF_STR(qualif, CQ_CE_PREPROCESS, ceprep_file);
	if (gtm_utf8_mode)
		qualif->qlf |= CQ_UTF8;		/* Mark as being compiled in UTF8 mode */
	if (cli_present("OBJECT") == CLI_PRESENT)
	{
		qualif->qlf |= CQ_OBJECT;
		qualif->object_file.mvtype = MV_STR;
		s = &qualif->object_file.str;
		len = s->len;
		if (cli_get_str("OBJECT", s->addr, &len) == FALSE)
		{
			s->len = 0;
			if (glb_cmd_qlf.object_file.mvtype == MV_STR  &&  glb_cmd_qlf.object_file.str.len > 0)
			{
				s->len = glb_cmd_qlf.object_file.str.len;
				memcpy(s->addr, glb_cmd_qlf.object_file.str.addr,
					s->len);
			}
		} else
			s->len = len;
	} else if (cli_negated("OBJECT") == TRUE)
		qualif->qlf &= ~CQ_OBJECT;


	if (cli_present("CROSS_REFERENCE") == CLI_PRESENT)
		qualif->qlf |= CQ_CROSS_REFERENCE;
	else if (cli_negated("CROSS_REFERENCE") == TRUE)
		qualif->qlf &= ~CQ_CROSS_REFERENCE;

	if (cli_negated("IGNORE") == TRUE)
		qualif->qlf &= ~CQ_IGNORE;
	else
		qualif->qlf |= CQ_IGNORE;

	if (cli_present("DEBUG") == CLI_PRESENT)
		qualif->qlf |= CQ_DEBUG;
	else if (cli_negated("DEBUG") == TRUE)
		qualif->qlf &= ~CQ_DEBUG;

	if (cli_negated("LINE_ENTRY") == TRUE)
		qualif->qlf &= ~CQ_LINE_ENTRY;

	if (cli_negated("INLINE_LITERALS") == TRUE)
		qualif->qlf &= ~CQ_INLINE_LITERALS;

	if (cli_negated("ALIGN_STRINGS") == TRUE)
		qualif->qlf &= ~CQ_ALIGN_STRINGS;

#ifdef DEBUG
	if (cli_present("MACHINE_CODE") == CLI_PRESENT)
		qualif->qlf |= CQ_MACHINE_CODE;
	else if (cli_negated("MACHINE_CODE") == TRUE)
		qualif->qlf &= ~CQ_MACHINE_CODE;
#else
	qualif->qlf &= ~CQ_MACHINE_CODE;
#endif

	if (cli_negated("WARNINGS") == TRUE)
		qualif->qlf &= ~CQ_WARNINGS;
	else
		qualif->qlf |= CQ_WARNINGS;


	if (cli_negated("LIST") == TRUE)
		qualif->qlf &= (~CQ_LIST & ~CQ_MACHINE_CODE);
	else if (cli_present("LIST") == CLI_PRESENT)
	{
		qualif->qlf |= CQ_LIST;
		qualif->list_file.mvtype = MV_STR;
		s = &qualif->list_file.str;
		len = s->len;
		if (cli_get_str("LIST", s->addr, &len) == FALSE)
		{
			s->len = 0;
			if (glb_cmd_qlf.list_file.mvtype == MV_STR  &&  glb_cmd_qlf.list_file.str.len > 0)
			{
				s->len = glb_cmd_qlf.list_file.str.len;
				memcpy(s->addr, glb_cmd_qlf.list_file.str.addr,
					s->len);
			}
		} else
			s->len = len;
	} else if (!(qualif->qlf & CQ_LIST))
		qualif->qlf &= ~CQ_MACHINE_CODE;

	if (cli_get_int("LENGTH",&temp_int) == FALSE)
		temp_int = 66;
	lst_param.lines_per_page = temp_int;
	if (cli_get_int("SPACE",&temp_int) == FALSE || temp_int <= 0 || temp_int >= lst_param.lines_per_page)
		temp_int = 1;
	lst_param.space = temp_int;

	if (cli_present("LABELS") == CLI_PRESENT)
	{
		len = SIZEOF(inbuf);
		if (cli_get_str("LABELS", (char *)&inbuf[0], &len))
		{
			if (len == SIZEOF(upper) - 1)
			{
				if (!memcmp(upper, &inbuf[0], len))
					qualif->qlf &= ~CQ_LOWER_LABELS;
				else if (!memcmp(lower, &inbuf[0], len))
					qualif->qlf |= CQ_LOWER_LABELS;
			}
		}
	}
#	ifdef UNIX
	if (CLI_PRESENT == cli_present("NAMEOFRTN"))
		qualif->qlf |= CQ_NAMEOFRTN;
#	endif
	if (cli_present("CE_PREPROCESS") == CLI_PRESENT)
        {
		qualif->qlf |= CQ_CE_PREPROCESS;
		qualif->ceprep_file.mvtype = MV_STR;
		s = &qualif->ceprep_file.str;
		len = s->len;
		if (cli_get_str("CE_PREPROCESS", s->addr, &len) == FALSE)
		{
			s->len = 0;
			if (glb_cmd_qlf.ceprep_file.mvtype == MV_STR  &&  glb_cmd_qlf.ceprep_file.str.len > 0)
			{
				s->len = glb_cmd_qlf.ceprep_file.str.len;
				memcpy(s->addr, glb_cmd_qlf.ceprep_file.str.addr, s->len);
			}
		} else
			s->len = len;
	} else if (cli_negated("CE_PREPROCESS") == TRUE)
		qualif->qlf &= ~CQ_CE_PREPROCESS;
#	ifdef USHBIN_SUPPORTED
	if (CLI_PRESENT == cli_present("DYNAMIC_LITERALS"))
		qualif->qlf |= CQ_DYNAMIC_LITERALS;
#	endif
#	ifdef UNIX
	if (CLI_PRESENT == cli_present("EMBED_SOURCE"))
		qualif->qlf |= CQ_EMBED_SOURCE;
	else if (cli_negated("EMBED_SOURCE"))
		qualif->qlf &= ~CQ_EMBED_SOURCE;
#	endif
}