int32_t close_one_object(void *para, object_info_t *obj_info)
{
    ASSERT(obj_info != NULL);

    if (obj_info->objid < RESERVED_OBJ_ID)  // do not close the system object
    {
        return 0;
    }

    close_object(obj_info);
    return 0;
}
Пример #2
0
Файл: XlcDL.c Проект: iquiw/xsrc
static Bool
_XDynamicUnRegisterIMInstantiateCallback(
    XLCd	 lcd,
    Display	*display,
    XrmDatabase	 rdb,
    char	*res_name,
    char        *res_class,
    XIDProc	 callback,
    XPointer	 client_data)
{
    char lc_dir[BUFSIZE];
    const char *lc_name;
    dynamicUnregisterProcp im_unregisterIM = (dynamicUnregisterProcp)NULL;
    Bool ret_flag = False;
    int count;
    XI18NObjectsList objects_list = xi18n_objects_list;
#if defined(hpux)
    int getsyms_cnt, i;
    struct shl_symbol *symbols;
#endif

    lc_name = lcd->core->name;
    if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return False;

    count = lc_count;
    for (; count-- > 0; objects_list++) {
        if (objects_list->type != XIM_OBJECT ||
                strcmp(objects_list->locale_name, lc_name)) continue;

        if (!objects_list->refcount) /* Must already be opened */
            continue;

        im_unregisterIM = (dynamicUnregisterProcp)fetch_symbol(objects_list,
                          objects_list->im_unregister);

        if (!im_unregisterIM) continue;
        ret_flag = (*im_unregisterIM)(lcd, display, rdb,
                                      res_name, res_class,
                                      callback, client_data);
        if (ret_flag) {
            close_object (objects_list); /* opened in RegisterIMInstantiateCallback */
            break;
        }
    }
    return (Bool)ret_flag;
}
Пример #3
0
int hfree(handle_t h) {
  struct object *o;
  int rc;

  o = hlookup(h);
  if (!o) return -EBADF;
  if (HPROT(htab[h])) return -EACCES;

  htab[h] = hfreelist;
  hfreelist = h;

  if (--o->handle_count > 0) return 0;
  
  rc = close_object(o);

  if (o->lock_count == 0) destroy_object(o);

  return rc;
}
Пример #4
0
tERROR cTmProfile::SetTaskImpersonation(bool bReset)
{
	if( !bReset )
	{
		close_object(m_token);
		m_token = m_request->m_token;
		m_request->m_token = NULL;
	}

	if( !m_token )
		return errOK;

	if( bReset )
		return m_token->Revert();

	cTaskRunAs& as = m_cfg.m_runas;
	if( !as.m_enable )
		return m_token->Impersonate();

	PR_TRACE((m_tm, prtIMPORTANT, "tm\t%S - try run as %S", m_sName.data(), as.m_sAccount.data()));

	tERROR err = errOK;
	cStrObj strPassword = as.m_sPassword;
	if( m_tm->m_hCryptoHelper )
	{
		err = m_tm->m_hCryptoHelper->CryptPassword(&cSerString(strPassword), PSWD_DECRYPT);
		if( PR_FAIL(err) )
		{
			PR_TRACE((m_tm, prtERROR, "tm\t%S - cannot decrypt password (%terr)", m_sName.data(), err));
			return err;
		}
	}

	err = m_token->Logon(cAutoString(as.m_sAccount), cAutoString(strPassword));
	strPassword.clean();

	if( PR_FAIL(err) )
		PR_TRACE((m_tm, prtFATAL, "tm\t%S - task cannot be impersonated (%terr) !!!!!!!!!!!!", m_sName.data(), err));
	else
		m_bImpersonated = cTRUE;

	return err;
}
Пример #5
0
Файл: XlcDL.c Проект: iquiw/xsrc
XLCd
_XlcDynamicLoad(const char *lc_name)
{
    XLCd lcd = (XLCd)NULL;
    dynamicLoadProc lc_loader = (dynamicLoadProc)NULL;
    int count;
    XI18NObjectsList objects_list;
    char lc_dir[BUFSIZE], lc_lib_dir[BUFSIZE];

    if (lc_name == NULL) return (XLCd)NULL;

    if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL)
        return (XLCd)NULL;
    if (_XlcLocaleLibDirName(lc_lib_dir, BUFSIZE, lc_name) == NULL)
        return (XLCd)NULL;

    resolve_object(lc_dir, lc_name);
    resolve_object(lc_lib_dir, lc_name);

    objects_list = xi18n_objects_list;
    count = lc_count;
    for (; count-- > 0; objects_list++) {
        if (objects_list->type != XLC_OBJECT ||
                strcmp(objects_list->locale_name, lc_name)) continue;
        if (!open_object (objects_list, lc_dir) && \
                !open_object (objects_list, lc_lib_dir))
            continue;

        lc_loader = (dynamicLoadProc)fetch_symbol (objects_list, objects_list->open);
        if (!lc_loader) continue;
        lcd = (*lc_loader)(lc_name);
        if (lcd != (XLCd)NULL) {
            break;
        }

        close_object (objects_list);
    }
    return (XLCd)lcd;
}
Пример #6
0
Файл: XlcDL.c Проект: iquiw/xsrc
static XOM
_XDynamicOpenOM(XLCd lcd, Display *display, XrmDatabase rdb,
                _Xconst char *res_name, _Xconst char *res_class)
{
    XOM om = (XOM)NULL;
    int count;
    char lc_dir[BUFSIZE];
    char *lc_name;
    dynamicIOpenProcp om_openOM = (dynamicIOpenProcp)NULL;
    XI18NObjectsList objects_list = xi18n_objects_list;
#if defined(hpux)
    int getsyms_cnt, i;
    struct shl_symbol *symbols;
#endif

    lc_name = lcd->core->name;

    if (_XlcLocaleLibDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XOM)0;

    count = lc_count;
    for (; count-- > 0; objects_list++) {
        if (objects_list->type != XOM_OBJECT ||
                strcmp(objects_list->locale_name, lc_name)) continue;
        if (!open_object (objects_list, lc_dir))
            continue;

        om_openOM = (dynamicIOpenProcp)fetch_symbol(objects_list, objects_list->open);
        if (!om_openOM) continue;
        om = (*om_openOM)(lcd, display, rdb, res_name, res_class);
        if (om != (XOM)NULL) {
            break;
        }
        close_object(objects_list);
    }
    return (XOM)om;
}
Пример #7
0
tERROR cTmProfile::UnlockTask()
{
	if( !m_lockRef )
		return errUNEXPECTED;

	if( --m_lockRef && !m_bFailOver )
		return (m_lockRef > 1) ? errOBJECT_ALREADY_EXISTS : errOK;

	m_taskRef.lock(false);
	m_taskObj = NULL;
	m_remoteTask = NULL;
	m_taskRef.unlock(false);

	if( m_task )
	{
		if( m_cfg.m_bRemote )
			m_tm->DestroyRemoteTask(m_task);
		else
			m_task->sysCloseObject();

		m_task = NULL;
		m_processId = PR_PROCESS_LOCAL;
	}

	close_object(m_token);

	PR_TRACE((m_tm, prtIMPORTANT, "tm\t%S - task closed (ref=%d)", m_sName.data(), m_ref));

	LockTaskReports(false);

	if( isService() && m_bClone )
		Delete();

	Release();
	return errOK;
}