bool OsProc::JobExit( void ) { int reason; dprintf( D_FULLDEBUG, "Inside OsProc::JobExit()\n" ); if( requested_exit == true ) { if( Starter->jic->hadHold() || Starter->jic->hadRemove() ) { reason = JOB_KILLED; } else { reason = JOB_NOT_CKPTED; } } else if( dumped_core ) { reason = JOB_COREDUMPED; } else if( job_not_started ) { reason = JOB_NOT_STARTED; } else { reason = JOB_EXITED; } #if defined ( WIN32 ) /* If we loaded the user's profile, then we should dump it now */ if ( owner_profile_.loaded () ) { owner_profile_.unload (); /* !!!! DO NOT DO THIS IN THE FUTURE !!!! */ owner_profile_.destroy (); /* !!!! DO NOT DO THIS IN THE FUTURE !!!! */ } priv_state old = set_user_priv (); HANDLE user_token = priv_state_get_handle (); ASSERT ( user_token ); // Check USE_VISIBLE_DESKTOP in condor_config. If set to TRUE, // then removed our users priveleges from the visible desktop. if (param_boolean_crufty("USE_VISIBLE_DESKTOP", false)) { /* at this point we can revoke the user's access to the visible desktop */ RevokeDesktopAccess ( user_token ); } set_priv ( old ); #endif return Starter->jic->notifyJobExit( exit_status, reason, this ); }
/* returns TRUE if the internals were correctly initialized; otherwise, FALSE. This can be called multiple times, in case of a reconfig. */ BOOL OwnerProfile::update () { dprintf ( D_FULLDEBUG, "In OwnerProfile::update()\n" ); priv_state priv = PRIV_UNKNOWN; BOOL ok = TRUE; __try { /* do this as the user, so we get their information. */ priv = set_user_priv (); ZeroMemory ( &user_profile_, sizeof ( PROFILEINFO ) ); user_token_ = priv_state_get_handle (); user_name_ = get_user_loginname (); domain_name_ = "."; if ( NULL != profile_template_ ) { free ( profile_template_ ); profile_template_ = NULL; } if ( NULL != profile_cache_ ) { free ( profile_cache_ ); profile_cache_ = NULL; } /* we always assume there is are fresh directorys in the configuration file(s) */ profile_template_ = param ( PARAM_PROFILE_TEMPLATE ); profile_cache_ = param ( PARAM_PROFILE_CACHE ); } __finally { /* return to previous privilege level */ set_priv ( priv ); } return ok; }