Пример #1
0
GSTATUS 
DDSDeleteAssUserDB (
	u_i4 user_id, 
	u_i4 db_id) 
{
	GSTATUS err = GSTAT_OK;

	err = DDFSemOpen(&dds_semaphore, TRUE);
	if (err == GSTAT_OK) 
	{
		err = DDGDelete(
				&dds_session, 
				DDS_OBJ_ASS_USER_DB, 
				"%d%d", 
				&user_id, 
				&db_id);

		if (err == GSTAT_OK)
			err = DDSMemDeleteAssUserDB(user_id, db_id);

		if (err == GSTAT_OK) 
			err = DDGCommit(&dds_session);
		else 
			CLEAR_STATUS(DDGRollback(&dds_session));

		CLEAR_STATUS(DDFSemClose(&dds_semaphore));
	}
return(err);
}
Пример #2
0
/*
** Name: WSMReleaseUsrSession() - Release user session
**
** Description:
**
** Inputs:
**	USR_PSESSION *usr_session
**
** Outputs:
**
** Returns:
**	GSTATUS	:	GSTAT_OK
**
** Exceptions:
**	None
**
** Side Effects:
**	None
**
** History:
**      03-Jul-98 (fanra01)
**          Enable removal of user session instance for ima.
*/
GSTATUS
WSMReleaseUsrSession(
	USR_PSESSION usr_session) 
{
	GSTATUS err = GSTAT_OK;
	
	if (usr_session == NULL)
		return(GSTAT_OK);

	err = DDFSemOpen(&usrSessSemaphore, TRUE);
	if (err == GSTAT_OK)
	{
		if (usr_session->requested_counter > 0)
			usr_session->requested_counter--;

		if (usr_session->timeout_end == 0)
		{
			if (usr_session->requested_counter == 0)
				CLEAR_STATUS(WSMRemoveUsrSession(usr_session));
		}
		else
			err = WSMSetTimeout(usr_session);

		CLEAR_STATUS(DDFSemClose(&usrSessSemaphore));
	}
return(err);
}
Пример #3
0
GSTATUS 
DDSCloseDB (PTR		*cursor) 
{
	GSTATUS err = GSTAT_OK;

	err = DDGClose(&dds_session);

	if (err == GSTAT_OK)
		err = DDGCommit(&dds_session);
	else
		CLEAR_STATUS(DDGRollback(&dds_session));
	CLEAR_STATUS(DDFSemClose(&dds_semaphore));
return(err);
}
Пример #4
0
/*
** Name: FWrite_Fvalue
**
** Decription:
**      The input buffer should be written to file.
**
** Inputs:
**      sess        ice session structure
**      line        pointer to the current line
**      linelen     length of the line
**
** Outputs:
**      pos         number of characters handled.
**
** Return:
**      GSTAT_OK    success
**      other       failure
**
** History:
**      23-Oct-98 (fanra01)
**          Created.
*/
static GSTATUS
FWrite_Fvalue (WTS_SESSION* sess, char* line, i4  linelen, i4 * pos)
{
    GSTATUS     err = GSTAT_OK;
    PWTS_UPLOAD load= sess->load;
    i4          count =0;

    if ((err = WCSWrite(linelen, line, &count, sess->list->file)) == GSTAT_OK)
    {
        load->state = US_FWRITE;
    }
    else
    {
        UPLOADED_FILE*  upload = sess->list;

        if (upload != NULL)
        {
            sess->list = upload->next;
            CLEAR_STATUS(WCSClose(upload->file));
            MEfree ((PTR)upload);
        }
    }
    *pos += count;
    return (err);
}
Пример #5
0
/*
** Name: WSMCleanUserTimeout() - Clean the timeout system
**
** Description:
**
** Inputs:
**
** Outputs:
**
** Returns:
**	GSTATUS	:	GSTAT_OK
**
** Exceptions:
**	None
**
** Side Effects:
**	None
**
** History:
*/
GSTATUS
WSMCleanUserTimeout() 
{
	GSTATUS err = GSTAT_OK;
	USR_PSESSION tmp = oldest;
	USR_PSESSION next;
	i4 limit = TMsecs();

	err = DDFSemOpen(&usrSessSemaphore, TRUE);
	if (err == GSTAT_OK)
	{
		while (tmp != NULL &&
		   tmp->timeout_end < limit)
		{
			next = tmp->timeout_next; 
			CLEAR_STATUS(WSMRemoveUsrSession(tmp));
			tmp = next;
		}
		CLEAR_STATUS(DDFSemClose(&usrSessSemaphore));
	}
return(err);
}
Пример #6
0
GSTATUS 
DDSCreateDB (
    char *name,
    char *dbname,
    u_i4 dbuser_id,
    i4 flags,
    char *comment,
    u_i4 *id)
{
    GSTATUS err = GSTAT_OK;

    err = DDFSemOpen(&dds_semaphore, TRUE);
    if (err == GSTAT_OK)
    {
        err = DDSPerformDBId(id);
        if (err == GSTAT_OK)
        {
            err = DDGInsert(
                    &dds_session,
                    DDS_OBJ_DB,
                    "%d%s%s%d%d%s",
                    id,
                    name,
                    dbname,
                    &dbuser_id,
                    &flags,
                    comment);
            if (err == GSTAT_OK)
                err = DDSMemCreateDB( *id, name, dbname, dbuser_id, flags );

            if (err == GSTAT_OK)
                err = DDGCommit(&dds_session);
            else
                CLEAR_STATUS(DDGRollback(&dds_session));
        }
        CLEAR_STATUS(DDFSemClose(&dds_semaphore));
    }
return(err);
}
Пример #7
0
GSTATUS 
DDSDeleteDB (
	u_i4 id) 
{
	GSTATUS err = GSTAT_OK;

	err = DDFSemOpen(&dds_semaphore, TRUE);
	if (err == GSTAT_OK) 
	{
		err = DDGDelete(&dds_session, DDS_OBJ_DB, "%d", &id);

		if (err == GSTAT_OK) 
			err = DDSMemDeleteDB(id);

		if (err == GSTAT_OK) 
			err = DDGCommit(&dds_session);
		else 
			CLEAR_STATUS(DDGRollback(&dds_session));

		CLEAR_STATUS(DDFSemClose(&dds_semaphore));
	}
return(err);
}
Пример #8
0
GSTATUS 
DDSRetrieveDB (
	u_i4	id, 
	char	**name, 
	char	**dbname, 
	u_i4	**dbuser_id, 
	i4 	**flags,
	char	**comment) 
{
	GSTATUS err = GSTAT_OK;

	err = DDFSemOpen(&dds_semaphore, TRUE);
	if (err == GSTAT_OK) 
	{
		err = DDGKeySelect(
				&dds_session, 
				DDS_OBJ_DB, 
				"%d%s%s%d%d%s",
				&id,
				name, 
				dbname, 
				dbuser_id, 
				flags, 
				comment);

		if (err == GSTAT_OK)
			err = DDGClose(&dds_session);

		if (err == GSTAT_OK)
			err = DDGCommit(&dds_session);
		else
			CLEAR_STATUS(DDGRollback(&dds_session));

		CLEAR_STATUS(DDFSemClose(&dds_semaphore));
	}
return(err);
}
Пример #9
0
/*
** Name: WSMRemoveUsrSession() - remove a session from the hashtable and the timeout list.
**
** Description:
**
** Inputs:
**	USR_PSESSION*	: user session 
**
** Outputs:
**
** Returns:
**	GSTATUS	:	GSTAT_OK
**
** Exceptions:
**	None
**
** Side Effects:
**	None
**
** History:
**      03-Jun-1999 (fanra01)
**          Add removal of user session variable semaphore.
*/
GSTATUS 
WSMRemoveUsrSession ( 
    USR_PSESSION    session)
{
    GSTATUS err = GSTAT_OK;
    USR_PSESSION tmp;

    CLEAR_STATUS(WPSCleanFilesTimeout (session->name));

    CLEAR_STATUS(DDFdelhash(
                        usr_sessions,
                        session->name,
                        STlength(session->name),
                        (PTR*) &tmp));

    CLEAR_STATUS(WSMRemoveTimeout(session));

    if (session->requested_counter <= 0)
    {
        while (session->transactions != NULL)
            CLEAR_STATUS( WSMRollback(session->transactions, FALSE) );

        if (session->name != NULL)
            usr_sess_detach(session->name);

        if (session->userid != SYSTEM_ID)
            CLEAR_STATUS(DDSReleaseUser(session->userid));

        err = DDFSemOpen(&session->usrvarsem, TRUE);
        if (err == GSTAT_OK)
        {
            CLEAR_STATUS(WSFCleanVariable(session->vars));
            CLEAR_STATUS(DDFrmhash(&session->vars));
            CLEAR_STATUS(DDFSemClose(&session->usrvarsem));
        }
        CLEAR_STATUS(DDFSemDestroy(&session->usrvarsem));
        MEfreetag(session->mem_tag);
        MEfree((PTR)session);
    }
return(err);
}
Пример #10
0
GSTATUS 
DDSGetDBName(
	u_i4	id, 
	char** name)
{
	GSTATUS err = GSTAT_OK;

	err = DDFSemOpen(&dds_semaphore, FALSE);
	if (err == GSTAT_OK) 
	{
		err = DDSMemGetDBName(id, name);
		CLEAR_STATUS(DDFSemClose(&dds_semaphore));
	}
return(err);
}
Пример #11
0
GSTATUS 
DDSUpdateDB (
	u_i4	id, 
	char	*name, 
	char	*dbname, 
	u_i4	dbuser_id, 
	i4 flags,
	char *comment) 
{
	GSTATUS err = GSTAT_OK;

	err = DDFSemOpen(&dds_semaphore, TRUE);
	if (err == GSTAT_OK) 
	{
		err = DDGUpdate(
					&dds_session, 
					DDS_OBJ_DB, 
					"%s%s%d%d%s%d", 
					name, 
					dbname, 
					&dbuser_id, 
					&flags, 
					comment,
					&id);

		if (err == GSTAT_OK)
			err = DDSMemUpdateDB(id, name, dbname, flags, dbuser_id);

		if (err == GSTAT_OK) 
			err = DDGCommit(&dds_session);
		else 
			CLEAR_STATUS(DDGRollback(&dds_session));
		CLEAR_STATUS(DDFSemClose(&dds_semaphore));
	}
return(err);
}
Пример #12
0
/*
** Name: FWrite_EBound
**
** Decription:
**      A terminating boundary is recevied during upload of a file.  Indicating
**      the file has completed and should now be closed.
**
** Inputs:
**      sess        ice session structure
**      line        pointer to the current line
**      linelen     length of the line
**
** Outputs:
**      pos         number of characters handled.
**
** Return:
**      GSTAT_OK    success
**      other       failure
**
** History:
**      23-Oct-98 (fanra01)
**          Created.
*/
static GSTATUS
FWrite_EBound (WTS_SESSION* sess, char* line, i4  linelen, i4 * pos)
{
    GSTATUS     err = GSTAT_OK;
    PWTS_UPLOAD load= sess->load;
    UPLOADED_FILE*  upload = sess->list;

    if (upload != NULL)
    {
        sess->list = upload->next;
        CLEAR_STATUS(WCSClose(upload->file));
        MEfree ((PTR)upload);
    }
    load->state = US_END;
    return (err);
}
Пример #13
0
/*
** Name: WSMRequestUsrSession() - Retrieve a user session from the cookie
**
** Description:
**
** Inputs:
**	char*	: cookie
**
** Outputs:
**	USR_PSESSION*	: user session (NULL if doesn't exist)
**
** Returns:
**	GSTATUS	:	GSTAT_OK
**
** Exceptions:
**	None
**
** Side Effects:
**	None
**
** History:
**      04-Oct-2001 (fanra01)
**          Add a test for an invalid session or a session that is no longer
**          in the hash table and return an error.
*/
GSTATUS 
WSMRequestUsrSession (
    char         *cookie,
    USR_PSESSION *session)
{
    GSTATUS err = GSTAT_OK;
    u_i4    i = 0;
    USR_PSESSION tmp = NULL;

    if (cookie != NULL && cookie[0] != EOS)
    {
        err = DDFSemOpen(&usrSessSemaphore, TRUE);
        if (err == GSTAT_OK)
        {
            err = DDFgethash(
                    usr_sessions,
                    cookie,
                    STlength(cookie),
                    (PTR*) &tmp);
            /*
            ** If the object is not in the hash table, raise and error.
            */
            if (tmp == NULL)
            {
                err = DDFStatusAlloc( E_WS0011_WSS_NO_OPEN_SESSION );
            }
            if (tmp != NULL &&
                tmp->timeout_end < TMsecs())
                tmp = NULL;

            if (tmp != NULL)
                tmp->requested_counter++;

            CLEAR_STATUS(DDFSemClose(&usrSessSemaphore));
        }
    }

    *session = tmp;
    return(err);
}
Пример #14
0
/*
** Name: WTSCloseUpLoad() - 
**
** Description:
**
** Inputs:
**
** Outputs:
**
** Returns:
**	GSTATUS	:	GSTAT_OK
**
** Exceptions:
**	None
**
** Side Effects:
**	None
**
** History:
*/
GSTATUS
WTSCloseUpLoad(
	WTS_SESSION	*session)
{
    GSTATUS     err = GSTAT_OK;
    PWTS_UPLOAD next = session->load;
    PWTS_UPLOAD load;
    UPLOADED_FILE*  upload;

    session->load = NULL;
    while (next != NULL)
    {
        load = next;
        if (load->state != US_END)
        {
            upload = session->list;
            if (upload != NULL)
            {
                session->list = upload->next;
                CLEAR_STATUS(WCSClose(upload->file));
                MEfree ((PTR)upload);
            }
            /*
            **  Trace untimely end
            */
        }
        if (load->buf     ) MEfree (load->buf     );
        if (load->start   ) MEfree (load->start   );
        if (load->end     ) MEfree (load->end     );
        if (load->varname ) MEfree (load->varname );
        if (load->icefname) MEfree (load->icefname);
        if (load->filename) MEfree (load->filename);
        if (load->type    ) MEfree (load->type    );
        if (load->encode  ) MEfree (load->encode  );
        next = load->next;
        MEfree ((PTR)load);
    }
    return(err);
}
Пример #15
0
/*
** Name: WSMReleaseActSession() - Clean an active session
**
** Description:
**
** Inputs:
**	ACT_PSESSION* : active session
**
** Outputs:
**	ACT_PSESSION* : active session
**
** Returns:
**	GSTATUS	:	GSTAT_OK
**
** Exceptions:
**	None
**
** Side Effects:
**	None
**
** History:
**      03-Jul-98 (fanra01)
**          Rename wts_sess_detach to act_sess_detach.
**      26-Aug-2003 (fanra01)
**          Removed explicit memory frees which are part of tagged memory
**          free.
*/
GSTATUS 
WSMReleaseActSession(
	ACT_PSESSION	*act_session) 
{
	GSTATUS err = GSTAT_OK;
	ACT_PSESSION session = *act_session;
	if (session != NULL)
	{
		*act_session = NULL;
		if (session->name != NULL)
			act_sess_detach(session->name);

		err = DDFSemOpen(&actSessSemaphore, TRUE);
		if (err == GSTAT_OK)
		{
			if (session->previous != NULL)
				session->previous->next = session->next;
			else
				active_sessions = session->next;

			if (session->next != NULL)
				session->next->previous = session->previous;
			CLEAR_STATUS(DDFSemClose(&actSessSemaphore));
		}

		CLEAR_STATUS( WSMCleanUserTimeout() );
		CLEAR_STATUS( WPSCleanFilesTimeout(NULL) );
		CLEAR_STATUS( DBCleanTimeout() );

		CLEAR_STATUS(WSFCleanVariable(session->vars));
		CLEAR_STATUS (DDFrmhash(&session->vars));
		MEfreetag(session->mem_tag);

		MEfree((PTR)session);
	}
return(err);
}
Пример #16
0
/*
** Name: WMODocument() - insert, update, delete, select and retrieve documents
**
** Description:
**
** Inputs:
**	ACT_PSESSION	: active session
**	char*[]			: list of parameters
**
** Outputs:
**	bool*			: TRUE is there is something to print
**	PTR*			: cursor pointer (if NULL means no more information)
**
** Returns:
**	GSTATUS	:	GSTAT_OK
**
** Exceptions:
**	None
**
** Side Effects:
**	None
**
** History:
**      28-Apr-2000 (fanra01)
**          Add additional scheme parameter to WPSrequest.
**      30-Oct-2001 (fanra01)
**          Replace ambiguous profile error message with authorization
**          and permission messages.
*/
GSTATUS
WMODocument (
    ACT_PSESSION act_session,
    char* params[],
    bool* print,
    PTR*  user_info)
{
    GSTATUS        err = GSTAT_OK;
    u_i4            action;
    u_i4            unit_id = 0;
    u_i4            ext_loc = 0;
    i4        flag = 0;
    u_i4            owner = 0;
    u_i4            *pid = NULL;
    u_i4            *punit_id = NULL;
    i4        *pflag = NULL;
    u_i4            *powner = NULL;
    u_i4            *pext_loc = NULL;
    char            *ext_file;
    char            *ext_suffix;
    bool            accessible = TRUE;
    WPS_FILE    *cache = NULL;
    bool        status;

    *print = TRUE;
    if (*user_info == NULL)
    {
    G_ASSERT (params[0] == NULL || params[0][0] == EOS, E_WS0059_WSF_BAD_PARAM);

    if (act_session->user_session == NULL)
    {
        *print = FALSE;
        err = DDFStatusAlloc( E_WS0101_WSS_UNAUTHORIZED_USE );
        return(err);
    }

    if (err == GSTAT_OK)
        err = WMOTypeAction(params[0], &action);
    }
    else
    action = WSS_ACTION_TYPE_SEL;

    if (err == GSTAT_OK)
    if (action == WSS_ACTION_TYPE_SEL)
    {
        if (*user_info == NULL)
        {
        err = WCSOpenDocument(user_info);
        if (err == GSTAT_OK)
            err = GAlloc((PTR*)&params[1], NUM_MAX_INT_STR, FALSE);
        }

        if (err == GSTAT_OK)
        {
        err = WCSGetDocument(
                     user_info,
                     &pid,
                     &punit_id,
                     &params[4],
                     &params[5],
                     (u_i4**)&pflag,
                     &powner,
                     &pext_loc,
                     &params[12],
                     &params[13]);

        if (err != GSTAT_OK || *user_info == NULL)
        {
            CLEAR_STATUS (WCSCloseDocument(user_info));
            *print = FALSE;
        }
        else
        {
            err = WSSDocAccessibility(act_session->user_session, *pid, WSF_READ_RIGHT, &accessible);
            if (err == GSTAT_OK && accessible == TRUE)
            {
            WSF_CVNA(err, *pid, params[1]);
            unit_id = *punit_id;
            flag = *pflag;
            ext_loc= *pext_loc;
            }
            else
            *print = FALSE;
        }
        }
    }
    else
    {
        u_i4        id;

        switch(action)
        {
        case WSS_ACTION_TYPE_DEL:
        case WSS_ACTION_TYPE_RET:
        G_ASSERT (params[1] == NULL || CVan(params[1], (i4*)&id) != OK, E_WS0059_WSF_BAD_PARAM);
        if (action == WSS_ACTION_TYPE_DEL)
        {
            err = WSSDocAccessibility(act_session->user_session, id, WSF_DEL_RIGHT, &accessible);

            if (err == GSTAT_OK)
            if (accessible == TRUE)
                err = WCSDeleteDocument (id);
            else
                err = DDFStatusAlloc( E_WS0065_WSF_UNAUTH_ACCESS );
        }
        else
        {
            err = WSSDocAccessibility(act_session->user_session, id, WSF_READ_RIGHT, &accessible);
            if (err == GSTAT_OK && accessible == TRUE)
            {
            err = WCSRetrieveDocument (
                           id,
                           &punit_id,
                           &params[4],
                           &params[5],
                           (u_i4**)&pflag,
                           &powner,
                           &pext_loc,
                           &params[12],
                           &params[13]);

            if (err == GSTAT_OK && punit_id != NULL)
            {
                unit_id = *punit_id;
                flag = *pflag;
                ext_loc= *pext_loc;
                owner = *powner;

                if (err == GSTAT_OK)
                {
                err = WPSRequest(
                         act_session->user_session->name,
                         act_session->scheme,
                         act_session->host,
                         act_session->port,
                         NULL,
                         unit_id,
                         params[4],
                         params[5],
                         &cache,
                         &status);

                if (err == GSTAT_OK)
                {
                    if (status == WCS_ACT_LOAD)
                    {
                    if ((flag & WCS_EXTERNAL) == FALSE)
                        err = WCSExtractDocument (cache->file);

                    if (err == GSTAT_OK)
                        CLEAR_STATUS(WCSLoaded(cache->file, TRUE))
                        else
                            CLEAR_STATUS(WCSLoaded(cache->file, FALSE))
                        }

                    if (err == GSTAT_OK)
                    {
                    char *tmp = (cache->url == NULL) ? WSF_UNDEFINED : cache->url;
                    u_i4 length = STlength(tmp) + 1;
                    err = GAlloc((PTR*)&params[10], length, FALSE);
                    if (err == GSTAT_OK)
                        MECOPY_VAR_MACRO(tmp, length, params[10]);
                    }
                    CLEAR_STATUS(WPSRelease(&cache));
                }
                }
            }
            }
            else
Пример #17
0
/*
** Name: Disp_Fname
**
** Decription:
**      Takes the string
**        content-disposition: form-data; name="xxxx" filename="yyyy"
**      opens an ice temporary file and sets items in the variable string
**      as xxxx=icetempfile.
**
** Inputs:
**      sess        ice session structure
**      line        pointer to the current line
**      linelen     length of the line
**
** Outputs:
**      pos         number of characters handled.
**
** Return:
**      GSTAT_OK    success
**      other       failure
**
** History:
**      23-Oct-98 (fanra01)
**          Created.
*/
static GSTATUS
Disp_Fname (WTS_SESSION* sess, char* line, i4  linelen, i4 * pos)
{
    GSTATUS         err = GSTAT_OK;
    PWTS_UPLOAD     load= sess->load;
    char*           p = line + *pos;
    char*           name;
    i4              remain = linelen - *pos;
    i4              i = 0;
    i4              j = 0;
    UPLOADED_FILE*  upload;

    if (STbcompare ("name", 4, p, 0, TRUE) == 0)
    {
        /*
        ** Find the first quote after name
        */
        while ((*p != '\"') && (i < remain))
        {
            CMbyteinc(i,p);
            CMnext(p);
        }
        CMbyteinc(i,p);     /* skip the quote */
        CMnext(p);
        name= p;
        while ((*p != '\"') && (i < remain))
        {
            j+=CMbytecnt(p);
            CMbyteinc(i,p);
            CMnext(p);
        }
        CMbyteinc(i,p);
        CMnext(p);          /* skip the quote */
        while ((*p != ';') && (i < remain))
        {
            CMbyteinc(i,p);
            CMnext(p);
        }
        CMbyteinc(i,p);
        CMnext(p);          /* skip the semi colon */
        /*
        ** Allocate space for the variable name a '=' character and an EOS
        */
        if ((err = GAlloc (&load->varname, j+2, FALSE)) == GSTAT_OK)
        {
            MEfill (j+2, 0, load->varname);
            MECOPY_VAR_MACRO (name, j, load->varname);
            STcat (load->varname, "=");
        }
        while (CMwhite(p) && (i < remain))
        {
            CMbyteinc(i, p);
            CMnext(p);
        }
        if (STbcompare ("filename", 8, p, 0, TRUE) == 0)
        {
            /*
            ** Find the first quote after filename
            */
            while ((*p != '\"') && (i < remain))
            {
                CMbyteinc(i,p);
                CMnext(p);
            }
            CMbyteinc(i,p);
            CMnext(p);          /* skip the quote */
            name= p;
            while ((*p != '\"') && (i < remain))
            {
                j+=CMbytecnt(p);
                CMbyteinc(i,p);
                CMnext(p);
            }
            CMbyteinc(i,p);
            CMnext(p);          /* skip the quote */
            /*
            ** Allocate space for the filename and an EOS
            */
            if ((err = GAlloc (&load->filename, j+1, FALSE)) == GSTAT_OK)
            {
                MEfill (j+1, 0, load->filename);
                MECOPY_VAR_MACRO (name, j, load->filename);
                asct_trace( ASCT_LOG )( ASCT_TRACE_PARAMS,
                    "Upload session=%s file=%s",
                    ((sess->act_session != NULL) ?
                        ((sess->act_session->user_session) ?
                            sess->act_session->user_session->name : "None")
                    : "None"),
                    load->filename );
            }
            *pos += i;
            err = G_ME_REQ_MEM(0, upload, UPLOADED_FILE, 1);
            if (err == GSTAT_OK)
            {
                bool status;

                err = WCSRequest( 0, NULL, SYSTEM_ID, NULL, WSF_ICE_SUFFIX,
                    &upload->file, &status);
                if (err == GSTAT_OK)
                {
                    CLEAR_STATUS(WCSLoaded(upload->file, TRUE));
                    err = WCSOpen (upload->file, "w", SI_BIN, 0);
                    if (err == GSTAT_OK)
                    {
                        i4  nlen = STlength (load->varname);
                        i4  flen = STlength(upload->file->info->path);

                        err = GAlloc(&load->icefname, flen + 1, FALSE);
                        if (err == GSTAT_OK)
                        {

                            MECOPY_VAR_MACRO( upload->file->info->path, flen,
                                load->icefname);

                            err = GAlloc((PTR*)&sess->variable,
                                sess->vlen + nlen + flen + 2, TRUE);
                            if (err == GSTAT_OK && sess->variable != NULL)
                            {
                                if (sess->vlen > 0)
                                {
                                    sess->variable[sess->vlen++] = '&';
                                }
                                MECOPY_VAR_MACRO(load->varname, nlen,
                                    sess->variable + sess->vlen);
                                sess->vlen += nlen;
                                if (flen)
                                {
                                    MECOPY_VAR_MACRO(load->icefname, flen,
                                        sess->variable + sess->vlen);
                                    sess->vlen += flen;
                                    upload->next = sess->list;
                                    sess->list = upload;
                                }
                                sess->variable[sess->vlen] = EOS;
                            }
                        }
                    }
                    else
                    {
                        CLEAR_STATUS(WCSRelease(&upload->file));
                    }
                }
            }
            load->state = US_FILE;
        }
        else
        {
            HandlerException (sess, line, linelen, pos);
        }
    }
    else
    {
        HandlerException (sess, line, linelen, pos);
    }
    return (err);
}
Пример #18
0
GSTATUS 
DDSCloseUserDB (PTR *cursor) 
{
	CLEAR_STATUS(DDFSemClose(&dds_semaphore));
return(GSTAT_OK);
}