Skip to content
Snippets Groups Projects
Commit 764b4dfb authored by tewk's avatar tewk
Browse files

Fixed revoke credential problem.

If you revoke a credential that has not been used a credential_state object needs to be created
parent 0ab2332e
No related branches found
No related tags found
No related merge requests found
......@@ -29,6 +29,7 @@ static int is_credential_still_valid ( slurm_job_credential_t * credential , Lis
static int init_credential_state ( credential_state_t * credential_state , slurm_job_credential_t * credential ) ;
void free_credential_state ( void * credential_state ) ;
static int insert_credential_state ( slurm_job_credential_t * credential , List list ) ;
static int insert_revoked_credential_state ( revoke_credential_msg_t * revoke_msg , List list ) ;
int sign_credential ( slurm_ssl_key_ctx_t * sign_ctx , slurm_job_credential_t * credential )
{
......@@ -121,8 +122,8 @@ int revoke_credential ( revoke_credential_msg_t * revoke_msg , List list )
return SLURM_SUCCESS ;
}
}
slurm_seterrno ( ESLURMD_CREDENTIAL_TO_EXPIRE_DOESNOT_EXIST ) ;
return SLURM_FAILURE ;
insert_revoked_credential_state ( revoke_msg , list ) ;
return SLURM_SUCCESS ;
}
int is_credential_still_valid ( slurm_job_credential_t * credential , List list )
......@@ -207,3 +208,18 @@ int insert_credential_state ( slurm_job_credential_t * credential , List list )
list_append ( list , credential_state ) ;
return SLURM_SUCCESS ;
}
int insert_revoked_credential_state ( revoke_credential_msg_t * revoke_msg , List list )
{
time_t now = time ( NULL ) ;
credential_state_t * credential_state ;
credential_state = xmalloc ( sizeof ( slurm_job_credential_t ) ) ;
credential_state -> job_id = revoke_msg -> job_id ;
credential_state -> expiration = revoke_msg -> expiration_time ;
credential_state -> revoked = true ;
credential_state -> revoke_time = now ;
list_append ( list , credential_state ) ;
return SLURM_SUCCESS ;
}
......@@ -487,6 +487,7 @@ typedef struct return_code_msg {
typedef struct revoke_credential_msg
{
uint32_t job_id ;
time_t expiration_time;
char signature[SLURM_SSL_SIGNATURE_LENGTH] ;
} revoke_credential_msg_t ;
......
......@@ -731,6 +731,7 @@ void pack_revoke_credential_msg ( revoke_credential_msg_t* msg , void ** buffer
assert ( msg != NULL );
pack32( msg->job_id, buffer, length ) ;
pack32( ( uint32_t ) msg->expiration_time, buffer, length ) ;
packmem( msg->signature, SLURM_SSL_SIGNATURE_LENGTH , buffer, length ) ;
}
......@@ -744,6 +745,7 @@ int unpack_revoke_credential_msg ( revoke_credential_msg_t** msg , void ** buffe
return ENOMEM;
unpack32( &(tmp_ptr->job_id), buffer, length ) ;
unpack32( &(tmp_ptr->expiration_time), buffer, length ) ;
unpackmem( tmp_ptr->signature, & uint16_tmp , buffer, length ) ;
*msg = tmp_ptr;
......
......@@ -710,6 +710,7 @@ load_job_state ( void )
#ifdef HAVE_LIBELAN3
if (buffer_size < (2 * sizeof (uint16_t)))
break;
qsw_alloc_jobinfo(&step_ptr->qsw_job);
qsw_unpack_jobinfo(step_ptr->qsw_job, buf_ptr, &buffer_size);
#endif
safe_unpack16 (&step_flag, &buf_ptr, &buffer_size);
......
......@@ -199,6 +199,7 @@ deallocate_nodes (struct job_record * job_ptr)
last_node_update = time (NULL);
revoke_job_cred.job_id = job_ptr -> job_id;
revoke_job_cred.expiration_time = job_ptr -> details -> credential . expiration_time ;
memset ( (void *)revoke_job_cred.signature, 0, sizeof (revoke_job_cred.signature));
for (i = 0; i < node_record_count; i++) {
......
......@@ -511,9 +511,9 @@ void slurm_rpc_revoke_credential ( slurm_msg_t * msg )
/* return result */
if (error_code)
{
error ("slurmd_req: error %d, time=%ld",
error ("slurmd_req: error %m errno %d, time=%ld",
error_code, (long) (clock () - start_time));
slurm_send_rc_msg ( msg , error_code );
slurm_send_rc_msg ( msg , errno );
}
else
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment