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; }
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; }
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; }
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; }
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; }
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; }
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; }